Apache Flink Stateful Functions (flink-statefun)
Copyright 2014-2023 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.

- AnchorJS v3.1.0 (https://github.com/bryanbraun/anchorjs) Copyright (c) 2020 Bryan Braun
    -> in "docs/static/js/anchor.min.js"
- font-awesome:4.6.3 (Code) (http://fortawesome.github.io/Font-Awesome/) - Created by Dave Gandy
    -> css in "docs/static/font-awesome/css/font-awesome.min.css"
- jquery:1.11.2 (http://jquery.com/) Copyright 2014 jQuery Foundation and other contributors
