New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

cli-kit

Package Overview
Dependencies
Maintainers
1
Versions
107
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

cli-kit - npm Package Compare versions

Comparing version 1.15.0 to 1.16.0

92

CHANGELOG.md

@@ -1,3 +0,9 @@

# 1.15.0
# v1.16.0 (Apr 21, 2022)
* feat: Add support for extension CLIs with multiple exported entrypoints that do not use cli-kit.
Fixes [#97](https://github.com/cb1kenobi/cli-kit/issues/97).
* chore: Updated dependencies.
# v1.15.0 (Apr 10, 2022)
* feat: Moved internal `banner` value into state object to allow banner to be modified during

@@ -7,3 +13,3 @@ command execution when `autoHideBanner` is enabled (default).

# 1.14.1 (Aug 23, 2021)
# v1.14.1 (Aug 23, 2021)

@@ -13,3 +19,3 @@ * fix: Fixed bug when adding a command using an absolute path to a js file.

# 1.14.0 (Jul 27, 2021)
# v1.14.0 (Jul 27, 2021)

@@ -28,3 +34,3 @@ * feat: Added `redact` flag to arguments and options so advanced implementations can know if an

# 1.13.0 (Apr 26, 2021)
# v1.13.0 (Apr 26, 2021)

@@ -40,3 +46,3 @@ * feat(help): Added required options to usage on help screen.

# 1.12.0 (Apr 15, 2021)
# v1.12.0 (Apr 15, 2021)

@@ -46,11 +52,11 @@ * feat(extension): Allow extension exports values in its `package.json` to be the `main` path.

# 1.11.4 (Apr 15, 2021)
# v1.11.4 (Apr 15, 2021)
* fix(command): Fixed custom help content for extensions.
# 1.11.3 (Apr 14, 2021)
# v1.11.3 (Apr 14, 2021)
* fix(command): Only consider command name to be a file if it is an absolute path.
# 1.11.2 (Apr 13, 2021)
# v1.11.2 (Apr 13, 2021)

@@ -61,3 +67,3 @@ * fix(cli): Set `json` flag on errors when the executing context or its parent contexts has a

# 1.11.1 (Apr 8, 2021)
# v1.11.1 (Apr 8, 2021)

@@ -67,3 +73,3 @@ * fix: Don't override default value for boolean options.

# 1.11.0 (Mar 26, 2021)
# v1.11.0 (Mar 26, 2021)

@@ -74,3 +80,3 @@ * feat: Mix custom command, argument, option, and extension constructor parameters into each

# 1.10.0 (Mar 25, 2021)
# v1.10.0 (Mar 25, 2021)

@@ -83,3 +89,3 @@ * feat(command): Support command name to be a path to command file.

# 1.9.3 (Jan 8, 2021)
# v1.9.3 (Jan 8, 2021)

@@ -90,11 +96,11 @@ * fix(extension): Strip the package scope name from an extension name, but still add it as a

# 1.9.2 (Jan 5, 2021)
# v1.9.2 (Jan 5, 2021)
* chore: Updated dependencies.
# 1.9.1 (Nov 30, 2020)
# v1.9.1 (Nov 30, 2020)
* chore: Updated dependencies.
# 1.9.0 (Nov 27, 2020)
# v1.9.0 (Nov 27, 2020)

@@ -108,3 +114,3 @@ * feat(extension): Added support actions.

# 1.8.9 (Nov 15, 2020)
# v1.8.9 (Nov 15, 2020)

@@ -114,3 +120,3 @@ * fix(cli): Fixed bug where banner was rendered twice if `autoHideBanner` is enabled and an the

# 1.8.8 (Nov 14, 2020)
# v1.8.8 (Nov 14, 2020)

@@ -120,11 +126,11 @@ * fix(cli): Force banner to be rendered on error.

# 1.8.7 (Nov 14, 2020)
# v1.8.7 (Nov 14, 2020)
* fix(cli): Fixed banner hook from being fired more than once.
# 1.8.6 (Nov 13, 2020)
# v1.8.6 (Nov 13, 2020)
* fix(cli): Fixed banner from being displayed more than once.
# 1.8.5 (Nov 11, 2020)
# v1.8.5 (Nov 11, 2020)

@@ -137,3 +143,3 @@ * fix(extension): Removed node-pty support since it has never worked properly. On Windows, it

# 1.8.4 (Nov 10, 2020)
# v1.8.4 (Nov 10, 2020)

@@ -145,3 +151,3 @@ * fix(cli): Fixed rendering of banner if `autoHideBanner` is disabled.

# 1.8.3 (Nov 6, 2020)
# v1.8.3 (Nov 6, 2020)

@@ -153,3 +159,3 @@ * fix(cli): Unify arguments to the banner event handler.

# 1.8.2 (Aug 26, 2020)
# v1.8.2 (Aug 26, 2020)

@@ -159,3 +165,3 @@ * fix(parser): Fixed bug where context tree rev change was not updating the local rev before

# 1.8.1 (Aug 26, 2020)
# v1.8.1 (Aug 26, 2020)

@@ -165,3 +171,3 @@ * fix(parser): Fixed bug where if the context tree changed, the last argument would never be

# 1.8.0 (Aug 25, 2020)
# v1.8.0 (Aug 25, 2020)

@@ -185,3 +191,3 @@ * feat(parser): Added `finalize` event hook that is emitted before applying defaults and filling

# 1.7.0 (Aug 13, 2020)
# v1.7.0 (Aug 13, 2020)

@@ -192,7 +198,7 @@ * feat(ansi): Added `ansi.split()` to break a string up by ANSI escape sequences.

# 1.6.2 (Aug 11, 2020)
# v1.6.2 (Aug 11, 2020)
* fix(cli): Only show help on errors caused by parsing and validation, not command execution.
# 1.6.1 (Aug 5, 2020)
# v1.6.1 (Aug 5, 2020)

@@ -203,3 +209,3 @@ * fix(cli): Fixed regression introduced in v1.6.0 that broke missing argument validation.

# 1.6.0 (Aug 3, 2020)
# v1.6.0 (Aug 3, 2020)

@@ -213,3 +219,3 @@ * feat(help): Added `CLI` instanced styles to help template rendering.

# 1.5.2 (Jul 24, 2020)
# v1.5.2 (Jul 24, 2020)

@@ -219,3 +225,3 @@ * fix(terminal): Fixed bug where `keypress` event listeners were not properly being wired up to

# 1.5.1 (Jul 23, 2020)
# v1.5.1 (Jul 23, 2020)

@@ -225,3 +231,3 @@ * fix(context): Fixed circular reference introduced when fixing the `generateHelp` hook event in

# 1.5.0 (Jul 23, 2020)
# v1.5.0 (Jul 23, 2020)

@@ -235,3 +241,3 @@ * feat(cli): Added `showHelp` flag on thrown errors to override `showHelpOnError`. Defaults to

# 1.4.0 (Jul 21, 2020)
# v1.4.0 (Jul 21, 2020)

@@ -248,3 +254,3 @@ * feat(cli): Added support for user-defined in `styles` passed into the `CLI` constructor as well

# 1.3.0 (Jul 21, 2020)
# v1.3.0 (Jul 21, 2020)

@@ -259,3 +265,3 @@ * feat(cli): Added `exec` hook event.

# 1.2.4 (Jun 24, 2020)
# v1.2.4 (Jun 24, 2020)

@@ -267,3 +273,3 @@ * fix(cli): Server-side output streams extend TTY `WriteStream` to improve compatibility with

# 1.2.3 (Jun 19, 2020)
# v1.2.3 (Jun 19, 2020)

@@ -274,3 +280,3 @@ * feat(cli): Added `timeout` option to `CLI.connect()` with default of 5 seconds.

# 1.2.2 (Jun 17, 2020)
# v1.2.2 (Jun 17, 2020)

@@ -281,3 +287,3 @@ * fix(cli): Fixed issue where extension banner was not overriding parent context's banner.

# 1.2.1 (Jun 15, 2020)
# v1.2.1 (Jun 15, 2020)

@@ -288,3 +294,3 @@ * fix: Force all options after an extension is found to be an argument.

# 1.2.0 (Jun 3, 2020)
# v1.2.0 (Jun 3, 2020)

@@ -298,3 +304,3 @@ * feat(commands): Added syntactic sugar for declaring commands with aliases and arguments.

# 1.1.1 (May 26, 2020)
# v1.1.1 (May 26, 2020)

@@ -307,3 +313,3 @@ * fix(cli): On error, print the error stack instead of the error object to prevent infinite

# 1.1.0 (May 15, 2020)
# v1.1.0 (May 15, 2020)

@@ -323,3 +329,3 @@ * feat(cli): Added new `keypress` ansi sequence for improved raw input handling in server mode.

# 1.0.1 (May 8, 2020)
# v1.0.1 (May 8, 2020)

@@ -333,3 +339,3 @@ * fix(cli): Added support for 'parentContextNames' when a remote CLI instance is unaware of the

# 1.0.0 (May 1, 2020)
# v1.0.0 (May 1, 2020)

@@ -336,0 +342,0 @@ * BREAKING CHANGE: Require Node.js 10 or newer.

@@ -160,2 +160,24 @@ "use strict";

const makeDefaultAction = main => {
return async ({
__argv,
cmd
}) => {
process.argv = [process.execPath, main];
const p = __argv.findIndex(arg => arg && arg.type === 'extension' && arg.command === cmd);
if (p !== -1) {
for (let i = p + 1, len = __argv.length; i < len; i++) {
process.argv.push.apply(process.argv, __argv[i].input);
}
}
log(`Requiring ${highlight(main)}`);
log(`Args: ${highlight(process.argv.join(' '))}`);
require(main);
};
};
if (!pkg.json.exports && pkg.main) {

@@ -183,7 +205,8 @@ // legacy Node.js extension

if (pkg.json.bin) {
const primary = pkg.json.bin[pkg.json.name];
if (pkg.json.bin && typeof pkg.json.bin === 'object') {
const bins = Object.keys(pkg.json.bin);
const primary = pkg.json.bin[pkg.json.name] || bins && pkg.json.bin[bins[0]];
for (const [name, bin] of Object.entries(pkg.json.bin)) {
if (bin === primary && !aliases.includes(name)) {
if (bin !== primary && !aliases.includes(name)) {
aliases.push(name);

@@ -197,21 +220,3 @@ }

}, {
action: async ({
__argv,
cmd
}) => {
process.argv = [process.execPath, pkg.main];
const p = __argv.findIndex(arg => arg && arg.type === 'extension' && arg.command === cmd);
if (p !== -1) {
for (let i = p + 1, len = __argv.length; i < len; i++) {
process.argv.push.apply(process.argv, __argv[i].input);
}
}
log(`Requiring ${highlight(pkg.main)}`);
log(`Args: ${highlight(process.argv.join(' '))}`);
require(pkg.main);
},
action: makeDefaultAction(pkg.main),
aliases,

@@ -243,2 +248,3 @@ desc: pkg.json.description

}, {
action: makeDefaultAction(params.main),
desc: pkg.json.description,

@@ -305,3 +311,3 @@ ...params

registerExtension(name, meta, params) {
var _meta$pkg;
var _meta$pkg, _meta$pkg$json$depend;

@@ -315,97 +321,99 @@ log(`Registering extension command: ${highlight(`${this.name}:${name}`)}`);

cmd.isExtension = true;
cmd.isCLIKitExtension = !!(meta !== null && meta !== void 0 && (_meta$pkg = meta.pkg) !== null && _meta$pkg !== void 0 && _meta$pkg.clikit);
if (meta !== null && meta !== void 0 && (_meta$pkg = meta.pkg) !== null && _meta$pkg !== void 0 && _meta$pkg.clikit) {
cmd.isCLIKitExtension = true;
if (!cmd.isCLIKitExtension || !((_meta$pkg$json$depend = meta.pkg.json.dependencies) !== null && _meta$pkg$json$depend !== void 0 && _meta$pkg$json$depend['cli-kit'])) {
return;
} // we only want to define `cmd.load()` if main exports a cli-kit object
cmd.load = async function load() {
log(`Requiring cli-kit extension: ${highlight(this.name)} -> ${highlight(meta.pkg.main)}`);
let ctx;
try {
ctx = require(meta.pkg.main);
cmd.load = async function load() {
log(`Requiring cli-kit extension: ${highlight(this.name)} -> ${highlight(meta.pkg.main)}`);
let ctx;
if (!ctx || typeof ctx !== 'object' && typeof ctx !== 'function') {
throw new Error('Extension must export an object or function');
} // if this is an ES6 module, grab the default export
try {
ctx = require(meta.pkg.main);
if (!ctx || typeof ctx !== 'object' && typeof ctx !== 'function') {
throw new Error('Extension must export an object or function');
} // if this is an ES6 module, grab the default export
if (ctx.__esModule) {
ctx = ctx.default;
} // if the export was a function, call it now to get its CLI definition
if (ctx.__esModule) {
ctx = ctx.default;
} // if the export was a function, call it now to get its CLI definition
if (typeof ctx === 'function') {
ctx = await ctx(this);
}
if (!ctx || typeof ctx !== 'object') {
throw new Error('Extension does not resolve an object');
}
} catch (err) {
throw _errors.default.INVALID_EXTENSION(`Bad extension "${this.name}": ${err.message}`, {
name: this.name,
scope: 'Extension.load',
value: err
});
if (typeof ctx === 'function') {
ctx = await ctx(this);
}
this.aliases = ctx.aliases;
this.camelCase = ctx.camelCase;
this.defaultCommand = ctx.defaultCommand;
this.help = ctx.help;
this.remoteHelp = ctx.remoteHelp;
this.treatUnknownOptionsAsArguments = ctx.treatUnknownOptionsAsArguments;
this.version = ctx.version;
this.init({
args: ctx.args,
banner: ctx.banner,
commands: ctx.commands,
desc: ctx.desc || this.desc,
extensions: ctx.extensions,
name: this.name || ctx.name,
options: ctx.options,
parent: this.parent,
title: ctx.title !== 'Global' && ctx.title || this.name
if (!ctx || typeof ctx !== 'object') {
throw new Error('Extension does not resolve an object');
}
} catch (err) {
throw _errors.default.INVALID_EXTENSION(`Bad extension "${this.name}": ${err.message}`, {
name: this.name,
scope: 'Extension.load',
value: err
});
const versionOption = this.version && this.lookup.long.version;
}
if (versionOption && typeof versionOption.callback !== 'function') {
versionOption.callback = async ({
exitCode,
opts,
next
}) => {
if (await next()) {
let {
version
} = this;
this.aliases = ctx.aliases;
this.camelCase = ctx.camelCase;
this.defaultCommand = ctx.defaultCommand;
this.help = ctx.help;
this.remoteHelp = ctx.remoteHelp;
this.treatUnknownOptionsAsArguments = ctx.treatUnknownOptionsAsArguments;
this.version = ctx.version;
this.init({
args: ctx.args,
banner: ctx.banner,
commands: ctx.commands,
desc: ctx.desc || this.desc,
extensions: ctx.extensions,
name: this.name || ctx.name,
options: ctx.options,
parent: this.parent,
title: ctx.title !== 'Global' && ctx.title || this.name
});
const versionOption = this.version && this.lookup.long.version;
if (typeof version === 'function') {
version = await version(opts);
}
if (versionOption && typeof versionOption.callback !== 'function') {
versionOption.callback = async ({
exitCode,
opts,
next
}) => {
if (await next()) {
let {
version
} = this;
(opts.terminal || this.get('terminal')).stdout.write(`${version}\n`);
exitCode(0);
return false;
if (typeof version === 'function') {
version = await version(opts);
}
};
}
if (typeof ctx.action === 'function') {
this.action = ctx.action;
} else {
this.action = async parser => {
if (this.defaultCommand !== 'help' || !this.get('help')) {
const defcmd = this.defaultCommand && this.commands[this.defaultCommand];
(opts.terminal || this.get('terminal')).stdout.write(`${version}\n`);
exitCode(0);
return false;
}
};
}
if (defcmd) {
return await defcmd.action.call(defcmd, parser);
}
if (typeof ctx.action === 'function') {
this.action = ctx.action;
} else {
this.action = async parser => {
if (this.defaultCommand !== 'help' || !this.get('help')) {
const defcmd = this.defaultCommand && this.commands[this.defaultCommand];
if (defcmd) {
return await defcmd.action.call(defcmd, parser);
}
}
return await _help.default.action.call(_help.default, parser);
};
}
}.bind(cmd);
}
return await _help.default.action.call(_help.default, parser);
};
}
}.bind(cmd);
}

@@ -429,2 +437,2 @@ /**

exports.default = Extension;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBhcnNlci9leHRlbnNpb24uanMiXSwibmFtZXMiOlsibG9nIiwid2FybiIsImhpZ2hsaWdodCIsImRlYnVnIiwic3R5bGVzIiwibmFtZVJlZ0V4cCIsIkV4dGVuc2lvbiIsImNvbnN0cnVjdG9yIiwicGF0aE9yUGFyYW1zIiwicGFyYW1zIiwicGF0aCIsIkUiLCJJTlZBTElEX0FSR1VNRU5UIiwibmFtZSIsInNjb3BlIiwidmFsdWUiLCJleHBvcnRzIiwiZXhlIiwicmVnaXN0ZXJFeHRlbnNpb24iLCJhY3Rpb24iLCJfX2FyZ3YiLCJjbWQiLCJ0ZXJtaW5hbCIsIkFycmF5IiwiaXNBcnJheSIsIk5PX0VYRUNVVEFCTEUiLCJiaW4iLCJhcmdzIiwic2xpY2UiLCJwIiwiZmluZEluZGV4IiwiYXJnIiwidHlwZSIsImNvbW1hbmQiLCJpIiwibGVuIiwibGVuZ3RoIiwicHVzaCIsImFwcGx5IiwiaW5wdXQiLCJqb2luIiwiY2hpbGQiLCJ3aW5kb3dzSGlkZSIsInN0ZG91dCIsIm9uIiwiZGF0YSIsIndyaXRlIiwidG9TdHJpbmciLCJzdGRlcnIiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNvZGUiLCJkZXNjIiwiZSIsInBrZyIsInJvb3QiLCJFcnJvciIsIklOVkFMSURfRVhURU5TSU9OIiwiSlNPTiIsInN0cmluZ2lmeSIsImpzb24iLCJtYWluIiwiYWxpYXNlcyIsIm0iLCJtYXRjaCIsImluY2x1ZGVzIiwicHJpbWFyeSIsIk9iamVjdCIsImVudHJpZXMiLCJwcm9jZXNzIiwiYXJndiIsImV4ZWNQYXRoIiwicmVxdWlyZSIsImRlc2NyaXB0aW9uIiwiX3BhdGgiLCJpc0Fic29sdXRlIiwia2V5cyIsImVyciIsInN0YWNrIiwiaW5kZXhPZiIsInN1YnN0cmluZyIsInRyaW0iLCJsaW5lIiwic3BsaXQiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJtZXRhIiwiQ29tbWFuZCIsInBhcmVudCIsImFzc2lnbiIsImlzRXh0ZW5zaW9uIiwiY2xpa2l0IiwiaXNDTElLaXRFeHRlbnNpb24iLCJsb2FkIiwiY3R4IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJtZXNzYWdlIiwiY2FtZWxDYXNlIiwiZGVmYXVsdENvbW1hbmQiLCJoZWxwIiwicmVtb3RlSGVscCIsInRyZWF0VW5rbm93bk9wdGlvbnNBc0FyZ3VtZW50cyIsInZlcnNpb24iLCJpbml0IiwiYmFubmVyIiwiY29tbWFuZHMiLCJleHRlbnNpb25zIiwib3B0aW9ucyIsInRpdGxlIiwidmVyc2lvbk9wdGlvbiIsImxvb2t1cCIsImxvbmciLCJjYWxsYmFjayIsImV4aXRDb2RlIiwib3B0cyIsIm5leHQiLCJnZXQiLCJwYXJzZXIiLCJkZWZjbWQiLCJoZWxwQ29tbWFuZCIsImJpbmQiLCJzY2hlbWEiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7OztBQUVBLE1BQU07QUFBRUEsRUFBQUEsR0FBRjtBQUFPQyxFQUFBQTtBQUFQLElBQWdCLG9CQUFNLG1CQUFOLENBQXRCO0FBQ0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQWdCQyxlQUFNQyxNQUE1QjtBQUVBLE1BQU1DLFVBQVUsR0FBRyxxQkFBbkI7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNlLE1BQU1DLFNBQU4sQ0FBZ0I7QUFDOUI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0NDLEVBQUFBLFdBQVcsQ0FBQ0MsWUFBRCxFQUFlQyxNQUFmLEVBQXVCO0FBQ2pDLFFBQUlDLElBQUksR0FBR0YsWUFBWDs7QUFFQSxRQUFJLE9BQU9FLElBQVAsS0FBZ0IsUUFBaEIsSUFBNEIsQ0FBQ0QsTUFBakMsRUFBeUM7QUFDeENBLE1BQUFBLE1BQU0sR0FBRyxFQUFUO0FBQ0EsS0FGRCxNQUVPLElBQUlELFlBQVksSUFBSSxPQUFPQSxZQUFQLEtBQXdCLFFBQTVDLEVBQXNEO0FB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QUFDQSxxQkFBTyxLQUFQO0FBQ0E7QUFDRCxXQVZEO0FBV0E7O0FBRUQsWUFBSSxPQUFPcEIsR0FBRyxDQUFDN0UsTUFBWCxLQUFzQixVQUExQixFQUFzQztBQUNyQyxlQUFLQSxNQUFMLEdBQWM2RSxHQUFHLENBQUM3RSxNQUFsQjtBQUNBLFNBRkQsTUFFTztBQUNOLGVBQUtBLE1BQUwsR0FBYyxNQUFNcUcsTUFBTixJQUFnQjtBQUM3QixnQkFBSSxLQUFLbkIsY0FBTCxLQUF3QixNQUF4QixJQUFrQyxDQUFDLEtBQUtrQixHQUFMLENBQVMsTUFBVCxDQUF2QyxFQUF5RDtBQUN4RCxvQkFBTUUsTUFBTSxHQUFHLEtBQUtwQixjQUFMLElBQXVCLEtBQUtPLFFBQUwsQ0FBYyxLQUFLUCxjQUFuQixDQUF0Qzs7QUFDQSxrQkFBSW9CLE1BQUosRUFBWTtBQUNYLHVCQUFPLE1BQU1BLE1BQU0sQ0FBQ3RHLE1BQVAsQ0FBY29FLElBQWQsQ0FBbUJrQyxNQUFuQixFQUEyQkQsTUFBM0IsQ0FBYjtBQUNBO0FBQ0Q7O0FBQ0QsbUJBQU8sTUFBTUUsY0FBWXZHLE1BQVosQ0FBbUJvRSxJQUFuQixDQUF3Qm1DLGFBQXhCLEVBQXFDRixNQUFyQyxDQUFiO0FBQ0EsV0FSRDtBQVNBO0FBQ0QsT0F6RVUsQ0F5RVRHLElBekVTLENBeUVKdEcsR0F6RUksQ0FBWDtBQTBFQTtBQUNEO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQ3VHLEVBQUFBLE1BQU0sR0FBRztBQUNSLFdBQU8sRUFDTixHQUFHLE1BQU1BLE1BREg7QUFFTmxILE1BQUFBLElBQUksRUFBRSxLQUFLQTtBQUZMLEtBQVA7QUFJQTs7QUF4VDZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbW1hbmQgZnJvbSAnLi9jb21tYW5kJztcbmltcG9ydCBkZWJ1ZyBmcm9tICcuLi9saWIvZGVidWcnO1xuaW1wb3J0IEUgZnJvbSAnLi4vbGliL2Vycm9ycyc7XG5pbXBvcnQgaGVscENvbW1hbmQgZnJvbSAnLi4vY29tbWFuZHMvaGVscCc7XG5pbXBvcnQgX3BhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7IGRlY2xhcmVDTElLaXRDbGFzcywgZmlsZW5hbWUsIGZpbmRQYWNrYWdlLCBpc0V4ZWN1dGFibGUgfSBmcm9tICcuLi9saWIvdXRpbCc7XG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuXG5jb25zdCB7IGxvZywgd2FybiB9ID0gZGVidWcoJ2NsaS1raXQ6ZXh0ZW5zaW9uJyk7XG5jb25zdCB7IGhpZ2hsaWdodCB9ID0gZGVidWcuc3R5bGVzO1xuXG5jb25zdCBuYW1lUmVnRXhwID0gL14oPzooQFxcdyspXFwvKT8oLiopJC87XG5cbi8qKlxuICogRGVmaW5lcyBhIG5hbWVzcGFjZSB0aGF0IHdyYXBzIGFuIGV4dGVybmFsIHByb2dyYW0gb3Igc2NyaXB0LlxuICpcbiAqIEBleHRlbmRzIHtDb21tYW5kfVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHRlbnNpb24ge1xuXHQvKipcblx0ICogRGV0ZWN0cyB0aGUgZXh0ZW5zaW9uIGRlZmluZWQgaW4gdGhlIHNwZWNpZmllZCBwYXRoIGFuZCBpbml0aWFsaXplcyBpdC5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBwYXRoT3JQYXJhbXMgLSBUaGUgcGF0aCB0byB0aGUgZXh0ZW5zaW9uIG9yIGEgcGFyYW1zIG9iamVjdC4gSWYgdGhlXG5cdCAqIHBhdGggaXMgYSBOb2RlLmpzIHBhY2thZ2Ugd2l0aCBhIGBwYWNrYWdlLmpzb25gIGNvbnRhaW5pbmcgYSBgXCJjbGkta2l0XCJgIHByb3BlcnR5LCBpdCB3aWxsXG5cdCAqIG1lcmdlIHRoZSBleHRlcm5hbCBjbGkta2l0IGNvbnRleHQgdHJlZSBpbnRvIHRoaXMgbmFtZXNwYWNlLlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gLSBWYXJpb3VzIHBhcmFtZXRlcnMgd2hlbiBgZXh0ZW5zaW9uUGF0aGAgaXMgYSBgU3RyaW5nYC5cblx0ICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMuZXhwb3J0c10gLSBBIG1hcCBvZiBleHBvcnRlZCBjb21tYW5kIG5hbWVzIHRvIGRlc2NyaXB0b3JzIGNvbnRhaW5pbmdcblx0ICogYGFsaWFzZXNgLCBgZGVzY2AsIGBleGVgLCBgbWFpbmAsIGFuZCBgbmFtZWAgcHJvcHMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbcGFyYW1zLm5hbWVdIC0gVGhlIGV4dGVuc2lvbiBuYW1lLiBJZiBub3Qgc2V0LCBpdCB3aWxsIGxvYWQgaXQgZnJvbSB0aGVcblx0ICogZXh0ZW5zaW9uJ3MgYHBhY2thZ2UuanNvbmAgb3IgdGhlIGZpbGVuYW1lLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW3BhcmFtcy5wYXRoXSAtIFRoZSBwYXRoIHRvIGFuIGV4ZWN1dGFibGUsIGEgSmF2YVNjcmlwdCBmaWxlLCBvciBOb2RlLmpzXG5cdCAqIHBhY2thZ2UuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXRoT3JQYXJhbXMsIHBhcmFtcykge1xuXHRcdGxldCBwYXRoID0gcGF0aE9yUGFyYW1zO1xuXG5cdFx0aWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJyAmJiAhcGFyYW1zKSB7XG5cdFx0XHRwYXJhbXMgPSB7fTtcblx0XHR9IGVsc2UgaWYgKHBhdGhPclBhcmFtcyAmJiB0eXBlb2YgcGF0aE9yUGFyYW1zID09PSAnb2JqZWN0Jykge1xuXHRcdFx0KHsgcGF0aCB9ID0gcGFyYW1zID0gcGF0aE9yUGFyYW1zKTtcblx0XHR9XG5cblx0XHRpZiAoIXBhdGggfHwgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBFLklOVkFMSURfQVJHVU1FTlQoJ0V4cGVjdGVkIGFuIGV4dGVuc2lvbiBwYXRoIG9yIHBhcmFtcyBvYmplY3QnLCB7IG5hbWU6ICdwYXRoT3JQYXJhbXMnLCBzY29wZTogJ0V4dGVuc2lvbi5jb25zdHJ1Y3RvcicsIHZhbHVlOiBwYXRoT3JQYXJhbXMgfSk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBwYXJhbXMgIT09ICdvYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBFLklOVkFMSURfQVJHVU1FTlQoJ0V4cGVjdGVkIGV4dGVuc2lvbiBwYXJhbXMgdG8gYmUgYW4gb2JqZWN0IG9yIENvbnRleHQnLCB7IG5hbWU6ICdwYXJhbXMnLCBzY29wZTogJ0V4dGVuc2lvbi5jb25zdHJ1Y3RvcicsIHZhbHVlOiBwYXJhbXMgfSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5leHBvcnRzID0gcGFyYW1zLmV4cG9ydHMgfHwge307XG5cdFx0dGhpcy5uYW1lID0gcGFyYW1zLm5hbWU7XG5cdFx0dGhpcy5wYXRoID0gcGF0aDtcblxuXHRcdGlmICh0eXBlb2YgdGhpcy5leHBvcnRzICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCBleHRlbnNpb24gZXhwb3J0cyB0byBiZSBhbiBvYmplY3QnLCB7IG5hbWU6ICdwYXJhbXMuZXhwb3J0cycsIHNjb3BlOiAnRXh0ZW5zaW9uLmNvbnN0cnVjdG9yJywgdmFsdWU6IHBhcmFtcy5leHBvcnRzIH0pO1xuXHRcdH1cblxuXHRcdC8vIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgZXh0ZW5zaW9uIGlzIGEgYmluYXJ5IG9yIGlmIGl0J3MgYSBOb2RlIHBhY2thZ2Vcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZXhlID0gaXNFeGVjdXRhYmxlKHBhdGgpO1xuXHRcdFx0aWYgKCF0aGlzLm5hbWUpIHtcblx0XHRcdFx0dGhpcy5uYW1lID0gZmlsZW5hbWUoZXhlWzBdKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5yZWdpc3RlckV4dGVuc2lvbih0aGlzLm5hbWUsIHsgZXhlIH0sIHtcblx0XHRcdFx0YWN0aW9uOiBhc3luYyAoeyBfX2FyZ3YsIGNtZCwgdGVybWluYWwgfSkgPT4ge1xuXHRcdFx0XHRcdGlmICghQXJyYXkuaXNBcnJheShleGUpKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBFLk5PX0VYRUNVVEFCTEUoYEV4dGVuc2lvbiBcIiR7dGhpcy5uYW1lfVwiIGhhcyBubyBleGVjdXRhYmxlIWApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGJpbiA9IGV4ZVswXTtcblx0XHRcdFx0XHRjb25zdCBhcmdzID0gZXhlLnNsaWNlKDEpO1xuXHRcdFx0XHRcdGNvbnN0IHAgPSBfX2FyZ3YuZmluZEluZGV4KGFyZyA9PiBhcmcgJiYgYXJnLnR5cGUgPT09ICdleHRlbnNpb24nICYmIGFyZy5jb21tYW5kID09PSBjbWQpO1xuXG5cdFx0XHRcdFx0aWYgKHAgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gcCArIDEsIGxlbiA9IF9fYXJndi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0XHRcdFx0XHRhcmdzLnB1c2guYXBwbHkoYXJncywgX19hcmd2W2ldLmlucHV0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBzcGF3biB0aGUgcHJvY2Vzc1xuXHRcdFx0XHRcdGxvZyhgUnVubmluZzogJHtoaWdobGlnaHQoYCR7YmlufSAke2FyZ3Muam9pbignICcpfWApfWApO1xuXHRcdFx0XHRcdGNvbnN0IGNoaWxkID0gc3Bhd24oYmluLCBhcmdzLCB7IHdpbmRvd3NIaWRlOiB0cnVlIH0pO1xuXHRcdFx0XHRcdGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGRhdGEgPT4gdGVybWluYWwuc3Rkb3V0LndyaXRlKGRhdGEudG9TdHJpbmcoKSkpO1xuXHRcdFx0XHRcdGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGRhdGEgPT4gdGVybWluYWwuc3RkZXJyLndyaXRlKGRhdGEudG9TdHJpbmcoKSkpO1xuXHRcdFx0XHRcdGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gY2hpbGQub24oJ2Nsb3NlJywgKGNvZGUgPSAwKSA9PiByZXNvbHZlKHsgY29kZSB9KSkpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRkZXNjOiBwYXJhbXMuZGVzY1xuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0Ly8gbWF5YmUgYSBOb2RlIHBhY2thZ2U/XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRsZXQgcGtnO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHBrZyA9IGZpbmRQYWNrYWdlKHBhdGgpO1xuXHRcdFx0XHRcdGlmICghcGtnLnJvb3QpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcigpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHRocm93IEUuSU5WQUxJRF9FWFRFTlNJT04oYEludmFsaWQgZXh0ZW5zaW9uOiBVbmFibGUgdG8gZmluZCBleGVjdXRhYmxlLCBzY3JpcHQsIG9yIHBhY2thZ2U6ICR7dHlwZW9mIHBhdGggPT09ICdzdHJpbmcnID8gYFwiJHtwYXRofVwiYCA6IEpTT04uc3RyaW5naWZ5KHBhdGgpfWApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCF0aGlzLm5hbWUpIHtcblx0XHRcdFx0XHR0aGlzLm5hbWUgPSBwa2cuanNvbi5uYW1lO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCF0aGlzLm5hbWUpIHtcblx0XHRcdFx0XHR0aGlzLm5hbWUgPSBmaWxlbmFtZShwYXRoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghcGtnLmpzb24uZXhwb3J0cyAmJiBwa2cubWFpbikge1xuXHRcdFx0XHRcdC8vIGxlZ2FjeSBOb2RlLmpzIGV4dGVuc2lvblxuXHRcdFx0XHRcdGxldCB7IG5hbWUgfSA9IHRoaXM7XG5cdFx0XHRcdFx0Y29uc3QgYWxpYXNlcyA9IEFycmF5LmlzQXJyYXkocGtnLmpzb24uYWxpYXNlcykgPyBwa2cuanNvbi5hbGlhc2VzIDogW107XG5cblx0XHRcdFx0XHQvLyBpZiB0aGUgcGFja2FnZSBuYW1lIGNvbnRhaW5zIGEgc2NvcGUsIGFkZCB0aGUgc2NvcGVkIHBhY2thZ2UgbmFtZSBhcyBhIGhpZGRlblxuXHRcdFx0XHRcdC8vIGFsaWFzIGFuZCBzdHJpcCB0aGUgc2NvcGUgZnJvbSB0aGUgbmFtZVxuXHRcdFx0XHRcdGNvbnN0IG0gPSBuYW1lLm1hdGNoKG5hbWVSZWdFeHApO1xuXHRcdFx0XHRcdGlmIChtKSB7XG5cdFx0XHRcdFx0XHRhbGlhc2VzLnB1c2goYCEke25hbWV9YCk7XG5cdFx0XHRcdFx0XHRuYW1lID0gbVsyXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBpZiB0aGUgbmFtZSBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgb25lIGluIHRoZSBwYWNrYWdlLmpzb24sIGFkZCBpdCB0byB0aGUgYWxpYXNlc1xuXHRcdFx0XHRcdGlmIChuYW1lICYmIG5hbWUgIT09IHBrZy5qc29uLm5hbWUgJiYgIWFsaWFzZXMuaW5jbHVkZXMobmFtZSkpIHtcblx0XHRcdFx0XHRcdGFsaWFzZXMucHVzaChuYW1lKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBpZiB0aGUgcGFja2FnZSBoYXMgYSBiaW4gc2NyaXB0IHRoYXQgbWF0Y2hlcyB0aGUgcGFja2FnZSBuYW1lLCB0aGVuIGFkZCBhbnkgb3RoZXJcblx0XHRcdFx0XHQvLyBiaW4gbmFtZSB0aGF0IGFsaWFzZXMgdGhlIHBhY2thZ2UgbmFtZWQgYmluXG5cdFx0XHRcdFx0aWYgKHBrZy5qc29uLmJpbikge1xuXHRcdFx0XHRcdFx0Y29uc3QgcHJpbWFyeSA9IHBrZy5qc29uLmJpbltwa2cuanNvbi5uYW1lXTtcblx0XHRcdFx0XHRcdGZvciAoY29uc3QgWyBuYW1lLCBiaW4gXSBvZiBPYmplY3QuZW50cmllcyhwa2cuanNvbi5iaW4pKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChiaW4gPT09IHByaW1hcnkgJiYgIWFsaWFzZXMuaW5jbHVkZXMobmFtZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRhbGlhc2VzLnB1c2gobmFtZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLnJlZ2lzdGVyRXh0ZW5zaW9uKG5hbWUsIHsgcGtnIH0sIHtcblx0XHRcdFx0XHRcdGFjdGlvbjogYXN5bmMgKHsgX19hcmd2LCBjbWQgfSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRwcm9jZXNzLmFyZ3YgPSBbXG5cdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5leGVjUGF0aCxcblx0XHRcdFx0XHRcdFx0XHRwa2cubWFpblxuXHRcdFx0XHRcdFx0XHRdO1xuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHAgPSBfX2FyZ3YuZmluZEluZGV4KGFyZyA9PiBhcmcgJiYgYXJnLnR5cGUgPT09ICdleHRlbnNpb24nICYmIGFyZy5jb21tYW5kID09PSBjbWQpO1xuXHRcdFx0XHRcdFx0XHRpZiAocCAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gcCArIDEsIGxlbiA9IF9fYXJndi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5hcmd2LnB1c2guYXBwbHkocHJvY2Vzcy5hcmd2LCBfX2FyZ3ZbaV0uaW5wdXQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGxvZyhgUmVxdWlyaW5nICR7aGlnaGxpZ2h0KHBrZy5tYWluKX1gKTtcblx0XHRcdFx0XHRcdFx0bG9nKGBBcmdzOiAke2hpZ2hsaWdodChwcm9jZXNzLmFyZ3Yuam9pbignICcpKX1gKTtcblx0XHRcdFx0XHRcdFx0cmVxdWlyZShwa2cubWFpbik7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0YWxpYXNlcyxcblx0XHRcdFx0XHRcdGRlc2M6IHBrZy5qc29uLmRlc2NyaXB0aW9uXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIHBrZy5qc29uLmV4cG9ydHMgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdFx0dGhyb3cgRS5JTlZBTElEX0VYVEVOU0lPTignSW52YWxpZCBleHRlbnNpb246IEV4cGVjdGVkIGV4cG9ydHMgdG8gYmUgYW4gb2JqZWN0JywgeyBuYW1lOiAncGtnLmpzb24uZXhwb3J0cycsIHNjb3BlOiAnRXh0ZW5zaW9uLmNvbnN0cnVjdG9yJywgdmFsdWU6IHBrZy5qc29uLmV4cG9ydHMgfSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgWyBuYW1lLCBwYXJhbXMgXSBvZiBPYmplY3QuZW50cmllcyhwa2cuanNvbi5leHBvcnRzKSkge1xuXHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBwYXJhbXMgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0XHRcdHBhcmFtcyA9IHsgbWFpbjogcGFyYW1zIH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAocGFyYW1zLm1haW4gJiYgIV9wYXRoLmlzQWJzb2x1dGUocGFyYW1zLm1haW4pKSB7XG5cdFx0XHRcdFx0XHRcdHBhcmFtcy5tYWluID0gX3BhdGgucmVzb2x2ZShwa2cucm9vdCwgcGFyYW1zLm1haW4pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGhpcy5yZWdpc3RlckV4dGVuc2lvbihuYW1lLCB7XG5cdFx0XHRcdFx0XHRcdHBrZzoge1xuXHRcdFx0XHRcdFx0XHRcdC4uLnBrZyxcblx0XHRcdFx0XHRcdFx0XHQuLi5wYXJhbXNcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSwge1xuXHRcdFx0XHRcdFx0XHRkZXNjOiBwa2cuanNvbi5kZXNjcmlwdGlvbixcblx0XHRcdFx0XHRcdFx0Li4ucGFyYW1zXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIU9iamVjdC5rZXlzKHRoaXMuZXhwb3J0cykubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dGhyb3cgRS5JTlZBTElEX0VYVEVOU0lPTihgSW52YWxpZCBleHRlbnNpb246IFVuYWJsZSB0byBmaW5kIGV4dGVuc2lvbidzIG1haW4gZmlsZTogJHt0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycgPyBgXCIke3BhdGh9XCJgIDogSlNPTi5zdHJpbmdpZnkocGF0aCl9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhpcy5lcnIgPSBlO1xuXHRcdFx0XHR3YXJuKGUpO1xuXHRcdFx0XHR3YXJuKCdGb3VuZCBiYWQgZXh0ZW5zaW9uLCBjcmVhdGluZyBlcnJvciBhY3Rpb24nKTtcblxuXHRcdFx0XHR0aGlzLnJlZ2lzdGVyRXh0ZW5zaW9uKHRoaXMubmFtZSwge30sIHtcblx0XHRcdFx0XHRhY3Rpb246ICh7IHRlcm1pbmFsIH0pID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHsgc3RkZXJyIH0gPSB0ZXJtaW5hbDtcblx0XHRcdFx0XHRcdGlmICh0aGlzLmVycikge1xuXHRcdFx0XHRcdFx0XHRsZXQgeyBzdGFjayB9ID0gZTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcCA9IHN0YWNrLmluZGV4T2YoJ1xcblxcbicpO1xuXHRcdFx0XHRcdFx0XHRpZiAocCAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHRzdGFjayA9IHN0YWNrLnN1YnN0cmluZygwLCBwKS50cmltKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBsaW5lIG9mIHN0YWNrLnNwbGl0KCdcXG4nKSkge1xuXHRcdFx0XHRcdFx0XHRcdHN0ZGVyci53cml0ZShgICAke2xpbmV9XFxuYCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHN0ZGVyci53cml0ZShgSW52YWxpZCBleHRlbnNpb246ICR7dGhpcy5uYW1lfVxcbmApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZGVjbGFyZUNMSUtpdENsYXNzKHRoaXMsICdFeHRlbnNpb24nKTtcblxuXHRcdC8vIG1peCBpbiBhbnkgb3RoZXIgY3VzdG9tIHByb3BzXG5cdFx0Zm9yIChjb25zdCBbIGtleSwgdmFsdWUgXSBvZiBPYmplY3QuZW50cmllcyhwYXJhbXMpKSB7XG5cdFx0XHRpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLCBrZXkpKSB7XG5cdFx0XHRcdHRoaXNba2V5XSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyBhIGNvbW1hbmQgd2l0aCB0aGUgZXh0ZW5zaW9uIGV4cG9ydCBpbmZvLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIFRoZSBjb21tYW5kIG5hbWUuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBtZXRhIC0gTWV0YWRhdGEgdG8gbWl4IGludG8gdGhlIGNvbW1hbmQgaW5zdGFuY2UuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBDb21tYW5kIHNwZWNpZmljIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0cmVnaXN0ZXJFeHRlbnNpb24obmFtZSwgbWV0YSwgcGFyYW1zKSB7XG5cdFx0bG9nKGBSZWdpc3RlcmluZyBleHRlbnNpb24gY29tbWFuZDogJHtoaWdobGlnaHQoYCR7dGhpcy5uYW1lfToke25hbWV9YCl9YCk7XG5cdFx0Y29uc3QgY21kID0gbmV3IENvbW1hbmQobmFtZSwge1xuXHRcdFx0cGFyZW50OiB0aGlzLFxuXHRcdFx0Li4ucGFyYW1zXG5cdFx0fSk7XG5cdFx0dGhpcy5leHBvcnRzW25hbWVdID0gT2JqZWN0LmFzc2lnbihjbWQsIG1ldGEpO1xuXHRcdGNtZC5pc0V4dGVuc2lvbiA9IHRydWU7XG5cblx0XHRpZiAobWV0YT8ucGtnPy5jbGlraXQpIHtcblx0XHRcdGNtZC5pc0NMSUtpdEV4dGVuc2lvbiA9IHRydWU7XG5cblx0XHRcdGNtZC5sb2FkID0gYXN5bmMgZnVuY3Rpb24gbG9hZCgpIHtcblx0XHRcdFx0bG9nKGBSZXF1aXJpbmcgY2xpLWtpdCBleHRlbnNpb246ICR7aGlnaGxpZ2h0KHRoaXMubmFtZSl9IC0+ICR7aGlnaGxpZ2h0KG1ldGEucGtnLm1haW4pfWApO1xuXHRcdFx0XHRsZXQgY3R4O1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGN0eCA9IHJlcXVpcmUobWV0YS5wa2cubWFpbik7XG5cdFx0XHRcdFx0aWYgKCFjdHggfHwgKHR5cGVvZiBjdHggIT09ICdvYmplY3QnICYmIHR5cGVvZiBjdHggIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0V4dGVuc2lvbiBtdXN0IGV4cG9ydCBhbiBvYmplY3Qgb3IgZnVuY3Rpb24nKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBpZiB0aGlzIGlzIGFuIEVTNiBtb2R1bGUsIGdyYWIgdGhlIGRlZmF1bHQgZXhwb3J0XG5cdFx0XHRcdFx0aWYgKGN0eC5fX2VzTW9kdWxlKSB7XG5cdFx0XHRcdFx0XHRjdHggPSBjdHguZGVmYXVsdDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBpZiB0aGUgZXhwb3J0IHdhcyBhIGZ1bmN0aW9uLCBjYWxsIGl0IG5vdyB0byBnZXQgaXRzIENMSSBkZWZpbml0aW9uXG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBjdHggPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRcdGN0eCA9IGF3YWl0IGN0eCh0aGlzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCFjdHggfHwgdHlwZW9mIGN0eCAhPT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignRXh0ZW5zaW9uIGRvZXMgbm90IHJlc29sdmUgYW4gb2JqZWN0Jyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0XHR0aHJvdyBFLklOVkFMSURfRVhURU5TSU9OKGBCYWQgZXh0ZW5zaW9uIFwiJHt0aGlzLm5hbWV9XCI6ICR7ZXJyLm1lc3NhZ2V9YCwgeyBuYW1lOiB0aGlzLm5hbWUsIHNjb3BlOiAnRXh0ZW5zaW9uLmxvYWQnLCB2YWx1ZTogZXJyIH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5hbGlhc2VzICAgICAgICAgICAgICAgICAgICAgICAgPSBjdHguYWxpYXNlcztcblx0XHRcdFx0dGhpcy5jYW1lbENhc2UgICAgICAgICAgICAgICAgICAgICAgPSBjdHguY2FtZWxDYXNlO1xuXHRcdFx0XHR0aGlzLmRlZmF1bHRDb21tYW5kICAgICAgICAgICAgICAgICA9IGN0eC5kZWZhdWx0Q29tbWFuZDtcblx0XHRcdFx0dGhpcy5oZWxwICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBjdHguaGVscDtcblx0XHRcdFx0dGhpcy5yZW1vdGVIZWxwICAgICAgICAgICAgICAgICAgICAgPSBjdHgucmVtb3RlSGVscDtcblx0XHRcdFx0dGhpcy50cmVhdFVua25vd25PcHRpb25zQXNBcmd1bWVudHMgPSBjdHgudHJlYXRVbmtub3duT3B0aW9uc0FzQXJndW1lbnRzO1xuXHRcdFx0XHR0aGlzLnZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICA9IGN0eC52ZXJzaW9uO1xuXG5cdFx0XHRcdHRoaXMuaW5pdCh7XG5cdFx0XHRcdFx0YXJnczogICAgICAgY3R4LmFyZ3MsXG5cdFx0XHRcdFx0YmFubmVyOiAgICAgY3R4LmJhbm5lcixcblx0XHRcdFx0XHRjb21tYW5kczogICBjdHguY29tbWFuZHMsXG5cdFx0XHRcdFx0ZGVzYzogICAgICAgY3R4LmRlc2MgfHwgdGhpcy5kZXNjLFxuXHRcdFx0XHRcdGV4dGVuc2lvbnM6IGN0eC5leHRlbnNpb25zLFxuXHRcdFx0XHRcdG5hbWU6ICAgICAgIHRoaXMubmFtZSB8fCBjdHgubmFtZSxcblx0XHRcdFx0XHRvcHRpb25zOiAgICBjdHgub3B0aW9ucyxcblx0XHRcdFx0XHRwYXJlbnQ6ICAgICB0aGlzLnBhcmVudCxcblx0XHRcdFx0XHR0aXRsZTogICAgICBjdHgudGl0bGUgIT09ICdHbG9iYWwnICYmIGN0eC50aXRsZSB8fCB0aGlzLm5hbWVcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Y29uc3QgdmVyc2lvbk9wdGlvbiA9IHRoaXMudmVyc2lvbiAmJiB0aGlzLmxvb2t1cC5sb25nLnZlcnNpb247XG5cdFx0XHRcdGlmICh2ZXJzaW9uT3B0aW9uICYmIHR5cGVvZiB2ZXJzaW9uT3B0aW9uLmNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0dmVyc2lvbk9wdGlvbi5jYWxsYmFjayA9IGFzeW5jICh7IGV4aXRDb2RlLCBvcHRzLCBuZXh0IH0pID0+IHtcblx0XHRcdFx0XHRcdGlmIChhd2FpdCBuZXh0KCkpIHtcblx0XHRcdFx0XHRcdFx0bGV0IHsgdmVyc2lvbiB9ID0gdGhpcztcblx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiB2ZXJzaW9uID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmVyc2lvbiA9IGF3YWl0IHZlcnNpb24ob3B0cyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0KG9wdHMudGVybWluYWwgfHwgdGhpcy5nZXQoJ3Rlcm1pbmFsJykpLnN0ZG91dC53cml0ZShgJHt2ZXJzaW9ufVxcbmApO1xuXHRcdFx0XHRcdFx0XHRleGl0Q29kZSgwKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodHlwZW9mIGN0eC5hY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHR0aGlzLmFjdGlvbiA9IGN0eC5hY3Rpb247XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb24gPSBhc3luYyBwYXJzZXIgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuZGVmYXVsdENvbW1hbmQgIT09ICdoZWxwJyB8fCAhdGhpcy5nZXQoJ2hlbHAnKSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBkZWZjbWQgPSB0aGlzLmRlZmF1bHRDb21tYW5kICYmIHRoaXMuY29tbWFuZHNbdGhpcy5kZWZhdWx0Q29tbWFuZF07XG5cdFx0XHRcdFx0XHRcdGlmIChkZWZjbWQpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gYXdhaXQgZGVmY21kLmFjdGlvbi5jYWxsKGRlZmNtZCwgcGFyc2VyKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIGF3YWl0IGhlbHBDb21tYW5kLmFjdGlvbi5jYWxsKGhlbHBDb21tYW5kLCBwYXJzZXIpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH0uYmluZChjbWQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBzY2hlbWEgZm9yIHRoaXMgZXh0ZW5zaW9uIGFuZCBhbGwgY2hpbGQgY29udGV4dHMuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzY2hlbWEoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLnN1cGVyLnNjaGVtYSxcblx0XHRcdHBhdGg6IHRoaXMucGF0aFxuXHRcdH07XG5cdH1cbn1cbiJdLCJmaWxlIjoicGFyc2VyL2V4dGVuc2lvbi5qcyJ9
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBhcnNlci9leHRlbnNpb24uanMiXSwibmFtZXMiOlsibG9nIiwid2FybiIsImhpZ2hsaWdodCIsImRlYnVnIiwic3R5bGVzIiwibmFtZVJlZ0V4cCIsIkV4dGVuc2lvbiIsImNvbnN0cnVjdG9yIiwicGF0aE9yUGFyYW1zIiwicGFyYW1zIiwicGF0aCIsIkUiLCJJTlZBTElEX0FSR1VNRU5UIiwibmFtZSIsInNjb3BlIiwidmFsdWUiLCJleHBvcnRzIiwiZXhlIiwicmVnaXN0ZXJFeHRlbnNpb24iLCJhY3Rpb24iLCJfX2FyZ3YiLCJjbWQiLCJ0ZXJtaW5hbCIsIkFycmF5IiwiaXNBcnJheSIsIk5PX0VYRUNVVEFCTEUiLCJiaW4iLCJhcmdzIiwic2xpY2UiLCJwIiwiZmluZEluZGV4IiwiYXJnIiwidHlwZSIsImNvbW1hbmQiLCJpIiwibGVuIiwibGVuZ3RoIiwicHVzaCIsImFwcGx5IiwiaW5wdXQiLCJqb2luIiwiY2hpbGQiLCJ3aW5kb3dzSGlkZSIsInN0ZG91dCIsIm9uIiwiZGF0YSIsIndyaXRlIiwidG9TdHJpbmciLCJzdGRlcnIiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNvZGUiLCJkZXNjIiwiZSIsInBrZyIsInJvb3QiLCJFcnJvciIsIklOVkFMSURfRVhURU5TSU9OIiwiSlNPTiIsInN0cmluZ2lmeSIsImpzb24iLCJtYWtlRGVmYXVsdEFjdGlvbiIsIm1haW4iLCJwcm9jZXNzIiwiYXJndiIsImV4ZWNQYXRoIiwicmVxdWlyZSIsImFsaWFzZXMiLCJtIiwibWF0Y2giLCJpbmNsdWRlcyIsImJpbnMiLCJPYmplY3QiLCJrZXlzIiwicHJpbWFyeSIsImVudHJpZXMiLCJkZXNjcmlwdGlvbiIsIl9wYXRoIiwiaXNBYnNvbHV0ZSIsImVyciIsInN0YWNrIiwiaW5kZXhPZiIsInN1YnN0cmluZyIsInRyaW0iLCJsaW5lIiwic3BsaXQiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJtZXRhIiwiQ29tbWFuZCIsInBhcmVudCIsImFzc2lnbiIsImlzRXh0ZW5zaW9uIiwiaXNDTElLaXRFeHRlbnNpb24iLCJjbGlraXQiLCJkZXBlbmRlbmNpZXMiLCJsb2FkIiwiY3R4IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJtZXNzYWdlIiwiY2FtZWxDYXNlIiwiZGVmYXVsdENvbW1hbmQiLCJoZWxwIiwicmVtb3RlSGVscCIsInRyZWF0VW5rbm93bk9wdGlvbnNBc0FyZ3VtZW50cyIsInZlcnNpb24iLCJpbml0IiwiYmFubmVyIiwiY29tbWFuZHMiLCJleHRlbnNpb25zIiwib3B0aW9ucyIsInRpdGxlIiwidmVyc2lvbk9wdGlvbiIsImxvb2t1cCIsImxvbmciLCJjYWxsYmFjayIsImV4aXRDb2RlIiwib3B0cyIsIm5leHQiLCJnZXQiLCJwYXJzZXIiLCJkZWZjbWQiLCJoZWxwQ29tbWFuZCIsImJpbmQiLCJzY2hlbWEiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7OztBQUVBLE1BQU07QUFBRUEsRUFBQUEsR0FBRjtBQUFPQyxFQUFBQTtBQUFQLElBQWdCLG9CQUFNLG1CQUFOLENBQXRCO0FBQ0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQWdCQyxlQUFNQyxNQUE1QjtBQUVBLE1BQU1DLFVBQVUsR0FBRyxxQkFBbkI7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNlLE1BQU1DLFNBQU4sQ0FBZ0I7QUFDOUI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0NDLEVBQUFBLFdBQVcsQ0FBQ0MsWUFBRCxFQUFlQyxNQUFmLEVBQXVCO0FBQ2pDLFFBQUlDLElBQUksR0FBR0YsWUFBWDs7QUFFQSxRQUFJLE9BQU9FLElBQVAsS0FBZ0IsUUFBaEIsSUFBNEIsQ0FBQ0QsTUFBakMsRUFBeUM7QUFDeENBLE1BQUFBLE1BQU0sR0FBRyxFQUFUO0FBQ0EsS0FGRCxNQUVPLElBQUlE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Q3pHLE1BQVAsQ0FBY3NFLElBQWQsQ0FBbUJtQyxNQUFuQixFQUEyQkQsTUFBM0IsQ0FBYjtBQUNBO0FBQ0Q7O0FBQ0QsaUJBQU8sTUFBTUUsY0FBWTFHLE1BQVosQ0FBbUJzRSxJQUFuQixDQUF3Qm9DLGFBQXhCLEVBQXFDRixNQUFyQyxDQUFiO0FBQ0EsU0FSRDtBQVNBO0FBQ0QsS0F6RVUsQ0F5RVRHLElBekVTLENBeUVKekcsR0F6RUksQ0FBWDtBQTBFQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0MwRyxFQUFBQSxNQUFNLEdBQUc7QUFDUixXQUFPLEVBQ04sR0FBRyxNQUFNQSxNQURIO0FBRU5ySCxNQUFBQSxJQUFJLEVBQUUsS0FBS0E7QUFGTCxLQUFQO0FBSUE7O0FBalU2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb21tYW5kIGZyb20gJy4vY29tbWFuZCc7XG5pbXBvcnQgZGVidWcgZnJvbSAnLi4vbGliL2RlYnVnJztcbmltcG9ydCBFIGZyb20gJy4uL2xpYi9lcnJvcnMnO1xuaW1wb3J0IGhlbHBDb21tYW5kIGZyb20gJy4uL2NvbW1hbmRzL2hlbHAnO1xuaW1wb3J0IF9wYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQgeyBkZWNsYXJlQ0xJS2l0Q2xhc3MsIGZpbGVuYW1lLCBmaW5kUGFja2FnZSwgaXNFeGVjdXRhYmxlIH0gZnJvbSAnLi4vbGliL3V0aWwnO1xuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcblxuY29uc3QgeyBsb2csIHdhcm4gfSA9IGRlYnVnKCdjbGkta2l0OmV4dGVuc2lvbicpO1xuY29uc3QgeyBoaWdobGlnaHQgfSA9IGRlYnVnLnN0eWxlcztcblxuY29uc3QgbmFtZVJlZ0V4cCA9IC9eKD86KEBcXHcrKVxcLyk/KC4qKSQvO1xuXG4vKipcbiAqIERlZmluZXMgYSBuYW1lc3BhY2UgdGhhdCB3cmFwcyBhbiBleHRlcm5hbCBwcm9ncmFtIG9yIHNjcmlwdC5cbiAqXG4gKiBAZXh0ZW5kcyB7Q29tbWFuZH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXh0ZW5zaW9uIHtcblx0LyoqXG5cdCAqIERldGVjdHMgdGhlIGV4dGVuc2lvbiBkZWZpbmVkIGluIHRoZSBzcGVjaWZpZWQgcGF0aCBhbmQgaW5pdGlhbGl6ZXMgaXQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gcGF0aE9yUGFyYW1zIC0gVGhlIHBhdGggdG8gdGhlIGV4dGVuc2lvbiBvciBhIHBhcmFtcyBvYmplY3QuIElmIHRoZVxuXHQgKiBwYXRoIGlzIGEgTm9kZS5qcyBwYWNrYWdlIHdpdGggYSBgcGFja2FnZS5qc29uYCBjb250YWluaW5nIGEgYFwiY2xpLWtpdFwiYCBwcm9wZXJ0eSwgaXQgd2lsbFxuXHQgKiBtZXJnZSB0aGUgZXh0ZXJuYWwgY2xpLWtpdCBjb250ZXh0IHRyZWUgaW50byB0aGlzIG5hbWVzcGFjZS5cblx0ICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIC0gVmFyaW91cyBwYXJhbWV0ZXJzIHdoZW4gYGV4dGVuc2lvblBhdGhgIGlzIGEgYFN0cmluZ2AuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLmV4cG9ydHNdIC0gQSBtYXAgb2YgZXhwb3J0ZWQgY29tbWFuZCBuYW1lcyB0byBkZXNjcmlwdG9ycyBjb250YWluaW5nXG5cdCAqIGBhbGlhc2VzYCwgYGRlc2NgLCBgZXhlYCwgYG1haW5gLCBhbmQgYG5hbWVgIHByb3BzLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW3BhcmFtcy5uYW1lXSAtIFRoZSBleHRlbnNpb24gbmFtZS4gSWYgbm90IHNldCwgaXQgd2lsbCBsb2FkIGl0IGZyb20gdGhlXG5cdCAqIGV4dGVuc2lvbidzIGBwYWNrYWdlLmpzb25gIG9yIHRoZSBmaWxlbmFtZS5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtwYXJhbXMucGF0aF0gLSBUaGUgcGF0aCB0byBhbiBleGVjdXRhYmxlLCBhIEphdmFTY3JpcHQgZmlsZSwgb3IgTm9kZS5qc1xuXHQgKiBwYWNrYWdlLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGF0aE9yUGFyYW1zLCBwYXJhbXMpIHtcblx0XHRsZXQgcGF0aCA9IHBhdGhPclBhcmFtcztcblxuXHRcdGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycgJiYgIXBhcmFtcykge1xuXHRcdFx0cGFyYW1zID0ge307XG5cdFx0fSBlbHNlIGlmIChwYXRoT3JQYXJhbXMgJiYgdHlwZW9mIHBhdGhPclBhcmFtcyA9PT0gJ29iamVjdCcpIHtcblx0XHRcdCh7IHBhdGggfSA9IHBhcmFtcyA9IHBhdGhPclBhcmFtcyk7XG5cdFx0fVxuXG5cdFx0aWYgKCFwYXRoIHx8IHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCBhbiBleHRlbnNpb24gcGF0aCBvciBwYXJhbXMgb2JqZWN0JywgeyBuYW1lOiAncGF0aE9yUGFyYW1zJywgc2NvcGU6ICdFeHRlbnNpb24uY29uc3RydWN0b3InLCB2YWx1ZTogcGF0aE9yUGFyYW1zIH0pO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgcGFyYW1zICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCBleHRlbnNpb24gcGFyYW1zIHRvIGJlIGFuIG9iamVjdCBvciBDb250ZXh0JywgeyBuYW1lOiAncGFyYW1zJywgc2NvcGU6ICdFeHRlbnNpb24uY29uc3RydWN0b3InLCB2YWx1ZTogcGFyYW1zIH0pO1xuXHRcdH1cblxuXHRcdHRoaXMuZXhwb3J0cyA9IHBhcmFtcy5leHBvcnRzIHx8IHt9O1xuXHRcdHRoaXMubmFtZSA9IHBhcmFtcy5uYW1lO1xuXHRcdHRoaXMucGF0aCA9IHBhdGg7XG5cblx0XHRpZiAodHlwZW9mIHRoaXMuZXhwb3J0cyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHRocm93IEUuSU5WQUxJRF9BUkdVTUVOVCgnRXhwZWN0ZWQgZXh0ZW5zaW9uIGV4cG9ydHMgdG8gYmUgYW4gb2JqZWN0JywgeyBuYW1lOiAncGFyYW1zLmV4cG9ydHMnLCBzY29wZTogJ0V4dGVuc2lvbi5jb25zdHJ1Y3RvcicsIHZhbHVlOiBwYXJhbXMuZXhwb3J0cyB9KTtcblx0XHR9XG5cblx0XHQvLyB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGV4dGVuc2lvbiBpcyBhIGJpbmFyeSBvciBpZiBpdCdzIGEgTm9kZSBwYWNrYWdlXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGV4ZSA9IGlzRXhlY3V0YWJsZShwYXRoKTtcblx0XHRcdGlmICghdGhpcy5uYW1lKSB7XG5cdFx0XHRcdHRoaXMubmFtZSA9IGZpbGVuYW1lKGV4ZVswXSk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMucmVnaXN0ZXJFeHRlbnNpb24odGhpcy5uYW1lLCB7IGV4ZSB9LCB7XG5cdFx0XHRcdGFjdGlvbjogYXN5bmMgKHsgX19hcmd2LCBjbWQsIHRlcm1pbmFsIH0pID0+IHtcblx0XHRcdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkoZXhlKSkge1xuXHRcdFx0XHRcdFx0dGhyb3cgRS5OT19FWEVDVVRBQkxFKGBFeHRlbnNpb24gXCIke3RoaXMubmFtZX1cIiBoYXMgbm8gZXhlY3V0YWJsZSFgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBiaW4gPSBleGVbMF07XG5cdFx0XHRcdFx0Y29uc3QgYXJncyA9IGV4ZS5zbGljZSgxKTtcblx0XHRcdFx0XHRjb25zdCBwID0gX19hcmd2LmZpbmRJbmRleChhcmcgPT4gYXJnICYmIGFyZy50eXBlID09PSAnZXh0ZW5zaW9uJyAmJiBhcmcuY29tbWFuZCA9PT0gY21kKTtcblxuXHRcdFx0XHRcdGlmIChwICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IHAgKyAxLCBsZW4gPSBfX2FyZ3YubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0YXJncy5wdXNoLmFwcGx5KGFyZ3MsIF9fYXJndltpXS5pbnB1dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gc3Bhd24gdGhlIHByb2Nlc3Ncblx0XHRcdFx0XHRsb2coYFJ1bm5pbmc6ICR7aGlnaGxpZ2h0KGAke2Jpbn0gJHthcmdzLmpvaW4oJyAnKX1gKX1gKTtcblx0XHRcdFx0XHRjb25zdCBjaGlsZCA9IHNwYXduKGJpbiwgYXJncywgeyB3aW5kb3dzSGlkZTogdHJ1ZSB9KTtcblx0XHRcdFx0XHRjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBkYXRhID0+IHRlcm1pbmFsLnN0ZG91dC53cml0ZShkYXRhLnRvU3RyaW5nKCkpKTtcblx0XHRcdFx0XHRjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBkYXRhID0+IHRlcm1pbmFsLnN0ZGVyci53cml0ZShkYXRhLnRvU3RyaW5nKCkpKTtcblx0XHRcdFx0XHRhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGNoaWxkLm9uKCdjbG9zZScsIChjb2RlID0gMCkgPT4gcmVzb2x2ZSh7IGNvZGUgfSkpKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZGVzYzogcGFyYW1zLmRlc2Ncblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdC8vIG1heWJlIGEgTm9kZSBwYWNrYWdlP1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bGV0IHBrZztcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRwa2cgPSBmaW5kUGFja2FnZShwYXRoKTtcblx0XHRcdFx0XHRpZiAoIXBrZy5yb290KSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHR0aHJvdyBFLklOVkFMSURfRVhURU5TSU9OKGBJbnZhbGlkIGV4dGVuc2lvbjogVW5hYmxlIHRvIGZpbmQgZXhlY3V0YWJsZSwgc2NyaXB0LCBvciBwYWNrYWdlOiAke3R5cGVvZiBwYXRoID09PSAnc3RyaW5nJyA/IGBcIiR7cGF0aH1cImAgOiBKU09OLnN0cmluZ2lmeShwYXRoKX1gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghdGhpcy5uYW1lKSB7XG5cdFx0XHRcdFx0dGhpcy5uYW1lID0gcGtnLmpzb24ubmFtZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghdGhpcy5uYW1lKSB7XG5cdFx0XHRcdFx0dGhpcy5uYW1lID0gZmlsZW5hbWUocGF0aCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBtYWtlRGVmYXVsdEFjdGlvbiA9IG1haW4gPT4ge1xuXHRcdFx0XHRcdHJldHVybiBhc3luYyAoeyBfX2FyZ3YsIGNtZCB9KSA9PiB7XG5cdFx0XHRcdFx0XHRwcm9jZXNzLmFyZ3YgPSBbXG5cdFx0XHRcdFx0XHRcdHByb2Nlc3MuZXhlY1BhdGgsXG5cdFx0XHRcdFx0XHRcdG1haW5cblx0XHRcdFx0XHRcdF07XG5cblx0XHRcdFx0XHRcdGNvbnN0IHAgPSBfX2FyZ3YuZmluZEluZGV4KGFyZyA9PiBhcmcgJiYgYXJnLnR5cGUgPT09ICdleHRlbnNpb24nICYmIGFyZy5jb21tYW5kID09PSBjbWQpO1xuXHRcdFx0XHRcdFx0aWYgKHAgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSBwICsgMSwgbGVuID0gX19hcmd2Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5hcmd2LnB1c2guYXBwbHkocHJvY2Vzcy5hcmd2LCBfX2FyZ3ZbaV0uaW5wdXQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGxvZyhgUmVxdWlyaW5nICR7aGlnaGxpZ2h0KG1haW4pfWApO1xuXHRcdFx0XHRcdFx0bG9nKGBBcmdzOiAke2hpZ2hsaWdodChwcm9jZXNzLmFyZ3Yuam9pbignICcpKX1gKTtcblx0XHRcdFx0XHRcdHJlcXVpcmUobWFpbik7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRpZiAoIXBrZy5qc29uLmV4cG9ydHMgJiYgcGtnLm1haW4pIHtcblx0XHRcdFx0XHQvLyBsZWdhY3kgTm9kZS5qcyBleHRlbnNpb25cblx0XHRcdFx0XHRsZXQgeyBuYW1lIH0gPSB0aGlzO1xuXHRcdFx0XHRcdGNvbnN0IGFsaWFzZXMgPSBBcnJheS5pc0FycmF5KHBrZy5qc29uLmFsaWFzZXMpID8gcGtnLmpzb24uYWxpYXNlcyA6IFtdO1xuXG5cdFx0XHRcdFx0Ly8gaWYgdGhlIHBhY2thZ2UgbmFtZSBjb250YWlucyBhIHNjb3BlLCBhZGQgdGhlIHNjb3BlZCBwYWNrYWdlIG5hbWUgYXMgYSBoaWRkZW5cblx0XHRcdFx0XHQvLyBhbGlhcyBhbmQgc3RyaXAgdGhlIHNjb3BlIGZyb20gdGhlIG5hbWVcblx0XHRcdFx0XHRjb25zdCBtID0gbmFtZS5tYXRjaChuYW1lUmVnRXhwKTtcblx0XHRcdFx0XHRpZiAobSkge1xuXHRcdFx0XHRcdFx0YWxpYXNlcy5wdXNoKGAhJHtuYW1lfWApO1xuXHRcdFx0XHRcdFx0bmFtZSA9IG1bMl07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gaWYgdGhlIG5hbWUgaXMgZGlmZmVyZW50IHRoYW4gdGhlIG9uZSBpbiB0aGUgcGFja2FnZS5qc29uLCBhZGQgaXQgdG8gdGhlIGFsaWFzZXNcblx0XHRcdFx0XHRpZiAobmFtZSAmJiBuYW1lICE9PSBwa2cuanNvbi5uYW1lICYmICFhbGlhc2VzLmluY2x1ZGVzKG5hbWUpKSB7XG5cdFx0XHRcdFx0XHRhbGlhc2VzLnB1c2gobmFtZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gaWYgdGhlIHBhY2thZ2UgaGFzIGEgYmluIHNjcmlwdCB0aGF0IG1hdGNoZXMgdGhlIHBhY2thZ2UgbmFtZSwgdGhlbiBhZGQgYW55IG90aGVyXG5cdFx0XHRcdFx0Ly8gYmluIG5hbWUgdGhhdCBhbGlhc2VzIHRoZSBwYWNrYWdlIG5hbWVkIGJpblxuXHRcdFx0XHRcdGlmIChwa2cuanNvbi5iaW4gJiYgdHlwZW9mIHBrZy5qc29uLmJpbiA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGJpbnMgPSBPYmplY3Qua2V5cyhwa2cuanNvbi5iaW4pO1xuXHRcdFx0XHRcdFx0Y29uc3QgcHJpbWFyeSA9IHBrZy5qc29uLmJpbltwa2cuanNvbi5uYW1lXSB8fCAoYmlucyAmJiBwa2cuanNvbi5iaW5bYmluc1swXV0pO1xuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCBbIG5hbWUsIGJpbiBdIG9mIE9iamVjdC5lbnRyaWVzKHBrZy5qc29uLmJpbikpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGJpbiAhPT0gcHJpbWFyeSAmJiAhYWxpYXNlcy5pbmNsdWRlcyhuYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRcdGFsaWFzZXMucHVzaChuYW1lKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRoaXMucmVnaXN0ZXJFeHRlbnNpb24obmFtZSwgeyBwa2cgfSwge1xuXHRcdFx0XHRcdFx0YWN0aW9uOiBtYWtlRGVmYXVsdEFjdGlvbihwa2cubWFpbiksXG5cdFx0XHRcdFx0XHRhbGlhc2VzLFxuXHRcdFx0XHRcdFx0ZGVzYzogcGtnLmpzb24uZGVzY3JpcHRpb25cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgcGtnLmpzb24uZXhwb3J0cyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0aHJvdyBFLklOVkFMSURfRVhURU5TSU9OKCdJbnZhbGlkIGV4dGVuc2lvbjogRXhwZWN0ZWQgZXhwb3J0cyB0byBiZSBhbiBvYmplY3QnLCB7IG5hbWU6ICdwa2cuanNvbi5leHBvcnRzJywgc2NvcGU6ICdFeHRlbnNpb24uY29uc3RydWN0b3InLCB2YWx1ZTogcGtnLmpzb24uZXhwb3J0cyB9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmb3IgKGxldCBbIG5hbWUsIHBhcmFtcyBdIG9mIE9iamVjdC5lbnRyaWVzKHBrZy5qc29uLmV4cG9ydHMpKSB7XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIHBhcmFtcyA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHRcdFx0cGFyYW1zID0geyBtYWluOiBwYXJhbXMgfTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChwYXJhbXMubWFpbiAmJiAhX3BhdGguaXNBYnNvbHV0ZShwYXJhbXMubWFpbikpIHtcblx0XHRcdFx0XHRcdFx0cGFyYW1zLm1haW4gPSBfcGF0aC5yZXNvbHZlKHBrZy5yb290LCBwYXJhbXMubWFpbik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLnJlZ2lzdGVyRXh0ZW5zaW9uKG5hbWUsIHtcblx0XHRcdFx0XHRcdFx0cGtnOiB7XG5cdFx0XHRcdFx0XHRcdFx0Li4ucGtnLFxuXHRcdFx0XHRcdFx0XHRcdC4uLnBhcmFtc1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LCB7XG5cdFx0XHRcdFx0XHRcdGFjdGlvbjogbWFrZURlZmF1bHRBY3Rpb24ocGFyYW1zLm1haW4pLFxuXHRcdFx0XHRcdFx0XHRkZXNjOiBwa2cuanNvbi5kZXNjcmlwdGlvbixcblx0XHRcdFx0XHRcdFx0Li4ucGFyYW1zXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIU9iamVjdC5rZXlzKHRoaXMuZXhwb3J0cykubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dGhyb3cgRS5JTlZBTElEX0VYVEVOU0lPTihgSW52YWxpZCBleHRlbnNpb246IFVuYWJsZSB0byBmaW5kIGV4dGVuc2lvbidzIG1haW4gZmlsZTogJHt0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycgPyBgXCIke3BhdGh9XCJgIDogSlNPTi5zdHJpbmdpZnkocGF0aCl9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhpcy5lcnIgPSBlO1xuXHRcdFx0XHR3YXJuKGUpO1xuXHRcdFx0XHR3YXJuKCdGb3VuZCBiYWQgZXh0ZW5zaW9uLCBjcmVhdGluZyBlcnJvciBhY3Rpb24nKTtcblxuXHRcdFx0XHR0aGlzLnJlZ2lzdGVyRXh0ZW5zaW9uKHRoaXMubmFtZSwge30sIHtcblx0XHRcdFx0XHRhY3Rpb246ICh7IHRlcm1pbmFsIH0pID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHsgc3RkZXJyIH0gPSB0ZXJtaW5hbDtcblx0XHRcdFx0XHRcdGlmICh0aGlzLmVycikge1xuXHRcdFx0XHRcdFx0XHRsZXQgeyBzdGFjayB9ID0gZTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcCA9IHN0YWNrLmluZGV4T2YoJ1xcblxcbicpO1xuXHRcdFx0XHRcdFx0XHRpZiAocCAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHRzdGFjayA9IHN0YWNrLnN1YnN0cmluZygwLCBwKS50cmltKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBsaW5lIG9mIHN0YWNrLnNwbGl0KCdcXG4nKSkge1xuXHRcdFx0XHRcdFx0XHRcdHN0ZGVyci53cml0ZShgICAke2xpbmV9XFxuYCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHN0ZGVyci53cml0ZShgSW52YWxpZCBleHRlbnNpb246ICR7dGhpcy5uYW1lfVxcbmApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZGVjbGFyZUNMSUtpdENsYXNzKHRoaXMsICdFeHRlbnNpb24nKTtcblxuXHRcdC8vIG1peCBpbiBhbnkgb3RoZXIgY3VzdG9tIHByb3BzXG5cdFx0Zm9yIChjb25zdCBbIGtleSwgdmFsdWUgXSBvZiBPYmplY3QuZW50cmllcyhwYXJhbXMpKSB7XG5cdFx0XHRpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLCBrZXkpKSB7XG5cdFx0XHRcdHRoaXNba2V5XSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyBhIGNvbW1hbmQgd2l0aCB0aGUgZXh0ZW5zaW9uIGV4cG9ydCBpbmZvLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIFRoZSBjb21tYW5kIG5hbWUuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBtZXRhIC0gTWV0YWRhdGEgdG8gbWl4IGludG8gdGhlIGNvbW1hbmQgaW5zdGFuY2UuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBDb21tYW5kIHNwZWNpZmljIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0cmVnaXN0ZXJFeHRlbnNpb24obmFtZSwgbWV0YSwgcGFyYW1zKSB7XG5cdFx0bG9nKGBSZWdpc3RlcmluZyBleHRlbnNpb24gY29tbWFuZDogJHtoaWdobGlnaHQoYCR7dGhpcy5uYW1lfToke25hbWV9YCl9YCk7XG5cdFx0Y29uc3QgY21kID0gbmV3IENvbW1hbmQobmFtZSwge1xuXHRcdFx0cGFyZW50OiB0aGlzLFxuXHRcdFx0Li4ucGFyYW1zXG5cdFx0fSk7XG5cdFx0dGhpcy5leHBvcnRzW25hbWVdID0gT2JqZWN0LmFzc2lnbihjbWQsIG1ldGEpO1xuXHRcdGNtZC5pc0V4dGVuc2lvbiA9IHRydWU7XG5cdFx0Y21kLmlzQ0xJS2l0RXh0ZW5zaW9uID0gISFtZXRhPy5wa2c/LmNsaWtpdDtcblxuXHRcdGlmICghY21kLmlzQ0xJS2l0RXh0ZW5zaW9uIHx8ICFtZXRhLnBrZy5qc29uLmRlcGVuZGVuY2llcz8uWydjbGkta2l0J10pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyB3ZSBvbmx5IHdhbnQgdG8gZGVmaW5lIGBjbWQubG9hZCgpYCBpZiBtYWluIGV4cG9ydHMgYSBjbGkta2l0IG9iamVjdFxuXG5cdFx0Y21kLmxvYWQgPSBhc3luYyBmdW5jdGlvbiBsb2FkKCkge1xuXHRcdFx0bG9nKGBSZXF1aXJpbmcgY2xpLWtpdCBleHRlbnNpb246ICR7aGlnaGxpZ2h0KHRoaXMubmFtZSl9IC0+ICR7aGlnaGxpZ2h0KG1ldGEucGtnLm1haW4pfWApO1xuXHRcdFx0bGV0IGN0eDtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGN0eCA9IHJlcXVpcmUobWV0YS5wa2cubWFpbik7XG5cdFx0XHRcdGlmICghY3R4IHx8ICh0eXBlb2YgY3R4ICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgY3R4ICE9PSAnZnVuY3Rpb24nKSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignRXh0ZW5zaW9uIG11c3QgZXhwb3J0IGFuIG9iamVjdCBvciBmdW5jdGlvbicpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gaWYgdGhpcyBpcyBhbiBFUzYgbW9kdWxlLCBncmFiIHRoZSBkZWZhdWx0IGV4cG9ydFxuXHRcdFx0XHRpZiAoY3R4Ll9fZXNNb2R1bGUpIHtcblx0XHRcdFx0XHRjdHggPSBjdHguZGVmYXVsdDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGlmIHRoZSBleHBvcnQgd2FzIGEgZnVuY3Rpb24sIGNhbGwgaXQgbm93IHRvIGdldCBpdHMgQ0xJIGRlZmluaXRpb25cblx0XHRcdFx0aWYgKHR5cGVvZiBjdHggPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRjdHggPSBhd2FpdCBjdHgodGhpcyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFjdHggfHwgdHlwZW9mIGN0eCAhPT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0V4dGVuc2lvbiBkb2VzIG5vdCByZXNvbHZlIGFuIG9iamVjdCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0dGhyb3cgRS5JTlZBTElEX0VYVEVOU0lPTihgQmFkIGV4dGVuc2lvbiBcIiR7dGhpcy5uYW1lfVwiOiAke2Vyci5tZXNzYWdlfWAsIHsgbmFtZTogdGhpcy5uYW1lLCBzY29wZTogJ0V4dGVuc2lvbi5sb2FkJywgdmFsdWU6IGVyciB9KTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5hbGlhc2VzICAgICAgICAgICAgICAgICAgICAgICAgPSBjdHguYWxpYXNlcztcblx0XHRcdHRoaXMuY2FtZWxDYXNlICAgICAgICAgICAgICAgICAgICAgID0gY3R4LmNhbWVsQ2FzZTtcblx0XHRcdHRoaXMuZGVmYXVsdENvbW1hbmQgICAgICAgICAgICAgICAgID0gY3R4LmRlZmF1bHRDb21tYW5kO1xuXHRcdFx0dGhpcy5oZWxwICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBjdHguaGVscDtcblx0XHRcdHRoaXMucmVtb3RlSGVscCAgICAgICAgICAgICAgICAgICAgID0gY3R4LnJlbW90ZUhlbHA7XG5cdFx0XHR0aGlzLnRyZWF0VW5rbm93bk9wdGlvbnNBc0FyZ3VtZW50cyA9IGN0eC50cmVhdFVua25vd25PcHRpb25zQXNBcmd1bWVudHM7XG5cdFx0XHR0aGlzLnZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICA9IGN0eC52ZXJzaW9uO1xuXG5cdFx0XHR0aGlzLmluaXQoe1xuXHRcdFx0XHRhcmdzOiAgICAgICBjdHguYXJncyxcblx0XHRcdFx0YmFubmVyOiAgICAgY3R4LmJhbm5lcixcblx0XHRcdFx0Y29tbWFuZHM6ICAgY3R4LmNvbW1hbmRzLFxuXHRcdFx0XHRkZXNjOiAgICAgICBjdHguZGVzYyB8fCB0aGlzLmRlc2MsXG5cdFx0XHRcdGV4dGVuc2lvbnM6IGN0eC5leHRlbnNpb25zLFxuXHRcdFx0XHRuYW1lOiAgICAgICB0aGlzLm5hbWUgfHwgY3R4Lm5hbWUsXG5cdFx0XHRcdG9wdGlvbnM6ICAgIGN0eC5vcHRpb25zLFxuXHRcdFx0XHRwYXJlbnQ6ICAgICB0aGlzLnBhcmVudCxcblx0XHRcdFx0dGl0bGU6ICAgICAgY3R4LnRpdGxlICE9PSAnR2xvYmFsJyAmJiBjdHgudGl0bGUgfHwgdGhpcy5uYW1lXG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uc3QgdmVyc2lvbk9wdGlvbiA9IHRoaXMudmVyc2lvbiAmJiB0aGlzLmxvb2t1cC5sb25nLnZlcnNpb247XG5cdFx0XHRpZiAodmVyc2lvbk9wdGlvbiAmJiB0eXBlb2YgdmVyc2lvbk9wdGlvbi5jYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHR2ZXJzaW9uT3B0aW9uLmNhbGxiYWNrID0gYXN5bmMgKHsgZXhpdENvZGUsIG9wdHMsIG5leHQgfSkgPT4ge1xuXHRcdFx0XHRcdGlmIChhd2FpdCBuZXh0KCkpIHtcblx0XHRcdFx0XHRcdGxldCB7IHZlcnNpb24gfSA9IHRoaXM7XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIHZlcnNpb24gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRcdFx0dmVyc2lvbiA9IGF3YWl0IHZlcnNpb24ob3B0cyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQob3B0cy50ZXJtaW5hbCB8fCB0aGlzLmdldCgndGVybWluYWwnKSkuc3Rkb3V0LndyaXRlKGAke3ZlcnNpb259XFxuYCk7XG5cdFx0XHRcdFx0XHRleGl0Q29kZSgwKTtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlb2YgY3R4LmFjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHR0aGlzLmFjdGlvbiA9IGN0eC5hY3Rpb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmFjdGlvbiA9IGFzeW5jIHBhcnNlciA9PiB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuZGVmYXVsdENvbW1hbmQgIT09ICdoZWxwJyB8fCAhdGhpcy5nZXQoJ2hlbHAnKSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZGVmY21kID0gdGhpcy5kZWZhdWx0Q29tbWFuZCAmJiB0aGlzLmNvbW1hbmRzW3RoaXMuZGVmYXVsdENvbW1hbmRdO1xuXHRcdFx0XHRcdFx0aWYgKGRlZmNtZCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYXdhaXQgZGVmY21kLmFjdGlvbi5jYWxsKGRlZmNtZCwgcGFyc2VyKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIGF3YWl0IGhlbHBDb21tYW5kLmFjdGlvbi5jYWxsKGhlbHBDb21tYW5kLCBwYXJzZXIpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH0uYmluZChjbWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHNjaGVtYSBmb3IgdGhpcyBleHRlbnNpb24gYW5kIGFsbCBjaGlsZCBjb250ZXh0cy5cblx0ICpcblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHNjaGVtYSgpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4uc3VwZXIuc2NoZW1hLFxuXHRcdFx0cGF0aDogdGhpcy5wYXRoXG5cdFx0fTtcblx0fVxufVxuIl0sImZpbGUiOiJwYXJzZXIvZXh0ZW5zaW9uLmpzIn0=
{
"name": "cli-kit",
"version": "1.15.0",
"version": "1.16.0",
"description": "Everything you need to create awesome command line interfaces",

@@ -49,18 +49,18 @@ "main": "./dist/index.js",

"pluralize": "^8.0.0",
"semver": "^7.3.5",
"semver": "^7.3.7",
"snooplogg": "^3.0.2",
"source-map-support": "^0.5.20",
"source-map-support": "^0.5.21",
"which": "^2.0.2",
"ws": "^7.5.5"
"ws": "^7.5.7"
},
"devDependencies": {
"@babel/core": "^7.16.0",
"@babel/plugin-proposal-class-properties": "^7.16.0",
"@babel/plugin-proposal-optional-chaining": "^7.16.0",
"@babel/plugin-transform-modules-commonjs": "^7.16.0",
"@babel/register": "^7.16.0",
"@babel/core": "^7.17.9",
"@babel/plugin-proposal-class-properties": "^7.16.7",
"@babel/plugin-proposal-optional-chaining": "^7.16.7",
"@babel/plugin-transform-modules-commonjs": "^7.17.9",
"@babel/register": "^7.17.7",
"babel-eslint": "^10.1.0",
"babel-loader": "^8.2.3",
"babel-loader": "^8.2.5",
"babel-plugin-istanbul": "^6.1.1",
"chai": "^4.3.4",
"chai": "^4.3.6",
"chai-as-promised": "^7.1.1",

@@ -74,4 +74,4 @@ "coveralls": "^3.1.1",

"eslint-plugin-mocha": "^8.2.0",
"eslint-plugin-promise": "^5.1.1",
"eslint-plugin-security": "^1.4.0",
"eslint-plugin-promise": "^5.2.0",
"eslint-plugin-security": "^1.5.0",
"gulp": "^4.0.2",

@@ -78,0 +78,0 @@ "gulp-babel": "^8.0.0",

Sorry, the diff of this file is too big to display

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