Apache Directory LDAP API Distribution
Copyright 2003-2014 The Apache Software Foundation

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

Additional copyright notices and license terms applicable are
present in the 'licenses' directory.

This product uses Apache Ant (http://ant.apache.org/).

This product includes/uses Apache Commons (http://commons.apache.org/).

This product includes/uses Apache Loggin Services (http://logging.apache.org/).

This product includes/uses Apache Felix (http://felix.apache.org/).

This product uses Apache Maven (http://maven.apache.org/).

This product includes/uses Apache Mina (http://mina.apache.org/).

This product includes/uses software, AntLR Parser Generator (http://www.antlr.org/).

This product uses software, JUnit (http://junit.org),
developed by JUnit (http://www.junit.org)

This product includes/uses software, dom4j (http://dom4j.org),
developed by MetaStuff Ltd.  (http://sourceforge.net/projects/dom4j).

This product includes/uses software, SLF4J API Module (http://www.slf4j.org),
developed by QOS.ch  (http://www.qos.ch)

This product includes/uses software, XMLPullParser 3 - xpp3:xpp3:jar:1.1.3.4.O (http://www.extreme.indiana.edu/xgws/xsoap/xpp/mxp1/)
