=========================================================================
==  NOTICE file corresponding to section 4(d) of the Apache License,   ==
==  Version 2.0.                                                       ==
=========================================================================

The Apache Open For Business Project (Apache OFBiz)
Copyright 2001-2014 The Apache Software Foundation

=========================================================================
==  Apache General Notice (Covers OFBiz and all ASF libraries)         ==
=========================================================================

This product includes software developed by
The Apache Software Foundation (http://www.apache.org/).

=========================================================================
==  Apache Ant Notice                                                  ==
=========================================================================

This product includes also software developed by :
  - the W3C consortium (http://www.w3c.org) ,
  - the SAX project (http://www.saxproject.org)

The <sync> task is based on code Copyright (c) 2002, Landmark
Graphics Corp that has been kindly donated to the Apache Software
Foundation.

=========================================================================
==  Apache Avalon Notice                                               ==
=========================================================================

This product is developed by the Apache Avalon Project.
http://avalon.apache.org

The names "Avalon" and "Merlin" must not be used to endorse or promote
products derived from this software without prior written permission.
For written permission, please contact pmc@avalon.apache.org.

=========================================================================
==  Apache Batik Notice                                                ==
=========================================================================

This software contains code from the World Wide Web Consortium (W3C) for the
Document Object Model API (DOM API) and SVG Document Type Definition (DTD).

This software contains code from the International Organisation for Standardization
for the definition of character entities used in the software's documentation.

=========================================================================
==  Apache Derby Notice                                                ==
=========================================================================

Portions of Derby were originally developed by
International Business Machines Corporation and are
licensed to the Apache Software Foundation under the
"Software Grant and Corporate Contribution License Agreement",
informally known as the "Derby CLA".
The following copyright notice(s) were affixed to portions of the code
with which this file is now or was at one time distributed
and are placed here unaltered.

(C) Copyright 1997,2004 International Business Machines Corporation.  All rights reserved.

(C) Copyright IBM Corp. 2003.

The portion of the functionTests under 'nist' was originally
developed by the National Institute of Standards and Technology (NIST),
an agency of the United States Department of Commerce, and adapted by
International Business Machines Corporation in accordance with the NIST
Software Acknowledgment and Redistribution document at
http://www.itl.nist.gov/div897/ctg/sql_form.htm

=========================================================================
==  Apache FOP Notice                                                  ==
=========================================================================

This software consists of voluntary contributions made by many individuals
on behalf of The Apache Software Foundation and was originally created by
James Tauber <jtauber@jtauber.com>.

=========================================================================
==  Apache Geronimo Notice                                             ==
=========================================================================

Portions of the Web Console were orginally developed by
International Business Machines Corporation and are
licensed to the Apache Software Foundation under the
"Software Grant and Corporate Contribution License Agreement",
informally known as the "IBM Console CLA".

The following copyright notice(s) were affixed to portions of the code
with which this file is now or was at one time distributed
and are placed here unaltered.

(C) Copyright 2004, 2005 International Business Machines Corporation.  All rights reserved.

=========================================================================
==  Apache Log4J Notice                                                ==
=========================================================================

This product includes source code based on Sun
Microsystems' book titled "Java Nativer Interface:
Programmer's Guide and Specification" and freely available
to the public at http://java.sun.com/docs/books/jni.

=========================================================================
==  Apache Lucene Notice                                               ==
=========================================================================

The snowball stemmers in
  contrib/snowball/src/java/net/sf/snowball
were developed by Martin Porter and Richard Boulton.
The full snowball package is available from
  http://snowball.tartarus.org/

=========================================================================
==  Apache Tomcat Notice                                               ==
=========================================================================

Java compilation software for JSP pages is provided by Eclipse,
which is open source software.  The orginal software and
related infomation is available at
http://www.eclipse.org.

=========================================================================
==  Apache Xerces Java Notice                                          ==
=========================================================================

Portions of this software were originally based on the following:
  - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
  - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
  - voluntary contributions made by Paul Eng on behalf of the
    Apache Software Foundation that were originally developed at iClick, Inc.,
    software copyright (c) 1999.

=========================================================================
==  Apache Xalan distribution.                                         ==
=========================================================================

This product includes software developed by
The Apache Software Foundation (http://www.apache.org/).

Portions of this software was originally based on the following:
 - software copyright (c) 1999-2002, Lotus Development Corporation.,
   http://www.lotus.com.
 - software copyright (c) 2001-2002, Sun Microsystems.,
   http://www.sun.com.
 - software copyright (c) 2003, IBM Corporation., http://www.ibm.com.
 - voluntary contributions made by Ovidiu Predescu <ovidiu@cup.hp.com> on
   behalf of the Apache Software Foundation that was originally developed
   at Hewlett Packard Company.
The binary distribution package (ie. jars, samples and documentation) of
this product includes software developed by the following:

 - The Apache Software Foundation
     - Xerces Java - see xercesImpl.README.txt
     - JAXP 1.3 APIs - see xml-apis.README.txt
     - Bytecode Engineering Library - see BCEL.README.txt
     - Regular Expression - see regexp.README.txt

 - Scott Hudson, Frank Flannery, C. Scott Ananian
     - CUP Parser Generator runtime (javacup\runtime) - see runtime.README.txt

The source distribution package (ie. all source and tools required to build
Xalan Java) of this product includes software developed by the following:

 - The Apache Software Foundation
     - Xerces Java - see xercesImpl.README.txt
     - JAXP 1.3 APIs - see xml-apis.README.txt
     - Bytecode Engineering Library - see BCEL.README.txt
     - Regular Expression - see regexp.README.txt
     - Ant - see ant.README.txt
     - Stylebook doc tool - see stylebook-1.0-b3_xalan-2.README.txt

 - Elliot Joel Berk and C. Scott Ananian
     - Lexical Analyzer Generator (JLex) - see JLex.README.txt

=========================================================================
==  Apache Xalan serializer                                            ==
=========================================================================

This product includes software developed by IBM Corporation (http://www.ibm.com)
and The Apache Software Foundation (http://www.apache.org/).

Portions of this software was originally based on the following:
  - software copyright (c) 1999-2002, Lotus Development Corporation.,
    http://www.lotus.com.
  - software copyright (c) 2001-2002, Sun Microsystems.,
    http://www.sun.com.
  - software copyright (c) 2003, IBM Corporation., http://www.ibm.com.

=========================================================================
==  Barcode4J Notice                                                   ==
=========================================================================

This product includes software developed for project
Krysalis (http://www.krysalis.org/).

This product includes software developed by the
JDOM Project (http://www.jdom.org/).

=========================================================================
==  Freemarker Notice                                                  ==
=========================================================================

This product includes software developed by the
Visigoth Software Society (http://www.visigoths.org/).

=========================================================================
==  Groovy Notice                                                      ==
=========================================================================

This product includes software developed by
The Groovy community (http://groovy.codehaus.org/).

=========================================================================
==  JDBM Notice                                                        ==
=========================================================================

This product includes software developed by the JDBM Project
(http://jdbm.sourceforge.net/).

=========================================================================
==  Jetty Notice                                                       ==
=========================================================================

==============================================================
 Jetty Web Container
 Copyright 1995-2006 Mort Bay Consulting Pty Ltd
==============================================================

The Jetty Web Container is Copyright Mort Bay Consulting Pty Ltd
unless otherwise noted. It is licensed under the apache 2.0
license.

The javax.servlet package used by Jetty is copyright
Sun Microsystems, Inc and Apache Software Foundation. It is
distributed under the Common Development and Distribution License.
You can obtain a copy of the license at
https://glassfish.dev.java.net/public/CDDLv1.0.html.

The UnixCrypt.java code ~Implements the one way cryptography used by
Unix systems for simple password protection.  Copyright 1996 Aki Yoshida,
modified April 2001  by Iris Van den Broeke, Daniel Deville.
Permission to use, copy, modify and distribute UnixCrypt
for non-commercial or commercial purposes and without fee is
granted provided that the copyright notice appears in all copies.

The default JSP implementation is provided by the Glassfish JSP engine
from project Glassfish http://glassfish.dev.java.net.  Copyright 2005
Sun Microsystems, Inc. and portions Copyright Apache Software Foundation.

Some portions of the code are Copyright:
  2006 Tim Vernum
  1999 Jason Gilbert.

The jboss integration module contains some LGPL code.

=========================================================================
==  MX4J Notice                                                        ==
=========================================================================

This software consists of voluntary contributions made by many
individuals on behalf of the MX4J project.  For more information on
MX4J, please see <http://mx4j.sourceforge.net>

=========================================================================
==  PNG Behavior Notice                                                ==
=========================================================================

This product includes software developed by
WebFX (webfx.eae.net):

framework/images/webapp/images/pngbehavior.htc

=========================================================================
==  JSON-LIB Notice                                                    ==
=========================================================================

This product includes software developed by
Douglas Crockford (http://www.crockford.com).

=========================================================================
==  DataVision Notice                                                  ==
=========================================================================

Icons

DataVision uses graphic images developed by Sun. The image files are copied
into DataVision.jar.

Copyright 2000 by Sun Microsystems, Inc. All Rights Reserved.

Sun grants you (``Licensee'') a non-exclusive, royalty free, license to use,
and redistribute this software graphics artwork, as individual graphics or
as a collection, as part of software code or programs that you develop,
provided that i) this copyright notice and license accompany the software
graphics artwork; and ii) you do not utilize the software graphics artwork
in a manner which is disparaging to Sun. Unless enforcement is prohibited
by applicable law, you may not modify the graphics, and must use them true
to color and unmodified in every way.

This software graphics artwork is provided ``AS IS,'' without a warranty of
any kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR
A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS
LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A
RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE GRAPHICS ARTWORK.

IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE,
PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL
OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE GRAPHICS
ARTWORK, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

If any of the above provisions are held to be in violation of applicable
law, void, or unenforceable in any jurisdiction, then such provisions are
waived to the extent necessary for this Disclaimer to be otherwise
enforceable in such jurisdiction.

=========================================================================
==  CoolTips Notice                                                    ==
=========================================================================
This product includes software developed by
Andrej Okonetschnikow (http://code.google.com/p/tooltips/).

========================================================================
==  JPIM Notice                                                       ==
========================================================================
This product includes software developed by jpim development team (
http://jpim.sourceforge.net/index.html)
-------------------------------------------
jpim is released under a modified BSD style license.

Java PIM Library (jpim)
Copyright (c) 2001-2003 jpim development team.
=========================================================================
==  JavaCC Notice                                                      ==
=========================================================================

This product includes software developed by the javacc team
(http://javacc.dev.java.net/).  The included version is 4.1.
=========================================================================
==  XPP3   Notice                                                      ==
=========================================================================

This product includes software developed by the Indiana University
Extreme! Lab (http://www.extreme.indiana.edu/).
=========================================================================
==  jline Notice                                                       ==
=========================================================================

This product includes software developed by Marc Prud'hommeaux 
<mwp1@cornell.edu> 
=========================================================================
==  FamFamFam Notice                                                   ==
=========================================================================

This product includes images delevoped by Mark James <mjames@gmail.com>
Birmingham, UK. www.famfamfam.com

Creative Commons Attribution 2.5 License.
http://creativecommons.org/licenses/by/2.5/

You are free:

    * to Share â€” to copy, distribute and transmit the work
    * to Remix â€” to adapt the work

Under the following conditions:

    * Attribution. You must attribute the work in the manner specified 
      by the author or licensor (but not in any way that suggests that 
	  they endorse you or your use of the work).
    * For any reuse or distribution, you must make clear to 
      others the license terms of this work. The best way to do 
	  this is with a link to this web page.
    * Any of the above conditions can be waived if you get 
    * For any reuse or distribution, you must make clear to 
      permission from the copyright holder.
    * Nothing in this license impairs or restricts the 
    * For any reuse or distribution, you must make clear to 
      author's moral rights.
