Apache Flink dependencies

The Apache Flink project depends on various components with separate copyright
notices and license terms. Your use of these subcomponents is subject
to the terms and conditions of their respective licenses.

 - See files "LICENSE" and "NOTICE" for licenses and notice files (per section 4(d) of
   the Apache License) relating to files and dependencies distributed with the
   Apache Flink sources.

 - See files "flink-dist/src/main/flink-bin/LICENSE" and "flink-dist/src/main/flink-bin/NOTICE"
   for licenses and notice files (per section 4(d) of the Apache License) relating
   to dependencies bundled with the binary distribution of Apache Flink.

