Apache Solr
Copyright 2006 The Apache Software Foundation

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

Includes software from other Apache Software Foundation projects,
including, but not limited to:
  - Apache Lucene Java
  - Apache Tomcat (lib/servlet-api-2.4.jar)

This product includes software developed by the Indiana University
Extreme! Lab (http://www.extreme.indiana.edu/).
(specifically, the XPP3 XML pull parser)

This product includes software developed by Mort Bay Consulting
(specifically, Jetty 5.1, the bundled servlet container in example)

This product includes software developed by Dr Martin Porter,
Copyright 2001 and and Richard Boulton (for the Java developments),
Copyright 2002.
(generated snowball stemmer code in the lucene-snowball jar)
