Socket
Socket
Sign inDemoInstall

@atlas.js/atlas

Package Overview
Dependencies
Maintainers
2
Versions
23
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@atlas.js/atlas - npm Package Compare versions

Comparing version 2.2.0 to 2.3.0

14

CHANGELOG.md

@@ -6,2 +6,16 @@ # Change Log

# [2.3.0](https://github.com/strvcom/atlas.js/compare/@atlas.js/atlas@2.2.0...@atlas.js/atlas@2.3.0) (2019-02-20)
### Features
* **atlas:** also expose component type in validation errors' context ([36d862c](https://github.com/strvcom/atlas.js/commit/36d862c)), closes [#66](https://github.com/strvcom/atlas.js/issues/66)
* **atlas:** expose additional context when FrameworkError is thrown ([1f5457a](https://github.com/strvcom/atlas.js/commit/1f5457a))
* **atlas:** expose additional context when ValidationError is thrown ([56debf1](https://github.com/strvcom/atlas.js/commit/56debf1)), closes [#66](https://github.com/strvcom/atlas.js/issues/66)
* **atlas:** log validation errors via atlas.log 🔎 ([83d088a](https://github.com/strvcom/atlas.js/commit/83d088a)), closes [#66](https://github.com/strvcom/atlas.js/issues/66)
# [2.2.0](https://github.com/strvcom/atlas.js/compare/@atlas.js/atlas@2.1.0...@atlas.js/atlas@2.2.0) (2019-02-08)

@@ -8,0 +22,0 @@

6

package.json
{
"name": "@atlas.js/atlas",
"description": "A component-based Node.js library to reduce boilerplate and provide sane project structure 🍻",
"version": "2.2.0",
"version": "2.3.0",
"author": "Robert Rossmann <robert.rossmann@strv.com>",

@@ -10,3 +10,3 @@ "bugs": "https://github.com/strvcom/atlas.js/issues",

"@atlas.js/action": "^1.2.0",
"@atlas.js/errors": "^0.3.0",
"@atlas.js/errors": "^0.4.0",
"@atlas.js/hook": "^2.1.0",

@@ -35,3 +35,3 @@ "@atlas.js/service": "^1.2.0",

},
"gitHead": "e67f1220a6aa157ef078f26075b6aa5bfad5ee18"
"gitHead": "5c97a07bd8836b5ec1324990def51e7a310154af"
}

@@ -24,5 +24,5 @@ "use strict";

function _classPrivateFieldSet(receiver, privateMap, value) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to set private field on non-instance"); } var descriptor = privateMap.get(receiver); if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; return value; }
function _classPrivateFieldSet(receiver, privateMap, value) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to set private field on non-instance"); } var descriptor = privateMap.get(receiver); if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } return value; }
function _classPrivateFieldGet(receiver, privateMap) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return privateMap.get(receiver).value; }
function _classPrivateFieldGet(receiver, privateMap) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } var descriptor = privateMap.get(receiver); if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }

@@ -171,7 +171,13 @@ class Atlas {

if (!_classPrivateFieldGet(this, _env)) {
throw new _errors.FrameworkError('env not specified and NODE_ENV was not set');
throw new _errors.FrameworkError('env not specified in options and NODE_ENV was not set', {
root: options.root,
env: options.env,
NODE_ENV: process.env.NODE_ENV
});
}
if (typeof this.root !== 'string') {
throw new _errors.FrameworkError(`root must be explicitly specified, got ${options.root}`);
throw new _errors.FrameworkError(`root must be explicitly specified, got ${options.root}`, {
root: options.root
});
}

@@ -391,2 +397,2 @@

exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF0bGFzLm1qcyJdLCJuYW1lcyI6WyJBdGxhcyIsImluaXQiLCJvcHRpb25zIiwiY29uZmlnIiwiaG9va3MiLCJzZXJ2aWNlcyIsImFjdGlvbnMiLCJhbGlhc2VzIiwiYXRsYXMiLCJlbnYiLCJyb290IiwidHlwZXMiLCJwYXRocyIsIm1vZHVsZXMiLCJ0eXBlIiwicGF0aCIsInJlc29sdmUiLCJyZXF1aXJlIiwib3B0aW9uYWwiLCJub3JtYWxpc2UiLCJsb2ciLCJkZWJ1ZyIsImJvb3RzdHJhcCIsImNvbXBvbmVudHMiLCJPYmplY3QiLCJrZXlzIiwiYWxpYXMiLCJIb29rIiwiZW50cmllcyIsImhvb2siLCJTZXJ2aWNlIiwic2VydmljZSIsIkFjdGlvbiIsImFjdGlvbiIsInByZXBhcmVkIiwic3RhcnRlZCIsImNvbnN0cnVjdG9yIiwiTWFwIiwicHJvY2VzcyIsIk5PREVfRU5WIiwiRnJhbWV3b3JrRXJyb3IiLCJta2NvbmZpZyIsImRlZmF1bHRzIiwibWtsb2ciLCJ2YWxpZGF0b3IiLCJBanYiLCJhanZLZXl3b3JkcyIsImtleXdvcmRzIiwibG9jYXRpb24iLCJhYnNvbHV0ZSIsImxvYWQiLCJvcHRyZXF1aXJlIiwiY29udGVudHMiLCJkZWZhdWx0IiwiQ29tcG9uZW50Iiwib3B0cyIsImNvbXBvbmVudCIsInByZXBhcmUiLCJjYXRhbG9nIiwiY29udGFpbmVyIiwib2JzZXJ2ZXMiLCJzZXQiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwiQXJyYXkiLCJmcm9tIiwiZXhwb3NlIiwiaW50ZXJuYWwiLCJ2YWx1ZSIsImZpbHRlciIsInJlc3VsdCIsIkJvb2xlYW4iLCJmb3JFYWNoIiwiZGlzcGF0Y2giLCJzdGFydCIsImVyciIsInN0b3AiLCJjYXRjaCIsInN0b3BFcnIiLCJmYXRhbCIsImluZm8iLCJlcnJvciIsInJldmVyc2UiLCJuYW1lIiwiYmFzZW5hbWUiLCJjd2QiLCJsZXZlbCIsInNlcmlhbGl6ZXJzIiwicGlubyIsInN0ZFNlcmlhbGl6ZXJzIiwi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WyIvLyBXZSB1c2UgZm9yLWF3YWl0IHBhdHRlcm4gcXVpdGUgZXh0ZW5zaXZlbHkgaGVyZSBmb3IgbGVnaXRpbWF0ZSBwdXJwb3Nlc1xuLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgKiBhcyBBanYgZnJvbSAnYWp2J1xuaW1wb3J0ICogYXMgYWp2S2V5d29yZHMgZnJvbSAnYWp2LWtleXdvcmRzJ1xuaW1wb3J0ICogYXMgcGlubyBmcm9tICdwaW5vJ1xuaW1wb3J0IHtcbiAgZGVmYXVsdHNEZWVwIGFzIGRlZmF1bHRzLFxuICBpc1BsYWluT2JqZWN0LFxufSBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBGcmFtZXdvcmtFcnJvciB9IGZyb20gJ0BhdGxhcy5qcy9lcnJvcnMnXG5pbXBvcnQge1xuICBleHBvc2UsXG4gIGRpc3BhdGNoLFxuICBjb21wb25lbnQsXG4gIG1rY29uZmlnLFxuICBta2xvZyxcbiAgb3B0cmVxdWlyZSxcbn0gZnJvbSAnLi9wcml2YXRlJ1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB5b3VyIGFwcGxpY2F0aW9uIGFuZCBhZ2dyZWdhdGVzIGFsbCBjb21wb25lbnRzIHRvZ2V0aGVyXG4gKlxuICogWW91IHNob3VsZCBnZW5lcmFsbHkgY3JlYXRlIG9ubHkgb25lIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgaW4gYSBwcm9ncmFtLlxuICovXG5jbGFzcyBBdGxhcyB7XG4gIHN0YXRpYyBkZWZhdWx0cyA9IHtcbiAgICBsb2c6IHtcbiAgICAgIG5hbWU6IHBhdGguYmFzZW5hbWUocHJvY2Vzcy5jd2QoKSksXG4gICAgICBsZXZlbDogJ2luZm8nLFxuICAgICAgc2VyaWFsaXplcnM6IHtcbiAgICAgICAgZXJyOiBwaW5vLnN0ZFNlcmlhbGl6ZXJzLmVycixcbiAgICAgICAgcmVxOiBwaW5vLnN0ZFNlcmlhbGl6ZXJzLnJlcSxcbiAgICAgICAgcmVzOiBwaW5vLnN0ZFNlcmlhbGl6ZXJzLnJlcyxcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIHZhbGlkYXRvcjoge1xuICAgICAgYWxsRXJyb3JzOiB0cnVlLFxuICAgICAgdXNlRGVmYXVsdHM6IHRydWUsXG4gICAgICBrZXl3b3JkczogW1xuICAgICAgICAndHlwZW9mJyxcbiAgICAgIF0sXG4gICAgfSxcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXNlIGEgYnJhbmQtbmV3IGF0bGFzIGluc3RhbmNlIGZyb20gdGhlIGdpdmVuIG1vZHVsZSBsb2NhdGlvbnNcbiAgICpcbiAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHF1aWNrbHkgY29uZmlndXJlIEF0bGFzIGluc3RhbmNlIGJ5IHNpbXBseSB0ZWxsaW5nIGl0IHdoZXJlIHlvdXIgY29tcG9uZW50c1xuICAgKiBsaXZlIG9uIHRoZSBmaWxlc3lzdGVtLCBhbmQgQXRsYXMgd2lsbCBsb2FkIHRoZW0gZnJvbSB0aGUgZ2l2ZW4gbW9kdWxlIGxvY2F0aW9ucyBhbmQgYWRkIHRoZW1cbiAgICogdG8gdGhlIEF0bGFzIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgICAgb3B0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLmVudiAgICAgICAgICAgICAgICAgICBUaGUgZW52aXJvbm1lbnQgdW5kZXIgd2hpY2ggdG8gb3BlcmF0ZVxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgb3B0aW9ucy5yb290ICAgICAgICAgICAgICAgICAgVGhlIHJvb3QgZGlyZWN0b3J5IHRvIHdoaWNoIGFsbCBvdGhlclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgbWVudGlvbmVkIGhlcmUgYXJlIHJlbGF0aXZlXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLmNvbmZpZz0nY29uZmlnJyAgICAgICBNb2R1bGUgbG9jYXRpb24gZm9yIHRoZSBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLmhvb2tzPSdob29rcycgICAgICAgICBNb2R1bGUgbG9jYXRpb24gZm9yIHRoZSBob29rc1xuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgb3B0aW9ucy5zZXJ2aWNlcz0nc2VydmljZXMnICAgTW9kdWxlIGxvY2F0aW9uIGZvciB0aGUgc2VydmljZXNcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgIG9wdGlvbnMuYWN0aW9ucz0nYWN0aW9ucycgICAgIE1vZHVsZSBsb2NhdGlvbiBmb3IgdGhlIGFjdGlvbnNcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgIG9wdGlvbnMuYWxpYXNlcz0nYWxpYXNlcycgICAgIE1vZHVsZSBsb2NhdGlvbiBmb3IgdGhlIGFsaWFzZXNcbiAgICogQHJldHVybiAgICB7QXRsYXN9XG4gICAqL1xuICBzdGF0aWMgaW5pdChvcHRpb25zID0ge30pIHtcbiAgICBkZWZhdWx0cyhvcHRpb25zLCB7XG4gICAgICBjb25maWc6ICdjb25maWcnLFxuICAgICAgaG9va3M6ICdob29rcycsXG4gICAgICBzZXJ2aWNlczogJ3NlcnZpY2VzJyxcbiAgICAgIGFjdGlvbnM6ICdhY3Rpb25zJyxcbiAgICAgIGFsaWFzZXM6ICdhbGlhc2VzJyxcbiAgICB9KVxuXG4gICAgY29uc3QgYXRsYXMgPSBuZXcgdGhpcyh7XG4gICAgICBlbnY6IG9wdGlvbnMuZW52LFxuICAgICAgcm9vdDogb3B0aW9ucy5yb290LFxuICAgICAgY29uZmlnOiBvcHRpb25zLmNvbmZpZyxcbiAgICB9KVxuICAgIGNvbnN0IHR5cGVzID0gW1xuICAgICAgJ2hvb2tzJyxcbiAgICAgICdzZXJ2aWNlcycsXG4gICAgICAnYWN0aW9ucycsXG4gICAgICAnYWxpYXNlcycsXG4gICAgXVxuICAgIGNvbnN0IHBhdGhzID0ge31cbiAgICBjb25zdCBtb2R1bGVzID0ge31cblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgcGF0aHNbdHlwZV0gPSBwYXRoLnJlc29sdmUob3B0aW9ucy5yb290LCBvcHRpb25zW3R5cGVdKVxuICAgICAgbW9kdWxlc1t0eXBlXSA9IGF0bGFzLnJlcXVpcmUob3B0aW9uc1t0eXBlXSwgeyBvcHRpb25hbDogdHJ1ZSwgbm9ybWFsaXNlOiB0cnVlIH0pXG4gICAgfVxuXG4gICAgYXRsYXMubG9nLmRlYnVnKHsgcGF0aHMgfSwgJ2F0bGFzOmluaXQnKVxuXG4gICAgcmV0dXJuIHRoaXMuYm9vdHN0cmFwKGF0bGFzLCBtb2R1bGVzKVxuICB9XG5cbiAgLyoqXG4gICAqIEJvb3RzdHJhcCB0aGUgZ2l2ZW4gQXRsYXMgaW5zdGFuY2Ugd2l0aCB0aGUgcHJvdmlkZWQgbW9kdWxlc1xuICAgKlxuICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gcXVpY2tseSBzZXQgdXAgdGhlIGdpdmVuIEF0bGFzIGluc3RhbmNlIHRvIHVzZSB0aGUgcHJvdmlkZWQgY29tcG9uZW50cy4gVGhpc1xuICAgKiBpcyB1c2VmdWwgaWYgeW91IG5lZWQgdG8gaGF2ZSBtdWx0aXBsZSBlbnRyeSBwb2ludHMgdG8geW91ciBwcm9ncmFtIGFuZCBzb21lIGVudHJ5cG9pbnRzIHNob3VsZFxuICAgKiBvbmx5IHVzZSBzb21lIGNvbXBvbmVudHMgYXZhaWxhYmxlLiBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIHdoZW4gaW1wbGVtZW50aW5nIHdvcmtlclxuICAgKiBwcm9jZXNzZXMgd2hlcmUgeW91IG9ubHkgbmVlZCBhIHN1YnNldCBvZiBhbGwgYXZhaWxhYmxlIGNvbXBvbmVudHMuIFRoaXMgbWV0aG9kLCB3aGlsZSBtb3JlXG4gICAqIHZlcmJvc2UgYXMgQXRsYXMuaW5pdCgpLCBzdGlsbCBmcmVlcyB5b3UgZnJvbSBtYW51YWxseSBhZGRpbmcgYWxsIHRoZSBjb21wb25lbnRzIGJ5IGhhbmQgd2hpbGVcbiAgICogcHJvdmlkaW5nIGdyZWF0ZXIgZmxleGliaWxpdHkgYXMgdG8gd2hpY2ggY29tcG9uZW50cyB3aWxsIGJlIHVzZWQuXG4gICAqXG4gICAqIEBwYXJhbSAgICAge0F0bGFzfSAgIGF0bGFzICAgICAgICAgICAgICAgICBUaGUgQXRsYXMgaW5zdGFuY2UgdG8gYm9vdHN0cmFwXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gIG1vZHVsZXM/ICAgICAgICAgICAgICBBbGwgdGhlIG1vZHVsZXMgd2hpY2ggc2hvdWxkIGJlIGFkZGVkIHRvIEF0bGFzXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gIG1vZHVsZXMuYWN0aW9ucyAgICAgICBBY3Rpb25zIHRvIGFkZFxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICBtb2R1bGVzLmhvb2tzICAgICAgICAgSG9va3MgdG8gYWRkXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gIG1vZHVsZXMuc2VydmljZXMgICAgICBTZXJ2aWNlcyB0byBhZGRcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgbW9kdWxlcy5hbGlhc2VzICAgICAgIEFsaWFzZXMgZm9yIGFsbCB0aGUgY29tcG9uZW50c1xuICAgKiBAcmV0dXJuICAgIHtBdGxhc30gICAgICAgICAgICAgICAgICAgICAgICAgVGhlIEF0bGFzIGluc3RhbmNlIHdpdGggYWxsIGNvbXBvbmVudHMgYWRkZWQsIHJlYWR5XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiZSBzdGFydGVkXG4gICAqL1xuICBzdGF0aWMgYm9vdHN0cmFwKGF0bGFzLCBtb2R1bGVzID0ge30pIHtcbiAgICBkZWZhdWx0cyhtb2R1bGVzLCB7XG4gICAgICAvLyBjb25maWcgbW9kdWxlIGlzIGxvYWRlZCBieSBBdGxhcyBpbnN0YW5jZSBpdHNlbGYsIHNvIGl0J3Mgb2theSB0byB1c2UgYSBzdHJpbmcgaGVyZSBhbmQgbGV0XG4gICAgICAvLyBBdGxhcyBsb2FkIGl0XG4gICAgICBjb25maWc6ICdjb25maWcnLFxuICAgICAgLy8gVGhlIGZvbGxvd2luZyBtb2R1bGVzIG11c3QgYWxyZWFkeSBiZSBwcm92aWRlZCBkaXJlY3RseSBhcyB3ZSB3b24ndCBsb2FkIHRoZW1cbiAgICAgIGFjdGlvbnM6IHt9LFxuICAgICAgaG9va3M6IHt9LFxuICAgICAgc2VydmljZXM6IHt9LFxuICAgICAgYWxpYXNlczoge1xuICAgICAgICBhY3Rpb25zOiB7fSxcbiAgICAgICAgaG9va3M6IHt9LFxuICAgICAgICBzZXJ2aWNlczoge30sXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICBhdGxhcy5sb2cuZGVidWcoe1xuICAgICAgZW52OiBhdGxhcy5lbnYsXG4gICAgICByb290OiBhdGxhcy5yb290LFxuICAgICAgY29tcG9uZW50czoge1xuICAgICAgICBhY3Rpb25zOiBPYmplY3Qua2V5cyhtb2R1bGVzLmFjdGlvbnMpLFxuICAgICAgICBob29rczogT2JqZWN0LmtleXMobW9kdWxlcy5ob29rcyksXG4gICAgICAgIHNlcnZpY2VzOiBPYmplY3Qua2V5cyhtb2R1bGVzLnNlcnZpY2VzKSxcbiAgICAgIH0sXG4gICAgfSwgJ2F0bGFzOmJvb3RzdHJhcCcpXG5cbiAgICAvLyBIb29rc1xuICAgIGZvciAoY29uc3QgW2FsaWFzLCBIb29rXSBvZiBPYmplY3QuZW50cmllcyhtb2R1bGVzLmhvb2tzKSkge1xuICAgICAgY29uc3QgYWxpYXNlcyA9IG1vZHVsZXMuYWxpYXNlcy5ob29rc1thbGlhc11cbiAgICAgIGF0bGFzLmhvb2soYWxpYXMsIEhvb2ssIHsgYWxpYXNlcyB9KVxuICAgIH1cblxuICAgIC8vIFNlcnZpY2VzXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIFNlcnZpY2VdIG9mIE9iamVjdC5lbnRyaWVzKG1vZHVsZXMuc2VydmljZXMpKSB7XG4gICAgICBjb25zdCBhbGlhc2VzID0gbW9kdWxlcy5hbGlhc2VzLnNlcnZpY2VzW2FsaWFzXVxuICAgICAgYXRsYXMuc2VydmljZShhbGlhcywgU2VydmljZSwgeyBhbGlhc2VzIH0pXG4gICAgfVxuXG4gICAgLy8gQWN0aW9uc1xuICAgIGZvciAoY29uc3QgW2FsaWFzLCBBY3Rpb25dIG9mIE9iamVjdC5lbnRyaWVzKG1vZHVsZXMuYWN0aW9ucykpIHtcbiAgICAgIGNvbnN0IGFsaWFzZXMgPSBtb2R1bGVzLmFsaWFzZXMuYWN0aW9uc1thbGlhc11cbiAgICAgIGF0bGFzLmFjdGlvbihhbGlhcywgQWN0aW9uLCB7IGFsaWFzZXMgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gYXRsYXNcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IGVudmlyb25tZW50IHVuZGVyIHdoaWNoIHRoaXMgaW5zdGFuY2Ugb3BlcmF0ZXNcbiAgICpcbiAgICogRGVmYXVsdHMgdG8gTk9ERV9FTlYgZnJvbSB0aGUgZW52aXJvbm1lbnQuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAcmV0dXJuICAgIHtTdHJpbmd9XG4gICAqL1xuICBnZXQgZW52KCkge1xuICAgIHJldHVybiB0aGlzLiNlbnZcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcm9vdCBmb2xkZXIgd2hlcmUgYWxsIG90aGVyIHBhdGhzIHNob3VsZCBiZSByZWxhdGl2ZSB0b1xuICAgKlxuICAgKiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBzZXQgdGhpcyB0byB0aGUgcHJvamVjdCdzIHJvb3QgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHJldHVybiAgICB7U3RyaW5nfVxuICAgKi9cbiAgZ2V0IHJvb3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuI3Jvb3RcbiAgfVxuXG4gIC8qKlxuICAgKiBJcyB0aGlzIGluc3RhbmNlIGluIGEgcHJlcGFyZWQgc3RhdGU/XG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAcmV0dXJuICAgIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IHByZXBhcmVkKCkge1xuICAgIHJldHVybiB0aGlzLiNwcmVwYXJlZFxuICB9XG5cbiAgLyoqXG4gICAqIElzIHRoaXMgaW5zdGFuY2UgaW4gYSBzdGFydGVkIHN0YXRlP1xuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHJldHVybiAgICB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBzdGFydGVkKCkge1xuICAgIHJldHVybiB0aGlzLiNzdGFydGVkXG4gIH1cblxuICAvKipcbiAgICogQXRsYXMgY29uZmlndXJhdGlvbiwgYXMgcGFzc2VkIGluIHRvIHRoZSBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAdHlwZSAgICB7T2JqZWN0fVxuICAgKi9cbiAgY29uZmlnID0ge31cblxuICAvKipcbiAgICogQWxsIHNlcnZpY2VzIGFkZGVkIHRvIHRoaXMgaW5zdGFuY2VcbiAgICpcbiAgICogQHR5cGUgICAge09iamVjdH1cbiAgICovXG4gIHNlcnZpY2VzID0ge31cblxuICAvKipcbiAgICogQWxsIGFjdGlvbnMgYWRkZWQgdG8gdGhpcyBpbnN0YW5jZVxuICAgKlxuICAgKiBAdHlwZSAgICB7T2JqZWN0fVxuICAgKi9cbiAgYWN0aW9ucyA9IHt9XG5cbiAgI2VudiA9IG51bGxcbiAgI3Jvb3QgPSBudWxsXG4gICNwcmVwYXJlZCA9IGZhbHNlXG4gICNzdGFydGVkID0gZmFsc2VcbiAgI2NhdGFsb2cgPSB7XG4gICAgc2VydmljZXM6IG5ldyBNYXAoKSxcbiAgICBob29rczogbmV3IE1hcCgpLFxuICAgIGFjdGlvbnM6IG5ldyBNYXAoKSxcbiAgfVxuXG4gICNvYnNlcnZlcnMgPSBuZXcgTWFwKClcblxuICAvKipcbiAgICogQW4gaW5zdGFuY2Ugb2YgQWp2IHVzZWQgdG8gdmFsaWRhdGUgY29tcG9uZW50IGNvbmZpZ3VyYXRpb25cbiAgICogQHR5cGUgICAge0Fqdn1cbiAgICovXG4gIHZhbGlkYXRvciA9IG51bGxcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlXG4gICAqXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0aW9ucyAgICAgICAgICAgICBPcHRpb25zIGZvciB0aGUgaW5zdGFuY2VcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRpb25zLmNvbmZpZyAgICAgIENvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgaW5zdGFuY2UgYW5kIGZvciBhbGxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VzIG9yIG90aGVyIGNvbXBvbmVudHMgd2hpY2ggd2lsbCBiZSBhZGRlZCB0b1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGluc3RhbmNlXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgb3B0aW9ucy5yb290ICAgICAgICBUaGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIGluc3RhbmNlXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgb3B0aW9ucy5lbnYgICAgICAgICBUaGUgZW52aXJvbm1lbnQgdW5kZXIgd2hpY2ggdGhpcyBpbnN0YW5jZSBvcGVyYXRlcy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvbmVudHMgbWF5IHVzZSB0aGlzIHZhbHVlIGZvciB2YXJpb3VzIHB1cnBvc2VzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gTk9ERV9FTlYuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICAvLyBJbml0aWFsaXNlIHByaXZhdGUgc3R1ZmZcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvY2Vzcy1lbnZcbiAgICB0aGlzLiNlbnYgPSBvcHRpb25zLmVudiB8fCBwcm9jZXNzLmVudi5OT0RFX0VOVlxuICAgIHRoaXMuI3Jvb3QgPSBvcHRpb25zLnJvb3RcblxuICAgIC8vIFNhZmV0eSBjaGVja3NcbiAgICBpZiAoIXRoaXMuI2Vudikge1xuICAgICAgdGhyb3cgbmV3IEZyYW1ld29ya0Vycm9yKCdlbnYgbm90IHNwZWNpZmllZCBhbmQgTk9ERV9FTlYgd2FzIG5vdCBzZXQnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5yb290ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEZyYW1ld29ya0Vycm9yKGByb290IG11c3QgYmUgZXhwbGljaXRseSBzcGVjaWZpZWQsIGdvdCAke29wdGlvbnMucm9vdH1gKVxuICAgIH1cblxuICAgIHRoaXMuY29uZmlnID0gdGhpczo6bWtjb25maWcob3B0aW9ucy5jb25maWcsIHtcbiAgICAgIGF0bGFzOiBBdGxhcy5kZWZhdWx0cyxcbiAgICAgIHNlcnZpY2VzOiB7fSxcbiAgICAgIGhvb2tzOiB7fSxcbiAgICAgIGFjdGlvbnM6IHt9LFxuICAgIH0pXG4gICAgLy8gTG9nZ2VyIPCfjLJcbiAgICB0aGlzLmxvZyA9IHRoaXM6Om1rbG9nKHRoaXMuY29uZmlnLmF0bGFzLmxvZylcbiAgICAvLyBBanYgdmFsaWRhdG9yIOKck1xuICAgIHRoaXMudmFsaWRhdG9yID0gbmV3IEFqdih0aGlzLmNvbmZpZy5hdGxhcy52YWxpZGF0b3IpXG4gICAgYWp2S2V5d29yZHModGhpcy52YWxpZGF0b3IsIHRoaXMuY29uZmlnLmF0bGFzLnZhbGlkYXRvci5rZXl3b3JkcylcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1aXJlIGEgbW9kdWxlIGJ5IHBhdGgsIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHJvb3RcbiAgICpcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBsb2NhdGlvbiAgICAgICAgICBUaGUgbW9kdWxlJ3MgbG9jYXRpb24sIHJlbGF0aXZlIHRvIHJvb3RcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRpb25zPyAgICAgICAgICBPcHRpb25zXG4gICAqIEBwYXJhbSAgICAge0Jvb2xlYW59ICAgb3B0aW9ucy5vcHRpb25hbCAgSWYgdHJ1ZSwgd2lsbCBub3QgdGhyb3cgaWYgdGhlIG1vZHVsZSBkb2VzIG5vdCBleGlzdFxuICAgKiBAcGFyYW0gICAgIHtCb29sZWFufSAgIG9wdGlvbnMubm9ybWFsaXNlIElmIHRydWUsIGl0IHdpbGwgcHJlZmVyIHRoZSBFUyBtb2R1bGVzJyBkZWZhdWx0IGV4cG9ydFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXIgbmFtZWQgZXhwb3J0cyBvciB0aGUgQ29tbW9uSlMgZXhwb3J0c1xuICAgKiBAcGFyYW0gICAgIHtCb29sZWFufSAgIG9wdGlvbnMuYWJzb2x1dGUgIElmIHRydWUsIHdpbGwgdHJ5IHRvIGxvYWQgdGhlIG1vZHVsZSB3aXRob3V0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2aW5nIHRoZSBtb2R1bGUncyBuYW1lIHRvIHRoZSBwcm9qZWN0IHJvb3QgKGl0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBsb2FkIHRoZSBtb2R1bGUgdXNpbmcgc3RhbmRhcmQgTm9kZSdzIG1lY2hhbmlzbSlcbiAgICogQHJldHVybiAgICB7bWl4ZWR9ICAgICAgICAgICAgICAgICAgICAgICBUaGUgbW9kdWxlJ3MgY29udGVudHNcbiAgICovXG4gIHJlcXVpcmUobG9jYXRpb24sIG9wdGlvbnMgPSB7fSkge1xuICAgIGxvY2F0aW9uID0gb3B0aW9ucy5hYnNvbHV0ZVxuICAgICAgPyBsb2NhdGlvblxuICAgICAgOiBwYXRoLnJlc29sdmUodGhpcy5yb290LCBsb2NhdGlvbilcblxuICAgIGNvbnN0IGxvYWQgPSBvcHRpb25zLm9wdGlvbmFsXG4gICAgICA/IG9wdHJlcXVpcmVcbiAgICAgIDogcmVxdWlyZVxuICAgIGNvbnN0IGNvbnRlbnRzID0gbG9hZChsb2NhdGlvbilcblxuICAgIHJldHVybiBvcHRpb25zLm5vcm1hbGlzZSAmJiBpc1BsYWluT2JqZWN0KGNvbnRlbnRzLmRlZmF1bHQpXG4gICAgICA/IGNvbnRlbnRzLmRlZmF1bHRcbiAgICAgIDogY29udGVudHNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIHNlcnZpY2UgaW50byB0aGlzIGluc3RhbmNlIG9mIEF0bGFzIHdpdGggdGhlIGdpdmVuIGFsaWFzXG4gICAqXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgYWxpYXMgICAgICAgICAgIFRoZSBhbGlhcyBmb3IgdGhlIHNlcnZpY2UgLSBpdCB3aWxsIGJlIHVzZWQgZm9yIGV4cG9zaW5nXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzZXJ2aWNlJ3MgQVBJIG9uIHRoZSBhdGxhcy5zZXJ2aWNlcyBvYmplY3QgYW5kIGZvclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzaW5nIGNvbmZpZ3VyYXRpb24gZGF0YSB0byBpdFxuICAgKiBAcGFyYW0gICAgIHtjbGFzc30gICAgIENvbXBvbmVudCAgICAgICBUaGUgc2VydmljZSBjbGFzc1xuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdHMgICAgICAgICAgICBSdW50aW1lIG9wdGlvbnMgZm9yIHRoZSBzZXJ2aWNlXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cy5hbGlhc2VzICAgIEJpbmRpbmdzIHRvIG90aGVyIGRlZmluZWQgY29tcG9uZW50c1xuICAgKiBAcmV0dXJuICAgIHt0aGlzfVxuICAgKi9cbiAgc2VydmljZShhbGlhcywgQ29tcG9uZW50LCBvcHRzID0ge30pIHtcbiAgICB0aGlzOjpjb21wb25lbnQoe1xuICAgICAgdHlwZTogJ3NlcnZpY2UnLFxuICAgICAgYWxpYXMsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBhbGlhc2VzOiBvcHRzLmFsaWFzZXMsXG4gICAgfSwgdGhpcy4jY2F0YWxvZy5zZXJ2aWNlcylcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBob29rIGludG8gdGhpcyBpbnN0YW5jZSBvZiBBdGxhcyB3aXRoIHRoZSBnaXZlbiBhbGlhc1xuICAgKlxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIGFsaWFzICAgICAgICAgICBUaGUgYWxpYXMgZm9yIHRoZSBob29rIC0gaXQgd2lsbCBiZSB1c2VkIGZvciBwYXNzaW5nXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZGF0YSB0byBpdFxuICAgKiBAcGFyYW0gICAgIHtjbGFzc30gICAgIENvbXBvbmVudCAgICAgICBUaGUgaG9vayBjbGFzc1xuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdHMgICAgICAgICAgICBSdW50aW1lIG9wdGlvbnMgZm9yIHRoZSBob29rXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cy5hbGlhc2VzICAgIEJpbmRpbmdzIHRvIG90aGVyIGRlZmluZWQgY29tcG9uZW50c1xuICAgKiBAcmV0dXJuICAgIHt0aGlzfVxuICAgKi9cbiAgaG9vayhhbGlhcywgQ29tcG9uZW50LCBvcHRzID0ge30pIHtcbiAgICB0aGlzOjpjb21wb25lbnQoe1xuICAgICAgdHlwZTogJ2hvb2snLFxuICAgICAgYWxpYXMsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBhbGlhc2VzOiBvcHRzLmFsaWFzZXMsXG4gICAgfSwgdGhpcy4jY2F0YWxvZy5ob29rcylcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYW4gYWN0aW9uIGludG8gdGhpcyBpbnN0YW5jZSBvZiBBdGxhcyB3aXRoIHRoZSBnaXZlbiBhbGlhc1xuICAgKlxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIGFsaWFzICAgICAgICAgICBUaGUgYWxpYXMgZm9yIHRoZSBhY3Rpb24gLSBpdCB3aWxsIGJlIHVzZWQgZm9yIGV4cG9zaW5nXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhY3Rpb24ncyBBUEkgb24gdGhlIGF0bGFzLmFjdGlvbnMgb2JqZWN0IGFuZCBmb3JcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2luZyBjb25maWd1cmF0aW9uIGRhdGEgdG8gaXRcbiAgICogQHBhcmFtICAgICB7Y2xhc3N9ICAgICBDb21wb25lbnQgICAgICAgVGhlIGFjdGlvbiBjbGFzc1xuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdHMgICAgICAgICAgICBSdW50aW1lIG9wdGlvbnMgZm9yIHRoZSBhY3Rpb25cbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRzLmFsaWFzZXMgICAgQmluZGluZ3MgdG8gb3RoZXIgZGVmaW5lZCBjb21wb25lbnRzXG4gICAqIEByZXR1cm4gICAge3RoaXN9XG4gICAqL1xuICBhY3Rpb24oYWxpYXMsIENvbXBvbmVudCwgb3B0cyA9IHt9KSB7XG4gICAgdGhpczo6Y29tcG9uZW50KHtcbiAgICAgIHR5cGU6ICdhY3Rpb24nLFxuICAgICAgYWxpYXMsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBhbGlhc2VzOiBvcHRzLmFsaWFzZXMsXG4gICAgfSwgdGhpcy4jY2F0YWxvZy5hY3Rpb25zKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlIGFsbCBzZXJ2aWNlcyBhbmQgaG9va3MgZm9yIHVzZVxuICAgKlxuICAgKiBHZW5lcmFsbHkgeW91IHNob3VsZCB1c2UgYGF0bGFzLnN0YXJ0KClgIGluc3RlYWQgdG8gZ2V0IHlvdXIgaW5zdGFuY2UgdXAgYW5kIHJ1bm5pbmcuIEhvd2V2ZXIsXG4gICAqIHNvbWV0aW1lcyBpdCBpcyBuZWNlc3NhcnkgdG8gZ2V0IGFsbCB0aGUgc2VydmljZXMgaW50byBhIFwiZ2V0LXJlYWR5XCIgc3RhdGUgYmVmb3JlIHRoZXkgc3RhcnRcbiAgICogY29ubmVjdGluZyB0byByZW1vdGUgcmVzb3VyY2VzIG9yIGRvaW5nIGFueSBpbnRlbnNpdmUgSS9PIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIEByZXR1cm4gICAge1Byb21pc2U8dGhpcz59XG4gICAqL1xuICBhc3luYyBwcmVwYXJlKCkge1xuICAgIGlmICh0aGlzLnByZXBhcmVkKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIGNvbnN0IGNhdGFsb2cgPSB0aGlzLiNjYXRhbG9nXG4gICAgY29uc3QgeyBzZXJ2aWNlcywgYWN0aW9ucywgaG9va3MgfSA9IGNhdGFsb2dcblxuICAgIGZvciAoY29uc3QgW2FsaWFzLCBjb250YWluZXJdIG9mIGhvb2tzKSB7XG4gICAgICBpZiAoIWNvbnRhaW5lci5Db21wb25lbnQub2JzZXJ2ZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEZyYW1ld29ya0Vycm9yKGBIb29rICR7YWxpYXN9IGRvZXMgbm90IGhhdmUgc3RhdGljICdvYnNlcnZlcycgcHJvcGVydHlgKVxuICAgICAgfVxuXG4gICAgICAvLyBQcmVwYXJlIG9ic2VydmVycyBvZiBBdGxhcyBpdHNlbGZcbiAgICAgIGlmIChjb250YWluZXIuQ29tcG9uZW50Lm9ic2VydmVzID09PSAnYXRsYXMnKSB7XG4gICAgICAgIHRoaXMuI29ic2VydmVycy5zZXQoYWxpYXMsIGNvbnRhaW5lcilcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIGhvb2tzXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoWy4uLmhvb2tzXS5tYXAoKFssIGNvbnRhaW5lcl0pID0+IGNvbnRhaW5lci5wcmVwYXJlKHsgY2F0YWxvZyB9KSkpXG5cbiAgICAvLyBQcmVwYXJlIGFjdGlvbnMgYW5kIHNlcnZpY2VzIGluIHBhcmFsbGVsIPCfmoBcbiAgICB2b2lkIChhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAuLi5BcnJheS5mcm9tKGFjdGlvbnMpLm1hcChhc3luYyAoW2FsaWFzLCBjb250YWluZXJdKSA9PiAoe1xuICAgICAgICBleHBvc2U6IGNvbnRhaW5lci5Db21wb25lbnQuaW50ZXJuYWwgPyBmYWxzZSA6ICdhY3Rpb25zJyxcbiAgICAgICAgdmFsdWU6IGF3YWl0IGNvbnRhaW5lci5wcmVwYXJlKHsgY2F0YWxvZywgaG9va3MgfSksXG4gICAgICAgIGFsaWFzLFxuICAgICAgfSkpLFxuICAgICAgLi4uQXJyYXkuZnJvbShzZXJ2aWNlcykubWFwKGFzeW5jIChbYWxpYXMsIGNvbnRhaW5lcl0pID0+ICh7XG4gICAgICAgIGV4cG9zZTogY29udGFpbmVyLkNvbXBvbmVudC5pbnRlcm5hbCA/IGZhbHNlIDogJ3NlcnZpY2VzJyxcbiAgICAgICAgdmFsdWU6IGF3YWl0IGNvbnRhaW5lci5wcmVwYXJlKHsgY2F0YWxvZywgaG9va3MgfSksXG4gICAgICAgIGFsaWFzLFxuICAgICAgfSkpLFxuICAgIF0pKVxuICAgICAgLmZpbHRlcihyZXN1bHQgPT4gQm9vbGVhbihyZXN1bHQuZXhwb3NlKSlcbiAgICAgIC5mb3JFYWNoKHJlc3VsdCA9PiB0aGlzOjpleHBvc2UocmVzdWx0LmV4cG9zZSwgcmVzdWx0LmFsaWFzLCByZXN1bHQudmFsdWUpKVxuXG4gICAgdGhpcy4jcHJlcGFyZWQgPSB0cnVlXG4gICAgYXdhaXQgdGhpcy4jb2JzZXJ2ZXJzOjpkaXNwYXRjaCgnYWZ0ZXJQcmVwYXJlJywgdGhpcylcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgYWxsIHNlcnZpY2VzXG4gICAqXG4gICAqIEByZXR1cm4gICAge1Byb21pc2U8dGhpcz59XG4gICAqL1xuICBhc3luYyBzdGFydCgpIHtcbiAgICBjb25zdCB7IGFjdGlvbnMsIHNlcnZpY2VzLCBob29rcyB9ID0gdGhpcy4jY2F0YWxvZ1xuXG4gICAgYXdhaXQgdGhpcy5wcmVwYXJlKClcbiAgICBhd2FpdCB0aGlzLiNvYnNlcnZlcnM6OmRpc3BhdGNoKCdiZWZvcmVTdGFydCcsIHRoaXMpXG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAuLi5BcnJheS5mcm9tKGhvb2tzKSxcbiAgICAgIC4uLkFycmF5LmZyb20oYWN0aW9ucyksXG4gICAgXS5tYXAoKFssIGNvbnRhaW5lcl0pID0+IGNvbnRhaW5lci5zdGFydCgpKSlcblxuICAgIC8vIFN0YXJ0IGFsbCBzZXJ2aWNlcywgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBhZGRlZCB0byB0aGUgaW5zdGFuY2Ug8J+SqlxuICAgIC8vIE9yZGVyaW5nIGlzIGltcG9ydGFudCBoZXJlISBTb21lIHNlcnZpY2VzIHNob3VsZCBiZSBzdGFydGVkIGFzIHRoZSBsYXN0IG9uZXMgYmVjYXVzZSB0aGV5XG4gICAgLy8gZXhwb3NlIHNvbWUgZnVuY3Rpb25hbGl0eSB0byB0aGUgb3V0c2lkZSB3b3JsZCBhbmQgc3RhcnRpbmcgdGhvc2UgYmVmb3JlIGllLiBhIGRhdGFiYXNlXG4gICAgLy8gc2VydmljZSBpcyBzdGFydGVkIG1pZ2h0IGJyZWFrIHN0dWZmIVxuICAgIGZvciAoY29uc3QgWywgY29udGFpbmVyXSBvZiBzZXJ2aWNlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY29udGFpbmVyLnN0YXJ0KHsgaG9va3MgfSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBSb2xsIGJhY2tcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9wKClcbiAgICAgICAgICAvLyBTaGl0IGp1c3QgZ290IHNlcmlvdXMg8J+YsVxuICAgICAgICAgIC5jYXRjaChzdG9wRXJyID0+IHZvaWQgdGhpcy5sb2cuZmF0YWwoeyBlcnI6IHN0b3BFcnIgfSwgJ2F0bGFzOnN0YXJ0OnJvbGxiYWNrLWZhaWx1cmUnKSlcblxuICAgICAgICAvLyBSZS10aHJvdyB0aGUgb3JpZ2luYWwgZXJyb3Igd2hpY2ggY2F1c2VkIEF0bGFzIHRvIGZhaWwgdG8gc3RhcnRcbiAgICAgICAgdGhyb3cgZXJyXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy4jc3RhcnRlZCA9IHRydWVcbiAgICBhd2FpdCB0aGlzLiNvYnNlcnZlcnM6OmRpc3BhdGNoKCdhZnRlclN0YXJ0JywgdGhpcylcbiAgICB0aGlzLmxvZy5pbmZvKHsgZW52OiB0aGlzLmVudiB9LCAnYXRsYXM6cmVhZHknKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIGFsbCBzZXJ2aWNlcywgdW5yZWdpc3RlciBhbGwgYWN0aW9ucyBhbmQgaG9va3MgYW5kIHVucHVibGlzaCBhbnkgQVBJcyBleHBvc2VkIGJ5IHRoZW1cbiAgICpcbiAgICogVGhpcyBwdXRzIHRoZSB3aG9sZSBhcHBsaWNhdGlvbiBpbnRvIGEgc3RhdGUgYXMgaXQgd2FzIGJlZm9yZSBgYXRsYXMucHJlcGFyZSgpYCBhbmQvb3JcbiAgICogYGF0bGFzLnN0YXJ0KClgIHdhcyBjYWxsZWQuXG4gICAqXG4gICAqIEByZXR1cm4gICAge1Byb21pc2U8dGhpcz59XG4gICAqL1xuICBhc3luYyBzdG9wKCkge1xuICAgIGNvbnN0IHsgc2VydmljZXMsIGFjdGlvbnMsIGhvb2tzIH0gPSB0aGlzLiNjYXRhbG9nXG5cbiAgICBhd2FpdCB0aGlzLiNvYnNlcnZlcnM6OmRpc3BhdGNoKCdiZWZvcmVTdG9wJywgdGhpcylcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIC4uLkFycmF5LmZyb20oaG9va3MpLFxuICAgICAgLi4uQXJyYXkuZnJvbShhY3Rpb25zKSxcbiAgICBdLm1hcCgoWywgY29udGFpbmVyXSkgPT4gY29udGFpbmVyLnN0b3AoKSkpXG5cbiAgICBsZXQgZXJyb3JcblxuICAgIC8vIFN0b3AgYWxsIHNlcnZpY2VzLCBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0aGV5IHdlcmUgYWRkZWQgdG8gdGhlIGluc3RhbmNlIPCfkqpcbiAgICAvLyBUaGlzIHdpbGwgbWFrZSBzdXJlIHRoZSBtb3N0IGltcG9ydGFudCBzZXJ2aWNlcyBhcmUgc3RvcHBlZCBmaXJzdC5cbiAgICBmb3IgKGNvbnN0IFthbGlhcywgY29udGFpbmVyXSBvZiBBcnJheS5mcm9tKHNlcnZpY2VzKS5yZXZlcnNlKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNlcnZpY2VzW2FsaWFzXVxuICAgICAgICBhd2FpdCBjb250YWluZXIuc3RvcCh7IGhvb2tzIH0pXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyb3IgPSBlcnJcbiAgICAgICAgLy8gTGVhdmUgdGhpcyBzZXJ2aWNlIGFzIGlzIGFuZCBtb3ZlIHRvIHRoZSBuZXh0IHNlcnZpY2UuIFdlIHByb2JhYmx5IGNhbm5vdCBkbyBhbnl0aGluZyB0b1xuICAgICAgICAvLyBwcm9wZXJseSBzdG9wIHRoaXMgc2VydmljZS4g8J+ZgVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVucmVnaXN0ZXIgYWN0aW9uc1xuICAgIGZvciAoY29uc3QgW2FsaWFzXSBvZiBhY3Rpb25zKSB7XG4gICAgICBkZWxldGUgdGhpcy5hY3Rpb25zW2FsaWFzXVxuICAgIH1cblxuICAgIHRoaXMuI3N0YXJ0ZWQgPSBmYWxzZVxuICAgIHRoaXMuI3ByZXBhcmVkID0gZmFsc2VcblxuICAgIGF3YWl0IGhvb2tzOjpkaXNwYXRjaCgnYWZ0ZXJTdG9wJywgbnVsbClcbiAgICB0aGlzLmxvZy5pbmZvKCdhdGxhczpzdG9wcGVkJylcblxuICAgIC8vIElmIHRoZXJlIHdhcyBhbiBlcnJvciB0aHJvd24gaW4gb25lIG9mIHRoZSBzZXJ2aWNlcyBkdXJpbmcgLnN0b3AoKSwgcmUtdGhyb3cgaXQgbm93XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXRsYXNcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF0bGFzLm1qcyJdLCJuYW1lcyI6WyJBdGxhcyIsImluaXQiLCJvcHRpb25zIiwiY29uZmlnIiwiaG9va3MiLCJzZXJ2aWNlcyIsImFjdGlvbnMiLCJhbGlhc2VzIiwiYXRsYXMiLCJlbnYiLCJyb290IiwidHlwZXMiLCJwYXRocyIsIm1vZHVsZXMiLCJ0eXBlIiwicGF0aCIsInJlc29sdmUiLCJyZXF1aXJlIiwib3B0aW9uYWwiLCJub3JtYWxpc2UiLCJsb2ciLCJkZWJ1ZyIsImJvb3RzdHJhcCIsImNvbXBvbmVudHMiLCJPYmplY3QiLCJrZXlzIiwiYWxpYXMiLCJIb29rIiwiZW50cmllcyIsImhvb2siLCJTZXJ2aWNlIiwic2VydmljZSIsIkFjdGlvbiIsImFjdGlvbiIsInByZXBhcmVkIiwic3RhcnRlZCIsImNvbnN0cnVjdG9yIiwiTWFwIiwicHJvY2VzcyIsIk5PREVfRU5WIiwiRnJhbWV3b3JrRXJyb3IiLCJta2NvbmZpZyIsImRlZmF1bHRzIiwibWtsb2ciLCJ2YWxpZGF0b3IiLCJBanYiLCJhanZLZXl3b3JkcyIsImtleXdvcmRzIiwibG9jYXRpb24iLCJhYnNvbHV0ZSIsImxvYWQiLCJvcHRyZXF1aXJlIiwiY29udGVudHMiLCJkZWZhdWx0IiwiQ29tcG9uZW50Iiwib3B0cyIsImNvbXBvbmVudCIsInByZXBhcmUiLCJjYXRhbG9nIiwiY29udGFpbmVyIiwib2JzZXJ2ZXMiLCJzZXQiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwiQXJyYXkiLCJmcm9tIiwiZXhwb3NlIiwiaW50ZXJuYWwiLCJ2YWx1ZSIsImZpbHRlciIsInJlc3VsdCIsIkJvb2xlYW4iLCJmb3JFYWNoIiwiZGlzcGF0Y2giLCJzdGFydCIsImVyciIsInN0b3AiLCJjYXRjaCIsInN0b3BFcnIiLCJmYXRhbCIsImluZm8iLCJlcnJvciIsInJldmVyc2UiLCJuYW1lIiwiYmFzZW5hbWUiLCJjd2QiLCJsZXZlbCIsInNlcmlhbGl6ZXJzIiwicGlubyIsInN0ZFNlcmlhbGl6ZXJzIiwicmVxIiwicmVzIiwiYWxsRXJyb3JzIiwidXNlRGVmYXVsdHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7Ozs7Ozs7QUFjQSxNQUFNQSxLQUFOLENBQVk7QUF1Q1YsU0FBT0MsSUFBUCxDQUFZQyxPQUFPLEdBQUcsRUFBdEIsRUFBMEI7QUFDeEIsOEJBQVNBLE9BQVQsRUFBa0I7QUFDaEJDLE1BQUFBLE1BQU0sRUFBRSxRQURRO0FBRWhCQyxNQUFBQSxLQUFLLEVBQUUsT0FGUztBQUdoQkMsTUFBQUEsUUFBUSxFQUFFLFVBSE07QUFJaEJDLE1BQUFBLE9BQU8sRUFBRSxTQUpPO0FBS2hCQyxNQUFBQSxPQUFPLEVBQUU7QUFMTyxLQUFsQjtBQVFBLFVBQU1DLEtBQUssR0FBRyxJQUFJLElBQUosQ0FBUztBQUNyQkMsTUFBQUEsR0FBRyxFQUFFUCxPQUFPLENBQUNPLEdBRFE7QUFFckJDLE1BQUFBLElBQUksRUFBRVIsT0FBTyxDQUFDUSxJQUZPO0FBR3JCUCxNQUFBQSxNQUFNLEVBQUVELE9BQU8sQ0FBQ0M7QUFISyxLQUFULENBQWQ7QUFLQSxVQUFNUSxLQUFLLEdBQUcsQ0FDWixPQURZLEVBRVosVUFGWSxFQUdaLFNBSFksRUFJWixTQUpZLENBQWQ7QUFNQSxVQUFNQyxLQUFLLEdBQUcsRUFBZDtBQUNBLFVBQU1DLE9BQU8sR0FBRyxFQUFoQjs7QUFFQSxTQUFLLE1BQU1DLElBQVgsSUFBbUJILEtBQW5CLEVBQTBCO0FBQ3hCQyxNQUFBQSxLQUFLLENBQUNFLElBQUQsQ0FBTCxHQUFjQyxJQUFJLENBQUNDLE9BQUwsQ0FBYWQsT0FBTyxDQUFDUSxJQUFyQixFQUEyQlIsT0FBTyxDQUFDWSxJQUFELENBQWxDLENBQWQ7QUFDQUQsTUFBQUEsT0FBTyxDQUFDQyxJQUFELENBQVAsR0FBZ0JOLEtBQUssQ0FBQ1MsT0FBTixDQUFjZixPQUFPLENBQUNZLElBQUQsQ0FBckIsRUFBNkI7QUFBRUksUUFBQUEsUUFBUSxFQUFFLElBQVo7QUFBa0JDLFFBQUFBLFNBQVMsRUFBRTtBQUE3QixPQUE3QixDQUFoQjtBQUNEOztBQUVEWCxJQUFBQSxLQUFLLENBQUNZLEdBQU4sQ0FBVUMsS0FBVixDQUFnQjtBQUFFVCxNQUFBQTtBQUFGLEtBQWhCLEVBQTJCLFlBQTNCO0FBRUEsV0FBTyxLQUFLVSxTQUFMLENBQWVkLEtBQWYsRUFBc0JLLE9BQXRCLENBQVA7QUFDRDs7QUFxQkQsU0FBT1MsU0FBUCxDQUFpQmQsS0FBakIsRUFBd0JLLE9BQU8sR0FBRyxFQUFsQyxFQUFzQztBQUNwQyw4QkFBU0EsT0FBVCxFQUFrQjtBQUdoQlYsTUFBQUEsTUFBTSxFQUFFLFFBSFE7QUFLaEJHLE1BQUFBLE9BQU8sRUFBRSxFQUxPO0FBTWhCRixNQUFBQSxLQUFLLEVBQUUsRUFOUztBQU9oQkMsTUFBQUEsUUFBUSxFQUFFLEVBUE07QUFRaEJFLE1BQUFBLE9BQU8sRUFBRTtBQUNQRCxRQUFBQSxPQUFPLEVBQUUsRUFERjtBQUVQRixRQUFBQSxLQUFLLEVBQUUsRUFGQTtBQUdQQyxRQUFBQSxRQUFRLEVBQUU7QUFISDtBQVJPLEtBQWxCO0FBZUFHLElBQUFBLEtBQUssQ0FBQ1ksR0FBTixDQUFVQyxLQUFWLENBQWdCO0FBQ2RaLE1BQUFBLEdBQUcsRUFBRUQsS0FBSyxDQUFDQyxHQURHO0FBRWRDLE1BQUFBLElBQUksRUFBRUYsS0FBSyxDQUFDRSxJQUZFO0FBR2RhLE1BQUFBLFVBQVUsRUFBRTtBQUNWakIsUUFBQUEsT0FBTyxFQUFFa0IsTUFBTSxDQUFDQyxJQUFQLENBQVlaLE9BQU8sQ0FBQ1AsT0FBcEIsQ0FEQztBQUVWRixRQUFBQSxLQUFLLEVBQUVvQixNQUFNLENBQUNDLElBQVAsQ0FBWVosT0FBTyxDQUFDVCxLQUFwQixDQUZHO0FBR1ZDLFFBQUFBLFFBQVEsRUFBRW1CLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZWixPQUFPLENBQUNSLFFBQXBCO0FBSEE7QUFIRSxLQUFoQixFQVFHLGlCQVJIOztBQVdBLFNBQUssTUFBTSxDQUFDcUIsS0FBRCxFQUFRQyxJQUFSLENBQVgsSUFBNEJILE1BQU0sQ0FBQ0ksT0FBUCxDQUFlZixPQUFPLENBQUNULEtBQXZCLENBQTVCLEVBQTJEO0FBQ3pELFlBQU1HLE9BQU8sR0FBR00sT0FBTyxDQUFDTixPQUFSLENBQWdCSCxLQUFoQixDQUFzQnNCLEtBQXRCLENBQWhCO0FBQ0FsQixNQUFBQSxLQUFLLENBQUNxQixJQUFOLENBQVdILEtBQVgsRUFBa0JDLElBQWxCLEVBQXdCO0FBQUVwQixRQUFBQTtBQUFGLE9BQXhCO0FBQ0Q7O0FBR0QsU0FBSyxNQUFNLENBQUNtQixLQUFELEVBQVFJLE9BQVIsQ0FBWCxJQUErQk4sTUFBTSxDQUFDSSxPQUFQLENBQWVmLE9BQU8sQ0FBQ1IsUUFBdkIsQ0FBL0IsRUFBaUU7QUFDL0QsWUFBTUUsT0FBTyxHQUFHTSxPQUFPLENBQUNOLE9BQVIsQ0FBZ0JGLFFBQWhCLENBQXlCcUIsS0FBekIsQ0FBaEI7QUFDQWxCLE1BQUFBLEtBQUssQ0FBQ3VCLE9BQU4sQ0FBY0wsS0FBZCxFQUFxQkksT0FBckIsRUFBOEI7QUFBRXZCLFFBQUFBO0FBQUYsT0FBOUI7QUFDRDs7QUFHRCxTQUFLLE1BQU0sQ0FBQ21CLEtBQUQsRUFBUU0sTUFBUixDQUFYLElBQThCUixNQUFNLENBQUNJLE9BQVAsQ0FBZWYsT0FBTyxDQUFDUCxPQUF2QixDQUE5QixFQUErRDtBQUM3RCxZQUFNQyxPQUFPLEdBQUdNLE9BQU8sQ0FBQ04sT0FBUixDQUFnQkQsT0FBaEIsQ0FBd0JvQixLQUF4QixDQUFoQjtBQUNBbEIsTUFBQUEsS0FBSyxDQUFDeUIsTUFBTixDQUFhUCxLQUFiLEVBQW9CTSxNQUFwQixFQUE0QjtBQUFFekIsUUFBQUE7QUFBRixPQUE1QjtBQUNEOztBQUVELFdBQU9DLEtBQVA7QUFDRDs7QUFXRCxNQUFJQyxHQUFKLEdBQVU7QUFDUixpQ0FBTyxJQUFQO0FBQ0Q7O0FBVUQsTUFBSUMsSUFBSixHQUFXO0FBQ1QsaUNBQU8sSUFBUDtBQUNEOztBQVFELE1BQUl3QixRQUFKLEdBQWU7QUFDYixpQ0FBTyxJQUFQO0FBQ0Q7O0FBUUQsTUFBSUMsT0FBSixHQUFjO0FBQ1osaUNBQU8sSUFBUDtBQUNEOztBQXFEREMsRUFBQUEsV0FBVyxDQUFDbEMsT0FBTyxHQUFHLEVBQVgsRUFBZTtBQUFBLG9DQTlDakIsRUE4Q2lCOztBQUFBLHNDQXZDZixFQXVDZTs7QUFBQSxxQ0FoQ2hCLEVBZ0NnQjs7QUFBQTtBQUFBO0FBQUEsYUE5Qm5CO0FBOEJtQjs7QUFBQTtBQUFBO0FBQUEsYUE3QmxCO0FBNkJrQjs7QUFBQTtBQUFBO0FBQUEsYUE1QmQ7QUE0QmM7O0FBQUE7QUFBQTtBQUFBLGFBM0JmO0FBMkJlOztBQUFBO0FBQUE7QUFBQSxhQTFCZjtBQUNURyxRQUFBQSxRQUFRLEVBQUUsSUFBSWdDLEdBQUosRUFERDtBQUVUakMsUUFBQUEsS0FBSyxFQUFFLElBQUlpQyxHQUFKLEVBRkU7QUFHVC9CLFFBQUFBLE9BQU8sRUFBRSxJQUFJK0IsR0FBSjtBQUhBO0FBMEJlOztBQUFBO0FBQUE7QUFBQSxhQXBCYixJQUFJQSxHQUFKO0FBb0JhOztBQUFBLHVDQWRkLElBY2M7O0FBR3hCLHNDQUFZbkMsT0FBTyxDQUFDTyxHQUFSLElBQWU2QixPQUFPLENBQUM3QixHQUFSLENBQVk4QixRQUF2Qzs7QUFDQSx1Q0FBYXJDLE9BQU8sQ0FBQ1EsSUFBckI7O0FBR0EsUUFBSSx1QkFBQyxJQUFELE9BQUosRUFBZ0I7QUFDZCxZQUFNLElBQUk4QixzQkFBSixDQUFtQix1REFBbkIsRUFBNEU7QUFDaEY5QixRQUFBQSxJQUFJLEVBQUVSLE9BQU8sQ0FBQ1EsSUFEa0U7QUFFaEZELFFBQUFBLEdBQUcsRUFBRVAsT0FBTyxDQUFDTyxHQUZtRTtBQUloRjhCLFFBQUFBLFFBQVEsRUFBRUQsT0FBTyxDQUFDN0IsR0FBUixDQUFZOEI7QUFKMEQsT0FBNUUsQ0FBTjtBQU1EOztBQUVELFFBQUksT0FBTyxLQUFLN0IsSUFBWixLQUFxQixRQUF6QixFQUFtQztBQUNqQyxZQUFNLElBQUk4QixzQkFBSixDQUFvQiwwQ0FBeUN0QyxPQUFPLENBQUNRLElBQUssRUFBMUUsRUFBNkU7QUFDakZBLFFBQUFBLElBQUksRUFBRVIsT0FBTyxDQUFDUTtBQURtRSxPQUE3RSxDQUFOO0FBR0Q7O0FBRUQsU0FBS1AsTUFBTCxHQUFvQnNDLGlCQUFOLFlBQWV2QyxPQUFPLENBQUNDLE1BQXZCLEVBQStCO0FBQzNDSyxNQUFBQSxLQUFLLEVBQUVSLEtBQUssQ0FBQzBDLFFBRDhCO0FBRTNDckMsTUFBQUEsUUFBUSxFQUFFLEVBRmlDO0FBRzNDRCxNQUFBQSxLQUFLLEVBQUUsRUFIb0M7QUFJM0NFLE1BQUFBLE9BQU8sRUFBRTtBQUprQyxLQUEvQixDQUFkO0FBT0EsU0FBS2MsR0FBTCxHQUFpQnVCLGNBQU4sWUFBWSxLQUFLeEMsTUFBTCxDQUFZSyxLQUFaLENBQWtCWSxHQUE5QixDQUFYO0FBRUEsU0FBS3dCLFNBQUwsR0FBaUIsSUFBSUMsR0FBSixDQUFRLEtBQUsxQyxNQUFMLENBQVlLLEtBQVosQ0FBa0JvQyxTQUExQixDQUFqQjtBQUNBRSxJQUFBQSxXQUFXLENBQUMsS0FBS0YsU0FBTixFQUFpQixLQUFLekMsTUFBTCxDQUFZSyxLQUFaLENBQWtCb0MsU0FBbEIsQ0FBNEJHLFFBQTdDLENBQVg7QUFDRDs7QUFlRDlCLEVBQUFBLE9BQU8sQ0FBQytCLFFBQUQsRUFBVzlDLE9BQU8sR0FBRyxFQUFyQixFQUF5QjtBQUM5QjhDLElBQUFBLFFBQVEsR0FBRzlDLE9BQU8sQ0FBQytDLFFBQVIsR0FDUEQsUUFETyxHQUVQakMsSUFBSSxDQUFDQyxPQUFMLENBQWEsS0FBS04sSUFBbEIsRUFBd0JzQyxRQUF4QixDQUZKO0FBSUEsVUFBTUUsSUFBSSxHQUFHaEQsT0FBTyxDQUFDZ0IsUUFBUixHQUNUaUMsbUJBRFMsR0FFVGxDLE9BRko7QUFHQSxVQUFNbUMsUUFBUSxHQUFHRixJQUFJLENBQUNGLFFBQUQsQ0FBckI7QUFFQSxXQUFPOUMsT0FBTyxDQUFDaUIsU0FBUixJQUFxQiwyQkFBY2lDLFFBQVEsQ0FBQ0MsT0FBdkIsQ0FBckIsR0FDSEQsUUFBUSxDQUFDQyxPQUROLEdBRUhELFFBRko7QUFHRDs7QUFhRHJCLEVBQUFBLE9BQU8sQ0FBQ0wsS0FBRCxFQUFRNEIsU0FBUixFQUFtQkMsSUFBSSxHQUFHLEVBQTFCLEVBQThCO0FBQzdCQyxzQkFBTixZQUFnQjtBQUNkMUMsTUFBQUEsSUFBSSxFQUFFLFNBRFE7QUFFZFksTUFBQUEsS0FGYztBQUdkNEIsTUFBQUEsU0FIYztBQUlkL0MsTUFBQUEsT0FBTyxFQUFFZ0QsSUFBSSxDQUFDaEQ7QUFKQSxLQUFoQixFQUtHLHNDQUFjRixRQUxqQjs7QUFPQSxXQUFPLElBQVA7QUFDRDs7QUFZRHdCLEVBQUFBLElBQUksQ0FBQ0gsS0FBRCxFQUFRNEIsU0FBUixFQUFtQkMsSUFBSSxHQUFHLEVBQTFCLEVBQThCO0FBQzFCQyxzQkFBTixZQUFnQjtBQUNkMUMsTUFBQUEsSUFBSSxFQUFFLE1BRFE7QUFFZFksTUFBQUEsS0FGYztBQUdkNEIsTUFBQUEsU0FIYztBQUlkL0MsTUFBQUEsT0FBTyxFQUFFZ0QsSUFBSSxDQUFDaEQ7QUFKQSxLQUFoQixFQUtHLHNDQUFjSCxLQUxqQjs7QUFPQSxXQUFPLElBQVA7QUFDRDs7QUFhRDZCLEVBQUFBLE1BQU0sQ0FBQ1AsS0FBRCxFQUFRNEIsU0FBUixFQUFtQkMsSUFBSSxHQUFHLEVBQTFCLEVBQThCO0FBQzVCQyxzQkFBTixZQUFnQjtBQUNkMUMsTUFBQUEsSUFBSSxFQUFFLFFBRFE7QUFFZFksTUFBQUEsS0FGYztBQUdkNEIsTUFBQUEsU0FIYztBQUlkL0MsTUFBQUEsT0FBTyxFQUFFZ0QsSUFBSSxDQUFDaEQ7QUFKQSxLQUFoQixFQUtHLHNDQUFjRCxPQUxqQjs7QUFPQSxXQUFPLElBQVA7QUFDRDs7QUFXRCxRQUFNbUQsT0FBTixHQUFnQjtBQUFBOztBQUNkLFFBQUksS0FBS3ZCLFFBQVQsRUFBbUI7QUFDakIsYUFBTyxJQUFQO0FBQ0Q7O0FBRUQsVUFBTXdCLE9BQU8seUJBQUcsSUFBSCxXQUFiOztBQUNBLFVBQU07QUFBRXJELE1BQUFBLFFBQUY7QUFBWUMsTUFBQUEsT0FBWjtBQUFxQkYsTUFBQUE7QUFBckIsUUFBK0JzRCxPQUFyQzs7QUFFQSxTQUFLLE1BQU0sQ0FBQ2hDLEtBQUQsRUFBUWlDLFNBQVIsQ0FBWCxJQUFpQ3ZELEtBQWpDLEVBQXdDO0FBQ3RDLFVBQUksQ0FBQ3VELFNBQVMsQ0FBQ0wsU0FBVixDQUFvQk0sUUFBekIsRUFBbUM7QUFDakMsY0FBTSxJQUFJcEIsc0JBQUosQ0FBb0IsUUFBT2QsS0FBTSwyQ0FBakMsQ0FBTjtBQUNEOztBQUdELFVBQUlpQyxTQUFTLENBQUNMLFNBQVYsQ0FBb0JNLFFBQXBCLEtBQWlDLE9BQXJDLEVBQThDO0FBQzVDLGdEQUFnQkMsR0FBaEIsQ0FBb0JuQyxLQUFwQixFQUEyQmlDLFNBQTNCO0FBQ0Q7QUFDRjs7QUFHRCxVQUFNRyxPQUFPLENBQUNDLEdBQVIsQ0FBWSxDQUFDLEdBQUczRCxLQUFKLEVBQVc0RCxHQUFYLENBQWUsQ0FBQyxHQUFHTCxTQUFILENBQUQsS0FBbUJBLFNBQVMsQ0FBQ0YsT0FBVixDQUFrQjtBQUFFQyxNQUFBQTtBQUFGLEtBQWxCLENBQWxDLENBQVosQ0FBTjtBQUdBLFNBQUssQ0FBQyxNQUFNSSxPQUFPLENBQUNDLEdBQVIsQ0FBWSxDQUN0QixHQUFHRSxLQUFLLENBQUNDLElBQU4sQ0FBVzVELE9BQVgsRUFBb0IwRCxHQUFwQixDQUF3QixPQUFPLENBQUN0QyxLQUFELEVBQVFpQyxTQUFSLENBQVAsTUFBK0I7QUFDeERRLE1BQUFBLE1BQU0sRUFBRVIsU0FBUyxDQUFDTCxTQUFWLENBQW9CYyxRQUFwQixHQUErQixLQUEvQixHQUF1QyxTQURTO0FBRXhEQyxNQUFBQSxLQUFLLEVBQUUsTUFBTVYsU0FBUyxDQUFDRixPQUFWLENBQWtCO0FBQUVDLFFBQUFBLE9BQUY7QUFBV3RELFFBQUFBO0FBQVgsT0FBbEIsQ0FGMkM7QUFHeERzQixNQUFBQTtBQUh3RCxLQUEvQixDQUF4QixDQURtQixFQU10QixHQUFHdUMsS0FBSyxDQUFDQyxJQUFOLENBQVc3RCxRQUFYLEVBQXFCMkQsR0FBckIsQ0FBeUIsT0FBTyxDQUFDdEMsS0FBRCxFQUFRaUMsU0FBUixDQUFQLE1BQStCO0FBQ3pEUSxNQUFBQSxNQUFNLEVBQUVSLFNBQVMsQ0FBQ0wsU0FBVixDQUFvQmMsUUFBcEIsR0FBK0IsS0FBL0IsR0FBdUMsVUFEVTtBQUV6REMsTUFBQUEsS0FBSyxFQUFFLE1BQU1WLFNBQVMsQ0FBQ0YsT0FBVixDQUFrQjtBQUFFQyxRQUFBQSxPQUFGO0FBQVd0RCxRQUFBQTtBQUFYLE9BQWxCLENBRjRDO0FBR3pEc0IsTUFBQUE7QUFIeUQsS0FBL0IsQ0FBekIsQ0FObUIsQ0FBWixDQUFQLEVBWUY0QyxNQVpFLENBWUtDLE1BQU0sSUFBSUMsT0FBTyxDQUFDRCxNQUFNLENBQUNKLE1BQVIsQ0FadEIsRUFhRk0sT0FiRSxDQWFNRixNQUFNLElBQVVKLGVBQU4sWUFBYUksTUFBTSxDQUFDSixNQUFwQixFQUE0QkksTUFBTSxDQUFDN0MsS0FBbkMsRUFBMEM2QyxNQUFNLENBQUNGLEtBQWpELENBYmhCLENBQUw7O0FBZUEsMkNBQWlCLElBQWpCOztBQUNBLFVBQU0scURBQWlCSyxpQkFBakIsaUJBQTBCLGNBQTFCLEVBQTBDLElBQTFDLENBQU47QUFFQSxXQUFPLElBQVA7QUFDRDs7QUFPRCxRQUFNQyxLQUFOLEdBQWM7QUFBQTs7QUFDWixVQUFNO0FBQUVyRSxNQUFBQSxPQUFGO0FBQVdELE1BQUFBLFFBQVg7QUFBcUJELE1BQUFBO0FBQXJCLDhCQUErQixJQUEvQixXQUFOOztBQUVBLFVBQU0sS0FBS3FELE9BQUwsRUFBTjtBQUNBLFVBQU0sc0RBQWlCaUIsaUJBQWpCLGtCQUEwQixhQUExQixFQUF5QyxJQUF6QyxDQUFOO0FBRUEsVUFBTVosT0FBTyxDQUFDQyxHQUFSLENBQVksQ0FDaEIsR0FBR0UsS0FBSyxDQUFDQyxJQUFOLENBQVc5RCxLQUFYLENBRGEsRUFFaEIsR0FBRzZELEtBQUssQ0FBQ0MsSUFBTixDQUFXNUQsT0FBWCxDQUZhLEVBR2hCMEQsR0FIZ0IsQ0FHWixDQUFDLEdBQUdMLFNBQUgsQ0FBRCxLQUFtQkEsU0FBUyxDQUFDZ0IsS0FBVixFQUhQLENBQVosQ0FBTjs7QUFTQSxTQUFLLE1BQU0sR0FBR2hCLFNBQUgsQ0FBWCxJQUE0QnRELFFBQTVCLEVBQXNDO0FBQ3BDLFVBQUk7QUFDRixjQUFNc0QsU0FBUyxDQUFDZ0IsS0FBVixDQUFnQjtBQUFFdkUsVUFBQUE7QUFBRixTQUFoQixDQUFOO0FBQ0QsT0FGRCxDQUVFLE9BQU93RSxHQUFQLEVBQVk7QUFFWixjQUFNLEtBQUtDLElBQUwsR0FFSEMsS0FGRyxDQUVHQyxPQUFPLElBQUksS0FBSyxLQUFLM0QsR0FBTCxDQUFTNEQsS0FBVCxDQUFlO0FBQUVKLFVBQUFBLEdBQUcsRUFBRUc7QUFBUCxTQUFmLEVBQWlDLDhCQUFqQyxDQUZuQixDQUFOO0FBS0EsY0FBTUgsR0FBTjtBQUNEO0FBQ0Y7O0FBRUQsMENBQWdCLElBQWhCOztBQUNBLFVBQU0sc0RBQWlCRixpQkFBakIsa0JBQTBCLFlBQTFCLEVBQXdDLElBQXhDLENBQU47QUFDQSxTQUFLdEQsR0FBTCxDQUFTNkQsSUFBVCxDQUFjO0FBQUV4RSxNQUFBQSxHQUFHLEVBQUUsS0FBS0E7QUFBWixLQUFkLEVBQWlDLGFBQWpDO0FBRUEsV0FBTyxJQUFQO0FBQ0Q7O0FBVUQsUUFBTW9FLElBQU4sR0FBYTtBQUFBOztBQUNYLFVBQU07QUFBRXhFLE1BQUFBLFFBQUY7QUFBWUMsTUFBQUEsT0FBWjtBQUFxQkYsTUFBQUE7QUFBckIsOEJBQStCLElBQS9CLFdBQU47O0FBRUEsVUFBTSxzREFBaUJzRSxpQkFBakIsa0JBQTBCLFlBQTFCLEVBQXdDLElBQXhDLENBQU47QUFFQSxVQUFNWixPQUFPLENBQUNDLEdBQVIsQ0FBWSxDQUNoQixHQUFHRSxLQUFLLENBQUNDLElBQU4sQ0FBVzlELEtBQVgsQ0FEYSxFQUVoQixHQUFHNkQsS0FBSyxDQUFDQyxJQUFOLENBQVc1RCxPQUFYLENBRmEsRUFHaEIwRCxHQUhnQixDQUdaLENBQUMsR0FBR0wsU0FBSCxDQUFELEtBQW1CQSxTQUFTLENBQUNrQixJQUFWLEVBSFAsQ0FBWixDQUFOO0FBS0EsUUFBSUssS0FBSjs7QUFJQSxTQUFLLE1BQU0sQ0FBQ3hELEtBQUQsRUFBUWlDLFNBQVIsQ0FBWCxJQUFpQ00sS0FBSyxDQUFDQyxJQUFOLENBQVc3RCxRQUFYLEVBQXFCOEUsT0FBckIsRUFBakMsRUFBaUU7QUFDL0QsVUFBSTtBQUNGLGVBQU8sS0FBSzlFLFFBQUwsQ0FBY3FCLEtBQWQsQ0FBUDtBQUNBLGNBQU1pQyxTQUFTLENBQUNrQixJQUFWLENBQWU7QUFBRXpFLFVBQUFBO0FBQUYsU0FBZixDQUFOO0FBQ0QsT0FIRCxDQUdFLE9BQU93RSxHQUFQLEVBQVk7QUFDWk0sUUFBQUEsS0FBSyxHQUFHTixHQUFSO0FBR0E7QUFDRDtBQUNGOztBQUdELFNBQUssTUFBTSxDQUFDbEQsS0FBRCxDQUFYLElBQXNCcEIsT0FBdEIsRUFBK0I7QUFDN0IsYUFBTyxLQUFLQSxPQUFMLENBQWFvQixLQUFiLENBQVA7QUFDRDs7QUFFRCwwQ0FBZ0IsS0FBaEI7O0FBQ0EsMkNBQWlCLEtBQWpCOztBQUVBLFVBQWFnRCxpQkFBUCxNQUFBdEUsS0FBSyxFQUFXLFdBQVgsRUFBd0IsSUFBeEIsQ0FBWDtBQUNBLFNBQUtnQixHQUFMLENBQVM2RCxJQUFULENBQWMsZUFBZDs7QUFHQSxRQUFJQyxLQUFKLEVBQVc7QUFDVCxZQUFNQSxLQUFOO0FBQ0Q7O0FBRUQsV0FBTyxJQUFQO0FBQ0Q7O0FBM2ZTOzs7Ozs7Ozs7Ozs7OztnQkFBTmxGLEssY0FDYztBQUNoQm9CLEVBQUFBLEdBQUcsRUFBRTtBQUNIZ0UsSUFBQUEsSUFBSSxFQUFFckUsSUFBSSxDQUFDc0UsUUFBTCxDQUFjL0MsT0FBTyxDQUFDZ0QsR0FBUixFQUFkLENBREg7QUFFSEMsSUFBQUEsS0FBSyxFQUFFLE1BRko7QUFHSEMsSUFBQUEsV0FBVyxFQUFFO0FBQ1haLE1BQUFBLEdBQUcsRUFBRWEsSUFBSSxDQUFDQyxjQUFMLENBQW9CZCxHQURkO0FBRVhlLE1BQUFBLEdBQUcsRUFBRUYsSUFBSSxDQUFDQyxjQUFMLENBQW9CQyxHQUZkO0FBR1hDLE1BQUFBLEdBQUcsRUFBRUgsSUFBSSxDQUFDQyxjQUFMLENBQW9CRTtBQUhkO0FBSFYsR0FEVztBQVdoQmhELEVBQUFBLFNBQVMsRUFBRTtBQUNUaUQsSUFBQUEsU0FBUyxFQUFFLElBREY7QUFFVEMsSUFBQUEsV0FBVyxFQUFFLElBRko7QUFHVC9DLElBQUFBLFFBQVEsRUFBRSxDQUNSLFFBRFE7QUFIRDtBQVhLLEM7O2VBNmZML0MsSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFdlIHVzZSBmb3ItYXdhaXQgcGF0dGVybiBxdWl0ZSBleHRlbnNpdmVseSBoZXJlIGZvciBsZWdpdGltYXRlIHB1cnBvc2VzXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCAqIGFzIEFqdiBmcm9tICdhanYnXG5pbXBvcnQgKiBhcyBhanZLZXl3b3JkcyBmcm9tICdhanYta2V5d29yZHMnXG5pbXBvcnQgKiBhcyBwaW5vIGZyb20gJ3Bpbm8nXG5pbXBvcnQge1xuICBkZWZhdWx0c0RlZXAgYXMgZGVmYXVsdHMsXG4gIGlzUGxhaW5PYmplY3QsXG59IGZyb20gJ2xvZGFzaCdcbmltcG9ydCB7IEZyYW1ld29ya0Vycm9yIH0gZnJvbSAnQGF0bGFzLmpzL2Vycm9ycydcbmltcG9ydCB7XG4gIGV4cG9zZSxcbiAgZGlzcGF0Y2gsXG4gIGNvbXBvbmVudCxcbiAgbWtjb25maWcsXG4gIG1rbG9nLFxuICBvcHRyZXF1aXJlLFxufSBmcm9tICcuL3ByaXZhdGUnXG5cbi8qKlxuICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHlvdXIgYXBwbGljYXRpb24gYW5kIGFnZ3JlZ2F0ZXMgYWxsIGNvbXBvbmVudHMgdG9nZXRoZXJcbiAqXG4gKiBZb3Ugc2hvdWxkIGdlbmVyYWxseSBjcmVhdGUgb25seSBvbmUgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBpbiBhIHByb2dyYW0uXG4gKi9cbmNsYXNzIEF0bGFzIHtcbiAgc3RhdGljIGRlZmF1bHRzID0ge1xuICAgIGxvZzoge1xuICAgICAgbmFtZTogcGF0aC5iYXNlbmFtZShwcm9jZXNzLmN3ZCgpKSxcbiAgICAgIGxldmVsOiAnaW5mbycsXG4gICAgICBzZXJpYWxpemVyczoge1xuICAgICAgICBlcnI6IHBpbm8uc3RkU2VyaWFsaXplcnMuZXJyLFxuICAgICAgICByZXE6IHBpbm8uc3RkU2VyaWFsaXplcnMucmVxLFxuICAgICAgICByZXM6IHBpbm8uc3RkU2VyaWFsaXplcnMucmVzLFxuICAgICAgfSxcbiAgICB9LFxuXG4gICAgdmFsaWRhdG9yOiB7XG4gICAgICBhbGxFcnJvcnM6IHRydWUsXG4gICAgICB1c2VEZWZhdWx0czogdHJ1ZSxcbiAgICAgIGtleXdvcmRzOiBbXG4gICAgICAgICd0eXBlb2YnLFxuICAgICAgXSxcbiAgICB9LFxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpc2UgYSBicmFuZC1uZXcgYXRsYXMgaW5zdGFuY2UgZnJvbSB0aGUgZ2l2ZW4gbW9kdWxlIGxvY2F0aW9uc1xuICAgKlxuICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gcXVpY2tseSBjb25maWd1cmUgQXRsYXMgaW5zdGFuY2UgYnkgc2ltcGx5IHRlbGxpbmcgaXQgd2hlcmUgeW91ciBjb21wb25lbnRzXG4gICAqIGxpdmUgb24gdGhlIGZpbGVzeXN0ZW0sIGFuZCBBdGxhcyB3aWxsIGxvYWQgdGhlbSBmcm9tIHRoZSBnaXZlbiBtb2R1bGUgbG9jYXRpb25zIGFuZCBhZGQgdGhlbVxuICAgKiB0byB0aGUgQXRsYXMgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgICBvcHRpb25zICAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgIG9wdGlvbnMuZW52ICAgICAgICAgICAgICAgICAgIFRoZSBlbnZpcm9ubWVudCB1bmRlciB3aGljaCB0byBvcGVyYXRlXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLnJvb3QgICAgICAgICAgICAgICAgICBUaGUgcm9vdCBkaXJlY3RvcnkgdG8gd2hpY2ggYWxsIG90aGVyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyBtZW50aW9uZWQgaGVyZSBhcmUgcmVsYXRpdmVcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgIG9wdGlvbnMuY29uZmlnPSdjb25maWcnICAgICAgIE1vZHVsZSBsb2NhdGlvbiBmb3IgdGhlIGNvbmZpZ3VyYXRpb25cbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgIG9wdGlvbnMuaG9va3M9J2hvb2tzJyAgICAgICAgIE1vZHVsZSBsb2NhdGlvbiBmb3IgdGhlIGhvb2tzXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLnNlcnZpY2VzPSdzZXJ2aWNlcycgICBNb2R1bGUgbG9jYXRpb24gZm9yIHRoZSBzZXJ2aWNlc1xuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgb3B0aW9ucy5hY3Rpb25zPSdhY3Rpb25zJyAgICAgTW9kdWxlIGxvY2F0aW9uIGZvciB0aGUgYWN0aW9uc1xuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgb3B0aW9ucy5hbGlhc2VzPSdhbGlhc2VzJyAgICAgTW9kdWxlIGxvY2F0aW9uIGZvciB0aGUgYWxpYXNlc1xuICAgKiBAcmV0dXJuICAgIHtBdGxhc31cbiAgICovXG4gIHN0YXRpYyBpbml0KG9wdGlvbnMgPSB7fSkge1xuICAgIGRlZmF1bHRzKG9wdGlvbnMsIHtcbiAgICAgIGNvbmZpZzogJ2NvbmZpZycsXG4gICAgICBob29rczogJ2hvb2tzJyxcbiAgICAgIHNlcnZpY2VzOiAnc2VydmljZXMnLFxuICAgICAgYWN0aW9uczogJ2FjdGlvbnMnLFxuICAgICAgYWxpYXNlczogJ2FsaWFzZXMnLFxuICAgIH0pXG5cbiAgICBjb25zdCBhdGxhcyA9IG5ldyB0aGlzKHtcbiAgICAgIGVudjogb3B0aW9ucy5lbnYsXG4gICAgICByb290OiBvcHRpb25zLnJvb3QsXG4gICAgICBjb25maWc6IG9wdGlvbnMuY29uZmlnLFxuICAgIH0pXG4gICAgY29uc3QgdHlwZXMgPSBbXG4gICAgICAnaG9va3MnLFxuICAgICAgJ3NlcnZpY2VzJyxcbiAgICAgICdhY3Rpb25zJyxcbiAgICAgICdhbGlhc2VzJyxcbiAgICBdXG4gICAgY29uc3QgcGF0aHMgPSB7fVxuICAgIGNvbnN0IG1vZHVsZXMgPSB7fVxuXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBwYXRoc1t0eXBlXSA9IHBhdGgucmVzb2x2ZShvcHRpb25zLnJvb3QsIG9wdGlvbnNbdHlwZV0pXG4gICAgICBtb2R1bGVzW3R5cGVdID0gYXRsYXMucmVxdWlyZShvcHRpb25zW3R5cGVdLCB7IG9wdGlvbmFsOiB0cnVlLCBub3JtYWxpc2U6IHRydWUgfSlcbiAgICB9XG5cbiAgICBhdGxhcy5sb2cuZGVidWcoeyBwYXRocyB9LCAnYXRsYXM6aW5pdCcpXG5cbiAgICByZXR1cm4gdGhpcy5ib290c3RyYXAoYXRsYXMsIG1vZHVsZXMpXG4gIH1cblxuICAvKipcbiAgICogQm9vdHN0cmFwIHRoZSBnaXZlbiBBdGxhcyBpbnN0YW5jZSB3aXRoIHRoZSBwcm92aWRlZCBtb2R1bGVzXG4gICAqXG4gICAqIFVzZSB0aGlzIG1ldGhvZCB0byBxdWlja2x5IHNldCB1cCB0aGUgZ2l2ZW4gQXRsYXMgaW5zdGFuY2UgdG8gdXNlIHRoZSBwcm92aWRlZCBjb21wb25lbnRzLiBUaGlzXG4gICAqIGlzIHVzZWZ1bCBpZiB5b3UgbmVlZCB0byBoYXZlIG11bHRpcGxlIGVudHJ5IHBvaW50cyB0byB5b3VyIHByb2dyYW0gYW5kIHNvbWUgZW50cnlwb2ludHMgc2hvdWxkXG4gICAqIG9ubHkgdXNlIHNvbWUgY29tcG9uZW50cyBhdmFpbGFibGUuIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgd2hlbiBpbXBsZW1lbnRpbmcgd29ya2VyXG4gICAqIHByb2Nlc3NlcyB3aGVyZSB5b3Ugb25seSBuZWVkIGEgc3Vic2V0IG9mIGFsbCBhdmFpbGFibGUgY29tcG9uZW50cy4gVGhpcyBtZXRob2QsIHdoaWxlIG1vcmVcbiAgICogdmVyYm9zZSBhcyBBdGxhcy5pbml0KCksIHN0aWxsIGZyZWVzIHlvdSBmcm9tIG1hbnVhbGx5IGFkZGluZyBhbGwgdGhlIGNvbXBvbmVudHMgYnkgaGFuZCB3aGlsZVxuICAgKiBwcm92aWRpbmcgZ3JlYXRlciBmbGV4aWJpbGl0eSBhcyB0byB3aGljaCBjb21wb25lbnRzIHdpbGwgYmUgdXNlZC5cbiAgICpcbiAgICogQHBhcmFtICAgICB7QXRsYXN9ICAgYXRsYXMgICAgICAgICAgICAgICAgIFRoZSBBdGxhcyBpbnN0YW5jZSB0byBib290c3RyYXBcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgbW9kdWxlcz8gICAgICAgICAgICAgIEFsbCB0aGUgbW9kdWxlcyB3aGljaCBzaG91bGQgYmUgYWRkZWQgdG8gQXRsYXNcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgbW9kdWxlcy5hY3Rpb25zICAgICAgIEFjdGlvbnMgdG8gYWRkXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gIG1vZHVsZXMuaG9va3MgICAgICAgICBIb29rcyB0byBhZGRcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgbW9kdWxlcy5zZXJ2aWNlcyAgICAgIFNlcnZpY2VzIHRvIGFkZFxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICBtb2R1bGVzLmFsaWFzZXMgICAgICAgQWxpYXNlcyBmb3IgYWxsIHRoZSBjb21wb25lbnRzXG4gICAqIEByZXR1cm4gICAge0F0bGFzfSAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgQXRsYXMgaW5zdGFuY2Ugd2l0aCBhbGwgY29tcG9uZW50cyBhZGRlZCwgcmVhZHlcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIHN0YXJ0ZWRcbiAgICovXG4gIHN0YXRpYyBib290c3RyYXAoYXRsYXMsIG1vZHVsZXMgPSB7fSkge1xuICAgIGRlZmF1bHRzKG1vZHVsZXMsIHtcbiAgICAgIC8vIGNvbmZpZyBtb2R1bGUgaXMgbG9hZGVkIGJ5IEF0bGFzIGluc3RhbmNlIGl0c2VsZiwgc28gaXQncyBva2F5IHRvIHVzZSBhIHN0cmluZyBoZXJlIGFuZCBsZXRcbiAgICAgIC8vIEF0bGFzIGxvYWQgaXRcbiAgICAgIGNvbmZpZzogJ2NvbmZpZycsXG4gICAgICAvLyBUaGUgZm9sbG93aW5nIG1vZHVsZXMgbXVzdCBhbHJlYWR5IGJlIHByb3ZpZGVkIGRpcmVjdGx5IGFzIHdlIHdvbid0IGxvYWQgdGhlbVxuICAgICAgYWN0aW9uczoge30sXG4gICAgICBob29rczoge30sXG4gICAgICBzZXJ2aWNlczoge30sXG4gICAgICBhbGlhc2VzOiB7XG4gICAgICAgIGFjdGlvbnM6IHt9LFxuICAgICAgICBob29rczoge30sXG4gICAgICAgIHNlcnZpY2VzOiB7fSxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIGF0bGFzLmxvZy5kZWJ1Zyh7XG4gICAgICBlbnY6IGF0bGFzLmVudixcbiAgICAgIHJvb3Q6IGF0bGFzLnJvb3QsXG4gICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIGFjdGlvbnM6IE9iamVjdC5rZXlzKG1vZHVsZXMuYWN0aW9ucyksXG4gICAgICAgIGhvb2tzOiBPYmplY3Qua2V5cyhtb2R1bGVzLmhvb2tzKSxcbiAgICAgICAgc2VydmljZXM6IE9iamVjdC5rZXlzKG1vZHVsZXMuc2VydmljZXMpLFxuICAgICAgfSxcbiAgICB9LCAnYXRsYXM6Ym9vdHN0cmFwJylcblxuICAgIC8vIEhvb2tzXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIEhvb2tdIG9mIE9iamVjdC5lbnRyaWVzKG1vZHVsZXMuaG9va3MpKSB7XG4gICAgICBjb25zdCBhbGlhc2VzID0gbW9kdWxlcy5hbGlhc2VzLmhvb2tzW2FsaWFzXVxuICAgICAgYXRsYXMuaG9vayhhbGlhcywgSG9vaywgeyBhbGlhc2VzIH0pXG4gICAgfVxuXG4gICAgLy8gU2VydmljZXNcbiAgICBmb3IgKGNvbnN0IFthbGlhcywgU2VydmljZV0gb2YgT2JqZWN0LmVudHJpZXMobW9kdWxlcy5zZXJ2aWNlcykpIHtcbiAgICAgIGNvbnN0IGFsaWFzZXMgPSBtb2R1bGVzLmFsaWFzZXMuc2VydmljZXNbYWxpYXNdXG4gICAgICBhdGxhcy5zZXJ2aWNlKGFsaWFzLCBTZXJ2aWNlLCB7IGFsaWFzZXMgfSlcbiAgICB9XG5cbiAgICAvLyBBY3Rpb25zXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIEFjdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMobW9kdWxlcy5hY3Rpb25zKSkge1xuICAgICAgY29uc3QgYWxpYXNlcyA9IG1vZHVsZXMuYWxpYXNlcy5hY3Rpb25zW2FsaWFzXVxuICAgICAgYXRsYXMuYWN0aW9uKGFsaWFzLCBBY3Rpb24sIHsgYWxpYXNlcyB9KVxuICAgIH1cblxuICAgIHJldHVybiBhdGxhc1xuICB9XG5cblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgdW5kZXIgd2hpY2ggdGhpcyBpbnN0YW5jZSBvcGVyYXRlc1xuICAgKlxuICAgKiBEZWZhdWx0cyB0byBOT0RFX0VOViBmcm9tIHRoZSBlbnZpcm9ubWVudC5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEByZXR1cm4gICAge1N0cmluZ31cbiAgICovXG4gIGdldCBlbnYoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2VudlxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByb290IGZvbGRlciB3aGVyZSBhbGwgb3RoZXIgcGF0aHMgc2hvdWxkIGJlIHJlbGF0aXZlIHRvXG4gICAqXG4gICAqIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHNldCB0aGlzIHRvIHRoZSBwcm9qZWN0J3Mgcm9vdCBkaXJlY3RvcnkuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAcmV0dXJuICAgIHtTdHJpbmd9XG4gICAqL1xuICBnZXQgcm9vdCgpIHtcbiAgICByZXR1cm4gdGhpcy4jcm9vdFxuICB9XG5cbiAgLyoqXG4gICAqIElzIHRoaXMgaW5zdGFuY2UgaW4gYSBwcmVwYXJlZCBzdGF0ZT9cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEByZXR1cm4gICAge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgcHJlcGFyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuI3ByZXBhcmVkXG4gIH1cblxuICAvKipcbiAgICogSXMgdGhpcyBpbnN0YW5jZSBpbiBhIHN0YXJ0ZWQgc3RhdGU/XG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAcmV0dXJuICAgIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IHN0YXJ0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuI3N0YXJ0ZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBBdGxhcyBjb25maWd1cmF0aW9uLCBhcyBwYXNzZWQgaW4gdG8gdGhlIGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEB0eXBlICAgIHtPYmplY3R9XG4gICAqL1xuICBjb25maWcgPSB7fVxuXG4gIC8qKlxuICAgKiBBbGwgc2VydmljZXMgYWRkZWQgdG8gdGhpcyBpbnN0YW5jZVxuICAgKlxuICAgKiBAdHlwZSAgICB7T2JqZWN0fVxuICAgKi9cbiAgc2VydmljZXMgPSB7fVxuXG4gIC8qKlxuICAgKiBBbGwgYWN0aW9ucyBhZGRlZCB0byB0aGlzIGluc3RhbmNlXG4gICAqXG4gICAqIEB0eXBlICAgIHtPYmplY3R9XG4gICAqL1xuICBhY3Rpb25zID0ge31cblxuICAjZW52ID0gbnVsbFxuICAjcm9vdCA9IG51bGxcbiAgI3ByZXBhcmVkID0gZmFsc2VcbiAgI3N0YXJ0ZWQgPSBmYWxzZVxuICAjY2F0YWxvZyA9IHtcbiAgICBzZXJ2aWNlczogbmV3IE1hcCgpLFxuICAgIGhvb2tzOiBuZXcgTWFwKCksXG4gICAgYWN0aW9uczogbmV3IE1hcCgpLFxuICB9XG5cbiAgI29ic2VydmVycyA9IG5ldyBNYXAoKVxuXG4gIC8qKlxuICAgKiBBbiBpbnN0YW5jZSBvZiBBanYgdXNlZCB0byB2YWxpZGF0ZSBjb21wb25lbnQgY29uZmlndXJhdGlvblxuICAgKiBAdHlwZSAgICB7QWp2fVxuICAgKi9cbiAgdmFsaWRhdG9yID0gbnVsbFxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2VcbiAgICpcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRpb25zICAgICAgICAgICAgIE9wdGlvbnMgZm9yIHRoZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdGlvbnMuY29uZmlnICAgICAgQ29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBpbnN0YW5jZSBhbmQgZm9yIGFsbFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZXMgb3Igb3RoZXIgY29tcG9uZW50cyB3aGljaCB3aWxsIGJlIGFkZGVkIHRvXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5zdGFuY2VcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBvcHRpb25zLnJvb3QgICAgICAgIFRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgaW5zdGFuY2VcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBvcHRpb25zLmVudiAgICAgICAgIFRoZSBlbnZpcm9ubWVudCB1bmRlciB3aGljaCB0aGlzIGluc3RhbmNlIG9wZXJhdGVzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9uZW50cyBtYXkgdXNlIHRoaXMgdmFsdWUgZm9yIHZhcmlvdXMgcHVycG9zZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byBOT0RFX0VOVi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIEluaXRpYWxpc2UgcHJpdmF0ZSBzdHVmZlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm9jZXNzLWVudlxuICAgIHRoaXMuI2VudiA9IG9wdGlvbnMuZW52IHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WXG4gICAgdGhpcy4jcm9vdCA9IG9wdGlvbnMucm9vdFxuXG4gICAgLy8gU2FmZXR5IGNoZWNrc1xuICAgIGlmICghdGhpcy4jZW52KSB7XG4gICAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoJ2VudiBub3Qgc3BlY2lmaWVkIGluIG9wdGlvbnMgYW5kIE5PREVfRU5WIHdhcyBub3Qgc2V0Jywge1xuICAgICAgICByb290OiBvcHRpb25zLnJvb3QsXG4gICAgICAgIGVudjogb3B0aW9ucy5lbnYsXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm9jZXNzLWVudlxuICAgICAgICBOT0RFX0VOVjogcHJvY2Vzcy5lbnYuTk9ERV9FTlYsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5yb290ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEZyYW1ld29ya0Vycm9yKGByb290IG11c3QgYmUgZXhwbGljaXRseSBzcGVjaWZpZWQsIGdvdCAke29wdGlvbnMucm9vdH1gLCB7XG4gICAgICAgIHJvb3Q6IG9wdGlvbnMucm9vdCxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcgPSB0aGlzOjpta2NvbmZpZyhvcHRpb25zLmNvbmZpZywge1xuICAgICAgYXRsYXM6IEF0bGFzLmRlZmF1bHRzLFxuICAgICAgc2VydmljZXM6IHt9LFxuICAgICAgaG9va3M6IHt9LFxuICAgICAgYWN0aW9uczoge30sXG4gICAgfSlcbiAgICAvLyBMb2dnZXIg8J+MslxuICAgIHRoaXMubG9nID0gdGhpczo6bWtsb2codGhpcy5jb25maWcuYXRsYXMubG9nKVxuICAgIC8vIEFqdiB2YWxpZGF0b3Ig4pyTXG4gICAgdGhpcy52YWxpZGF0b3IgPSBuZXcgQWp2KHRoaXMuY29uZmlnLmF0bGFzLnZhbGlkYXRvcilcbiAgICBhanZLZXl3b3Jkcyh0aGlzLnZhbGlkYXRvciwgdGhpcy5jb25maWcuYXRsYXMudmFsaWRhdG9yLmtleXdvcmRzKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVpcmUgYSBtb2R1bGUgYnkgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIHByb2plY3Qgcm9vdFxuICAgKlxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIGxvY2F0aW9uICAgICAgICAgIFRoZSBtb2R1bGUncyBsb2NhdGlvbiwgcmVsYXRpdmUgdG8gcm9vdFxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdGlvbnM/ICAgICAgICAgIE9wdGlvbnNcbiAgICogQHBhcmFtICAgICB7Qm9vbGVhbn0gICBvcHRpb25zLm9wdGlvbmFsICBJZiB0cnVlLCB3aWxsIG5vdCB0aHJvdyBpZiB0aGUgbW9kdWxlIGRvZXMgbm90IGV4aXN0XG4gICAqIEBwYXJhbSAgICAge0Jvb2xlYW59ICAgb3B0aW9ucy5ub3JtYWxpc2UgSWYgdHJ1ZSwgaXQgd2lsbCBwcmVmZXIgdGhlIEVTIG1vZHVsZXMnIGRlZmF1bHQgZXhwb3J0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlciBuYW1lZCBleHBvcnRzIG9yIHRoZSBDb21tb25KUyBleHBvcnRzXG4gICAqIEBwYXJhbSAgICAge0Jvb2xlYW59ICAgb3B0aW9ucy5hYnNvbHV0ZSAgSWYgdHJ1ZSwgd2lsbCB0cnkgdG8gbG9hZCB0aGUgbW9kdWxlIHdpdGhvdXRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZpbmcgdGhlIG1vZHVsZSdzIG5hbWUgdG8gdGhlIHByb2plY3Qgcm9vdCAoaXRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGxvYWQgdGhlIG1vZHVsZSB1c2luZyBzdGFuZGFyZCBOb2RlJ3MgbWVjaGFuaXNtKVxuICAgKiBAcmV0dXJuICAgIHttaXhlZH0gICAgICAgICAgICAgICAgICAgICAgIFRoZSBtb2R1bGUncyBjb250ZW50c1xuICAgKi9cbiAgcmVxdWlyZShsb2NhdGlvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbG9jYXRpb24gPSBvcHRpb25zLmFic29sdXRlXG4gICAgICA/IGxvY2F0aW9uXG4gICAgICA6IHBhdGgucmVzb2x2ZSh0aGlzLnJvb3QsIGxvY2F0aW9uKVxuXG4gICAgY29uc3QgbG9hZCA9IG9wdGlvbnMub3B0aW9uYWxcbiAgICAgID8gb3B0cmVxdWlyZVxuICAgICAgOiByZXF1aXJlXG4gICAgY29uc3QgY29udGVudHMgPSBsb2FkKGxvY2F0aW9uKVxuXG4gICAgcmV0dXJuIG9wdGlvbnMubm9ybWFsaXNlICYmIGlzUGxhaW5PYmplY3QoY29udGVudHMuZGVmYXVsdClcbiAgICAgID8gY29udGVudHMuZGVmYXVsdFxuICAgICAgOiBjb250ZW50c1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgc2VydmljZSBpbnRvIHRoaXMgaW5zdGFuY2Ugb2YgQXRsYXMgd2l0aCB0aGUgZ2l2ZW4gYWxpYXNcbiAgICpcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBhbGlhcyAgICAgICAgICAgVGhlIGFsaWFzIGZvciB0aGUgc2VydmljZSAtIGl0IHdpbGwgYmUgdXNlZCBmb3IgZXhwb3NpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNlcnZpY2UncyBBUEkgb24gdGhlIGF0bGFzLnNlcnZpY2VzIG9iamVjdCBhbmQgZm9yXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NpbmcgY29uZmlndXJhdGlvbiBkYXRhIHRvIGl0XG4gICAqIEBwYXJhbSAgICAge2NsYXNzfSAgICAgQ29tcG9uZW50ICAgICAgIFRoZSBzZXJ2aWNlIGNsYXNzXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cyAgICAgICAgICAgIFJ1bnRpbWUgb3B0aW9ucyBmb3IgdGhlIHNlcnZpY2VcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRzLmFsaWFzZXMgICAgQmluZGluZ3MgdG8gb3RoZXIgZGVmaW5lZCBjb21wb25lbnRzXG4gICAqIEByZXR1cm4gICAge3RoaXN9XG4gICAqL1xuICBzZXJ2aWNlKGFsaWFzLCBDb21wb25lbnQsIG9wdHMgPSB7fSkge1xuICAgIHRoaXM6OmNvbXBvbmVudCh7XG4gICAgICB0eXBlOiAnc2VydmljZScsXG4gICAgICBhbGlhcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIGFsaWFzZXM6IG9wdHMuYWxpYXNlcyxcbiAgICB9LCB0aGlzLiNjYXRhbG9nLnNlcnZpY2VzKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGhvb2sgaW50byB0aGlzIGluc3RhbmNlIG9mIEF0bGFzIHdpdGggdGhlIGdpdmVuIGFsaWFzXG4gICAqXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgYWxpYXMgICAgICAgICAgIFRoZSBhbGlhcyBmb3IgdGhlIGhvb2sgLSBpdCB3aWxsIGJlIHVzZWQgZm9yIHBhc3NpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBkYXRhIHRvIGl0XG4gICAqIEBwYXJhbSAgICAge2NsYXNzfSAgICAgQ29tcG9uZW50ICAgICAgIFRoZSBob29rIGNsYXNzXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cyAgICAgICAgICAgIFJ1bnRpbWUgb3B0aW9ucyBmb3IgdGhlIGhvb2tcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRzLmFsaWFzZXMgICAgQmluZGluZ3MgdG8gb3RoZXIgZGVmaW5lZCBjb21wb25lbnRzXG4gICAqIEByZXR1cm4gICAge3RoaXN9XG4gICAqL1xuICBob29rKGFsaWFzLCBDb21wb25lbnQsIG9wdHMgPSB7fSkge1xuICAgIHRoaXM6OmNvbXBvbmVudCh7XG4gICAgICB0eXBlOiAnaG9vaycsXG4gICAgICBhbGlhcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIGFsaWFzZXM6IG9wdHMuYWxpYXNlcyxcbiAgICB9LCB0aGlzLiNjYXRhbG9nLmhvb2tzKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhbiBhY3Rpb24gaW50byB0aGlzIGluc3RhbmNlIG9mIEF0bGFzIHdpdGggdGhlIGdpdmVuIGFsaWFzXG4gICAqXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgYWxpYXMgICAgICAgICAgIFRoZSBhbGlhcyBmb3IgdGhlIGFjdGlvbiAtIGl0IHdpbGwgYmUgdXNlZCBmb3IgZXhwb3NpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFjdGlvbidzIEFQSSBvbiB0aGUgYXRsYXMuYWN0aW9ucyBvYmplY3QgYW5kIGZvclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzaW5nIGNvbmZpZ3VyYXRpb24gZGF0YSB0byBpdFxuICAgKiBAcGFyYW0gICAgIHtjbGFzc30gICAgIENvbXBvbmVudCAgICAgICBUaGUgYWN0aW9uIGNsYXNzXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cyAgICAgICAgICAgIFJ1bnRpbWUgb3B0aW9ucyBmb3IgdGhlIGFjdGlvblxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdHMuYWxpYXNlcyAgICBCaW5kaW5ncyB0byBvdGhlciBkZWZpbmVkIGNvbXBvbmVudHNcbiAgICogQHJldHVybiAgICB7dGhpc31cbiAgICovXG4gIGFjdGlvbihhbGlhcywgQ29tcG9uZW50LCBvcHRzID0ge30pIHtcbiAgICB0aGlzOjpjb21wb25lbnQoe1xuICAgICAgdHlwZTogJ2FjdGlvbicsXG4gICAgICBhbGlhcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIGFsaWFzZXM6IG9wdHMuYWxpYXNlcyxcbiAgICB9LCB0aGlzLiNjYXRhbG9nLmFjdGlvbnMpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmUgYWxsIHNlcnZpY2VzIGFuZCBob29rcyBmb3IgdXNlXG4gICAqXG4gICAqIEdlbmVyYWxseSB5b3Ugc2hvdWxkIHVzZSBgYXRsYXMuc3RhcnQoKWAgaW5zdGVhZCB0byBnZXQgeW91ciBpbnN0YW5jZSB1cCBhbmQgcnVubmluZy4gSG93ZXZlcixcbiAgICogc29tZXRpbWVzIGl0IGlzIG5lY2Vzc2FyeSB0byBnZXQgYWxsIHRoZSBzZXJ2aWNlcyBpbnRvIGEgXCJnZXQtcmVhZHlcIiBzdGF0ZSBiZWZvcmUgdGhleSBzdGFydFxuICAgKiBjb25uZWN0aW5nIHRvIHJlbW90ZSByZXNvdXJjZXMgb3IgZG9pbmcgYW55IGludGVuc2l2ZSBJL08gb3BlcmF0aW9ucy5cbiAgICpcbiAgICogQHJldHVybiAgICB7UHJvbWlzZTx0aGlzPn1cbiAgICovXG4gIGFzeW5jIHByZXBhcmUoKSB7XG4gICAgaWYgKHRoaXMucHJlcGFyZWQpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgY29uc3QgY2F0YWxvZyA9IHRoaXMuI2NhdGFsb2dcbiAgICBjb25zdCB7IHNlcnZpY2VzLCBhY3Rpb25zLCBob29rcyB9ID0gY2F0YWxvZ1xuXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIGNvbnRhaW5lcl0gb2YgaG9va3MpIHtcbiAgICAgIGlmICghY29udGFpbmVyLkNvbXBvbmVudC5vYnNlcnZlcykge1xuICAgICAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoYEhvb2sgJHthbGlhc30gZG9lcyBub3QgaGF2ZSBzdGF0aWMgJ29ic2VydmVzJyBwcm9wZXJ0eWApXG4gICAgICB9XG5cbiAgICAgIC8vIFByZXBhcmUgb2JzZXJ2ZXJzIG9mIEF0bGFzIGl0c2VsZlxuICAgICAgaWYgKGNvbnRhaW5lci5Db21wb25lbnQub2JzZXJ2ZXMgPT09ICdhdGxhcycpIHtcbiAgICAgICAgdGhpcy4jb2JzZXJ2ZXJzLnNldChhbGlhcywgY29udGFpbmVyKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgaG9va3NcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbLi4uaG9va3NdLm1hcCgoWywgY29udGFpbmVyXSkgPT4gY29udGFpbmVyLnByZXBhcmUoeyBjYXRhbG9nIH0pKSlcblxuICAgIC8vIFByZXBhcmUgYWN0aW9ucyBhbmQgc2VydmljZXMgaW4gcGFyYWxsZWwg8J+agFxuICAgIHZvaWQgKGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIC4uLkFycmF5LmZyb20oYWN0aW9ucykubWFwKGFzeW5jIChbYWxpYXMsIGNvbnRhaW5lcl0pID0+ICh7XG4gICAgICAgIGV4cG9zZTogY29udGFpbmVyLkNvbXBvbmVudC5pbnRlcm5hbCA/IGZhbHNlIDogJ2FjdGlvbnMnLFxuICAgICAgICB2YWx1ZTogYXdhaXQgY29udGFpbmVyLnByZXBhcmUoeyBjYXRhbG9nLCBob29rcyB9KSxcbiAgICAgICAgYWxpYXMsXG4gICAgICB9KSksXG4gICAgICAuLi5BcnJheS5mcm9tKHNlcnZpY2VzKS5tYXAoYXN5bmMgKFthbGlhcywgY29udGFpbmVyXSkgPT4gKHtcbiAgICAgICAgZXhwb3NlOiBjb250YWluZXIuQ29tcG9uZW50LmludGVybmFsID8gZmFsc2UgOiAnc2VydmljZXMnLFxuICAgICAgICB2YWx1ZTogYXdhaXQgY29udGFpbmVyLnByZXBhcmUoeyBjYXRhbG9nLCBob29rcyB9KSxcbiAgICAgICAgYWxpYXMsXG4gICAgICB9KSksXG4gICAgXSkpXG4gICAgICAuZmlsdGVyKHJlc3VsdCA9PiBCb29sZWFuKHJlc3VsdC5leHBvc2UpKVxuICAgICAgLmZvckVhY2gocmVzdWx0ID0+IHRoaXM6OmV4cG9zZShyZXN1bHQuZXhwb3NlLCByZXN1bHQuYWxpYXMsIHJlc3VsdC52YWx1ZSkpXG5cbiAgICB0aGlzLiNwcmVwYXJlZCA9IHRydWVcbiAgICBhd2FpdCB0aGlzLiNvYnNlcnZlcnM6OmRpc3BhdGNoKCdhZnRlclByZXBhcmUnLCB0aGlzKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhbGwgc2VydmljZXNcbiAgICpcbiAgICogQHJldHVybiAgICB7UHJvbWlzZTx0aGlzPn1cbiAgICovXG4gIGFzeW5jIHN0YXJ0KCkge1xuICAgIGNvbnN0IHsgYWN0aW9ucywgc2VydmljZXMsIGhvb2tzIH0gPSB0aGlzLiNjYXRhbG9nXG5cbiAgICBhd2FpdCB0aGlzLnByZXBhcmUoKVxuICAgIGF3YWl0IHRoaXMuI29ic2VydmVyczo6ZGlzcGF0Y2goJ2JlZm9yZVN0YXJ0JywgdGhpcylcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIC4uLkFycmF5LmZyb20oaG9va3MpLFxuICAgICAgLi4uQXJyYXkuZnJvbShhY3Rpb25zKSxcbiAgICBdLm1hcCgoWywgY29udGFpbmVyXSkgPT4gY29udGFpbmVyLnN0YXJ0KCkpKVxuXG4gICAgLy8gU3RhcnQgYWxsIHNlcnZpY2VzLCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGFkZGVkIHRvIHRoZSBpbnN0YW5jZSDwn5KqXG4gICAgLy8gT3JkZXJpbmcgaXMgaW1wb3J0YW50IGhlcmUhIFNvbWUgc2VydmljZXMgc2hvdWxkIGJlIHN0YXJ0ZWQgYXMgdGhlIGxhc3Qgb25lcyBiZWNhdXNlIHRoZXlcbiAgICAvLyBleHBvc2Ugc29tZSBmdW5jdGlvbmFsaXR5IHRvIHRoZSBvdXRzaWRlIHdvcmxkIGFuZCBzdGFydGluZyB0aG9zZSBiZWZvcmUgaWUuIGEgZGF0YWJhc2VcbiAgICAvLyBzZXJ2aWNlIGlzIHN0YXJ0ZWQgbWlnaHQgYnJlYWsgc3R1ZmYhXG4gICAgZm9yIChjb25zdCBbLCBjb250YWluZXJdIG9mIHNlcnZpY2VzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjb250YWluZXIuc3RhcnQoeyBob29rcyB9KVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIFJvbGwgYmFja1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3AoKVxuICAgICAgICAgIC8vIFNoaXQganVzdCBnb3Qgc2VyaW91cyDwn5ixXG4gICAgICAgICAgLmNhdGNoKHN0b3BFcnIgPT4gdm9pZCB0aGlzLmxvZy5mYXRhbCh7IGVycjogc3RvcEVyciB9LCAnYXRsYXM6c3RhcnQ6cm9sbGJhY2stZmFpbHVyZScpKVxuXG4gICAgICAgIC8vIFJlLXRocm93IHRoZSBvcmlnaW5hbCBlcnJvciB3aGljaCBjYXVzZWQgQXRsYXMgdG8gZmFpbCB0byBzdGFydFxuICAgICAgICB0aHJvdyBlcnJcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNzdGFydGVkID0gdHJ1ZVxuICAgIGF3YWl0IHRoaXMuI29ic2VydmVyczo6ZGlzcGF0Y2goJ2FmdGVyU3RhcnQnLCB0aGlzKVxuICAgIHRoaXMubG9nLmluZm8oeyBlbnY6IHRoaXMuZW52IH0sICdhdGxhczpyZWFkeScpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3AgYWxsIHNlcnZpY2VzLCB1bnJlZ2lzdGVyIGFsbCBhY3Rpb25zIGFuZCBob29rcyBhbmQgdW5wdWJsaXNoIGFueSBBUElzIGV4cG9zZWQgYnkgdGhlbVxuICAgKlxuICAgKiBUaGlzIHB1dHMgdGhlIHdob2xlIGFwcGxpY2F0aW9uIGludG8gYSBzdGF0ZSBhcyBpdCB3YXMgYmVmb3JlIGBhdGxhcy5wcmVwYXJlKClgIGFuZC9vclxuICAgKiBgYXRsYXMuc3RhcnQoKWAgd2FzIGNhbGxlZC5cbiAgICpcbiAgICogQHJldHVybiAgICB7UHJvbWlzZTx0aGlzPn1cbiAgICovXG4gIGFzeW5jIHN0b3AoKSB7XG4gICAgY29uc3QgeyBzZXJ2aWNlcywgYWN0aW9ucywgaG9va3MgfSA9IHRoaXMuI2NhdGFsb2dcblxuICAgIGF3YWl0IHRoaXMuI29ic2VydmVyczo6ZGlzcGF0Y2goJ2JlZm9yZVN0b3AnLCB0aGlzKVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgLi4uQXJyYXkuZnJvbShob29rcyksXG4gICAgICAuLi5BcnJheS5mcm9tKGFjdGlvbnMpLFxuICAgIF0ubWFwKChbLCBjb250YWluZXJdKSA9PiBjb250YWluZXIuc3RvcCgpKSlcblxuICAgIGxldCBlcnJvclxuXG4gICAgLy8gU3RvcCBhbGwgc2VydmljZXMsIGluIHRoZSByZXZlcnNlIG9yZGVyIHRoZXkgd2VyZSBhZGRlZCB0byB0aGUgaW5zdGFuY2Ug8J+SqlxuICAgIC8vIFRoaXMgd2lsbCBtYWtlIHN1cmUgdGhlIG1vc3QgaW1wb3J0YW50IHNlcnZpY2VzIGFyZSBzdG9wcGVkIGZpcnN0LlxuICAgIGZvciAoY29uc3QgW2FsaWFzLCBjb250YWluZXJdIG9mIEFycmF5LmZyb20oc2VydmljZXMpLnJldmVyc2UoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2VydmljZXNbYWxpYXNdXG4gICAgICAgIGF3YWl0IGNvbnRhaW5lci5zdG9wKHsgaG9va3MgfSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJvciA9IGVyclxuICAgICAgICAvLyBMZWF2ZSB0aGlzIHNlcnZpY2UgYXMgaXMgYW5kIG1vdmUgdG8gdGhlIG5leHQgc2VydmljZS4gV2UgcHJvYmFibHkgY2Fubm90IGRvIGFueXRoaW5nIHRvXG4gICAgICAgIC8vIHByb3Blcmx5IHN0b3AgdGhpcyBzZXJ2aWNlLiDwn5mBXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVW5yZWdpc3RlciBhY3Rpb25zXG4gICAgZm9yIChjb25zdCBbYWxpYXNdIG9mIGFjdGlvbnMpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGlvbnNbYWxpYXNdXG4gICAgfVxuXG4gICAgdGhpcy4jc3RhcnRlZCA9IGZhbHNlXG4gICAgdGhpcy4jcHJlcGFyZWQgPSBmYWxzZVxuXG4gICAgYXdhaXQgaG9va3M6OmRpc3BhdGNoKCdhZnRlclN0b3AnLCBudWxsKVxuICAgIHRoaXMubG9nLmluZm8oJ2F0bGFzOnN0b3BwZWQnKVxuXG4gICAgLy8gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHRocm93biBpbiBvbmUgb2YgdGhlIHNlcnZpY2VzIGR1cmluZyAuc3RvcCgpLCByZS10aHJvdyBpdCBub3dcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBdGxhc1xuIl19

@@ -16,3 +16,3 @@ "use strict";

function _classPrivateFieldGet(receiver, privateMap) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return privateMap.get(receiver).value; }
function _classPrivateFieldGet(receiver, privateMap) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } var descriptor = privateMap.get(receiver); if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }

@@ -76,3 +76,14 @@ class ComponentContainer {

if (!info.validator.validate(info.Component.config, config)) {
throw new _errors.ValidationError(info.validator.errors);
const err = new _errors.ValidationError(info.validator.errors, {
type: this.type,
alias: this.alias,
schema: info.Component.config,
config
});
atlas.log.error({
err,
errors: err.errors,
context: err.context
}, 'component validation error');
throw err;
}

@@ -251,2 +262,2 @@

exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudC1jb250YWluZXIubWpzIl0sIm5hbWVzIjpbIkNvbXBvbmVudENvbnRhaW5lciIsImNvbnN0cnVjdG9yIiwiaW5mbyIsImF0bGFzIiwiTWFwIiwidHlwZSIsImFsaWFzIiwiYWxpYXNlcyIsIkNvbXBvbmVudCIsIkZyYW1ld29ya0Vycm9yIiwicHJvdmlkZWQiLCJPYmplY3QiLCJrZXlzIiwicmVxdWlyZWQiLCJyZXF1aXJlcyIsIm9ic2VydmVzIiwicHVzaCIsIm1pc3NpbmciLCJleHRyYSIsImxlbmd0aCIsImpvaW4iLCJjb25maWciLCJkZWZhdWx0cyIsInZhbGlkYXRvciIsInZhbGlkYXRlIiwiVmFsaWRhdGlvbkVycm9yIiwiZXJyb3JzIiwibG9nIiwidHJhY2UiLCJjb21wb25lbnQiLCJjaGlsZCIsImRpc3BhdGNoIiwibmFtZSIsImhhcyIsImdldCIsImluc3RhbmNlIiwicHJlcGFyZSIsIm9wdGlvbnMiLCJta2NhdGFsb2ciLCJta29ic2VydmVycyIsImhvb2tzIiwic3RhcnQiLCJzdGFydGVkIiwiY2F0Y2giLCJlcnIiLCJlcnJvciIsInN0b3AiLCJjbGVhciIsIm9ic2VydmVycyIsImNvbnRhaW5lciIsInRhcmdldCIsInNldCIsImRlc3RpbmF0aW9uIiwiY2F0YWxvZyIsInJlc29sdmVkIiwiZW50cmllcyIsInNwbGl0Iiwic291cmNlIiwic2VydmljZXMiLCJhY3Rpb25zIiwiZGVwZW5kZW5jeSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUlBOztBQUlBOzs7Ozs7QUFPQSxNQUFNQSxrQkFBTixDQUF5QjtBQXlCdkJDLEVBQUFBLFdBQVcsQ0FBQ0MsSUFBRCxFQUFPQyxLQUFQLEVBQWM7QUFBQTs7QUFBQSxxQ0FwQmYsS0FvQmU7O0FBQUEsc0NBbEJkLElBa0JjOztBQUFBO0FBQUE7QUFBQSxhQWhCWixJQUFJQyxHQUFKO0FBZ0JZOztBQUFBO0FBQUE7QUFBQSxhQWZkLElBQUlBLEdBQUo7QUFlYzs7QUFDdkIsU0FB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QUFYLElBQWdDM0MsTUFBTSxDQUFDNEMsT0FBUCxDQUFlLEtBQUtoRCxPQUFwQixDQUFoQyxFQUE4RDtBQUM1RCxVQUFNLENBQUNGLElBQUQsSUFBU0MsS0FBSyxDQUFDa0QsS0FBTixDQUFZLEdBQVosQ0FBZjs7QUFDQSxVQUFNQyxNQUFNLEdBQUcsQ0FBQyxNQUFNO0FBQ3BCLGNBQVFwRCxJQUFSO0FBQ0UsYUFBSyxTQUFMO0FBQWdCLGlCQUFPZ0QsT0FBTyxDQUFDSyxRQUFmOztBQUNoQixhQUFLLFFBQUw7QUFBZSxpQkFBT0wsT0FBTyxDQUFDTSxPQUFmOztBQUNmO0FBQVMsZ0JBQU0sSUFBSWxELHNCQUFKLENBQW9CLDJCQUEwQkosSUFBSyxrQkFBaUJDLEtBQU0sRUFBMUUsQ0FBTjtBQUhYO0FBS0QsS0FOYyxHQUFmOztBQVFBLFVBQU1zRCxVQUFVLEdBQUdILE1BQU0sQ0FBQ3ZCLEdBQVAsQ0FBVyxLQUFLM0IsT0FBTCxDQUFhRCxLQUFiLENBQVgsQ0FBbkI7O0FBRUEsUUFBSSxDQUFDc0QsVUFBTCxFQUFpQjtBQUNmLFlBQU0sSUFBSW5ELHNCQUFKLENBQW9CLGtCQUFpQkosSUFBSyxJQUFHaUQsUUFBUyxlQUFjaEQsS0FBTSxFQUExRSxDQUFOO0FBQ0Q7O0FBRUQ4QyxJQUFBQSxXQUFXLENBQUNELEdBQVosQ0FBZ0I3QyxLQUFoQixFQUF1QnNELFVBQXZCO0FBQ0Q7QUFDRjs7ZUFFYzVELGtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRnJhbWV3b3JrRXJyb3IsXG4gIFZhbGlkYXRpb25FcnJvcixcbn0gZnJvbSAnQGF0bGFzLmpzL2Vycm9ycydcbmltcG9ydCB7XG4gIGRlZmF1bHRzRGVlcCBhcyBkZWZhdWx0cyxcbiAgZGlmZmVyZW5jZSxcbn0gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IGRpc3BhdGNoIGZyb20gJy4vZGlzcGF0Y2gnXG5cbi8qKlxuICogVGhpcyBjbGFzcyBob2xkcyBhbmQgbWFuYWdlcyBhIGNvbXBvbmVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENvbXBvbmVudENvbnRhaW5lciB7XG4gIC8qKlxuICAgKiBJcyB0aGlzIGNvbXBvbmVudCBhbHJlYWR5IHN0YXJ0ZWQ/XG4gICAqIEB0eXBlICAgIHtCb29sZWFufVxuICAgKi9cbiAgc3RhcnRlZCA9IGZhbHNlXG5cbiAgaW5zdGFuY2UgPSBudWxsXG5cbiAgI29ic2VydmVycyA9IG5ldyBNYXAoKVxuICAjY2F0YWxvZyA9IG5ldyBNYXAoKVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgbmV3IGNvbnRhaW5lciBmb3IgYSBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICAgICAgaW5mbyAgICAgICAgICAgICAgQ29tcG9uZW50IGluZm9ybWF0aW9uXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICAgIGluZm8udHlwZSAgICAgICAgIFRoZSBjb21wb25lbnQncyB0eXBlIChzZXJ2aWNlLCBob29rLCBhY3Rpb24pXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICAgIGluZm8uYWxpYXMgICAgICAgIFRoZSBjb21wb25lbnQncyB1c2VyLXNwZWNpZmllZCBuYW1lL2FsaWFzXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgICAgIGluZm8uYWxpYXNlcyAgICAgIEJpbmRpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgdXNlciB0byBsb2NhdGUgb3RoZXJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50c1xuICAgKiBAcGFyYW0gICAgIHtDbGFzc30gICAgICAgICBpbmZvLkNvbXBvbmVudCAgICBUaGUgY29tcG9uZW50IGNsYXNzXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgICAgIGluZm8uY29uZmlnICAgICAgIFRoZSBjb21wb25lbnQncyB1c2VyLXNwZWNpZmllZCBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSAgICAge0Fqdn0gICAgICAgICAgIGluZm8udmFsaWRhdG9yICAgIEEgSlNPTiBzY2hlbWEgdmFsaWRhdG9yIGluc3RhbmNlXG4gICAqIEBwYXJhbSAgICAge0F0bGFzfSAgICAgICAgIGF0bGFzICAgICAgICAgICAgIFRoZSBBdGxhcyBpbnN0YW5jZVxuICAgKi9cbiAgY29uc3RydWN0b3IoaW5mbywgYXRsYXMpIHtcbiAgICB0aGlzLnR5cGUgPSBpbmZvLnR5cGVcbiAgICB0aGlzLmFsaWFzID0gaW5mby5hbGlhc1xuICAgIHRoaXMuYWxpYXNlcyA9IGluZm8uYWxpYXNlcyB8fCB7fVxuICAgIHRoaXMuQ29tcG9uZW50ID0gaW5mby5Db21wb25lbnRcblxuICAgIGlmICh0eXBlb2YgdGhpcy5Db21wb25lbnQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgdGhpcy5Db21wb25lbnRcbiAgICAgIHRocm93IG5ldyBGcmFtZXdvcmtFcnJvcihgQ29tcG9uZW50ICR7dGhpcy50eXBlfToke3RoaXMuYWxpYXN9IG11c3QgYmUgY2xhc3MsIG5vdCAke3R5cGV9YClcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgY29tcG9uZW50IHJlY2VpdmVkIGFsbCB0aGUgYWxpYXNlcyBpdCByZXF1aXJlc1xuICAgIGNvbnN0IGFsaWFzZXMgPSB7XG4gICAgICBwcm92aWRlZDogT2JqZWN0LmtleXModGhpcy5hbGlhc2VzKSxcbiAgICAgIC8vIENvcHkgdGhlIGNvbnRlbnRzIHRvIGF2b2lkIHRoZWlyIGZ1dHVyZSBtb2RpZmljYXRpb25cbiAgICAgIHJlcXVpcmVkOiBbLi4udGhpcy5Db21wb25lbnQucmVxdWlyZXMgfHwgW11dLFxuICAgIH1cblxuICAgIGlmICh0aGlzLnR5cGUgPT09ICdob29rJykge1xuICAgICAgLy8gUmVxdWlyZSBvYnNlcnZlZCBjb21wb25lbnRzIHRvIGJlIHJlc29sdmVkIHZpYSBhbGlhc1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLkNvbXBvbmVudC5vYnNlcnZlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgYWxpYXNlcy5yZXF1aXJlZC5wdXNoKHRoaXMuQ29tcG9uZW50Lm9ic2VydmVzKVxuICAgICAgfVxuXG4gICAgICAvLyBEbyBub3QgcmVxdWlyZSBhdGxhcyB0byBiZSBsaXN0ZWQgaW4gYWxpYXNlcyAtIHdlIGNhbiByZXNvbHZlIGl0IGF1dG9tYXRpY2FsbHlcbiAgICAgIGlmICh0aGlzLkNvbXBvbmVudC5vYnNlcnZlcyA9PT0gJ2F0bGFzJykge1xuICAgICAgICBhbGlhc2VzLnByb3ZpZGVkLnB1c2goJ2F0bGFzJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtaXNzaW5nID0gZGlmZmVyZW5jZShhbGlhc2VzLnJlcXVpcmVkLCBhbGlhc2VzLnByb3ZpZGVkKVxuICAgIGNvbnN0IGV4dHJhID0gZGlmZmVyZW5jZShhbGlhc2VzLnByb3ZpZGVkLCBhbGlhc2VzLnJlcXVpcmVkKVxuXG4gICAgaWYgKG1pc3NpbmcubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoYE1pc3NpbmcgYWxpYXNlcyBmb3IgY29tcG9uZW50ICR7dGhpcy5hbGlhc306ICR7bWlzc2luZy5qb2luKCcsICcpfWApXG4gICAgfVxuXG4gICAgaWYgKGV4dHJhLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEZyYW1ld29ya0Vycm9yKGBVbm5lZWRlZCBhbGlhc2VzIGZvciBjb21wb25lbnQgJHt0aGlzLmFsaWFzfTogJHtleHRyYS5qb2luKCcsICcpfWApXG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnID0gZGVmYXVsdHMoaW5mby5jb25maWcsIHRoaXMuQ29tcG9uZW50LmRlZmF1bHRzKVxuXG4gICAgaWYgKCFpbmZvLnZhbGlkYXRvci52YWxpZGF0ZShpbmZvLkNvbXBvbmVudC5jb25maWcsIGNvbmZpZykpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoaW5mby52YWxpZGF0b3IuZXJyb3JzKVxuICAgIH1cblxuICAgIGF0bGFzLmxvZy50cmFjZSh7XG4gICAgICBjb21wb25lbnQ6IHRoaXMuYWxpYXMsXG4gICAgICBjb25maWc6IGluZm8uY29uZmlnLFxuICAgICAgZGVmYXVsdHM6IHRoaXMuQ29tcG9uZW50LmRlZmF1bHRzLFxuICAgIH0sICdjb21wb25lbnQ6Y29uZmlnJylcblxuICAgIHRoaXMuY29tcG9uZW50ID0gbmV3IHRoaXMuQ29tcG9uZW50KHtcbiAgICAgIGF0bGFzLFxuICAgICAgY29uZmlnLFxuICAgICAgbG9nOiBhdGxhcy5sb2cuY2hpbGQoeyBbdGhpcy50eXBlXTogdGhpcy5hbGlhcyB9KSxcbiAgICAgIGRpc3BhdGNoOiB0aGlzLiNvYnNlcnZlcnM6OmRpc3BhdGNoLFxuICAgICAgY29tcG9uZW50OiBuYW1lID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLiNjYXRhbG9nLmhhcyhuYW1lKSkge1xuICAgICAgICAgIHRocm93IG5ldyBGcmFtZXdvcmtFcnJvcihgQWxpYXMgZm9yICR7bmFtZX0gbm90IGRlZmluZWRgKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuI2NhdGFsb2cuZ2V0KG5hbWUpLmluc3RhbmNlXG4gICAgICB9LFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZSB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgICAgICAgb3B0aW9ucyAgICAgICAgICAgSW5wdXQgb3B0aW9uc1xuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgICAgICAgIG9wdGlvbnMuY2F0YWxvZyAgIEF0bGFzIGNhdGFsb2cgb2YgYWxsIGNvbXBvbmVudHNcbiAgICogQHBhcmFtICAgICB7TWFwfSAgICAgICAgICAgICBvcHRpb25zLmhvb2tzICAgICBIb29rcyBhdmFpbGFibGUgaW4gdGhlIGFwcGxpY2F0aW9uXG4gICAqIEByZXR1cm4gICAge1Byb21pc2U8dGhpcz59XG4gICAqL1xuICBhc3luYyBwcmVwYXJlKG9wdGlvbnMpIHtcbiAgICB0aGlzOjpta2NhdGFsb2codGhpcy4jY2F0YWxvZywgb3B0aW9ucylcbiAgICB0aGlzOjpta29ic2VydmVycyh0aGlzLiNvYnNlcnZlcnMsIHsgaG9va3M6IG9wdGlvbnMuaG9va3MgfSlcblxuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICBjYXNlICdzZXJ2aWNlJzoge1xuICAgICAgICB0aGlzLmNvbXBvbmVudC5sb2cudHJhY2UoJ3ByZXBhcmU6YmVmb3JlJylcbiAgICAgICAgdGhpcy5pbnN0YW5jZSA9IGF3YWl0IHRoaXMuY29tcG9uZW50LnByZXBhcmUoKVxuICAgICAgICBhd2FpdCB0aGlzLiNvYnNlcnZlcnM6OmRpc3BhdGNoKCdhZnRlclByZXBhcmUnLCB0aGlzLmluc3RhbmNlKVxuICAgICAgICB0aGlzLmNvbXBvbmVudC5sb2cudHJhY2UoJ3ByZXBhcmU6YWZ0ZXInKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAnaG9vayc6XG4gICAgICBjYXNlICdhY3Rpb24nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5pbnN0YW5jZSA9IHRoaXMuY29tcG9uZW50XG4gICAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW5zdGFuY2VcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEByZXR1cm4gICAge1Byb21pc2U8dGhpcy5jb21wb25lbnQ+fVxuICAgKi9cbiAgYXN5bmMgc3RhcnQoKSB7XG4gICAgaWYgKHRoaXMuc3RhcnRlZCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50XG4gICAgfVxuXG4gICAgdGhpcy5jb21wb25lbnQubG9nLnRyYWNlKCdzdGFydDpiZWZvcmUnKVxuXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3NlcnZpY2UnOlxuICAgICAgICBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHRoaXMuI29ic2VydmVyczo6ZGlzcGF0Y2goJ2JlZm9yZVN0YXJ0JywgdGhpcy5pbnN0YW5jZSlcbiAgICAgICAgICBhd2FpdCB0aGlzLmNvbXBvbmVudC5zdGFydCh0aGlzLmluc3RhbmNlKVxuICAgICAgICAgIGF3YWl0IHRoaXMuI29ic2VydmVyczo6ZGlzcGF0Y2goJ2FmdGVyU3RhcnQnLCB0aGlzLmluc3RhbmNlKVxuICAgICAgICB9KSgpXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudC5sb2cuZXJyb3IoeyBlcnIgfSwgJ3N0YXJ0OmZhaWx1cmUnKVxuICAgICAgICAgICAgdGhyb3cgZXJyXG4gICAgICAgICAgfSlcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnaG9vayc6XG4gICAgICBjYXNlICdhY3Rpb24nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBvbmVudC5sb2cudHJhY2UoJ3N0YXJ0OmFmdGVyJylcbiAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlXG5cbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHRoaXMgY29tcG9uZW50IGFuZCBjbGVhbiB1cCBhbGwgYXNzb2NpYXRlZCByZXNvdXJjZXNcbiAgICpcbiAgICogQHJldHVybiAgICB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHN0b3AoKSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuY29tcG9uZW50LmxvZy50cmFjZSgnc3RvcDpiZWZvcmUnKVxuXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3NlcnZpY2UnOlxuICAgICAgICBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHRoaXMuI29ic2VydmVyczo6ZGlzcGF0Y2goJ2JlZm9yZVN0b3AnLCB0aGlzLmluc3RhbmNlKVxuICAgICAgICAgIGF3YWl0IHRoaXMuY29tcG9uZW50LnN0b3AodGhpcy5pbnN0YW5jZSlcbiAgICAgICAgICBhd2FpdCB0aGlzLiNvYnNlcnZlcnM6OmRpc3BhdGNoKCdhZnRlclN0b3AnLCBudWxsKVxuICAgICAgICB9KSgpXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudC5sb2cuZXJyb3IoeyBlcnIgfSwgJ3N0b3A6ZmFpbHVyZScpXG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlXG4gICAgICAgICAgICB0aHJvdyBlcnJcbiAgICAgICAgICB9KVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdob29rJzpcbiAgICAgIGNhc2UgJ2FjdGlvbic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVha1xuICAgIH1cblxuICAgIHRoaXMuI29ic2VydmVycy5jbGVhcigpXG4gICAgdGhpcy4jY2F0YWxvZy5jbGVhcigpXG4gICAgdGhpcy5pbnN0YW5jZSA9IG51bGxcbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogRmluZCBhbGwgaG9va3Mgd2hpY2ggd2FudCB0byBvYnNlcnZlIHRoaXMgY29tcG9uZW50J3MgZXZlbnRzXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAgICAge01hcH0gICAgICAgICBvYnNlcnZlcnMgICAgIFRoZSBvYnNlcnZlcnMgdG8gY2hlY2tcbiAqIEBwYXJhbSAgICAge09iamVjdH0gICAgICBvcHRzICAgICAgICAgIEZ1bmN0aW9uIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSAgICAge01hcH0gICAgICAgICBvcHRzLmhvb2tzICAgIEFsbCBob29rcyBrbm93biB0byBBdGxhc1xuICogQHJldHVybiAgICB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gbWtvYnNlcnZlcnMob2JzZXJ2ZXJzLCB7IGhvb2tzIH0pIHtcbiAgZm9yIChjb25zdCBbYWxpYXMsIGNvbnRhaW5lcl0gb2YgaG9va3MgfHwgbmV3IE1hcCgpKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gY29udGFpbmVyLmFsaWFzZXNbY29udGFpbmVyLkNvbXBvbmVudC5vYnNlcnZlc11cblxuICAgIGlmICh0aGlzLmFsaWFzID09PSB0YXJnZXQpIHtcbiAgICAgIG9ic2VydmVycy5zZXQoYWxpYXMsIGNvbnRhaW5lcilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWtjYXRhbG9nKGRlc3RpbmF0aW9uLCB7IGNhdGFsb2cgfSkge1xuICBmb3IgKGNvbnN0IFthbGlhcywgcmVzb2x2ZWRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuYWxpYXNlcykpIHtcbiAgICBjb25zdCBbdHlwZV0gPSBhbGlhcy5zcGxpdCgnOicpXG4gICAgY29uc3Qgc291cmNlID0gKCgpID0+IHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdzZXJ2aWNlJzogcmV0dXJuIGNhdGFsb2cuc2VydmljZXNcbiAgICAgICAgY2FzZSAnYWN0aW9uJzogcmV0dXJuIGNhdGFsb2cuYWN0aW9uc1xuICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoYEludmFsaWQgY29tcG9uZW50IHR5cGU6ICR7dHlwZX0gdXNlZCBpbiBhbGlhcyAke2FsaWFzfWApXG4gICAgICB9XG4gICAgfSkoKVxuXG4gICAgY29uc3QgZGVwZW5kZW5jeSA9IHNvdXJjZS5nZXQodGhpcy5hbGlhc2VzW2FsaWFzXSlcblxuICAgIGlmICghZGVwZW5kZW5jeSkge1xuICAgICAgdGhyb3cgbmV3IEZyYW1ld29ya0Vycm9yKGBVbmFibGUgdG8gZmluZCAke3R5cGV9ICR7cmVzb2x2ZWR9IGFsaWFzZWQgYXMgJHthbGlhc31gKVxuICAgIH1cblxuICAgIGRlc3RpbmF0aW9uLnNldChhbGlhcywgZGVwZW5kZW5jeSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnRDb250YWluZXJcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudC1jb250YWluZXIubWpzIl0sIm5hbWVzIjpbIkNvbXBvbmVudENvbnRhaW5lciIsImNvbnN0cnVjdG9yIiwiaW5mbyIsImF0bGFzIiwiTWFwIiwidHlwZSIsImFsaWFzIiwiYWxpYXNlcyIsIkNvbXBvbmVudCIsIkZyYW1ld29ya0Vycm9yIiwicHJvdmlkZWQiLCJPYmplY3QiLCJrZXlzIiwicmVxdWlyZWQiLCJyZXF1aXJlcyIsIm9ic2VydmVzIiwicHVzaCIsIm1pc3NpbmciLCJleHRyYSIsImxlbmd0aCIsImpvaW4iLCJjb25maWciLCJkZWZhdWx0cyIsInZhbGlkYXRvciIsInZhbGlkYXRlIiwiZXJyIiwiVmFsaWRhdGlvbkVycm9yIiwiZXJyb3JzIiwic2NoZW1hIiwibG9nIiwiZXJyb3IiLCJjb250ZXh0IiwidHJhY2UiLCJjb21wb25lbnQiLCJjaGlsZCIsImRpc3BhdGNoIiwibmFtZSIsImhhcyIsImdldCIsImluc3RhbmNlIiwicHJlcGFyZSIsIm9wdGlvbnMiLCJta2NhdGFsb2ciLCJta29ic2VydmVycyIsImhvb2tzIiwic3RhcnQiLCJzdGFydGVkIiwiY2F0Y2giLCJzdG9wIiwiY2xlYXIiLCJvYnNlcnZlcnMiLCJjb250YWluZXIiLCJ0YXJnZXQiLCJzZXQiLCJkZXN0aW5hdGlvbiIsImNhdGFsb2ciLCJyZXNvbHZlZCIsImVudHJpZXMiLCJzcGxpdCIsInNvdXJjZSIsInNlcnZpY2VzIiwiYWN0aW9ucyIsImRlcGVuZGVuY3kiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFJQTs7QUFJQTs7Ozs7O0FBT0EsTUFBTUEsa0JBQU4sQ0FBeUI7QUF5QnZCQyxFQUFBQSxXQUFXLENBQUNDLElBQUQsRUFBT0MsS0FBUCxFQUFjO0FBQUE7O0FBQUEscUNBcEJmLEtBb0JlOztBQUFBLHNDQWxCZCxJQWtCYzs7QUFBQTtBQUFBO0FBQUEsYUFoQlosSUFBSUMsR0FBSjtBQWdCWTs7QUFBQTtBQUFBO0FBQUEsYUFmZCxJQUFJQSxH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QUFDRDs7QUFFRGdELElBQUFBLFdBQVcsQ0FBQ0QsR0FBWixDQUFnQi9DLEtBQWhCLEVBQXVCd0QsVUFBdkI7QUFDRDtBQUNGOztlQUVjOUQsa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBGcmFtZXdvcmtFcnJvcixcbiAgVmFsaWRhdGlvbkVycm9yLFxufSBmcm9tICdAYXRsYXMuanMvZXJyb3JzJ1xuaW1wb3J0IHtcbiAgZGVmYXVsdHNEZWVwIGFzIGRlZmF1bHRzLFxuICBkaWZmZXJlbmNlLFxufSBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgZGlzcGF0Y2ggZnJvbSAnLi9kaXNwYXRjaCdcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGhvbGRzIGFuZCBtYW5hZ2VzIGEgY29tcG9uZW50XG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgQ29tcG9uZW50Q29udGFpbmVyIHtcbiAgLyoqXG4gICAqIElzIHRoaXMgY29tcG9uZW50IGFscmVhZHkgc3RhcnRlZD9cbiAgICogQHR5cGUgICAge0Jvb2xlYW59XG4gICAqL1xuICBzdGFydGVkID0gZmFsc2VcblxuICBpbnN0YW5jZSA9IG51bGxcblxuICAjb2JzZXJ2ZXJzID0gbmV3IE1hcCgpXG4gICNjYXRhbG9nID0gbmV3IE1hcCgpXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBuZXcgY29udGFpbmVyIGZvciBhIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgICAgICBpbmZvICAgICAgICAgICAgICBDb21wb25lbnQgaW5mb3JtYXRpb25cbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgICAgaW5mby50eXBlICAgICAgICAgVGhlIGNvbXBvbmVudCdzIHR5cGUgKHNlcnZpY2UsIGhvb2ssIGFjdGlvbilcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgICAgaW5mby5hbGlhcyAgICAgICAgVGhlIGNvbXBvbmVudCdzIHVzZXItc3BlY2lmaWVkIG5hbWUvYWxpYXNcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICAgICAgaW5mby5hbGlhc2VzICAgICAgQmluZGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSB1c2VyIHRvIGxvY2F0ZSBvdGhlclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzXG4gICAqIEBwYXJhbSAgICAge0NsYXNzfSAgICAgICAgIGluZm8uQ29tcG9uZW50ICAgIFRoZSBjb21wb25lbnQgY2xhc3NcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICAgICAgaW5mby5jb25maWcgICAgICAgVGhlIGNvbXBvbmVudCdzIHVzZXItc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb25cbiAgICogQHBhcmFtICAgICB7QWp2fSAgICAgICAgICAgaW5mby52YWxpZGF0b3IgICAgQSBKU09OIHNjaGVtYSB2YWxpZGF0b3IgaW5zdGFuY2VcbiAgICogQHBhcmFtICAgICB7QXRsYXN9ICAgICAgICAgYXRsYXMgICAgICAgICAgICAgVGhlIEF0bGFzIGluc3RhbmNlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihpbmZvLCBhdGxhcykge1xuICAgIHRoaXMudHlwZSA9IGluZm8udHlwZVxuICAgIHRoaXMuYWxpYXMgPSBpbmZvLmFsaWFzXG4gICAgdGhpcy5hbGlhc2VzID0gaW5mby5hbGlhc2VzIHx8IHt9XG4gICAgdGhpcy5Db21wb25lbnQgPSBpbmZvLkNvbXBvbmVudFxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLkNvbXBvbmVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiB0aGlzLkNvbXBvbmVudFxuICAgICAgdGhyb3cgbmV3IEZyYW1ld29ya0Vycm9yKGBDb21wb25lbnQgJHt0aGlzLnR5cGV9OiR7dGhpcy5hbGlhc30gbXVzdCBiZSBjbGFzcywgbm90ICR7dHlwZX1gKVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSBjb21wb25lbnQgcmVjZWl2ZWQgYWxsIHRoZSBhbGlhc2VzIGl0IHJlcXVpcmVzXG4gICAgY29uc3QgYWxpYXNlcyA9IHtcbiAgICAgIHByb3ZpZGVkOiBPYmplY3Qua2V5cyh0aGlzLmFsaWFzZXMpLFxuICAgICAgLy8gQ29weSB0aGUgY29udGVudHMgdG8gYXZvaWQgdGhlaXIgZnV0dXJlIG1vZGlmaWNhdGlvblxuICAgICAgcmVxdWlyZWQ6IFsuLi50aGlzLkNvbXBvbmVudC5yZXF1aXJlcyB8fCBbXV0sXG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ2hvb2snKSB7XG4gICAgICAvLyBSZXF1aXJlIG9ic2VydmVkIGNvbXBvbmVudHMgdG8gYmUgcmVzb2x2ZWQgdmlhIGFsaWFzXG4gICAgICBpZiAodHlwZW9mIHRoaXMuQ29tcG9uZW50Lm9ic2VydmVzID09PSAnc3RyaW5nJykge1xuICAgICAgICBhbGlhc2VzLnJlcXVpcmVkLnB1c2godGhpcy5Db21wb25lbnQub2JzZXJ2ZXMpXG4gICAgICB9XG5cbiAgICAgIC8vIERvIG5vdCByZXF1aXJlIGF0bGFzIHRvIGJlIGxpc3RlZCBpbiBhbGlhc2VzIC0gd2UgY2FuIHJlc29sdmUgaXQgYXV0b21hdGljYWxseVxuICAgICAgaWYgKHRoaXMuQ29tcG9uZW50Lm9ic2VydmVzID09PSAnYXRsYXMnKSB7XG4gICAgICAgIGFsaWFzZXMucHJvdmlkZWQucHVzaCgnYXRsYXMnKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1pc3NpbmcgPSBkaWZmZXJlbmNlKGFsaWFzZXMucmVxdWlyZWQsIGFsaWFzZXMucHJvdmlkZWQpXG4gICAgY29uc3QgZXh0cmEgPSBkaWZmZXJlbmNlKGFsaWFzZXMucHJvdmlkZWQsIGFsaWFzZXMucmVxdWlyZWQpXG5cbiAgICBpZiAobWlzc2luZy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBGcmFtZXdvcmtFcnJvcihgTWlzc2luZyBhbGlhc2VzIGZvciBjb21wb25lbnQgJHt0aGlzLmFsaWFzfTogJHttaXNzaW5nLmpvaW4oJywgJyl9YClcbiAgICB9XG5cbiAgICBpZiAoZXh0cmEubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoYFVubmVlZGVkIGFsaWFzZXMgZm9yIGNvbXBvbmVudCAke3RoaXMuYWxpYXN9OiAke2V4dHJhLmpvaW4oJywgJyl9YClcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWcgPSBkZWZhdWx0cyhpbmZvLmNvbmZpZywgdGhpcy5Db21wb25lbnQuZGVmYXVsdHMpXG5cbiAgICBpZiAoIWluZm8udmFsaWRhdG9yLnZhbGlkYXRlKGluZm8uQ29tcG9uZW50LmNvbmZpZywgY29uZmlnKSkge1xuICAgICAgY29uc3QgZXJyID0gbmV3IFZhbGlkYXRpb25FcnJvcihpbmZvLnZhbGlkYXRvci5lcnJvcnMsIHtcbiAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICBhbGlhczogdGhpcy5hbGlhcyxcbiAgICAgICAgc2NoZW1hOiBpbmZvLkNvbXBvbmVudC5jb25maWcsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgIH0pXG5cbiAgICAgIC8vIEZvciBiZXR0ZXIgZGV2ZWxvcGVyIGVyZ29ub21pY3MsIGFsc28gbG9nIHRoZSBlcnJvciBmb3IgZWFzeSBkaXNjb3ZlcmFiaWxpdHlcbiAgICAgIGF0bGFzLmxvZy5lcnJvcih7XG4gICAgICAgIGVycixcbiAgICAgICAgZXJyb3JzOiBlcnIuZXJyb3JzLFxuICAgICAgICBjb250ZXh0OiBlcnIuY29udGV4dCxcbiAgICAgIH0sICdjb21wb25lbnQgdmFsaWRhdGlvbiBlcnJvcicpXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICBhdGxhcy5sb2cudHJhY2Uoe1xuICAgICAgY29tcG9uZW50OiB0aGlzLmFsaWFzLFxuICAgICAgY29uZmlnOiBpbmZvLmNvbmZpZyxcbiAgICAgIGRlZmF1bHRzOiB0aGlzLkNvbXBvbmVudC5kZWZhdWx0cyxcbiAgICB9LCAnY29tcG9uZW50OmNvbmZpZycpXG5cbiAgICB0aGlzLmNvbXBvbmVudCA9IG5ldyB0aGlzLkNvbXBvbmVudCh7XG4gICAgICBhdGxhcyxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGxvZzogYXRsYXMubG9nLmNoaWxkKHsgW3RoaXMudHlwZV06IHRoaXMuYWxpYXMgfSksXG4gICAgICBkaXNwYXRjaDogdGhpcy4jb2JzZXJ2ZXJzOjpkaXNwYXRjaCxcbiAgICAgIGNvbXBvbmVudDogbmFtZSA9PiB7XG4gICAgICAgIGlmICghdGhpcy4jY2F0YWxvZy5oYXMobmFtZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoYEFsaWFzIGZvciAke25hbWV9IG5vdCBkZWZpbmVkYClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLiNjYXRhbG9nLmdldChuYW1lKS5pbnN0YW5jZVxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmUgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgICAgICAgIG9wdGlvbnMgICAgICAgICAgIElucHV0IG9wdGlvbnNcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICAgICAgICBvcHRpb25zLmNhdGFsb2cgICBBdGxhcyBjYXRhbG9nIG9mIGFsbCBjb21wb25lbnRzXG4gICAqIEBwYXJhbSAgICAge01hcH0gICAgICAgICAgICAgb3B0aW9ucy5ob29rcyAgICAgSG9va3MgYXZhaWxhYmxlIGluIHRoZSBhcHBsaWNhdGlvblxuICAgKiBAcmV0dXJuICAgIHtQcm9taXNlPHRoaXM+fVxuICAgKi9cbiAgYXN5bmMgcHJlcGFyZShvcHRpb25zKSB7XG4gICAgdGhpczo6bWtjYXRhbG9nKHRoaXMuI2NhdGFsb2csIG9wdGlvbnMpXG4gICAgdGhpczo6bWtvYnNlcnZlcnModGhpcy4jb2JzZXJ2ZXJzLCB7IGhvb2tzOiBvcHRpb25zLmhvb2tzIH0pXG5cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSAnc2VydmljZSc6IHtcbiAgICAgICAgdGhpcy5jb21wb25lbnQubG9nLnRyYWNlKCdwcmVwYXJlOmJlZm9yZScpXG4gICAgICAgIHRoaXMuaW5zdGFuY2UgPSBhd2FpdCB0aGlzLmNvbXBvbmVudC5wcmVwYXJlKClcbiAgICAgICAgYXdhaXQgdGhpcy4jb2JzZXJ2ZXJzOjpkaXNwYXRjaCgnYWZ0ZXJQcmVwYXJlJywgdGhpcy5pbnN0YW5jZSlcbiAgICAgICAgdGhpcy5jb21wb25lbnQubG9nLnRyYWNlKCdwcmVwYXJlOmFmdGVyJylcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2hvb2snOlxuICAgICAgY2FzZSAnYWN0aW9uJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuaW5zdGFuY2UgPSB0aGlzLmNvbXBvbmVudFxuICAgICAgICBicmVha1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmluc3RhbmNlXG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcmV0dXJuICAgIHtQcm9taXNlPHRoaXMuY29tcG9uZW50Pn1cbiAgICovXG4gIGFzeW5jIHN0YXJ0KCkge1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFxuICAgIH1cblxuICAgIHRoaXMuY29tcG9uZW50LmxvZy50cmFjZSgnc3RhcnQ6YmVmb3JlJylcblxuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICBjYXNlICdzZXJ2aWNlJzpcbiAgICAgICAgYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLiNvYnNlcnZlcnM6OmRpc3BhdGNoKCdiZWZvcmVTdGFydCcsIHRoaXMuaW5zdGFuY2UpXG4gICAgICAgICAgYXdhaXQgdGhpcy5jb21wb25lbnQuc3RhcnQodGhpcy5pbnN0YW5jZSlcbiAgICAgICAgICBhd2FpdCB0aGlzLiNvYnNlcnZlcnM6OmRpc3BhdGNoKCdhZnRlclN0YXJ0JywgdGhpcy5pbnN0YW5jZSlcbiAgICAgICAgfSkoKVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnQubG9nLmVycm9yKHsgZXJyIH0sICdzdGFydDpmYWlsdXJlJylcbiAgICAgICAgICAgIHRocm93IGVyclxuICAgICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgJ2hvb2snOlxuICAgICAgY2FzZSAnYWN0aW9uJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgdGhpcy5jb21wb25lbnQubG9nLnRyYWNlKCdzdGFydDphZnRlcicpXG4gICAgdGhpcy5zdGFydGVkID0gdHJ1ZVxuXG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50XG4gIH1cblxuICAvKipcbiAgICogU3RvcCB0aGlzIGNvbXBvbmVudCBhbmQgY2xlYW4gdXAgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzXG4gICAqXG4gICAqIEByZXR1cm4gICAge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBzdG9wKCkge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLmNvbXBvbmVudC5sb2cudHJhY2UoJ3N0b3A6YmVmb3JlJylcblxuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICBjYXNlICdzZXJ2aWNlJzpcbiAgICAgICAgYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLiNvYnNlcnZlcnM6OmRpc3BhdGNoKCdiZWZvcmVTdG9wJywgdGhpcy5pbnN0YW5jZSlcbiAgICAgICAgICBhd2FpdCB0aGlzLmNvbXBvbmVudC5zdG9wKHRoaXMuaW5zdGFuY2UpXG4gICAgICAgICAgYXdhaXQgdGhpcy4jb2JzZXJ2ZXJzOjpkaXNwYXRjaCgnYWZ0ZXJTdG9wJywgbnVsbClcbiAgICAgICAgfSkoKVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnQubG9nLmVycm9yKHsgZXJyIH0sICdzdG9wOmZhaWx1cmUnKVxuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZVxuICAgICAgICAgICAgdGhyb3cgZXJyXG4gICAgICAgICAgfSlcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnaG9vayc6XG4gICAgICBjYXNlICdhY3Rpb24nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICB0aGlzLiNvYnNlcnZlcnMuY2xlYXIoKVxuICAgIHRoaXMuI2NhdGFsb2cuY2xlYXIoKVxuICAgIHRoaXMuaW5zdGFuY2UgPSBudWxsXG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIEZpbmQgYWxsIGhvb2tzIHdoaWNoIHdhbnQgdG8gb2JzZXJ2ZSB0aGlzIGNvbXBvbmVudCdzIGV2ZW50c1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gICAgIHtNYXB9ICAgICAgICAgb2JzZXJ2ZXJzICAgICBUaGUgb2JzZXJ2ZXJzIHRvIGNoZWNrXG4gKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgICAgb3B0cyAgICAgICAgICBGdW5jdGlvbiBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gICAgIHtNYXB9ICAgICAgICAgb3B0cy5ob29rcyAgICBBbGwgaG9va3Mga25vd24gdG8gQXRsYXNcbiAqIEByZXR1cm4gICAge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIG1rb2JzZXJ2ZXJzKG9ic2VydmVycywgeyBob29rcyB9KSB7XG4gIGZvciAoY29uc3QgW2FsaWFzLCBjb250YWluZXJdIG9mIGhvb2tzIHx8IG5ldyBNYXAoKSkge1xuICAgIGNvbnN0IHRhcmdldCA9IGNvbnRhaW5lci5hbGlhc2VzW2NvbnRhaW5lci5Db21wb25lbnQub2JzZXJ2ZXNdXG5cbiAgICBpZiAodGhpcy5hbGlhcyA9PT0gdGFyZ2V0KSB7XG4gICAgICBvYnNlcnZlcnMuc2V0KGFsaWFzLCBjb250YWluZXIpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1rY2F0YWxvZyhkZXN0aW5hdGlvbiwgeyBjYXRhbG9nIH0pIHtcbiAgZm9yIChjb25zdCBbYWxpYXMsIHJlc29sdmVkXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmFsaWFzZXMpKSB7XG4gICAgY29uc3QgW3R5cGVdID0gYWxpYXMuc3BsaXQoJzonKVxuICAgIGNvbnN0IHNvdXJjZSA9ICgoKSA9PiB7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnc2VydmljZSc6IHJldHVybiBjYXRhbG9nLnNlcnZpY2VzXG4gICAgICAgIGNhc2UgJ2FjdGlvbic6IHJldHVybiBjYXRhbG9nLmFjdGlvbnNcbiAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEZyYW1ld29ya0Vycm9yKGBJbnZhbGlkIGNvbXBvbmVudCB0eXBlOiAke3R5cGV9IHVzZWQgaW4gYWxpYXMgJHthbGlhc31gKVxuICAgICAgfVxuICAgIH0pKClcblxuICAgIGNvbnN0IGRlcGVuZGVuY3kgPSBzb3VyY2UuZ2V0KHRoaXMuYWxpYXNlc1thbGlhc10pXG5cbiAgICBpZiAoIWRlcGVuZGVuY3kpIHtcbiAgICAgIHRocm93IG5ldyBGcmFtZXdvcmtFcnJvcihgVW5hYmxlIHRvIGZpbmQgJHt0eXBlfSAke3Jlc29sdmVkfSBhbGlhc2VkIGFzICR7YWxpYXN9YClcbiAgICB9XG5cbiAgICBkZXN0aW5hdGlvbi5zZXQoYWxpYXMsIGRlcGVuZGVuY3kpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50Q29udGFpbmVyXG4iXX0=

@@ -100,3 +100,3 @@ "use strict";

});
it('throws when user config fails component config schema', () => {
it('throws when user config fails component config schema', function () {
options.config.actions.dummy = {

@@ -106,2 +106,3 @@ lol: true

atlas = new _.Atlas(options);
this.sandbox.stub(atlas.log, 'error');
const action = sinon.spy();

@@ -118,2 +119,11 @@ action.config = {

expect(() => atlas.action('dummy', action)).to.throw(_errors.ValidationError);
try {
atlas.action('dummy', action);
} catch (err) {
expect(err.context).to.have.all.keys(['type', 'alias', 'schema', 'config']);
expect(err.context.schema).to.equal(action.config);
expect(err.context.config).to.equal(options.config.actions.dummy);
expect(err.context.alias).to.equal('dummy');
}
});

@@ -146,2 +156,2 @@ it('works when user config passes component config schema', () => {

});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFjdGlvbi50ZXN0Lm1qcyJdLCJuYW1lcyI6WyJEdW1teUFjdGlvbiIsIkFjdGlvbiIsImRlc2NyaWJlIiwiYXRsYXMiLCJvcHRpb25zIiwiYmVmb3JlRWFjaCIsInJvb3QiLCJfX2Rpcm5hbWUiLCJjb25maWciLCJhY3Rpb25zIiwiZHVtbXkiLCJ0ZXN0IiwiQXRsYXMiLCJpdCIsImV4cGVjdCIsImFjdGlvbiIsInRvIiwiZXF1YWwiLCJ0aHJvdyIsIkZyYW1ld29ya0Vycm9yIiwic2lub24iLCJzcHkiLCJhcmdzIiwiZ2V0Q2FsbCIsImhhdmUiLCJwcm9wZXJ0eSIsImxvZyIsImJlIiwiYW4iLCJjaGluZGluZ3MiLCJtYXRjaCIsImNvbXBvbmVudCIsImEiLCJkZWZhdWx0cyIsImRlZmF1bHQiLCJyZXF1aXJlcyIsImFsaWFzZXMiLCJsb2wiLCJ0eXBlIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwiVmFsaWRhdGlvbkVycm9yIiwibm90Il0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOztBQUtBLE1BQU1BLFdBQU4sU0FBMEJDLGVBQTFCLENBQWlDOztBQUVqQ0MsUUFBUSxDQUFDLGlCQUFELEVBQW9CLE1BQU07QUFDaEMsTUFBSUMsS0FBSjtBQUNBLE1BQUlDLE9BQUo7QUFFQUMsRUFBQUEsVUFBVSxDQUFDLE1BQU07QUFDZkQsSUFBQUEsT0FBTyxHQUFHO0FBQ1JFLE1BQUFBLElBQUksRUFBRUMsU0FERTtBQUVSQyxNQUFBQSxNQUFNLEVBQUU7QUFDTkMsUUFBQUEsT0FBTyxFQUFFO0FBQ1BDLFVBQUFBLEtBQUssRUFBRTtBQUNMQyxZQUFBQSxJQUFJLEVBQUU7QUFERDtBQURBO0FBREg7QUFGQSxLQUFWO0FBVUFSLElBQUFBLEtBQUssR0FBRyxJQUFJUyxPQUFKLENBQVVSLE9BQVYsQ0FBUjtBQUNELEdBWlMsQ0FBVjtBQWNBUyxFQUFBQSxFQUFFLENBQUMsY0FBRCxFQUFpQixNQUFNO0FBQ3ZCQyxJQUFBQSxNQUFN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QUFoRCxDQUFtREUsS0FBbkQsQ0FBeUR1Qix1QkFBekQ7QUFDRCxHQVhDLENBQUY7QUFhQTVCLEVBQUFBLEVBQUUsQ0FBQywyQ0FBRCxFQUE4QyxNQUFNO0FBQ3BELFVBQU1FLE1BQU0sR0FBR0ssS0FBSyxDQUFDQyxHQUFOLEVBQWY7QUFDQU4sSUFBQUEsTUFBTSxDQUFDUCxNQUFQLEdBQWdCLEVBQWhCO0FBQ0FPLElBQUFBLE1BQU0sQ0FBQ29CLFFBQVAsR0FBa0IsQ0FBQyxlQUFELENBQWxCO0FBQ0FyQixJQUFBQSxNQUFNLENBQUMsTUFBTTtBQUNYWCxNQUFBQSxLQUFLLENBQUNZLE1BQU4sQ0FBYSxPQUFiLEVBQXNCQSxNQUF0QixFQUE4QjtBQUFFcUIsUUFBQUEsT0FBTyxFQUFFO0FBQ3ZDLDJCQUFpQjtBQURzQjtBQUFYLE9BQTlCO0FBR0QsS0FKSyxDQUFOLENBSUdwQixFQUpILENBSU0wQixHQUpOLENBSVV4QixLQUpWO0FBS0QsR0FUQyxDQUFGO0FBVUQsQ0E3SU8sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0bGFzIH0gZnJvbSAnLi4nXG5pbXBvcnQgQWN0aW9uIGZyb20gJ0BhdGxhcy5qcy9hY3Rpb24nXG5pbXBvcnQge1xuICBGcmFtZXdvcmtFcnJvcixcbiAgVmFsaWRhdGlvbkVycm9yLFxufSBmcm9tICdAYXRsYXMuanMvZXJyb3JzJ1xuXG5jbGFzcyBEdW1teUFjdGlvbiBleHRlbmRzIEFjdGlvbiB7fVxuXG5kZXNjcmliZSgnQXRsYXM6OmFjdGlvbigpJywgKCkgPT4ge1xuICBsZXQgYXRsYXNcbiAgbGV0IG9wdGlvbnNcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgcm9vdDogX19kaXJuYW1lLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgICBkdW1teToge1xuICAgICAgICAgICAgdGVzdDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG4gICAgYXRsYXMgPSBuZXcgQXRsYXMob3B0aW9ucylcbiAgfSlcblxuICBpdCgncmV0dXJucyB0aGlzJywgKCkgPT4ge1xuICAgIGV4cGVjdChhdGxhcy5hY3Rpb24oJ2R1bW15JywgRHVtbXlBY3Rpb24pKS50by5lcXVhbChhdGxhcylcbiAgfSlcblxuICBpdCgndGhyb3dzIHdoZW4gdGhlIGFsaWFzIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBieSBhbm90aGVyIGFjdGlvbicsICgpID0+IHtcbiAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgRHVtbXlBY3Rpb24pXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLmFjdGlvbignZHVtbXknLCBEdW1teUFjdGlvbikpLnRvLnRocm93KEZyYW1ld29ya0Vycm9yKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiB0aGUgYWN0aW9uIGlzIG5vdCBhIGNsYXNzL2Z1bmN0aW9uJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBhdGxhcy5hY3Rpb24oJ2R1bW15Jywge30pKS50by50aHJvdyhGcmFtZXdvcmtFcnJvcilcbiAgfSlcblxuICBpdCgncHJvdmlkZXMgdGhlIGF0bGFzIG9uIGFjdGlvbiBjb25zdHJ1Y3RvciBhcmd1bWVudCcsICgpID0+IHtcbiAgICBjb25zdCBhY3Rpb24gPSBzaW5vbi5zcHkoKVxuICAgIGFjdGlvbi5jb25maWcgPSB7fVxuICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBhY3Rpb24pXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzKS50by5oYXZlLnByb3BlcnR5KCdhdGxhcycpXG4gICAgZXhwZWN0KGFyZ3MuYXRsYXMpLnRvLmVxdWFsKGF0bGFzKVxuICB9KVxuXG4gIGl0KCdwcm92aWRlcyBhIGxvZ2dlciBpbnN0YW5jZSBvbiBhY3Rpb24gY29uc3RydWN0b3IgYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gc2lub24uc3B5KClcbiAgICBhY3Rpb24uY29uZmlnID0ge31cbiAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgYWN0aW9uKVxuICAgIGNvbnN0IGFyZ3MgPSBhY3Rpb24uZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncykudG8uaGF2ZS5wcm9wZXJ0eSgnbG9nJylcbiAgICBleHBlY3QoYXJncy5sb2cpLnRvLmJlLmFuKCdvYmplY3QnKVxuICAgIGV4cGVjdChhcmdzLmxvZy5jaGluZGluZ3MpLnRvLm1hdGNoKC9cImFjdGlvblwiOlwiZHVtbXlcIi91KVxuICB9KVxuXG4gIGl0KCdwcm92aWRlcyB0aGUgY29uZmlnIG9iamVjdCBvbiBhY3Rpb24gY29uc3RydWN0b3IgYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gc2lub24uc3B5KClcbiAgICBhY3Rpb24uY29uZmlnID0ge31cbiAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgYWN0aW9uKVxuICAgIGNvbnN0IGFyZ3MgPSBhY3Rpb24uZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncykudG8uaGF2ZS5wcm9wZXJ0eSgnY29uZmlnJylcbiAgICBleHBlY3QoYXJncy5jb25maWcpLnRvLmJlLmFuKCdvYmplY3QnKVxuICAgIGV4cGVjdChhcmdzLmNvbmZpZykudG8uZXF1YWwob3B0aW9ucy5jb25maWcuYWN0aW9ucy5kdW1teSlcbiAgfSlcblxuICBpdCgncHJvdmlkZXMgdGhlIHJlc29sdmUgZnVuY3Rpb24gb24gYWN0aW9uIGNvbnN0cnVjdG9yIGFyZ3VtZW50IGFzIGBjb21wb25lbnRgJywgKCkgPT4ge1xuICAgIGNvbnN0IGFjdGlvbiA9IHNpbm9uLnNweSgpXG4gICAgYWN0aW9uLmNvbmZpZyA9IHt9XG4gICAgYXRsYXMuYWN0aW9uKCdkdW1teScsIGFjdGlvbilcbiAgICBjb25zdCBhcmdzID0gYWN0aW9uLmdldENhbGwoMCkuYXJnc1swXVxuXG4gICAgZXhwZWN0KGFyZ3MpLnRvLmhhdmUucHJvcGVydHkoJ2NvbXBvbmVudCcpXG4gICAgZXhwZWN0KGFyZ3MuY29tcG9uZW50KS50by5iZS5hKCdmdW5jdGlvbicpXG4gIH0pXG5cbiAgaXQoJ2FwcGxpZXMgZGVmYXVsdHMgZGVmaW5lZCBvbiBhY3Rpb24gb24gdG9wIG9mIHVzZXItcHJvdmlkZWQgY29uZmlnJywgKCkgPT4ge1xuICAgIGNvbnN0IGFjdGlvbiA9IHNpbm9uLnNweSgpXG4gICAgYWN0aW9uLmNvbmZpZyA9IHt9XG4gICAgYWN0aW9uLmRlZmF1bHRzID0geyBkZWZhdWx0OiB0cnVlIH1cbiAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgYWN0aW9uKVxuICAgIGNvbnN0IGFyZ3MgPSBhY3Rpb24uZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncy5jb25maWcpLnRvLmhhdmUucHJvcGVydHkoJ2RlZmF1bHQnLCB0cnVlKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiBhbGlhc2VzIGRvIG5vdCBzYXRpc2Z5IHJlcXVpcmVtZW50cyBvZiB0aGUgY29tcG9uZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IGFjdGlvbiA9IHNpbm9uLnNweSgpXG4gICAgYWN0aW9uLmNvbmZpZyA9IHt9XG4gICAgYWN0aW9uLnJlcXVpcmVzID0gWydzZXJ2aWNlOmR1bW15J11cbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgYXRsYXMuYWN0aW9uKCdkdW1teScsIGFjdGlvbilcbiAgICB9KS50by50aHJvdyhGcmFtZXdvcmtFcnJvciwgL01pc3NpbmcgYWxpYXNlcyBmb3IgY29tcG9uZW50IGR1bW15L3UpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIGV4dHJhbmVvdXMgYWxpYXNlcyBhcmUgc3BlY2lmaWVkJywgKCkgPT4ge1xuICAgIGNvbnN0IGFjdGlvbiA9IHNpbm9uLnNweSgpXG4gICAgYWN0aW9uLmNvbmZpZyA9IHt9XG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBhY3Rpb24sIHsgYWxpYXNlczoge1xuICAgICAgICAnc2VydmljZTpkdW1teSc6ICdkdW1teScsXG4gICAgICB9IH0pXG4gICAgfSkudG8udGhyb3coRnJhbWV3b3JrRXJyb3IsIC9Vbm5lZWRlZCBhbGlhc2VzIGZvciBjb21wb25lbnQgZHVtbXkvdSlcbiAgfSlcblxuICBpdCgndGhyb3dzIHdoZW4gdXNlciBjb25maWcgZmFpbHMgY29tcG9uZW50IGNvbmZpZyBzY2hlbWEnLCAoKSA9PiB7XG4gICAgb3B0aW9ucy5jb25maWcuYWN0aW9ucy5kdW1teSA9IHsgbG9sOiB0cnVlIH1cbiAgICBhdGxhcyA9IG5ldyBBdGxhcyhvcHRpb25zKVxuXG4gICAgY29uc3QgYWN0aW9uID0gc2lub24uc3B5KClcbiAgICBhY3Rpb24uY29uZmlnID0ge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHRlc3Q6IHsgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGV4cGVjdCgoKSA9PiBhdGxhcy5hY3Rpb24oJ2R1bW15JywgYWN0aW9uKSkudG8udGhyb3coVmFsaWRhdGlvbkVycm9yKVxuICB9KVxuXG4gIGl0KCd3b3JrcyB3aGVuIHVzZXIgY29uZmlnIHBhc3NlcyBjb21wb25lbnQgY29uZmlnIHNjaGVtYScsICgpID0+IHtcbiAgICBjb25zdCBhY3Rpb24gPSBzaW5vbi5zcHkoKVxuICAgIGFjdGlvbi5jb25maWcgPSB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdGVzdDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLmFjdGlvbignZHVtbXknLCBhY3Rpb24pKS5ub3QudG8udGhyb3coVmFsaWRhdGlvbkVycm9yKVxuICB9KVxuXG4gIGl0KCd3b3JrcyB3aGVuIGFsbCByZXF1aXJlbWVudHMgYXJlIHNwZWNpZmllZCcsICgpID0+IHtcbiAgICBjb25zdCBhY3Rpb24gPSBzaW5vbi5zcHkoKVxuICAgIGFjdGlvbi5jb25maWcgPSB7fVxuICAgIGFjdGlvbi5yZXF1aXJlcyA9IFsnc2VydmljZTpkdW1teSddXG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBhY3Rpb24sIHsgYWxpYXNlczoge1xuICAgICAgICAnc2VydmljZTpkdW1teSc6ICdkdW1teScsXG4gICAgICB9IH0pXG4gICAgfSkudG8ubm90LnRocm93KClcbiAgfSlcbn0pXG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFjdGlvbi50ZXN0Lm1qcyJdLCJuYW1lcyI6WyJEdW1teUFjdGlvbiIsIkFjdGlvbiIsImRlc2NyaWJlIiwiYXRsYXMiLCJvcHRpb25zIiwiYmVmb3JlRWFjaCIsInJvb3QiLCJfX2Rpcm5hbWUiLCJjb25maWciLCJhY3Rpb25zIiwiZHVtbXkiLCJ0ZXN0IiwiQXRsYXMiLCJpdCIsImV4cGVjdCIsImFjdGlvbiIsInRvIiwiZXF1YWwiLCJ0aHJvdyIsIkZyYW1ld29ya0Vycm9yIiwic2lub24iLCJzcHkiLCJhcmdzIiwiZ2V0Q2FsbCIsImhhdmUiLCJwcm9wZXJ0eSIsImxvZyIsImJlIiwiYW4iLCJjaGluZGluZ3MiLCJtYXRjaCIsImNvbXBvbmVudCIsImEiLCJkZWZhdWx0cyIsImRlZmF1bHQiLCJyZXF1aXJlcyIsImFsaWFzZXMiLCJsb2wiLCJzYW5kYm94Iiwic3R1YiIsInR5cGUiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsInByb3BlcnRpZXMiLCJWYWxpZGF0aW9uRXJyb3IiLCJlcnIiLCJjb250ZXh0IiwiYWxsIiwia2V5cyIsInNjaGVtYSIsImFsaWFzIiwibm90Il0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOztBQUtBLE1BQU1BLFdBQU4sU0FBMEJDLGVBQTFCLENBQWlDOztBQUVqQ0MsUUFBUSxDQUFDLGlCQUFELEVBQW9CLE1BQU07QUFDaEMsTUFBSUMsS0FBSjtBQUNBLE1BQUlDLE9BQUo7QUFFQUMsRUFBQUEsVUFBVSxDQUFDLE1BQU07QUFDZkQsSUFBQUEsT0FBTyxHQUFHO0FBQ1JFLE1BQUFBLElBQUksRUFBRUMsU0FERTtBQUVSQyxNQUFBQSxNQUFNLEVBQUU7QUFDTkMsUUFBQUEsT0FBTyxFQUFFO0FBQ1BDLFVBQUFBLEtBQUssRUFBRTtBQUNMQyxZQUFBQSxJQUFJLEVBQUU7QUFERDtBQURBO0FBREg7QUFGQSxLQUFWO0FBVUFSLElBQUFBLEtBQUssR0FBRyxJQUFJUyxPQUFKLENBQVVSLE9BQVYsQ0FBUjtBQUNELEdB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SUFBQUEsTUFBTSxDQUFDb0IsUUFBUCxHQUFrQixDQUFDLGVBQUQsQ0FBbEI7QUFDQXJCLElBQUFBLE1BQU0sQ0FBQyxNQUFNO0FBQ1hYLE1BQUFBLEtBQUssQ0FBQ1ksTUFBTixDQUFhLE9BQWIsRUFBc0JBLE1BQXRCLEVBQThCO0FBQUVxQixRQUFBQSxPQUFPLEVBQUU7QUFDdkMsMkJBQWlCO0FBRHNCO0FBQVgsT0FBOUI7QUFHRCxLQUpLLENBQU4sQ0FJR3BCLEVBSkgsQ0FJTWtDLEdBSk4sQ0FJVWhDLEtBSlY7QUFLRCxHQVRDLENBQUY7QUFVRCxDQTVKTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXRsYXMgfSBmcm9tICcuLidcbmltcG9ydCBBY3Rpb24gZnJvbSAnQGF0bGFzLmpzL2FjdGlvbidcbmltcG9ydCB7XG4gIEZyYW1ld29ya0Vycm9yLFxuICBWYWxpZGF0aW9uRXJyb3IsXG59IGZyb20gJ0BhdGxhcy5qcy9lcnJvcnMnXG5cbmNsYXNzIER1bW15QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHt9XG5cbmRlc2NyaWJlKCdBdGxhczo6YWN0aW9uKCknLCAoKSA9PiB7XG4gIGxldCBhdGxhc1xuICBsZXQgb3B0aW9uc1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICByb290OiBfX2Rpcm5hbWUsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgYWN0aW9uczoge1xuICAgICAgICAgIGR1bW15OiB7XG4gICAgICAgICAgICB0ZXN0OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cbiAgICBhdGxhcyA9IG5ldyBBdGxhcyhvcHRpb25zKVxuICB9KVxuXG4gIGl0KCdyZXR1cm5zIHRoaXMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGF0bGFzLmFjdGlvbignZHVtbXknLCBEdW1teUFjdGlvbikpLnRvLmVxdWFsKGF0bGFzKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiB0aGUgYWxpYXMgaGFzIGFscmVhZHkgYmVlbiB1c2VkIGJ5IGFub3RoZXIgYWN0aW9uJywgKCkgPT4ge1xuICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBEdW1teUFjdGlvbilcbiAgICBleHBlY3QoKCkgPT4gYXRsYXMuYWN0aW9uKCdkdW1teScsIER1bW15QWN0aW9uKSkudG8udGhyb3coRnJhbWV3b3JrRXJyb3IpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIHRoZSBhY3Rpb24gaXMgbm90IGEgY2xhc3MvZnVuY3Rpb24nLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLmFjdGlvbignZHVtbXknLCB7fSkpLnRvLnRocm93KEZyYW1ld29ya0Vycm9yKVxuICB9KVxuXG4gIGl0KCdwcm92aWRlcyB0aGUgYXRsYXMgb24gYWN0aW9uIGNvbnN0cnVjdG9yIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IGFjdGlvbiA9IHNpbm9uLnNweSgpXG4gICAgYWN0aW9uLmNvbmZpZyA9IHt9XG4gICAgYXRsYXMuYWN0aW9uKCdkdW1teScsIGFjdGlvbilcbiAgICBjb25zdCBhcmdzID0gYWN0aW9uLmdldENhbGwoMCkuYXJnc1swXVxuXG4gICAgZXhwZWN0KGFyZ3MpLnRvLmhhdmUucHJvcGVydHkoJ2F0bGFzJylcbiAgICBleHBlY3QoYXJncy5hdGxhcykudG8uZXF1YWwoYXRsYXMpXG4gIH0pXG5cbiAgaXQoJ3Byb3ZpZGVzIGEgbG9nZ2VyIGluc3RhbmNlIG9uIGFjdGlvbiBjb25zdHJ1Y3RvciBhcmd1bWVudCcsICgpID0+IHtcbiAgICBjb25zdCBhY3Rpb24gPSBzaW5vbi5zcHkoKVxuICAgIGFjdGlvbi5jb25maWcgPSB7fVxuICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBhY3Rpb24pXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzKS50by5oYXZlLnByb3BlcnR5KCdsb2cnKVxuICAgIGV4cGVjdChhcmdzLmxvZykudG8uYmUuYW4oJ29iamVjdCcpXG4gICAgZXhwZWN0KGFyZ3MubG9nLmNoaW5kaW5ncykudG8ubWF0Y2goL1wiYWN0aW9uXCI6XCJkdW1teVwiL3UpXG4gIH0pXG5cbiAgaXQoJ3Byb3ZpZGVzIHRoZSBjb25maWcgb2JqZWN0IG9uIGFjdGlvbiBjb25zdHJ1Y3RvciBhcmd1bWVudCcsICgpID0+IHtcbiAgICBjb25zdCBhY3Rpb24gPSBzaW5vbi5zcHkoKVxuICAgIGFjdGlvbi5jb25maWcgPSB7fVxuICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBhY3Rpb24pXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzKS50by5oYXZlLnByb3BlcnR5KCdjb25maWcnKVxuICAgIGV4cGVjdChhcmdzLmNvbmZpZykudG8uYmUuYW4oJ29iamVjdCcpXG4gICAgZXhwZWN0KGFyZ3MuY29uZmlnKS50by5lcXVhbChvcHRpb25zLmNvbmZpZy5hY3Rpb25zLmR1bW15KVxuICB9KVxuXG4gIGl0KCdwcm92aWRlcyB0aGUgcmVzb2x2ZSBmdW5jdGlvbiBvbiBhY3Rpb24gY29uc3RydWN0b3IgYXJndW1lbnQgYXMgYGNvbXBvbmVudGAnLCAoKSA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gc2lub24uc3B5KClcbiAgICBhY3Rpb24uY29uZmlnID0ge31cbiAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgYWN0aW9uKVxuICAgIGNvbnN0IGFyZ3MgPSBhY3Rpb24uZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncykudG8uaGF2ZS5wcm9wZXJ0eSgnY29tcG9uZW50JylcbiAgICBleHBlY3QoYXJncy5jb21wb25lbnQpLnRvLmJlLmEoJ2Z1bmN0aW9uJylcbiAgfSlcblxuICBpdCgnYXBwbGllcyBkZWZhdWx0cyBkZWZpbmVkIG9uIGFjdGlvbiBvbiB0b3Agb2YgdXNlci1wcm92aWRlZCBjb25maWcnLCAoKSA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gc2lub24uc3B5KClcbiAgICBhY3Rpb24uY29uZmlnID0ge31cbiAgICBhY3Rpb24uZGVmYXVsdHMgPSB7IGRlZmF1bHQ6IHRydWUgfVxuICAgIGF0bGFzLmFjdGlvbignZHVtbXknLCBhY3Rpb24pXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzLmNvbmZpZykudG8uaGF2ZS5wcm9wZXJ0eSgnZGVmYXVsdCcsIHRydWUpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIGFsaWFzZXMgZG8gbm90IHNhdGlzZnkgcmVxdWlyZW1lbnRzIG9mIHRoZSBjb21wb25lbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gc2lub24uc3B5KClcbiAgICBhY3Rpb24uY29uZmlnID0ge31cbiAgICBhY3Rpb24ucmVxdWlyZXMgPSBbJ3NlcnZpY2U6ZHVtbXknXVxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgYWN0aW9uKVxuICAgIH0pLnRvLnRocm93KEZyYW1ld29ya0Vycm9yLCAvTWlzc2luZyBhbGlhc2VzIGZvciBjb21wb25lbnQgZHVtbXkvdSlcbiAgfSlcblxuICBpdCgndGhyb3dzIHdoZW4gZXh0cmFuZW91cyBhbGlhc2VzIGFyZSBzcGVjaWZpZWQnLCAoKSA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gc2lub24uc3B5KClcbiAgICBhY3Rpb24uY29uZmlnID0ge31cbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgYXRsYXMuYWN0aW9uKCdkdW1teScsIGFjdGlvbiwgeyBhbGlhc2VzOiB7XG4gICAgICAgICdzZXJ2aWNlOmR1bW15JzogJ2R1bW15JyxcbiAgICAgIH0gfSlcbiAgICB9KS50by50aHJvdyhGcmFtZXdvcmtFcnJvciwgL1VubmVlZGVkIGFsaWFzZXMgZm9yIGNvbXBvbmVudCBkdW1teS91KVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiB1c2VyIGNvbmZpZyBmYWlscyBjb21wb25lbnQgY29uZmlnIHNjaGVtYScsIGZ1bmN0aW9uKCkge1xuICAgIG9wdGlvbnMuY29uZmlnLmFjdGlvbnMuZHVtbXkgPSB7IGxvbDogdHJ1ZSB9XG4gICAgYXRsYXMgPSBuZXcgQXRsYXMob3B0aW9ucylcbiAgICB0aGlzLnNhbmRib3guc3R1YihhdGxhcy5sb2csICdlcnJvcicpXG5cbiAgICBjb25zdCBhY3Rpb24gPSBzaW5vbi5zcHkoKVxuICAgIGFjdGlvbi5jb25maWcgPSB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdGVzdDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLmFjdGlvbignZHVtbXknLCBhY3Rpb24pKS50by50aHJvdyhWYWxpZGF0aW9uRXJyb3IpXG5cbiAgICB0cnkge1xuICAgICAgYXRsYXMuYWN0aW9uKCdkdW1teScsIGFjdGlvbilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGV4cGVjdChlcnIuY29udGV4dCkudG8uaGF2ZS5hbGwua2V5cyhbXG4gICAgICAgICd0eXBlJyxcbiAgICAgICAgJ2FsaWFzJyxcbiAgICAgICAgJ3NjaGVtYScsXG4gICAgICAgICdjb25maWcnLFxuICAgICAgXSlcbiAgICAgIGV4cGVjdChlcnIuY29udGV4dC5zY2hlbWEpLnRvLmVxdWFsKGFjdGlvbi5jb25maWcpXG4gICAgICBleHBlY3QoZXJyLmNvbnRleHQuY29uZmlnKS50by5lcXVhbChvcHRpb25zLmNvbmZpZy5hY3Rpb25zLmR1bW15KVxuICAgICAgZXhwZWN0KGVyci5jb250ZXh0LmFsaWFzKS50by5lcXVhbCgnZHVtbXknKVxuICAgIH1cbiAgfSlcblxuICBpdCgnd29ya3Mgd2hlbiB1c2VyIGNvbmZpZyBwYXNzZXMgY29tcG9uZW50IGNvbmZpZyBzY2hlbWEnLCAoKSA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gc2lub24uc3B5KClcbiAgICBhY3Rpb24uY29uZmlnID0ge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHRlc3Q6IHsgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGV4cGVjdCgoKSA9PiBhdGxhcy5hY3Rpb24oJ2R1bW15JywgYWN0aW9uKSkubm90LnRvLnRocm93KFZhbGlkYXRpb25FcnJvcilcbiAgfSlcblxuICBpdCgnd29ya3Mgd2hlbiBhbGwgcmVxdWlyZW1lbnRzIGFyZSBzcGVjaWZpZWQnLCAoKSA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gc2lub24uc3B5KClcbiAgICBhY3Rpb24uY29uZmlnID0ge31cbiAgICBhY3Rpb24ucmVxdWlyZXMgPSBbJ3NlcnZpY2U6ZHVtbXknXVxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgYWN0aW9uLCB7IGFsaWFzZXM6IHtcbiAgICAgICAgJ3NlcnZpY2U6ZHVtbXknOiAnZHVtbXknLFxuICAgICAgfSB9KVxuICAgIH0pLnRvLm5vdC50aHJvdygpXG4gIH0pXG59KVxuIl19

@@ -139,3 +139,3 @@ "use strict";

});
it('throws when user config fails component config schema', () => {
it('throws when user config fails component config schema', function () {
options.config.hooks.dummy = {

@@ -145,2 +145,3 @@ lol: true

atlas = new _.Atlas(options);
this.sandbox.stub(atlas.log, 'error');
const hook = sinon.spy();

@@ -157,2 +158,11 @@ hook.config = {

expect(() => atlas.hook('dummy', hook)).to.throw(_errors.ValidationError);
try {
atlas.hook('dummy', hook);
} catch (err) {
expect(err.context).to.have.all.keys(['type', 'alias', 'schema', 'config']);
expect(err.context.schema).to.equal(hook.config);
expect(err.context.config).to.equal(options.config.hooks.dummy);
expect(err.context.alias).to.equal('dummy');
}
});

@@ -182,2 +192,2 @@ it('works when user config passes component config schema', () => {

});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImhvb2sudGVzdC5tanMiXSwibmFtZXMiOlsiRHVtbXlIb29rIiwiSG9vayIsImRlc2NyaWJlIiwiYXRsYXMiLCJvcHRpb25zIiwiYmVmb3JlRWFjaCIsInJvb3QiLCJfX2Rpcm5hbWUiLCJjb25maWciLCJob29rcyIsImR1bW15IiwidGVzdCIsIkF0bGFzIiwiaXQiLCJleHBlY3QiLCJob29rIiwidG8iLCJlcXVhbCIsInRocm93IiwiRnJhbWV3b3JrRXJyb3IiLCJzaW5vbiIsInNweSIsImFyZ3MiLCJnZXRDYWxsIiwiaGF2ZSIsInByb3BlcnR5IiwibG9nIiwiYmUiLCJhbiIsImNoaW5kaW5ncyIsIm1hdGNoIiwiY29tcG9uZW50IiwiYSIsImRlZmF1bHRzIiwiZGVmYXVsdCIsInJlcXVpcmVzIiwiYWxpYXNlcyIsIm5vdCIsIkR1bW15IiwibG9sIiwidHlwZSIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsIlZhbGlkYXRpb25FcnJvciJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7QUFDQTs7QUFDQTs7OztBQUtBLE1BQU1BLFNBQU4sU0FBd0JDLGFBQXhCLENBQTZCOztnQkFBdkJELFMsY0FDYyxPOztBQUdwQkUsUUFBUSxDQUFDLGVBQUQsRUFBa0IsTUFBTTtBQUM5QixNQUFJQyxLQUFKO0FBQ0EsTUFBSUMsT0FBSjtBQUVBQyxFQUFBQSxVQUFVLENBQUMsTUFBTTtBQUNmRCxJQUFBQSxPQUFPLEdBQUc7QUFDUkUsTUFBQUEsSUFBSSxFQUFFQyxTQURFO0FBRVJDLE1BQUFBLE1BQU0sRUFBRTtBQUNOQyxRQUFBQSxLQUFLLEVBQUU7QUFDTEMsVUFBQUEsS0FBSyxFQUFFO0FBQ0xDLFlBQUFBLElBQUksRUFBRTtBQUREO0FBREY7QUFERDtBQUZBLEtBQVY7QUFVQVIsSUFBQUEsS0FBSyxHQUFHLElBQUlTLE9BQUosQ0FBVVIsT0FBVixDQUFSO0FBQ0QsR0FaUyxDQUFWO0FBY0FTLEVBQUFBLEVBQUUsQ0FBQyxjQUFELEVBQWlCLE1BQU07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S0FBZDtBQVFBMUIsSUFBQUEsTUFBTSxDQUFDLE1BQU1YLEtBQUssQ0FBQ1ksSUFBTixDQUFXLE9BQVgsRUFBb0JBLElBQXBCLENBQVAsQ0FBTixDQUF3Q3NCLEdBQXhDLENBQTRDckIsRUFBNUMsQ0FBK0NFLEtBQS9DLENBQXFEeUIsdUJBQXJEO0FBQ0QsR0FYQyxDQUFGO0FBYUE5QixFQUFBQSxFQUFFLENBQUMsa0ZBQUQsRUFBcUYsTUFBTTtBQUMzRixVQUFNeUIsS0FBTixTQUFvQnJDLGFBQXBCLENBQXlCOztBQURrRSxvQkFDckZxQyxLQURxRixjQUV2RSxPQUZ1RTs7QUFLM0Z4QixJQUFBQSxNQUFNLENBQUMsTUFBTTtBQUNYWCxNQUFBQSxLQUFLLENBQUNZLElBQU4sQ0FBVyxPQUFYLEVBQW9CdUIsS0FBcEI7QUFDRCxLQUZLLENBQU4sQ0FFR3RCLEVBRkgsQ0FFTXFCLEdBRk4sQ0FFVW5CLEtBRlY7QUFHRCxHQVJDLENBQUY7QUFTRCxDQTlLTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXRsYXMgfSBmcm9tICcuLidcbmltcG9ydCBIb29rIGZyb20gJ0BhdGxhcy5qcy9ob29rJ1xuaW1wb3J0IHtcbiAgRnJhbWV3b3JrRXJyb3IsXG4gIFZhbGlkYXRpb25FcnJvcixcbn0gZnJvbSAnQGF0bGFzLmpzL2Vycm9ycydcblxuY2xhc3MgRHVtbXlIb29rIGV4dGVuZHMgSG9vayB7XG4gIHN0YXRpYyBvYnNlcnZlcyA9ICdhdGxhcydcbn1cblxuZGVzY3JpYmUoJ0F0bGFzOjpob29rKCknLCAoKSA9PiB7XG4gIGxldCBhdGxhc1xuICBsZXQgb3B0aW9uc1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICByb290OiBfX2Rpcm5hbWUsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgaG9va3M6IHtcbiAgICAgICAgICBkdW1teToge1xuICAgICAgICAgICAgdGVzdDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG4gICAgYXRsYXMgPSBuZXcgQXRsYXMob3B0aW9ucylcbiAgfSlcblxuICBpdCgncmV0dXJucyB0aGlzJywgKCkgPT4ge1xuICAgIGV4cGVjdChhdGxhcy5ob29rKCdkdW1teScsIER1bW15SG9vaykpLnRvLmVxdWFsKGF0bGFzKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiB0aGUgYWxpYXMgaGFzIGFscmVhZHkgYmVlbiB1c2VkIGJ5IGFub3RoZXIgaG9vaycsICgpID0+IHtcbiAgICBhdGxhcy5ob29rKCdkdW1teScsIER1bW15SG9vaylcbiAgICBleHBlY3QoKCkgPT4gYXRsYXMuaG9vaygnZHVtbXknLCBEdW1teUhvb2spKS50by50aHJvdyhGcmFtZXdvcmtFcnJvcilcbiAgfSlcblxuICBpdCgndGhyb3dzIHdoZW4gdGhlIGhvb2sgaXMgbm90IGEgY2xhc3MvZnVuY3Rpb24nLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLmhvb2soJ2R1bW15Jywge30pKS50by50aHJvdyhGcmFtZXdvcmtFcnJvcilcbiAgfSlcblxuICBpdCgncHJvdmlkZXMgdGhlIGF0bGFzIG9uIGhvb2sgY29uc3RydWN0b3IgYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7fVxuICAgIGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaylcbiAgICBjb25zdCBhcmdzID0gaG9vay5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzKS50by5oYXZlLnByb3BlcnR5KCdhdGxhcycpXG4gICAgZXhwZWN0KGFyZ3MuYXRsYXMpLnRvLmVxdWFsKGF0bGFzKVxuICB9KVxuXG4gIGl0KCdwcm92aWRlcyBhIGxvZ2dlciBpbnN0YW5jZSBvbiBob29rIGNvbnN0cnVjdG9yIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IGhvb2sgPSBzaW5vbi5zcHkoKVxuICAgIGhvb2suY29uZmlnID0ge31cbiAgICBhdGxhcy5ob29rKCdkdW1teScsIGhvb2spXG4gICAgY29uc3QgYXJncyA9IGhvb2suZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncykudG8uaGF2ZS5wcm9wZXJ0eSgnbG9nJylcbiAgICBleHBlY3QoYXJncy5sb2cpLnRvLmJlLmFuKCdvYmplY3QnKVxuICAgIGV4cGVjdChhcmdzLmxvZy5jaGluZGluZ3MpLnRvLm1hdGNoKC9cImhvb2tcIjpcImR1bW15XCIvdSlcbiAgfSlcblxuICBpdCgncHJvdmlkZXMgY29uZmlnIG9iamVjdCBvbiBob29rIGNvbnN0cnVjdG9yIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IGhvb2sgPSBzaW5vbi5zcHkoKVxuICAgIGhvb2suY29uZmlnID0ge31cbiAgICBhdGxhcy5ob29rKCdkdW1teScsIGhvb2spXG4gICAgY29uc3QgYXJncyA9IGhvb2suZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncykudG8uaGF2ZS5wcm9wZXJ0eSgnY29uZmlnJylcbiAgICBleHBlY3QoYXJncy5jb25maWcpLnRvLmJlLmFuKCdvYmplY3QnKVxuICAgIGV4cGVjdChhcmdzLmNvbmZpZykudG8uZXF1YWwob3B0aW9ucy5jb25maWcuaG9va3MuZHVtbXkpXG4gIH0pXG5cbiAgaXQoJ3Byb3ZpZGVzIHRoZSByZXNvbHZlIGZ1bmN0aW9uIG9uIGhvb2sgY29uc3RydWN0b3IgYXJndW1lbnQgYXMgYGNvbXBvbmVudGAnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7fVxuICAgIGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaylcbiAgICBjb25zdCBhcmdzID0gaG9vay5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzKS50by5oYXZlLnByb3BlcnR5KCdjb21wb25lbnQnKVxuICAgIGV4cGVjdChhcmdzLmNvbXBvbmVudCkudG8uYmUuYSgnZnVuY3Rpb24nKVxuICB9KVxuXG4gIGl0KCdhcHBsaWVzIGRlZmF1bHRzIGRlZmluZWQgb24gaG9vayBvbiB0b3Agb2YgdXNlci1wcm92aWRlZCBjb25maWcnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7fVxuICAgIGhvb2suZGVmYXVsdHMgPSB7IGRlZmF1bHQ6IHRydWUgfVxuICAgIGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaylcbiAgICBjb25zdCBhcmdzID0gaG9vay5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzLmNvbmZpZykudG8uaGF2ZS5wcm9wZXJ0eSgnZGVmYXVsdCcsIHRydWUpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIGFsaWFzZXMgZG8gbm90IHNhdGlzZnkgcmVxdWlyZW1lbnRzIG9mIHRoZSBjb21wb25lbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7fVxuICAgIGhvb2sucmVxdWlyZXMgPSBbJ3NlcnZpY2U6ZHVtbXknLCAnYWN0aW9uOmR1bW15J11cbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgYXRsYXMuaG9vaygnZHVtbXknLCBob29rKVxuICAgIH0pLnRvLnRocm93KEZyYW1ld29ya0Vycm9yLCAvTWlzc2luZyBhbGlhc2VzIGZvciBjb21wb25lbnQgZHVtbXkvdSlcbiAgfSlcblxuICBpdCgndGhyb3dzIHdoZW4gZXh0cmFuZW91cyBhbGlhc2VzIGFyZSBzcGVjaWZpZWQnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7fVxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBhdGxhcy5ob29rKCdkdW1teScsIGhvb2ssIHsgYWxpYXNlczoge1xuICAgICAgICAnc2VydmljZTpkdW1teSc6ICdkdW1teScsXG4gICAgICB9IH0pXG4gICAgfSkudG8udGhyb3coRnJhbWV3b3JrRXJyb3IsIC9Vbm5lZWRlZCBhbGlhc2VzIGZvciBjb21wb25lbnQgZHVtbXkvdSlcbiAgfSlcblxuICBpdCgnd29ya3Mgd2hlbiBhbGwgcmVxdWlyZW1lbnRzIGFyZSBzcGVjaWZpZWQnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7fVxuICAgIGhvb2sucmVxdWlyZXMgPSBbJ3NlcnZpY2U6ZHVtbXknLCAnYWN0aW9uOmR1bW15J11cbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgYXRsYXMuaG9vaygnZHVtbXknLCBob29rLCB7IGFsaWFzZXM6IHtcbiAgICAgICAgJ3NlcnZpY2U6ZHVtbXknOiAnZHVtbXknLFxuICAgICAgICAnYWN0aW9uOmR1bW15JzogJ2R1bW15JyxcbiAgICAgIH0gfSlcbiAgICB9KS50by5ub3QudGhyb3coKVxuICB9KVxuXG4gIGl0KCdkb2VzIG5vdCB0aHJvdyB3aGVuIGFsaWFzZXMgaW5jbHVkZSB0aGUgb2JzZXJ2ZWQgY29tcG9uZW50JywgKCkgPT4ge1xuICAgIGNsYXNzIER1bW15IGV4dGVuZHMgSG9vayB7XG4gICAgICBzdGF0aWMgb2JzZXJ2ZXMgPSAnc2VydmljZTpkdW1teSdcbiAgICB9XG5cbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgYXRsYXMuaG9vaygnZHVtbXknLCBEdW1teSwgeyBhbGlhc2VzOiB7XG4gICAgICAgICdzZXJ2aWNlOmR1bW15JzogJ2R1bW15JyxcbiAgICAgIH0gfSlcbiAgICB9KS50by5ub3QudGhyb3coKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiB0aGUgb2JzZXJ2ZWQgY29tcG9uZW50IGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYWxpYXNlcycsICgpID0+IHtcbiAgICBjbGFzcyBEdW1teSBleHRlbmRzIEhvb2sge1xuICAgICAgc3RhdGljIG9ic2VydmVzID0gJ3NlcnZpY2U6ZHVtbXknXG4gICAgfVxuXG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIGF0bGFzLmhvb2soJ2R1bW15JywgRHVtbXkpXG4gICAgfSkudG8udGhyb3coRnJhbWV3b3JrRXJyb3IsIC9NaXNzaW5nIGFsaWFzZXMgZm9yIGNvbXBvbmVudCBkdW1teS91KVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiB1c2VyIGNvbmZpZyBmYWlscyBjb21wb25lbnQgY29uZmlnIHNjaGVtYScsICgpID0+IHtcbiAgICBvcHRpb25zLmNvbmZpZy5ob29rcy5kdW1teSA9IHsgbG9sOiB0cnVlIH1cbiAgICBhdGxhcyA9IG5ldyBBdGxhcyhvcHRpb25zKVxuXG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdGVzdDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaykpLnRvLnRocm93KFZhbGlkYXRpb25FcnJvcilcbiAgfSlcblxuICBpdCgnd29ya3Mgd2hlbiB1c2VyIGNvbmZpZyBwYXNzZXMgY29tcG9uZW50IGNvbmZpZyBzY2hlbWEnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdGVzdDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaykpLm5vdC50by50aHJvdyhWYWxpZGF0aW9uRXJyb3IpXG4gIH0pXG5cbiAgaXQoJ2RvZXMgbm90IHRocm93IGlmIGEgaG9vayBvYnNlcnZlcyB0aGUgYXRsYXMgaW5zdGFuY2UgYW5kIGF0bGFzIGlzIG5vdCBpbiBhbGlhc2VzJywgKCkgPT4ge1xuICAgIGNsYXNzIER1bW15IGV4dGVuZHMgSG9vayB7XG4gICAgICBzdGF0aWMgb2JzZXJ2ZXMgPSAnYXRsYXMnXG4gICAgfVxuXG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIGF0bGFzLmhvb2soJ2R1bW15JywgRHVtbXkpXG4gICAgfSkudG8ubm90LnRocm93KClcbiAgfSlcbn0pXG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImhvb2sudGVzdC5tanMiXSwibmFtZXMiOlsiRHVtbXlIb29rIiwiSG9vayIsImRlc2NyaWJlIiwiYXRsYXMiLCJvcHRpb25zIiwiYmVmb3JlRWFjaCIsInJvb3QiLCJfX2Rpcm5hbWUiLCJjb25maWciLCJob29rcyIsImR1bW15IiwidGVzdCIsIkF0bGFzIiwiaXQiLCJleHBlY3QiLCJob29rIiwidG8iLCJlcXVhbCIsInRocm93IiwiRnJhbWV3b3JrRXJyb3IiLCJzaW5vbiIsInNweSIsImFyZ3MiLCJnZXRDYWxsIiwiaGF2ZSIsInByb3BlcnR5IiwibG9nIiwiYmUiLCJhbiIsImNoaW5kaW5ncyIsIm1hdGNoIiwiY29tcG9uZW50IiwiYSIsImRlZmF1bHRzIiwiZGVmYXVsdCIsInJlcXVpcmVzIiwiYWxpYXNlcyIsIm5vdCIsIkR1bW15IiwibG9sIiwic2FuZGJveCIsInN0dWIiLCJ0eXBlIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwiVmFsaWRhdGlvbkVycm9yIiwiZXJyIiwiY29udGV4dCIsImFsbCIsImtleXMiLCJzY2hlbWEiLCJhbGlhcyJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7QUFDQTs7QUFDQTs7OztBQUtBLE1BQU1BLFNBQU4sU0FBd0JDLGFBQXhCLENBQTZCOztnQkFBdkJELFMsY0FDYyxPOztBQUdwQkUsUUFBUSxDQUFDLGVBQUQsRUFBa0IsTUFBTTtBQUM5QixNQUFJQyxLQUFKO0FBQ0EsTUFBSUMsT0FBSjtBQUVBQyxFQUFBQSxVQUFVLENBQUMsTUFBTTtBQUNmRCxJQUFBQSxPQUFPLEdBQUc7QUFDUkUsTUFBQUEsSUFBSSxFQUFFQyxTQURFO0FBRVJDLE1BQUFBLE1BQU0sRUFBRTtBQUNOQyxRQUFBQSxLQUFLLEVBQUU7QUFDTEMsVUFBQUEsS0FBSyxFQUFFO0FBQ0xDLFlBQUFBLElBQUksRUFBRTtBQUREO0FBREY7QUFERDtBQUZBLEtBQVY7QUFVQVIsSUFBQUEsS0FBSyxHQUFHLElBQUlTLE9BQUosQ0FBVVIs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RkFBRCxFQUFxRixNQUFNO0FBQzNGLFVBQU15QixLQUFOLFNBQW9CckMsYUFBcEIsQ0FBeUI7O0FBRGtFLG9CQUNyRnFDLEtBRHFGLGNBRXZFLE9BRnVFOztBQUszRnhCLElBQUFBLE1BQU0sQ0FBQyxNQUFNO0FBQ1hYLE1BQUFBLEtBQUssQ0FBQ1ksSUFBTixDQUFXLE9BQVgsRUFBb0J1QixLQUFwQjtBQUNELEtBRkssQ0FBTixDQUVHdEIsRUFGSCxDQUVNcUIsR0FGTixDQUVVbkIsS0FGVjtBQUdELEdBUkMsQ0FBRjtBQVNELENBN0xPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdGxhcyB9IGZyb20gJy4uJ1xuaW1wb3J0IEhvb2sgZnJvbSAnQGF0bGFzLmpzL2hvb2snXG5pbXBvcnQge1xuICBGcmFtZXdvcmtFcnJvcixcbiAgVmFsaWRhdGlvbkVycm9yLFxufSBmcm9tICdAYXRsYXMuanMvZXJyb3JzJ1xuXG5jbGFzcyBEdW1teUhvb2sgZXh0ZW5kcyBIb29rIHtcbiAgc3RhdGljIG9ic2VydmVzID0gJ2F0bGFzJ1xufVxuXG5kZXNjcmliZSgnQXRsYXM6Omhvb2soKScsICgpID0+IHtcbiAgbGV0IGF0bGFzXG4gIGxldCBvcHRpb25zXG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIHJvb3Q6IF9fZGlybmFtZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBob29rczoge1xuICAgICAgICAgIGR1bW15OiB7XG4gICAgICAgICAgICB0ZXN0OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cbiAgICBhdGxhcyA9IG5ldyBBdGxhcyhvcHRpb25zKVxuICB9KVxuXG4gIGl0KCdyZXR1cm5zIHRoaXMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGF0bGFzLmhvb2soJ2R1bW15JywgRHVtbXlIb29rKSkudG8uZXF1YWwoYXRsYXMpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIHRoZSBhbGlhcyBoYXMgYWxyZWFkeSBiZWVuIHVzZWQgYnkgYW5vdGhlciBob29rJywgKCkgPT4ge1xuICAgIGF0bGFzLmhvb2soJ2R1bW15JywgRHVtbXlIb29rKVxuICAgIGV4cGVjdCgoKSA9PiBhdGxhcy5ob29rKCdkdW1teScsIER1bW15SG9vaykpLnRvLnRocm93KEZyYW1ld29ya0Vycm9yKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiB0aGUgaG9vayBpcyBub3QgYSBjbGFzcy9mdW5jdGlvbicsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gYXRsYXMuaG9vaygnZHVtbXknLCB7fSkpLnRvLnRocm93KEZyYW1ld29ya0Vycm9yKVxuICB9KVxuXG4gIGl0KCdwcm92aWRlcyB0aGUgYXRsYXMgb24gaG9vayBjb25zdHJ1Y3RvciBhcmd1bWVudCcsICgpID0+IHtcbiAgICBjb25zdCBob29rID0gc2lub24uc3B5KClcbiAgICBob29rLmNvbmZpZyA9IHt9XG4gICAgYXRsYXMuaG9vaygnZHVtbXknLCBob29rKVxuICAgIGNvbnN0IGFyZ3MgPSBob29rLmdldENhbGwoMCkuYXJnc1swXVxuXG4gICAgZXhwZWN0KGFyZ3MpLnRvLmhhdmUucHJvcGVydHkoJ2F0bGFzJylcbiAgICBleHBlY3QoYXJncy5hdGxhcykudG8uZXF1YWwoYXRsYXMpXG4gIH0pXG5cbiAgaXQoJ3Byb3ZpZGVzIGEgbG9nZ2VyIGluc3RhbmNlIG9uIGhvb2sgY29uc3RydWN0b3IgYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7fVxuICAgIGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaylcbiAgICBjb25zdCBhcmdzID0gaG9vay5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzKS50by5oYXZlLnByb3BlcnR5KCdsb2cnKVxuICAgIGV4cGVjdChhcmdzLmxvZykudG8uYmUuYW4oJ29iamVjdCcpXG4gICAgZXhwZWN0KGFyZ3MubG9nLmNoaW5kaW5ncykudG8ubWF0Y2goL1wiaG9va1wiOlwiZHVtbXlcIi91KVxuICB9KVxuXG4gIGl0KCdwcm92aWRlcyBjb25maWcgb2JqZWN0IG9uIGhvb2sgY29uc3RydWN0b3IgYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9vayA9IHNpbm9uLnNweSgpXG4gICAgaG9vay5jb25maWcgPSB7fVxuICAgIGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaylcbiAgICBjb25zdCBhcmdzID0gaG9vay5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzKS50by5oYXZlLnByb3BlcnR5KCdjb25maWcnKVxuICAgIGV4cGVjdChhcmdzLmNvbmZpZykudG8uYmUuYW4oJ29iamVjdCcpXG4gICAgZXhwZWN0KGFyZ3MuY29uZmlnKS50by5lcXVhbChvcHRpb25zLmNvbmZpZy5ob29rcy5kdW1teSlcbiAgfSlcblxuICBpdCgncHJvdmlkZXMgdGhlIHJlc29sdmUgZnVuY3Rpb24gb24gaG9vayBjb25zdHJ1Y3RvciBhcmd1bWVudCBhcyBgY29tcG9uZW50YCcsICgpID0+IHtcbiAgICBjb25zdCBob29rID0gc2lub24uc3B5KClcbiAgICBob29rLmNvbmZpZyA9IHt9XG4gICAgYXRsYXMuaG9vaygnZHVtbXknLCBob29rKVxuICAgIGNvbnN0IGFyZ3MgPSBob29rLmdldENhbGwoMCkuYXJnc1swXVxuXG4gICAgZXhwZWN0KGFyZ3MpLnRvLmhhdmUucHJvcGVydHkoJ2NvbXBvbmVudCcpXG4gICAgZXhwZWN0KGFyZ3MuY29tcG9uZW50KS50by5iZS5hKCdmdW5jdGlvbicpXG4gIH0pXG5cbiAgaXQoJ2FwcGxpZXMgZGVmYXVsdHMgZGVmaW5lZCBvbiBob29rIG9uIHRvcCBvZiB1c2VyLXByb3ZpZGVkIGNvbmZpZycsICgpID0+IHtcbiAgICBjb25zdCBob29rID0gc2lub24uc3B5KClcbiAgICBob29rLmNvbmZpZyA9IHt9XG4gICAgaG9vay5kZWZhdWx0cyA9IHsgZGVmYXVsdDogdHJ1ZSB9XG4gICAgYXRsYXMuaG9vaygnZHVtbXknLCBob29rKVxuICAgIGNvbnN0IGFyZ3MgPSBob29rLmdldENhbGwoMCkuYXJnc1swXVxuXG4gICAgZXhwZWN0KGFyZ3MuY29uZmlnKS50by5oYXZlLnByb3BlcnR5KCdkZWZhdWx0JywgdHJ1ZSlcbiAgfSlcblxuICBpdCgndGhyb3dzIHdoZW4gYWxpYXNlcyBkbyBub3Qgc2F0aXNmeSByZXF1aXJlbWVudHMgb2YgdGhlIGNvbXBvbmVudCcsICgpID0+IHtcbiAgICBjb25zdCBob29rID0gc2lub24uc3B5KClcbiAgICBob29rLmNvbmZpZyA9IHt9XG4gICAgaG9vay5yZXF1aXJlcyA9IFsnc2VydmljZTpkdW1teScsICdhY3Rpb246ZHVtbXknXVxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBhdGxhcy5ob29rKCdkdW1teScsIGhvb2spXG4gICAgfSkudG8udGhyb3coRnJhbWV3b3JrRXJyb3IsIC9NaXNzaW5nIGFsaWFzZXMgZm9yIGNvbXBvbmVudCBkdW1teS91KVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiBleHRyYW5lb3VzIGFsaWFzZXMgYXJlIHNwZWNpZmllZCcsICgpID0+IHtcbiAgICBjb25zdCBob29rID0gc2lub24uc3B5KClcbiAgICBob29rLmNvbmZpZyA9IHt9XG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaywgeyBhbGlhc2VzOiB7XG4gICAgICAgICdzZXJ2aWNlOmR1bW15JzogJ2R1bW15JyxcbiAgICAgIH0gfSlcbiAgICB9KS50by50aHJvdyhGcmFtZXdvcmtFcnJvciwgL1VubmVlZGVkIGFsaWFzZXMgZm9yIGNvbXBvbmVudCBkdW1teS91KVxuICB9KVxuXG4gIGl0KCd3b3JrcyB3aGVuIGFsbCByZXF1aXJlbWVudHMgYXJlIHNwZWNpZmllZCcsICgpID0+IHtcbiAgICBjb25zdCBob29rID0gc2lub24uc3B5KClcbiAgICBob29rLmNvbmZpZyA9IHt9XG4gICAgaG9vay5yZXF1aXJlcyA9IFsnc2VydmljZTpkdW1teScsICdhY3Rpb246ZHVtbXknXVxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBhdGxhcy5ob29rKCdkdW1teScsIGhvb2ssIHsgYWxpYXNlczoge1xuICAgICAgICAnc2VydmljZTpkdW1teSc6ICdkdW1teScsXG4gICAgICAgICdhY3Rpb246ZHVtbXknOiAnZHVtbXknLFxuICAgICAgfSB9KVxuICAgIH0pLnRvLm5vdC50aHJvdygpXG4gIH0pXG5cbiAgaXQoJ2RvZXMgbm90IHRocm93IHdoZW4gYWxpYXNlcyBpbmNsdWRlIHRoZSBvYnNlcnZlZCBjb21wb25lbnQnLCAoKSA9PiB7XG4gICAgY2xhc3MgRHVtbXkgZXh0ZW5kcyBIb29rIHtcbiAgICAgIHN0YXRpYyBvYnNlcnZlcyA9ICdzZXJ2aWNlOmR1bW15J1xuICAgIH1cblxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBhdGxhcy5ob29rKCdkdW1teScsIER1bW15LCB7IGFsaWFzZXM6IHtcbiAgICAgICAgJ3NlcnZpY2U6ZHVtbXknOiAnZHVtbXknLFxuICAgICAgfSB9KVxuICAgIH0pLnRvLm5vdC50aHJvdygpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIHRoZSBvYnNlcnZlZCBjb21wb25lbnQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhbGlhc2VzJywgKCkgPT4ge1xuICAgIGNsYXNzIER1bW15IGV4dGVuZHMgSG9vayB7XG4gICAgICBzdGF0aWMgb2JzZXJ2ZXMgPSAnc2VydmljZTpkdW1teSdcbiAgICB9XG5cbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgYXRsYXMuaG9vaygnZHVtbXknLCBEdW1teSlcbiAgICB9KS50by50aHJvdyhGcmFtZXdvcmtFcnJvciwgL01pc3NpbmcgYWxpYXNlcyBmb3IgY29tcG9uZW50IGR1bW15L3UpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIHVzZXIgY29uZmlnIGZhaWxzIGNvbXBvbmVudCBjb25maWcgc2NoZW1hJywgZnVuY3Rpb24oKSB7XG4gICAgb3B0aW9ucy5jb25maWcuaG9va3MuZHVtbXkgPSB7IGxvbDogdHJ1ZSB9XG4gICAgYXRsYXMgPSBuZXcgQXRsYXMob3B0aW9ucylcbiAgICB0aGlzLnNhbmRib3guc3R1YihhdGxhcy5sb2csICdlcnJvcicpXG5cbiAgICBjb25zdCBob29rID0gc2lub24uc3B5KClcbiAgICBob29rLmNvbmZpZyA9IHtcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICB0ZXN0OiB7IHR5cGU6ICdib29sZWFuJyB9LFxuICAgICAgfSxcbiAgICB9XG5cbiAgICBleHBlY3QoKCkgPT4gYXRsYXMuaG9vaygnZHVtbXknLCBob29rKSkudG8udGhyb3coVmFsaWRhdGlvbkVycm9yKVxuXG4gICAgdHJ5IHtcbiAgICAgIGF0bGFzLmhvb2soJ2R1bW15JywgaG9vaylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGV4cGVjdChlcnIuY29udGV4dCkudG8uaGF2ZS5hbGwua2V5cyhbXG4gICAgICAgICd0eXBlJyxcbiAgICAgICAgJ2FsaWFzJyxcbiAgICAgICAgJ3NjaGVtYScsXG4gICAgICAgICdjb25maWcnLFxuICAgICAgXSlcbiAgICAgIGV4cGVjdChlcnIuY29udGV4dC5zY2hlbWEpLnRvLmVxdWFsKGhvb2suY29uZmlnKVxuICAgICAgZXhwZWN0KGVyci5jb250ZXh0LmNvbmZpZykudG8uZXF1YWwob3B0aW9ucy5jb25maWcuaG9va3MuZHVtbXkpXG4gICAgICBleHBlY3QoZXJyLmNvbnRleHQuYWxpYXMpLnRvLmVxdWFsKCdkdW1teScpXG4gICAgfVxuICB9KVxuXG4gIGl0KCd3b3JrcyB3aGVuIHVzZXIgY29uZmlnIHBhc3NlcyBjb21wb25lbnQgY29uZmlnIHNjaGVtYScsICgpID0+IHtcbiAgICBjb25zdCBob29rID0gc2lub24uc3B5KClcbiAgICBob29rLmNvbmZpZyA9IHtcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICB0ZXN0OiB7IHR5cGU6ICdib29sZWFuJyB9LFxuICAgICAgfSxcbiAgICB9XG5cbiAgICBleHBlY3QoKCkgPT4gYXRsYXMuaG9vaygnZHVtbXknLCBob29rKSkubm90LnRvLnRocm93KFZhbGlkYXRpb25FcnJvcilcbiAgfSlcblxuICBpdCgnZG9lcyBub3QgdGhyb3cgaWYgYSBob29rIG9ic2VydmVzIHRoZSBhdGxhcyBpbnN0YW5jZSBhbmQgYXRsYXMgaXMgbm90IGluIGFsaWFzZXMnLCAoKSA9PiB7XG4gICAgY2xhc3MgRHVtbXkgZXh0ZW5kcyBIb29rIHtcbiAgICAgIHN0YXRpYyBvYnNlcnZlcyA9ICdhdGxhcydcbiAgICB9XG5cbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgYXRsYXMuaG9vaygnZHVtbXknLCBEdW1teSlcbiAgICB9KS50by5ub3QudGhyb3coKVxuICB9KVxufSlcbiJdfQ==

@@ -99,3 +99,3 @@ "use strict";

});
it('throws when user config fails component config schema', () => {
it('throws when user config fails component config schema', function () {
options.config.services.dummy = {

@@ -105,2 +105,3 @@ lol: true

atlas = new _.Atlas(options);
this.sandbox.stub(atlas.log, 'error');
const service = sinon.spy();

@@ -117,2 +118,11 @@ service.config = {

expect(() => atlas.service('dummy', service)).to.throw(_errors.ValidationError);
try {
atlas.service('dummy', service);
} catch (err) {
expect(err.context).to.have.all.keys(['type', 'alias', 'schema', 'config']);
expect(err.context.schema).to.equal(service.config);
expect(err.context.config).to.equal(options.config.services.dummy);
expect(err.context.alias).to.equal('dummy');
}
});

@@ -146,2 +156,2 @@ it('works when user config passes component config schema', () => {

});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNlcnZpY2UudGVzdC5tanMiXSwibmFtZXMiOlsiRHVtbXlTZXJ2aWNlIiwiU2VydmljZSIsImRlc2NyaWJlIiwiYXRsYXMiLCJvcHRpb25zIiwiYmVmb3JlRWFjaCIsInJvb3QiLCJfX2Rpcm5hbWUiLCJjb25maWciLCJzZXJ2aWNlcyIsImR1bW15IiwidGVzdCIsIkF0bGFzIiwiaXQiLCJleHBlY3QiLCJzZXJ2aWNlIiwidG8iLCJlcXVhbCIsInRocm93IiwiRnJhbWV3b3JrRXJyb3IiLCJzaW5vbiIsInNweSIsImFyZ3MiLCJnZXRDYWxsIiwiaGF2ZSIsInByb3BlcnR5IiwibG9nIiwiYmUiLCJhbiIsImNoaW5kaW5ncyIsIm1hdGNoIiwiY29tcG9uZW50IiwiYSIsImRlZmF1bHRzIiwiZGVmYXVsdCIsInJlcXVpcmVzIiwiYWxpYXNlcyIsImxvbCIsInR5cGUiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsInByb3BlcnRpZXMiLCJWYWxpZGF0aW9uRXJyb3IiLCJub3QiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBQ0E7O0FBSUE7O0FBRUEsTUFBTUEsWUFBTixTQUEyQkMsZ0JBQTNCLENBQW1DOztBQUVuQ0MsUUFBUSxDQUFDLGtCQUFELEVBQXFCLE1BQU07QUFDakMsTUFBSUMsS0FBSjtBQUNBLE1BQUlDLE9BQUo7QUFFQUMsRUFBQUEsVUFBVSxDQUFDLE1BQU07QUFDZkQsSUFBQUEsT0FBTyxHQUFHO0FBQ1JFLE1BQUFBLElBQUksRUFBRUMsU0FERTtBQUVSQyxNQUFBQSxNQUFNLEVBQUU7QUFDTkMsUUFBQUEsUUFBUSxFQUFFO0FBQ1JDLFVBQUFBLEtBQUssRUFBRTtBQUNMQyxZQUFBQSxJQUFJLEVBQUU7QUFERDtBQURDO0FBREo7QUFGQSxLQUFWO0FBVUFSLElBQUFBLEtBQUssR0FBRyxJQUFJUyxPQUFKLENBQVVSLE9BQVYsQ0FBUjtBQUNELEdBWlMsQ0FBVjtBQWNBUyxFQUFBQSxFQUFFLENBQUMsY0FBRCxFQUFpQixNQUFNO0FBQ3ZCQyxJQUFB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RCxDQUFxREUsS0FBckQsQ0FBMkR1Qix1QkFBM0Q7QUFDRCxHQVhDLENBQUY7QUFhQTVCLEVBQUFBLEVBQUUsQ0FBQywyQ0FBRCxFQUE4QyxNQUFNO0FBQ3BELFVBQU1FLE9BQU8sR0FBR0ssS0FBSyxDQUFDQyxHQUFOLEVBQWhCO0FBQ0FOLElBQUFBLE9BQU8sQ0FBQ1AsTUFBUixHQUFpQixFQUFqQjtBQUNBTyxJQUFBQSxPQUFPLENBQUNvQixRQUFSLEdBQW1CLENBQUMsZUFBRCxFQUFrQixjQUFsQixDQUFuQjtBQUNBckIsSUFBQUEsTUFBTSxDQUFDLE1BQU07QUFDWFgsTUFBQUEsS0FBSyxDQUFDWSxPQUFOLENBQWMsT0FBZCxFQUF1QkEsT0FBdkIsRUFBZ0M7QUFBRXFCLFFBQUFBLE9BQU8sRUFBRTtBQUN6QywyQkFBaUIsT0FEd0I7QUFFekMsMEJBQWdCO0FBRnlCO0FBQVgsT0FBaEM7QUFJRCxLQUxLLENBQU4sQ0FLR3BCLEVBTEgsQ0FLTTBCLEdBTE4sQ0FLVXhCLEtBTFY7QUFNRCxHQVZDLENBQUY7QUFXRCxDQTdJTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXRsYXMgfSBmcm9tICcuLidcbmltcG9ydCB7XG4gIEZyYW1ld29ya0Vycm9yLFxuICBWYWxpZGF0aW9uRXJyb3IsXG59IGZyb20gJ0BhdGxhcy5qcy9lcnJvcnMnXG5pbXBvcnQgU2VydmljZSBmcm9tICdAYXRsYXMuanMvc2VydmljZSdcblxuY2xhc3MgRHVtbXlTZXJ2aWNlIGV4dGVuZHMgU2VydmljZSB7fVxuXG5kZXNjcmliZSgnQXRsYXM6OnNlcnZpY2UoKScsICgpID0+IHtcbiAgbGV0IGF0bGFzXG4gIGxldCBvcHRpb25zXG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIHJvb3Q6IF9fZGlybmFtZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBzZXJ2aWNlczoge1xuICAgICAgICAgIGR1bW15OiB7XG4gICAgICAgICAgICB0ZXN0OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cbiAgICBhdGxhcyA9IG5ldyBBdGxhcyhvcHRpb25zKVxuICB9KVxuXG4gIGl0KCdyZXR1cm5zIHRoaXMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKSkudG8uZXF1YWwoYXRsYXMpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIHRoZSBhbGlhcyBoYXMgYWxyZWFkeSBiZWVuIHVzZWQgYnkgYW5vdGhlciBzZXJ2aWNlJywgKCkgPT4ge1xuICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKVxuICAgIGV4cGVjdCgoKSA9PiBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIER1bW15U2VydmljZSkpLnRvLnRocm93KEZyYW1ld29ya0Vycm9yKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiB0aGUgc2VydmljZSBpcyBub3QgYSBjbGFzcy9mdW5jdGlvbicsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gYXRsYXMuc2VydmljZSgnZHVtbXknLCB7fSkpLnRvLnRocm93KEZyYW1ld29ya0Vycm9yKVxuICB9KVxuXG4gIGl0KCdwcm92aWRlcyB0aGUgYXRsYXMgb24gc2VydmljZSBjb25zdHJ1Y3RvciBhcmd1bWVudCcsICgpID0+IHtcbiAgICBjb25zdCBzZXJ2aWNlID0gc2lub24uc3B5KClcbiAgICBzZXJ2aWNlLmNvbmZpZyA9IHt9XG4gICAgYXRsYXMuc2VydmljZSgnZHVtbXknLCBzZXJ2aWNlKVxuICAgIGNvbnN0IGFyZ3MgPSBzZXJ2aWNlLmdldENhbGwoMCkuYXJnc1swXVxuXG4gICAgZXhwZWN0KGFyZ3MpLnRvLmhhdmUucHJvcGVydHkoJ2F0bGFzJylcbiAgICBleHBlY3QoYXJncy5hdGxhcykudG8uZXF1YWwoYXRsYXMpXG4gIH0pXG5cbiAgaXQoJ3Byb3ZpZGVzIGEgbG9nZ2VyIGluc3RhbmNlIG9uIHNlcnZpY2UgY29uc3RydWN0b3IgYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmljZSA9IHNpbm9uLnNweSgpXG4gICAgc2VydmljZS5jb25maWcgPSB7fVxuICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15Jywgc2VydmljZSlcbiAgICBjb25zdCBhcmdzID0gc2VydmljZS5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzKS50by5oYXZlLnByb3BlcnR5KCdsb2cnKVxuICAgIGV4cGVjdChhcmdzLmxvZykudG8uYmUuYW4oJ29iamVjdCcpXG4gICAgZXhwZWN0KGFyZ3MubG9nLmNoaW5kaW5ncykudG8ubWF0Y2goL1wic2VydmljZVwiOlwiZHVtbXlcIi91KVxuICB9KVxuXG4gIGl0KCdwcm92aWRlcyBjb25maWcgb2JqZWN0IG9uIHNlcnZpY2UgY29uc3RydWN0b3IgYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmljZSA9IHNpbm9uLnNweSgpXG4gICAgc2VydmljZS5jb25maWcgPSB7fVxuICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15Jywgc2VydmljZSlcbiAgICBjb25zdCBhcmdzID0gc2VydmljZS5nZXRDYWxsKDApLmFyZ3NbMF1cblxuICAgIGV4cGVjdChhcmdzKS50by5oYXZlLnByb3BlcnR5KCdjb25maWcnKVxuICAgIGV4cGVjdChhcmdzLmNvbmZpZykudG8uYmUuYW4oJ29iamVjdCcpXG4gICAgZXhwZWN0KGFyZ3MuY29uZmlnKS50by5lcXVhbChvcHRpb25zLmNvbmZpZy5zZXJ2aWNlcy5kdW1teSlcbiAgfSlcblxuICBpdCgncHJvdmlkZXMgdGhlIHJlc29sdmUgZnVuY3Rpb24gb24gc2VydmljZSBjb25zdHJ1Y3RvciBhcmd1bWVudCBhcyBgY29tcG9uZW50YCcsICgpID0+IHtcbiAgICBjb25zdCBzZXJ2aWNlID0gc2lub24uc3B5KClcbiAgICBzZXJ2aWNlLmNvbmZpZyA9IHt9XG4gICAgYXRsYXMuc2VydmljZSgnZHVtbXknLCBzZXJ2aWNlKVxuICAgIGNvbnN0IGFyZ3MgPSBzZXJ2aWNlLmdldENhbGwoMCkuYXJnc1swXVxuXG4gICAgZXhwZWN0KGFyZ3MpLnRvLmhhdmUucHJvcGVydHkoJ2NvbXBvbmVudCcpXG4gICAgZXhwZWN0KGFyZ3MuY29tcG9uZW50KS50by5iZS5hKCdmdW5jdGlvbicpXG4gIH0pXG5cbiAgaXQoJ2FwcGxpZXMgZGVmYXVsdHMgZGVmaW5lZCBvbiBzZXJ2aWNlIG9uIHRvcCBvZiB1c2VyLXByb3ZpZGVkIGNvbmZpZycsICgpID0+IHtcbiAgICBjb25zdCBzZXJ2aWNlID0gc2lub24uc3B5KClcbiAgICBzZXJ2aWNlLmNvbmZpZyA9IHt9XG4gICAgc2VydmljZS5kZWZhdWx0cyA9IHsgZGVmYXVsdDogdHJ1ZSB9XG4gICAgYXRsYXMuc2VydmljZSgnZHVtbXknLCBzZXJ2aWNlKVxuICAgIGNvbnN0IGFyZ3MgPSBzZXJ2aWNlLmdldENhbGwoMCkuYXJnc1swXVxuXG4gICAgZXhwZWN0KGFyZ3MuY29uZmlnKS50by5oYXZlLnByb3BlcnR5KCdkZWZhdWx0JywgdHJ1ZSlcbiAgfSlcblxuICBpdCgndGhyb3dzIHdoZW4gYWxpYXNlcyBkbyBub3Qgc2F0aXNmeSByZXF1aXJlbWVudHMgb2YgdGhlIGNvbXBvbmVudCcsICgpID0+IHtcbiAgICBjb25zdCBzZXJ2aWNlID0gc2lub24uc3B5KClcbiAgICBzZXJ2aWNlLmNvbmZpZyA9IHt9XG4gICAgc2VydmljZS5yZXF1aXJlcyA9IFsnc2VydmljZTpkdW1teScsICdhY3Rpb246ZHVtbXknXVxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIHNlcnZpY2UpXG4gICAgfSkudG8udGhyb3coRnJhbWV3b3JrRXJyb3IsIC9NaXNzaW5nIGFsaWFzZXMgZm9yIGNvbXBvbmVudCBkdW1teS91KVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiBleHRyYW5lb3VzIGFsaWFzZXMgYXJlIHNwZWNpZmllZCcsICgpID0+IHtcbiAgICBjb25zdCBzZXJ2aWNlID0gc2lub24uc3B5KClcbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgYXRsYXMuc2VydmljZSgnZHVtbXknLCBzZXJ2aWNlLCB7IGFsaWFzZXM6IHtcbiAgICAgICAgJ2FjdGlvbjpkdW1teSc6ICdkdW1teScsXG4gICAgICB9IH0pXG4gICAgfSkudG8udGhyb3coRnJhbWV3b3JrRXJyb3IsIC9Vbm5lZWRlZCBhbGlhc2VzIGZvciBjb21wb25lbnQgZHVtbXkvdSlcbiAgfSlcblxuICBpdCgndGhyb3dzIHdoZW4gdXNlciBjb25maWcgZmFpbHMgY29tcG9uZW50IGNvbmZpZyBzY2hlbWEnLCAoKSA9PiB7XG4gICAgb3B0aW9ucy5jb25maWcuc2VydmljZXMuZHVtbXkgPSB7IGxvbDogdHJ1ZSB9XG4gICAgYXRsYXMgPSBuZXcgQXRsYXMob3B0aW9ucylcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBzaW5vbi5zcHkoKVxuICAgIHNlcnZpY2UuY29uZmlnID0ge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHRlc3Q6IHsgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGV4cGVjdCgoKSA9PiBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIHNlcnZpY2UpKS50by50aHJvdyhWYWxpZGF0aW9uRXJyb3IpXG4gIH0pXG5cbiAgaXQoJ3dvcmtzIHdoZW4gdXNlciBjb25maWcgcGFzc2VzIGNvbXBvbmVudCBjb25maWcgc2NoZW1hJywgKCkgPT4ge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBzaW5vbi5zcHkoKVxuICAgIHNlcnZpY2UuY29uZmlnID0ge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHRlc3Q6IHsgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGV4cGVjdCgoKSA9PiBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIHNlcnZpY2UpKS5ub3QudG8udGhyb3coVmFsaWRhdGlvbkVycm9yKVxuICB9KVxuXG4gIGl0KCd3b3JrcyB3aGVuIGFsbCByZXF1aXJlbWVudHMgYXJlIHNwZWNpZmllZCcsICgpID0+IHtcbiAgICBjb25zdCBzZXJ2aWNlID0gc2lub24uc3B5KClcbiAgICBzZXJ2aWNlLmNvbmZpZyA9IHt9XG4gICAgc2VydmljZS5yZXF1aXJlcyA9IFsnc2VydmljZTpkdW1teScsICdhY3Rpb246ZHVtbXknXVxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIHNlcnZpY2UsIHsgYWxpYXNlczoge1xuICAgICAgICAnc2VydmljZTpkdW1teSc6ICdkdW1teScsXG4gICAgICAgICdhY3Rpb246ZHVtbXknOiAnZHVtbXknLFxuICAgICAgfSB9KVxuICAgIH0pLnRvLm5vdC50aHJvdygpXG4gIH0pXG59KVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNlcnZpY2UudGVzdC5tanMiXSwibmFtZXMiOlsiRHVtbXlTZXJ2aWNlIiwiU2VydmljZSIsImRlc2NyaWJlIiwiYXRsYXMiLCJvcHRpb25zIiwiYmVmb3JlRWFjaCIsInJvb3QiLCJfX2Rpcm5hbWUiLCJjb25maWciLCJzZXJ2aWNlcyIsImR1bW15IiwidGVzdCIsIkF0bGFzIiwiaXQiLCJleHBlY3QiLCJzZXJ2aWNlIiwidG8iLCJlcXVhbCIsInRocm93IiwiRnJhbWV3b3JrRXJyb3IiLCJzaW5vbiIsInNweSIsImFyZ3MiLCJnZXRDYWxsIiwiaGF2ZSIsInByb3BlcnR5IiwibG9nIiwiYmUiLCJhbiIsImNoaW5kaW5ncyIsIm1hdGNoIiwiY29tcG9uZW50IiwiYSIsImRlZmF1bHRzIiwiZGVmYXVsdCIsInJlcXVpcmVzIiwiYWxpYXNlcyIsImxvbCIsInNhbmRib3giLCJzdHViIiwidHlwZSIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsIlZhbGlkYXRpb25FcnJvciIsImVyciIsImNvbnRleHQiLCJhbGwiLCJrZXlzIiwic2NoZW1hIiwiYWxpYXMiLCJub3QiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBQ0E7O0FBSUE7O0FBRUEsTUFBTUEsWUFBTixTQUEyQkMsZ0JBQTNCLENBQW1DOztBQUVuQ0MsUUFBUSxDQUFDLGtCQUFELEVBQXFCLE1BQU07QUFDakMsTUFBSUMsS0FBSjtBQUNBLE1BQUlDLE9BQUo7QUFFQUMsRUFBQUEsVUFBVSxDQUFDLE1BQU07QUFDZkQsSUFBQUEsT0FBTyxHQUFHO0FBQ1JFLE1BQUFBLElBQUksRUFBRUMsU0FERTtBQUVSQyxNQUFBQSxNQUFNLEVBQUU7QUFDTkMsUUFBQUEsUUFBUSxFQUFFO0FBQ1JDLFVBQUFBLEtBQUssRUFBRTtBQUNMQyxZQUFBQSxJQUFJLEVBQUU7QUFERDtBQURDO0FBREo7QUFGQSxLQUFWO0FBVUFSLElBQUFBLEtBQUssR0FBRyxJQUFJUyxPQUFKLENBQVVSLE9BQVYsQ0FBUjtB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QUFBLE9BQU8sQ0FBQ29CLFFBQVIsR0FBbUIsQ0FBQyxlQUFELEVBQWtCLGNBQWxCLENBQW5CO0FBQ0FyQixJQUFBQSxNQUFNLENBQUMsTUFBTTtBQUNYWCxNQUFBQSxLQUFLLENBQUNZLE9BQU4sQ0FBYyxPQUFkLEVBQXVCQSxPQUF2QixFQUFnQztBQUFFcUIsUUFBQUEsT0FBTyxFQUFFO0FBQ3pDLDJCQUFpQixPQUR3QjtBQUV6QywwQkFBZ0I7QUFGeUI7QUFBWCxPQUFoQztBQUlELEtBTEssQ0FBTixDQUtHcEIsRUFMSCxDQUtNa0MsR0FMTixDQUtVaEMsS0FMVjtBQU1ELEdBVkMsQ0FBRjtBQVdELENBNUpPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdGxhcyB9IGZyb20gJy4uJ1xuaW1wb3J0IHtcbiAgRnJhbWV3b3JrRXJyb3IsXG4gIFZhbGlkYXRpb25FcnJvcixcbn0gZnJvbSAnQGF0bGFzLmpzL2Vycm9ycydcbmltcG9ydCBTZXJ2aWNlIGZyb20gJ0BhdGxhcy5qcy9zZXJ2aWNlJ1xuXG5jbGFzcyBEdW1teVNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHt9XG5cbmRlc2NyaWJlKCdBdGxhczo6c2VydmljZSgpJywgKCkgPT4ge1xuICBsZXQgYXRsYXNcbiAgbGV0IG9wdGlvbnNcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgcm9vdDogX19kaXJuYW1lLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIHNlcnZpY2VzOiB7XG4gICAgICAgICAgZHVtbXk6IHtcbiAgICAgICAgICAgIHRlc3Q6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuICAgIGF0bGFzID0gbmV3IEF0bGFzKG9wdGlvbnMpXG4gIH0pXG5cbiAgaXQoJ3JldHVybnMgdGhpcycsICgpID0+IHtcbiAgICBleHBlY3QoYXRsYXMuc2VydmljZSgnZHVtbXknLCBEdW1teVNlcnZpY2UpKS50by5lcXVhbChhdGxhcylcbiAgfSlcblxuICBpdCgndGhyb3dzIHdoZW4gdGhlIGFsaWFzIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBieSBhbm90aGVyIHNlcnZpY2UnLCAoKSA9PiB7XG4gICAgYXRsYXMuc2VydmljZSgnZHVtbXknLCBEdW1teVNlcnZpY2UpXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKSkudG8udGhyb3coRnJhbWV3b3JrRXJyb3IpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIHRoZSBzZXJ2aWNlIGlzIG5vdCBhIGNsYXNzL2Z1bmN0aW9uJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIHt9KSkudG8udGhyb3coRnJhbWV3b3JrRXJyb3IpXG4gIH0pXG5cbiAgaXQoJ3Byb3ZpZGVzIHRoZSBhdGxhcyBvbiBzZXJ2aWNlIGNvbnN0cnVjdG9yIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBzaW5vbi5zcHkoKVxuICAgIHNlcnZpY2UuY29uZmlnID0ge31cbiAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIHNlcnZpY2UpXG4gICAgY29uc3QgYXJncyA9IHNlcnZpY2UuZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncykudG8uaGF2ZS5wcm9wZXJ0eSgnYXRsYXMnKVxuICAgIGV4cGVjdChhcmdzLmF0bGFzKS50by5lcXVhbChhdGxhcylcbiAgfSlcblxuICBpdCgncHJvdmlkZXMgYSBsb2dnZXIgaW5zdGFuY2Ugb24gc2VydmljZSBjb25zdHJ1Y3RvciBhcmd1bWVudCcsICgpID0+IHtcbiAgICBjb25zdCBzZXJ2aWNlID0gc2lub24uc3B5KClcbiAgICBzZXJ2aWNlLmNvbmZpZyA9IHt9XG4gICAgYXRsYXMuc2VydmljZSgnZHVtbXknLCBzZXJ2aWNlKVxuICAgIGNvbnN0IGFyZ3MgPSBzZXJ2aWNlLmdldENhbGwoMCkuYXJnc1swXVxuXG4gICAgZXhwZWN0KGFyZ3MpLnRvLmhhdmUucHJvcGVydHkoJ2xvZycpXG4gICAgZXhwZWN0KGFyZ3MubG9nKS50by5iZS5hbignb2JqZWN0JylcbiAgICBleHBlY3QoYXJncy5sb2cuY2hpbmRpbmdzKS50by5tYXRjaCgvXCJzZXJ2aWNlXCI6XCJkdW1teVwiL3UpXG4gIH0pXG5cbiAgaXQoJ3Byb3ZpZGVzIGNvbmZpZyBvYmplY3Qgb24gc2VydmljZSBjb25zdHJ1Y3RvciBhcmd1bWVudCcsICgpID0+IHtcbiAgICBjb25zdCBzZXJ2aWNlID0gc2lub24uc3B5KClcbiAgICBzZXJ2aWNlLmNvbmZpZyA9IHt9XG4gICAgYXRsYXMuc2VydmljZSgnZHVtbXknLCBzZXJ2aWNlKVxuICAgIGNvbnN0IGFyZ3MgPSBzZXJ2aWNlLmdldENhbGwoMCkuYXJnc1swXVxuXG4gICAgZXhwZWN0KGFyZ3MpLnRvLmhhdmUucHJvcGVydHkoJ2NvbmZpZycpXG4gICAgZXhwZWN0KGFyZ3MuY29uZmlnKS50by5iZS5hbignb2JqZWN0JylcbiAgICBleHBlY3QoYXJncy5jb25maWcpLnRvLmVxdWFsKG9wdGlvbnMuY29uZmlnLnNlcnZpY2VzLmR1bW15KVxuICB9KVxuXG4gIGl0KCdwcm92aWRlcyB0aGUgcmVzb2x2ZSBmdW5jdGlvbiBvbiBzZXJ2aWNlIGNvbnN0cnVjdG9yIGFyZ3VtZW50IGFzIGBjb21wb25lbnRgJywgKCkgPT4ge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBzaW5vbi5zcHkoKVxuICAgIHNlcnZpY2UuY29uZmlnID0ge31cbiAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIHNlcnZpY2UpXG4gICAgY29uc3QgYXJncyA9IHNlcnZpY2UuZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncykudG8uaGF2ZS5wcm9wZXJ0eSgnY29tcG9uZW50JylcbiAgICBleHBlY3QoYXJncy5jb21wb25lbnQpLnRvLmJlLmEoJ2Z1bmN0aW9uJylcbiAgfSlcblxuICBpdCgnYXBwbGllcyBkZWZhdWx0cyBkZWZpbmVkIG9uIHNlcnZpY2Ugb24gdG9wIG9mIHVzZXItcHJvdmlkZWQgY29uZmlnJywgKCkgPT4ge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBzaW5vbi5zcHkoKVxuICAgIHNlcnZpY2UuY29uZmlnID0ge31cbiAgICBzZXJ2aWNlLmRlZmF1bHRzID0geyBkZWZhdWx0OiB0cnVlIH1cbiAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIHNlcnZpY2UpXG4gICAgY29uc3QgYXJncyA9IHNlcnZpY2UuZ2V0Q2FsbCgwKS5hcmdzWzBdXG5cbiAgICBleHBlY3QoYXJncy5jb25maWcpLnRvLmhhdmUucHJvcGVydHkoJ2RlZmF1bHQnLCB0cnVlKVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiBhbGlhc2VzIGRvIG5vdCBzYXRpc2Z5IHJlcXVpcmVtZW50cyBvZiB0aGUgY29tcG9uZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBzaW5vbi5zcHkoKVxuICAgIHNlcnZpY2UuY29uZmlnID0ge31cbiAgICBzZXJ2aWNlLnJlcXVpcmVzID0gWydzZXJ2aWNlOmR1bW15JywgJ2FjdGlvbjpkdW1teSddXG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15Jywgc2VydmljZSlcbiAgICB9KS50by50aHJvdyhGcmFtZXdvcmtFcnJvciwgL01pc3NpbmcgYWxpYXNlcyBmb3IgY29tcG9uZW50IGR1bW15L3UpXG4gIH0pXG5cbiAgaXQoJ3Rocm93cyB3aGVuIGV4dHJhbmVvdXMgYWxpYXNlcyBhcmUgc3BlY2lmaWVkJywgKCkgPT4ge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBzaW5vbi5zcHkoKVxuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIHNlcnZpY2UsIHsgYWxpYXNlczoge1xuICAgICAgICAnYWN0aW9uOmR1bW15JzogJ2R1bW15JyxcbiAgICAgIH0gfSlcbiAgICB9KS50by50aHJvdyhGcmFtZXdvcmtFcnJvciwgL1VubmVlZGVkIGFsaWFzZXMgZm9yIGNvbXBvbmVudCBkdW1teS91KVxuICB9KVxuXG4gIGl0KCd0aHJvd3Mgd2hlbiB1c2VyIGNvbmZpZyBmYWlscyBjb21wb25lbnQgY29uZmlnIHNjaGVtYScsIGZ1bmN0aW9uKCkge1xuICAgIG9wdGlvbnMuY29uZmlnLnNlcnZpY2VzLmR1bW15ID0geyBsb2w6IHRydWUgfVxuICAgIGF0bGFzID0gbmV3IEF0bGFzKG9wdGlvbnMpXG4gICAgdGhpcy5zYW5kYm94LnN0dWIoYXRsYXMubG9nLCAnZXJyb3InKVxuXG4gICAgY29uc3Qgc2VydmljZSA9IHNpbm9uLnNweSgpXG4gICAgc2VydmljZS5jb25maWcgPSB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdGVzdDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLnNlcnZpY2UoJ2R1bW15Jywgc2VydmljZSkpLnRvLnRocm93KFZhbGlkYXRpb25FcnJvcilcblxuICAgIHRyeSB7XG4gICAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIHNlcnZpY2UpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBleHBlY3QoZXJyLmNvbnRleHQpLnRvLmhhdmUuYWxsLmtleXMoW1xuICAgICAgICAndHlwZScsXG4gICAgICAgICdhbGlhcycsXG4gICAgICAgICdzY2hlbWEnLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgIF0pXG4gICAgICBleHBlY3QoZXJyLmNvbnRleHQuc2NoZW1hKS50by5lcXVhbChzZXJ2aWNlLmNvbmZpZylcbiAgICAgIGV4cGVjdChlcnIuY29udGV4dC5jb25maWcpLnRvLmVxdWFsKG9wdGlvbnMuY29uZmlnLnNlcnZpY2VzLmR1bW15KVxuICAgICAgZXhwZWN0KGVyci5jb250ZXh0LmFsaWFzKS50by5lcXVhbCgnZHVtbXknKVxuICAgIH1cbiAgfSlcblxuICBpdCgnd29ya3Mgd2hlbiB1c2VyIGNvbmZpZyBwYXNzZXMgY29tcG9uZW50IGNvbmZpZyBzY2hlbWEnLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmljZSA9IHNpbm9uLnNweSgpXG4gICAgc2VydmljZS5jb25maWcgPSB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdGVzdDogeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgZXhwZWN0KCgpID0+IGF0bGFzLnNlcnZpY2UoJ2R1bW15Jywgc2VydmljZSkpLm5vdC50by50aHJvdyhWYWxpZGF0aW9uRXJyb3IpXG4gIH0pXG5cbiAgaXQoJ3dvcmtzIHdoZW4gYWxsIHJlcXVpcmVtZW50cyBhcmUgc3BlY2lmaWVkJywgKCkgPT4ge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBzaW5vbi5zcHkoKVxuICAgIHNlcnZpY2UuY29uZmlnID0ge31cbiAgICBzZXJ2aWNlLnJlcXVpcmVzID0gWydzZXJ2aWNlOmR1bW15JywgJ2FjdGlvbjpkdW1teSddXG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15Jywgc2VydmljZSwgeyBhbGlhc2VzOiB7XG4gICAgICAgICdzZXJ2aWNlOmR1bW15JzogJ2R1bW15JyxcbiAgICAgICAgJ2FjdGlvbjpkdW1teSc6ICdkdW1teScsXG4gICAgICB9IH0pXG4gICAgfSkudG8ubm90LnRocm93KClcbiAgfSlcbn0pXG4iXX0=

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc