
                     EPSON AVASYS PUBLIC LICENSE
                              2005-04-01

  This License applies to any program or other work identified as such
  at the point of distribution and/or in a suitable location in the
  sources for a work including it, for example in a README file.  Such
  sources should include a verbatim copy of this License.

  The "Program", below, refers to any program or work covered by this
  License; each "Licensee" is addressed as "you".

  You may use, reproduce, modify and distribute the Program subject to
  the terms and conditions below.


    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  1. Copyright of the Program is reserved by EPSON AVASYS Corporation
     and its Licensor(s).

  2. You may freely reproduce and distribute verbatim copies of the
     Program in any medium, provided that recipients of such copies
     are given a copy of this License.  Verbatim copies are covered
     by the terms of this License.

  3. You may modify the Program and freely distribute your modified
     version(s), provided that you distribute it under the terms of
     this License.  Recipients of any modified version(s) should be
     provided with a copy of this License.

  4. You shall treat those parts of the Program that were provided
     to you in executable or object code only as the proprietary
     and confidential information of EPSON AVASYS Corporation and its
     Licensor(s).

  5. You may neither reverse engineer, reverse compile, reverse
     assemble nor otherwise attempt to analyse those parts of the
     Program that were provided to you in executable or object code
     only.  However, as a special exception EPSON AVASYS Corporation
     and its Licensor(s) give permission to reverse engineer the
     Program in those cases, and only those cases, where this is
     required by the terms stipulated in the GNU Library General
     Public License or GNU Lesser General Public License, both as
     published by the Free Software Foundation; either version 2 of
     the former license, version 2.1 of the latter license, or (at
     your option) any later version.

  6. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
     WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
     LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING, THE COPYRIGHT
     HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
     WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
     NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
     FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE
     QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
     PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
     SERVICING, REPAIR OR CORRECTION.

  7. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
     MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
     LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
     INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
     INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS
     OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
     YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH
     ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
     ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

                     END OF TERMS AND CONDITIONS
