# Notices for Eclipse Dynamic Languages Toolkit

This content is produced and maintained by the Eclipse Dynamic Languages Toolkit
project.

* Project home: https://projects.eclipse.org/projects/technology.dltk

## Trademarks

Eclipse Dynamic Languages Toolkit, Dynamic Languages Toolkit, Eclipse DLTK, and
DLTK are trademarks of the Eclipse Foundation.

## Copyright

All content is the property of the respective authors or their employers. For
more information regarding authorship of content, please consult the listed
source code repository logs.

## Declared Project Licenses

This program and the accompanying materials are made available under the terms
of the Eclipse Public License v. 2.0 which is available at
http://www.eclipse.org/legal/epl-2.0.

SPDX-License-Identifier: EPL-2.0

## Source Code

The project maintains the following source code repositories:

* http://git.eclipse.org/c/dltk/org.eclipse.dltk.core.git
* http://git.eclipse.org/c/dltk/org.eclipse.dltk.javascript.git
* http://git.eclipse.org/c/dltk/org.eclipse.dltk.ruby.git
* http://git.eclipse.org/c/dltk/org.eclipse.dltk.tcl.git
* http://git.eclipse.org/c/dltk/org.eclipse.dltk.python.git
* http://git.eclipse.org/c/dltk/org.eclipse.dltk.sh.git
* http://git.eclipse.org/c/dltk/org.eclipse.dltk.releng.git
* http://git.eclipse.org/c/dltk/org.eclipse.dltk.all.git

## Third-party Content

This project leverages the following third party content.

ANTLR Runtime (Only) (3.0)

* License: New BSD license

Apache Lucene analyzers-common (7.1.0)

* License: Apache-2.0 AND BSD-3-Clause AND BSD-2-Clause

Apache Lucene Core (7.1.0)

* License: Apache-2.0 AND MIT AND BSD-3-Clause

Apache Lucene Core (7.5)

* License: Apache-2.0 AND MIT AND BSD-3-Clause

Apache Lucene Misc (7.1)

* License: Apache-2.0
* Project: https://lucene.apache.org/core/
* Source:
   https://archive.apache.org/dist/lucene/java/7.1.0/lucene-7.1.0-src.tgz

h2 Database (1.1.117)

* License: Eclipse Public License
* Project: http://www.h2database.com
* Source: http://www.h2database.com/html/download.html

h2 Database (1.2.147)

* License: Eclipse Public License

JRuby (0.9.1)

* License: Common Public License 1.0

lucene misc (5.2.1)

* License: Apache License, 2.0

lucene-analyzers-common (5.2.1)

* License: Apache License, 2.0, New BSD license, W3C License

lucene-analyzers-common (6.1.0)

* License: Apache License, 2.0, New BSD license, W3C License	

lucene-core (5.2.1)

* License: Apache License, 2.0, BSD Style, MIT License

lucene-core (6.1.0)

* License: Apache License, 2.0, BSD Style, MIT License

lucene-misc (6.1.0)

* License: Apache License, 2.0

org.apache.xmlbeans (2.3)

* License: Apache License, 2.0

Rhino (1.6)

* License: Netscape Public License 1.1 (NPL)

## Cryptography

Content may contain encryption software. The country in which you are currently
may have restrictions on the import, possession, and use, and/or re-export to
another country, of encryption software. BEFORE using any encryption software,
please check the country's laws, regulations and policies concerning the import,
possession, or use, and re-export of encryption software, to see if this is
permitted.
