Notice: |

  Apache Brooklyn
  Copyright 2014-2018 The Apache Software Foundation

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


Bundled dependencies:

  # This software includes the following bundled third-party components.
  # Referenced licenses can be found in the accompanying LICENSE file.

  # No such dependencies


Runtime dependencies:

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

  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-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-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@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
  
  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.
  
  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
  
  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/
  
  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.
  
  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/>
  
  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
  
  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>
  
