Apache Flink Stateful Functions (flink-statefun)
Copyright 2014-2020 The Apache Software Foundation

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

This project contains copied and modified source code that is licensed under the Apache Software License 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt) from the following projects:

- fastutil (http://fastutil.di.unimi.it/) Copyright (c) - Sebastiano Vigna
  The copied sources can be located under statefun-flink/statefun-flink-core/src/main/java/it/unimi/dsi/fastutil/

This project bundles the following dependencies under the SIL OFL 1.1 license (https://opensource.org/licenses/OFL-1.1).
See bundled license files under "licenses/" for details.

- font-awesome:4.6.3 (Fonts) (http://fortawesome.github.io/Font-Awesome/) - Created by Dave Gandy
    -> fonts in "docs/page/font-awesome/fonts"

This project bundles the following dependencies under the MIT license (https://opensource.org/licenses/MIT).
See bundled license files under "licenses/" for details.

- font-awesome:4.6.3 (Code) (http://fortawesome.github.io/Font-Awesome/) - Created by Dave Gandy
    -> css in "docs/page/font-awesome/css"
- jquery:1.11.2 (http://jquery.com/) Copyright 2014 jQuery Foundation and other contributors
