Apache IoTDB
Copyright 2018-2019 The Apache Software Foundation.

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

============================================================================

IoTDB project uses 4 Chinese Patents:
* 201711384490X
* 201810111712.9
* 201711322631.5
* 201711319331.1

According to the Apache 2.0 License. The owner of the patents, Tsinghua University,
grant the users the right to the use of patent under the requirement of Apache 2.0 License.

============================================================================

This product contains a modified portion of 'Apache Hive'

Apache Hive
Copyright 2008-2018 The Apache Software Foundation

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

