The following copyright notice applies to all the files provided
in this distribution unless explicitly noted otherwise
(the most notable exception being t1asm.c).

  Copyright (c) 1997-2001 by the AUTHORS:
   Andrew Weeks <ccsaw@bath.ac.uk> 
   Frank M. Siegert <fms@this.net> 
   Mark Heath <mheath@netspace.net.au> 
   Thomas Henlich <thenlich@rcs.urz.tu-dresden.de>
   Sergey Babkin <babkin@users.sourceforge.net>, <sab123@hotmail.com>
   Turgut Uyar <uyar@cs.itu.edu.tr>
   Rihardas Hepas <rch@WriteMe.Com>
   Szalay Tamas <tomek@elender.hu>
   Johan Vromans <jvromans@squirrel.nl>
   Petr Titera <P.Titera@sh.cvut.cz>
   Lei Wang <lwang@amath8.amt.ac.cn>
   Chen Xiangyang <chenxy@sun.ihep.ac.cn>
   Zvezdan Petkovic <z.petkovic@computer.org>
   Rigel <rigel863@yahoo.com>
  All rights reserved.
 
  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions
  are met:
  1. Redistributions of source code must retain the above copyright
     notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright
     notice, this list of conditions and the following disclaimer in the
     documentation and/or other materials provided with the distribution.
  3. All advertising materials mentioning features or use of this software
     must display the following acknowledgement:
       This product includes software developed by the TTF2PT1 Project
       and its contributors.
 
  THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  SUCH DAMAGE.

For the approximate list of the AUTHORS' responsibilities see the
project history.

Other contributions to the project are:

Turgut Uyar <uyar@cs.itu.edu.tr>
 The Unicode translation table for the Turkish language.

Rihardas Hepas <rch@WriteMe.Com>
 The Unicode translation table for the Baltic languages.

Szalay Tamas <tomek@elender.hu>
 The Unicode translation table for the Central European languages.
 
Johan Vromans <jvromans@squirrel.nl>
 The RPM file.

Petr Titera <P.Titera@sh.cvut.cz>
 The Unicode map format with names, the forced Unicode option.

Frank M. Siegert <frank@this.net>
 Port to Windows

Lei Wang <lwang@amath8.amt.ac.cn>
Chen Xiangyang <chenxy@sun.ihep.ac.cn>
 Translation maps for Chinese fonts.

Zvezdan Petkovic <z.petkovic@computer.org>
 The Unicode translation tables for the Cyrillic alphabet.

Rigel <rigel863@yahoo.com>
 Generation of the dvips encoding files, modification to the Chinese maps.

I. Lee Hetherington <ilh@lcs.mit.edu>
 The Type1 assembler (from the package 't1utils'), its full copyright
 notice:
  Copyright (c) 1992 by I. Lee Hetherington, all rights reserved.
  Permission is hereby granted to use, modify, and distribute this program
  for any purpose provided this copyright notice and the one below remain
  intact.
 
