Below are the licenses for components included in the binary distribution.

------------------------------------------------------------------------------------------

lib/external/commons-collection.jar (commons-collections-3.0.tar.gz)

This product bundles Apache Commons Collections available under a
Apache Software License, Version 1.1. For details, 
see lib/external/commons-collections-LICENSE.txt
       
------------------------------------------------------------------------------------------

lib/external/commons-discovery.jar (commons-discovery-0.2.tar.gz)

This product bundles Apache Commons Discovery available under a
Apache Software License, Version 1.1. For details,
see lib/external/commons-collections-LICENSE.txt

------------------------------------------------------------------------------------------

lib/external/java-cc.jar (javacc-5.0.tar.gz)

Copyright (c) 2006, Sun Microsystems, Inc.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.
    * 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.
    * Neither the name of the Sun Microsystems, Inc. nor the names of its
      contributors may be used to endorse or promote products derived from
      this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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.

------------------------------------------------------------------------------------------

lib/external/saxon9.jar (saxonb9-1-0-8j.zip)

The contents of these file are subject to the Mozilla Public License Version 1.0 
(the "License"); you may not use these files except in compliance with the License. You 
may obtain a copy of the License at http://www.mozilla.org/MPL/

Software distributed under the License is distributed on an "AS IS" basis, 
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the 
specific language governing rights and limitations under the License.

The Original Code is all Saxon modules labelled with a notice referring to this license.

The Initial Developer of the Original Code is Michael Kay, except where otherwise 
specified in an individual module.

Portions created by other named contributors are copyright as identified in the relevant 
module. All Rights Reserved.

------------------------------------------------------------------------------------------

lib/external/xml-apis.jar

This product bundles documents available under a
W3C document license. For details, see lib/external/LICENSE.dom-documentation.txt

This product bundles software available under a
W3C software license. For details, see lib/external/LICENSE.dom-software.txt

This produce bundles SAX2 available under a Public Domain license.
For more details see lib/external/LICENSE.sax.txt

------------------------------------------------------------------------------------------

lib/external/xml-apis-ext.jar

This product bundles documents available under a
W3C document license. For details, see lib/external/LICENSE.dom-documentation.txt

This product bundles software available under a
W3C software license. For details, see lib/external/LICENSE.dom-software.txt

------------------------------------------------------------------------------------------

lib/external/xalanImpl.jar

This product bundles Apache Commons BCEL available under a
Apache Software License, Version 1.1. For details, see lib/external/BCEL.LICENSE.txt

This product bundle CUP Parser Generator available under an (old style)
MIT license. For details, see lib/external/java_cup.LICENSE.txt

This product bundles Jakarta egexp available under a
Apache Software License, Version 1.1. For details,
see lib/external/LICENSE.dom-software.txt

------------------------------------------------------------------------------------------
