Notice: |

  Apache Brooklyn
  Copyright 2014-2020 The Apache Software Foundation

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

  This software is released under the Apache Software License, verison 2.0.
  This license and the licenses for all dependencies are included below
  following the dependencies and their notices.

Source dependencies:

  # This software includes the following third-party components in its source code.
  # Additional runtime dependencies are required when built and are listed in the subsequent section.

  # No such dependencies


Runtime dependencies:

  # This software depends on additional third-party components at runtime.
  # These are not bundled here but may be included as part of a build.

  "@uirouter/core@5.0.20": 
    Project:      "@uirouter/core (NodeJS module)"
    Version:      5.0.20
    Available at: 
      - https://github.com/ui-router/core
      - https://ui-router.github.io
    License name: MIT License
    Notice:       Copyright (c) 2013-2015 The AngularUI Team, Karsten Sperling
  
  angular-animate@1.7.2: 
    Project:      angular-animate (NodeJS module)
    Version:      1.7.2
    Available at: 
      - http://angularjs.org
      - https://github.com/angular/angular.js
    Developed by: Angular Core Team (angular-core+npm@google.com)
    License name: MIT License
    Notice:       Copyright (c) 2016 Angular
  
  angular-cookies@1.7.2: 
    Project:      angular-cookies (NodeJS module)
    Version:      1.7.2
    Available at: 
      - http://angularjs.org
      - https://github.com/angular/angular.js
    Developed by: Angular Core Team (angular-core+npm@google.com)
    License name: MIT License
    Notice:       Copyright (c) 2016 Angular
  
  angular-java-stack-viewer@1.0.1: 
    Project:      angular-java-stack-viewer (NodeJS module)
    Version:      1.0.1
    Available at: https://github.com/tbouron/angular-java-stack-viewer
    Developed by: Thomas Bouron
    License name: Apache License, version 2.0
  
  angular-multiple-transclusion@1.0.0: 
    Project:      angular-multiple-transclusion (NodeJS module)
    Version:      1.0.0
    Available at: https://github.com/mcasimir/angular-multiple-transclusion
    Developed by: mcasimir (https://github.com/mcasimir)
    License name: MIT License
  
  angular-resource@1.7.2: 
    Project:      angular-resource (NodeJS module)
    Version:      1.7.2
    Available at: 
      - http://angularjs.org
      - https://github.com/angular/angular.js
    Developed by: Angular Core Team (angular-core+npm@google.com)
    License name: MIT License
    Notice:       Copyright (c) 2016 Angular
  
  angular-sanitize@1.7.2: 
    Project:      angular-sanitize (NodeJS module)
    Version:      1.7.2
    Available at: 
      - http://angularjs.org
      - https://github.com/angular/angular.js
    Developed by: Angular Core Team (angular-core+npm@google.com)
    License name: MIT License
    Notice:       Copyright (c) 2016 Angular
  
  angular-ui-bootstrap@2.5.6: 
    Project:      angular-ui-bootstrap (NodeJS module)
    Version:      2.5.6
    Available at: 
      - http://angular-ui.github.io/bootstrap/
      - https://github.com/angular-ui/bootstrap
    Developed by: https://github.com/angular-ui/bootstrap/graphs/contributors
    License name: MIT License
    Notice:       Copyright (c) 2012-2017 the AngularUI Team, https://github.com/organizations/angular-ui/teams/291112
  
  angular-ui-router@0.3.2: 
    Project:      angular-ui-router (NodeJS module)
    Version:      0.3.2
    Available at: 
      - http://angular-ui.github.com/
      - https://github.com/angular-ui/ui-router
    License name: MIT License
    Notice:       Copyright (c) 2013-2015 The AngularUI Team, Karsten Sperling
  
  angular-ui-router@1.0.19: 
    Project:      angular-ui-router (NodeJS module)
    Version:      1.0.19
    Available at: 
      - https://github.com/angular-ui/ui-router
      - https://ui-router.github.io
    License name: MIT License
    Notice:       Copyright (c) 2013-2018 The AngularUI Team, Karsten Sperling
  
  angular-xeditable@0.4.0: 
    Project:      angular-xeditable (NodeJS module)
    Version:      0.4.0
    Available at: 
      - https://github.com/vitalets/angular-xeditable
      - https://vitalets.github.io/angular-xeditable
    Developed by: Vitaliy Potapov (noginsk@rambler.ru)
    License name: MIT License
    Notice:       Copyright (c) 2015 Vitaliy Potapov
  
  angular@1.7.2: 
    Project:      angular (NodeJS module)
    Version:      1.7.2
    Available at: 
      - http://angularjs.org
      - https://github.com/angular/angular.js
    Developed by: Angular Core Team (angular-core+npm@google.com)
    License name: MIT License
    Notice:       Copyright (c) 2016 Angular
  
  aopalliance:1.0: 
    Project:      AOP alliance
    Version:      1.0
    Available at: http://aopalliance.sourceforge.net
    License name: Public Domain
  
  argparse@1.0.10: 
    Project:      argparse (NodeJS module)
    Version:      1.0.10
    Available at: https://github.com/nodeca/argparse
    License name: MIT License
    Notice:       Copyright (C) 2012 by Vitaly Puzrin
  
  bootstrap@3.3.7: 
    Project:      bootstrap (NodeJS module)
    Version:      3.3.7
    Available at: 
      - http://getbootstrap.com
      - https://github.com/twbs/bootstrap
    Developed by: Twitter, Inc.
    License name: MIT License
    Notice:       Copyright (c) 2011-2016 Twitter, Inc.
  
  ch.qos.logback:0.1.5: 
    Project:      Logback Logging Framework
    Version:      0.1.5
    Available at: https://github.com/qos-ch/logback-contrib/wiki
    License name: Eclipse Public License, version 1.0
  
  ch.qos.logback:1.2.9: 
    Project:      Logback Logging Framework
    Version:      1.2.9
    Available at: http://logback.qos.ch
    Developed by: QOS.ch (http://www.qos.ch)
    License name: Eclipse Public License, version 1.0
  
  clipboard@1.5.16: 
    Project:      clipboard (NodeJS module)
    Version:      1.5.16
    Available at: https://github.com/zenorocha/clipboard.js
    License name: MIT License
  
  codemirror@5.39.2: 
    Project:      codemirror (NodeJS module)
    Version:      5.39.2
    Available at: 
      - http://codemirror.net
      - https://github.com/codemirror/CodeMirror
    License name: MIT License
    Notice:       Copyright (C) 2017 by Marijn Haverbeke <marijnh@gmail.com> and others
  
  com.fasterxml.jackson:2.16.1: 
    Project:      Jackson FasterXML
    Version:      2.16.1
    Available at: https://github.com/FasterXML/jackson
    Developed by: FasterXML (http://fasterxml.com/)
    Licenses: 
      -
        License name: Apache License, version 2.0
      -
        License name: Apache License, version 2.0
  
  com.fasterxml.woodstox.woodstox-core:6.4.0: 
    Project:      Woodstox
    Version:      6.4.0
    Available at: https://github.com/FasterXML/woodstox
    Developed by: FasterXML (http://fasterxml.com)
    License name: Apache License, version 2.0
  
  com.github.mifmif.generex:1.0.2: 
    Project:      Generex
    Version:      1.0.2
    Available at: https://github.com/mifmif/Generex/tree/master
    License name: Apache License, version 2.0
  
  com.google.code.gson:2.8.9: 
    Project:      Gson
    Version:      2.8.9
    Available at: https://github.com/google/gson
    License name: Apache License, version 2.0
  
  com.google.errorprone.error_prone_annotations:2.2.0: 
    Project:      error-prone annotations
    Version:      2.2.0
    Available at: http://nexus.sonatype.org/oss-repository-hosting.html
    License name: Apache License, version 2.0
  
  com.google.guava.failureaccess:1.0.1: 
    Project:      Guava InternalFutureFailureAccess and InternalFutures
    Version:      1.0.1
    Available at: https://github.com/google/guava
    License name: Apache License, version 2.0
  
  com.google.guava.listenablefuture:9999.0-empty-to-avoid-conflict-with-guava: 
    Project:      Guava ListenableFuture only
    Version:      9999.0-empty-to-avoid-conflict-with-guava
    Available at: https://github.com/google/guava
    License name: Apache License, version 2.0
  
  com.google.guava:27.1-jre: 
    Project:      "Guava: Google Core Libraries for Java"
    Version:      27.1-jre
    Available at: https://github.com/google/guava
    License name: Apache License, version 2.0
  
  com.google.inject.guice:4.2.3: 
    Project:      Google Guice
    Version:      4.2.3
    Available at: https://github.com/google/guice
    Developed by: Google, Inc. (http://www.google.com)
    License name: Apache License, version 2.0
  
  com.google.inject:4.2.3: 
    Project:      Google Guice
    Version:      4.2.3
    Available at: https://github.com/google/guice
    Developed by: Google, Inc. (http://www.google.com)
    License name: Apache License, version 2.0
  
  com.google.j2objc.j2objc-annotations:1.1: 
    Project:      J2ObjC Annotations
    Version:      1.1
    Available at: https://github.com/google/j2objc/
    License name: Apache License, version 2.0
  
  com.hierynomus.asn-one:0.6.0: 
    Project:      asn-one
    Version:      0.6.0
    Available at: https://github.com/hierynomus/asn-one
    License name: Apache License, version 2.0
  
  com.hierynomus.sshj:0.34.0: 
    Project:      sshj
    Version:      0.34.0
    Available at: https://github.com/hierynomus/sshj
    License name: Apache License, version 2.0
  
  com.jayway.jsonpath.json-path:2.4.0: 
    Project:      project ':json-path'
    Version:      2.4.0
    Available at: https://github.com/jayway/JsonPath
    License name: Apache License, version 2.0
  
  com.jcraft.jzlib:1.1.3: 
    Project:      JZlib
    Version:      1.1.3
    Available at: http://www.jcraft.com/jzlib/
    Developed by: jcraft (http://www.jcraft.com/)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2000-2011 ymnk, JCraft,Inc. All rights reserved.
  
  com.jcraft:0.0.9: 
    Project:      JCraft jsch ssh library
    Version:      0.0.9
    Available at: http://www.jcraft.com/jsch-agent-proxy/
    Developed by: JCraft,Inc. (http://www.jcraft.com/)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2011-2012 Atsuhiko Yamanaka, JCraft,Inc.
  
  com.maxmind.db.maxmind-db:1.2.1: 
    Project:      MaxMind DB Reader
    Version:      1.2.1
    Available at: http://dev.maxmind.com/
    Developed by: MaxMind, Inc. (http://www.maxmind.com/)
    License name: Apache License, version 2.0
  
  com.maxmind.geoip2:2.8.0-rc1: 
    Project:      MaxMind GeoIP2 API
    Version:      2.8.0-rc1
    Available at: http://dev.maxmind.com/geoip/geoip2/web-services
    Developed by: MaxMind, Inc. (http://www.maxmind.com/)
    License name: Apache License, version 2.0
  
  com.squareup.okhttp3.logging-interceptor:3.12.12: 
    Project:      OkHttp Logging Interceptor
    Version:      3.12.12
    Available at: https://github.com/square/okhttp
    License name: Apache License, version 2.0
  
  com.squareup.okhttp3.okhttp:3.14.9: 
    Project:      OkHttp
    Version:      3.14.9
    Available at: https://github.com/square/okhttp
    License name: Apache License, version 2.0
  
  com.squareup.okio:1.15.0: 
    Project:      Okio
    Version:      1.15.0
    Available at: https://github.com/square/okio
    License name: Apache License, version 2.0
    Notice:       Copyright (c) Square, Inc.
  
  com.sun.xml.bind.jaxb-impl:2.3.3: 
    Project:      Old JAXB Runtime
    Version:      2.3.3
    Available at: https://eclipse-ee4j.github.io/jaxb-ri
    Developed by: Eclipse Foundation (https://www.eclipse.org)
    License name: Common Development and Distribution License, version 1.1
  
  com.thoughtworks.xstream:1.4.19: 
    Project:      XStream Core
    Version:      1.4.19
    Available at: http://x-stream.github.io/
    Developed by: XStream (http://x-stream.github.io)
    License name: BSD 3-Clause (New BSD) License
  
  commander@2.16.0: 
    Project:      commander (NodeJS module)
    Version:      2.16.0
    Available at: https://github.com/tj/commander.js
    Developed by: TJ Holowaychuk (tj@vision-media.ca)
    License name: MIT License
    Notice:       Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>
  
  commons-beanutils:1.9.4: 
    Project:      Apache Commons BeanUtils
    Version:      1.9.4
    Available at: https://commons.apache.org/proper/commons-beanutils/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  commons-codec:1.15: 
    Project:      Apache Commons Codec
    Version:      1.15
    Available at: https://commons.apache.org/proper/commons-codec/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  commons-collections:3.2.2: 
    Project:      Apache Commons Collections
    Version:      3.2.2
    Available at: http://commons.apache.org/collections/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  commons-io:2.11.0: 
    Project:      Apache Commons IO
    Version:      2.11.0
    Available at: https://commons.apache.org/proper/commons-io/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  commons-lang:2.4: 
    Project:      Commons Lang
    Version:      2.4
    Available at: http://commons.apache.org/lang/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  commons-logging:1.2: 
    Project:      Apache Commons Logging
    Version:      1.2
    Available at: http://commons.apache.org/proper/commons-logging/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  d3-array@1.2.0: 
    Project:      d3-array (NodeJS module)
    Version:      1.2.0
    Available at: 
      - https://d3js.org/d3-array/
      - https://github.com/d3/d3-array
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-axis@1.0.8: 
    Project:      d3-axis (NodeJS module)
    Version:      1.0.8
    Available at: 
      - https://d3js.org/d3-axis/
      - https://github.com/d3/d3-axis
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-brush@1.0.4: 
    Project:      d3-brush (NodeJS module)
    Version:      1.0.4
    Available at: 
      - https://d3js.org/d3-brush/
      - https://github.com/d3/d3-brush
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-chord@1.0.4: 
    Project:      d3-chord (NodeJS module)
    Version:      1.0.4
    Available at: 
      - https://d3js.org/d3-chord/
      - https://github.com/d3/d3-chord
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-collection@1.0.4: 
    Project:      d3-collection (NodeJS module)
    Version:      1.0.4
    Available at: 
      - https://d3js.org/d3-collection/
      - https://github.com/d3/d3-collection
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016, Mike Bostock. All rights reserved.
  
  d3-color@1.0.3: 
    Project:      d3-color (NodeJS module)
    Version:      1.0.3
    Available at: 
      - https://d3js.org/d3-color/
      - https://github.com/d3/d3-color
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-dispatch@1.0.3: 
    Project:      d3-dispatch (NodeJS module)
    Version:      1.0.3
    Available at: 
      - https://d3js.org/d3-dispatch/
      - https://github.com/d3/d3-dispatch
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-drag@1.1.1: 
    Project:      d3-drag (NodeJS module)
    Version:      1.1.1
    Available at: 
      - https://d3js.org/d3-drag/
      - https://github.com/d3/d3-drag
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-dsv@1.0.5: 
    Project:      d3-dsv (NodeJS module)
    Version:      1.0.5
    Available at: 
      - https://d3js.org/d3-dsv/
      - https://github.com/d3/d3-dsv
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2013-2016 Mike Bostock. All rights reserved.
  
  d3-ease@1.0.3: 
    Project:      d3-ease (NodeJS module)
    Version:      1.0.3
    Available at: 
      - https://d3js.org/d3-ease/
      - https://github.com/d3/d3-ease
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. Copyright 2001 Robert Penner. All rights reserved.
  
  d3-force@1.0.6: 
    Project:      d3-force (NodeJS module)
    Version:      1.0.6
    Available at: 
      - https://d3js.org/d3-force/
      - https://github.com/d3/d3-force
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-format@1.2.0: 
    Project:      d3-format (NodeJS module)
    Version:      1.2.0
    Available at: 
      - https://d3js.org/d3-format/
      - https://github.com/d3/d3-format
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2015 Mike Bostock. All rights reserved.
  
  d3-geo@1.6.4: 
    Project:      d3-geo (NodeJS module)
    Version:      1.6.4
    Available at: 
      - https://d3js.org/d3-geo/
      - https://github.com/d3/d3-geo
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.*
  
  d3-hierarchy@1.1.5: 
    Project:      d3-hierarchy (NodeJS module)
    Version:      1.1.5
    Available at: 
      - https://d3js.org/d3-hierarchy/
      - https://github.com/d3/d3-hierarchy
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-interpolate@1.1.5: 
    Project:      d3-interpolate (NodeJS module)
    Version:      1.1.5
    Available at: 
      - https://d3js.org/d3-interpolate/
      - https://github.com/d3/d3-interpolate
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-path@1.0.5: 
    Project:      d3-path (NodeJS module)
    Version:      1.0.5
    Available at: 
      - https://d3js.org/d3-path/
      - https://github.com/d3/d3-path
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2015-2016 Mike Bostock. All rights reserved.
  
  d3-polygon@1.0.3: 
    Project:      d3-polygon (NodeJS module)
    Version:      1.0.3
    Available at: 
      - https://d3js.org/d3-polygon/
      - https://github.com/d3/d3-polygon
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-quadtree@1.0.3: 
    Project:      d3-quadtree (NodeJS module)
    Version:      1.0.3
    Available at: 
      - https://d3js.org/d3-quadtree/
      - https://github.com/d3/d3-quadtree
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-queue@3.0.7: 
    Project:      d3-queue (NodeJS module)
    Version:      3.0.7
    Available at: 
      - https://d3js.org/d3-queue/
      - https://github.com/d3/d3-queue
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2012-2016, Michael Bostock. All rights reserved.
  
  d3-random@1.1.0: 
    Project:      d3-random (NodeJS module)
    Version:      1.1.0
    Available at: 
      - https://d3js.org/d3-random/
      - https://github.com/d3/d3-random
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-request@1.0.5: 
    Project:      d3-request (NodeJS module)
    Version:      1.0.5
    Available at: 
      - https://d3js.org/d3-request/
      - https://github.com/d3/d3-request
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-scale@1.0.6: 
    Project:      d3-scale (NodeJS module)
    Version:      1.0.6
    Available at: 
      - https://d3js.org/d3-scale/
      - https://github.com/d3/d3-scale
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2015 Mike Bostock. All rights reserved.
  
  d3-selection@1.1.0: 
    Project:      d3-selection (NodeJS module)
    Version:      1.1.0
    Available at: 
      - https://d3js.org/d3-selection/
      - https://github.com/d3/d3-selection
    Developed by: Mike Bostock (https://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2010-2016, Michael Bostock. All rights reserved.
  
  d3-shape@1.2.0: 
    Project:      d3-shape (NodeJS module)
    Version:      1.2.0
    Available at: 
      - https://d3js.org/d3-shape/
      - https://github.com/d3/d3-shape
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2015 Mike Bostock. All rights reserved.
  
  d3-time-format@2.0.5: 
    Project:      d3-time-format (NodeJS module)
    Version:      2.0.5
    Available at: 
      - https://d3js.org/d3-time-format/
      - https://github.com/d3/d3-time-format
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-time@1.0.7: 
    Project:      d3-time (NodeJS module)
    Version:      1.0.7
    Available at: 
      - https://d3js.org/d3-time/
      - https://github.com/d3/d3-time
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-timer@1.0.6: 
    Project:      d3-timer (NodeJS module)
    Version:      1.0.6
    Available at: 
      - https://d3js.org/d3-timer/
      - https://github.com/d3/d3-timer
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-transition@1.1.0: 
    Project:      d3-transition (NodeJS module)
    Version:      1.1.0
    Available at: 
      - https://d3js.org/d3-transition/
      - https://github.com/d3/d3-transition
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2010-2015, Michael Bostock. All rights reserved.*
  
  d3-voronoi@1.1.2: 
    Project:      d3-voronoi (NodeJS module)
    Version:      1.1.2
    Available at: 
      - https://d3js.org/d3-voronoi/
      - https://github.com/d3/d3-voronoi
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.*
  
  d3-zoom@1.5.0: 
    Project:      d3-zoom (NodeJS module)
    Version:      1.5.0
    Available at: 
      - https://d3js.org/d3-zoom/
      - https://github.com/d3/d3-zoom
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3@4.10.0: 
    Project:      d3 (NodeJS module)
    Version:      4.10.0
    Available at: 
      - https://d3js.org
      - https://github.com/d3/d3
    Developed by: Mike Bostock (https://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2017 Mike Bostock. All rights reserved.
  
  delegate@3.2.0: 
    Project:      delegate (NodeJS module)
    Version:      3.2.0
    Available at: https://github.com/zenorocha/delegate
    License name: MIT License
  
  dk.brics.automaton:1.11-8: 
    Project:      Automaton
    Version:      1.11-8
    Available at: http://www.brics.dk/automaton/
    License name: BSD 2-Clause (Simplified or FreeBSD) License
  
  encoding@0.1.12: 
    Project:      encoding (NodeJS module)
    Version:      0.1.12
    Available at: https://github.com/andris9/encoding
    Developed by: Andris Reinman
    License name: MIT License
    Notice:       Copyright (c) 2012-2014 Andris Reinman
  
  es6-promise@4.2.4: 
    Project:      es6-promise (NodeJS module)
    Version:      4.2.4
    Available at: https://github.com/stefanpenner/es6-promise
    Developed by: Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
    License name: MIT License
    Notice:       Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors
  
  esprima@4.0.1: 
    Project:      esprima (NodeJS module)
    Version:      4.0.1
    Available at: 
      - http://esprima.org
      - https://github.com/jquery/esprima
    Developed by: Ariya Hidayat (ariya.hidayat@gmail.com)
    License name: BSD 2-Clause (Simplified or FreeBSD) License
    Notice:       Copyright JS Foundation and other contributors, https://js.foundation/
  
  file-saver@1.3.8: 
    Project:      file-saver (NodeJS module)
    Version:      1.3.8
    Available at: https://github.com/eligrey/FileSaver.js
    Developed by: Eli Grey (me@eligrey.com)
    License name: MIT License
    Notice:       Copyright © 2016 [Eli Grey][1].
  
  font-awesome@4.7.0: 
    Project:      font-awesome (NodeJS module)
    Version:      4.7.0
    Available at: 
      - http://fontawesome.io/
      - https://github.com/FortAwesome/Font-Awesome
    Developed by: Dave Gandy (http://twitter.com/davegandy)
    License name: Font Awesome License
  
  good-listener@1.2.2: 
    Project:      good-listener (NodeJS module)
    Version:      1.2.2
    Available at: https://github.com/zenorocha/good-listener
    License name: MIT License
  
  iconv-lite@0.4.23: 
    Project:      iconv-lite (NodeJS module)
    Version:      0.4.23
    Available at: https://github.com/ashtuchkin/iconv-lite
    Developed by: Alexander Shtuchkin (ashtuchkin@gmail.com)
    License name: MIT License
    Notice:       Copyright (c) 2011 Alexander Shtuchkin
  
  identicon.js@1.3.0: 
    Project:      identicon.js (NodeJS module)
    Version:      1.3.0
    Available at: https://github.com/stewartlord/identicon.js
    Developed by: stewardlord
    License name: BSD 2-Clause (Simplified or FreeBSD) License
    Notice:       Copyright (c) 2013, Stewart Lord. All rights reserved.
  
  io.airlift.airline:0.7: 
    Project:      airline
    Version:      0.7
    Available at: https://github.com/airlift/airline
    License name: Apache License, version 2.0
  
  io.cloudsoft.windows:0.12.3: 
    Project: 
      - Java WinRM library
      - WinRM Client
    Version:      0.12.3
    Available at: http://github.com/cloudsoft/winrm4j
    License name: Apache License, version 2.0
  
  io.fabric8.zjsonpatch:0.3.0: 
    Project:      zjsonpatch
    Version:      0.3.0
    Available at: https://github.com/fabric8io/zjsonpatch/
    License name: Apache License, version 2.0
  
  io.fabric8:6.8.1: 
    Project: 
      - "Fabric8 :: Kubernetes :: HttpClient :: OkHttp"
      - "Fabric8 :: Kubernetes :: Java Client"
      - "Fabric8 :: Kubernetes :: Java Client API"
      - "Fabric8 :: Kubernetes Model :: API Extensions"
      - "Fabric8 :: Kubernetes Model :: Admission Registration, Authentication and Authorization"
      - "Fabric8 :: Kubernetes Model :: Apps"
      - "Fabric8 :: Kubernetes Model :: Autoscaling"
      - "Fabric8 :: Kubernetes Model :: Batch"
      - "Fabric8 :: Kubernetes Model :: Certificates"
      - "Fabric8 :: Kubernetes Model :: Common"
      - "Fabric8 :: Kubernetes Model :: Coordination"
      - "Fabric8 :: Kubernetes Model :: Core"
      - "Fabric8 :: Kubernetes Model :: Discovery"
      - "Fabric8 :: Kubernetes Model :: Events"
      - "Fabric8 :: Kubernetes Model :: Extensions"
      - "Fabric8 :: Kubernetes Model :: FlowControl"
      - "Fabric8 :: Kubernetes Model :: Metrics"
      - "Fabric8 :: Kubernetes Model :: Networking"
      - "Fabric8 :: Kubernetes Model :: Node"
      - "Fabric8 :: Kubernetes Model :: Policy"
      - "Fabric8 :: Kubernetes Model :: RBAC"
      - "Fabric8 :: Kubernetes Model :: Resource"
      - "Fabric8 :: Kubernetes Model :: Scheduling"
      - "Fabric8 :: Kubernetes Model :: Sigs :: Gateway API"
      - "Fabric8 :: Kubernetes Model :: Storage Class"
      - "Fabric8 :: OpenShift Cluster Autoscaler Operator Model"
      - "Fabric8 :: OpenShift Config Model"
      - "Fabric8 :: OpenShift Console Model"
      - "Fabric8 :: OpenShift Hive Model"
      - "Fabric8 :: OpenShift Installer Model"
      - "Fabric8 :: OpenShift Kube Storage Version Migrator Model"
      - "Fabric8 :: OpenShift Machine API Operator Model"
      - "Fabric8 :: OpenShift Machine Config Operator Model"
      - "Fabric8 :: OpenShift Miscellaneous Operators Model"
      - "Fabric8 :: OpenShift Model"
      - "Fabric8 :: OpenShift Monitoring Model"
      - "Fabric8 :: OpenShift Node Tuning Operator Model"
      - "Fabric8 :: OpenShift Operator Model"
      - "Fabric8 :: OpenShift OperatorHub Model"
      - "Fabric8 :: OpenShift Whereabouts CNI Model"
      - "Fabric8 :: Openshift :: Java Client"
      - "Fabric8 :: Openshift :: Java Client API"
    Version:      6.8.1
    Available at: http://fabric8.io/
    Developed by: Red Hat (http://redhat.com)
    License name: Apache License, version 2.0
  
  io.github.x-stream.mxparser:1.2.2: 
    Project:      MXParser
    Version:      1.2.2
    Available at: http://x-stream.github.io/mxparser
    License name: Indiana University Extreme! Lab Software License, version 1.2
    Notice:       Copyright (c) Extreme! Lab, Indiana University
  
  io.swagger:1.6.2: 
    Project: 
      - swagger-annotations
      - swagger-core
      - swagger-jaxrs
      - swagger-models
    Version:      1.6.2
    Available at: https://github.com/swagger-api/swagger-core
    License name: Apache License, version 2.0
  
  is-stream@1.1.0: 
    Project:      is-stream (NodeJS module)
    Version:      1.1.0
    Available at: https://github.com/sindresorhus/is-stream
    Developed by: Sindre Sorhus (sindresorhus.com)
    License name: MIT License
    Notice:       Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
  
  isomorphic-fetch@2.2.1: 
    Project:      isomorphic-fetch (NodeJS module)
    Version:      2.2.1
    Available at: 
      - https://github.com/matthew-andrews/isomorphic-fetch
      - https://github.com/matthew-andrews/isomorphic-fetch/issues
    Developed by: Matt Andrews (matt@mattandre.ws)
    License name: MIT License
    Notice:       Copyright (c) 2015 Matt Andrews
  
  jakarta.activation.jakarta.activation-api:1.2.2: 
    Project:      Jakarta Activation API jar
    Version:      1.2.2
    Available at: https://github.com/eclipse-ee4j/jaf
    Developed by: Eclipse Foundation (https://www.eclipse.org)
    License name: Eclipse Distribution License, version 1.0
  
  jakarta.annotation.jakarta.annotation-api:1.3.5: 
    Project:      Jakarta Annotations API
    Version:      1.3.5
    Available at: https://projects.eclipse.org/projects/ee4j.ca
    Developed by: Eclipse Foundation (https://www.eclipse.org)
    License name: Eclipse Public License, version 2.0
  
  jakarta.ws.rs.jakarta.ws.rs-api:2.1.6: 
    Project:      jakarta.ws.rs-api
    Version:      2.1.6
    Available at: https://github.com/eclipse-ee4j/jaxrs-api
    Developed by: Eclipse Foundation (https://www.eclipse.org/org/foundation/)
    License name: Eclipse Public License, version 2.0
  
  jakarta.xml.bind.jakarta.xml.bind-api:2.3.3: 
    Project:      Jakarta XML Binding API
    Version:      2.3.3
    Available at: https://github.com/eclipse-ee4j/jaxb-api
    Developed by: Eclipse Foundation (https://www.eclipse.org)
    License name: Eclipse Distribution License, version 1.0
  
  java-stack-parser@1.0.0: 
    Project:      java-stack-parser (NodeJS module)
    Version:      1.0.0
    Available at: https://github.com/tbouron/java-stack-parser
    Developed by: Thomas Bouron
    License name: Apache License, version 2.0
  
  javax.annotation.jsr250-api:1.0: 
    Project:      JSR-250 Common Annotations for the JavaTM Platform
    Version:      1.0
    Available at: https://jcp.org/en/jsr/detail?id=250
    License name: Common Development and Distribution License, version 1.0
  
  javax.inject:1: 
    Project:      javax.inject
    Version:      1
    Available at: http://code.google.com/p/atinject/
    License name: Apache License, version 2.0
  
  javax.servlet.javax.servlet-api:3.1.0: 
    Project:      Java Servlet API
    Version:      3.1.0
    Available at: http://servlet-spec.java.net
    Developed by: GlassFish Community (https://glassfish.dev.java.net)
    License name: Common Development and Distribution License, version 1.1
  
  javax.validation.validation-api:1.1.0.Final: 
    Project:      Bean Validation API
    Version:      1.1.0.Final
    Available at: http://beanvalidation.org/
    License name: Apache License, version 2.0
  
  javax.ws.rs.javax.ws.rs-api:2.1.1: 
    Project:      javax.ws.rs-api
    Version:      2.1.1
    Available at: https://github.com/eclipse-ee4j/jaxrs-api
    Developed by: Eclipse Foundation (https://www.eclipse.org/org/foundation/)
    License name: Common Development and Distribution License, version 1.1
  
  joda-time:2.10.14: 
    Project:      Joda-Time
    Version:      2.10.14
    Available at: https://www.joda.org/joda-time/
    Developed by: Joda.org (https://www.joda.org)
    License name: Apache License, version 2.0
  
  jquery@1.12.4: 
    Project:      jquery (NodeJS module)
    Version:      1.12.4
    Available at: 
      - http://jquery.com
      - https://github.com/jquery/jquery
    Developed by: jQuery Foundation and other contributors (https://github.com/jquery/jquery/blob/1.12-stable/AUTHORS.txt)
    License name: MIT License
    Notice:       Copyright jQuery Foundation and other contributors, https://jquery.org/
  
  js-yaml@3.12.0: 
    Project:      js-yaml (NodeJS module)
    Version:      3.12.0
    Available at: https://github.com/nodeca/js-yaml
    Developed by: Vladimir Zapparov (dervus.grim@gmail.com)
    License name: MIT License
    Notice:       Copyright (C) 2011-2015 by Vitaly Puzrin
  
  jsonschema@1.2.4: 
    Project:      jsonschema (NodeJS module)
    Version:      1.2.4
    Available at: https://github.com/tdegrunt/jsonschema
    Developed by: Tom de Grunt (tom@degrunt.nl)
    License name: MIT License
    Notice:       Copyright (C) 2012-2015 Tom de Grunt <tom@degrunt.nl>
  
  jssha@2.3.1: 
    Project:      jssha (NodeJS module)
    Version:      2.3.1
    Available at: https://github.com/Caligatio/jsSHA
    Developed by: Brian Turek (brian.turek@gmail.com)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2008-2017, Brian Turek. All rights reserved.*
  
  lodash@4.17.10: 
    Project:      lodash (NodeJS module)
    Version:      4.17.10
    Available at: 
      - https://github.com/lodash/lodash
      - https://lodash.com/
    Developed by: John-David Dalton (http://allyoucanleet.com/)
    License name: MIT License
    Notice:       Copyright JS Foundation and other contributors <https://js.foundation/>
  
  moment@2.22.2: 
    Project:      moment (NodeJS module)
    Version:      2.22.2
    Available at: 
      - http://momentjs.com
      - https://github.com/moment/moment
    Developed by: Iskren Ivov Chernev (https://github.com/ichernev)
    License name: MIT License
    Notice:       Copyright (c) JS Foundation and other contributors
  
  net.i2p.crypto.eddsa:0.3.0: 
    Project:      EdDSA-Java
    Version:      0.3.0
    Available at: https://github.com/str4d/ed25519-java
    License name: CC0 1.0 Universal
  
  net.java.dev.jna:5.9.0: 
    Project: 
      - Java Native Access
      - Java Native Access Platform
    Version:      5.9.0
    Available at: https://github.com/java-native-access/jna
    License name: Apache License, version 2.0
  
  net.minidev.accessors-smart:2.4.9: 
    Project:      ASM based accessors helper used by json-smart
    Version:      2.4.9
    Available at: https://urielch.github.io/
    Developed by: Chemouni Uriel (https://urielch.github.io/)
    License name: Apache License, version 2.0
  
  net.minidev.json-smart:2.4.10: 
    Project:      JSON Small and Fast Parser
    Version:      2.4.10
    Available at: https://urielch.github.io/
    Developed by: Chemouni Uriel (https://urielch.github.io/)
    License name: Apache License, version 2.0
  
  ngclipboard@1.1.2: 
    Project:      ngclipboard (NodeJS module)
    Version:      1.1.2
    Available at: https://github.com/sachinchoolur/ngclipboard
    Developed by: Sachin (https://github.com/sachinchoolur)
    License name: MIT License
    Notice:       Copyright (c) 2015 Sachin N
  
  node-fetch@1.7.3: 
    Project:      node-fetch (NodeJS module)
    Version:      1.7.3
    Available at: https://github.com/bitinn/node-fetch
    Developed by: David Frank
    License name: MIT License
    Notice:       Copyright (c) 2016 David Frank
  
  normalizr@2.3.1: 
    Project:      normalizr (NodeJS module)
    Version:      2.3.1
    Available at: https://github.com/paularmstrong/normalizr
    Developed by: Dan Abramov
    License name: MIT License
    Notice:       Copyright (c) 2014 Dan Abramov
  
  org.apache.commons.commons-compress:1.21: 
    Project:      Apache Commons Compress
    Version:      1.21
    Available at: https://commons.apache.org/proper/commons-compress/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.commons.commons-lang3:3.12.0: 
    Project:      Apache Commons Lang
    Version:      3.12.0
    Available at: https://commons.apache.org/proper/commons-lang/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.cxf:3.3.9: 
    Project:      Apache CXF
    Version:      3.3.9
    Available at: https://cxf.apache.org
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.cxf:3.4.10: 
    Project:      Apache CXF
    Version:      3.4.10
    Available at: https://cxf.apache.org
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.felix.org.apache.felix.cm.json:1.0.6: 
    Project:      Apache Felix Configuration Json
    Version:      1.0.6
    Available at: https://felix.apache.org/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.felix.org.apache.felix.configadmin.plugin.interpolation:1.2.6: 
    Project:      Apache Felix Configuration Admin Values Interpolation Plugin
    Version:      1.2.6
    Available at: https://felix.apache.org/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.felix.org.apache.felix.configadmin:1.9.24: 
    Project:      Apache Felix Configuration Admin Service
    Version:      1.9.24
    Available at: http://felix.apache.org/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.felix.org.apache.felix.fileinstall:3.7.4: 
    Project:      Apache Felix File Install
    Version:      3.7.4
    Available at: http://felix.apache.org/site/apache-felix-file-install.html
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.felix.org.apache.felix.framework:6.0.5: 
    Project:      Apache Felix Framework
    Version:      6.0.5
    Available at: http://felix.apache.org/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.felix.org.apache.felix.utils:1.11.8: 
    Project:      Apache Felix Utils
    Version:      1.11.8
    Available at: http://felix.apache.org/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.geronimo.specs.geronimo-json_1.1_spec:1.5: 
    Project:      Apache Geronimo JSON Spec 1.1
    Version:      1.5
    Available at: http://geronimo.apache.org/maven/specs/geronimo-json_1.1_spec/1.5
    Developed by: The Apache Software Foundation (http://www.apache.org)
    License name: Apache License, version 2.0
  
  org.apache.geronimo.specs.geronimo-stax-api_1.0_spec:1.0.1: 
    Project:      Streaming API for XML (STAX API 1.0)
    Version:      1.0.1
    Available at: http://geronimo.apache.org/specs/geronimo-stax-api_1.0_spec
    Developed by: Apache Software Foundation (http://www.apache.org)
    License name: Apache License, version 2.0
  
  org.apache.geronimo.specs.geronimo-ws-metadata_2.0_spec:1.1.3: 
    Project:      Web Services Metadata 2.0
    Version:      1.1.3
    Available at: http://geronimo.apache.org/maven/specs/geronimo-ws-metadata_2.0_spec/1.1.3
    Developed by: The Apache Software Foundation (http://www.apache.org)
    License name: Apache License, version 2.0
  
  org.apache.geronimo.specs:1.1: 
    Project: 
      - Activation 1.1
      - SAAJ 1.3
    Version:      1.1
    Available at: 
      - http://geronimo.apache.org/maven/specs/geronimo-activation_1.1_spec/1.1
      - http://geronimo.apache.org/maven/specs/geronimo-saaj_1.3_spec/1.1
    Developed by: The Apache Software Foundation (http://www.apache.org)
    License name: Apache License, version 2.0
  
  org.apache.geronimo.specs:1.2: 
    Project: 
      - Apache Geronimo JAX-WS Spec 2.2
      - Apache Geronimo STAX Spec 1.2
    Version:      1.2
    Available at: 
      - http://geronimo.apache.org/maven/specs/geronimo-jaxws_2.2_spec/1.2
      - http://geronimo.apache.org/maven/specs/geronimo-stax-api_1.2_spec/1.2
    Developed by: The Apache Software Foundation (http://www.apache.org)
    License name: Apache License, version 2.0
  
  org.apache.httpcomponents.httpasyncclient:4.1.4: 
    Project:      Apache HttpAsyncClient
    Version:      4.1.4
    Available at: http://hc.apache.org/httpcomponents-asyncclient
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.httpcomponents.httpclient:4.5.13: 
    Project:      Apache HttpClient
    Version:      4.5.13
    Available at: http://hc.apache.org/httpcomponents-client-ga
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.httpcomponents.httpcore-nio:4.4.12: 
    Project:      Apache HttpCore NIO
    Version:      4.4.12
    Available at: http://hc.apache.org/httpcomponents-core-ga
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.httpcomponents.httpcore:4.4.15: 
    Project:      Apache HttpCore
    Version:      4.4.15
    Available at: http://hc.apache.org/httpcomponents-core-ga
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.jclouds:2.4.0: 
    Project:      Apache jclouds
    Version:      2.4.0
    Available at: https://jclouds.apache.org/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.karaf:4.3.8: 
    Project: 
      - "Apache Karaf :: Assemblies :: Features :: Base"
      - "Apache Karaf :: Assemblies :: Features :: Framework"
      - "Apache Karaf :: Assemblies :: Features :: Standard"
      - "Apache Karaf :: Client"
      - "Apache Karaf :: ConfigAdmin :: Core"
      - "Apache Karaf :: Diagnostic :: Boot"
      - "Apache Karaf :: Features :: Core"
      - "Apache Karaf :: Features :: Extension"
      - "Apache Karaf :: JAAS :: Boot"
      - "Apache Karaf :: Main"
      - "Apache Karaf :: Shell :: Core"
      - "Apache Karaf :: Specs :: Activator"
      - "Apache Karaf :: Specs :: Java Xml"
      - "Apache Karaf :: Specs :: Java Xml WS"
      - "Apache Karaf :: Specs :: Locator"
      - "Apache Karaf :: Util"
    Version:      4.3.8
    Available at: https://www.apache.org/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.maven.resolver:1.8.2: 
    Project: 
      - Maven Artifact Resolver API
      - Maven Artifact Resolver Implementation
      - Maven Artifact Resolver Named Locks
      - Maven Artifact Resolver SPI
      - Maven Artifact Resolver Utilities
    Version:      1.8.2
    Available at: https://maven.apache.org/resolver/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.neethi:3.1.1: 
    Project:      Apache Neethi
    Version:      3.1.1
    Available at: http://ws.apache.org/neethi/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.servicemix.specs.org.apache.servicemix.specs.activation-api-1.2.1:1.2.1_3: 
    Project:      "Apache ServiceMix :: Specs :: Activation API 1.2.1"
    Version:      1.2.1_3
    Available at: http://servicemix.apache.org/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.servicemix.specs:2.9.0: 
    Project: 
      - "Apache ServiceMix :: Specs :: Activation API 1.4"
      - "Apache ServiceMix :: Specs :: Activator"
      - "Apache ServiceMix :: Specs :: JAXB API 2.2"
      - "Apache ServiceMix :: Specs :: Stax API 1.0"
    Version:      2.9.0
    Available at: http://servicemix.apache.org/
    Developed by: The Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.sling.org.apache.sling.commons.johnzon:1.2.14: 
    Project:      Apache Sling Commons Johnzon Wrapper Library
    Version:      1.2.14
    Available at: https://sling.apache.org
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.sshd.sshd-osgi:2.9.1: 
    Project:      "Apache Mina SSHD :: OSGi"
    Version:      2.9.1
    Available at: https://www.apache.org/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.apache.ws.xmlschema.xmlschema-core:2.2.5: 
    Project:      XmlSchema Core
    Version:      2.2.5
    Available at: https://ws.apache.org/commons/xmlschema20/
    Developed by: The Apache Software Foundation (https://www.apache.org/)
    License name: Apache License, version 2.0
  
  org.bouncycastle.bcprov-ext-jdk15on:1.60: 
    Project:      Bouncy Castle Provider
    Version:      1.60
    Available at: https://www.bouncycastle.org/java.html
    License name: MIT License
    Notice:       Copyright (c) The Legion of the Bouncy Castle Inc. (http://www.bouncycastle.org)
  
  org.bouncycastle:1.72: 
    Project: 
      - Bouncy Castle ASN.1 Extension and Utility APIs
      - Bouncy Castle PKIX, CMS, EAC, TSP, PKCS, OCSP, CMP, and CRMF APIs
      - Bouncy Castle Provider
    Version:      1.72
    Available at: https://www.bouncycastle.org/java.html
    License name: MIT License
    Notice:       Copyright (c) The Legion of the Bouncy Castle Inc. (http://www.bouncycastle.org)
  
  org.codehaus.groovy.groovy-all:2.4.21: 
    Project:      Apache Groovy
    Version:      2.4.21
    Available at: http://groovy-lang.org
    Developed by: Apache Software Foundation (http://groovy-lang.org)
    License name: Apache License, version 2.0
  
  org.codehaus.mojo.animal-sniffer-annotations:1.17: 
    Project:      Animal Sniffer Annotations
    Version:      1.17
    Available at: http://www.mojohaus.org/animal-sniffer
    Developed by: MojoHaus (http://www.mojohaus.org)
    License name: MIT License
  
  org.codehaus.woodstox.stax2-api:4.2.1: 
    Project:      Stax2 API
    Version:      4.2.1
    Available at: http://github.com/FasterXML/stax2-api
    Developed by: fasterxml.com (http://fasterxml.com)
    License name: BSD 2-Clause (Simplified or FreeBSD) License
  
  org.eclipse.jetty:9.4.49.v20220914: 
    Project: 
      - "Jetty :: Http Utility"
      - "Jetty :: IO Utility"
      - "Jetty :: Security"
      - "Jetty :: Server Core"
      - "Jetty :: Servlet Handling"
      - "Jetty :: Utilities"
      - "Jetty :: Utilities :: Ajax(JSON)"
      - "Jetty :: Webapp Application Support"
      - "Jetty :: XML utilities"
    Version:      9.4.49.v20220914
    Available at: https://eclipse.org/jetty
    Developed by: Webtide (https://webtide.com)
    License name: Apache License, version 2.0
  
  org.eclipse.platform.org.eclipse.osgi:3.17.200: 
    Project:      OSGi System Bundle
    Version:      3.17.200
    Available at: http://www.eclipse.org/platform
    Developed by: Eclipse Foundation (http://www.eclipse.org/)
    License name: Eclipse Public License, version 1.0
  
  org.freemarker:2.3.31: 
    Project:      Apache FreeMarker
    Version:      2.3.31
    Available at: https://freemarker.apache.org/
    Developed by: Apache Software Foundation (http://apache.org)
    License name: Apache License, version 2.0
  
  org.glassfish.external.opendmk_jmxremote_optional_jar:1.0-b01-ea: 
    Project:      opendmk_jmxremote_optional_jar
    Version:      1.0-b01-ea
    Available at: https://opendmk.java.net/
    License name: Common Development and Distribution License, version 1.1
  
  org.glassfish.jaxb.txw2:2.3.3: 
    Project:      TXW2 Runtime
    Version:      2.3.3
    Available at: https://eclipse-ee4j.github.io/jaxb-ri
    Developed by: Eclipse Foundation (https://www.eclipse.org)
    License name: Eclipse Distribution License, version 1.0
  
  org.hamcrest.hamcrest-core:1.3: 
    Project:      Hamcrest Core
    Version:      1.3
    Available at: https://github.com/hamcrest/JavaHamcrest
    License name: BSD 3-Clause (New BSD) License
  
  org.javassist:3.19.0-GA: 
    Project:      Javassist
    Version:      3.19.0-GA
    Available at: http://www.javassist.org/
    License name: Apache License, version 2.0
    Notice:       Copyright (c) Shigeru Chiba
  
  org.jline:3.21.0: 
    Project:      JLine Bundle
    Version:      3.21.0
    Available at: http://nexus.sonatype.org/oss-repository-hosting.html
    License name: BSD 3-Clause (New BSD) License
    Notice: 
      - Copyright (c) 2002-2018, the original author or authors.
      - Neither the name of JLine nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
  
  org.ops4j.base.ops4j-base-util-collections:1.5.1: 
    Project:      OPS4J Base - Util - Collections
    Version:      1.5.1
    Available at: http://team.ops4j.org/wiki/display/base/
    Developed by: OPS4J - Open Participation Software for Java (http://www.ops4j.org/)
    License name: Apache License, version 2.0
  
  org.ops4j.pax.logging:2.0.18: 
    Project: 
      - OPS4J Pax Logging - API
      - OPS4J Pax Logging - Log4Jv2 implementation
      - OPS4J Pax Logging - Logback implementation
    Version:      2.0.18
    Available at: https://ops4j1.jira.com/wiki/spaces/paxlogging/overview
    Developed by: OPS4J - Open Participation Software for Java (http://www.ops4j.org/)
    License name: Apache License, version 2.0
  
  org.ops4j.pax.swissbox.pax-swissbox-property:1.8.5: 
    Project:      "OPS4J Pax Swissbox :: Property"
    Version:      1.8.5
    Available at: http://team.ops4j.org/wiki/display/PAXSB
    Developed by: OPS4J - Open Participation Software for Java (http://www.ops4j.org/)
    License name: Apache License, version 2.0
  
  org.ops4j.pax.url:2.6.12: 
    Project: 
      - OPS4J Pax Url - mvn:
      - "OPS4J Pax Url - mvn: - support library"
    Version:      2.6.12
    Available at: https://ops4j1.jira.com/wiki/spaces/paxurl/overview
    Developed by: OPS4J - Open Participation Software for Java (http://www.ops4j.org/)
    License name: Apache License, version 2.0
  
  org.osgi.org.osgi.annotation.versioning:1.1.1: 
    Project:      org.osgi:org.osgi.annotation.versioning
    Version:      1.1.1
    Available at: https://www.osgi.org/
    Developed by: OSGi Alliance (https://www.osgi.org/)
    License name: Apache License, version 2.0
  
  org.osgi:7.0.0: 
    Project: 
      - org.osgi:osgi.cmpn
      - org.osgi:osgi.core
    Version:      7.0.0
    Available at: https://www.osgi.org/
    Developed by: OSGi Alliance (https://www.osgi.org/)
    License name: Apache License, version 2.0
  
  org.ow2.asm:5.2: 
    Project:      ASM Core
    Version:      5.2
    Available at: http://asm.objectweb.org/
    Developed by: ObjectWeb (http://www.objectweb.org/)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2000-2011 INRIA, France Telecom
  
  org.reflections:0.9.10: 
    Project:      Reflections
    Version:      0.9.10
    Available at: http://github.com/ronmamo/reflections
    License name: BSD 3-Clause (New BSD) License
  
  org.slf4j:1.7.36: 
    Project:      Simple Logging Framework for Java
    Version:      1.7.36
    Available at: http://www.slf4j.org
    Developed by: QOS.ch (http://www.qos.ch)
    Licenses: 
      -
        License name: Apache License, version 2.0
      -
        License name: MIT License
  
  org.snakeyaml.snakeyaml-engine:2.6: 
    Project:      SnakeYAML Engine
    Version:      2.6
    Available at: https://bitbucket.org/snakeyaml/snakeyaml-engine
    License name: Apache License, version 2.0
  
  org.xmlunit:2.3.0: 
    Project: 
      - org.xmlunit:xmlunit-core
      - org.xmlunit:xmlunit-matchers
    Version:      2.3.0
    Available at: http://www.xmlunit.org/
    Developed by: XMLUnit (http://www.xmlunit.org/)
    License name: Apache License, version 2.0
  
  org.yaml.snakeyaml:2.2: 
    Project:      SnakeYAML
    Version:      2.2
    Available at: https://bitbucket.org/snakeyaml/snakeyaml
    License name: Apache License, version 2.0
  
  rw@1.3.3: 
    Project:      rw (NodeJS module)
    Version:      1.3.3
    Available at: https://github.com/mbostock/rw
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2014-2016, Michael Bostock. All rights reserved.
  
  rxjs@5.5.11: 
    Project:      rxjs (NodeJS module)
    Version:      5.5.11
    Available at: https://github.com/ReactiveX/RxJS
    Developed by: Ben Lesh (ben@benlesh.com)
    License name: Apache License, version 2.0
  
  safer-buffer@2.1.2: 
    Project:      safer-buffer (NodeJS module)
    Version:      2.1.2
    Available at: https://github.com/ChALkeR/safer-buffer
    Developed by: Nikita Skovoroda (https://github.com/ChALkeR)
    License name: MIT License
    Notice:       Copyright (c) 2018 Nikita Skovoroda <chalkerx@gmail.com>
  
  select@1.1.2: 
    Project:      select (NodeJS module)
    Version:      1.1.2
    Available at: https://github.com/zenorocha/select
    License name: MIT License
  
  sprintf-js@1.0.3: 
    Project:      sprintf-js (NodeJS module)
    Version:      1.0.3
    Available at: https://github.com/alexei/sprintf.js
    Developed by: Alexandru Marasteanu (http://alexei.ro/)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2007-2014, Alexandru Marasteanu <hello [at) alexei (dot] ro>. All rights reserved.
  
  symbol-observable@1.0.1: 
    Project:      symbol-observable (NodeJS module)
    Version:      1.0.1
    Available at: https://github.com/blesh/symbol-observable
    Developed by: Ben Lesh (ben@benlesh.com)
    License name: MIT License
    Notice:       Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com). Copyright (c) Ben Lesh <ben@benlesh.com>
  
  tiny-emitter@1.2.0: 
    Project:      tiny-emitter (NodeJS module)
    Version:      1.2.0
    Available at: https://github.com/scottcorgan/tiny-emitter
    Developed by: Scott Corgan
    License name: MIT License
    Notice:       Copyright (c) 2016 Scott Corgan
  
  underscore@1.9.1: 
    Project:      underscore (NodeJS module)
    Version:      1.9.1
    Available at: 
      - http://underscorejs.org
      - https://github.com/jashkenas/underscore
    Developed by: Jeremy Ashkenas (jeremy@documentcloud.org)
    License name: MIT License
    Notice:       Copyright (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative. Reporters & Editors
  
  whatwg-fetch@2.0.4: 
    Project:      whatwg-fetch (NodeJS module)
    Version:      2.0.4
    Available at: https://github.com/github/fetch
    License name: MIT License
    Notice:       Copyright (c) 2014-2016 GitHub, Inc.
  
  wsdl4j:1.6.3: 
    Project:      WSDL4J
    Version:      1.6.3
    Available at: http://sf.net/projects/wsdl4j
    License name: Common Public License, version 1.0
  
  xml-resolver:1.2: 
    Project:      XML Commons Resolver Component
    Version:      1.2
    Available at: http://xml.apache.org/commons/components/resolver/
    Developed by: Apache Software Foundation (http://www.apache.org/)
    License name: Apache License, version 2.0
  
  xmlhttprequest@1.8.0: 
    Project:      xmlhttprequest (NodeJS module)
    Version:      1.8.0
    Available at: https://github.com/driverdan/node-XMLHttpRequest
    Developed by: Dan DeFelippi (http://driverdan.com)
    License name: MIT License
  
  xmlpull:1.1.3.1: 
    Project:      XML Pull Parsing API
    Version:      1.1.3.1
    Available at: http://www.xmlpull.org
    License name: Public Domain
  

Apache License: |

   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.


   END OF TERMS AND CONDITIONS

   APPENDIX - HOW TO APPLY THE APACHE LICENSE TO YOUR WORK
   
   To apply the Apache License to your work, attach the following boilerplate 
   notice, with the fields enclosed by brackets "[]" replaced with your own 
   identifying information. (Don't include the brackets!) The text should be 
   enclosed in the appropriate comment syntax for the file format. We also 
   recommend that a file or class name and description of purpose be included 
   on the same "printed page" as the copyright notice for easier 
   identification within third-party archives.
   
   Copyright [yyyy] [name of copyright owner]
   
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at
   
       http://www.apache.org/licenses/LICENSE-2.0
   
   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
   
   
Dependency licenses:

   # Licenses of the source and binary dependencies of this software are included below.

  Apache License, version 2.0: |
    # from https://www.apache.org/licenses/LICENSE-2.0
       
                                     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.
     

  BSD 2-Clause (Simplified or FreeBSD) License: |
    Redistribution and use in source and binary forms, with or without modification, 
    are permitted provided that the following conditions are met:
    
    1. Redistributions of source code must retain the above copyright notice, this list 
    of conditions and the following disclaimer.
    
    2. Redistributions in binary form must reproduce the above copyright notice, this 
    list of conditions and the following disclaimer in the documentation and/or other 
    materials provided with the distribution.
    
    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
    OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
    SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 
    TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 
    BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 
    DAMAGE.

  BSD 3-Clause (New BSD) License: |
    Copyright (c) as noted in accompanying NOTICE file. All rights reserved.
    
    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions are met:
    
      1. Redistributions of source code must retain the above copyright notice,
         this list of conditions and the following disclaimer.
    
      2. Redistributions in binary form must reproduce the above copyright 
         notice, this list of conditions and the following disclaimer in 
         the documentation and/or other materials provided with the distribution.
    
      3. The names of the authors may not be used to endorse or promote products
         derived from this software without specific prior written permission.
    
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
    FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
    INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
    OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
    EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

  CC0 1.0 Universal: |
    
    CC0 1.0 Universal (CC0 1.0)
    
    Creative Commons - No Copyright
    
    The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law.
    
    You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.
    
    Legal Code
    
    Statement of Purpose
    
    The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work").
    
    Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.
    
    For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.
    
    1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following:
    
    the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;
    moral rights retained by the original author(s) and/or performer(s);
    publicity and privacy rights pertaining to a person's image or likeness depicted in a Work;
    rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below;
    rights protecting the extraction, dissemination, use and reuse of data in a Work;
    database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and
    other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.
    2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose.
    
    3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose.
    
    4. Limitations and Disclaimers.
    
    No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.
    Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.
    Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.
    Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.
    
    
    

  Common Development and Distribution License, version 1.0: |
    COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) 
    Version 1.0
    
    1. Definitions.
    1.1. "Contributor" means each individual or entity that creates or contributes to the creation of Modifications.
    1.2. "Contributor Version" means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
    1.3. "Covered Software" means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
    1.4. "Executable" means the Covered Software in any form other than Source Code.
    1.5. "Initial Developer" means the individual or entity that first makes Original Software available under this License.
    1.6. "Larger Work" means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
    1.7. "License" means this document.
    1.8. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
    1.9. "Modifications" means the Source Code and Executable form of any of the following:
    A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
    B. Any new file that contains any part of the Original Software or previous Modification; or
    C. Any new file that is contributed or otherwise made available under the terms of this License.
    1.10. "Original Software" means the Source Code and Executable form of computer software code that is originally released under this License.
    1.11. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
    1.12. "Source Code" means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
    1.13. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
    2. License Grants.
    2.1. The Initial Developer Grant. 
    Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
    (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
    (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
    (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
    (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
    2.2. Contributor Grant. 
    Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
    (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
    (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
    (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
    (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
    3. Distribution Obligations.
    3.1. Availability of Source Code. 
    Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
    3.2. Modifications. 
    The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
    3.3. Required Notices. 
    You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
    3.4. Application of Additional Terms. 
    You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients' rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
    3.5. Distribution of Executable Versions. 
    You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient's rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
    3.6. Larger Works. 
    You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
    4. Versions of the License.
    4.1. New Versions. 
    Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
    4.2. Effect of New Versions. 
    You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
    4.3. Modified Versions. 
    When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
    5. DISCLAIMER OF WARRANTY.
    COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
    
    6. TERMINATION.
    6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
    6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as "Participant") alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
    6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
    7. LIMITATION OF LIABILITY.
    UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
    
    8. U.S. GOVERNMENT END USERS.
    The Covered Software is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" (as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and "commercial computer software documentation" as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
    
    9. MISCELLANEOUS.
    This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction's conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
    
    10. RESPONSIBILITY FOR CLAIMS.
    As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.

  Common Development and Distribution License, version 1.1: |
    COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) 
    Version 1.1
    
    1. Definitions.
    1.1. "Contributor" means each individual or entity that creates or contributes to the creation of Modifications.
    1.2. "Contributor Version" means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
    1.3. "Covered Software" means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
    1.4. "Executable" means the Covered Software in any form other than Source Code.
    1.5. "Initial Developer" means the individual or entity that first makes Original Software available under this License.
    1.6. "Larger Work" means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
    1.7. "License" means this document.
    1.8. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
    1.9. "Modifications" means the Source Code and Executable form of any of the following:
    A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
    B. Any new file that contains any part of the Original Software or previous Modification; or
    C. Any new file that is contributed or otherwise made available under the terms of this License.
    1.10. "Original Software" means the Source Code and Executable form of computer software code that is originally released under this License.
    1.11. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
    1.12. "Source Code" means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
    1.13. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
    2. License Grants.
    2.1. The Initial Developer Grant. 
    Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
    (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
    (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
    (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
    (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
    2.2. Contributor Grant. 
    Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
    (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
    (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
    (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
    (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
    3. Distribution Obligations.
    3.1. Availability of Source Code. 
    Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
    3.2. Modifications. 
    The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
    3.3. Required Notices. 
    You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
    3.4. Application of Additional Terms. 
    You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients' rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
    3.5. Distribution of Executable Versions. 
    You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient's rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
    3.6. Larger Works. 
    You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
    4. Versions of the License.
    4.1. New Versions. 
    Oracle is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
    4.2. Effect of New Versions. 
    You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
    4.3. Modified Versions. 
    When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
    5. DISCLAIMER OF WARRANTY.
    COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
    
    6. TERMINATION.
    6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
    6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as "Participant") alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
    6.3. If You assert a patent infringement claim against Participant alleging that the Participant Software directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license.
    6.4. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
    7. LIMITATION OF LIABILITY.
    UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
    
    8. U.S. GOVERNMENT END USERS.
    The Covered Software is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" (as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and "commercial computer software documentation" as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
    
    9. MISCELLANEOUS.
    This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction's conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
    
    10. RESPONSIBILITY FOR CLAIMS.
    As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
    
    NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) 
    The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.

  Common Public License, version 1.0: |
    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
    
    1.
    DEFINITIONS
    
    "Contribution" means:
    
    a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
    b) in the case of each subsequent Contributor:
    i) changes to the Program, and
    ii) additions to the Program;
    where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
    
    "Contributor" means any person or entity that distributes the Program.
    
    "Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
    
    "Program" means the Contributions distributed in accordance with this Agreement.
    
    "Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
    
    2.
    GRANT OF RIGHTS
    
    a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
    b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
    c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
    d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
    3.
    REQUIREMENTS
    
    A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
    
    a) it complies with the terms and conditions of this Agreement; and
    b) its license agreement:
    i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
    ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
    iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
    iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
    When the Program is made available in source code form:
    
    a) it must be made available under this Agreement; and
    b) a copy of this Agreement must be included with each copy of the Program.
    Contributors may not remove or alter any copyright notices contained within the Program.
    
    Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
    
    4.
    COMMERCIAL DISTRIBUTION
    
    Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
    
    For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
    
    5.
    NO WARRANTY
    
    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED 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. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
    
    6.
    DISCLAIMER OF LIABILITY
    
    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
    
    7.
    GENERAL
    
    If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
    
    If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
    
    All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
    
    Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
    
    This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
    

  Eclipse Distribution License, version 1.0: |
    Eclipse Distribution License - v 1.0
    Copyright (c) 2007, Eclipse Foundation, Inc. and its licensors.
    
    All rights reserved.
    
    Redistribution and use in source and binary forms, with or without modification, 
    are permitted provided that the following conditions are met:
    
    Redistributions of source code must retain the above copyright notice, this list 
    of conditions and the following disclaimer.
    
    Redistributions in binary form must reproduce the above copyright notice, this 
    list of conditions and the following disclaimer in the documentation and/or other 
    materials provided with the distribution.
    
    Neither the name of the Eclipse Foundation, Inc. nor the names of its contributors 
    may be used to endorse or promote products derived from this software without 
    specific prior written permission.
    
    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
    IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
    INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 
    OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 
    IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

  Eclipse Public License, version 1.0: |
    Eclipse Public License - v 1.0
    
    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
    
    1. DEFINITIONS
    
    "Contribution" means:
    
    a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
    b) in the case of each subsequent Contributor:
      i) changes to the Program, and
      ii) additions to the Program;
    
    where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
    
    "Contributor" means any person or entity that distributes the Program.
    
    "Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
    
    "Program" means the Contributions distributed in accordance with this Agreement.
    
    "Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
    
    2. GRANT OF RIGHTS
    
    a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
    b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
    c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
    d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
    
    3. REQUIREMENTS
    
    A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
    
    a) it complies with the terms and conditions of this Agreement; and
    b) its license agreement:
      i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
      ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
      iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
      iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
    
    When the Program is made available in source code form:
    
    a) it must be made available under this Agreement; and
    b) a copy of this Agreement must be included with each copy of the Program.
    
    Contributors may not remove or alter any copyright notices contained within the Program.
    
    Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
    
    4. COMMERCIAL DISTRIBUTION
    
    Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
    
    For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
    
    5. NO WARRANTY
    
    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED 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. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
    
    6. DISCLAIMER OF LIABILITY
    
    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
    
    7. GENERAL
    
    If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
    
    If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
    
    All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
    
    Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
    
    This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.

  Eclipse Public License, version 2.0: |
    Eclipse Public License - v 2.0
    
    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (“AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
    
    1. DEFINITIONS
    
    "Contribution" means:
    
    a) in the case of the initial Contributor, the initial content Distributed under this Agreement, and
    b) in the case of each subsequent Contributor:
      i) changes to the Program, and
      ii) additions to the Program;
      
    where such changes and/or additions to the Program originate from and are Distributed by that particular Contributor. A Contribution "originates" from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include changes or additions to the Program that are not Modified Works.
    
    "Contributor" means any person or entity that Distributes the Program.
    
    "Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
    
    "Program" means the Contributions Distributed in accordance with this Agreement.
    
    "Recipient" means anyone who receives the Program under this Agreement or any Secondary License (as applicable), including Contributors.
    
    "Derivative Works" shall mean any work, whether in Source Code or other form, that is based on (or derived from) the Program and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship.
    
    "Modified Works" shall mean any work in Source Code or other form that results from an addition to, deletion from, or modification of the contents of the Program, including, for purposes of clarity any new file in Source Code form that contains any contents of the Program. Modified Works shall not include works that contain only declarations, interfaces, types, classes, structures, or files of the Program solely in each case in order to link to, bind by name, or subclass the Program or Modified Works thereof.
    
    "Distribute" means the acts of a) distributing or b) making available in any manner that enables the transfer of a copy.
    
    "Source Code" means the form of a Program preferred for making modifications, including but not limited to software source code, documentation source, and configuration files.
    
    "Secondary License" means either the GNU General Public License, Version 2.0, or any later versions of that license, including any exceptions or additional permissions as identified by the initial Contributor.
    
    2. GRANT OF RIGHTS
    
    a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, Distribute and sublicense the Contribution of such Contributor, if any, and such Derivative Works.
    b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in Source Code or other form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
    c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to Distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
    d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
    e) Notwithstanding the terms of any Secondary License, no Contributor makes additional grants to any Recipient (other than those set forth in this Agreement) as a result of such Recipient's receipt of the Program under the terms of a Secondary License (if permitted under the terms of Section 3).
    
    3. REQUIREMENTS
    
    3.1 If a Contributor Distributes the Program in any form, then:
    
    a) the Program must also be made available as Source Code, in accordance with section 3.2, and the Contributor must accompany the Program with a statement that the Source Code for the Program is available under this Agreement, and informs Recipients how to obtain it in a reasonable manner on or through a medium customarily used for software exchange; and
    b) the Contributor may Distribute the Program under a license different than this Agreement, provided that such license:
      i) effectively disclaims on behalf of all other Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
      ii) effectively excludes on behalf of all other Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
      iii) does not attempt to limit or alter the recipients' rights in the Source Code under section 3.2; and
      iv) requires any subsequent distribution of the Program by any party to be under a license that satisfies the requirements of this section 3.
    
    3.2 When the Program is Distributed as Source Code:
    
    a) it must be made available under this Agreement, or if the Program (i) is combined with other material in a separate file or files made available under a Secondary License, and (ii) the initial Contributor attached to the Source Code the notice described in Exhibit A of this Agreement, then the Program may be made available under the terms of such Secondary Licenses, and
    b) a copy of this Agreement must be included with each copy of the Program.
    
    3.3 Contributors may not remove or alter any copyright, patent, trademark, attribution notices, disclaimers of warranty, or limitations of liability (‘notices’) contained within the Program from any copy of the Program which they Distribute, provided that Contributors may add their own appropriate notices.
    
    4. COMMERCIAL DISTRIBUTION
    
    Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
    
    For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
    
    5. NO WARRANTY
    
    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED 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. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
    
    6. DISCLAIMER OF LIABILITY
    
    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
    
    7. GENERAL
    
    If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
    
    If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
    
    All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
    
    Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be Distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to Distribute the Program (including its Contributions) under the new version.
    
    Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. Nothing in this Agreement is intended to be enforceable by any entity that is not a Contributor or Recipient. No third-party beneficiary rights are created under this Agreement.
    
    
    Exhibit A – Form of Secondary Licenses Notice
    
    "This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), version(s), and exceptions or additional permissions here}."
    
    Simply including a copy of this Agreement, including this Exhibit A is not sufficient to license the Source Code under Secondary Licenses.
    
    If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice.
    
    You may add additional accurate notices of copyright ownership.
    

  Font Awesome License: |
    Font Awesome Free License
    -------------------------
    
    Font Awesome Free is free, open source, and GPL friendly. You can use it for
    commercial projects, open source projects, or really almost whatever you want.
    Full Font Awesome Free license: https://fontawesome.com/license.
    
    # Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
    In the Font Awesome Free download, the CC BY 4.0 license applies to all icons
    packaged as SVG and JS file types.
    
    # Fonts: SIL OFL 1.1 License (https://scripts.sil.org/OFL)
    In the Font Awesome Free download, the SIL OLF license applies to all icons
    packaged as web and desktop font files.
    
    # Code: MIT License (https://opensource.org/licenses/MIT)
    In the Font Awesome Free download, the MIT license applies to all non-font and
    non-icon files.
    
    # Attribution
    Attribution is required by MIT, SIL OLF, and CC BY licenses. Downloaded Font
    Awesome Free files already contain embedded comments with sufficient
    attribution, so you shouldn't need to do anything additional when using these
    files normally.
    
    We've kept attribution comments terse, so we ask that you do not actively work
    to remove them from files, especially code. They're a great way for folks to 
    learn about Font Awesome.
    
    # Brand Icons
    All brand icons are trademarks of their respective owners. The use of these
    trademarks does not indicate endorsement of the trademark holder by Font
    Awesome, nor vice versa. **Please do not use brand logos for any purpose except
    to represent the company, product, or service to which they refer.**

  Indiana University Extreme! Lab Software License, version 1.2: |
    Indiana University Extreme! Lab Software License, Version 1.2
    
    Copyright (C) 2003 The Trustees of Indiana University.
    All rights reserved.
    
    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions are
    met:
    
    1) All redistributions of source code must retain the above
       copyright notice, the list of authors in the original source
       code, this list of conditions and the disclaimer listed in this
       license;
    
    2) All redistributions in binary form must reproduce the above
       copyright notice, this list of conditions and the disclaimer
       listed in this license in the documentation and/or other
       materials provided with the distribution;
    
    3) Any documentation included with all redistributions must include
       the following acknowledgement:
    
         "This product includes software developed by the Indiana
         University Extreme! Lab.  For further information please visit
         http://www.extreme.indiana.edu/"
    
       Alternatively, this acknowledgment may appear in the software
       itself, and wherever such third-party acknowledgments normally
       appear.
    
    4) The name "Indiana University" or "Indiana University
       Extreme! Lab" shall not be used to endorse or promote
       products derived from this software without prior written
       permission from Indiana University.  For written permission,
       please contact http://www.extreme.indiana.edu/.
    
    5) Products derived from this software may not use "Indiana
       University" name nor may "Indiana University" appear in their name,
       without prior written permission of the Indiana University.
    
    Indiana University provides no reassurances that the source code
    provided does not infringe the patent or any other intellectual
    property rights of any other entity.  Indiana University disclaims any
    liability to any recipient for claims brought by any other entity
    based on infringement of intellectual property rights or otherwise.
    
    LICENSEE UNDERSTANDS THAT SOFTWARE IS PROVIDED "AS IS" FOR WHICH
    NO WARRANTIES AS TO CAPABILITIES OR ACCURACY ARE MADE. INDIANA
    UNIVERSITY GIVES NO WARRANTIES AND MAKES NO REPRESENTATION THAT
    SOFTWARE IS FREE OF INFRINGEMENT OF THIRD PARTY PATENT, COPYRIGHT, OR
    OTHER PROPRIETARY RIGHTS.  INDIANA UNIVERSITY MAKES NO WARRANTIES THAT
    SOFTWARE IS FREE FROM "BUGS", "VIRUSES", "TROJAN HORSES", "TRAP
    DOORS", "WORMS", OR OTHER HARMFUL CODE.  LICENSEE ASSUMES THE ENTIRE
    RISK AS TO THE PERFORMANCE OF SOFTWARE AND/OR ASSOCIATED MATERIALS,
    AND TO THE PERFORMANCE AND VALIDITY OF INFORMATION GENERATED USING
    SOFTWARE.

  MIT License: |
    MIT License
    
    Copyright (c) as noted in accompanying NOTICE file. All rights reserved.
    
    Permission is hereby granted, free of charge, to any person obtaining a copy of this 
    software and associated documentation files (the "Software"), to deal in the Software 
    without restriction, including without limitation the rights to use, copy, modify, merge, 
    publish, distribute, sublicense, and/or sell copies of the Software, and to permit 
    persons to whom the Software is furnished to do so, subject to the following conditions:
    
    The above copyright notice and this permission notice shall be included in all copies or 
    substantial portions of the Software.
    
    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
    INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 
    PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE 
    FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
    OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
    DEALINGS IN THE SOFTWARE.

  Public Domain: |
    The project indicates it is in the public domain and does not require any license inclusion.
    

