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

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

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

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

This product includes/uses Apache Logging Services (https://logging.apache.org/).

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

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

This product includes/uses Apache Mina (https://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, jBCrypt 0.4.1 (http://www.mindrot.org/files/jBCrypt)

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