Apache TinkerPop
Copyright 2015-2019 The Apache Software Foundation.

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

------------------------------------------------------------------------
Apache Commons Codec 1.12 (AL ASF)
------------------------------------------------------------------------
src/test/org/apache/commons/codec/language/DoubleMetaphoneTest.java
contains test data from http://aspell.net/test/orig/batch0.tab.
Copyright (C) 2002 Kevin Atkinson (kevina@gnu.org)

The content of package org.apache.commons.codec.language.bm has been translated
from the original php source code available at http://stevemorse.org/phoneticinfo.htm
with permission from the original authors.
Original source copyright:
Copyright (c) 2008 Alexander Beider & Stephen P. Morse.

------------------------------------------------------------------------
Apache Groovy 2.4.16 (AL ASF)
------------------------------------------------------------------------
This product includes/uses ANTLR (http://www.antlr2.org/)
developed by Terence Parr 1989-2006

This product bundles icons from the famfamfam.com silk icons set
http://www.famfamfam.com/lab/icons/silk/
Licensed under the Creative Commons Attribution Licence v2.5
http://creativecommons.org/licenses/by/2.5/

------------------------------------------------------------------------
Apache Ivy 2.3.0 (AL ASF)
------------------------------------------------------------------------
Portions of Ivy were originally developed by
Jayasoft SARL (http://www.jayasoft.fr/)
and are licensed to the Apache Software Foundation under the
"Software Grant License Agreement"

SSH and SFTP support is provided by the JCraft JSch package,
which is open source software, available under
the terms of a BSD style license.
The original software and related information is available
at http://www.jcraft.com/jsch/.

------------------------------------------------------------------------
JavaTuples 1.2
------------------------------------------------------------------------
Copyright (c) 2010, The JAVATUPLES team (http://www.javatuples.org)

------------------------------------------------------------------------
Netty 4.0.56
------------------------------------------------------------------------
Copyright 2014 The Netty Project

