Apache Marmotta
Copyright 2012-2018 The Apache Software Foundation

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

Portions of this software were originally based on the following:

    Copyright 2008-2012 Salzburg Research Forschungsgesellschaft mbH

These have been licensed to the Apache Software Foundation under a software grant.

This product also includes some third-party source components:

 * The module commons/marmotta-commons contains a modified and reduced version
   of the Javolution library. Javolution has copyright (c) 2012, Javolution and
   is licensed under BSD license. The original source code is available from
   http://javolution.org

 * The module kiwi/kiwi-triplestore contains a modified and customized version
   of the ScriptRunner.java script. ScriptRunner has copyright (c) 2004 Clinton
   Begin, with minor later contributions by several authors, and is licensed
   under Apache License 2.0. The original source code is available from
   https://gist.github.com/joe776/831762

 * The module libraries/ostrich/backend contains unmodified versions of
   Abseil - C++ Common Libraries and Google Test:
   - Abseil - C++ Common Libraries (libraries/ostrich/backend/3rdparty/abseil)
     is licensed under Apache License 2.0, the original source code is available
     from https://github.com/abseil/abseil-cpp
   - Google Test (libraries/ostrich/backend/3rdparty/gtest) is licensed under
     BSD-3-Clause, the original source code is available from
     https://github.com/google/googletest
