This copyright NOTICE applies to all files in this directory and
subdirectories, unless another copyright notice appears in a given
file or subdirectory.  If you take code from this software to use in
other programs, you must somehow include with it an appropriate
copyright notice that includes the copyright notice and the other
notices above.

This Computer Program is subject to Copyright owned by one or more Authors:

	Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
	Revisions Copyright © 2000-2003 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.

Under a licence agreement with Lucent Technologies Inc. effective 1st March 2000,
Vita Nuova Holdings Limited has the right to determine (within a specified scope)
the form and content of sublicences for this software.

	Free-for-all Licence

The associated software is hereby made available to Recipients with a
royalty-free licence for its use, reproduction, transfer
to other parties and amendment for any purpose not excluding
product development provided that any such use et cetera
shall be deemed to be acceptance of the following conditions:

	(1) Its Recipients shall ensure that this Notice
	and all other copyright notices are reproduced
    upon any copies or amended versions of it;

    (2) Any amended version of it shall be clearly marked to
    show both the nature of and the organisation responsible
    for the relevant amendment or amendments;

    (3) Its agreed onward transfer from a Recipient to another
    party shall be deemed to be that party's acceptance of
	these conditions;

    (4) the Authors give no warranty or assurance as to its
    quality or suitability for any purpose and the Authors accept
    no liability whatsoever in relation to any use to which
    it may be put.

----

This software is also made available under the Lucent Public License
version 1.02; see http://plan9.bell-labs.com/plan9dist/license.html

