                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

---------------------------------------------------

The Apache Griffin contains subcomponents in the source code
release with separate copyright notices and license terms. Your use of
the source code for the these subcomponents is subject to the terms and
conditions of their respective licenses.

----------------------------------------------
Public Domain
----------------------------------------------
The following components are provided in Public Domain. See project link for details.

     (Public Domain) XZ for Java (org.tukaani:xz:1.0 - http://tukaani.org/xz/java.html)
     (Public Domain) AOP alliance (aopalliance:aopalliance:1.0 - http://aopalliance.sourceforge.net)
     (Public Domain) XZ for Java (org.tukaani:xz:1.0 - http://tukaani.org/xz/java.html)

----------------------------------------------
JSON license
----------------------------------------------
The following components are provided under a JSON license. See project link for details.
The text of each license is also included at licenses/JSON.

     (The JSON License) JSON in Java (org.json:json:20140107 - https://github.com/douglascrockford/JSON-java)

----------------------------------------------
The PostgreSQL License
----------------------------------------------
The following components are provided under a PostgreSQL license. See project link for details.
The text of each license is also included at licenses/PostgreSQL.

     (The PostgreSQL License) PostgreSQL JDBC Driver - JDBC 4.1 (org.postgresql:postgresql:9.4.1212.jre7 - https://github.com/pgjdbc/pgjdbc-parent-poms/pgjdbc-core-parent/pgjdbc-core-prevjre/postgresql)

----------------------------------------------
EPL license
----------------------------------------------
The following components are provided under a EPL license. See project link for details.
The text of each license is also included at licenses/EPL.

     (Eclipse Distribution License v. 1.0) (Eclipse Public License v1.0) Javax Persistence (org.eclipse.persistence:javax.persistence:2.1.0 - http://www.eclipse.org/eclipselink)
     (Eclipse Distribution License v. 1.0) (Eclipse Public License v1.0) EclipseLink ANTLR (org.eclipse.persistence:org.eclipse.persistence.antlr:2.6.0 - http://www.eclipse.org/eclipselink)
     (Eclipse Distribution License v. 1.0) (Eclipse Public License v1.0) EclipseLink ASM (org.eclipse.persistence:org.eclipse.persistence.asm:2.6.0 - http://www.eclipse.org/eclipselink)
     (Eclipse Distribution License v. 1.0) (Eclipse Public License v1.0) EclipseLink Core (org.eclipse.persistence:org.eclipse.persistence.core:2.6.0 - http://www.eclipse.org/eclipselink)
     (Eclipse Distribution License v. 1.0) (Eclipse Public License v1.0) EclipseLink JPA (org.eclipse.persistence:org.eclipse.persistence.jpa:2.6.0 - http://www.eclipse.org/eclipselink)
     (Eclipse Distribution License v. 1.0) (Eclipse Public License v1.0) EclipseLink Hermes JPQL Parser (org.eclipse.persistence:org.eclipse.persistence.jpa.jpql:2.6.0 - http://www.eclipse.org/eclipselink)
     (Eclipse Public License - v 1.0) (GNU Lesser General Public License) Logback Classic Module (ch.qos.logback:logback-classic:1.1.9 - http://logback.qos.ch/logback-classic)
     (Eclipse Public License - v 1.0) (GNU Lesser General Public License) Logback Core Module (ch.qos.logback:logback-core:1.1.9 - http://logback.qos.ch/logback-core)
     (MPL 2.0 or EPL 1.0) H2 Database Engine (com.h2database:h2:1.4.193 - http://www.h2database.com)
     (Eclipse Public License - v 1.0) AspectJ weaver (org.aspectj:aspectjweaver:1.8.9 - http://www.aspectj.org)
     (GNU LESSER GENERAL PUBLIC LICENSE)(Eclipse Public License) c3p0:JDBC DataSources/Resource Pools (c3p0:c3p0:0.9.1.1 - http://c3p0.sourceforge.net)

----------------------------------------------
CDDL licenses
----------------------------------------------
The following components are provided under a CDDL license. See project link for details.
The text of each license is also included at licenses/CDDL-1.0 and licenses/CDDL-1.1.

     (CDDL) (GPLv2+CE) JavaMail API (com.sun.mail:javax.mail:1.4.4 - http://kenai.com/projects/javamail/javax.mail)
     (Common Development and Distribution License (CDDL) v1.0) JavaBeans Activation Framework (JAF) (javax.activation:activation:1.1 - http://java.sun.com/products/javabeans/jaf/index.jsp)
     (CDDL license) jsp-api (javax.servlet.jsp:jsp-api:2.1 - no url defined)
     (CDDL-1.0 license) Java Transaction API (javax.transaction:jta:1.1 - http://java.sun.com/products/jta)
     (CDDL 1.1) (GPL2 w/ CPE) jersey-client (com.sun.jersey:jersey-client:1.9 - https://jersey.java.net/jersey-client/)
     (CDDL 1.1) (GPL2 w/ CPE) jersey-core (com.sun.jersey:jersey-core:1.9 - https://jersey.java.net/jersey-core/)
     (CDDL 1.1) (GPL2 w/ CPE) jersey-json (com.sun.jersey:jersey-json:1.9 - https://jersey.java.net/jersey-json/)
     (CDDL 1.1) (GPL2 w/ CPE) jersey-server (com.sun.jersey:jersey-server:1.9 - https://jersey.java.net/jersey-server/)
     (CDDL 1.1) (GPL2 w/ CPE) jersey-guice (com.sun.jersey.contribs:jersey-guice:1.9 - https://jersey.java.net/jersey-contribs/jersey-guice/)
     (CDDL 1.1) (GPL2 w/ CPE) JAXB RI (com.sun.xml.bind:jaxb-impl:2.2.3-1 - http://jaxb.java.net/)
     (Common Development and Distribution License (CDDL) v1.0) JavaBeans Activation Framework (JAF) (javax.activation:activation:1.1 - http://java.sun.com/products/javabeans/jaf/index.jsp)
     (CDDL + GPLv2 with classpath exception) javax.transaction API (javax.transaction:javax.transaction-api:1.2 - http://jta-spec.java.net)
     (CDDL 1.1) (GPL2 w/ CPE) JAXB API bundle for GlassFish V3 (javax.xml.bind:jaxb-api:2.2.2 - https://jaxb.dev.java.net/)
     (COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0) (GNU General Public Library) Streaming API for XML (javax.xml.stream:stax-api:1.0-2 - no url defined)

----------------------------------------------
BSD-style licenses
----------------------------------------------
The following components are provided under a BSD-style license. See project link for details.
The text of each license is also included at licenses/BSD-3-Clause and licenses/BSD-2-Clause.

     (BSD) ParaNamer Core (com.thoughtworks.paranamer:paranamer:2.3 - http://paranamer.codehaus.org/paranamer)
     (BSD-like) Scala Library (org.scala-lang:scala-library:2.10.6 - http://www.scala-lang.org/)
     (BSD-like) Scala Compiler (org.scala-lang:scala-reflect:2.10.6 - http://www.scala-lang.org/)
     (BSD license) ASM Core (asm:asm:3.1 - http://asm.objectweb.org/asm/)
     (BSD license) dom4j (dom4j:dom4j:1.6.1 - http://dom4j.org)
     (BSD license) Antlr 3.4 Runtime (org.antlr:antlr-runtime:3.4 - http://www.antlr.org)
     (BSD License) AntLR Parser Generator (antlr:antlr:2.7.7 - http://www.antlr.org/)
     (New BSD License) Kryo (com.esotericsoftware.kryo:kryo:2.22 - http://code.google.com/p/kryo/)
     (New BSD license) Protocol Buffer Java API (com.google.protobuf:protobuf-java:2.5.0 - http://code.google.com/p/protobuf)
     (BSD) ParaNamer Core (com.thoughtworks.paranamer:paranamer:2.3 - http://paranamer.codehaus.org/paranamer)
     (BSD licence) ANTLR StringTemplate (org.antlr:stringtemplate:3.2.1 - http://www.stringtemplate.org)
     (The BSD 3-Clause License) leveldbjni-all (org.fusesource.leveldbjni:leveldbjni-all:1.8 - http://leveldbjni.fusesource.org/leveldbjni-all)
     (BSD-like) Scala Library (org.scala-lang:scala-library:2.10.4 - http://www.scala-lang.org/)
     (The BSD License) xmlenc Library (xmlenc:xmlenc:0.52 - http://xmlenc.sourceforge.net)

----------------------------------------------
MIT licenses
----------------------------------------------
The following components are provided under a MIT license. See project link for details.
The text of each license is also included at licenses/MIT.

     (MIT License) SLF4J API Module (org.slf4j:slf4j-api:1.7.21 - http://www.slf4j.org)
     (MIT License) SLF4J LOG4J-12 Binding (org.slf4j:slf4j-log4j12:1.7.21 - http://www.slf4j.org)
     (MIT License) JCL 1.1.1 implemented over SLF4J (org.slf4j:jcl-over-slf4j:1.7.22 - http://www.slf4j.org)
     (MIT License) JUL to SLF4J bridge (org.slf4j:jul-to-slf4j:1.7.22 - http://www.slf4j.org)
     (MIT License) SLF4J API Module (org.slf4j:slf4j-api:1.7.22 - http://www.slf4j.org)
     (MIT License) SLF4J LOG4J-12 Binding (org.slf4j:slf4j-log4j12:1.7.22 - http://www.slf4j.org)


---------------------------------------------------

This project includes the software: angular
  Available at: https://angular.io
  Version used: 4.4.4
  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
  Copyright (c) 2014-2016 Google, Inc.

This project includes the software: echarts
  Available at: http://echarts.baidu.com
  Version used: 3.7.0
  Used under the following license: The BSD 3-Clause (New BSD) License (http://opensource.org/licenses/BSD-3-Clause)
  Copyright (c) 2013, Baidu Inc.

This project includes the software: Font Awesome (code)
  Available at: http://fontawesome.io
  Inclusive of: font-awesome/{css,scss,less}/*
  Version used: 4.7.0
  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
  Copyright (c) Dave Gandy (2016)

This project includes the software: Font Awesome (fonts)
  Available at: http://fontawesome.io
  Inclusive of: font-awesome/fonts/*
  Version used: 4.7.0
  Used under the following license: SIL OFL 1.1 (http://scripts.sil.org/OFL)
  See details in licenses/SIL-OFL-1.1
  Copyright (c) Dave Gandy (2016)

This project includes the software: requirejs
  Available at: http://requirejs.org
  Version used: 2.2.0
  Used under the following license: The BSD 3-Clause (New BSD) License (http://opensource.org/licenses/BSD-3-Clause)
  Copyright (c) 2010-2015, The Dojo Foundation

This project includes the software: jQuery JavaScript Library
  Available at: http://jquery.com
  Developed by: The jQuery Foundation (http://jquery.org/)
  Inclusive of: jquery.js
  Version used: 3.2.1
  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
  Copyright 2018 The jQuery Foundation

This project includes the software: angular2-multiselect-dropdown
  Available at: http://cuppalabs.github.io/components/multiselectDropdown
  Version used: 1.3.4
  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
  Copyright (c) 2009-2017, Cuppa Labs. All rights reserved and copyrighted to Pradeep Kumar Terli.

This project includes the software: angular2-toaster
  Available at: https://github.com/Stabzs/Angular2-Toaster
  Version used: 4.0.1
  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
  Copyright (c) 2016-2017 Stabzs.

This project includes the software: Twitter Bootstrap
  Available at: https://getbootstrap.com
  Version used: 3.3.7
  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
  Copyright (c) 2011-2014 Twitter, Inc

This project includes the software: Glyphicons Halflings(glyphicons-halflings-regular.*)
  Available at: http://glyphicons.com
  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)
  Copyright (c) 2010 - 2016 Jan Kovarik

This project includes the software: nouislider
  Available at: https://refreshless.com/nouislider
  Version used: 11.0.3
  Used under the following license: WTFPL
  See details in licenses/WTFPL

This project includes the software: ng2-nouislider
  Available at: http://tb.github.io/ng2-nouislider
  Version used: 1.7.6
  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)

This project includes the software: angular-tree-component
  Available at: https://angular2-tree.readme.io/docs
  Version used: 4.1.0
  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)

This project includes the software: angular2-datatable
  Available at: https://github.com/mariuszfoltak/angular2-datatable
  Version used: 0.6.0
  Used under the following license: Apache License, version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
  Copyright (c) Twitter, Inc. (2012)

This project includes the software: rxjs
  Available at: http://reactivex.io/rxjs
  Version used: 5.4.2
  Used under the following license: Apache License, version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
  Copyright (c) Twitter, Inc. (2012)

This project includes the software: webpack
  Available at: https://webpack.js.org
  Version used: 3.5.4
  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)

This project includes the software: css-loader
  Available at:  https://github.com/webpack-contrib/css-loader
  Version used: 0.28.7
  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)

This project includes the software: lodash
  Available at:  https://github.com/lodash/lodash
  Version used: 4.17.4
  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)

This project includes the software: mobx-angular
  Available at:  https://github.com/mobxjs/mobx-angular
  Version used: 1.5.0
  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)

This project includes the software: mobx
  Available at:  https://mobx.js.org/
  Version used: 3.1.11
  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)

This project includes the software: style-loader
  Available at:  https://github.com/webpack-contrib/style-loader
  Version used: 0.13.2
  Used under the following license: The MIT License (http://opensource.org/licenses/MIT)

This project includes the software: tslib
  Available at:  http://www.tslib.org/
  Version used: 0.13.2
  Used under the following license: Apache License, version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
  Copyright (c) Twitter, Inc. (2012)

---------------------------------------------------

All the dependent components licenses are listed in licenses/ directory.