Apache Ivy (TM)
Copyright 2007-2019 The Apache Software Foundation

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

Portions of Ivy were originally developed at
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/.

The Scp class is based on the SCPClient from the ganymed ssh
library. Which has been distributed under the BSD style license
included in the LICENSE file.
