Apache Submarine
Copyright 2019 and onwards The Apache Software Foundation.

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

Export Control Notice
---------------------

This distribution includes cryptographic software.  The country in
which you currently reside may have restrictions on the import,
possession, use, and/or re-export to another country, of
encryption software.  BEFORE using any encryption software, please
check your country's laws, regulations and policies concerning the
import, possession, or use, and re-export of encryption software, to
see if this is permitted.  See <http://www.wassenaar.org/> for more
information.

The U.S. Government Department of Commerce, Bureau of Industry and
Security (BIS), has classified this software as Export Commodity
Control Number (ECCN) 5D002.C.1, which includes information security
software using or performing cryptographic functions with asymmetric
algorithms.  The form and manner of this Apache Software Foundation
distribution makes it eligible for export under the License Exception
ENC Technology Software Unrestricted (TSU) exception (see the BIS
Export Administration Regulations, Section 740.13) for both object
code and source code.


--------------------------------------------------------------------------------
This product bundles a same/modified portion of third-party binaries
and optionally depends on them (NO NEED FOR PERMISSIVELY-LICENSED DEPENDENCIES,
aka, Category A,
per http://www.apache.org/dev/licensing-howto.html#permissive-deps). The license
text can be found in licenses-binary folder.

TonY
-------------
Copyright 2018 LinkedIn Corporation
All Rights Reserved.

Licensed under the BSD 2-Clause License (the "License").
See LICENSE in the project root for license information.

================================================================================

This product includes/uses TensorFlow (https://github.com/tensorflow)
Copyright 2018 The TensorFlow Authors
License: Apache-2.0

This product includes/uses TensorFlowOnYARN (https://github.com/Intel-bigdata/TensorFlowOnYARN)
Copyright 2018 Intel-bigdata
License: Apache-2.0

================================================================================

In addition, this product automatically loads third party code from an external repository
using the Gradle build system. Such third party code is subject to other license
terms than as set forth above. In addition, such third party code may also
depend on and load multiple tiers of dependencies.


jgit
-------------
Copyright (c) 2007, Eclipse Foundation, Inc. and its licensors.
Licenced under Eclipse Distribution License - v 1.0