appium 2.0.0-beta.20 → 2.0.0-beta.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -2
- package/build/check-npm-pack-files.js +23 -0
- package/build/commands-yml/parse.js +319 -0
- package/build/commands-yml/validator.js +130 -0
- package/build/index.js +19 -0
- package/build/lib/appium.js +22 -7
- package/build/lib/cli/args.js +13 -15
- package/build/lib/cli/npm.js +27 -16
- package/build/lib/cli/parser.js +7 -3
- package/build/lib/config.js +27 -47
- package/build/lib/extension-config.js +1 -1
- package/build/lib/main.js +29 -28
- package/build/lib/plugin-config.js +2 -2
- package/build/lib/plugins.js +4 -2
- package/build/lib/schema/appium-config-schema.js +3 -2
- package/build/lib/schema/arg-spec.js +5 -3
- package/build/lib/schema/cli-args.js +25 -16
- package/build/lib/schema/keywords.js +14 -4
- package/build/lib/schema/schema.js +80 -9
- package/build/lib/utils.js +16 -36
- package/build/postinstall.js +90 -0
- package/build/test/cli/cli-e2e-specs.js +221 -0
- package/build/test/cli/cli-helpers.js +86 -0
- package/build/test/cli/cli-specs.js +71 -0
- package/build/test/cli/fixtures/test-driver/package.json +27 -0
- package/build/test/cli/schema-args-specs.js +48 -0
- package/build/test/cli/schema-e2e-specs.js +47 -0
- package/build/test/config-e2e-specs.js +112 -0
- package/build/test/config-file-e2e-specs.js +209 -0
- package/build/test/config-file-specs.js +281 -0
- package/build/test/config-specs.js +246 -0
- package/build/test/driver-e2e-specs.js +435 -0
- package/build/test/driver-specs.js +386 -0
- package/build/test/ext-config-io-specs.js +181 -0
- package/build/test/extension-config-specs.js +365 -0
- package/build/test/fixtures/allow-feat.txt +5 -0
- package/build/test/fixtures/caps.json +3 -0
- package/build/test/fixtures/config/allow-insecure.txt +3 -0
- package/build/test/fixtures/config/appium.config.bad-nodeconfig.json +5 -0
- package/build/test/fixtures/config/appium.config.bad.json +32 -0
- package/build/test/fixtures/config/appium.config.ext-good.json +9 -0
- package/build/test/fixtures/config/appium.config.ext-unknown-props.json +10 -0
- package/build/test/fixtures/config/appium.config.good.js +40 -0
- package/build/test/fixtures/config/appium.config.good.json +33 -0
- package/build/test/fixtures/config/appium.config.good.yaml +30 -0
- package/build/test/fixtures/config/appium.config.invalid.json +31 -0
- package/build/test/fixtures/config/appium.config.security-array.json +5 -0
- package/build/test/fixtures/config/appium.config.security-delimited.json +5 -0
- package/build/test/fixtures/config/appium.config.security-path.json +5 -0
- package/build/test/fixtures/config/driver-fake.config.json +8 -0
- package/build/test/fixtures/config/nodeconfig.json +3 -0
- package/build/test/fixtures/config/plugin-fake.config.json +0 -0
- package/build/test/fixtures/default-args.js +35 -0
- package/build/test/fixtures/deny-feat.txt +5 -0
- package/build/test/fixtures/driver.schema.js +20 -0
- package/build/test/fixtures/extensions.yaml +27 -0
- package/build/test/fixtures/flattened-schema.js +532 -0
- package/build/test/fixtures/plugin.schema.js +20 -0
- package/build/test/fixtures/schema-with-extensions.js +28 -0
- package/build/test/grid-register-specs.js +74 -0
- package/build/test/helpers.js +75 -0
- package/build/test/logger-specs.js +76 -0
- package/build/test/npm-specs.js +20 -0
- package/build/test/parser-specs.js +319 -0
- package/build/test/plugin-e2e-specs.js +316 -0
- package/build/test/schema/arg-spec-specs.js +70 -0
- package/build/test/schema/cli-args-specs.js +408 -0
- package/build/test/schema/schema-specs.js +407 -0
- package/build/test/utils-specs.js +288 -0
- package/index.js +11 -0
- package/lib/appium-config.schema.json +2 -1
- package/lib/appium.js +51 -8
- package/lib/cli/args.js +17 -14
- package/lib/cli/npm.js +68 -6
- package/lib/cli/parser.js +5 -2
- package/lib/config.js +72 -54
- package/lib/extension-config.js +1 -1
- package/lib/main.js +93 -40
- package/lib/plugin-config.js +1 -1
- package/lib/plugins.js +2 -0
- package/lib/schema/appium-config-schema.js +1 -0
- package/lib/schema/arg-spec.js +12 -2
- package/lib/schema/cli-args.js +22 -34
- package/lib/schema/keywords.js +20 -4
- package/lib/schema/schema.js +142 -22
- package/lib/utils.js +28 -29
- package/package.json +10 -14
- package/types/types.d.ts +5 -0
- package/build/lib/cli/argparse-actions.js +0 -104
- package/lib/cli/argparse-actions.js +0 -77
package/build/lib/cli/npm.js
CHANGED
|
@@ -50,7 +50,7 @@ class NPM {
|
|
|
50
50
|
args.unshift(cmd);
|
|
51
51
|
|
|
52
52
|
if (json) {
|
|
53
|
-
args.push('
|
|
53
|
+
args.push('--json');
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
const npmCmd = _support.system.isWindows() ? 'npm.cmd' : 'npm';
|
|
@@ -65,31 +65,42 @@ class NPM {
|
|
|
65
65
|
runner = async () => await acquireLock(_runner);
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
68
|
+
let ret;
|
|
69
|
+
|
|
70
|
+
try {
|
|
71
|
+
const {
|
|
72
|
+
stdout,
|
|
73
|
+
stderr,
|
|
74
|
+
code
|
|
75
|
+
} = await runner();
|
|
76
|
+
ret = {
|
|
77
|
+
stdout,
|
|
78
|
+
stderr,
|
|
79
|
+
code
|
|
80
|
+
};
|
|
79
81
|
|
|
80
|
-
if (json) {
|
|
81
82
|
try {
|
|
82
83
|
ret.json = JSON.parse(stdout);
|
|
83
84
|
} catch (ign) {}
|
|
85
|
+
} catch (e) {
|
|
86
|
+
const {
|
|
87
|
+
stdout,
|
|
88
|
+
stderr,
|
|
89
|
+
code
|
|
90
|
+
} = e;
|
|
91
|
+
const err = new Error(`npm command '${cmd} ${args.join(' ')}' failed with code ${code}.\n\nSTDOUT:\n${stdout.trim()}\n\nSTDERR:\n${stderr.trim()}`);
|
|
92
|
+
throw err;
|
|
84
93
|
}
|
|
85
94
|
|
|
86
95
|
return ret;
|
|
87
96
|
}
|
|
88
97
|
|
|
89
98
|
async getLatestVersion(pkg) {
|
|
90
|
-
|
|
99
|
+
var _await$this$exec$json;
|
|
100
|
+
|
|
101
|
+
return (_await$this$exec$json = (await this.exec('view', [pkg, 'dist-tags'], {
|
|
91
102
|
json: true
|
|
92
|
-
})).json.latest;
|
|
103
|
+
})).json) === null || _await$this$exec$json === void 0 ? void 0 : _await$this$exec$json.latest;
|
|
93
104
|
}
|
|
94
105
|
|
|
95
106
|
async getLatestSafeUpgradeVersion(pkg, curVersion) {
|
|
@@ -206,4 +217,4 @@ class NPM {
|
|
|
206
217
|
exports.default = NPM;require('source-map-support').install();
|
|
207
218
|
|
|
208
219
|
|
|
209
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvbnBtLmpzIl0sIm5hbWVzIjpbIklOU1RBTExfTE9DS0ZJTEUiLCJMSU5LX0xPQ0tGSUxFIiwiTlBNIiwiY29uc3RydWN0b3IiLCJhcHBpdW1Ib21lIiwiZXhlYyIsImNtZCIsImFyZ3MiLCJvcHRzIiwiZXhlY09wdHMiLCJjd2QiLCJqc29uIiwibG9ja0ZpbGUiLCJkdW1teVBrZ0pzb24iLCJwYXRoIiwicmVzb2x2ZSIsImZzIiwiZXhpc3RzIiwid3JpdGVGaWxlIiwidW5zaGlmdCIsInB1c2giLCJucG1DbWQiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJydW5uZXIiLCJhY3F1aXJlTG9jayIsInV0aWwiLCJnZXRMb2NrRmlsZUd1YXJkIiwiX3J1bm5lciIsInN0ZG91dCIsInN0ZGVyciIsImNvZGUiLCJyZXQiLCJKU09OIiwicGFyc2UiLCJpZ24iLCJnZXRMYXRlc3RWZXJzaW9uIiwicGtnIiwibGF0ZXN0IiwiZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVWZXJzaW9uIiwiY3VyVmVyc2lvbiIsImFsbFZlcnNpb25zIiwiZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVGcm9tVmVyc2lvbnMiLCJzYWZlVXBncmFkZVZlciIsImN1clNlbXZlciIsInNlbXZlciIsIkVycm9yIiwidGVzdFZlciIsInRlc3RTZW12ZXIiLCJwcmVyZWxlYXNlIiwibGVuZ3RoIiwiY29tcGFyZSIsIm1ham9yIiwiZm9ybWF0IiwiaW5zdGFsbFBhY2thZ2UiLCJwa2dEaXIiLCJwa2dOYW1lIiwicGtnVmVyIiwicmVzIiwiZXJyb3IiLCJwa2dKc29uIiwicmVxdWlyZSIsImxpbmtQYWNrYWdlIiwicGtnUGF0aCIsIm5hbWUiLCJwcm9jZXNzIiwicGtnSG9tZSIsInVuaW5zdGFsbFBhY2thZ2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsZ0JBQWdCLEdBQUcsc0JBQXpCO0FBQ0EsTUFBTUMsYUFBYSxHQUFHLG1CQUF0Qjs7QUFF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QUFPLEdBQUdqRCxjQUFLQyxPQUFMLENBQWFrRCxPQUFPLENBQUN2RCxHQUFSLEVBQWIsRUFBNEJxRCxPQUE1QixDQUFWOztBQUVBLFVBQU1HLE9BQU8sR0FBR3BELGNBQUtDLE9BQUwsQ0FBYSxLQUFLWCxVQUFsQixFQUE4Qm9ELE9BQTlCLENBQWhCOztBQUdBLFVBQU1FLEdBQUcsR0FBRyxNQUFNLEtBQUtyRCxJQUFMLENBQVUsTUFBVixFQUFrQixDQUFDLG1CQUFELEVBQXNCMEQsT0FBdEIsQ0FBbEIsRUFBa0Q7QUFBQ3JELE1BQUFBLEdBQUcsRUFBRXdELE9BQU47QUFBZXRELE1BQUFBLFFBQVEsRUFBRVg7QUFBekIsS0FBbEQsQ0FBbEI7O0FBQ0EsUUFBSXlELEdBQUcsQ0FBQy9DLElBQUosSUFBWStDLEdBQUcsQ0FBQy9DLElBQUosQ0FBU2dELEtBQXpCLEVBQWdDO0FBQzlCLFlBQU0sSUFBSWIsS0FBSixDQUFVWSxHQUFHLENBQUMvQyxJQUFKLENBQVNnRCxLQUFuQixDQUFOO0FBQ0Q7O0FBR0QsUUFBSTtBQUNGLGFBQU9FLE9BQU8sQ0FBQy9DLGNBQUtDLE9BQUwsQ0FBYW1ELE9BQWIsRUFBc0IsY0FBdEIsRUFBc0NWLE9BQXRDLEVBQStDLGNBQS9DLENBQUQsQ0FBZDtBQUNELEtBRkQsQ0FFRSxNQUFNO0FBQ04sWUFBTSxJQUFJVixLQUFKLENBQVUsNERBQ0EsaUNBRFYsQ0FBTjtBQUVEO0FBQ0Y7O0FBRXFCLFFBQWhCcUIsZ0JBQWdCLENBQUVaLE1BQUYsRUFBVWxCLEdBQVYsRUFBZTtBQUNuQyxVQUFNLEtBQUtoQyxJQUFMLENBQVUsV0FBVixFQUF1QixDQUFDZ0MsR0FBRCxDQUF2QixFQUE4QjtBQUNsQzNCLE1BQUFBLEdBQUcsRUFBRTZDLE1BRDZCO0FBRWxDM0MsTUFBQUEsUUFBUSxFQUFFWjtBQUZ3QixLQUE5QixDQUFOO0FBSUQ7O0FBbkxzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgeyBmcywgbWtkaXJwLCB1dGlsLCBzeXN0ZW0gfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5jb25zdCBJTlNUQUxMX0xPQ0tGSUxFID0gJy5hcHBpdW0uaW5zdGFsbC5sb2NrJztcbmNvbnN0IExJTktfTE9DS0ZJTEUgPSAnLmFwcGl1bS5saW5rLmxvY2snO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOUE0ge1xuXG4gIGNvbnN0cnVjdG9yIChhcHBpdW1Ib21lKSB7XG4gICAgdGhpcy5hcHBpdW1Ib21lID0gYXBwaXVtSG9tZTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWMgKGNtZCwgYXJncywgb3B0cywgZXhlY09wdHMgPSB7fSkge1xuICAgIGxldCB7IGN3ZCwganNvbiwgbG9ja0ZpbGUgfSA9IG9wdHM7XG4gICAgaWYgKCFjd2QpIHtcbiAgICAgIGN3ZCA9IHRoaXMuYXBwaXVtSG9tZTtcbiAgICB9XG4gICAgLy8gZW5zdXJlIHRoZSBkaXJlY3Rvcnkgd2Ugd2FudCB0byBpbnN0YWxsIGluc2lkZSBvZiBleGlzdHNcbiAgICBhd2FpdCBta2RpcnAoY3dkKTtcblxuICAgIC8vIG5vdCBvbmx5IHRoaXMsIHRoaXMgZGlyZWN0b3J5IG5lZWRzIGEgJ3BhY2thZ2UuanNvbicgaW5zaWRlIG9mIGl0LCBvdGhlcndpc2UsIGlmIGFueVxuICAgIC8vIGRpcmVjdG9yeSBpbiB0aGUgZmlsZXN5c3RlbSB0cmVlIEFCT1ZFIGN3ZCBoYXBwZW5zIHRvIGhhdmUgYSBwYWNrYWdlLmpzb24gb3IgYSBub2RlX21vZHVsZXNcbiAgICAvLyBkaXIgaW4gaXQsIE5QTSB3aWxsIGluc3RhbGwgdGhlIG1vZHVsZSB1cCB0aGVyZSBpbnN0ZWFkIChzaWxseSBOUE0pXG4gICAgY29uc3QgZHVtbXlQa2dKc29uID0gcGF0aC5yZXNvbHZlKGN3ZCwgJ3BhY2thZ2UuanNvbicpO1xuICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKGR1bW15UGtnSnNvbikpIHtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShkdW1teVBrZ0pzb24sICd7fScpO1xuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBwZXJmb3JtIHRoZSBjdXJyZW50IG9wZXJhdGlvbiBpbiBjd2RcbiAgICBleGVjT3B0cyA9IHsuLi5leGVjT3B0cywgY3dkfTtcblxuICAgIGFyZ3MudW5zaGlmdChjbWQpO1xuICAgIGlmIChqc29uKSB7XG4gICAgICBhcmdzLnB1c2goJy1qc29uJyk7XG4gICAgfVxuICAgIGNvbnN0IG5wbUNtZCA9IHN5c3RlbS5pc1dpbmRvd3MoKSA/ICducG0uY21kJyA6ICducG0nO1xuICAgIGxldCBydW5uZXIgPSBhc3luYyAoKSA9PiBhd2FpdCBleGVjKG5wbUNtZCwgYXJncywgZXhlY09wdHMpO1xuICAgIGlmIChsb2NrRmlsZSkge1xuICAgICAgY29uc3QgYWNxdWlyZUxvY2sgPSB1dGlsLmdldExvY2tGaWxlR3VhcmQocGF0aC5yZXNvbHZlKGN3ZCwgbG9ja0ZpbGUpKTtcbiAgICAgIGNvbnN0IF9ydW5uZXIgPSBydW5uZXI7XG4gICAgICBydW5uZXIgPSBhc3luYyAoKSA9PiBhd2FpdCBhY3F1aXJlTG9jayhfcnVubmVyKTtcbiAgICB9XG4gICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyLCBjb2RlfSA9IGF3YWl0IHJ1bm5lcigpO1xuICAgIGNvbnN0IHJldCA9IHtzdGRvdXQsIHN0ZGVyciwgY29kZSwganNvbjogbnVsbH07XG5cbiAgICBpZiAoanNvbikge1xuICAgICAgLy8gaWYgcG9zc2libGUsIHBhcnNlIE5QTSdzIGpzb24gb3V0cHV0LiBEdXJpbmcgTlBNIGluc3RhbGwgM3JkLXBhcnR5XG4gICAgICAvLyBwYWNrYWdlcyBjYW4gd3JpdGUgdG8gc3Rkb3V0LCBzbyBzb21ldGltZXMgdGhlIGpzb24gb3V0cHV0IGNhbid0IGJlXG4gICAgICAvLyBndWFyYW50ZWVkIHRvIGJlIHBhcnNlYWJsZVxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0Lmpzb24gPSBKU09OLnBhcnNlKHN0ZG91dCk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGFzeW5jIGdldExhdGVzdFZlcnNpb24gKHBrZykge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5leGVjKCd2aWV3JywgW3BrZywgJ2Rpc3QtdGFncyddLCB7XG4gICAgICBqc29uOiB0cnVlXG4gICAgfSkpLmpzb24ubGF0ZXN0O1xuICB9XG5cbiAgYXN5bmMgZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVWZXJzaW9uIChwa2csIGN1clZlcnNpb24pIHtcbiAgICBjb25zdCBhbGxWZXJzaW9ucyA9IChhd2FpdCB0aGlzLmV4ZWMoJ3ZpZXcnLCBbcGtnLCAndmVyc2lvbnMnXSwge1xuICAgICAganNvbjogdHJ1ZVxuICAgIH0pKS5qc29uO1xuICAgIHJldHVybiB0aGlzLmdldExhdGVzdFNhZmVVcGdyYWRlRnJvbVZlcnNpb25zKGN1clZlcnNpb24sIGFsbFZlcnNpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhIGN1cnJlbnQgdmVyc2lvbiBhbmQgYSBsaXN0IG9mIGFsbCB2ZXJzaW9ucyBmb3IgYSBwYWNrYWdlLCByZXR1cm4gdGhlIHZlcnNpb24gd2hpY2ggaXNcbiAgICogdGhlIGhpZ2hlc3Qgc2FmZWx5LXVwZ3JhZGFibGUgdmVyc2lvbiAobWVhbmluZyBub3QgY3Jvc3NpbmcgYW55IG1ham9yIHJldmlzaW9uIGJvdW5kYXJpZXMsIGFuZFxuICAgKiBub3QgaW5jbHVkaW5nIGFueSBhbHBoYS9iZXRhL3JjIHZlcnNpb25zKVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VyVmVyc2lvbiAtIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgYSBwYWNrYWdlXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gYWxsVmVyc2lvbnMgLSBhIGxpc3Qgb2YgdmVyc2lvbiBzdHJpbmdzXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ3xudWxsfSAtIHRoZSBoaWdoZXN0IHNhZmVseS11cGdyYWRhYmxlIHZlcnNpb24sIG9yIG51bGwgaWYgdGhlcmUgaXNuJ3Qgb25lXG4gICAqL1xuICBnZXRMYXRlc3RTYWZlVXBncmFkZUZyb21WZXJzaW9ucyAoY3VyVmVyc2lvbiwgYWxsVmVyc2lvbnMpIHtcbiAgICBsZXQgc2FmZVVwZ3JhZGVWZXIgPSBudWxsO1xuICAgIGNvbnN0IGN1clNlbXZlciA9IHNlbXZlci5wYXJzZShjdXJWZXJzaW9uKTtcbiAgICBpZiAoY3VyU2VtdmVyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBwYXJzZSBjdXJyZW50IHZlcnNpb24gJyR7Y3VyVmVyc2lvbn0nYCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdGVzdFZlciBvZiBhbGxWZXJzaW9ucykge1xuICAgICAgY29uc3QgdGVzdFNlbXZlciA9IHNlbXZlci5wYXJzZSh0ZXN0VmVyKTtcbiAgICAgIGlmICh0ZXN0U2VtdmVyID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHBhcnNlIHZlcnNpb24gdG8gdGVzdCBhZ2FpbnN0OiAnJHt0ZXN0VmVyfSdgKTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSB0ZXN0IHZlcnNpb24gaXMgYSBwcmVyZWxlYXNlLCBpZ25vcmUgaXRcbiAgICAgIGlmICh0ZXN0U2VtdmVyLnByZXJlbGVhc2UubGVuZ3RoID4gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSBjdXJyZW50IHZlcnNpb24gaXMgbGF0ZXIgdGhhbiB0aGUgdGVzdCB2ZXJzaW9uLCBza2lwIHRoaXMgdGVzdCB2ZXJzaW9uXG4gICAgICBpZiAoY3VyU2VtdmVyLmNvbXBhcmUodGVzdFNlbXZlcikgPT09IDEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgdGVzdCB2ZXJzaW9uIGlzIG5ld2VyLCBidXQgY3Jvc3NlcyBhIG1ham9yIHJldmlzaW9uIGJvdW5kYXJ5LCBhbHNvIHNraXAgaXRcbiAgICAgIGlmICh0ZXN0U2VtdmVyLm1ham9yID4gY3VyU2VtdmVyLm1ham9yKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gb3RoZXJ3aXNlIHRoaXMgdmVyc2lvbiBpcyBzYWZlIHRvIHVwZ3JhZGUgdG8uIEJ1dCB0aGVyZSBtaWdodCBiZSBtdWx0aXBsZSBvbmVzIG9mIHRoaXNcbiAgICAgIC8vIGtpbmQsIHNvIGtlZXAgaXRlcmF0aW5nIGFuZCBrZWVwaW5nIHRoZSBoaWdoZXN0XG4gICAgICBpZiAoc2FmZVVwZ3JhZGVWZXIgPT09IG51bGwgfHwgdGVzdFNlbXZlci5jb21wYXJlKHNhZmVVcGdyYWRlVmVyKSA9PT0gMSkge1xuICAgICAgICBzYWZlVXBncmFkZVZlciA9IHRlc3RTZW12ZXI7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzYWZlVXBncmFkZVZlcikge1xuICAgICAgc2FmZVVwZ3JhZGVWZXIgPSBzYWZlVXBncmFkZVZlci5mb3JtYXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNhZmVVcGdyYWRlVmVyO1xuICB9XG5cbiAgYXN5bmMgaW5zdGFsbFBhY2thZ2UgKHtwa2dEaXIsIHBrZ05hbWUsIHBrZ1Zlcn0pIHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmV4ZWMoJ2luc3RhbGwnLCBbXG4gICAgICAnLS1uby1zYXZlJyxcbiAgICAgICctLW5vLXBhY2thZ2UtbG9jaycsXG4gICAgICBwa2dWZXIgPyBgJHtwa2dOYW1lfUAke3BrZ1Zlcn1gIDogcGtnTmFtZVxuICAgIF0sIHtcbiAgICAgIGN3ZDogcGtnRGlyLFxuICAgICAganNvbjogdHJ1ZSxcbiAgICAgIGxvY2tGaWxlOiBJTlNUQUxMX0xPQ0tGSUxFXG4gICAgfSk7XG5cbiAgICBpZiAocmVzLmpzb24pIHtcbiAgICAgIC8vIHdlIHBhcnNlZCBhIHZhbGlkIGpzb24gcmVzcG9uc2UsIHNvIGlmIHdlIGdvdCBhbiBlcnJvciBoZXJlLCByZXR1cm4gdGhhdFxuICAgICAgLy8gbWVzc2FnZSBzdHJhaWdodGF3YXlcbiAgICAgIGlmIChyZXMuanNvbi5lcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzLmpzb24uZXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE5vdyByZWFkIHBhY2thZ2UgZGF0YSBmcm9tIHRoZSBpbnN0YWxsZWQgcGFja2FnZSB0byByZXR1cm4sIGFuZCBtYWtlIHN1cmVcbiAgICAvLyBldmVyeXRoaW5nIGdvdCBpbnN0YWxsZWQgb2suIFJlbWVtYmVyLCBwa2dOYW1lIG1pZ2h0IGVuZCB1cCB3aXRoIGEgLyBpbiBpdCBkdWUgdG8gYW4gbnBtXG4gICAgLy8gb3JnLCBzbyBpZiBzbywgdGhhdCB3aWxsIGdldCBjb3JyZWN0bHkgZXhwbG9kZWQgaW50byBtdWx0aXBsZSBkaXJlY3RvcmllcywgYnkgcGF0aC5yZXNvbHZlIGhlcmVcbiAgICAvLyAoZXZlbiBvbiBXaW5kb3dzISlcbiAgICBjb25zdCBwa2dKc29uID0gcGF0aC5yZXNvbHZlKHBrZ0RpciwgJ25vZGVfbW9kdWxlcycsIHBrZ05hbWUsICdwYWNrYWdlLmpzb24nKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlcXVpcmUocGtnSnNvbik7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwYWNrYWdlIHdhcyBub3QgZG93bmxvYWRlZCBjb3JyZWN0bHk7IGl0cyBwYWNrYWdlLmpzb24gJyArXG4gICAgICAgICAgICAgICAgICAgICAgJ2RpZCBub3QgZXhpc3Qgb3Igd2FzIHVucmVhZGFibGUuIFdlIGxvb2tlZCBmb3IgaXQgYXQgJyArXG4gICAgICAgICAgICAgICAgICAgICAgcGtnSnNvbik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbGlua1BhY2thZ2UgKHBrZ1BhdGgpIHtcbiAgICAvLyBmcm9tIHRoZSBwYXRoIGFsb25lIHdlIGRvbid0IGtub3cgdGhlIG5wbSBwYWNrYWdlIG5hbWUsIHNvIHdlIG5lZWQgdG9cbiAgICAvLyBsb29rIGluIHBhY2thZ2UuanNvblxuICAgIGxldCBwa2dOYW1lO1xuICAgIHRyeSB7XG4gICAgICBwa2dOYW1lID0gcmVxdWlyZShwYXRoLnJlc29sdmUocGtnUGF0aCwgJ3BhY2thZ2UuanNvbicpKS5uYW1lO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBwYWNrYWdlLmpzb24gaW5zaWRlIHRoZSBwYWNrYWdlIHBhdGggJyArXG4gICAgICAgICAgICAgICAgICAgICAgYHByb3ZpZGVkOiAke3BrZ1BhdGh9YCk7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBpcyBhZGRlZCB0byBoYW5kbGUgY29tbWFuZHMgd2l0aCByZWxhdGl2ZSBwYXRoc1xuICAgIC8vIGllOiBcIm5vZGUgLiBkcml2ZXIgaW5zdGFsbCAtLXNvdXJjZT1sb2NhbCAuLi9mYWtlLWRyaXZlclwiXG4gICAgcGtnUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBwa2dQYXRoKTtcblxuICAgIGNvbnN0IHBrZ0hvbWUgPSBwYXRoLnJlc29sdmUodGhpcy5hcHBpdW1Ib21lLCBwa2dOYW1lKTtcblxuICAgIC8vIGNhbGwgbGluayB3aXRoIC0tbm8tcGFja2FnZS1sb2NrIHRvIGVuc3VyZSBubyBjb3JydXB0aW9uIHdoaWxlIGluc3RhbGxpbmcgbG9jYWwgcGFja2FnZXNcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmV4ZWMoJ2xpbmsnLCBbJy0tbm8tcGFja2FnZS1sb2NrJywgcGtnUGF0aF0sIHtjd2Q6IHBrZ0hvbWUsIGxvY2tGaWxlOiBMSU5LX0xPQ0tGSUxFfSk7XG4gICAgaWYgKHJlcy5qc29uICYmIHJlcy5qc29uLmVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocmVzLmpzb24uZXJyb3IpO1xuICAgIH1cblxuICAgIC8vIG5vdyBlbnN1cmUgaXQgd2FzIGxpbmtlZCB0byB0aGUgY29ycmVjdCBwbGFjZVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmVxdWlyZShwYXRoLnJlc29sdmUocGtnSG9tZSwgJ25vZGVfbW9kdWxlcycsIHBrZ05hbWUsICdwYWNrYWdlLmpzb24nKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwYWNrYWdlIHdhcyBub3QgbGlua2VkIGNvcnJlY3RseTsgaXRzIHBhY2thZ2UuanNvbiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAnZGlkIG5vdCBleGlzdCBvciB3YXMgdW5yZWFkYWJsZScpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVuaW5zdGFsbFBhY2thZ2UgKHBrZ0RpciwgcGtnKSB7XG4gICAgYXdhaXQgdGhpcy5leGVjKCd1bmluc3RhbGwnLCBbcGtnXSwge1xuICAgICAgY3dkOiBwa2dEaXIsXG4gICAgICBsb2NrRmlsZTogSU5TVEFMTF9MT0NLRklMRVxuICAgIH0pO1xuICB9XG59XG4iXSwiZmlsZSI6ImxpYi9jbGkvbnBtLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
220
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvbnBtLmpzIl0sIm5hbWVzIjpbIklOU1RBTExfTE9DS0ZJTEUiLCJMSU5LX0xPQ0tGSUxFIiwiTlBNIiwiY29uc3RydWN0b3IiLCJhcHBpdW1Ib21lIiwiZXhlYyIsImNtZCIsImFyZ3MiLCJvcHRzIiwiZXhlY09wdHMiLCJjd2QiLCJqc29uIiwibG9ja0ZpbGUiLCJkdW1teVBrZ0pzb24iLCJwYXRoIiwicmVzb2x2ZSIsImZzIiwiZXhpc3RzIiwid3JpdGVGaWxlIiwidW5zaGlmdCIsInB1c2giLCJucG1DbWQiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJydW5uZXIiLCJhY3F1aXJlTG9jayIsInV0aWwiLCJnZXRMb2NrRmlsZUd1YXJkIiwiX3J1bm5lciIsInJldCIsInN0ZG91dCIsInN0ZGVyciIsImNvZGUiLCJKU09OIiwicGFyc2UiLCJpZ24iLCJlIiwiZXJyIiwiRXJyb3IiLCJqb2luIiwidHJpbSIsImdldExhdGVzdFZlcnNpb24iLCJwa2ciLCJsYXRlc3QiLCJnZXRMYXRlc3RTYWZlVXBncmFkZVZlcnNpb24iLCJjdXJWZXJzaW9uIiwiYWxsVmVyc2lvbnMiLCJnZXRMYXRlc3RTYWZlVXBncmFkZUZyb21WZXJzaW9ucyIsInNhZmVVcGdyYWRlVmVyIiwiY3VyU2VtdmVyIiwic2VtdmVyIiwidGVzdFZlciIsInRlc3RTZW12ZXIiLCJwcmVyZWxlYXNlIiwibGVuZ3RoIiwiY29tcGFyZSIsIm1ham9yIiwiZm9ybWF0IiwiaW5zdGFsbFBhY2thZ2UiLCJwa2dEaXIiLCJwa2dOYW1lIiwicGtnVmVyIiwicmVzIiwiZXJyb3IiLCJwa2dKc29uIiwicmVxdWlyZSIsImxpbmtQYWNrYWdlIiwicGtnUGF0aCIsIm5hbWUiLCJwcm9jZXNzIiwicGtnSG9tZSIsInVuaW5zdGFsbFBhY2thZ2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsZ0JBQWdCLEdBQUcsc0JBQXpCO0FBQ0EsTUFB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QUl0QixLQUFKLENBQVUsNERBQ0EsaUNBRFYsQ0FBTjtBQUVEO0FBQ0Y7O0FBTXFCLFFBQWhCaUMsZ0JBQWdCLENBQUVaLE1BQUYsRUFBVWpCLEdBQVYsRUFBZTtBQUNuQyxVQUFNLEtBQUtyQyxJQUFMLENBQVUsV0FBVixFQUF1QixDQUFDcUMsR0FBRCxDQUF2QixFQUE4QjtBQUNsQ2hDLE1BQUFBLEdBQUcsRUFBRWlELE1BRDZCO0FBRWxDL0MsTUFBQUEsUUFBUSxFQUFFWjtBQUZ3QixLQUE5QixDQUFOO0FBSUQ7O0FBdk5zQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZnMsIG1rZGlycCwgdXRpbCwgc3lzdGVtIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuY29uc3QgSU5TVEFMTF9MT0NLRklMRSA9ICcuYXBwaXVtLmluc3RhbGwubG9jayc7XG5jb25zdCBMSU5LX0xPQ0tGSUxFID0gJy5hcHBpdW0ubGluay5sb2NrJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTlBNIHtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcGl1bUhvbWVcbiAgICovXG4gIGNvbnN0cnVjdG9yIChhcHBpdW1Ib21lKSB7XG4gICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gICAgdGhpcy5hcHBpdW1Ib21lID0gYXBwaXVtSG9tZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGBucG1gIHdpdGggZ2l2ZW4gYXJncy5cbiAgICpcbiAgICogSWYgdGhlIHByb2Nlc3MgZXhpdHMgd2l0aCBhIG5vbnplcm8gY29kZSwgdGhlIGNvbnRlbnRzIG9mIGBTVERPVVRgIGFuZCBgU1RERVJSYCB3aWxsIGJlIGluIHRoZVxuICAgKiBgbWVzc2FnZWAgb2YgdGhlIHtAbGluayBUZWVuUHJvY2Vzc0V4ZWNFcnJvcn0gcmVqZWN0ZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbWRcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJnc1xuICAgKiBAcGFyYW0ge3sganNvbj86IGJvb2xlYW47IGN3ZD86IHN0cmluZzsgbG9ja0ZpbGU/OiBzdHJpbmc7IH19IG9wdHNcbiAgICovXG4gIGFzeW5jIGV4ZWMgKGNtZCwgYXJncywgb3B0cywgZXhlY09wdHMgPSB7fSkge1xuICAgIGxldCB7IGN3ZCwganNvbiwgbG9ja0ZpbGUgfSA9IG9wdHM7XG4gICAgaWYgKCFjd2QpIHtcbiAgICAgIGN3ZCA9IHRoaXMuYXBwaXVtSG9tZTtcbiAgICB9XG4gICAgLy8gZW5zdXJlIHRoZSBkaXJlY3Rvcnkgd2Ugd2FudCB0byBpbnN0YWxsIGluc2lkZSBvZiBleGlzdHNcbiAgICBhd2FpdCBta2RpcnAoY3dkKTtcblxuICAgIC8vIG5vdCBvbmx5IHRoaXMsIHRoaXMgZGlyZWN0b3J5IG5lZWRzIGEgJ3BhY2thZ2UuanNvbicgaW5zaWRlIG9mIGl0LCBvdGhlcndpc2UsIGlmIGFueVxuICAgIC8vIGRpcmVjdG9yeSBpbiB0aGUgZmlsZXN5c3RlbSB0cmVlIEFCT1ZFIGN3ZCBoYXBwZW5zIHRvIGhhdmUgYSBwYWNrYWdlLmpzb24gb3IgYSBub2RlX21vZHVsZXNcbiAgICAvLyBkaXIgaW4gaXQsIE5QTSB3aWxsIGluc3RhbGwgdGhlIG1vZHVsZSB1cCB0aGVyZSBpbnN0ZWFkIChzaWxseSBOUE0pXG4gICAgY29uc3QgZHVtbXlQa2dKc29uID0gcGF0aC5yZXNvbHZlKGN3ZCwgJ3BhY2thZ2UuanNvbicpO1xuICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKGR1bW15UGtnSnNvbikpIHtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShkdW1teVBrZ0pzb24sICd7fScpO1xuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBwZXJmb3JtIHRoZSBjdXJyZW50IG9wZXJhdGlvbiBpbiBjd2RcbiAgICBleGVjT3B0cyA9IHsuLi5leGVjT3B0cywgY3dkfTtcblxuICAgIGFyZ3MudW5zaGlmdChjbWQpO1xuICAgIGlmIChqc29uKSB7XG4gICAgICBhcmdzLnB1c2goJy0tanNvbicpO1xuICAgIH1cbiAgICBjb25zdCBucG1DbWQgPSBzeXN0ZW0uaXNXaW5kb3dzKCkgPyAnbnBtLmNtZCcgOiAnbnBtJztcbiAgICBsZXQgcnVubmVyID0gYXN5bmMgKCkgPT4gYXdhaXQgZXhlYyhucG1DbWQsIGFyZ3MsIGV4ZWNPcHRzKTtcbiAgICBpZiAobG9ja0ZpbGUpIHtcbiAgICAgIGNvbnN0IGFjcXVpcmVMb2NrID0gdXRpbC5nZXRMb2NrRmlsZUd1YXJkKHBhdGgucmVzb2x2ZShjd2QsIGxvY2tGaWxlKSk7XG4gICAgICBjb25zdCBfcnVubmVyID0gcnVubmVyO1xuICAgICAgcnVubmVyID0gYXN5bmMgKCkgPT4gYXdhaXQgYWNxdWlyZUxvY2soX3J1bm5lcik7XG4gICAgfVxuXG4gICAgbGV0IHJldDtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyLCBjb2RlfSA9IGF3YWl0IHJ1bm5lcigpO1xuICAgICAgcmV0ID0gLyoqIEB0eXBlIHtUZWVuUHJvY2Vzc0V4ZWNSZXN1bHR9ICovKHtzdGRvdXQsIHN0ZGVyciwgY29kZX0pO1xuICAgICAgLy8gaWYgcG9zc2libGUsIHBhcnNlIE5QTSdzIGpzb24gb3V0cHV0LiBEdXJpbmcgTlBNIGluc3RhbGwgM3JkLXBhcnR5XG4gICAgICAvLyBwYWNrYWdlcyBjYW4gd3JpdGUgdG8gc3Rkb3V0LCBzbyBzb21ldGltZXMgdGhlIGpzb24gb3V0cHV0IGNhbid0IGJlXG4gICAgICAvLyBndWFyYW50ZWVkIHRvIGJlIHBhcnNlYWJsZVxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0Lmpzb24gPSBKU09OLnBhcnNlKHN0ZG91dCk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyLCBjb2RlfSA9IC8qKiBAdHlwZSB7VGVlblByb2Nlc3NFeGVjRXJyb3J9ICovKGUpO1xuICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBucG0gY29tbWFuZCAnJHtjbWR9ICR7YXJncy5qb2luKCcgJyl9JyBmYWlsZWQgd2l0aCBjb2RlICR7Y29kZX0uXFxuXFxuU1RET1VUOlxcbiR7c3Rkb3V0LnRyaW0oKX1cXG5cXG5TVERFUlI6XFxuJHtzdGRlcnIudHJpbSgpfWApO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwa2dcbiAgICovXG4gIGFzeW5jIGdldExhdGVzdFZlcnNpb24gKHBrZykge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5leGVjKCd2aWV3JywgW3BrZywgJ2Rpc3QtdGFncyddLCB7XG4gICAgICBqc29uOiB0cnVlXG4gICAgfSkpLmpzb24/LmxhdGVzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGtnXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJWZXJzaW9uXG4gICAqL1xuICBhc3luYyBnZXRMYXRlc3RTYWZlVXBncmFkZVZlcnNpb24gKHBrZywgY3VyVmVyc2lvbikge1xuICAgIGNvbnN0IGFsbFZlcnNpb25zID0gKGF3YWl0IHRoaXMuZXhlYygndmlldycsIFtwa2csICd2ZXJzaW9ucyddLCB7XG4gICAgICBqc29uOiB0cnVlXG4gICAgfSkpLmpzb247XG4gICAgcmV0dXJuIHRoaXMuZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVGcm9tVmVyc2lvbnMoY3VyVmVyc2lvbiwgYWxsVmVyc2lvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgY3VycmVudCB2ZXJzaW9uIGFuZCBhIGxpc3Qgb2YgYWxsIHZlcnNpb25zIGZvciBhIHBhY2thZ2UsIHJldHVybiB0aGUgdmVyc2lvbiB3aGljaCBpc1xuICAgKiB0aGUgaGlnaGVzdCBzYWZlbHktdXBncmFkYWJsZSB2ZXJzaW9uIChtZWFuaW5nIG5vdCBjcm9zc2luZyBhbnkgbWFqb3IgcmV2aXNpb24gYm91bmRhcmllcywgYW5kXG4gICAqIG5vdCBpbmNsdWRpbmcgYW55IGFscGhhL2JldGEvcmMgdmVyc2lvbnMpXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJWZXJzaW9uIC0gdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBhIHBhY2thZ2VcbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBhbGxWZXJzaW9ucyAtIGEgbGlzdCBvZiB2ZXJzaW9uIHN0cmluZ3NcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfG51bGx9IC0gdGhlIGhpZ2hlc3Qgc2FmZWx5LXVwZ3JhZGFibGUgdmVyc2lvbiwgb3IgbnVsbCBpZiB0aGVyZSBpc24ndCBvbmVcbiAgICovXG4gIGdldExhdGVzdFNhZmVVcGdyYWRlRnJvbVZlcnNpb25zIChjdXJWZXJzaW9uLCBhbGxWZXJzaW9ucykge1xuICAgIGxldCBzYWZlVXBncmFkZVZlciA9IG51bGw7XG4gICAgY29uc3QgY3VyU2VtdmVyID0gc2VtdmVyLnBhcnNlKGN1clZlcnNpb24pO1xuICAgIGlmIChjdXJTZW12ZXIgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHBhcnNlIGN1cnJlbnQgdmVyc2lvbiAnJHtjdXJWZXJzaW9ufSdgKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB0ZXN0VmVyIG9mIGFsbFZlcnNpb25zKSB7XG4gICAgICBjb25zdCB0ZXN0U2VtdmVyID0gc2VtdmVyLnBhcnNlKHRlc3RWZXIpO1xuICAgICAgaWYgKHRlc3RTZW12ZXIgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgcGFyc2UgdmVyc2lvbiB0byB0ZXN0IGFnYWluc3Q6ICcke3Rlc3RWZXJ9J2ApO1xuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIHRlc3QgdmVyc2lvbiBpcyBhIHByZXJlbGVhc2UsIGlnbm9yZSBpdFxuICAgICAgaWYgKHRlc3RTZW12ZXIucHJlcmVsZWFzZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIGN1cnJlbnQgdmVyc2lvbiBpcyBsYXRlciB0aGFuIHRoZSB0ZXN0IHZlcnNpb24sIHNraXAgdGhpcyB0ZXN0IHZlcnNpb25cbiAgICAgIGlmIChjdXJTZW12ZXIuY29tcGFyZSh0ZXN0U2VtdmVyKSA9PT0gMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSB0ZXN0IHZlcnNpb24gaXMgbmV3ZXIsIGJ1dCBjcm9zc2VzIGEgbWFqb3IgcmV2aXNpb24gYm91bmRhcnksIGFsc28gc2tpcCBpdFxuICAgICAgaWYgKHRlc3RTZW12ZXIubWFqb3IgPiBjdXJTZW12ZXIubWFqb3IpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBvdGhlcndpc2UgdGhpcyB2ZXJzaW9uIGlzIHNhZmUgdG8gdXBncmFkZSB0by4gQnV0IHRoZXJlIG1pZ2h0IGJlIG11bHRpcGxlIG9uZXMgb2YgdGhpc1xuICAgICAgLy8ga2luZCwgc28ga2VlcCBpdGVyYXRpbmcgYW5kIGtlZXBpbmcgdGhlIGhpZ2hlc3RcbiAgICAgIGlmIChzYWZlVXBncmFkZVZlciA9PT0gbnVsbCB8fCB0ZXN0U2VtdmVyLmNvbXBhcmUoc2FmZVVwZ3JhZGVWZXIpID09PSAxKSB7XG4gICAgICAgIHNhZmVVcGdyYWRlVmVyID0gdGVzdFNlbXZlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNhZmVVcGdyYWRlVmVyKSB7XG4gICAgICBzYWZlVXBncmFkZVZlciA9IHNhZmVVcGdyYWRlVmVyLmZvcm1hdCgpO1xuICAgIH1cbiAgICByZXR1cm4gc2FmZVVwZ3JhZGVWZXI7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHt7cGtnRGlyOiBzdHJpbmcsIHBrZ05hbWU6IHN0cmluZywgcGtnVmVyPzogc3RyaW5nfX0gcGFyYW0wXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydCgndHlwZS1mZXN0JykuUGFja2FnZUpzb24+fVxuICAgKi9cbiAgYXN5bmMgaW5zdGFsbFBhY2thZ2UgKHtwa2dEaXIsIHBrZ05hbWUsIHBrZ1Zlcn0pIHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmV4ZWMoJ2luc3RhbGwnLCBbXG4gICAgICAnLS1uby1zYXZlJyxcbiAgICAgICctLW5vLXBhY2thZ2UtbG9jaycsXG4gICAgICBwa2dWZXIgPyBgJHtwa2dOYW1lfUAke3BrZ1Zlcn1gIDogcGtnTmFtZVxuICAgIF0sIHtcbiAgICAgIGN3ZDogcGtnRGlyLFxuICAgICAganNvbjogdHJ1ZSxcbiAgICAgIGxvY2tGaWxlOiBJTlNUQUxMX0xPQ0tGSUxFXG4gICAgfSk7XG5cbiAgICBpZiAocmVzLmpzb24pIHtcbiAgICAgIC8vIHdlIHBhcnNlZCBhIHZhbGlkIGpzb24gcmVzcG9uc2UsIHNvIGlmIHdlIGdvdCBhbiBlcnJvciBoZXJlLCByZXR1cm4gdGhhdFxuICAgICAgLy8gbWVzc2FnZSBzdHJhaWdodGF3YXlcbiAgICAgIGlmIChyZXMuanNvbi5lcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzLmpzb24uZXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE5vdyByZWFkIHBhY2thZ2UgZGF0YSBmcm9tIHRoZSBpbnN0YWxsZWQgcGFja2FnZSB0byByZXR1cm4sIGFuZCBtYWtlIHN1cmVcbiAgICAvLyBldmVyeXRoaW5nIGdvdCBpbnN0YWxsZWQgb2suIFJlbWVtYmVyLCBwa2dOYW1lIG1pZ2h0IGVuZCB1cCB3aXRoIGEgLyBpbiBpdCBkdWUgdG8gYW4gbnBtXG4gICAgLy8gb3JnLCBzbyBpZiBzbywgdGhhdCB3aWxsIGdldCBjb3JyZWN0bHkgZXhwbG9kZWQgaW50byBtdWx0aXBsZSBkaXJlY3RvcmllcywgYnkgcGF0aC5yZXNvbHZlIGhlcmVcbiAgICAvLyAoZXZlbiBvbiBXaW5kb3dzISlcbiAgICBjb25zdCBwa2dKc29uID0gcGF0aC5yZXNvbHZlKHBrZ0RpciwgJ25vZGVfbW9kdWxlcycsIHBrZ05hbWUsICdwYWNrYWdlLmpzb24nKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlcXVpcmUocGtnSnNvbik7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwYWNrYWdlIHdhcyBub3QgZG93bmxvYWRlZCBjb3JyZWN0bHk7IGl0cyBwYWNrYWdlLmpzb24gJyArXG4gICAgICAgICAgICAgICAgICAgICAgJ2RpZCBub3QgZXhpc3Qgb3Igd2FzIHVucmVhZGFibGUuIFdlIGxvb2tlZCBmb3IgaXQgYXQgJyArXG4gICAgICAgICAgICAgICAgICAgICAgcGtnSnNvbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwa2dQYXRoXG4gICAqL1xuICBhc3luYyBsaW5rUGFja2FnZSAocGtnUGF0aCkge1xuICAgIC8vIGZyb20gdGhlIHBhdGggYWxvbmUgd2UgZG9uJ3Qga25vdyB0aGUgbnBtIHBhY2thZ2UgbmFtZSwgc28gd2UgbmVlZCB0b1xuICAgIC8vIGxvb2sgaW4gcGFja2FnZS5qc29uXG4gICAgbGV0IHBrZ05hbWU7XG4gICAgdHJ5IHtcbiAgICAgIHBrZ05hbWUgPSByZXF1aXJlKHBhdGgucmVzb2x2ZShwa2dQYXRoLCAncGFja2FnZS5qc29uJykpLm5hbWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIHBhY2thZ2UuanNvbiBpbnNpZGUgdGhlIHBhY2thZ2UgcGF0aCAnICtcbiAgICAgICAgICAgICAgICAgICAgICBgcHJvdmlkZWQ6ICR7cGtnUGF0aH1gKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGlzIGFkZGVkIHRvIGhhbmRsZSBjb21tYW5kcyB3aXRoIHJlbGF0aXZlIHBhdGhzXG4gICAgLy8gaWU6IFwibm9kZSAuIGRyaXZlciBpbnN0YWxsIC0tc291cmNlPWxvY2FsIC4uL2Zha2UtZHJpdmVyXCJcbiAgICBwa2dQYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHBrZ1BhdGgpO1xuXG4gICAgY29uc3QgcGtnSG9tZSA9IHBhdGgucmVzb2x2ZSh0aGlzLmFwcGl1bUhvbWUsIHBrZ05hbWUpO1xuXG4gICAgLy8gY2FsbCBsaW5rIHdpdGggLS1uby1wYWNrYWdlLWxvY2sgdG8gZW5zdXJlIG5vIGNvcnJ1cHRpb24gd2hpbGUgaW5zdGFsbGluZyBsb2NhbCBwYWNrYWdlc1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZXhlYygnbGluaycsIFsnLS1uby1wYWNrYWdlLWxvY2snLCBwa2dQYXRoXSwge2N3ZDogcGtnSG9tZSwgbG9ja0ZpbGU6IExJTktfTE9DS0ZJTEV9KTtcbiAgICBpZiAocmVzLmpzb24gJiYgcmVzLmpzb24uZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihyZXMuanNvbi5lcnJvcik7XG4gICAgfVxuXG4gICAgLy8gbm93IGVuc3VyZSBpdCB3YXMgbGlua2VkIHRvIHRoZSBjb3JyZWN0IHBsYWNlXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiByZXF1aXJlKHBhdGgucmVzb2x2ZShwa2dIb21lLCAnbm9kZV9tb2R1bGVzJywgcGtnTmFtZSwgJ3BhY2thZ2UuanNvbicpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHBhY2thZ2Ugd2FzIG5vdCBsaW5rZWQgY29ycmVjdGx5OyBpdHMgcGFja2FnZS5qc29uICcgK1xuICAgICAgICAgICAgICAgICAgICAgICdkaWQgbm90IGV4aXN0IG9yIHdhcyB1bnJlYWRhYmxlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwa2dEaXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBrZ1xuICAgKi9cbiAgYXN5bmMgdW5pbnN0YWxsUGFja2FnZSAocGtnRGlyLCBwa2cpIHtcbiAgICBhd2FpdCB0aGlzLmV4ZWMoJ3VuaW5zdGFsbCcsIFtwa2ddLCB7XG4gICAgICBjd2Q6IHBrZ0RpcixcbiAgICAgIGxvY2tGaWxlOiBJTlNUQUxMX0xPQ0tGSUxFXG4gICAgfSk7XG4gIH1cbn1cblxuXG4vKipcbiAqIFJlc3VsdCBmcm9tIGEgbm9uLXplcm8tZXhpdCBleGVjdXRpb24gb2YgYGFwcGl1bWBcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFRlZW5Qcm9jZXNzRXhlY1Jlc3VsdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN0ZG91dCAtIFN0ZG91dFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN0ZGVyciAtIFN0ZGVyclxuICogQHByb3BlcnR5IHtudW1iZXI/fSBjb2RlIC0gRXhpdCBjb2RlXG4gKiBAcHJvcGVydHkge2FueX0ganNvbiAtIEpTT04gcGFyc2VkIGZyb20gc3Rkb3V0XG4gKi9cblxuLyoqXG4gKiBFeHRyYSBwcm9wcyBgdGVlbl9wcm9jZXNzLmV4ZWNgIGFkZHMgdG8gaXRzIGVycm9yIG9iamVjdHNcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFRlZW5Qcm9jZXNzRXhlY0Vycm9yUHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdGRvdXQgLSBTVERPVVRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdGRlcnIgLSBTVERFUlJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyP30gY29kZSAtIEV4aXQgY29kZVxuICovXG5cblxuLyoqXG4gKiBFcnJvciB0aHJvd24gYnkgYHRlZW5fcHJvY2Vzcy5leGVjYFxuICogQHR5cGVkZWYge0Vycm9yICYgVGVlblByb2Nlc3NFeGVjRXJyb3JQcm9wc30gVGVlblByb2Nlc3NFeGVjRXJyb3JcbiAqL1xuIl0sImZpbGUiOiJsaWIvY2xpL25wbS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
package/build/lib/cli/parser.js
CHANGED
|
@@ -88,7 +88,7 @@ class ArgParser {
|
|
|
88
88
|
|
|
89
89
|
static _transformParsedArgs(args) {
|
|
90
90
|
return _lodash.default.reduce(args, (unpacked, value, key) => {
|
|
91
|
-
if ((0, _schema.hasArgSpec)(key)) {
|
|
91
|
+
if (!_lodash.default.isUndefined(value) && (0, _schema.hasArgSpec)(key)) {
|
|
92
92
|
const {
|
|
93
93
|
dest
|
|
94
94
|
} = (0, _schema.getArgSpec)(key);
|
|
@@ -104,7 +104,11 @@ class ArgParser {
|
|
|
104
104
|
|
|
105
105
|
static _patchExit(parser) {
|
|
106
106
|
parser.exit = (code, msg) => {
|
|
107
|
-
|
|
107
|
+
if (code) {
|
|
108
|
+
throw new Error(msg);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
process.exit();
|
|
108
112
|
};
|
|
109
113
|
}
|
|
110
114
|
|
|
@@ -194,4 +198,4 @@ var _default = getParser;
|
|
|
194
198
|
exports.default = _default;require('source-map-support').install();
|
|
195
199
|
|
|
196
200
|
|
|
197
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvcGFyc2VyLmpzIl0sIm5hbWVzIjpbIlNFUlZFUl9TVUJDT01NQU5EIiwiTk9OX1NFUlZFUl9BUkdTIiwiT2JqZWN0IiwiZnJlZXplIiwiU2V0IiwiRFJJVkVSX1RZUEUiLCJQTFVHSU5fVFlQRSIsInZlcnNpb24iLCJmcyIsInJlYWRQYWNrYWdlSnNvbkZyb20iLCJyb290RGlyIiwiQXJnUGFyc2VyIiwiY29uc3RydWN0b3IiLCJkZWJ1ZyIsInByb2ciLCJwcm9jZXNzIiwiYXJndiIsInBhdGgiLCJiYXNlbmFtZSIsInBhcnNlciIsIkFyZ3VtZW50UGFyc2VyIiwiYWRkX2hlbHAiLCJkZXNjcmlwdGlvbiIsIl9wYXRjaEV4aXQiLCJhZGRfYXJndW1lbnQiLCJhY3Rpb24iLCJzdWJQYXJzZXJzIiwiYWRkX3N1YnBhcnNlcnMiLCJkZXN0Iiwic2VydmVyQXJncyIsIl9hZGRTZXJ2ZXJUb1BhcnNlciIsInJhd0FyZ3MiLCJfYWRkRXh0ZW5zaW9uQ29tbWFuZHNUb1BhcnNlciIsInBhcnNlX2FyZ3MiLCJwYXJzZUFyZ3MiLCJhcmdzIiwic2xpY2UiLCJoYXMiLCJ1bnNoaWZ0IiwicGFyc2VkIiwiX3RyYW5zZm9ybVBhcnNlZEFyZ3MiLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJtZXNzYWdlIiwiZXhpdCIsIl8iLCJyZWR1Y2UiLCJ1bnBhY2tlZCIsInZhbHVlIiwia2V5Iiwic2V0IiwiY29kZSIsIm1zZyIsIkVycm9yIiwic3ViUGFyc2VyIiwic2VydmVyUGFyc2VyIiwiYWRkX3BhcnNlciIsImhlbHAiLCJmbGFnc09yTmFtZXMiLCJvcHRzIiwidHlwZSIsImV4dFBhcnNlciIsImV4dFN1YlBhcnNlcnMiLCJleHRlbnNpb25BcmdzIiwicGFyc2VyU3BlY3MiLCJjb21tYW5kIiwibGlzdCIsImluc3RhbGwiLCJ1bmluc3RhbGwiLCJ1cGRhdGUiLCJydW4iLCJnZXRQYXJzZXIiLCJCIiwiYWxsIiwiZHJpdmVyQ29uZmlnIiwicmVhZCIsInBsdWdp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RyxvQkFBbUJHLElBQUs7QUFIakMsT0FoQmtCLEVBcUJsQjtBQUNFSyxRQUFBQSxPQUFPLEVBQUUsS0FEWDtBQUVFL0IsUUFBQUEsSUFBSSxFQUFFNkIsYUFBYSxDQUFDSCxJQUFELENBQWIsQ0FBb0JVLEdBRjVCO0FBR0ViLFFBQUFBLElBQUksRUFDRCxvQ0FBbUNHLElBQUssNEJBQXpDLEdBQ0MsZ0VBQStEQSxJQUFLO0FBTHpFLE9BckJrQixDQUFwQjs7QUE4QkEsV0FBSyxNQUFNO0FBQUNLLFFBQUFBLE9BQUQ7QUFBVS9CLFFBQUFBLElBQVY7QUFBZ0J1QixRQUFBQTtBQUFoQixPQUFYLElBQW9DTyxXQUFwQyxFQUFpRDtBQUMvQyxjQUFNOUMsTUFBTSxHQUFHNEMsYUFBYSxDQUFDTixVQUFkLENBQXlCUyxPQUF6QixFQUFrQztBQUFDUixVQUFBQTtBQUFELFNBQWxDLENBQWY7O0FBRUEvQyxRQUFBQSxTQUFTLENBQUNZLFVBQVYsQ0FBcUJKLE1BQXJCOztBQUVBLGFBQUssTUFBTSxDQUFDd0MsWUFBRCxFQUFlQyxJQUFmLENBQVgsSUFBbUN6QixJQUFuQyxFQUF5QztBQUd2Q2hCLFVBQUFBLE1BQU0sQ0FBQ0ssWUFBUCxDQUFvQixHQUFHbUMsWUFBdkIsRUFBcUMsRUFBQyxHQUFHQztBQUFKLFdBQXJDO0FBQ0Q7QUFDRjtBQUNGO0FBQ0Y7O0FBak5hOzs7O0FBNE5oQixlQUFlWSxTQUFmLENBQTBCM0QsS0FBSyxHQUFHLEtBQWxDLEVBQXlDO0FBQ3ZDLFFBQU00RCxrQkFBRUMsR0FBRixDQUFNLENBQUNDLG1CQUFhQyxJQUFiLEVBQUQsRUFBc0JDLG1CQUFhRCxJQUFiLEVBQXRCLENBQU4sQ0FBTjtBQUNBO0FBRUEsU0FBTyxJQUFJakUsU0FBSixDQUFjRSxLQUFkLENBQVA7QUFDRDs7ZUFFYzJELFMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHsgZnMgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgQXJndW1lbnRQYXJzZXIgfSBmcm9tICdhcmdwYXJzZSc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBEUklWRVJfVFlQRSwgUExVR0lOX1RZUEUgfSBmcm9tICcuLi9leHRlbnNpb24tY29uZmlnJztcbmltcG9ydCB7IGZpbmFsaXplU2NoZW1hLCBnZXRBcmdTcGVjLCBoYXNBcmdTcGVjIH0gZnJvbSAnLi4vc2NoZW1hJztcbmltcG9ydCB7IHJvb3REaXIgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge1xuICBkcml2ZXJDb25maWcsXG4gIGdldEV4dGVuc2lvbkFyZ3MsXG4gIGdldFNlcnZlckFyZ3MsXG4gIHBsdWdpbkNvbmZpZ1xufSBmcm9tICcuL2FyZ3MnO1xuXG5leHBvcnQgY29uc3QgU0VSVkVSX1NVQkNPTU1BTkQgPSAnc2VydmVyJztcblxuLyoqXG4gKiBJZiB0aGUgcGFyc2VkIGFyZ3MgZG8gbm90IGNvbnRhaW4gYW55IG9mIHRoZXNlIHZhbHVlcywgdGhlbiB3ZVxuICogd2lsbCBhdXRvbWF0aWFsbHkgaW5qZWN0IHRoZSBgc2VydmVyYCBzdWJjb21tYW5kLlxuICovXG5jb25zdCBOT05fU0VSVkVSX0FSR1MgPSBPYmplY3QuZnJlZXplKFxuICBuZXcgU2V0KFtcbiAgICBEUklWRVJfVFlQRSxcbiAgICBQTFVHSU5fVFlQRSxcbiAgICBTRVJWRVJfU1VCQ09NTUFORCxcbiAgICAnLWgnLFxuICAgICctLWhlbHAnLFxuICAgICctdicsXG4gICAgJy0tdmVyc2lvbidcbiAgXSlcbik7XG5cbmNvbnN0IHZlcnNpb24gPSBmcy5yZWFkUGFja2FnZUpzb25Gcm9tKHJvb3REaXIpLnZlcnNpb247XG5cbi8qKlxuICogQSB3cmFwcGVyIGFyb3VuZCBgYXJncGFyc2VgXG4gKlxuICogLSBIYW5kbGVzIGluc3RhbnRpYXRpb24sIGNvbmZpZ3VyYXRpb24sIGFuZCBtb25rZXlwYXRjaGluZyBvZiBhblxuICogICAgYEFyZ3VtZW50UGFyc2VyYCBpbnN0YW5jZSBmb3IgQXBwaXVtIHNlcnZlciBhbmQgaXRzIGV4dGVuc2lvbnNcbiAqIC0gSGFuZGxlcyBlcnJvciBjb25kaXRpb25zLCBtZXNzYWdlcywgYW5kIGV4aXQgYmVoYXZpb3JcbiAqL1xuY2xhc3MgQXJnUGFyc2VyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RlYnVnXSAtIElmIHRydWUsIHRocm93IGluc3RlYWQgb2YgZXhpdCBvbiBlcnJvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yIChkZWJ1ZyA9IGZhbHNlKSB7XG4gICAgY29uc3QgcHJvZyA9IHByb2Nlc3MuYXJndlsxXSA/IHBhdGguYmFzZW5hbWUocHJvY2Vzcy5hcmd2WzFdKSA6ICdhcHBpdW0nO1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBBcmd1bWVudFBhcnNlcih7XG4gICAgICBhZGRfaGVscDogdHJ1ZSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnQSB3ZWJkcml2ZXItY29tcGF0aWJsZSBzZXJ2ZXIgdGhhdCBmYWNpbGl0YXRlcyBhdXRvbWF0aW9uIG9mIHdlYiwgbW9iaWxlLCBhbmQgb3RoZXIgdHlwZXMgb2YgYXBwcyBhY3Jvc3MgdmFyaW91cyBwbGF0Zm9ybXMuJyxcbiAgICAgIHByb2csXG4gICAgfSk7XG5cbiAgICBBcmdQYXJzZXIuX3BhdGNoRXhpdChwYXJzZXIpO1xuXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbSBuYW1lICh0eXBpY2FsbHkgYGFwcGl1bWApXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnByb2cgPSBwcm9nO1xuXG4gICAgLyoqXG4gICAgICogSWYgYHRydWVgLCB0aHJvdyBhbiBlcnJvciBvbiBwYXJzZSBmYWlsdXJlIGluc3RlYWQgb2YgcHJpbnRpbmcgaGVscFxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGVidWcgPSBkZWJ1ZztcblxuICAgIC8qKlxuICAgICAqIFdyYXBwZWQgYEFyZ3VtZW50UGFyc2VyYCBpbnN0YW5jZVxuICAgICAqIEB0eXBlIHtBcmd1bWVudFBhcnNlcn1cbiAgICAgKi9cbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcblxuICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy12JywgJy0tdmVyc2lvbicsIHtcbiAgICAgIGFjdGlvbjogJ3ZlcnNpb24nLFxuICAgICAgdmVyc2lvbixcbiAgICB9KTtcblxuICAgIGNvbnN0IHN1YlBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoe2Rlc3Q6ICdzdWJjb21tYW5kJ30pO1xuXG4gICAgLy8gYWRkIHRoZSAnc2VydmVyJyBzdWJjb21tYW5kLCBhbmQgc3RvcmUgdGhlIHJhdyBhcmd1bWVudHMgb24gdGhlIHBhcnNlclxuICAgIC8vIG9iamVjdCBhcyBhIHdheSBmb3Igb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUgdG8gd29yayB3aXRoIHRoZSBhcmd1bWVudHNcbiAgICAvLyBjb25jZXB0dWFsbHkgcmF0aGVyIHRoYW4ganVzdCB0aHJvdWdoIGFyZ3BhcnNlXG4gICAgY29uc3Qgc2VydmVyQXJncyA9IEFyZ1BhcnNlci5fYWRkU2VydmVyVG9QYXJzZXIoc3ViUGFyc2Vycyk7XG5cbiAgICB0aGlzLnJhd0FyZ3MgPSBzZXJ2ZXJBcmdzO1xuXG4gICAgLy8gYWRkIHRoZSAnZHJpdmVyJyBhbmQgJ3BsdWdpbicgc3ViY29tbWFuZHNcbiAgICBBcmdQYXJzZXIuX2FkZEV4dGVuc2lvbkNvbW1hbmRzVG9QYXJzZXIoc3ViUGFyc2Vycyk7XG5cbiAgICAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAvIGRyb3AtaW4gd3JhcHBlclxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtBcmdQYXJzZXJbJ3BhcnNlQXJncyddfVxuICAgICAqL1xuICAgIHRoaXMucGFyc2VfYXJncyA9IHRoaXMucGFyc2VBcmdzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGFyZ3VtZW50cyBmcm9tIHRoZSBjb21tYW5kIGxpbmUuXG4gICAqXG4gICAqIElmIG5vIHN1YmNvbW1hbmQgaXMgcGFzc2VkIGluLCB0aGlzIG1ldGhvZCB3aWxsIGluamVjdCB0aGUgYHNlcnZlcmAgc3ViY29tbWFuZC5cbiAgICpcbiAgICogYEFyZ1BhcnNlci5wcm90b3R5cGUucGFyc2VfYXJnc2AgaXMgYW4gYWxpYXMgb2YgdGhpcyBtZXRob2QuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthcmdzXSAtIEFycmF5IG9mIGFyZ3VtZW50cywgb3N0ZW5zaWJseSBmcm9tIGBwcm9jZXNzLmFyZ3ZgLiBHYXRoZXJzIGFyZ3MgZnJvbSBgcHJvY2Vzcy5hcmd2YCBpZiBub3QgcHJvdmlkZWQuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJy4uLy4uL3R5cGVzL3R5cGVzJykuUGFyc2VkQXJnc30gLSBUaGUgcGFyc2VkIGFyZ3VtZW50c1xuICAgKi9cbiAgcGFyc2VBcmdzIChhcmdzID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpKSB7XG4gICAgaWYgKCFOT05fU0VSVkVSX0FSR1MuaGFzKGFyZ3NbMF0pKSB7XG4gICAgICBhcmdzLnVuc2hpZnQoU0VSVkVSX1NVQkNPTU1BTkQpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpO1xuICAgICAgcmV0dXJuIEFyZ1BhcnNlci5fdHJhbnNmb3JtUGFyc2VkQXJncyhwYXJzZWQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgICAgLy8gdGhpcyBpc24ndCB0ZXN0ZWQgdmlhIHVuaXQgdGVzdHMgKHdlIHVzZSBgZGVidWc6IHRydWVgKSBzbyBtYXkgZXNjYXBlIGNvdmVyYWdlLlxuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKCk7IC8vIG5lZWQgYW4gZXh0cmEgc3BhY2Ugc2luY2UgYXJncGFyc2UgcHJpbnRzIHVzYWdlLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKGVyci5tZXNzYWdlKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhbiBvYmplY3QgZnVsbCBvZiBhcmd1bWVudHMgYXMgcmV0dXJuZWQgYnkgYGFyZ3BhcnNlci5wYXJzZV9hcmdzYCxcbiAgICogZXhwYW5kIHRoZSBvbmVzIGZvciBleHRlbnNpb25zIGludG8gYSBuZXN0ZWQgb2JqZWN0IHN0cnVjdHVyZSBhbmQgcmVuYW1lXG4gICAqIGtleXMgdG8gbWF0Y2ggdGhlIGludGVuZGVkIGRlc3RpbmF0aW9uLlxuICAgKlxuICAgKiBFLmcuLCBgeydkcml2ZXItZm9vLWJhcic6IGJhen1gIGJlY29tZXMgYHtkcml2ZXI6IHtmb286IHtiYXI6ICdiYXonfX19YFxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIF90cmFuc2Zvcm1QYXJzZWRBcmdzIChhcmdzKSB7XG4gICAgcmV0dXJuIF8ucmVkdWNlKFxuICAgICAgYXJncyxcbiAgICAgICh1bnBhY2tlZCwgdmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAoaGFzQXJnU3BlYyhrZXkpKSB7XG4gICAgICAgICAgY29uc3Qge2Rlc3R9ID0gLyoqIEB0eXBlIHtpbXBvcnQoJy4uL3NjaGVtYS9hcmctc3BlYycpLkFyZ1NwZWN9ICovKGdldEFyZ1NwZWMoa2V5KSk7XG4gICAgICAgICAgXy5zZXQodW5wYWNrZWQsIGRlc3QsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0aGlzIGNvdWxkIGJlIGFueXRoaW5nIHRoYXQgX2lzbid0XyBhIHNlcnZlciBhcmdcbiAgICAgICAgICB1bnBhY2tlZFtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVucGFja2VkO1xuICAgICAgfSxcbiAgICAgIHt9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUGF0Y2hlcyB0aGUgYGV4aXQoKWAgbWV0aG9kIG9mIHRoZSBwYXJzZXIgdG8gdGhyb3cgYW4gZXJyb3IsIHNvIHdlIGNhbiBoYW5kbGUgaXQgbWFudWFsbHkuXG4gICAqIEBwYXJhbSB7QXJndW1lbnRQYXJzZXJ9IHBhcnNlclxuICAgKi9cbiAgc3RhdGljIF9wYXRjaEV4aXQgKHBhcnNlcikge1xuICAgIHBhcnNlci5leGl0ID0gKGNvZGUsIG1zZykgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge2ltcG9ydCgnYXJncGFyc2UnKS5TdWJQYXJzZXJ9IHN1YlBhcnNlclxuICAgKiBAcmV0dXJucyB7aW1wb3J0KCcuL2FyZ3MnKS5Bcmd1bWVudERlZmluaXRpb25zfVxuICAgKi9cbiAgc3RhdGljIF9hZGRTZXJ2ZXJUb1BhcnNlciAoc3ViUGFyc2VyKSB7XG4gICAgY29uc3Qgc2VydmVyUGFyc2VyID0gc3ViUGFyc2VyLmFkZF9wYXJzZXIoJ3NlcnZlcicsIHtcbiAgICAgIGFkZF9oZWxwOiB0cnVlLFxuICAgICAgaGVscDogJ1J1biBhbiBBcHBpdW0gc2VydmVyJyxcbiAgICB9KTtcblxuICAgIEFyZ1BhcnNlci5fcGF0Y2hFeGl0KHNlcnZlclBhcnNlcik7XG5cbiAgICBjb25zdCBzZXJ2ZXJBcmdzID0gZ2V0U2VydmVyQXJncygpO1xuICAgIGZvciAoY29uc3QgW2ZsYWdzT3JOYW1lcywgb3B0c10gb2Ygc2VydmVyQXJncykge1xuICAgICAgLy8gVFMgZG9lc24ndCBsaWtlIHRoZSBzcHJlYWQgb3BlcmF0b3IgaGVyZS5cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHNlcnZlclBhcnNlci5hZGRfYXJndW1lbnQoLi4uZmxhZ3NPck5hbWVzLCB7Li4ub3B0c30pO1xuICAgIH1cblxuICAgIHJldHVybiBzZXJ2ZXJBcmdzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZXh0ZW5zaW9uIHN1Yi1zdWItY29tbWFuZHMgdG8gYGRyaXZlcmAvYHBsdWdpbmAgc3ViY29tbWFuZHNcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2FyZ3BhcnNlJykuU3ViUGFyc2VyfSBzdWJQYXJzZXJzXG4gICAqL1xuICBzdGF0aWMgX2FkZEV4dGVuc2lvbkNvbW1hbmRzVG9QYXJzZXIgKHN1YlBhcnNlcnMpIHtcbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgW0RSSVZFUl9UWVBFLCBQTFVHSU5fVFlQRV0pIHtcbiAgICAgIGNvbnN0IGV4dFBhcnNlciA9IHN1YlBhcnNlcnMuYWRkX3BhcnNlcih0eXBlLCB7XG4gICAgICAgIGFkZF9oZWxwOiB0cnVlLFxuICAgICAgICBoZWxwOiBgQWNjZXNzIHRoZSAke3R5cGV9IG1hbmFnZW1lbnQgQ0xJIGNvbW1hbmRzYCxcbiAgICAgIH0pO1xuXG4gICAgICBBcmdQYXJzZXIuX3BhdGNoRXhpdChleHRQYXJzZXIpO1xuXG4gICAgICBjb25zdCBleHRTdWJQYXJzZXJzID0gZXh0UGFyc2VyLmFkZF9zdWJwYXJzZXJzKHtcbiAgICAgICAgZGVzdDogYCR7dHlwZX1Db21tYW5kYCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZXh0ZW5zaW9uQXJncyA9IGdldEV4dGVuc2lvbkFyZ3MoKTtcbiAgICAgIGNvbnN0IHBhcnNlclNwZWNzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgY29tbWFuZDogJ2xpc3QnLFxuICAgICAgICAgIGFyZ3M6IGV4dGVuc2lvbkFyZ3NbdHlwZV0ubGlzdCxcbiAgICAgICAgICBoZWxwOiBgTGlzdCBhdmFpbGFibGUgYW5kIGluc3RhbGxlZCAke3R5cGV9c2AsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjb21tYW5kOiAnaW5zdGFsbCcsXG4gICAgICAgICAgYXJnczogZXh0ZW5zaW9uQXJnc1t0eXBlXS5pbnN0YWxsLFxuICAgICAgICAgIGhlbHA6IGBJbnN0YWxsIGEgJHt0eXBlfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjb21tYW5kOiAndW5pbnN0YWxsJyxcbiAgICAgICAgICBhcmdzOiBleHRlbnNpb25BcmdzW3R5cGVdLnVuaW5zdGFsbCxcbiAgICAgICAgICBoZWxwOiBgVW5pbnN0YWxsIGEgJHt0eXBlfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjb21tYW5kOiAndXBkYXRlJyxcbiAgICAgICAgICBhcmdzOiBleHRlbnNpb25BcmdzW3R5cGVdLnVwZGF0ZSxcbiAgICAgICAgICBoZWxwOiBgVXBkYXRlIGluc3RhbGxlZCAke3R5cGV9cyB0byB0aGUgbGF0ZXN0IHZlcnNpb25gLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY29tbWFuZDogJ3J1bicsXG4gICAgICAgICAgYXJnczogZXh0ZW5zaW9uQXJnc1t0eXBlXS5ydW4sXG4gICAgICAgICAgaGVscDpcbiAgICAgICAgICAgIGBSdW4gYSBzY3JpcHQgKGRlZmluZWQgaW5zaWRlIHRoZSAke3R5cGV9J3MgcGFja2FnZS5qc29uIHVuZGVyIHRoZSBgICtcbiAgICAgICAgICAgIGDigJxzY3JpcHRz4oCdIGZpZWxkIGluc2lkZSB0aGUg4oCcYXBwaXVt4oCdIGZpZWxkKSBmcm9tIGFuIGluc3RhbGxlZCAke3R5cGV9YCxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3Qge2NvbW1hbmQsIGFyZ3MsIGhlbHB9IG9mIHBhcnNlclNwZWNzKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlciA9IGV4dFN1YlBhcnNlcnMuYWRkX3BhcnNlcihjb21tYW5kLCB7aGVscH0pO1xuXG4gICAgICAgIEFyZ1BhcnNlci5fcGF0Y2hFeGl0KHBhcnNlcik7XG5cbiAgICAgICAgZm9yIChjb25zdCBbZmxhZ3NPck5hbWVzLCBvcHRzXSBvZiBhcmdzKSB7XG4gICAgICAgICAgLy8gYWRkX2FyZ3VtZW50IG11dGF0ZXMgcGFyYW1zIHNvIG1ha2Ugc3VyZSB0byBzZW5kIGluIGNvcGllcyBpbnN0ZWFkXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoLi4uZmxhZ3NPck5hbWVzLCB7Li4ub3B0c30pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBBcmdQYXJzZXJ9IGluc3RhbmNlLiAgTmVjZXNzYXJpbHkgcmVhZHMgZXh0ZW5zaW9uIGNvbmZpZ3VyYXRpb25cbiAqIGJlZm9yZWhhbmQsIGFuZCBmaW5hbGl6ZXMgdGhlIGNvbmZpZyBzY2hlbWEuXG4gKlxuICogQGNvbnN0cnVjdHMgQXJnUGFyc2VyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtkZWJ1Z10gLSBJZiBgdHJ1ZWAsIHRocm93IGluc3RlYWQgb2YgZXhpdCB1cG9uIHBhcnNpbmcgZXJyb3JcbiAqIEByZXR1cm5zIHtQcm9taXNlPEFyZ1BhcnNlcj59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFBhcnNlciAoZGVidWcgPSBmYWxzZSkge1xuICBhd2FpdCBCLmFsbChbZHJpdmVyQ29uZmlnLnJlYWQoKSwgcGx1Z2luQ29uZmlnLnJlYWQoKV0pO1xuICBmaW5hbGl6ZVNjaGVtYSgpO1xuXG4gIHJldHVybiBuZXcgQXJnUGFyc2VyKGRlYnVnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0UGFyc2VyO1xuZXhwb3J0IHsgZ2V0UGFyc2VyLCBBcmdQYXJzZXIgfTtcbiJdLCJmaWxlIjoibGliL2NsaS9wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
201
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvcGFyc2VyLmpzIl0sIm5hbWVzIjpbIlNFUlZFUl9TVUJDT01NQU5EIiwiTk9OX1NFUlZFUl9BUkdTIiwiT2JqZWN0IiwiZnJlZXplIiwiU2V0IiwiRFJJVkVSX1RZUEUiLCJQTFVHSU5fVFlQRSIsInZlcnNpb24iLCJmcyIsInJlYWRQYWNrYWdlSnNvbkZyb20iLCJyb290RGlyIiwiQXJnUGFyc2VyIiwiY29uc3RydWN0b3IiLCJkZWJ1ZyIsInByb2ciLCJwcm9jZXNzIiwiYXJndiIsInBhdGgiLCJiYXNlbmFtZSIsInBhcnNlciIsIkFyZ3VtZW50UGFyc2VyIiwiYWRkX2hlbHAiLCJkZXNjcmlwdGlvbiIsIl9wYXRjaEV4aXQiLCJhZGRfYXJndW1lbnQiLCJhY3Rpb24iLCJzdWJQYXJzZXJzIiwiYWRkX3N1YnBhcnNlcnMiLCJkZXN0Iiwic2VydmVyQXJncyIsIl9hZGRTZXJ2ZXJUb1BhcnNlciIsInJhd0FyZ3MiLCJfYWRkRXh0ZW5zaW9uQ29tbWFuZHNUb1BhcnNlciIsInBhcnNlX2FyZ3MiLCJwYXJzZUFyZ3MiLCJhcmdzIiwic2xpY2UiLCJoYXMiLCJ1bnNoaWZ0IiwicGFyc2VkIiwiX3RyYW5zZm9ybVBhcnNlZEFyZ3MiLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJtZXNzYWdlIiwiZXhpdCIsIl8iLCJyZWR1Y2UiLCJ1bnBhY2tlZCIsInZhbHVlIiwia2V5IiwiaXNVbmRlZmluZWQiLCJzZXQiLCJjb2RlIiwibXNnIiwiRXJyb3IiLCJzdWJQYXJzZXIiLCJzZXJ2ZXJQYXJzZXIiLCJhZGRfcGFyc2VyIiwiaGVscCIsImZsYWdzT3JOYW1lcyIsIm9wdHMiLCJ0eXBlIiwiZXh0UGFyc2VyIiwiZXh0U3ViUGFyc2VycyIsImV4dGVuc2lvbkFyZ3MiLCJwYXJzZXJTcGVjcyIsImNvbW1hbmQiLCJsaXN0IiwiaW5zdGFsbCIsInVuaW5zdGFsbCIsInVwZGF0ZSIsInJ1biIsImdldFBhcnNlciIsIkIiLCJhbGwiLCJkcml2ZXJDb25maWci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LFMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHsgZnMgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgQXJndW1lbnRQYXJzZXIgfSBmcm9tICdhcmdwYXJzZSc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBEUklWRVJfVFlQRSwgUExVR0lOX1RZUEUgfSBmcm9tICcuLi9leHRlbnNpb24tY29uZmlnJztcbmltcG9ydCB7IGZpbmFsaXplU2NoZW1hLCBnZXRBcmdTcGVjLCBoYXNBcmdTcGVjIH0gZnJvbSAnLi4vc2NoZW1hJztcbmltcG9ydCB7IHJvb3REaXIgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge1xuICBkcml2ZXJDb25maWcsXG4gIGdldEV4dGVuc2lvbkFyZ3MsXG4gIGdldFNlcnZlckFyZ3MsXG4gIHBsdWdpbkNvbmZpZ1xufSBmcm9tICcuL2FyZ3MnO1xuXG5leHBvcnQgY29uc3QgU0VSVkVSX1NVQkNPTU1BTkQgPSAnc2VydmVyJztcblxuLyoqXG4gKiBJZiB0aGUgcGFyc2VkIGFyZ3MgZG8gbm90IGNvbnRhaW4gYW55IG9mIHRoZXNlIHZhbHVlcywgdGhlbiB3ZVxuICogd2lsbCBhdXRvbWF0aWFsbHkgaW5qZWN0IHRoZSBgc2VydmVyYCBzdWJjb21tYW5kLlxuICovXG5jb25zdCBOT05fU0VSVkVSX0FSR1MgPSBPYmplY3QuZnJlZXplKFxuICBuZXcgU2V0KFtcbiAgICBEUklWRVJfVFlQRSxcbiAgICBQTFVHSU5fVFlQRSxcbiAgICBTRVJWRVJfU1VCQ09NTUFORCxcbiAgICAnLWgnLFxuICAgICctLWhlbHAnLFxuICAgICctdicsXG4gICAgJy0tdmVyc2lvbidcbiAgXSlcbik7XG5cbmNvbnN0IHZlcnNpb24gPSBmcy5yZWFkUGFja2FnZUpzb25Gcm9tKHJvb3REaXIpLnZlcnNpb247XG5cbi8qKlxuICogQSB3cmFwcGVyIGFyb3VuZCBgYXJncGFyc2VgXG4gKlxuICogLSBIYW5kbGVzIGluc3RhbnRpYXRpb24sIGNvbmZpZ3VyYXRpb24sIGFuZCBtb25rZXlwYXRjaGluZyBvZiBhblxuICogICAgYEFyZ3VtZW50UGFyc2VyYCBpbnN0YW5jZSBmb3IgQXBwaXVtIHNlcnZlciBhbmQgaXRzIGV4dGVuc2lvbnNcbiAqIC0gSGFuZGxlcyBlcnJvciBjb25kaXRpb25zLCBtZXNzYWdlcywgYW5kIGV4aXQgYmVoYXZpb3JcbiAqL1xuY2xhc3MgQXJnUGFyc2VyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RlYnVnXSAtIElmIHRydWUsIHRocm93IGluc3RlYWQgb2YgZXhpdCBvbiBlcnJvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yIChkZWJ1ZyA9IGZhbHNlKSB7XG4gICAgY29uc3QgcHJvZyA9IHByb2Nlc3MuYXJndlsxXSA/IHBhdGguYmFzZW5hbWUocHJvY2Vzcy5hcmd2WzFdKSA6ICdhcHBpdW0nO1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBBcmd1bWVudFBhcnNlcih7XG4gICAgICBhZGRfaGVscDogdHJ1ZSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnQSB3ZWJkcml2ZXItY29tcGF0aWJsZSBzZXJ2ZXIgdGhhdCBmYWNpbGl0YXRlcyBhdXRvbWF0aW9uIG9mIHdlYiwgbW9iaWxlLCBhbmQgb3RoZXIgdHlwZXMgb2YgYXBwcyBhY3Jvc3MgdmFyaW91cyBwbGF0Zm9ybXMuJyxcbiAgICAgIHByb2csXG4gICAgfSk7XG5cbiAgICBBcmdQYXJzZXIuX3BhdGNoRXhpdChwYXJzZXIpO1xuXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbSBuYW1lICh0eXBpY2FsbHkgYGFwcGl1bWApXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnByb2cgPSBwcm9nO1xuXG4gICAgLyoqXG4gICAgICogSWYgYHRydWVgLCB0aHJvdyBhbiBlcnJvciBvbiBwYXJzZSBmYWlsdXJlIGluc3RlYWQgb2YgcHJpbnRpbmcgaGVscFxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGVidWcgPSBkZWJ1ZztcblxuICAgIC8qKlxuICAgICAqIFdyYXBwZWQgYEFyZ3VtZW50UGFyc2VyYCBpbnN0YW5jZVxuICAgICAqIEB0eXBlIHtBcmd1bWVudFBhcnNlcn1cbiAgICAgKi9cbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcblxuICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy12JywgJy0tdmVyc2lvbicsIHtcbiAgICAgIGFjdGlvbjogJ3ZlcnNpb24nLFxuICAgICAgdmVyc2lvbixcbiAgICB9KTtcblxuICAgIGNvbnN0IHN1YlBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoe2Rlc3Q6ICdzdWJjb21tYW5kJ30pO1xuXG4gICAgLy8gYWRkIHRoZSAnc2VydmVyJyBzdWJjb21tYW5kLCBhbmQgc3RvcmUgdGhlIHJhdyBhcmd1bWVudHMgb24gdGhlIHBhcnNlclxuICAgIC8vIG9iamVjdCBhcyBhIHdheSBmb3Igb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUgdG8gd29yayB3aXRoIHRoZSBhcmd1bWVudHNcbiAgICAvLyBjb25jZXB0dWFsbHkgcmF0aGVyIHRoYW4ganVzdCB0aHJvdWdoIGFyZ3BhcnNlXG4gICAgY29uc3Qgc2VydmVyQXJncyA9IEFyZ1BhcnNlci5fYWRkU2VydmVyVG9QYXJzZXIoc3ViUGFyc2Vycyk7XG5cbiAgICB0aGlzLnJhd0FyZ3MgPSBzZXJ2ZXJBcmdzO1xuXG4gICAgLy8gYWRkIHRoZSAnZHJpdmVyJyBhbmQgJ3BsdWdpbicgc3ViY29tbWFuZHNcbiAgICBBcmdQYXJzZXIuX2FkZEV4dGVuc2lvbkNvbW1hbmRzVG9QYXJzZXIoc3ViUGFyc2Vycyk7XG5cbiAgICAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAvIGRyb3AtaW4gd3JhcHBlclxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtBcmdQYXJzZXJbJ3BhcnNlQXJncyddfVxuICAgICAqL1xuICAgIHRoaXMucGFyc2VfYXJncyA9IHRoaXMucGFyc2VBcmdzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGFyZ3VtZW50cyBmcm9tIHRoZSBjb21tYW5kIGxpbmUuXG4gICAqXG4gICAqIElmIG5vIHN1YmNvbW1hbmQgaXMgcGFzc2VkIGluLCB0aGlzIG1ldGhvZCB3aWxsIGluamVjdCB0aGUgYHNlcnZlcmAgc3ViY29tbWFuZC5cbiAgICpcbiAgICogYEFyZ1BhcnNlci5wcm90b3R5cGUucGFyc2VfYXJnc2AgaXMgYW4gYWxpYXMgb2YgdGhpcyBtZXRob2QuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthcmdzXSAtIEFycmF5IG9mIGFyZ3VtZW50cywgb3N0ZW5zaWJseSBmcm9tIGBwcm9jZXNzLmFyZ3ZgLiBHYXRoZXJzIGFyZ3MgZnJvbSBgcHJvY2Vzcy5hcmd2YCBpZiBub3QgcHJvdmlkZWQuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJy4uLy4uL3R5cGVzL3R5cGVzJykuUGFyc2VkQXJnc30gLSBUaGUgcGFyc2VkIGFyZ3VtZW50c1xuICAgKi9cbiAgcGFyc2VBcmdzIChhcmdzID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpKSB7XG4gICAgaWYgKCFOT05fU0VSVkVSX0FSR1MuaGFzKGFyZ3NbMF0pKSB7XG4gICAgICBhcmdzLnVuc2hpZnQoU0VSVkVSX1NVQkNPTU1BTkQpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpO1xuICAgICAgcmV0dXJuIEFyZ1BhcnNlci5fdHJhbnNmb3JtUGFyc2VkQXJncyhwYXJzZWQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgICAgLy8gdGhpcyBpc24ndCB0ZXN0ZWQgdmlhIHVuaXQgdGVzdHMgKHdlIHVzZSBgZGVidWc6IHRydWVgKSBzbyBtYXkgZXNjYXBlIGNvdmVyYWdlLlxuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKCk7IC8vIG5lZWQgYW4gZXh0cmEgc3BhY2Ugc2luY2UgYXJncGFyc2UgcHJpbnRzIHVzYWdlLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKGVyci5tZXNzYWdlKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhbiBvYmplY3QgZnVsbCBvZiBhcmd1bWVudHMgYXMgcmV0dXJuZWQgYnkgYGFyZ3BhcnNlci5wYXJzZV9hcmdzYCxcbiAgICogZXhwYW5kIHRoZSBvbmVzIGZvciBleHRlbnNpb25zIGludG8gYSBuZXN0ZWQgb2JqZWN0IHN0cnVjdHVyZSBhbmQgcmVuYW1lXG4gICAqIGtleXMgdG8gbWF0Y2ggdGhlIGludGVuZGVkIGRlc3RpbmF0aW9uLlxuICAgKlxuICAgKiBFLmcuLCBgeydkcml2ZXItZm9vLWJhcic6IGJhen1gIGJlY29tZXMgYHtkcml2ZXI6IHtmb286IHtiYXI6ICdiYXonfX19YFxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIF90cmFuc2Zvcm1QYXJzZWRBcmdzIChhcmdzKSB7XG4gICAgcmV0dXJuIF8ucmVkdWNlKFxuICAgICAgYXJncyxcbiAgICAgICh1bnBhY2tlZCwgdmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQodmFsdWUpICYmIGhhc0FyZ1NwZWMoa2V5KSkge1xuICAgICAgICAgIGNvbnN0IHtkZXN0fSA9IC8qKiBAdHlwZSB7aW1wb3J0KCcuLi9zY2hlbWEvYXJnLXNwZWMnKS5BcmdTcGVjfSAqLyhnZXRBcmdTcGVjKGtleSkpO1xuICAgICAgICAgIF8uc2V0KHVucGFja2VkLCBkZXN0LCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gdGhpcyBjb3VsZCBiZSBhbnl0aGluZyB0aGF0IF9pc24ndF8gYSBzZXJ2ZXIgYXJnXG4gICAgICAgICAgdW5wYWNrZWRba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bnBhY2tlZDtcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhdGNoZXMgdGhlIGBleGl0KClgIG1ldGhvZCBvZiB0aGUgcGFyc2VyIHRvIHRocm93IGFuIGVycm9yLCBzbyB3ZSBjYW4gaGFuZGxlIGl0IG1hbnVhbGx5LlxuICAgKiBAcGFyYW0ge0FyZ3VtZW50UGFyc2VyfSBwYXJzZXJcbiAgICovXG4gIHN0YXRpYyBfcGF0Y2hFeGl0IChwYXJzZXIpIHtcbiAgICBwYXJzZXIuZXhpdCA9IChjb2RlLCBtc2cpID0+IHtcbiAgICAgIGlmIChjb2RlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfVxuICAgICAgcHJvY2Vzcy5leGl0KCk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge2ltcG9ydCgnYXJncGFyc2UnKS5TdWJQYXJzZXJ9IHN1YlBhcnNlclxuICAgKiBAcmV0dXJucyB7aW1wb3J0KCcuL2FyZ3MnKS5Bcmd1bWVudERlZmluaXRpb25zfVxuICAgKi9cbiAgc3RhdGljIF9hZGRTZXJ2ZXJUb1BhcnNlciAoc3ViUGFyc2VyKSB7XG4gICAgY29uc3Qgc2VydmVyUGFyc2VyID0gc3ViUGFyc2VyLmFkZF9wYXJzZXIoJ3NlcnZlcicsIHtcbiAgICAgIGFkZF9oZWxwOiB0cnVlLFxuICAgICAgaGVscDogJ1J1biBhbiBBcHBpdW0gc2VydmVyJyxcbiAgICB9KTtcblxuICAgIEFyZ1BhcnNlci5fcGF0Y2hFeGl0KHNlcnZlclBhcnNlcik7XG5cbiAgICBjb25zdCBzZXJ2ZXJBcmdzID0gZ2V0U2VydmVyQXJncygpO1xuICAgIGZvciAoY29uc3QgW2ZsYWdzT3JOYW1lcywgb3B0c10gb2Ygc2VydmVyQXJncykge1xuICAgICAgLy8gVFMgZG9lc24ndCBsaWtlIHRoZSBzcHJlYWQgb3BlcmF0b3IgaGVyZS5cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHNlcnZlclBhcnNlci5hZGRfYXJndW1lbnQoLi4uZmxhZ3NPck5hbWVzLCB7Li4ub3B0c30pO1xuICAgIH1cblxuICAgIHJldHVybiBzZXJ2ZXJBcmdzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZXh0ZW5zaW9uIHN1Yi1zdWItY29tbWFuZHMgdG8gYGRyaXZlcmAvYHBsdWdpbmAgc3ViY29tbWFuZHNcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2FyZ3BhcnNlJykuU3ViUGFyc2VyfSBzdWJQYXJzZXJzXG4gICAqL1xuICBzdGF0aWMgX2FkZEV4dGVuc2lvbkNvbW1hbmRzVG9QYXJzZXIgKHN1YlBhcnNlcnMpIHtcbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgW0RSSVZFUl9UWVBFLCBQTFVHSU5fVFlQRV0pIHtcbiAgICAgIGNvbnN0IGV4dFBhcnNlciA9IHN1YlBhcnNlcnMuYWRkX3BhcnNlcih0eXBlLCB7XG4gICAgICAgIGFkZF9oZWxwOiB0cnVlLFxuICAgICAgICBoZWxwOiBgQWNjZXNzIHRoZSAke3R5cGV9IG1hbmFnZW1lbnQgQ0xJIGNvbW1hbmRzYCxcbiAgICAgIH0pO1xuXG4gICAgICBBcmdQYXJzZXIuX3BhdGNoRXhpdChleHRQYXJzZXIpO1xuXG4gICAgICBjb25zdCBleHRTdWJQYXJzZXJzID0gZXh0UGFyc2VyLmFkZF9zdWJwYXJzZXJzKHtcbiAgICAgICAgZGVzdDogYCR7dHlwZX1Db21tYW5kYCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZXh0ZW5zaW9uQXJncyA9IGdldEV4dGVuc2lvbkFyZ3MoKTtcbiAgICAgIGNvbnN0IHBhcnNlclNwZWNzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgY29tbWFuZDogJ2xpc3QnLFxuICAgICAgICAgIGFyZ3M6IGV4dGVuc2lvbkFyZ3NbdHlwZV0ubGlzdCxcbiAgICAgICAgICBoZWxwOiBgTGlzdCBhdmFpbGFibGUgYW5kIGluc3RhbGxlZCAke3R5cGV9c2AsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjb21tYW5kOiAnaW5zdGFsbCcsXG4gICAgICAgICAgYXJnczogZXh0ZW5zaW9uQXJnc1t0eXBlXS5pbnN0YWxsLFxuICAgICAgICAgIGhlbHA6IGBJbnN0YWxsIGEgJHt0eXBlfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjb21tYW5kOiAndW5pbnN0YWxsJyxcbiAgICAgICAgICBhcmdzOiBleHRlbnNpb25BcmdzW3R5cGVdLnVuaW5zdGFsbCxcbiAgICAgICAgICBoZWxwOiBgVW5pbnN0YWxsIGEgJHt0eXBlfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjb21tYW5kOiAndXBkYXRlJyxcbiAgICAgICAgICBhcmdzOiBleHRlbnNpb25BcmdzW3R5cGVdLnVwZGF0ZSxcbiAgICAgICAgICBoZWxwOiBgVXBkYXRlIGluc3RhbGxlZCAke3R5cGV9cyB0byB0aGUgbGF0ZXN0IHZlcnNpb25gLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY29tbWFuZDogJ3J1bicsXG4gICAgICAgICAgYXJnczogZXh0ZW5zaW9uQXJnc1t0eXBlXS5ydW4sXG4gICAgICAgICAgaGVscDpcbiAgICAgICAgICAgIGBSdW4gYSBzY3JpcHQgKGRlZmluZWQgaW5zaWRlIHRoZSAke3R5cGV9J3MgcGFja2FnZS5qc29uIHVuZGVyIHRoZSBgICtcbiAgICAgICAgICAgIGDigJxzY3JpcHRz4oCdIGZpZWxkIGluc2lkZSB0aGUg4oCcYXBwaXVt4oCdIGZpZWxkKSBmcm9tIGFuIGluc3RhbGxlZCAke3R5cGV9YCxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3Qge2NvbW1hbmQsIGFyZ3MsIGhlbHB9IG9mIHBhcnNlclNwZWNzKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlciA9IGV4dFN1YlBhcnNlcnMuYWRkX3BhcnNlcihjb21tYW5kLCB7aGVscH0pO1xuXG4gICAgICAgIEFyZ1BhcnNlci5fcGF0Y2hFeGl0KHBhcnNlcik7XG5cbiAgICAgICAgZm9yIChjb25zdCBbZmxhZ3NPck5hbWVzLCBvcHRzXSBvZiBhcmdzKSB7XG4gICAgICAgICAgLy8gYWRkX2FyZ3VtZW50IG11dGF0ZXMgcGFyYW1zIHNvIG1ha2Ugc3VyZSB0byBzZW5kIGluIGNvcGllcyBpbnN0ZWFkXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoLi4uZmxhZ3NPck5hbWVzLCB7Li4ub3B0c30pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBBcmdQYXJzZXJ9IGluc3RhbmNlLiAgTmVjZXNzYXJpbHkgcmVhZHMgZXh0ZW5zaW9uIGNvbmZpZ3VyYXRpb25cbiAqIGJlZm9yZWhhbmQsIGFuZCBmaW5hbGl6ZXMgdGhlIGNvbmZpZyBzY2hlbWEuXG4gKlxuICogQGNvbnN0cnVjdHMgQXJnUGFyc2VyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtkZWJ1Z10gLSBJZiBgdHJ1ZWAsIHRocm93IGluc3RlYWQgb2YgZXhpdCB1cG9uIHBhcnNpbmcgZXJyb3JcbiAqIEByZXR1cm5zIHtQcm9taXNlPEFyZ1BhcnNlcj59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFBhcnNlciAoZGVidWcgPSBmYWxzZSkge1xuICBhd2FpdCBCLmFsbChbZHJpdmVyQ29uZmlnLnJlYWQoKSwgcGx1Z2luQ29uZmlnLnJlYWQoKV0pO1xuICBmaW5hbGl6ZVNjaGVtYSgpO1xuXG4gIHJldHVybiBuZXcgQXJnUGFyc2VyKGRlYnVnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0UGFyc2VyO1xuZXhwb3J0IHsgZ2V0UGFyc2VyLCBBcmdQYXJzZXIgfTtcbiJdLCJmaWxlIjoibGliL2NsaS9wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
package/build/lib/config.js
CHANGED
|
@@ -8,9 +8,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.APPIUM_VER = void 0;
|
|
9
9
|
exports.checkNodeOk = checkNodeOk;
|
|
10
10
|
exports.getBuildInfo = getBuildInfo;
|
|
11
|
-
exports.getDeprecatedArgs = getDeprecatedArgs;
|
|
12
11
|
exports.getGitRev = getGitRev;
|
|
13
12
|
exports.getNonDefaultServerArgs = getNonDefaultServerArgs;
|
|
13
|
+
exports.showBuildInfo = showBuildInfo;
|
|
14
14
|
exports.showConfig = showConfig;
|
|
15
15
|
exports.updateBuildInfo = updateBuildInfo;
|
|
16
16
|
exports.validateTmpDir = validateTmpDir;
|
|
@@ -32,8 +32,6 @@ var _logger = _interopRequireDefault(require("./logger"));
|
|
|
32
32
|
|
|
33
33
|
var _semver = _interopRequireDefault(require("semver"));
|
|
34
34
|
|
|
35
|
-
var _argparseActions = require("./cli/argparse-actions");
|
|
36
|
-
|
|
37
35
|
var _findUp = _interopRequireDefault(require("find-up"));
|
|
38
36
|
|
|
39
37
|
var _schema = require("./schema/schema");
|
|
@@ -54,10 +52,6 @@ function getNodeVersion() {
|
|
|
54
52
|
return _semver.default.coerce(process.version);
|
|
55
53
|
}
|
|
56
54
|
|
|
57
|
-
function isSubClass(candidateClass, superClass) {
|
|
58
|
-
return _lodash.default.isFunction(superClass) && _lodash.default.isFunction(candidateClass) && (candidateClass.prototype instanceof superClass || candidateClass === superClass);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
55
|
async function updateBuildInfo(useGithubApiFallback = false) {
|
|
62
56
|
const sha = await getGitRev(useGithubApiFallback);
|
|
63
57
|
|
|
@@ -173,64 +167,50 @@ function checkNodeOk() {
|
|
|
173
167
|
|
|
174
168
|
function warnNodeDeprecations() {}
|
|
175
169
|
|
|
176
|
-
async function
|
|
170
|
+
async function showBuildInfo() {
|
|
177
171
|
await updateBuildInfo(true);
|
|
178
172
|
console.log(JSON.stringify(getBuildInfo()));
|
|
179
173
|
}
|
|
180
174
|
|
|
181
|
-
function getNonDefaultServerArgs(
|
|
182
|
-
|
|
183
|
-
return typeof args[dest] !== typeof defaultsFromSchema[dest];
|
|
184
|
-
}
|
|
175
|
+
function getNonDefaultServerArgs(args) {
|
|
176
|
+
const typesDiffer = dest => typeof args[dest] !== typeof defaultsFromSchema[dest];
|
|
185
177
|
|
|
186
|
-
|
|
187
|
-
return _lodash.default.isArray(defaultsFromSchema[dest]);
|
|
188
|
-
}
|
|
178
|
+
const defaultValueIsArray = dest => _lodash.default.isArray(defaultsFromSchema[dest]);
|
|
189
179
|
|
|
190
|
-
|
|
191
|
-
return _lodash.default.isArray(args[dest]);
|
|
192
|
-
}
|
|
180
|
+
const argsValueIsArray = dest => _lodash.default.isArray(args[dest]);
|
|
193
181
|
|
|
194
|
-
|
|
195
|
-
return _lodash.default.difference(args[dest], defaultsFromSchema[dest]).length > 0;
|
|
196
|
-
}
|
|
182
|
+
const arraysDiffer = dest => _lodash.default.gt(_lodash.default.size(_lodash.default.difference(args[dest], defaultsFromSchema[dest])), 0);
|
|
197
183
|
|
|
198
|
-
|
|
199
|
-
return args[dest] !== defaultsFromSchema[dest];
|
|
200
|
-
}
|
|
184
|
+
const valuesDiffer = dest => args[dest] !== defaultsFromSchema[dest];
|
|
201
185
|
|
|
202
|
-
|
|
203
|
-
return !_lodash.default.isUndefined(defaultsFromSchema[dest]);
|
|
204
|
-
}
|
|
186
|
+
const defaultIsDefined = dest => !_lodash.default.isUndefined(defaultsFromSchema[dest]);
|
|
205
187
|
|
|
206
188
|
const argValueNotArrayOrArraysDiffer = _lodash.default.overSome([_lodash.default.negate(argsValueIsArray), arraysDiffer]);
|
|
207
189
|
|
|
208
|
-
const
|
|
190
|
+
const defaultValueNotArrayAndValuesDiffer = _lodash.default.overEvery([_lodash.default.negate(defaultValueIsArray), valuesDiffer]);
|
|
209
191
|
|
|
210
|
-
const isNotDefault = _lodash.default.overEvery([defaultIsDefined, _lodash.default.overSome([typesDiffer, _lodash.default.overEvery([defaultValueIsArray, argValueNotArrayOrArraysDiffer]),
|
|
192
|
+
const isNotDefault = _lodash.default.overEvery([defaultIsDefined, _lodash.default.overSome([typesDiffer, _lodash.default.overEvery([defaultValueIsArray, argValueNotArrayOrArraysDiffer]), defaultValueNotArrayAndValuesDiffer])]);
|
|
211
193
|
|
|
212
|
-
const defaultsFromSchema = (0, _schema.
|
|
194
|
+
const defaultsFromSchema = (0, _schema.getDefaultsForSchema)();
|
|
213
195
|
return _lodash.default.pickBy(args, (__, key) => isNotDefault(key));
|
|
214
196
|
}
|
|
215
197
|
|
|
216
|
-
|
|
217
|
-
return parser.rawArgs.reduce((acc, [[name], {
|
|
218
|
-
dest,
|
|
219
|
-
default: defaultValue,
|
|
220
|
-
action
|
|
221
|
-
}]) => {
|
|
222
|
-
if (!args[dest] || args[dest] === defaultValue) {
|
|
223
|
-
return acc;
|
|
224
|
-
}
|
|
198
|
+
const compactConfig = _lodash.default.partial(_lodash.default.omitBy, _lodash.default, (value, key) => key === 'subcommand' || _lodash.default.isUndefined(value) || _lodash.default.isObject(value) && _lodash.default.isEmpty(value));
|
|
225
199
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
}
|
|
200
|
+
function showConfig(preConfigParsedArgs, configResult, defaults) {
|
|
201
|
+
console.log('Appium Configuration\n');
|
|
202
|
+
|
|
203
|
+
if (configResult.config) {
|
|
204
|
+
console.log(`via config file at ${configResult.filepath}:\n`);
|
|
205
|
+
console.dir(compactConfig(configResult.config));
|
|
206
|
+
} else {
|
|
207
|
+
console.log(`(no configuration file loaded)\n`);
|
|
208
|
+
}
|
|
231
209
|
|
|
232
|
-
|
|
233
|
-
|
|
210
|
+
console.log('via CLI or function call:\n');
|
|
211
|
+
console.dir(compactConfig(preConfigParsedArgs));
|
|
212
|
+
console.log('\nvia defaults:\n');
|
|
213
|
+
console.dir(compactConfig(defaults));
|
|
234
214
|
}
|
|
235
215
|
|
|
236
216
|
async function validateTmpDir(tmpDir) {
|
|
@@ -242,4 +222,4 @@ async function validateTmpDir(tmpDir) {
|
|
|
242
222
|
}require('source-map-support').install();
|
|
243
223
|
|
|
244
224
|
|
|
245
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb25maWcuanMiXSwibmFtZXMiOlsibnBtUGFja2FnZSIsImZzIiwicmVhZFBhY2thZ2VKc29uRnJvbSIsIl9fZGlybmFtZSIsIkFQUElVTV9WRVIiLCJ2ZXJzaW9uIiwiTUlOX05PREVfVkVSU0lPTiIsImVuZ2luZXMiLCJub2RlIiwiR0lUX01FVEFfUk9PVCIsIkdJVF9CSU5BUlkiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJHSVRIVUJfQVBJIiwiQlVJTERfSU5GTyIsImdldE5vZGVWZXJzaW9uIiwic2VtdmVyIiwiY29lcmNlIiwicHJvY2VzcyIsImlzU3ViQ2xhc3MiLCJjYW5kaWRhdGVDbGFzcyIsInN1cGVyQ2xhc3MiLCJfIiwiaXNGdW5jdGlvbiIsInByb3RvdHlwZSIsInVwZGF0ZUJ1aWxkSW5mbyIsInVzZUdpdGh1YkFwaUZhbGxiYWNrIiwic2hhIiwiZ2V0R2l0UmV2IiwiYnVpbHQiLCJnZXRHaXRUaW1lc3RhbXAiLCJpc0VtcHR5IiwiZmluZEdpdFJvb3QiLCJjd2QiLCJyb290RGlyIiwidHlwZSIsImdpdFJvb3QiLCJzdGRvdXQiLCJ0cmltIiwiaWduIiwicmVzQm9keU9iaiIsImF4aW9zIiwiZ2V0IiwiaGVhZGVycyIsImRhdGEiLCJpc0FycmF5IiwibmFtZSIsImNvbW1pdCIsImNvbW1pdFNoYSIsImNvbW1pdHRlciIsImRhdGUiLCJhdXRob3IiLCJnZXRCdWlsZEluZm8iLCJjaGVja05vZGVPayIsInNhdGlzZmllcyIsImxvZ2dlciIsImVycm9yQW5kVGhyb3ciLCJ3YXJuTm9kZURlcHJlY2F0aW9ucyIsInNob3dDb25maWciLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldE5vbkRlZmF1bHRTZXJ2ZXJBcmdzIiwicGFyc2VyIiwiYXJncyIsInR5cGVzRGlmZmVyIiwiZGVzdCIsImRlZmF1bHRzRnJvbVNjaGVtYSIsImRlZmF1bHRWYWx1ZUlzQXJyYXkiLCJhcmdzVmFsdWVJc0FycmF5IiwiYXJyYXlzRGlmZmVyIiwiZGlmZmVyZW5jZSIsImxlbmd0aCIsInZhbHVlc1VuZXF1YWwiLCJkZWZhdWx0SXNEZWZpbmVkIiwiaXNVbmRlZmluZWQiLCJhcmdWYWx1ZU5vdEFycmF5T3JBcnJheXNEaWZmZXIiLCJvdmVyU29tZSIsIm5lZ2F0ZSIsImRlZmF1bHRWYWx1ZU5vdEFycmF5QW5kVmFsdWVzVW5lcXVhbCIsIm92ZXJFdmVyeSIsImlzTm90RGVmYXVsdCIsInBpY2tCeSIsIl9fIiwia2V5IiwiZ2V0RGVwcmVjYXRlZEFyZ3MiLCJyYXdBcmdzIiwicmVkdWNlIiwiYWNjIiwiZGVmYXVsdCIsImRlZmF1bHRWYWx1ZSIsImFjdGlvbiIsImRlcHJlY2F0ZWRfZm9yIiwiU3RvcmVEZXByZWNhdGVkRGVmYXVsdENhcGFiaWxpdHlBY3Rpb24iLCJERUZBVUxUX0NBUFNfQVJHIiwidmFsaWRhdGVUbXBEaXIiLCJ0bXBEaXIiLCJlIiwiRXJyb3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBRUEsTUFBTUEsVUFBVSxHQUFHQyxZQUFHQyxtQkFBSCxDQUF1QkMsU0FBdkIsQ0FBbkI7O0FBRUEsTUFBTUMsVUFBVSxHQUFHSixVQUFVLENBQUNLLE9BQTlCOztBQUNBLE1BQU1DLGdCQUFnQixHQUFHTixVQUFVLENBQUNPLE9BQVgsQ0FBbUJDLElBQTVDO0FBRUEsTUFBTUMsYUFBYSxHQUFHLE1BQXRCO0FBQ0EsTUFBTUMsVUFBVSxHQUFJLE1BQUtDLGdCQUFPQyxTQUFQLEtBQXFCLE1BQXJCLEdBQThCLEVBQUcsRUFBMUQ7QUFDQSxNQUFNQyxVQUFVLEdBQUcsNENBQW5CO0FBRUEsTUFBTUMsVUFBVSxHQUFHO0FBQ2pCVCxFQUFBQSxPQUFPLEVBQUVEO0FBRFEsQ0FBbkI7O0FBSUEsU0FBU1csY0FBVCxHQUEyQjtBQUN6QixTQUFPQyxnQkFBT0MsTUFBUCxDQUFjQyxPQUFPLENBQUNiLE9BQXRCLENBQVA7QUFDRDs7QUFFRCxTQUFTYyxVQUFULENBQXFCQyxjQUFyQixFQUFxQ0MsVUFBckMsRUFBaUQ7QUFDL0MsU0FBT0MsZ0JBQUVDLFVBQUYsQ0FBYUYsVUFBYixLQUE0QkMsZ0JBQUVDLFVBQUYsQ0FBYUgsY0FBYixDQUE1QixLQUNEQSxjQUFjLENBQUNJLFNBQWYsWUFBb0NILFVBQXBDLElBQWtERCxjQUFjLEtBQUtDLFVBRHBFLENBQVA7QUFFRDs7QUFFRCxlQUFlSSxlQUFmLENBQWdDQyxvQkFBb0IsR0FBRyxLQUF2RCxFQUE4RDtBQUM1RCxRQUFNQyxHQUFHLEdBQUcsTUFBTUMsU0FBUyxDQUFDRixvQkFBRCxDQUEzQjs7QUFDQSxNQUFJLENBQUNDLEdBQUwsRUFBVTtBQUNSO0FBQ0Q7O0FBQ0RiLEVBQUFBLFVBQVUsQ0FBQyxTQUFELENBQVYsR0FBd0JhLEdBQXhCO0FBQ0EsUUFBTUUsS0FBSyxHQUFHLE1BQU1DLGVBQWUsQ0FBQ0gsR0FBRCxFQUFNRCxvQkFBTixDQUFuQzs7QUFDQSxNQUFJLENBQUNKLGdCQUFFUyxPQUFGLENBQVVGLEtBQVYsQ0FBTCxFQUF1QjtBQUNyQmYsSUFBQUEsVUFBVSxDQUFDZSxLQUFYLEdBQW1CQSxLQUFuQjtBQUNEO0FBQ0Y7O0FBU0QsZUFBZUcsV0FBZixHQUE4QjtBQUM1QixTQUFPLE1BQU0scUJBQU92QixhQUFQLEVBQXNCO0FBQUN3QixJQUFBQSxHQUFHLEVBQUVDLGNBQU47QUFBZUMsSUFBQUEsSUFBSSxFQUFFO0FBQXJCLEdBQXRCLENBQWI7QUFDRDs7QUFFRCxlQUFlUCxTQUFmLENBQTBCRixvQkFBb0IsR0FBRyxLQUFqRCxFQUF3RDtBQUN0RCxRQUFNVSxPQUFPLEdBQUcsTUFBTUosV0FBVyxFQUFqQzs7QUFDQSxNQUFJSSxPQUFKLEVBQWE7QUFDWCxRQUFJO0FBQ0YsWUFBTTtBQUFDQyxRQUFBQTtBQUFELFVBQVcsTUFBTSx3QkFBSzNCLFVBQUwsRUFBaUIsQ0FBQyxXQUFELEVBQWMsTUFBZCxDQUFqQixFQUF3QztBQUM3RHVCLFFBQUFBLEdBQUcsRUFBRUc7QUFEd0QsT0FBeEMsQ0FBdkI7QUFHQSxhQUFPQyxNQUFNLENBQUNDLElBQVAsRUFBUDtBQUNELEtBTEQsQ0FLRSxPQUFPQyxHQUFQLEVBQVksQ0FBRTtBQUNqQjs7QUFFRCxNQUFJLENBQUNiLG9CQUFMLEVBQTJCO0FBQ3pCLFdBQU8sSUFBUDtBQUNEOztBQUVELE1BQUk7QUFDRixVQUFNYyxVQUFVLEdBQUcsQ0FBQyxNQUFNQyxlQUFNQyxHQUFOLENBQVcsR0FBRTdCLFVBQVcsT0FBeEIsRUFBZ0M7QUFDeEQ4QixNQUFBQSxPQUFPLEVBQUU7QUFDUCxzQkFBZSxVQUFTdkMsVUFBVztBQUQ1QjtBQUQrQyxLQUFoQyxDQUFQLEVBSWZ3QyxJQUpKOztBQUtBLFFBQUl0QixnQkFBRXVCLE9BQUYsQ0FBVUwsVUFBVixDQUFKLEVBQTJCO0FBQ3pCLFdBQUssTUFBTTtBQUFDTSxRQUFBQSxJQUFEO0FBQU9DLFFBQUFBO0FBQVAsT0FBWCxJQUE2QlAsVUFBN0IsRUFBeUM7QUFDdkMsWUFBSU0sSUFBSSxLQUFNLElBQUcxQyxVQUFXLEVBQXhCLElBQTZCMkMsTUFBN0IsSUFBdUNBLE1BQU0sQ0FBQ3BCLEdBQWxELEVBQXVEO0FBQ3JELGlCQUFPb0IsTUFBTSxDQUFDcEIsR0FBZDtBQUNEO0FBQ0Y7QUFDRjtBQUNGLEdBYkQsQ0FhRSxPQUFPWSxHQUFQLEVBQVksQ0FBRTs7QUFDaEIsU0FBTyxJQUFQO0FBQ0Q7O0FBRUQsZUFBZVQsZUFBZixDQUFnQ2tCLFNBQWhDLEVBQTJDdEIsb0JBQW9CLEdBQUcsS0FBbEUsRUFBeUU7QUFDdkUsUUFBTVUsT0FBTyxHQUFHLE1BQU1KLFdBQVcsRUFBakM7O0FBQ0EsTUFBSUksT0FBSixFQUFhO0FBQ1gsUUFBSTtBQUNGLFlBQU07QUFBQ0MsUUFBQUE7QUFBRCxVQUFXLE1BQU0sd0JBQUszQixVQUFMLEVBQWlCLENBQUMsTUFBRCxFQUFTLElBQVQsRUFBZSxjQUFmLEVBQStCc0MsU0FBL0IsQ0FBakIsRUFBNEQ7QUFDakZmLFFBQUFBLEdBQUcsRUFBRUc7QUFENEUsT0FBNUQsQ0FBdkI7QUFHQSxhQUFPQyxNQUFNLENBQUNDLElBQVAsRUFBUDtBQUNELEtBTEQsQ0FLRSxPQUFPQyxHQUFQLEVBQVksQ0FBRTtBQUNqQjs7QUFFRCxNQUFJLENBQUNiLG9CQUFMLEVBQTJCO0FBQ3pCLFdBQU8sSUFBUDtBQUNEOztBQUVELE1BQUk7QUFDRixVQUFNYyxVQUFVLEdBQUcsQ0FBQyxNQUFNQyxlQUFNQyxHQUFOLENBQVcsR0FBRTdCLFVBQVcsWUFBV21DLFNBQVUsRUFBN0MsRUFBZ0Q7QUFDeEVMLE1BQUFBLE9BQU8sRUFBRTtBQUNQLHNCQUFlLFVBQVN2QyxVQUFXO0FBRDVCO0FBRCtELEtBQWhELENBQVAsRUFJZndDLElBSko7O0FBS0EsUUFBSUosVUFBVSxJQUFJQSxVQUFVLENBQUNPLE1BQTdCLEVBQXFDO0FBQ25DLFVBQUlQLFVBQVUsQ0FBQ08sTUFBWCxDQUFrQkUsU0FBbEIsSUFBK0JULFVBQVUsQ0FBQ08sTUFBWCxDQUFrQkUsU0FBbEIsQ0FBNEJDLElBQS9ELEVBQXFFO0FBQ25FLGVBQU9WLFVBQVUsQ0FBQ08sTUFBWCxDQUFrQkUsU0FBbEIsQ0FBNEJDLElBQW5DO0FBQ0Q7O0FBQ0QsVUFBSVYsVUFBVSxDQUFDTyxNQUFYLENBQWtCSSxNQUFsQixJQUE0QlgsVUFBVSxDQUFDTyxNQUFYLENBQWtCSSxNQUFsQixDQUF5QkQsSUFBekQsRUFBK0Q7QUFDN0QsZUFBT1YsVUFBVSxDQUFDTyxNQUFYLENBQWtCSSxNQUFsQixDQUF5QkQsSUFBaEM7QUFDRDtBQUNGO0FBQ0YsR0FkRCxDQWNFLE9BQU9YLEdBQVAsRUFBWSxDQUFFOztBQUNoQixTQUFPLElBQVA7QUFDRDs7QUFRRCxTQUFTYSxZQUFULEdBQXlCO0FBQ3ZCLFNBQU90QyxVQUFQO0FBQ0Q7O0FBRUQsU0FBU3VDLFdBQVQsR0FBd0I7QUFDdEIsUUFBTWhELE9BQU8sR0FBR1UsY0FBYyxFQUE5Qjs7QUFDQSxNQUFJLENBQUNDLGdCQUFPc0MsU0FBUCxDQUFpQmpELE9BQWpCLEVBQTBCQyxnQkFBMUIsQ0FBTCxFQUFrRDtBQUNoRGlELG9CQUFPQyxhQUFQLENBQXNCLHdCQUF1QmxELGdCQUFpQixlQUFjRCxPQUFPLENBQUNBLE9BQVEsRUFBNUY7QUFDRDtBQUNGOztBQUVELFNBQVNvRCxvQkFBVCxHQUFpQyxDQVloQzs7QUFFRCxlQUFlQyxVQUFmLEdBQTZCO0FBQzNCLFFBQU1qQyxlQUFlLENBQUMsSUFBRCxDQUFyQjtBQUNBa0MsRUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVlDLElBQUksQ0FBQ0MsU0FBTCxDQUFlVixZQUFZLEVBQTNCLENBQVo7QUFDRDs7QUFFRCxTQUFTVyx1QkFBVCxDQUFrQ0MsTUFBbEMsRUFBMENDLElBQTFDLEVBQWdEO0FBRzlDLFdBQVNDLFdBQVQsQ0FBc0JDLElBQXRCLEVBQTRCO0FBQzFCLFdBQU8sT0FBT0YsSUFBSSxDQUFDRSxJQUFELENBQVgsS0FBc0IsT0FBT0Msa0JBQWtCLENBQUNELElBQUQsQ0FBdEQ7QUFDRDs7QUFFRCxXQUFTRSxtQkFBVCxDQUE4QkYsSUFBOUIsRUFBb0M7QUFDbEMsV0FBTzdDLGdCQUFFdUIsT0FBRixDQUFVdUIsa0JBQWtCLENBQUNELElBQUQsQ0FBNUIsQ0FBUDtBQUNEOztBQUVELFdBQVNHLGdCQUFULENBQTJCSCxJQUEzQixFQUFpQztBQUMvQixXQUFPN0MsZ0JBQUV1QixPQUFGLENBQVVvQixJQUFJLENBQUNFLElBQUQsQ0FBZCxDQUFQO0FBQ0Q7O0FBRUQsV0FBU0ksWUFBVCxDQUF1QkosSUFBdkIsRUFBNkI7QUFDM0IsV0FBTzdDLGdCQUFFa0QsVUFBRixDQUFhUCxJQUFJLENBQUNFLElBQUQsQ0FBakIsRUFBeUJDLGtCQUFrQixDQUFDRCxJQUFELENBQTNDLEVBQW1ETSxNQUFuRCxHQUE0RCxDQUFuRTtBQUNEOztBQUVELFdBQVNDLGFBQVQsQ0FBd0JQLElBQXhCLEVBQThCO0FBQzVCLFdBQU9GLElBQUksQ0FBQ0UsSUFBRCxDQUFKLEtBQWVDLGtCQUFrQixDQUFDRCxJQUFELENBQXhDO0FBQ0Q7O0FBRUQsV0FBU1EsZ0JBQVQsQ0FBMkJSLElBQTNCLEVBQWlDO0FBQy9CLFdBQU8sQ0FBQzdDLGdCQUFFc0QsV0FBRixDQUFjUixrQkFBa0IsQ0FBQ0QsSUFBRCxDQUFoQyxDQUFSO0FBQ0Q7O0FBSUQsUUFBTVUsOEJBQThCLEdBQUd2RCxnQkFBRXdELFFBQUYsQ0FBVyxDQUNoRHhELGdCQUFFeUQsTUFBRixDQUFTVCxnQkFBVCxDQURnRCxFQUVoREMsWUFGZ0QsQ0FBWCxDQUF2Qzs7QUFLQSxRQUFNUyxvQ0FBb0MsR0FBRzFELGdCQUFFMkQsU0FBRixDQUFZLENBQ3ZEM0QsZ0JBQUV5RCxNQUFGLENBQVNWLG1CQUFULENBRHVELEVBQ3hCSyxhQUR3QixDQUFaLENBQTdDOztBQWlCQSxRQUFNUSxZQUFZLEdBQUc1RCxnQkFBRTJELFNBQUYsQ0FBWSxDQUMvQk4sZ0JBRCtCLEVBRS9CckQsZ0JBQUV3RCxRQUFGLENBQVcsQ0FDVFosV0FEUyxFQUVUNUMsZ0JBQUUyRCxTQUFGLENBQVksQ0FDVlosbUJBRFUsRUFFVlEsOEJBRlUsQ0FBWixDQUZTLEVBTVRHLG9DQU5TLENBQVgsQ0FGK0IsQ0FBWixDQUFyQjs7QUFZQSxRQUFNWixrQkFBa0IsR0FBRyxvQ0FBM0I7QUFFQSxTQUFPOUMsZ0JBQUU2RCxNQUFGLENBQVNsQixJQUFULEVBQWUsQ0FBQ21CLEVBQUQsRUFBS0MsR0FBTCxLQUFhSCxZQUFZLENBQUNHLEdBQUQsQ0FBeEMsQ0FBUDtBQUNEOztBQUVELFNBQVNDLGlCQUFULENBQTRCdEIsTUFBNUIsRUFBb0NDLElBQXBDLEVBQTBDO0FBR3hDLFNBQU9ELE1BQU0sQ0FBQ3VCLE9BQVAsQ0FBZUMsTUFBZixDQUFzQixDQUFDQyxHQUFELEVBQU0sQ0FBQyxDQUFDM0MsSUFBRCxDQUFELEVBQVM7QUFBQ3FCLElBQUFBLElBQUQ7QUFBT3VCLElBQUFBLE9BQU8sRUFBRUMsWUFBaEI7QUFBOEJDLElBQUFBO0FBQTlCLEdBQVQsQ0FBTixLQUEwRDtBQUNyRixRQUFJLENBQUMzQixJQUFJLENBQUNFLElBQUQsQ0FBTCxJQUFlRixJQUFJLENBQUNFLElBQUQsQ0FBSixLQUFld0IsWUFBbEMsRUFBZ0Q7QUFDOUMsYUFBT0YsR0FBUDtBQUNEOztBQUVELFFBQUlHLE1BQUosYUFBSUEsTUFBSixlQUFJQSxNQUFNLENBQUVDLGNBQVosRUFBNEI7QUFDMUJKLE1BQUFBLEdBQUcsQ0FBQzNDLElBQUQsQ0FBSCxHQUFZOEMsTUFBTSxDQUFDQyxjQUFuQjtBQUNELEtBRkQsTUFFTyxJQUFJMUUsVUFBVSxDQUFDeUUsTUFBRCxFQUFTRSx1REFBVCxDQUFkLEVBQWdFO0FBQ3JFTCxNQUFBQSxHQUFHLENBQUMzQyxJQUFELENBQUgsR0FBWWlELGlDQUFaO0FBQ0Q7O0FBQ0QsV0FBT04sR0FBUDtBQUNELEdBWE0sRUFXSixFQVhJLENBQVA7QUFZRDs7QUFFRCxlQUFlTyxjQUFmLENBQStCQyxNQUEvQixFQUF1QztBQUNyQyxNQUFJO0FBQ0YsVUFBTSxxQkFBT0EsTUFBUCxDQUFOO0FBQ0QsR0FGRCxDQUVFLE9BQU9DLENBQVAsRUFBVTtBQUNWLFVBQU0sSUFBSUMsS0FBSixDQUFXLHNEQUFELEdBQ0MsSUFBR0YsTUFBTyw0Q0FEckIsQ0FBTjtBQUVEO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgbWtkaXJwLCBzeXN0ZW0sIGZzIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IHJvb3REaXIgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHtcbiAgU3RvcmVEZXByZWNhdGVkRGVmYXVsdENhcGFiaWxpdHlBY3Rpb24sIERFRkFVTFRfQ0FQU19BUkcsXG59IGZyb20gJy4vY2xpL2FyZ3BhcnNlLWFjdGlvbnMnO1xuaW1wb3J0IGZpbmRVcCBmcm9tICdmaW5kLXVwJztcbmltcG9ydCB7IGdldERlZmF1bHRzRnJvbVNjaGVtYSB9IGZyb20gJy4vc2NoZW1hL3NjaGVtYSc7XG5cbmNvbnN0IG5wbVBhY2thZ2UgPSBmcy5yZWFkUGFja2FnZUpzb25Gcm9tKF9fZGlybmFtZSk7XG5cbmNvbnN0IEFQUElVTV9WRVIgPSBucG1QYWNrYWdlLnZlcnNpb247XG5jb25zdCBNSU5fTk9ERV9WRVJTSU9OID0gbnBtUGFja2FnZS5lbmdpbmVzLm5vZGU7XG5cbmNvbnN0IEdJVF9NRVRBX1JPT1QgPSAnLmdpdCc7XG5jb25zdCBHSVRfQklOQVJZID0gYGdpdCR7c3lzdGVtLmlzV2luZG93cygpID8gJy5leGUnIDogJyd9YDtcbmNvbnN0IEdJVEhVQl9BUEkgPSAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hcHBpdW0vYXBwaXVtJztcblxuY29uc3QgQlVJTERfSU5GTyA9IHtcbiAgdmVyc2lvbjogQVBQSVVNX1ZFUixcbn07XG5cbmZ1bmN0aW9uIGdldE5vZGVWZXJzaW9uICgpIHtcbiAgcmV0dXJuIHNlbXZlci5jb2VyY2UocHJvY2Vzcy52ZXJzaW9uKTtcbn1cblxuZnVuY3Rpb24gaXNTdWJDbGFzcyAoY2FuZGlkYXRlQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgcmV0dXJuIF8uaXNGdW5jdGlvbihzdXBlckNsYXNzKSAmJiBfLmlzRnVuY3Rpb24oY2FuZGlkYXRlQ2xhc3MpXG4gICAgJiYgKGNhbmRpZGF0ZUNsYXNzLnByb3RvdHlwZSBpbnN0YW5jZW9mIHN1cGVyQ2xhc3MgfHwgY2FuZGlkYXRlQ2xhc3MgPT09IHN1cGVyQ2xhc3MpO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVCdWlsZEluZm8gKHVzZUdpdGh1YkFwaUZhbGxiYWNrID0gZmFsc2UpIHtcbiAgY29uc3Qgc2hhID0gYXdhaXQgZ2V0R2l0UmV2KHVzZUdpdGh1YkFwaUZhbGxiYWNrKTtcbiAgaWYgKCFzaGEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgQlVJTERfSU5GT1snZ2l0LXNoYSddID0gc2hhO1xuICBjb25zdCBidWlsdCA9IGF3YWl0IGdldEdpdFRpbWVzdGFtcChzaGEsIHVzZUdpdGh1YkFwaUZhbGxiYWNrKTtcbiAgaWYgKCFfLmlzRW1wdHkoYnVpbHQpKSB7XG4gICAgQlVJTERfSU5GTy5idWlsdCA9IGJ1aWx0O1xuICB9XG59XG5cbi8qKlxuICogRmluZHMgdGhlIEdpdCBtZXRhZGF0YSBkaXIgKHNlZSBgR0lUX01FVEFfUk9PVGApXG4gKlxuICogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBBcHBpdW0gY2Fubm90IGFzc3VtZSBgcGFja2FnZS5qc29uYCBhbmQgYC5naXRgIGFyZSBpbiB0aGUgc2FtZVxuICogZGlyZWN0b3J5LiAgTW9ub3JlcG9zLCBzZWU/XG4gKiBAcmV0dXJucyB7c3RyaW5nfHZvaWR9IFBhdGggdG8gZGlyIG9yIGB1bmRlZmluZWRgIGlmIG5vdCBmb3VuZFxuICovXG5hc3luYyBmdW5jdGlvbiBmaW5kR2l0Um9vdCAoKSB7XG4gIHJldHVybiBhd2FpdCBmaW5kVXAoR0lUX01FVEFfUk9PVCwge2N3ZDogcm9vdERpciwgdHlwZTogJ2RpcmVjdG9yeSd9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0R2l0UmV2ICh1c2VHaXRodWJBcGlGYWxsYmFjayA9IGZhbHNlKSB7XG4gIGNvbnN0IGdpdFJvb3QgPSBhd2FpdCBmaW5kR2l0Um9vdCgpO1xuICBpZiAoZ2l0Um9vdCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoR0lUX0JJTkFSWSwgWydyZXYtcGFyc2UnLCAnSEVBRCddLCB7XG4gICAgICAgIGN3ZDogZ2l0Um9vdFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3Rkb3V0LnRyaW0oKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cblxuICBpZiAoIXVzZUdpdGh1YkFwaUZhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc0JvZHlPYmogPSAoYXdhaXQgYXhpb3MuZ2V0KGAke0dJVEhVQl9BUEl9L3RhZ3NgLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdVc2VyLUFnZW50JzogYEFwcGl1bSAke0FQUElVTV9WRVJ9YFxuICAgICAgfVxuICAgIH0pKS5kYXRhO1xuICAgIGlmIChfLmlzQXJyYXkocmVzQm9keU9iaikpIHtcbiAgICAgIGZvciAoY29uc3Qge25hbWUsIGNvbW1pdH0gb2YgcmVzQm9keU9iaikge1xuICAgICAgICBpZiAobmFtZSA9PT0gYHYke0FQUElVTV9WRVJ9YCAmJiBjb21taXQgJiYgY29tbWl0LnNoYSkge1xuICAgICAgICAgIHJldHVybiBjb21taXQuc2hhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChpZ24pIHt9XG4gIHJldHVybiBudWxsO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRHaXRUaW1lc3RhbXAgKGNvbW1pdFNoYSwgdXNlR2l0aHViQXBpRmFsbGJhY2sgPSBmYWxzZSkge1xuICBjb25zdCBnaXRSb290ID0gYXdhaXQgZmluZEdpdFJvb3QoKTtcbiAgaWYgKGdpdFJvb3QpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKEdJVF9CSU5BUlksIFsnc2hvdycsICctcycsICctLWZvcm1hdD0lY2knLCBjb21taXRTaGFdLCB7XG4gICAgICAgIGN3ZDogZ2l0Um9vdFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3Rkb3V0LnRyaW0oKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cblxuICBpZiAoIXVzZUdpdGh1YkFwaUZhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc0JvZHlPYmogPSAoYXdhaXQgYXhpb3MuZ2V0KGAke0dJVEhVQl9BUEl9L2NvbW1pdHMvJHtjb21taXRTaGF9YCwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnVXNlci1BZ2VudCc6IGBBcHBpdW0gJHtBUFBJVU1fVkVSfWBcbiAgICAgIH1cbiAgICB9KSkuZGF0YTtcbiAgICBpZiAocmVzQm9keU9iaiAmJiByZXNCb2R5T2JqLmNvbW1pdCkge1xuICAgICAgaWYgKHJlc0JvZHlPYmouY29tbWl0LmNvbW1pdHRlciAmJiByZXNCb2R5T2JqLmNvbW1pdC5jb21taXR0ZXIuZGF0ZSkge1xuICAgICAgICByZXR1cm4gcmVzQm9keU9iai5jb21taXQuY29tbWl0dGVyLmRhdGU7XG4gICAgICB9XG4gICAgICBpZiAocmVzQm9keU9iai5jb21taXQuYXV0aG9yICYmIHJlc0JvZHlPYmouY29tbWl0LmF1dGhvci5kYXRlKSB7XG4gICAgICAgIHJldHVybiByZXNCb2R5T2JqLmNvbW1pdC5hdXRob3IuZGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGlnbikge31cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQHJldHVybiBNdXRhYmxlIG9iamVjdCBjb250YWluaW5nIEFwcGl1bSBidWlsZCBpbmZvcm1hdGlvbi4gQnkgZGVmYXVsdCBpdFxuICogb25seSBjb250YWlucyB0aGUgQXBwaXVtIHZlcnNpb24sIGJ1dCBpcyB1cGRhdGVkIHdpdGggdGhlIGJ1aWxkIHRpbWVzdGFtcFxuICogYW5kIGdpdCBjb21taXQgaGFzaCBhc3luY2hyb25vdXNseSBhcyBzb29uIGFzIGB1cGRhdGVCdWlsZEluZm9gIGlzIGNhbGxlZFxuICogYW5kIHN1Y2NlZWRzLlxuICovXG5mdW5jdGlvbiBnZXRCdWlsZEluZm8gKCkge1xuICByZXR1cm4gQlVJTERfSU5GTztcbn1cblxuZnVuY3Rpb24gY2hlY2tOb2RlT2sgKCkge1xuICBjb25zdCB2ZXJzaW9uID0gZ2V0Tm9kZVZlcnNpb24oKTtcbiAgaWYgKCFzZW12ZXIuc2F0aXNmaWVzKHZlcnNpb24sIE1JTl9OT0RFX1ZFUlNJT04pKSB7XG4gICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYE5vZGUgdmVyc2lvbiBtdXN0IGJlICR7TUlOX05PREVfVkVSU0lPTn0uIEN1cnJlbnRseSAke3ZlcnNpb24udmVyc2lvbn1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuTm9kZURlcHJlY2F0aW9ucyAoKSB7XG4gIC8qKlxuICAgKiBVbmNvbW1lbnQgdGhpcyBzZWN0aW9uIHRvIGdldCBub2RlIHZlcnNpb24gZGVwcmVjYXRpb24gd2FybmluZ3NcbiAgICogQWxzbyBhZGQgdGVzdCBjYXNlcyB0byBjb25maWctc3BlY3MuanMgdG8gY292ZXIgdGhlIGNhc2VzIGFkZGVkXG4gICAqKi9cblxuICAvLyBjb25zdCB2ZXJzaW9uID0gZ2V0Tm9kZVZlcnNpb24oKTtcbiAgLy8gaWYgKHZlcnNpb24ubWFqb3IgPCA4KSB7XG4gIC8vICAgbG9nZ2VyLndhcm4oYEFwcGl1bSBzdXBwb3J0IGZvciB2ZXJzaW9ucyBvZiBub2RlIDwgJHt2ZXJzaW9uLm1ham9yfSBoYXMgYmVlbiBgICtcbiAgLy8gICAgICAgICAgICAgICAnZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uIFBsZWFzZSAnICtcbiAgLy8gICAgICAgICAgICAgICAndXBncmFkZSEnKTtcbiAgLy8gfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzaG93Q29uZmlnICgpIHtcbiAgYXdhaXQgdXBkYXRlQnVpbGRJbmZvKHRydWUpO1xuICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShnZXRCdWlsZEluZm8oKSkpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbn1cblxuZnVuY3Rpb24gZ2V0Tm9uRGVmYXVsdFNlcnZlckFyZ3MgKHBhcnNlciwgYXJncykge1xuICAvLyBob3BlZnVsbHkgdGhlc2UgZnVuY3Rpb24gbmFtZXMgYXJlIGRlc2NyaXB0aXZlIGVub3VnaFxuXG4gIGZ1bmN0aW9uIHR5cGVzRGlmZmVyIChkZXN0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBhcmdzW2Rlc3RdICE9PSB0eXBlb2YgZGVmYXVsdHNGcm9tU2NoZW1hW2Rlc3RdO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVmYXVsdFZhbHVlSXNBcnJheSAoZGVzdCkge1xuICAgIHJldHVybiBfLmlzQXJyYXkoZGVmYXVsdHNGcm9tU2NoZW1hW2Rlc3RdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFyZ3NWYWx1ZUlzQXJyYXkgKGRlc3QpIHtcbiAgICByZXR1cm4gXy5pc0FycmF5KGFyZ3NbZGVzdF0pO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJyYXlzRGlmZmVyIChkZXN0KSB7XG4gICAgcmV0dXJuIF8uZGlmZmVyZW5jZShhcmdzW2Rlc3RdLCBkZWZhdWx0c0Zyb21TY2hlbWFbZGVzdF0pLmxlbmd0aCA+IDA7XG4gIH1cblxuICBmdW5jdGlvbiB2YWx1ZXNVbmVxdWFsIChkZXN0KSB7XG4gICAgcmV0dXJuIGFyZ3NbZGVzdF0gIT09IGRlZmF1bHRzRnJvbVNjaGVtYVtkZXN0XTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZmF1bHRJc0RlZmluZWQgKGRlc3QpIHtcbiAgICByZXR1cm4gIV8uaXNVbmRlZmluZWQoZGVmYXVsdHNGcm9tU2NoZW1hW2Rlc3RdKTtcbiAgfVxuXG4gIC8vIG5vdGUgdGhhdCBgXy5vdmVyRXZlcnlgIGlzIGxpa2UgYW4gXCJBTkRcIiwgYW5kIGBfLm92ZXJTb21lYCBpcyBsaWtlIGFuIFwiT1JcIlxuXG4gIGNvbnN0IGFyZ1ZhbHVlTm90QXJyYXlPckFycmF5c0RpZmZlciA9IF8ub3ZlclNvbWUoW1xuICAgIF8ubmVnYXRlKGFyZ3NWYWx1ZUlzQXJyYXkpLFxuICAgIGFycmF5c0RpZmZlclxuICBdKTtcblxuICBjb25zdCBkZWZhdWx0VmFsdWVOb3RBcnJheUFuZFZhbHVlc1VuZXF1YWwgPSBfLm92ZXJFdmVyeShbXG4gICAgXy5uZWdhdGUoZGVmYXVsdFZhbHVlSXNBcnJheSksIHZhbHVlc1VuZXF1YWxcbiAgXSk7XG5cbiAgLyoqXG4gICAqIFRoaXMgdXNlZCB0byBiZSBhIGhpZGVvdXMgY29uZGl0aW9uYWwsIGJ1dCBpdCdzIGJyb2tlbiB1cCBpbnRvIGEgaGlkZW91cyBmdW5jdGlvbiBpbnN0ZWFkLlxuICAgKiBob3BlZnVsbHkgdGhpcyBtYWtlcyB0aGluZ3MgYSBsaXR0bGUgbW9yZSB1bmRlcnN0YW5kYWJsZS5cbiAgICogLSBjaGVja3MgaWYgdGhlIGRlZmF1bHQgdmFsdWUgaXMgZGVmaW5lZFxuICAgKiAtIGlmIHNvLCBhbmQgdGhlIGRlZmF1bHQgaXMgbm90IGFuIGFycmF5OlxuICAgKiAgIC0gZW5zdXJlcyB0aGUgdHlwZXMgYXJlIHRoZSBzYW1lXG4gICAqICAgLSBlbnN1cmVzIHRoZSB2YWx1ZXMgYXJlIGVxdWFsXG4gICAqIC0gaWYgc28sIGFuZCB0aGUgZGVmYXVsdCBpcyBhbiBhcnJheTpcbiAgICogICAtIGVuc3VyZXMgdGhlIGFyZ3MgdmFsdWUgaXMgYW4gYXJyYXlcbiAgICogICAtIGVuc3VyZXMgdGhlIGFyZ3MgdmFsdWVzIGRvIG5vdCBkaWZmZXIgZnJvbSB0aGUgZGVmYXVsdCB2YWx1ZXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRlc3QgLSBhcmd1bWVudCBuYW1lIChgZGVzdGAgdmFsdWUpXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgY29uc3QgaXNOb3REZWZhdWx0ID0gXy5vdmVyRXZlcnkoW1xuICAgIGRlZmF1bHRJc0RlZmluZWQsXG4gICAgXy5vdmVyU29tZShbXG4gICAgICB0eXBlc0RpZmZlcixcbiAgICAgIF8ub3ZlckV2ZXJ5KFtcbiAgICAgICAgZGVmYXVsdFZhbHVlSXNBcnJheSxcbiAgICAgICAgYXJnVmFsdWVOb3RBcnJheU9yQXJyYXlzRGlmZmVyXG4gICAgICBdKSxcbiAgICAgIGRlZmF1bHRWYWx1ZU5vdEFycmF5QW5kVmFsdWVzVW5lcXVhbFxuICAgIF0pXG4gIF0pO1xuXG4gIGNvbnN0IGRlZmF1bHRzRnJvbVNjaGVtYSA9IGdldERlZmF1bHRzRnJvbVNjaGVtYSgpO1xuXG4gIHJldHVybiBfLnBpY2tCeShhcmdzLCAoX18sIGtleSkgPT4gaXNOb3REZWZhdWx0KGtleSkpO1xufVxuXG5mdW5jdGlvbiBnZXREZXByZWNhdGVkQXJncyAocGFyc2VyLCBhcmdzKSB7XG4gIC8vIGdvIHRocm91Z2ggdGhlIHNlcnZlciBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFuZCBmaWd1cmVcbiAgLy8gb3V0IHdoaWNoIG9mIHRoZSBvbmVzIHVzZWQgYXJlIGRlcHJlY2F0ZWRcbiAgcmV0dXJuIHBhcnNlci5yYXdBcmdzLnJlZHVjZSgoYWNjLCBbW25hbWVdLCB7ZGVzdCwgZGVmYXVsdDogZGVmYXVsdFZhbHVlLCBhY3Rpb259XSkgPT4ge1xuICAgIGlmICghYXJnc1tkZXN0XSB8fCBhcmdzW2Rlc3RdID09PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgaWYgKGFjdGlvbj8uZGVwcmVjYXRlZF9mb3IpIHtcbiAgICAgIGFjY1tuYW1lXSA9IGFjdGlvbi5kZXByZWNhdGVkX2ZvcjtcbiAgICB9IGVsc2UgaWYgKGlzU3ViQ2xhc3MoYWN0aW9uLCBTdG9yZURlcHJlY2F0ZWREZWZhdWx0Q2FwYWJpbGl0eUFjdGlvbikpIHtcbiAgICAgIGFjY1tuYW1lXSA9IERFRkFVTFRfQ0FQU19BUkc7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVUbXBEaXIgKHRtcERpcikge1xuICB0cnkge1xuICAgIGF3YWl0IG1rZGlycCh0bXBEaXIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBXZSBjb3VsZCBub3QgZW5zdXJlIHRoYXQgdGhlIHRlbXAgZGlyIHlvdSBzcGVjaWZpZWQgYCArXG4gICAgICAgICAgICAgICAgICAgIGAoJHt0bXBEaXJ9KSBleGlzdHMuIFBsZWFzZSBtYWtlIHN1cmUgaXQncyB3cml0ZWFibGUuYCk7XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgZ2V0QnVpbGRJbmZvLCBjaGVja05vZGVPaywgc2hvd0NvbmZpZyxcbiAgd2Fybk5vZGVEZXByZWNhdGlvbnMsIHZhbGlkYXRlVG1wRGlyLCBnZXROb25EZWZhdWx0U2VydmVyQXJncyxcbiAgZ2V0R2l0UmV2LCBBUFBJVU1fVkVSLCB1cGRhdGVCdWlsZEluZm8sXG4gIGdldERlcHJlY2F0ZWRBcmdzXG59O1xuIl0sImZpbGUiOiJsaWIvY29uZmlnLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
225
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb25maWcuanMiXSwibmFtZXMiOlsibnBtUGFja2FnZSIsImZzIiwicmVhZFBhY2thZ2VKc29uRnJvbSIsIl9fZGlybmFtZSIsIkFQUElVTV9WRVIiLCJ2ZXJzaW9uIiwiTUlOX05PREVfVkVSU0lPTiIsImVuZ2luZXMiLCJub2RlIiwiR0lUX01FVEFfUk9PVCIsIkdJVF9CSU5BUlkiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJHSVRIVUJfQVBJIiwiQlVJTERfSU5GTyIsImdldE5vZGVWZXJzaW9uIiwic2VtdmVyIiwiY29lcmNlIiwicHJvY2VzcyIsInVwZGF0ZUJ1aWxkSW5mbyIsInVzZUdpdGh1YkFwaUZhbGxiYWNrIiwic2hhIiwiZ2V0R2l0UmV2IiwiYnVpbHQiLCJnZXRHaXRUaW1lc3RhbXAiLCJfIiwiaXNFbXB0eSIsImZpbmRHaXRSb290IiwiY3dkIiwicm9vdERpciIsInR5cGUiLCJnaXRSb290Iiwic3Rkb3V0IiwidHJpbSIsImlnbiIsInJlc0JvZHlPYmoiLCJheGlvcyIsImdldCIsImhlYWRlcnMiLCJkYXRhIiwiaXNBcnJheSIsIm5hbWUiLCJjb21taXQiLCJjb21taXRTaGEiLCJjb21taXR0ZXIiLCJkYXRlIiwiYXV0aG9yIiwiZ2V0QnVpbGRJbmZvIiwiY2hlY2tOb2RlT2siLCJzYXRpc2ZpZXMiLCJsb2dnZXIiLCJlcnJvckFuZFRocm93Iiwid2Fybk5vZGVEZXByZWNhdGlvbnMiLCJzaG93QnVpbGRJbmZvIiwiY29uc29sZSIsImxvZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXROb25EZWZhdWx0U2VydmVyQXJncyIsImFyZ3MiLCJ0eXBlc0RpZmZlciIsImRlc3QiLCJkZWZhdWx0c0Zyb21TY2hlbWEiLCJkZWZhdWx0VmFsdWVJc0FycmF5IiwiYXJnc1ZhbHVlSXNBcnJheSIsImFycmF5c0RpZmZlciIsImd0Iiwic2l6ZSIsImRpZmZlcmVuY2UiLCJ2YWx1ZXNEaWZmZXIiLCJkZWZhdWx0SXNEZWZpbmVkIiwiaXNVbmRlZmluZWQiLCJhcmdWYWx1ZU5vdEFycmF5T3JBcnJheXNEaWZmZXIiLCJvdmVyU29tZSIsIm5lZ2F0ZSIsImRlZmF1bHRWYWx1ZU5vdEFycmF5QW5kVmFsdWVzRGlmZmVyIiwib3ZlckV2ZXJ5IiwiaXNOb3REZWZhdWx0IiwicGlja0J5IiwiX18iLCJrZXkiLCJjb21wYWN0Q29uZmlnIiwicGFydGlhbCIsIm9taXRCeSIsInZhbHVlIiwiaXNPYmplY3QiLCJzaG93Q29uZmlnIiwicHJlQ29uZmlnUGFyc2VkQXJncyIsImNvbmZpZ1Jlc3VsdCIsImRlZmF1bHRzIiwiY29uZmlnIiwiZmlsZXBhdGgiLCJkaXIiLCJ2YWxpZGF0ZVRtcERpciIsInRtcERpciIsImUiLCJFcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUdDLFlBQUdDLG1CQUFILENBQXVCQyxTQUF2QixDQUFuQjs7QUFFQSxNQUFNQyxVQUFVLEdBQUdKLFVBQVUsQ0FBQ0ssT0FBOUI7O0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUdOLFVBQVUsQ0FBQ08sT0FBWCxDQUFtQkMsSUFBNUM7QUFFQSxNQUFNQyxhQUFhLEdBQUcsTUFBdEI7QUFDQSxNQUFNQyxVQUFVLEdBQUksTUFBS0MsZ0JBQU9DLFNBQVAsS0FBcUIsTUFBckIsR0FBOEIsRUFBRyxFQUExRDtBQUNBLE1BQU1DLFVBQVUsR0FBRyw0Q0FBbkI7QUFFQSxNQUFNQyxVQUFVLEdBQUc7QUFDakJULEVBQUFBLE9BQU8sRUFBRUQ7QUFEUSxDQUFuQjs7QUFJQSxTQUFTVyxjQUFULEdBQTJCO0FBQ3pCLFNBQThDQyxnQkFBT0MsTUFBUCxDQUFjQyxPQUFPLENBQUNiLE9BQXRCLENBQTlDO0FBQ0Q7O0FBRUQsZUFBZWMsZUFBZixDQUFnQ0Msb0JBQW9CLEdBQUcsS0FBdkQsRUFBOEQ7QUFDNUQsUUFBTUMsR0FBRyxHQUFHLE1BQU1DLFNBQVMsQ0FB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R0FBUixDQUFZWCxhQUFhLENBQUNNLG1CQUFELENBQXpCO0FBQ0FqQyxFQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWSxtQkFBWjtBQUNBRCxFQUFBQSxPQUFPLENBQUNzQyxHQUFSLENBQVlYLGFBQWEsQ0FBQ1EsUUFBRCxDQUF6QjtBQUNEOztBQUtELGVBQWVJLGNBQWYsQ0FBK0JDLE1BQS9CLEVBQXVDO0FBQ3JDLE1BQUk7QUFDRixVQUFNLHFCQUFPQSxNQUFQLENBQU47QUFDRCxHQUZELENBRUUsT0FBT0MsQ0FBUCxFQUFVO0FBQ1YsVUFBTSxJQUFJQyxLQUFKLENBQVcsc0RBQUQsR0FDQyxJQUFHRixNQUFPLDRDQURyQixDQUFOO0FBRUQ7QUFDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgbWtkaXJwLCBzeXN0ZW0sIGZzIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IHJvb3REaXIgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IGZpbmRVcCBmcm9tICdmaW5kLXVwJztcbmltcG9ydCB7IGdldERlZmF1bHRzRm9yU2NoZW1hIH0gZnJvbSAnLi9zY2hlbWEvc2NoZW1hJztcblxuY29uc3QgbnBtUGFja2FnZSA9IGZzLnJlYWRQYWNrYWdlSnNvbkZyb20oX19kaXJuYW1lKTtcblxuY29uc3QgQVBQSVVNX1ZFUiA9IG5wbVBhY2thZ2UudmVyc2lvbjtcbmNvbnN0IE1JTl9OT0RFX1ZFUlNJT04gPSBucG1QYWNrYWdlLmVuZ2luZXMubm9kZTtcblxuY29uc3QgR0lUX01FVEFfUk9PVCA9ICcuZ2l0JztcbmNvbnN0IEdJVF9CSU5BUlkgPSBgZ2l0JHtzeXN0ZW0uaXNXaW5kb3dzKCkgPyAnLmV4ZScgOiAnJ31gO1xuY29uc3QgR0lUSFVCX0FQSSA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2FwcGl1bS9hcHBpdW0nO1xuXG5jb25zdCBCVUlMRF9JTkZPID0ge1xuICB2ZXJzaW9uOiBBUFBJVU1fVkVSLFxufTtcblxuZnVuY3Rpb24gZ2V0Tm9kZVZlcnNpb24gKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoJ3NlbXZlcicpLlNlbVZlcn0gKi8oc2VtdmVyLmNvZXJjZShwcm9jZXNzLnZlcnNpb24pKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlQnVpbGRJbmZvICh1c2VHaXRodWJBcGlGYWxsYmFjayA9IGZhbHNlKSB7XG4gIGNvbnN0IHNoYSA9IGF3YWl0IGdldEdpdFJldih1c2VHaXRodWJBcGlGYWxsYmFjayk7XG4gIGlmICghc2hhKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIEJVSUxEX0lORk9bJ2dpdC1zaGEnXSA9IHNoYTtcbiAgY29uc3QgYnVpbHQgPSBhd2FpdCBnZXRHaXRUaW1lc3RhbXAoc2hhLCB1c2VHaXRodWJBcGlGYWxsYmFjayk7XG4gIGlmICghXy5pc0VtcHR5KGJ1aWx0KSkge1xuICAgIEJVSUxEX0lORk8uYnVpbHQgPSBidWlsdDtcbiAgfVxufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBHaXQgbWV0YWRhdGEgZGlyIChzZWUgYEdJVF9NRVRBX1JPT1RgKVxuICpcbiAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgQXBwaXVtIGNhbm5vdCBhc3N1bWUgYHBhY2thZ2UuanNvbmAgYW5kIGAuZ2l0YCBhcmUgaW4gdGhlIHNhbWVcbiAqIGRpcmVjdG9yeS4gIE1vbm9yZXBvcywgc2VlP1xuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nfHVuZGVmaW5lZD59IFBhdGggdG8gZGlyIG9yIGB1bmRlZmluZWRgIGlmIG5vdCBmb3VuZFxuICovXG5hc3luYyBmdW5jdGlvbiBmaW5kR2l0Um9vdCAoKSB7XG4gIHJldHVybiBhd2FpdCBmaW5kVXAoR0lUX01FVEFfUk9PVCwge2N3ZDogcm9vdERpciwgdHlwZTogJ2RpcmVjdG9yeSd9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0R2l0UmV2ICh1c2VHaXRodWJBcGlGYWxsYmFjayA9IGZhbHNlKSB7XG4gIGNvbnN0IGdpdFJvb3QgPSBhd2FpdCBmaW5kR2l0Um9vdCgpO1xuICBpZiAoZ2l0Um9vdCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoR0lUX0JJTkFSWSwgWydyZXYtcGFyc2UnLCAnSEVBRCddLCB7XG4gICAgICAgIGN3ZDogZ2l0Um9vdFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3Rkb3V0LnRyaW0oKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cblxuICBpZiAoIXVzZUdpdGh1YkFwaUZhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc0JvZHlPYmogPSAoYXdhaXQgYXhpb3MuZ2V0KGAke0dJVEhVQl9BUEl9L3RhZ3NgLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdVc2VyLUFnZW50JzogYEFwcGl1bSAke0FQUElVTV9WRVJ9YFxuICAgICAgfVxuICAgIH0pKS5kYXRhO1xuICAgIGlmIChfLmlzQXJyYXkocmVzQm9keU9iaikpIHtcbiAgICAgIGZvciAoY29uc3Qge25hbWUsIGNvbW1pdH0gb2YgcmVzQm9keU9iaikge1xuICAgICAgICBpZiAobmFtZSA9PT0gYHYke0FQUElVTV9WRVJ9YCAmJiBjb21taXQgJiYgY29tbWl0LnNoYSkge1xuICAgICAgICAgIHJldHVybiBjb21taXQuc2hhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChpZ24pIHt9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21taXRTaGFcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3VzZUdpdGh1YkFwaUZhbGxiYWNrXVxuICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPz59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEdpdFRpbWVzdGFtcCAoY29tbWl0U2hhLCB1c2VHaXRodWJBcGlGYWxsYmFjayA9IGZhbHNlKSB7XG4gIGNvbnN0IGdpdFJvb3QgPSBhd2FpdCBmaW5kR2l0Um9vdCgpO1xuICBpZiAoZ2l0Um9vdCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoR0lUX0JJTkFSWSwgWydzaG93JywgJy1zJywgJy0tZm9ybWF0PSVjaScsIGNvbW1pdFNoYV0sIHtcbiAgICAgICAgY3dkOiBnaXRSb290XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBzdGRvdXQudHJpbSgpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuXG4gIGlmICghdXNlR2l0aHViQXBpRmFsbGJhY2spIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzQm9keU9iaiA9IChhd2FpdCBheGlvcy5nZXQoYCR7R0lUSFVCX0FQSX0vY29tbWl0cy8ke2NvbW1pdFNoYX1gLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdVc2VyLUFnZW50JzogYEFwcGl1bSAke0FQUElVTV9WRVJ9YFxuICAgICAgfVxuICAgIH0pKS5kYXRhO1xuICAgIGlmIChyZXNCb2R5T2JqICYmIHJlc0JvZHlPYmouY29tbWl0KSB7XG4gICAgICBpZiAocmVzQm9keU9iai5jb21taXQuY29tbWl0dGVyICYmIHJlc0JvZHlPYmouY29tbWl0LmNvbW1pdHRlci5kYXRlKSB7XG4gICAgICAgIHJldHVybiByZXNCb2R5T2JqLmNvbW1pdC5jb21taXR0ZXIuZGF0ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXNCb2R5T2JqLmNvbW1pdC5hdXRob3IgJiYgcmVzQm9keU9iai5jb21taXQuYXV0aG9yLmRhdGUpIHtcbiAgICAgICAgcmV0dXJuIHJlc0JvZHlPYmouY29tbWl0LmF1dGhvci5kYXRlO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoaWduKSB7fVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIE11dGFibGUgb2JqZWN0IGNvbnRhaW5pbmcgQXBwaXVtIGJ1aWxkIGluZm9ybWF0aW9uLiBCeSBkZWZhdWx0IGl0XG4gKiBvbmx5IGNvbnRhaW5zIHRoZSBBcHBpdW0gdmVyc2lvbiwgYnV0IGlzIHVwZGF0ZWQgd2l0aCB0aGUgYnVpbGQgdGltZXN0YW1wXG4gKiBhbmQgZ2l0IGNvbW1pdCBoYXNoIGFzeW5jaHJvbm91c2x5IGFzIHNvb24gYXMgYHVwZGF0ZUJ1aWxkSW5mb2AgaXMgY2FsbGVkXG4gKiBhbmQgc3VjY2VlZHMuXG4gKi9cbmZ1bmN0aW9uIGdldEJ1aWxkSW5mbyAoKSB7XG4gIHJldHVybiBCVUlMRF9JTkZPO1xufVxuXG5mdW5jdGlvbiBjaGVja05vZGVPayAoKSB7XG4gIGNvbnN0IHZlcnNpb24gPSBnZXROb2RlVmVyc2lvbigpO1xuICBpZiAoIXNlbXZlci5zYXRpc2ZpZXModmVyc2lvbiwgTUlOX05PREVfVkVSU0lPTikpIHtcbiAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgTm9kZSB2ZXJzaW9uIG11c3QgYmUgJHtNSU5fTk9ERV9WRVJTSU9OfS4gQ3VycmVudGx5ICR7dmVyc2lvbi52ZXJzaW9ufWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5Ob2RlRGVwcmVjYXRpb25zICgpIHtcbiAgLyoqXG4gICAqIFVuY29tbWVudCB0aGlzIHNlY3Rpb24gdG8gZ2V0IG5vZGUgdmVyc2lvbiBkZXByZWNhdGlvbiB3YXJuaW5nc1xuICAgKiBBbHNvIGFkZCB0ZXN0IGNhc2VzIHRvIGNvbmZpZy1zcGVjcy5qcyB0byBjb3ZlciB0aGUgY2FzZXMgYWRkZWRcbiAgICoqL1xuXG4gIC8vIGNvbnN0IHZlcnNpb24gPSBnZXROb2RlVmVyc2lvbigpO1xuICAvLyBpZiAodmVyc2lvbi5tYWpvciA8IDgpIHtcbiAgLy8gICBsb2dnZXIud2FybihgQXBwaXVtIHN1cHBvcnQgZm9yIHZlcnNpb25zIG9mIG5vZGUgPCAke3ZlcnNpb24ubWFqb3J9IGhhcyBiZWVuIGAgK1xuICAvLyAgICAgICAgICAgICAgICdkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4gUGxlYXNlICcgK1xuICAvLyAgICAgICAgICAgICAgICd1cGdyYWRlIScpO1xuICAvLyB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNob3dCdWlsZEluZm8gKCkge1xuICBhd2FpdCB1cGRhdGVCdWlsZEluZm8odHJ1ZSk7XG4gIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGdldEJ1aWxkSW5mbygpKSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxufVxuXG4vKipcbiAqIFJldHVybnMgay92IHBhaXJzIG9mIHNlcnZlciBhcmd1bWVudHMgd2hpY2ggYXJlIF9ub3RfIHRoZSBkZWZhdWx0cy5cbiAqIEBwYXJhbSB7UGFyc2VkQXJnc30gYXJnc1xuICogQHJldHVybnMge1BhcnRpYWw8UGFyc2VkQXJncz59XG4gKi9cbmZ1bmN0aW9uIGdldE5vbkRlZmF1bHRTZXJ2ZXJBcmdzIChhcmdzKSB7XG4gIC8vIGhvcGVmdWxseSB0aGVzZSBmdW5jdGlvbiBuYW1lcyBhcmUgZGVzY3JpcHRpdmUgZW5vdWdoXG5cbiAgY29uc3QgdHlwZXNEaWZmZXIgPSAvKiogQHBhcmFtIHtzdHJpbmd9IGRlc3QgKi8oZGVzdCkgPT4gdHlwZW9mIGFyZ3NbZGVzdF0gIT09IHR5cGVvZiBkZWZhdWx0c0Zyb21TY2hlbWFbZGVzdF07XG5cbiAgY29uc3QgZGVmYXVsdFZhbHVlSXNBcnJheSA9IC8qKiBAcGFyYW0ge3N0cmluZ30gZGVzdCAqLyhkZXN0KSA9PiBfLmlzQXJyYXkoZGVmYXVsdHNGcm9tU2NoZW1hW2Rlc3RdKTtcblxuICBjb25zdCBhcmdzVmFsdWVJc0FycmF5ID0gLyoqIEBwYXJhbSB7c3RyaW5nfSBkZXN0ICovKGRlc3QpID0+IF8uaXNBcnJheShhcmdzW2Rlc3RdKTtcblxuICBjb25zdCBhcnJheXNEaWZmZXIgPSAvKiogQHBhcmFtIHtzdHJpbmd9IGRlc3QgKi8oZGVzdCkgPT4gXy5ndChfLnNpemUoXy5kaWZmZXJlbmNlKGFyZ3NbZGVzdF0sIGRlZmF1bHRzRnJvbVNjaGVtYVtkZXN0XSkpLCAwKTtcblxuICBjb25zdCB2YWx1ZXNEaWZmZXIgPSAvKiogQHBhcmFtIHtzdHJpbmd9IGRlc3QgKi8oZGVzdCkgPT4gYXJnc1tkZXN0XSAhPT0gZGVmYXVsdHNGcm9tU2NoZW1hW2Rlc3RdO1xuXG4gIGNvbnN0IGRlZmF1bHRJc0RlZmluZWQgPSAvKiogQHBhcmFtIHtzdHJpbmd9IGRlc3QgKi8oZGVzdCkgPT4gIV8uaXNVbmRlZmluZWQoZGVmYXVsdHNGcm9tU2NoZW1hW2Rlc3RdKTtcblxuICAvLyBub3RlIHRoYXQgYF8ub3ZlckV2ZXJ5YCBpcyBsaWtlIGFuIFwiQU5EXCIsIGFuZCBgXy5vdmVyU29tZWAgaXMgbGlrZSBhbiBcIk9SXCJcblxuICBjb25zdCBhcmdWYWx1ZU5vdEFycmF5T3JBcnJheXNEaWZmZXIgPSBfLm92ZXJTb21lKFtcbiAgICBfLm5lZ2F0ZShhcmdzVmFsdWVJc0FycmF5KSxcbiAgICBhcnJheXNEaWZmZXJcbiAgXSk7XG5cbiAgY29uc3QgZGVmYXVsdFZhbHVlTm90QXJyYXlBbmRWYWx1ZXNEaWZmZXIgPSBfLm92ZXJFdmVyeShbXG4gICAgXy5uZWdhdGUoZGVmYXVsdFZhbHVlSXNBcnJheSksIHZhbHVlc0RpZmZlclxuICBdKTtcblxuICAvKipcbiAgICogVGhpcyB1c2VkIHRvIGJlIGEgaGlkZW91cyBjb25kaXRpb25hbCwgYnV0IGl0J3MgYnJva2VuIHVwIGludG8gYSBoaWRlb3VzIGZ1bmN0aW9uIGluc3RlYWQuXG4gICAqIGhvcGVmdWxseSB0aGlzIG1ha2VzIHRoaW5ncyBhIGxpdHRsZSBtb3JlIHVuZGVyc3RhbmRhYmxlLlxuICAgKiAtIGNoZWNrcyBpZiB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBkZWZpbmVkXG4gICAqIC0gaWYgc28sIGFuZCB0aGUgZGVmYXVsdCBpcyBub3QgYW4gYXJyYXk6XG4gICAqICAgLSBlbnN1cmVzIHRoZSB0eXBlcyBhcmUgdGhlIHNhbWVcbiAgICogICAtIGVuc3VyZXMgdGhlIHZhbHVlcyBhcmUgZXF1YWxcbiAgICogLSBpZiBzbywgYW5kIHRoZSBkZWZhdWx0IGlzIGFuIGFycmF5OlxuICAgKiAgIC0gZW5zdXJlcyB0aGUgYXJncyB2YWx1ZSBpcyBhbiBhcnJheVxuICAgKiAgIC0gZW5zdXJlcyB0aGUgYXJncyB2YWx1ZXMgZG8gbm90IGRpZmZlciBmcm9tIHRoZSBkZWZhdWx0IHZhbHVlc1xuICAgKiBAdHlwZSB7KGRlc3Q6IHN0cmluZykgPT4gYm9vbGVhbn1cbiAgICovXG4gIGNvbnN0IGlzTm90RGVmYXVsdCA9IF8ub3ZlckV2ZXJ5KFtcbiAgICBkZWZhdWx0SXNEZWZpbmVkLFxuICAgIF8ub3ZlclNvbWUoW1xuICAgICAgdHlwZXNEaWZmZXIsXG4gICAgICBfLm92ZXJFdmVyeShbXG4gICAgICAgIGRlZmF1bHRWYWx1ZUlzQXJyYXksXG4gICAgICAgIGFyZ1ZhbHVlTm90QXJyYXlPckFycmF5c0RpZmZlclxuICAgICAgXSksXG4gICAgICBkZWZhdWx0VmFsdWVOb3RBcnJheUFuZFZhbHVlc0RpZmZlclxuICAgIF0pXG4gIF0pO1xuXG4gIGNvbnN0IGRlZmF1bHRzRnJvbVNjaGVtYSA9IGdldERlZmF1bHRzRm9yU2NoZW1hKCk7XG5cbiAgcmV0dXJuIF8ucGlja0J5KGFyZ3MsIChfXywga2V5KSA9PiBpc05vdERlZmF1bHQoa2V5KSk7XG59XG5cbi8qKlxuICogQ29tcGFjdHMgYW4gb2JqZWN0IGZvciB7QGxpbmsgc2hvd0NvbmZpZ306XG4gKiAxLiBSZW1vdmVzIGBzdWJjb21tYW5kYCBrZXkvdmFsdWVcbiAqIDIuIFJlbW92ZXMgYHVuZGVmaW5lZGAgdmFsdWVzXG4gKiAzLiBSZW1vdmVzIGVtcHR5IG9iamVjdHMgKGJ1dCBub3QgYGZhbHNlYCB2YWx1ZXMpXG4gKiBEb2VzIG5vdCBvcGVyYXRlIHJlY3Vyc2l2ZWx5LlxuICovXG5jb25zdCBjb21wYWN0Q29uZmlnID0gXy5wYXJ0aWFsKFxuICBfLm9taXRCeSxcbiAgXyxcbiAgKHZhbHVlLCBrZXkpID0+IGtleSA9PT0gJ3N1YmNvbW1hbmQnIHx8IF8uaXNVbmRlZmluZWQodmFsdWUpIHx8IChfLmlzT2JqZWN0KHZhbHVlKSAmJiBfLmlzRW1wdHkodmFsdWUpKVxuKTtcblxuLyoqXG4gKiBTaG93cyBhIGJyZWFrZG93biBvZiB0aGUgY3VycmVudCBjb25maWcgYWZ0ZXIgQ0xJIHBhcmFtcywgY29uZmlnIGZpbGUgbG9hZGVkICYgZGVmYXVsdHMgYXBwbGllZC5cbiAqXG4gKiBUaGUgYWN0dWFsIHNoYXBlIG9mIGBwcmVDb25maWdQYXJzZWRBcmdzYCBhbmQgYGRlZmF1bHRzYCBkb2VzIG5vdCBtYXR0ZXIgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGZ1bmN0aW9uLFxuICogYnV0IGl0J3MgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIHdpdGggdmFsdWVzIG9mIHR5cGUge0BsaW5rIFBhcnNlZEFyZ3N9IGFuZCBgRGVmYXVsdFZhbHVlczx0cnVlPmAsIHJlc3BlY3RpdmVseS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcHJlQ29uZmlnUGFyc2VkQXJncyAtIFBhcnNlZCBDTEkgYXJncyAob3IgcGFyYW0gdG8gYGluaXQoKWApIGJlZm9yZSBjb25maWcgJiBkZWZhdWx0cyBhcHBsaWVkXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9jb25maWctZmlsZScpLlJlYWRDb25maWdGaWxlUmVzdWx0fSBjb25maWdSZXN1bHQgLSBSZXN1bHQgb2YgYXR0ZW1wdGluZyB0byBsb2FkIGEgY29uZmlnIGZpbGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0cyAtIENvbmZpZ3VyYXRpb24gZGVmYXVsdHMgZnJvbSBzY2hlbWFzXG4gKi9cbmZ1bmN0aW9uIHNob3dDb25maWcgKHByZUNvbmZpZ1BhcnNlZEFyZ3MsIGNvbmZpZ1Jlc3VsdCwgZGVmYXVsdHMpIHtcbiAgY29uc29sZS5sb2coJ0FwcGl1bSBDb25maWd1cmF0aW9uXFxuJyk7XG4gIGlmIChjb25maWdSZXN1bHQuY29uZmlnKSB7XG4gICAgY29uc29sZS5sb2coYHZpYSBjb25maWcgZmlsZSBhdCAke2NvbmZpZ1Jlc3VsdC5maWxlcGF0aH06XFxuYCk7XG4gICAgY29uc29sZS5kaXIoY29tcGFjdENvbmZpZyhjb25maWdSZXN1bHQuY29uZmlnKSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coYChubyBjb25maWd1cmF0aW9uIGZpbGUgbG9hZGVkKVxcbmApO1xuICB9XG4gIGNvbnNvbGUubG9nKCd2aWEgQ0xJIG9yIGZ1bmN0aW9uIGNhbGw6XFxuJyk7XG4gIGNvbnNvbGUuZGlyKGNvbXBhY3RDb25maWcocHJlQ29uZmlnUGFyc2VkQXJncykpO1xuICBjb25zb2xlLmxvZygnXFxudmlhIGRlZmF1bHRzOlxcbicpO1xuICBjb25zb2xlLmRpcihjb21wYWN0Q29uZmlnKGRlZmF1bHRzKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRtcERpclxuICovXG5hc3luYyBmdW5jdGlvbiB2YWxpZGF0ZVRtcERpciAodG1wRGlyKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgbWtkaXJwKHRtcERpcik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFdlIGNvdWxkIG5vdCBlbnN1cmUgdGhhdCB0aGUgdGVtcCBkaXIgeW91IHNwZWNpZmllZCBgICtcbiAgICAgICAgICAgICAgICAgICAgYCgke3RtcERpcn0pIGV4aXN0cy4gUGxlYXNlIG1ha2Ugc3VyZSBpdCdzIHdyaXRlYWJsZS5gKTtcbiAgfVxufVxuXG5leHBvcnQge1xuICBnZXRCdWlsZEluZm8sIGNoZWNrTm9kZU9rLCBzaG93QnVpbGRJbmZvLFxuICB3YXJuTm9kZURlcHJlY2F0aW9ucywgdmFsaWRhdGVUbXBEaXIsIGdldE5vbkRlZmF1bHRTZXJ2ZXJBcmdzLFxuICBnZXRHaXRSZXYsIEFQUElVTV9WRVIsIHVwZGF0ZUJ1aWxkSW5mbywgc2hvd0NvbmZpZ1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi90eXBlcy90eXBlcycpLlBhcnNlZEFyZ3N9IFBhcnNlZEFyZ3NcbiAqL1xuIl0sImZpbGUiOiJsaWIvY29uZmlnLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
@@ -317,4 +317,4 @@ class ExtensionConfig {
|
|
|
317
317
|
exports.default = ExtensionConfig;require('source-map-support').install();
|
|
318
318
|
|
|
319
319
|
|
|
320
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9leHRlbnNpb24tY29uZmlnLmpzIl0sIm5hbWVzIjpbIkRFRkFVTFRfQVBQSVVNX0hPTUUiLCJwYXRoIiwicmVzb2x2ZSIsIm9zIiwiaG9tZWRpciIsIkFQUElVTV9IT01FIiwicHJvY2VzcyIsImVudiIsIklOU1RBTExfVFlQRV9OUE0iLCJJTlNUQUxMX1RZUEVfTE9DQUwiLCJJTlNUQUxMX1RZUEVfR0lUSFVCIiwiSU5TVEFMTF9UWVBFX0dJVCIsIklOU1RBTExfVFlQRVMiLCJFeHRlbnNpb25Db25maWciLCJjb25zdHJ1Y3RvciIsImFwcGl1bUhvbWUiLCJleHRlbnNpb25UeXBlIiwibG9nRm4iLCJsb2dnZXIiLCJfIiwiaXNGdW5jdGlvbiIsImxvZyIsImVycm9yIiwiYmluZCIsImluc3RhbGxlZEV4dGVuc2lvbnMiLCJpbyIsImNvbmZpZ0tleSIsInZhbGlkYXRlIiwiZXh0cyIsImZvdW5kUHJvYmxlbXMiLCJleHROYW1lIiwiZXh0RGF0YSIsInRvUGFpcnMiLCJnZXRHZW5lcmljQ29uZmlnUHJvYmxlbXMiLCJnZXRDb25maWdQcm9ibGVtcyIsImdldFNjaGVtYVByb2JsZW1zIiwicHJvYmxlbVN1bW1hcmllcyIsInByb2JsZW1zIiwiaXNFbXB0eSIsInB1c2giLCJwcm9ibGVtIiwiZXJyIiwiSlNPTiIsInN0cmluZ2lmeSIsInZhbCIsImZpbGVwYXRoIiwic3VtbWFyeSIsInNjaGVtYSIsImFyZ1NjaGVtYVBhdGgiLCJpc1N0cmluZyIsInJlYWRFeHRlbnNpb25TY2hlbWEiLCJtZXNzYWdlIiwiQUxMT1dFRF9TQ0hFTUFfRVhURU5TSU9OUyIsImpvaW4iLCJpc1BsYWluT2JqZWN0IiwidmVyc2lvbiIsInBrZ05hbWUiLCJpbnN0YWxsU3BlYyIsImluc3RhbGxUeXBlIiwiaW5zdGFsbFBhdGgiLCJtYWluQ2xhc3MiLCJpbmNsdWRlcyIsInJlYWQiLCJleHRlbnNpb25zIiwid3JpdGUiLCJhZGRFeHRlbnNpb24iLCJ1cGRhdGVFeHRlbnNpb24iLCJyZW1vdmVFeHRlbnNpb24iLCJwcmludCIsImV4dE5hbWVzIiwiT2JqZWN0Iiwia2V5cyIsImluZm8iLCJleHRlbnNpb25EZXNjIiwiRXJyb3IiLCJnZXRFeHRlbnNpb25SZXF1aXJlUGF0aCIsImdldEluc3RhbGxQYXRoIiwicmVxdWlyZSIsInJlcVBhdGgiLCJyZXFSZXNvbHZlZCIsIkFQUElVTV9SRUxPQURfRVhURU5TSU9OUyIsImNhY2hlIiwiZGVidWciLCJpc0luc3RhbGxlZCIsIl9yZWFkRXh0ZW5zaW9uU2NoZW1hIiwiZXh0VHlwZSIsIlR5cGVFcnJvciIsIm1vZHVsZU9iamVjdCIsInNjaGVtYVBhdGgiLCJub3JtYWxpemUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLG1CQUFtQixHQUFHQyxjQUFLQyxPQUFMLENBQWFDLFlBQUdDLE9BQUgsRUFBYixFQUEyQixTQUEzQixDQUE1Qjs7O0FBQ0EsTUFBTUMsV0FBVyxHQUFHQyxPQUFPLENBQUNDLEdBQVIsQ0FBWUYsV0FBWixJQUEyQkwsbUJBQS9DOztBQUVBLE1BQU1RLGdCQUFnQixHQUFHLEtBQXpCOztBQUNBLE1BQU1DLGtCQUFrQixHQUFHLE9BQTNCOztBQUNBLE1BQU1DLG1CQUFtQixHQUFHLFFBQTVCOztBQUNBLE1BQU1DLGdCQUFnQixHQUFHLEtBQXpCOztBQUNBLE1BQU1DLGFBQWEsR0FBRyxDQUNwQkQsZ0JBRG9CLEVBRXBCRCxtQkFGb0IsRUFHcEJELGtCQUhvQixFQUlwQkQsZ0JBSm9CLENBQXRCOzs7QUFPZSxNQUFNSyxlQUFOLENBQXNCO0FBT25DQyxFQUFBQSxXQUFXLENBQUVDLFVBQUYsRUFBY0MsYUFBZCxFQUE2QkMsS0FBN0IsRUFBb0M7QUFDN0MsVUFBTUMsTUFBTSxHQUFHQyxnQkFBRUMsVUFBRixDQUFhSCxLQUFiLElBQXNCQSxLQUF0QixHQUE4QkksZ0JBQUlDLEtBQUosQ0FBVUMsSUFBVixDQUFlRixlQUFmLENBQTdDO0FBRUEsU0FBS04sVUFBTCxHQUFrQkEsVUFBbEI7QUFFQSxTQUFLUyxtQkFBTCxHQUEyQixFQUEzQjtBQUVBLFNBQUtDLEVBQUwsR0FBVSx5Q0FBdUJWLFVBQXZCLENBQVY7QUFFQSxTQUFLQyxhQUFMLEdBQXFCQSxhQUFyQjtBQUVBLFNBQUtVLFNBQUwsR0FBa0IsR0FBRVYsYUFBYyxHQUFsQztBQUlBLFNBQUtLLEdBQUwsR0FBV0gsTUFBWDtBQUNEOztBQVFEUyxFQUFBQSxRQUFRLENBQUVDLElBQUYsRUFBUTtBQUNkLFVBQU1DLGFBQWEsR0FBRyxFQUF0Qjs7QUFDQSxTQUFLLE1BQU0sQ0FBQ0MsT0FBRCxFQUFVQyxPQUFWLENBQVgsSUFBaUNaLGdCQUFFYSxPQUFGLENBQVVKLElBQVYsQ0FBakMsRUFBa0Q7QUFDaERDLE1BQUFBLGFBQWEsQ0FBQ0MsT0FBRCxDQUFiLEdBQXlCLENBQ3ZCLEdBQUcsS0FBS0csd0JBQUwsQ0FBOEJGLE9BQTlCLEVBQXVDRCxPQUF2QyxDQURvQixFQUV2QixHQUFHLEtBQUtJLGlCQUFMLENBQXVCSCxPQUF2QixFQUFnQ0QsT0FBaEMsQ0FGb0IsRUFHdkIsR0FBRyxLQUFLSyxpQkFBTCxDQUF1QkosT0FBdkIsRUFBZ0NELE9BQWhDLENBSG9CLENBQXpCO0FBS0Q7O0FBRUQsVUFBTU0sZ0JBQWdCLEdBQUcsRUFBekI7O0FBQ0EsU0FBSyxNQUFNLENBQUNOLE9BQUQsRUFBVU8sUUFBVixDQUFYLElBQWtDbEIsZ0JBQUVhLE9BQUYsQ0FBVUgsYUFBVixDQUFsQyxFQUE0RDtBQUMxRCxVQUFJVixnQkFBRW1CLE9BQUYsQ0FBVUQsUUFBVixDQUFKLEVBQXlCO0FBQ3ZCO0FBQ0Q7O0FBRUQsYUFBT1QsSUFBSSxDQUFDRSxPQUFELENBQVg7QUFDQU0sTUFBQUEsZ0JBQWdCLENBQUNHLElBQWpCLENBQXVCLEdBQUUsS0FBS3ZCLGFBQWMsSUFBR2MsT0FBUSwyQkFBakMsR0FDQyx1QkFEdkI7O0FBRUEsV0FBSyxNQUFNVSxPQUFYLElBQXNCSCxRQUF0QixFQUFnQztBQUM5QkQsUUFBQUEsZ0JBQWdCLENBQUNHLElBQWpCLENBQXVCLE9BQU1DLE9BQU8sQ0FBQ0MsR0FBSSxrQkFBbkIsR0FDQyxHQUFFQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUgsT0FBTyxDQUFDSSxHQUF2QixDQUE0QixHQURyRDtBQUVEO0FBQ0Y7O0FBRUQsUUFBSSxDQUFDekIsZ0JBQUVtQixPQUFGLENBQVVGLGdCQUFWLENBQUwsRUFBa0M7QUFDaEMsV0FBS2YsR0FBTCxDQUFVLHlEQUFELEdBQ0MsT0FBTSxLQUFLSyxTQUFVLG9CQUFtQixLQUFLRCxFQUFMLENBQVFvQixRQUFTLElBRG5FOztBQUVBLFdBQUssTUFBTUMsT0FBWCxJQUFzQlYsZ0JBQXRCLEVBQXdDO0FBQ3RDLGFBQUtmLEdBQUwsQ0FBU3lCLE9BQVQ7QUFDRDtBQUNGOztBQUVELFdBQU9sQixJQUFQO0FBQ0Q7O0FBT0RPLEVBQUFBLGlCQUFpQixDQUFFSixPQUFGLEVBQVdELE9BQVgsRUFBb0I7QUFDbkMsVUFBTU8sUUFBUSxHQUFHLEVBQWpCO0FBQ0EsVUFBTTtBQUFDVSxNQUFBQSxNQUFNLEVBQUVDO0FBQVQsUUFBMEJqQixPQUFoQzs7QUFDQSxRQUFJaUIsYUFBSixFQUFtQjtBQUNqQixVQUFJN0IsZ0JBQUU4QixRQUFGLENBQVdELGFBQVgsQ0FBSixFQUErQjtBQUM3QixZQUFJLDBDQUE2QkEsYUFBN0IsQ0FBSixFQUFpRDtBQUMvQyxjQUFJO0FBQ0YsaUJBQUtFLG1CQUFMLENBQXlCcEIsT0FBekIsRUFBa0NDLE9BQWxDO0FBQ0QsV0FGRCxDQUVFLE9BQU9VLEdBQVAsRUFBWTtBQUNaSixZQUFBQSxRQUFRLENBQUNFLElBQVQsQ0FBYztBQUFDRSxjQUFBQSxHQUFHLEVBQUcscUNBQW9DTyxhQUFjLEtBQUlQLEdBQUcsQ0FBQ1UsT0FBUSxFQUF6RTtBQUE0RVAsY0FBQUEsR0FBRyxFQUFFSTtBQUFqRixhQUFkO0FBQ0Q7QUFDRixTQU5ELE1BTU87QUFDTFgsVUFBQUEsUUFBUSxDQUFDRSxJQUFULENBQWM7QUFDWkUsWUFBQUEsR0FBRyxFQUFHLG1EQUFrRCxDQUFDLEdBQUdXLGlDQUFKLEVBQStCQyxJQUEvQixDQUFvQyxJQUFwQyxDQUEwQyxFQUR0RjtBQUVaVCxZQUFBQSxHQUFHLEVBQUVJO0FBRk8sV0FBZDtBQUlEO0FBQ0YsT0FiRCxNQWFPLElBQUk3QixnQkFBRW1DLGFBQUYsQ0FBZ0JOLGFBQWhCLENBQUosRUFBb0M7QUFDekMsWUFBSTtBQUNGLGVBQUtFLG1CQUFMLENBQXlCcEIsT0FBekIsRUFBa0NDLE9BQWxDO0FBQ0QsU0FGRCxDQUVFLE9BQU9VLEdBQVAsRUFBWTtBQUNaSixVQUFBQSxRQUFRLENBQUNFLElBQVQsQ0FBYztBQUFDRSxZQUFBQSxHQUFHLEVBQUcsdUNBQXNDQSxHQUFHLENBQUNVLE9BQVEsRUFBekQ7QUFBNERQLFlBQUFBLEdBQUcsRUFBRUk7QUFBakUsV0FBZDtBQUNEO0FBQ0YsT0FOTSxNQU1BO0FBQ0xYLFFBQUFBLFFBQVEsQ0FBQ0UsSUFBVCxDQUFjO0FBQ1pFLFVBQUFBLEdBQUcsRUFBRSx5RkFETztBQUVaRyxVQUFBQSxHQUFHLEVBQUVJO0FBRk8sU0FBZDtBQUlEO0FBQ0Y7O0FBQ0QsV0FBT1gsUUFBUDtBQUNEOztBQVFESixFQUFBQSx3QkFBd0IsQ0FBRUYsT0FBRixFQUFXRCxPQUFYLEVBQW9CO0FBQzFDLFVBQU07QUFBQ3lCLE1BQUFBLE9BQUQ7QUFBVUMsTUFBQUEsT0FBVjtBQUFtQkMsTUFBQUEsV0FBbkI7QUFBZ0NDLE1BQUFBLFdBQWhDO0FBQTZDQyxNQUFBQSxXQUE3QztBQUEwREMsTUFBQUE7QUFBMUQsUUFBdUU3QixPQUE3RTtBQUNBLFVBQU1NLFFBQVEsR0FBRyxFQUFqQjs7QUFFQSxRQUFJLENBQUNsQixnQkFBRThCLFFBQUYsQ0FBV00sT0FBWCxDQUFMLEVBQTBCO0FBQ3hCbEIsTUFBQUEsUUFBUSxDQUFDRSxJQUFULENBQWM7QUFBQ0UsUUFBQUEsR0FBRyxFQUFFLDhCQUFOO0FBQXNDRyxRQUFBQSxHQUFHLEVBQUVXO0FBQTNDLE9BQWQ7QUFDRDs7QUFFRCxRQUFJLENBQUNwQyxnQkFBRThCLFFBQUYsQ0FBV08sT0FBWCxDQUFMLEVBQTBCO0FBQ3hCbkIsTUFBQUEsUUFBUSxDQUFDRSxJQUFULENBQWM7QUFBQ0UsUUFBQUEsR0FBRyxFQUFFLHVDQUFOO0FBQStDRyxRQUFBQSxHQUFHLEVBQUVZO0FBQXBELE9BQWQ7QUFDRDs7QUFFRCxRQUFJLENBQUNyQyxnQkFBRThCLFFBQUYsQ0FBV1EsV0FBWCxDQUFMLEVBQThCO0FBQzVCcEIsTUFBQUEsUUFBUSxDQUFDRSxJQUFULENBQWM7QUFBQ0UsUUFBQUEsR0FBRyxFQUFFLHdDQUFOO0FBQWdERyxRQUFBQSxHQUFHLEVBQUVhO0FBQXJELE9BQWQ7QUFDRDs7QUFFRCxRQUFJLENBQUN0QyxnQkFBRTBDLFFBQUYsQ0FBV2pELGFBQVgsRUFBMEI4QyxXQUExQixDQUFMLEVBQTZDO0FBQzNDckIsTUFBQUEsUUFBUSxDQUFDRSxJQUFULENBQWM7QUFBQ0UsUUFBQUEsR0FBRyxFQUFFLG1DQUFOO0FBQTJDRyxRQUFBQSxHQUFHLEVBQUVjO0FBQWhELE9BQWQ7QUFDRDs7QUFFRCxRQUFJLENBQUN2QyxnQkFBRThCLFFBQUYsQ0FBV1UsV0FBWCxDQUFMLEVBQThCO0FBQzVCdEIsTUFBQUEsUUFBUSxDQUFDRSxJQUFULENBQWM7QUFBQ0UsUUFBQUEsR0FBRyxFQUFFLHdDQUFOO0FBQWdERyxRQUFBQSxHQUFHLEVBQUVlO0FBQXJELE9BQWQ7QUFDRDs7QUFFRCxRQUFJLENBQUN4QyxnQkFBRThCLFFBQUYsQ0FBV1csU0FBWCxDQUFMLEVBQTRCO0FBQzFCdkIsTUFBQUEsUUFBUSxDQUFDRSxJQUFULENBQWM7QUFBQ0UsUUFBQUEsR0FBRyxFQUFFLHdDQUFOO0FBQWdERyxRQUFBQSxHQUFHLEVBQUVnQjtBQUFyRCxPQUFkO0FBQ0Q7O0FBRUQsV0FBT3ZCLFFBQVA7QUFDRDs7QUFRREgsRUFBQUEsaUJBQWlCLENBQUVILE9BQUYsRUFBV0QsT0FBWCxFQUFvQjtBQUVuQyxXQUFPLEVBQVA7QUFDRDs7QUFLUyxRQUFKZ0MsSUFBSSxHQUFJO0FBQ1osVUFBTUMsVUFBVSxHQUFHLE1BQU0sS0FBS3RDLEVBQUwsQ0FBUXFDLElBQVIsQ0FBYSxLQUFLOUMsYUFBbEIsQ0FBekI7QUFDQSxTQUFLUSxtQkFBTCxHQUEyQixLQUFLRyxRQUFMLENBQWNvQyxVQUFkLENBQTNCO0FBQ0EsV0FBTyxLQUFLdkMsbUJBQVo7QUFDRDs7QUFLVSxRQUFMd0MsS0FBSyxHQUFJO0FBQ2IsV0FBTyxNQUFNLEtBQUt2QyxFQUFMLENBQVF1QyxLQUFSLEVBQWI7QUFDRDs7QUFPaUIsUUFBWkMsWUFBWSxDQUFFbkMsT0FBRixFQUFXQyxPQUFYLEVBQW9CO0FBQ3BDLFNBQUtQLG1CQUFMLENBQXlCTSxPQUF6QixJQUFvQ0MsT0FBcEM7QUFDQSxVQUFNLEtBQUtpQyxLQUFMLEVBQU47QUFDRDs7QUFPb0IsUUFBZkUsZUFBZSxDQUFFcEMsT0FBRixFQUFXQyxPQUFYLEVBQW9CO0FBQ3ZDLFNBQUtQLG1CQUFMLENBQXlCTSxPQUF6QixJQUFvQyxFQUNsQyxHQUFHLEtBQUtOLG1CQUFMLENBQXlCTSxPQUF6QixDQUQrQjtBQUVsQyxTQUFHQztBQUYrQixLQUFwQztBQUlBLFVBQU0sS0FBS2lDLEtBQUwsRUFBTjtBQUNEOztBQU1vQixRQUFmRyxlQUFlLENBQUVyQyxPQUFGLEVBQVc7QUFDOUIsV0FBTyxLQUFLTixtQkFBTCxDQUF5Qk0sT0FBekIsQ0FBUDtBQUNBLFVBQU0sS0FBS2tDLEtBQUwsRUFBTjtBQUNEOztBQUVESSxFQUFBQSxLQUFLLEdBQUk7QUFDUCxVQUFNQyxRQUFRLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZLEtBQUsvQyxtQkFBakIsQ0FBakI7O0FBQ0EsUUFBSUwsZ0JBQUVtQixPQUFGLENBQVUrQixRQUFWLENBQUosRUFBeUI7QUFDdkJoRCxzQkFBSW1ELElBQUosQ0FBVSxNQUFLLEtBQUs5QyxTQUFVLHlDQUF3QyxLQUFLVixhQUFjLElBQWhGLEdBQ0EsZ0RBRFQ7O0FBRUE7QUFDRDs7QUFFREssb0JBQUltRCxJQUFKLENBQVUsYUFBWSxLQUFLOUMsU0FBVSxHQUFyQzs7QUFDQSxTQUFLLE1BQU0sQ0FBQ0ksT0FBRCxFQUFVQyxPQUFWLENBQVgsSUFBaUNaLGdCQUFFYSxPQUFGLENBQVUsS0FBS1IsbUJBQWYsQ0FBakMsRUFBc0U7QUFDcEVILHNCQUFJbUQsSUFBSixDQUFVLE9BQU0sS0FBS0MsYUFBTCxDQUFtQjNDLE9BQW5CLEVBQTRCQyxPQUE1QixDQUFxQyxFQUFyRDtBQUNEO0FBQ0Y7O0FBVUQwQyxFQUFBQSxhQUFhLENBQUUzQyxPQUFGLEVBQVdDLE9BQVgsRUFBb0I7QUFDL0IsVUFBTSxJQUFJMkMsS0FBSixDQUFVLHdDQUFWLENBQU47QUFDRDs7QUFNREMsRUFBQUEsdUJBQXVCLENBQUU3QyxPQUFGLEVBQVc7QUFDaEMsVUFBTTtBQUFDMEIsTUFBQUEsT0FBRDtBQUFVRyxNQUFBQTtBQUFWLFFBQXlCLEtBQUtuQyxtQkFBTCxDQUF5Qk0sT0FBekIsQ0FBL0I7QUFDQSxXQUFPN0IsY0FBS0MsT0FBTCxDQUFhLEtBQUthLFVBQWxCLEVBQThCNEMsV0FBOUIsRUFBMkMsY0FBM0MsRUFBMkRILE9BQTNELENBQVA7QUFDRDs7QUFNRG9CLEVBQUFBLGNBQWMsQ0FBRTlDLE9BQUYsRUFBVztBQUN2QixVQUFNO0FBQUM2QixNQUFBQTtBQUFELFFBQWdCLEtBQUtuQyxtQkFBTCxDQUF5Qk0sT0FBekIsQ0FBdEI7QUFDQSxXQUFPN0IsY0FBS0MsT0FBTCxDQUFhLEtBQUthLFVBQWxCLEVBQThCNEMsV0FBOUIsQ0FBUDtBQUNEOztBQU9Ea0IsRUFBQUEsT0FBTyxDQUFFL0MsT0FBRixFQUFXO0FBQ2hCLFVBQU07QUFBQzhCLE1BQUFBO0FBQUQsUUFBYyxLQUFLcEMsbUJBQUwsQ0FBeUJNLE9BQXpCLENBQXBCO0FBQ0EsVUFBTWdELE9BQU8sR0FBRyxLQUFLSCx1QkFBTCxDQUE2QjdDLE9BQTdCLENBQWhCOztBQUNBLFVBQU1pRCxXQUFXLEdBQUdGLE9BQU8sQ0FBQzNFLE9BQVIsQ0FBZ0I0RSxPQUFoQixDQUFwQjs7QUFDQSxRQUFJeEUsT0FBTyxDQUFDQyxHQUFSLENBQVl5RSx3QkFBWixJQUF3Q0gsT0FBTyxDQUFDSSxLQUFSLENBQWNGLFdBQWQsQ0FBNUMsRUFBd0U7QUFDdEUxRCxzQkFBSTZELEtBQUosQ0FBVyxZQUFXSCxXQUFZLHFCQUFsQzs7QUFDQSxhQUFPRixPQUFPLENBQUNJLEtBQVIsQ0FBY0YsV0FBZCxDQUFQO0FBQ0Q7O0FBQ0QsV0FBT0YsT0FBTyxDQUFDQyxPQUFELENBQVAsQ0FBaUJsQixTQUFqQixDQUFQO0FBQ0Q7O0FBTUR1QixFQUFBQSxXQUFXLENBQUVyRCxPQUFGLEVBQVc7QUFDcEIsV0FBT1gsZ0JBQUUwQyxRQUFGLENBQVdTLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZLEtBQUsvQyxtQkFBakIsQ0FBWCxFQUFrRE0sT0FBbEQsQ0FBUDtBQUNEOztBQVcwQixTQUFwQnNELG9CQUFvQixDQUFFckUsVUFBRixFQUFjc0UsT0FBZCxFQUF1QnZELE9BQXZCLEVBQWdDQyxPQUFoQyxFQUF5QztBQUNsRSxVQUFNO0FBQUM0QixNQUFBQSxXQUFEO0FBQWNILE1BQUFBLE9BQWQ7QUFBdUJULE1BQUFBLE1BQU0sRUFBRUM7QUFBL0IsUUFBZ0RqQixPQUF0RDs7QUFDQSxRQUFJLENBQUNpQixhQUFMLEVBQW9CO0FBQ2xCLFlBQU0sSUFBSXNDLFNBQUosQ0FDSCw4Q0FBNkNELE9BQVEsSUFBRzdCLE9BQVEsd0NBRDdELENBQU47QUFHRDs7QUFDRCxRQUFJK0IsWUFBSjs7QUFDQSxRQUFJcEUsZ0JBQUU4QixRQUFGLENBQVdELGFBQVgsQ0FBSixFQUErQjtBQUM3QixZQUFNd0MsVUFBVSxHQUFHLDBCQUNqQnZGLGNBQUtDLE9BQUwsQ0FBYWEsVUFBYixFQUF5QjRDLFdBQXpCLENBRGlCLEVBR2pCMUQsY0FBS3dGLFNBQUwsQ0FBZ0IsR0FBRWpDLE9BQVEsSUFBR1IsYUFBYyxFQUEzQyxDQUhpQixDQUFuQjtBQUtBdUMsTUFBQUEsWUFBWSxHQUFHVixPQUFPLENBQUNXLFVBQUQsQ0FBdEI7QUFDRCxLQVBELE1BT087QUFDTEQsTUFBQUEsWUFBWSxHQUFHdkMsYUFBZjtBQUNEOztBQUVELFVBQU1ELE1BQU0sR0FBR3dDLFlBQVksQ0FBQ0csVUFBYixHQUNYSCxZQUFZLENBQUNJLE9BREYsR0FFWEosWUFGSjtBQUdBLGdDQUFlRixPQUFmLEVBQXdCdkQsT0FBeEIsRUFBaUNpQixNQUFqQztBQUNBLFdBQU9BLE1BQVA7QUFDRDs7QUFTREcsRUFBQUEsbUJBQW1CLENBQUVwQixPQUFGLEVBQVdDLE9BQVgsRUFBb0I7QUFDckMsV0FBT2xCLGVBQWUsQ0FBQ3VFLG9CQUFoQixDQUFxQyxLQUFLckUsVUFBMUMsRUFBc0QsS0FBS0MsYUFBM0QsRUFBMEVjLE9BQTFFLEVBQW1GQyxPQUFuRixDQUFQO0FBQ0Q7O0FBelRrQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHJlc29sdmVGcm9tIGZyb20gJ3Jlc29sdmUtZnJvbSc7XG5pbXBvcnQgeyBnZXRFeHRDb25maWdJT0luc3RhbmNlIH0gZnJvbSAnLi9leHQtY29uZmlnLWlvJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgQUxMT1dFRF9TQ0hFTUFfRVhURU5TSU9OUywgaXNBbGxvd2VkU2NoZW1hRmlsZUV4dGVuc2lvbiwgcmVnaXN0ZXJTY2hlbWEgfSBmcm9tICcuL3NjaGVtYS9zY2hlbWEnO1xuXG5jb25zdCBERUZBVUxUX0FQUElVTV9IT01FID0gcGF0aC5yZXNvbHZlKG9zLmhvbWVkaXIoKSwgJy5hcHBpdW0nKTtcbmNvbnN0IEFQUElVTV9IT01FID0gcHJvY2Vzcy5lbnYuQVBQSVVNX0hPTUUgfHwgREVGQVVMVF9BUFBJVU1fSE9NRTtcblxuY29uc3QgSU5TVEFMTF9UWVBFX05QTSA9ICducG0nO1xuY29uc3QgSU5TVEFMTF9UWVBFX0xPQ0FMID0gJ2xvY2FsJztcbmNvbnN0IElOU1RBTExfVFlQRV9HSVRIVUIgPSAnZ2l0aHViJztcbmNvbnN0IElOU1RBTExfVFlQRV9HSVQgPSAnZ2l0JztcbmNvbnN0IElOU1RBTExfVFlQRVMgPSBbXG4gIElOU1RBTExfVFlQRV9HSVQsXG4gIElOU1RBTExfVFlQRV9HSVRIVUIsXG4gIElOU1RBTExfVFlQRV9MT0NBTCxcbiAgSU5TVEFMTF9UWVBFX05QTVxuXTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXh0ZW5zaW9uQ29uZmlnIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lIC0gYEFQUElVTV9IT01FYFxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IGV4dGVuc2lvblR5cGUgLSBUeXBlIG9mIGV4dGVuc2lvblxuICAgKiBAcGFyYW0geyguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZH0gW2xvZ0ZuXVxuICAgKi9cbiAgY29uc3RydWN0b3IgKGFwcGl1bUhvbWUsIGV4dGVuc2lvblR5cGUsIGxvZ0ZuKSB7XG4gICAgY29uc3QgbG9nZ2VyID0gXy5pc0Z1bmN0aW9uKGxvZ0ZuKSA/IGxvZ0ZuIDogbG9nLmVycm9yLmJpbmQobG9nKTtcbiAgICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgICB0aGlzLmFwcGl1bUhvbWUgPSBhcHBpdW1Ib21lO1xuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxvYmplY3Q+fSAqL1xuICAgIHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9ucyA9IHt9O1xuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCcuL2V4dC1jb25maWctaW8nKS5FeHRlbnNpb25Db25maWdJT30gKi9cbiAgICB0aGlzLmlvID0gZ2V0RXh0Q29uZmlnSU9JbnN0YW5jZShhcHBpdW1Ib21lKTtcbiAgICAvKiogQHR5cGUge0V4dGVuc2lvblR5cGV9ICovXG4gICAgdGhpcy5leHRlbnNpb25UeXBlID0gZXh0ZW5zaW9uVHlwZTtcbiAgICAvKiogQHR5cGUgeydkcml2ZXJzJ3wncGx1Z2lucyd9ICovXG4gICAgdGhpcy5jb25maWdLZXkgPSBgJHtleHRlbnNpb25UeXBlfXNgOyAvLyB0b2RvIHVzZSB0ZW1wbGF0ZSB0eXBlXG4gICAgLyoqXG4gICAgICogQHR5cGUgeyguLi5hcmdzOiBhbnlbXSk9PnZvaWR9XG4gICAgICovXG4gICAgdGhpcy5sb2cgPSBsb2dnZXI7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGV4dGVuc2lvbnMgZm9yIHByb2JsZW1zXG4gICAqIEB0ZW1wbGF0ZSBFeHREYXRhXG4gICAqIEBwYXJhbSB7RXh0RGF0YVtdfSBleHRzIC0gQXJyYXkgb2YgZXh0RGF0YSBvYmplY3RzXG4gICAqIEByZXR1cm5zIHtFeHREYXRhW119XG4gICAqL1xuICB2YWxpZGF0ZSAoZXh0cykge1xuICAgIGNvbnN0IGZvdW5kUHJvYmxlbXMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtleHROYW1lLCBleHREYXRhXSBvZiBfLnRvUGFpcnMoZXh0cykpIHtcbiAgICAgIGZvdW5kUHJvYmxlbXNbZXh0TmFtZV0gPSBbXG4gICAgICAgIC4uLnRoaXMuZ2V0R2VuZXJpY0NvbmZpZ1Byb2JsZW1zKGV4dERhdGEsIGV4dE5hbWUpLFxuICAgICAgICAuLi50aGlzLmdldENvbmZpZ1Byb2JsZW1zKGV4dERhdGEsIGV4dE5hbWUpLFxuICAgICAgICAuLi50aGlzLmdldFNjaGVtYVByb2JsZW1zKGV4dERhdGEsIGV4dE5hbWUpXG4gICAgICBdO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2JsZW1TdW1tYXJpZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtleHROYW1lLCBwcm9ibGVtc10gb2YgXy50b1BhaXJzKGZvdW5kUHJvYmxlbXMpKSB7XG4gICAgICBpZiAoXy5pc0VtcHR5KHByb2JsZW1zKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIHJlbW92ZSB0aGlzIGV4dGVuc2lvbiBmcm9tIHRoZSBsaXN0IHNpbmNlIGl0J3Mgbm90IHZhbGlkXG4gICAgICBkZWxldGUgZXh0c1tleHROYW1lXTtcbiAgICAgIHByb2JsZW1TdW1tYXJpZXMucHVzaChgJHt0aGlzLmV4dGVuc2lvblR5cGV9ICR7ZXh0TmFtZX0gaGFkIGVycm9ycyBhbmQgd2lsbCBub3QgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYGJlIGF2YWlsYWJsZS4gRXJyb3JzOmApO1xuICAgICAgZm9yIChjb25zdCBwcm9ibGVtIG9mIHByb2JsZW1zKSB7XG4gICAgICAgIHByb2JsZW1TdW1tYXJpZXMucHVzaChgICAtICR7cHJvYmxlbS5lcnJ9IChBY3R1YWwgdmFsdWU6IGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7SlNPTi5zdHJpbmdpZnkocHJvYmxlbS52YWwpfSlgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIV8uaXNFbXB0eShwcm9ibGVtU3VtbWFyaWVzKSkge1xuICAgICAgdGhpcy5sb2coYEFwcGl1bSBlbmNvdW50ZXJlZCBvbmUgb3IgbW9yZSBlcnJvcnMgd2hpbGUgdmFsaWRhdGluZyBgICtcbiAgICAgICAgICAgICAgIGB0aGUgJHt0aGlzLmNvbmZpZ0tleX0gZXh0ZW5zaW9uIGZpbGUgKCR7dGhpcy5pby5maWxlcGF0aH0pOmApO1xuICAgICAgZm9yIChjb25zdCBzdW1tYXJ5IG9mIHByb2JsZW1TdW1tYXJpZXMpIHtcbiAgICAgICAgdGhpcy5sb2coc3VtbWFyeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dHM7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGV4dERhdGFcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWVcbiAgICogQHJldHVybnMge1Byb2JsZW1bXX1cbiAgICovXG4gIGdldFNjaGVtYVByb2JsZW1zIChleHREYXRhLCBleHROYW1lKSB7XG4gICAgY29uc3QgcHJvYmxlbXMgPSBbXTtcbiAgICBjb25zdCB7c2NoZW1hOiBhcmdTY2hlbWFQYXRofSA9IGV4dERhdGE7XG4gICAgaWYgKGFyZ1NjaGVtYVBhdGgpIHtcbiAgICAgIGlmIChfLmlzU3RyaW5nKGFyZ1NjaGVtYVBhdGgpKSB7XG4gICAgICAgIGlmIChpc0FsbG93ZWRTY2hlbWFGaWxlRXh0ZW5zaW9uKGFyZ1NjaGVtYVBhdGgpKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMucmVhZEV4dGVuc2lvblNjaGVtYShleHROYW1lLCBleHREYXRhKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHByb2JsZW1zLnB1c2goe2VycjogYFVuYWJsZSB0byByZWdpc3RlciBzY2hlbWEgYXQgcGF0aCAke2FyZ1NjaGVtYVBhdGh9OyAke2Vyci5tZXNzYWdlfWAsIHZhbDogYXJnU2NoZW1hUGF0aH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9ibGVtcy5wdXNoKHtcbiAgICAgICAgICAgIGVycjogYFNjaGVtYSBmaWxlIGhhcyB1bnN1cHBvcnRlZCBleHRlbnNpb24uIEFsbG93ZWQ6ICR7Wy4uLkFMTE9XRURfU0NIRU1BX0VYVEVOU0lPTlNdLmpvaW4oJywgJyl9YCxcbiAgICAgICAgICAgIHZhbDogYXJnU2NoZW1hUGF0aFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChhcmdTY2hlbWFQYXRoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMucmVhZEV4dGVuc2lvblNjaGVtYShleHROYW1lLCBleHREYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcHJvYmxlbXMucHVzaCh7ZXJyOiBgVW5hYmxlIHRvIHJlZ2lzdGVyIGVtYmVkZGVkIHNjaGVtYTsgJHtlcnIubWVzc2FnZX1gLCB2YWw6IGFyZ1NjaGVtYVBhdGh9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvYmxlbXMucHVzaCh7XG4gICAgICAgICAgZXJyOiAnSW5jb3JyZWN0bHkgZm9ybWF0dGVkIHNjaGVtYSBmaWVsZDsgbXVzdCBiZSBhIHBhdGggdG8gYSBzY2hlbWEgZmlsZSBvciBhIHNjaGVtYSBvYmplY3QuJyxcbiAgICAgICAgICB2YWw6IGFyZ1NjaGVtYVBhdGhcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9ibGVtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXh0RGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZVxuICAgKiBAcmV0dXJucyB7UHJvYmxlbVtdfVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGdldEdlbmVyaWNDb25maWdQcm9ibGVtcyAoZXh0RGF0YSwgZXh0TmFtZSkge1xuICAgIGNvbnN0IHt2ZXJzaW9uLCBwa2dOYW1lLCBpbnN0YWxsU3BlYywgaW5zdGFsbFR5cGUsIGluc3RhbGxQYXRoLCBtYWluQ2xhc3N9ID0gZXh0RGF0YTtcbiAgICBjb25zdCBwcm9ibGVtcyA9IFtdO1xuXG4gICAgaWYgKCFfLmlzU3RyaW5nKHZlcnNpb24pKSB7XG4gICAgICBwcm9ibGVtcy5wdXNoKHtlcnI6ICdNaXNzaW5nIG9yIGluY29ycmVjdCB2ZXJzaW9uJywgdmFsOiB2ZXJzaW9ufSk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzU3RyaW5nKHBrZ05hbWUpKSB7XG4gICAgICBwcm9ibGVtcy5wdXNoKHtlcnI6ICdNaXNzaW5nIG9yIGluY29ycmVjdCBOUE0gcGFja2FnZSBuYW1lJywgdmFsOiBwa2dOYW1lfSk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzU3RyaW5nKGluc3RhbGxTcGVjKSkge1xuICAgICAgcHJvYmxlbXMucHVzaCh7ZXJyOiAnTWlzc2luZyBvciBpbmNvcnJlY3QgaW5zdGFsbGF0aW9uIHNwZWMnLCB2YWw6IGluc3RhbGxTcGVjfSk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmluY2x1ZGVzKElOU1RBTExfVFlQRVMsIGluc3RhbGxUeXBlKSkge1xuICAgICAgcHJvYmxlbXMucHVzaCh7ZXJyOiAnTWlzc2luZyBvciBpbmNvcnJlY3QgaW5zdGFsbCB0eXBlJywgdmFsOiBpbnN0YWxsVHlwZX0pO1xuICAgIH1cblxuICAgIGlmICghXy5pc1N0cmluZyhpbnN0YWxsUGF0aCkpIHtcbiAgICAgIHByb2JsZW1zLnB1c2goe2VycjogJ01pc3Npbmcgb3IgaW5jb3JyZWN0IGluc3RhbGxhdGlvbiBwYXRoJywgdmFsOiBpbnN0YWxsUGF0aH0pO1xuICAgIH1cblxuICAgIGlmICghXy5pc1N0cmluZyhtYWluQ2xhc3MpKSB7XG4gICAgICBwcm9ibGVtcy5wdXNoKHtlcnI6ICdNaXNzaW5nIG9yIGluY29ycmVjdCBkcml2ZXIgY2xhc3MgbmFtZScsIHZhbDogbWFpbkNsYXNzfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2JsZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBleHREYXRhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lXG4gICAqIEByZXR1cm5zIHtQcm9ibGVtW119XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgZ2V0Q29uZmlnUHJvYmxlbXMgKGV4dERhdGEsIGV4dE5hbWUpIHtcbiAgICAvLyBzaG91ZCBvdmVycmlkZSB0aGlzIG1ldGhvZCBpZiBzcGVjaWFsIHZhbGlkYXRpb24gaXMgbmVjZXNzYXJ5IGZvciB0aGlzIGV4dGVuc2lvbiB0eXBlXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHR5cGVvZiB0aGlzLmluc3RhbGxlZEV4dGVuc2lvbnM+fVxuICAgKi9cbiAgYXN5bmMgcmVhZCAoKSB7XG4gICAgY29uc3QgZXh0ZW5zaW9ucyA9IGF3YWl0IHRoaXMuaW8ucmVhZCh0aGlzLmV4dGVuc2lvblR5cGUpO1xuICAgIHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9ucyA9IHRoaXMudmFsaWRhdGUoZXh0ZW5zaW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn1cbiAgICovXG4gIGFzeW5jIHdyaXRlICgpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5pby53cml0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBleHREYXRhXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgYWRkRXh0ZW5zaW9uIChleHROYW1lLCBleHREYXRhKSB7XG4gICAgdGhpcy5pbnN0YWxsZWRFeHRlbnNpb25zW2V4dE5hbWVdID0gZXh0RGF0YTtcbiAgICBhd2FpdCB0aGlzLndyaXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWVcbiAgICogQHBhcmFtIHtvYmplY3R9IGV4dERhdGFcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyB1cGRhdGVFeHRlbnNpb24gKGV4dE5hbWUsIGV4dERhdGEpIHtcbiAgICB0aGlzLmluc3RhbGxlZEV4dGVuc2lvbnNbZXh0TmFtZV0gPSB7XG4gICAgICAuLi50aGlzLmluc3RhbGxlZEV4dGVuc2lvbnNbZXh0TmFtZV0sXG4gICAgICAuLi5leHREYXRhLFxuICAgIH07XG4gICAgYXdhaXQgdGhpcy53cml0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgcmVtb3ZlRXh0ZW5zaW9uIChleHROYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9uc1tleHROYW1lXTtcbiAgICBhd2FpdCB0aGlzLndyaXRlKCk7XG4gIH1cblxuICBwcmludCAoKSB7XG4gICAgY29uc3QgZXh0TmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLmluc3RhbGxlZEV4dGVuc2lvbnMpO1xuICAgIGlmIChfLmlzRW1wdHkoZXh0TmFtZXMpKSB7XG4gICAgICBsb2cuaW5mbyhgTm8gJHt0aGlzLmNvbmZpZ0tleX0gaGF2ZSBiZWVuIGluc3RhbGxlZC4gVXNlIHRoZSBcImFwcGl1bSAke3RoaXMuZXh0ZW5zaW9uVHlwZX1cIiBgICtcbiAgICAgICAgICAgICAgICdjb21tYW5kIHRvIGluc3RhbGwgdGhlIG9uZShzKSB5b3Ugd2FudCB0byB1c2UuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nLmluZm8oYEF2YWlsYWJsZSAke3RoaXMuY29uZmlnS2V5fTpgKTtcbiAgICBmb3IgKGNvbnN0IFtleHROYW1lLCBleHREYXRhXSBvZiBfLnRvUGFpcnModGhpcy5pbnN0YWxsZWRFeHRlbnNpb25zKSkge1xuICAgICAgbG9nLmluZm8oYCAgLSAke3RoaXMuZXh0ZW5zaW9uRGVzYyhleHROYW1lLCBleHREYXRhKX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBleHRlbnNpb24uIFN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lIC0gRXh0ZW5zaW9uIG5hbWVcbiAgICogQHBhcmFtIHtvYmplY3R9IGV4dERhdGEgLSBFeHRlbnNpb24gZGF0YVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAYWJzdHJhY3RcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBleHRlbnNpb25EZXNjIChleHROYW1lLCBleHREYXRhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIG11c3QgYmUgaW1wbGVtZW50ZWQgaW4gYSBzdWJjbGFzcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBnZXRFeHRlbnNpb25SZXF1aXJlUGF0aCAoZXh0TmFtZSkge1xuICAgIGNvbnN0IHtwa2dOYW1lLCBpbnN0YWxsUGF0aH0gPSB0aGlzLmluc3RhbGxlZEV4dGVuc2lvbnNbZXh0TmFtZV07XG4gICAgcmV0dXJuIHBhdGgucmVzb2x2ZSh0aGlzLmFwcGl1bUhvbWUsIGluc3RhbGxQYXRoLCAnbm9kZV9tb2R1bGVzJywgcGtnTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWVcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGdldEluc3RhbGxQYXRoIChleHROYW1lKSB7XG4gICAgY29uc3Qge2luc3RhbGxQYXRofSA9IHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9uc1tleHROYW1lXTtcbiAgICByZXR1cm4gcGF0aC5yZXNvbHZlKHRoaXMuYXBwaXVtSG9tZSwgaW5zdGFsbFBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGV4dGVuc2lvbiBhbmQgcmV0dXJucyBpdHMgbWFpbiBjbGFzc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZVxuICAgKiBAcmV0dXJucyB7KC4uLmFyZ3M6IGFueVtdKSA9PiBvYmplY3QgfVxuICAgKi9cbiAgcmVxdWlyZSAoZXh0TmFtZSkge1xuICAgIGNvbnN0IHttYWluQ2xhc3N9ID0gdGhpcy5pbnN0YWxsZWRFeHRlbnNpb25zW2V4dE5hbWVdO1xuICAgIGNvbnN0IHJlcVBhdGggPSB0aGlzLmdldEV4dGVuc2lvblJlcXVpcmVQYXRoKGV4dE5hbWUpO1xuICAgIGNvbnN0IHJlcVJlc29sdmVkID0gcmVxdWlyZS5yZXNvbHZlKHJlcVBhdGgpO1xuICAgIGlmIChwcm9jZXNzLmVudi5BUFBJVU1fUkVMT0FEX0VYVEVOU0lPTlMgJiYgcmVxdWlyZS5jYWNoZVtyZXFSZXNvbHZlZF0pIHtcbiAgICAgIGxvZy5kZWJ1ZyhgUmVtb3ZpbmcgJHtyZXFSZXNvbHZlZH0gZnJvbSByZXF1aXJlIGNhY2hlYCk7XG4gICAgICBkZWxldGUgcmVxdWlyZS5jYWNoZVtyZXFSZXNvbHZlZF07XG4gICAgfVxuICAgIHJldHVybiByZXF1aXJlKHJlcVBhdGgpW21haW5DbGFzc107XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0luc3RhbGxlZCAoZXh0TmFtZSkge1xuICAgIHJldHVybiBfLmluY2x1ZGVzKE9iamVjdC5rZXlzKHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9ucyksIGV4dE5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVuZGVkIHRvIGJlIGNhbGxlZCBieSBjb3JyZXNwb25kaW5nIGluc3RhbmNlIG1ldGhvZHMgb2Ygc3ViY2xhc3MuXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZSAtIEV4dGVuc2lvbiBuYW1lICh1bmlxdWUgdG8gaXRzIHR5cGUpXG4gICAqIEBwYXJhbSB7RXh0RGF0YX0gZXh0RGF0YSAtIEV4dGVuc2lvbiBjb25maWdcbiAgICogQHJldHVybnMge2ltcG9ydCgnYWp2JykuU2NoZW1hT2JqZWN0fHVuZGVmaW5lZH1cbiAgICovXG4gIHN0YXRpYyBfcmVhZEV4dGVuc2lvblNjaGVtYSAoYXBwaXVtSG9tZSwgZXh0VHlwZSwgZXh0TmFtZSwgZXh0RGF0YSkge1xuICAgIGNvbnN0IHtpbnN0YWxsUGF0aCwgcGtnTmFtZSwgc2NoZW1hOiBhcmdTY2hlbWFQYXRofSA9IGV4dERhdGE7XG4gICAgaWYgKCFhcmdTY2hlbWFQYXRoKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBgTm8gXFxgc2NoZW1hXFxgIHByb3BlcnR5IGZvdW5kIGluIGNvbmZpZyBmb3IgJHtleHRUeXBlfSAke3BrZ05hbWV9IC0tIHdoeSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZD9gLFxuICAgICAgKTtcbiAgICB9XG4gICAgbGV0IG1vZHVsZU9iamVjdDtcbiAgICBpZiAoXy5pc1N0cmluZyhhcmdTY2hlbWFQYXRoKSkge1xuICAgICAgY29uc3Qgc2NoZW1hUGF0aCA9IHJlc29sdmVGcm9tKFxuICAgICAgICBwYXRoLnJlc29sdmUoYXBwaXVtSG9tZSwgaW5zdGFsbFBhdGgpLFxuICAgICAgICAvLyB0aGlzIHBhdGggc2VwIGlzIGZpbmUgYmVjYXVzZSBgcmVzb2x2ZUZyb21gIHVzZXMgTm9kZSdzIG1vZHVsZSByZXNvbHV0aW9uXG4gICAgICAgIHBhdGgubm9ybWFsaXplKGAke3BrZ05hbWV9LyR7YXJnU2NoZW1hUGF0aH1gKSxcbiAgICAgICk7XG4gICAgICBtb2R1bGVPYmplY3QgPSByZXF1aXJlKHNjaGVtYVBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtb2R1bGVPYmplY3QgPSBhcmdTY2hlbWFQYXRoO1xuICAgIH1cbiAgICAvLyB0aGlzIHN1Y2tzLiBkZWZhdWx0IGV4cG9ydHMgc2hvdWxkIGJlIGRlc3Ryb3llZFxuICAgIGNvbnN0IHNjaGVtYSA9IG1vZHVsZU9iamVjdC5fX2VzTW9kdWxlXG4gICAgICA/IG1vZHVsZU9iamVjdC5kZWZhdWx0XG4gICAgICA6IG1vZHVsZU9iamVjdDtcbiAgICByZWdpc3RlclNjaGVtYShleHRUeXBlLCBleHROYW1lLCBzY2hlbWEpO1xuICAgIHJldHVybiBzY2hlbWE7XG4gIH1cblxuICAvKipcbiAgICogSWYgYW4gZXh0ZW5zaW9uIHByb3ZpZGVzIGEgc2NoZW1hLCB0aGlzIHdpbGwgbG9hZCB0aGUgc2NoZW1hIGFuZCBhdHRlbXB0IHRvXG4gICAqIHJlZ2lzdGVyIGl0IHdpdGggdGhlIHNjaGVtYSByZWdpc3RyYXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lIC0gTmFtZSBvZiBleHRlbnNpb25cbiAgICogQHBhcmFtIHtFeHREYXRhfSBleHREYXRhIC0gRXh0ZW5zaW9uIGRhdGFcbiAgICogQHJldHVybnMge2ltcG9ydCgnYWp2JykuU2NoZW1hT2JqZWN0fHVuZGVmaW5lZH1cbiAgICovXG4gIHJlYWRFeHRlbnNpb25TY2hlbWEgKGV4dE5hbWUsIGV4dERhdGEpIHtcbiAgICByZXR1cm4gRXh0ZW5zaW9uQ29uZmlnLl9yZWFkRXh0ZW5zaW9uU2NoZW1hKHRoaXMuYXBwaXVtSG9tZSwgdGhpcy5leHRlbnNpb25UeXBlLCBleHROYW1lLCBleHREYXRhKTtcbiAgfVxufVxuXG5leHBvcnQgeyBEUklWRVJfVFlQRSwgUExVR0lOX1RZUEUgfSBmcm9tICcuL2V4dC1jb25maWctaW8nO1xuZXhwb3J0IHtcbiAgSU5TVEFMTF9UWVBFX05QTSwgSU5TVEFMTF9UWVBFX0dJVCwgSU5TVEFMTF9UWVBFX0xPQ0FMLCBJTlNUQUxMX1RZUEVfR0lUSFVCLFxuICBJTlNUQUxMX1RZUEVTLCBERUZBVUxUX0FQUElVTV9IT01FLCBBUFBJVU1fSE9NRVxufTtcblxuLyoqXG4gKiBDb25maWcgcHJvYmxlbVxuICogQHR5cGVkZWYge09iamVjdH0gUHJvYmxlbVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGVyciAtIEVycm9yIG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7YW55fSB2YWwgLSBBc3NvY2lhdGVkIHZhbHVlXG4gKi9cblxuLyoqXG4gKiBBbGlhc1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi9leHQtY29uZmlnLWlvJykuRXh0ZW5zaW9uVHlwZX0gRXh0ZW5zaW9uVHlwZVxuICovXG5cbi8qKlxuICogRXh0ZW5zaW9uIGRhdGEgKHB1bGxlZCBmcm9tIGNvbmZpZyBZQU1MKVxuICogQHR5cGVkZWYge09iamVjdH0gRXh0RGF0YVxuICogQHByb3BlcnR5IHtzdHJpbmd8aW1wb3J0KCdhanYnKS5TY2hlbWFPYmplY3R9IFtzY2hlbWFdIC0gT3B0aW9uYWwgc2NoZW1hIHBhdGggaWYgdGhlIGV4dCBkZWZpbmVkIGl0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGtnTmFtZSAtIFBhY2thZ2UgbmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGluc3RhbGxQYXRoIC0gQWN0dWFsbHkgbG9va3MgbW9yZSBsaWtlIGEgbW9kdWxlIGlkZW50aWZpZXI/IFJlc29sdmVkIGZyb20gYEFQUElVTV9IT01FYFxuICovXG5cbiJdLCJmaWxlIjoibGliL2V4dGVuc2lvbi1jb25maWcuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
|
320
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9leHRlbnNpb24tY29uZmlnLmpzIl0sIm5hbWVzIjpbIkRFRkFVTFRfQVBQSVVNX0hPTUUiLCJwYXRoIiwicmVzb2x2ZSIsIm9zIiwiaG9tZWRpciIsIkFQUElVTV9IT01FIiwicHJvY2VzcyIsImVudiIsIklOU1RBTExfVFlQRV9OUE0iLCJJTlNUQUxMX1RZUEVfTE9DQUwiLCJJTlNUQUxMX1RZUEVfR0lUSFVCIiwiSU5TVEFMTF9UWVBFX0dJVCIsIklOU1RBTExfVFlQRVMiLCJFeHRlbnNpb25Db25maWciLCJjb25zdHJ1Y3RvciIsImFwcGl1bUhvbWUiLCJleHRlbnNpb25UeXBlIiwibG9nRm4iLCJsb2dnZXIiLCJfIiwiaXNGdW5jdGlvbiIsImxvZyIsImVycm9yIiwiYmluZCIsImluc3RhbGxlZEV4dGVuc2lvbnMiLCJpbyIsImNvbmZpZ0tleSIsInZhbGlkYXRlIiwiZXh0cyIsImZvdW5kUHJvYmxlbXMiLCJleHROYW1lIiwiZXh0RGF0YSIsInRvUGFpcnMiLCJnZXRHZW5lcmljQ29uZmlnUHJvYmxlbXMiLCJnZXRDb25maWdQcm9ibGVtcyIsImdldFNjaGVtYVByb2JsZW1zIiwicHJvYmxlbVN1bW1hcmllcyIsInByb2JsZW1zIiwiaXNFbXB0eSIsInB1c2giLCJwcm9ibGVtIiwiZXJyIiwiSlNPTiIsInN0cmluZ2lmeSIsInZhbCIsImZpbGVwYXRoIiwic3VtbWFyeSIsInNjaGVtYSIsImFyZ1NjaGVtYVBhdGgiLCJpc1N0cmluZyIsInJlYWRFeHRlbnNpb25TY2hlbWEiLCJtZXNzYWdlIiwiQUxMT1dFRF9TQ0hFTUFfRVhURU5TSU9OUyIsImpvaW4iLCJpc1BsYWluT2JqZWN0IiwidmVyc2lvbiIsInBrZ05hbWUiLCJpbnN0YWxsU3BlYyIsImluc3RhbGxUeXBlIiwiaW5zdGFsbFBhdGgiLCJtYWluQ2xhc3MiLCJpbmNsdWRlcyIsInJlYWQiLCJleHRlbnNpb25zIiwid3JpdGUiLCJhZGRFeHRlbnNpb24iLCJ1cGRhdGVFeHRlbnNpb24iLCJyZW1vdmVFeHRlbnNpb24iLCJwcmludCIsImV4dE5hbWVzIiwiT2JqZWN0Iiwia2V5cyIsImluZm8iLCJleHRlbnNpb25EZXNjIiwiRXJyb3IiLCJnZXRFeHRlbnNpb25SZXF1aXJlUGF0aCIsImdldEluc3RhbGxQYXRoIiwicmVxdWlyZSIsInJlcVBhdGgiLCJyZXFSZXNvbHZlZCIsIkFQUElVTV9SRUxPQURfRVhURU5TSU9OUyIsImNhY2hlIiwiZGVidWciLCJpc0luc3RhbGxlZCIsIl9yZWFkRXh0ZW5zaW9uU2NoZW1hIiwiZXh0VHlwZSIsIlR5cGVFcnJvciIsIm1vZHVsZU9iamVjdCIsInNjaGVtYVBhdGgiLCJub3JtYWxpemUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLG1CQUFtQixHQUFHQyxjQUFLQyxPQUFMLENBQWFDLFlBQUdDLE9BQUgsRUFBYixFQUEyQixTQUEzQixDQUE1Qjs7O0FBQ0EsTUFBTUMsV0FBVyxHQUFHQyxPQUFPLENBQUNDLEdBQVIsQ0FBWUYsV0FBWixJQUEyQkwsbUJBQS9DOztBQUVBLE1BQU1RLGdCQUFnQixHQUFHLEtBQXpCOztBQUNBLE1BQU1DLGtCQUFrQixHQUFHLE9BQTNCOztBQUNBLE1BQU1DLG1CQUFtQixHQUFHLFFBQTVCOztBQUNBLE1BQU1DLGdCQUFnQixHQUFHLEtBQXpCOztBQUNBLE1BQU1DLGFBQWEsR0FBRyxDQUNwQkQsZ0JBRG9CLEVBRXBCRCxtQkFGb0IsRUFHcEJELGtCQUhvQixFQUlwQkQsZ0JBSm9CLENBQXRCOzs7QUFPZSxNQUFNSyxlQUFOLENBQXNCO0FBT25DQyxFQUFBQSxXQUFXLENBQUVDLFVBQUYsRUFBY0MsYUFBZCxFQUE2QkMsS0FBN0IsRUFBb0M7QUFDN0MsVUFBTUMsTUFBTSxHQUFHQyxnQkFBRUMsVUFBRixDQUFhSCxLQUFiLElBQXNCQSxLQUF0QixHQUE4Qkks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RCxLQVBELE1BT087QUFDTEQsTUFBQUEsWUFBWSxHQUFHdkMsYUFBZjtBQUNEOztBQUVELFVBQU1ELE1BQU0sR0FBR3dDLFlBQVksQ0FBQ0csVUFBYixHQUNYSCxZQUFZLENBQUNJLE9BREYsR0FFWEosWUFGSjtBQUdBLGdDQUFlRixPQUFmLEVBQXdCdkQsT0FBeEIsRUFBaUNpQixNQUFqQztBQUNBLFdBQU9BLE1BQVA7QUFDRDs7QUFTREcsRUFBQUEsbUJBQW1CLENBQUVwQixPQUFGLEVBQVdDLE9BQVgsRUFBb0I7QUFDckMsV0FBT2xCLGVBQWUsQ0FBQ3VFLG9CQUFoQixDQUFxQyxLQUFLckUsVUFBMUMsRUFBc0QsS0FBS0MsYUFBM0QsRUFBMEVjLE9BQTFFLEVBQW1GQyxPQUFuRixDQUFQO0FBQ0Q7O0FBelRrQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHJlc29sdmVGcm9tIGZyb20gJ3Jlc29sdmUtZnJvbSc7XG5pbXBvcnQgeyBnZXRFeHRDb25maWdJT0luc3RhbmNlIH0gZnJvbSAnLi9leHQtY29uZmlnLWlvJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgQUxMT1dFRF9TQ0hFTUFfRVhURU5TSU9OUywgaXNBbGxvd2VkU2NoZW1hRmlsZUV4dGVuc2lvbiwgcmVnaXN0ZXJTY2hlbWEgfSBmcm9tICcuL3NjaGVtYS9zY2hlbWEnO1xuXG5jb25zdCBERUZBVUxUX0FQUElVTV9IT01FID0gcGF0aC5yZXNvbHZlKG9zLmhvbWVkaXIoKSwgJy5hcHBpdW0nKTtcbmNvbnN0IEFQUElVTV9IT01FID0gcHJvY2Vzcy5lbnYuQVBQSVVNX0hPTUUgfHwgREVGQVVMVF9BUFBJVU1fSE9NRTtcblxuY29uc3QgSU5TVEFMTF9UWVBFX05QTSA9ICducG0nO1xuY29uc3QgSU5TVEFMTF9UWVBFX0xPQ0FMID0gJ2xvY2FsJztcbmNvbnN0IElOU1RBTExfVFlQRV9HSVRIVUIgPSAnZ2l0aHViJztcbmNvbnN0IElOU1RBTExfVFlQRV9HSVQgPSAnZ2l0JztcbmNvbnN0IElOU1RBTExfVFlQRVMgPSBbXG4gIElOU1RBTExfVFlQRV9HSVQsXG4gIElOU1RBTExfVFlQRV9HSVRIVUIsXG4gIElOU1RBTExfVFlQRV9MT0NBTCxcbiAgSU5TVEFMTF9UWVBFX05QTVxuXTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXh0ZW5zaW9uQ29uZmlnIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lIC0gYEFQUElVTV9IT01FYFxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IGV4dGVuc2lvblR5cGUgLSBUeXBlIG9mIGV4dGVuc2lvblxuICAgKiBAcGFyYW0geyguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZH0gW2xvZ0ZuXVxuICAgKi9cbiAgY29uc3RydWN0b3IgKGFwcGl1bUhvbWUsIGV4dGVuc2lvblR5cGUsIGxvZ0ZuKSB7XG4gICAgY29uc3QgbG9nZ2VyID0gXy5pc0Z1bmN0aW9uKGxvZ0ZuKSA/IGxvZ0ZuIDogbG9nLmVycm9yLmJpbmQobG9nKTtcbiAgICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgICB0aGlzLmFwcGl1bUhvbWUgPSBhcHBpdW1Ib21lO1xuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxvYmplY3Q+fSAqL1xuICAgIHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9ucyA9IHt9O1xuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCcuL2V4dC1jb25maWctaW8nKS5FeHRlbnNpb25Db25maWdJT30gKi9cbiAgICB0aGlzLmlvID0gZ2V0RXh0Q29uZmlnSU9JbnN0YW5jZShhcHBpdW1Ib21lKTtcbiAgICAvKiogQHR5cGUge0V4dGVuc2lvblR5cGV9ICovXG4gICAgdGhpcy5leHRlbnNpb25UeXBlID0gZXh0ZW5zaW9uVHlwZTtcbiAgICAvKiogQHR5cGUgeydkcml2ZXJzJ3wncGx1Z2lucyd9ICovXG4gICAgdGhpcy5jb25maWdLZXkgPSBgJHtleHRlbnNpb25UeXBlfXNgOyAvLyB0b2RvIHVzZSB0ZW1wbGF0ZSB0eXBlXG4gICAgLyoqXG4gICAgICogQHR5cGUgeyguLi5hcmdzOiBhbnlbXSk9PnZvaWR9XG4gICAgICovXG4gICAgdGhpcy5sb2cgPSBsb2dnZXI7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGV4dGVuc2lvbnMgZm9yIHByb2JsZW1zXG4gICAqIEB0ZW1wbGF0ZSBFeHREYXRhXG4gICAqIEBwYXJhbSB7RXh0RGF0YVtdfSBleHRzIC0gQXJyYXkgb2YgZXh0RGF0YSBvYmplY3RzXG4gICAqIEByZXR1cm5zIHtFeHREYXRhW119XG4gICAqL1xuICB2YWxpZGF0ZSAoZXh0cykge1xuICAgIGNvbnN0IGZvdW5kUHJvYmxlbXMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtleHROYW1lLCBleHREYXRhXSBvZiBfLnRvUGFpcnMoZXh0cykpIHtcbiAgICAgIGZvdW5kUHJvYmxlbXNbZXh0TmFtZV0gPSBbXG4gICAgICAgIC4uLnRoaXMuZ2V0R2VuZXJpY0NvbmZpZ1Byb2JsZW1zKGV4dERhdGEsIGV4dE5hbWUpLFxuICAgICAgICAuLi50aGlzLmdldENvbmZpZ1Byb2JsZW1zKGV4dERhdGEsIGV4dE5hbWUpLFxuICAgICAgICAuLi50aGlzLmdldFNjaGVtYVByb2JsZW1zKGV4dERhdGEsIGV4dE5hbWUpXG4gICAgICBdO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2JsZW1TdW1tYXJpZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtleHROYW1lLCBwcm9ibGVtc10gb2YgXy50b1BhaXJzKGZvdW5kUHJvYmxlbXMpKSB7XG4gICAgICBpZiAoXy5pc0VtcHR5KHByb2JsZW1zKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIHJlbW92ZSB0aGlzIGV4dGVuc2lvbiBmcm9tIHRoZSBsaXN0IHNpbmNlIGl0J3Mgbm90IHZhbGlkXG4gICAgICBkZWxldGUgZXh0c1tleHROYW1lXTtcbiAgICAgIHByb2JsZW1TdW1tYXJpZXMucHVzaChgJHt0aGlzLmV4dGVuc2lvblR5cGV9ICR7ZXh0TmFtZX0gaGFkIGVycm9ycyBhbmQgd2lsbCBub3QgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYGJlIGF2YWlsYWJsZS4gRXJyb3JzOmApO1xuICAgICAgZm9yIChjb25zdCBwcm9ibGVtIG9mIHByb2JsZW1zKSB7XG4gICAgICAgIHByb2JsZW1TdW1tYXJpZXMucHVzaChgICAtICR7cHJvYmxlbS5lcnJ9IChBY3R1YWwgdmFsdWU6IGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7SlNPTi5zdHJpbmdpZnkocHJvYmxlbS52YWwpfSlgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIV8uaXNFbXB0eShwcm9ibGVtU3VtbWFyaWVzKSkge1xuICAgICAgdGhpcy5sb2coYEFwcGl1bSBlbmNvdW50ZXJlZCBvbmUgb3IgbW9yZSBlcnJvcnMgd2hpbGUgdmFsaWRhdGluZyBgICtcbiAgICAgICAgICAgICAgIGB0aGUgJHt0aGlzLmNvbmZpZ0tleX0gZXh0ZW5zaW9uIGZpbGUgKCR7dGhpcy5pby5maWxlcGF0aH0pOmApO1xuICAgICAgZm9yIChjb25zdCBzdW1tYXJ5IG9mIHByb2JsZW1TdW1tYXJpZXMpIHtcbiAgICAgICAgdGhpcy5sb2coc3VtbWFyeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dHM7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGV4dERhdGFcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWVcbiAgICogQHJldHVybnMge1Byb2JsZW1bXX1cbiAgICovXG4gIGdldFNjaGVtYVByb2JsZW1zIChleHREYXRhLCBleHROYW1lKSB7XG4gICAgY29uc3QgcHJvYmxlbXMgPSBbXTtcbiAgICBjb25zdCB7c2NoZW1hOiBhcmdTY2hlbWFQYXRofSA9IGV4dERhdGE7XG4gICAgaWYgKGFyZ1NjaGVtYVBhdGgpIHtcbiAgICAgIGlmIChfLmlzU3RyaW5nKGFyZ1NjaGVtYVBhdGgpKSB7XG4gICAgICAgIGlmIChpc0FsbG93ZWRTY2hlbWFGaWxlRXh0ZW5zaW9uKGFyZ1NjaGVtYVBhdGgpKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMucmVhZEV4dGVuc2lvblNjaGVtYShleHROYW1lLCBleHREYXRhKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHByb2JsZW1zLnB1c2goe2VycjogYFVuYWJsZSB0byByZWdpc3RlciBzY2hlbWEgYXQgcGF0aCAke2FyZ1NjaGVtYVBhdGh9OyAke2Vyci5tZXNzYWdlfWAsIHZhbDogYXJnU2NoZW1hUGF0aH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9ibGVtcy5wdXNoKHtcbiAgICAgICAgICAgIGVycjogYFNjaGVtYSBmaWxlIGhhcyB1bnN1cHBvcnRlZCBleHRlbnNpb24uIEFsbG93ZWQ6ICR7Wy4uLkFMTE9XRURfU0NIRU1BX0VYVEVOU0lPTlNdLmpvaW4oJywgJyl9YCxcbiAgICAgICAgICAgIHZhbDogYXJnU2NoZW1hUGF0aFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChhcmdTY2hlbWFQYXRoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMucmVhZEV4dGVuc2lvblNjaGVtYShleHROYW1lLCBleHREYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcHJvYmxlbXMucHVzaCh7ZXJyOiBgVW5hYmxlIHRvIHJlZ2lzdGVyIGVtYmVkZGVkIHNjaGVtYTsgJHtlcnIubWVzc2FnZX1gLCB2YWw6IGFyZ1NjaGVtYVBhdGh9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvYmxlbXMucHVzaCh7XG4gICAgICAgICAgZXJyOiAnSW5jb3JyZWN0bHkgZm9ybWF0dGVkIHNjaGVtYSBmaWVsZDsgbXVzdCBiZSBhIHBhdGggdG8gYSBzY2hlbWEgZmlsZSBvciBhIHNjaGVtYSBvYmplY3QuJyxcbiAgICAgICAgICB2YWw6IGFyZ1NjaGVtYVBhdGhcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9ibGVtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXh0RGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZVxuICAgKiBAcmV0dXJucyB7UHJvYmxlbVtdfVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGdldEdlbmVyaWNDb25maWdQcm9ibGVtcyAoZXh0RGF0YSwgZXh0TmFtZSkge1xuICAgIGNvbnN0IHt2ZXJzaW9uLCBwa2dOYW1lLCBpbnN0YWxsU3BlYywgaW5zdGFsbFR5cGUsIGluc3RhbGxQYXRoLCBtYWluQ2xhc3N9ID0gZXh0RGF0YTtcbiAgICBjb25zdCBwcm9ibGVtcyA9IFtdO1xuXG4gICAgaWYgKCFfLmlzU3RyaW5nKHZlcnNpb24pKSB7XG4gICAgICBwcm9ibGVtcy5wdXNoKHtlcnI6ICdNaXNzaW5nIG9yIGluY29ycmVjdCB2ZXJzaW9uJywgdmFsOiB2ZXJzaW9ufSk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzU3RyaW5nKHBrZ05hbWUpKSB7XG4gICAgICBwcm9ibGVtcy5wdXNoKHtlcnI6ICdNaXNzaW5nIG9yIGluY29ycmVjdCBOUE0gcGFja2FnZSBuYW1lJywgdmFsOiBwa2dOYW1lfSk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzU3RyaW5nKGluc3RhbGxTcGVjKSkge1xuICAgICAgcHJvYmxlbXMucHVzaCh7ZXJyOiAnTWlzc2luZyBvciBpbmNvcnJlY3QgaW5zdGFsbGF0aW9uIHNwZWMnLCB2YWw6IGluc3RhbGxTcGVjfSk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmluY2x1ZGVzKElOU1RBTExfVFlQRVMsIGluc3RhbGxUeXBlKSkge1xuICAgICAgcHJvYmxlbXMucHVzaCh7ZXJyOiAnTWlzc2luZyBvciBpbmNvcnJlY3QgaW5zdGFsbCB0eXBlJywgdmFsOiBpbnN0YWxsVHlwZX0pO1xuICAgIH1cblxuICAgIGlmICghXy5pc1N0cmluZyhpbnN0YWxsUGF0aCkpIHtcbiAgICAgIHByb2JsZW1zLnB1c2goe2VycjogJ01pc3Npbmcgb3IgaW5jb3JyZWN0IGluc3RhbGxhdGlvbiBwYXRoJywgdmFsOiBpbnN0YWxsUGF0aH0pO1xuICAgIH1cblxuICAgIGlmICghXy5pc1N0cmluZyhtYWluQ2xhc3MpKSB7XG4gICAgICBwcm9ibGVtcy5wdXNoKHtlcnI6ICdNaXNzaW5nIG9yIGluY29ycmVjdCBkcml2ZXIgY2xhc3MgbmFtZScsIHZhbDogbWFpbkNsYXNzfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2JsZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBleHREYXRhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lXG4gICAqIEByZXR1cm5zIHtQcm9ibGVtW119XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgZ2V0Q29uZmlnUHJvYmxlbXMgKGV4dERhdGEsIGV4dE5hbWUpIHtcbiAgICAvLyBzaG91ZCBvdmVycmlkZSB0aGlzIG1ldGhvZCBpZiBzcGVjaWFsIHZhbGlkYXRpb24gaXMgbmVjZXNzYXJ5IGZvciB0aGlzIGV4dGVuc2lvbiB0eXBlXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHR5cGVvZiB0aGlzLmluc3RhbGxlZEV4dGVuc2lvbnM+fVxuICAgKi9cbiAgYXN5bmMgcmVhZCAoKSB7XG4gICAgY29uc3QgZXh0ZW5zaW9ucyA9IGF3YWl0IHRoaXMuaW8ucmVhZCh0aGlzLmV4dGVuc2lvblR5cGUpO1xuICAgIHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9ucyA9IHRoaXMudmFsaWRhdGUoZXh0ZW5zaW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn1cbiAgICovXG4gIGFzeW5jIHdyaXRlICgpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5pby53cml0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBleHREYXRhXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgYWRkRXh0ZW5zaW9uIChleHROYW1lLCBleHREYXRhKSB7XG4gICAgdGhpcy5pbnN0YWxsZWRFeHRlbnNpb25zW2V4dE5hbWVdID0gZXh0RGF0YTtcbiAgICBhd2FpdCB0aGlzLndyaXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWVcbiAgICogQHBhcmFtIHtvYmplY3R9IGV4dERhdGFcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyB1cGRhdGVFeHRlbnNpb24gKGV4dE5hbWUsIGV4dERhdGEpIHtcbiAgICB0aGlzLmluc3RhbGxlZEV4dGVuc2lvbnNbZXh0TmFtZV0gPSB7XG4gICAgICAuLi50aGlzLmluc3RhbGxlZEV4dGVuc2lvbnNbZXh0TmFtZV0sXG4gICAgICAuLi5leHREYXRhLFxuICAgIH07XG4gICAgYXdhaXQgdGhpcy53cml0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgcmVtb3ZlRXh0ZW5zaW9uIChleHROYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9uc1tleHROYW1lXTtcbiAgICBhd2FpdCB0aGlzLndyaXRlKCk7XG4gIH1cblxuICBwcmludCAoKSB7XG4gICAgY29uc3QgZXh0TmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLmluc3RhbGxlZEV4dGVuc2lvbnMpO1xuICAgIGlmIChfLmlzRW1wdHkoZXh0TmFtZXMpKSB7XG4gICAgICBsb2cuaW5mbyhgTm8gJHt0aGlzLmNvbmZpZ0tleX0gaGF2ZSBiZWVuIGluc3RhbGxlZC4gVXNlIHRoZSBcImFwcGl1bSAke3RoaXMuZXh0ZW5zaW9uVHlwZX1cIiBgICtcbiAgICAgICAgICAgICAgICdjb21tYW5kIHRvIGluc3RhbGwgdGhlIG9uZShzKSB5b3Ugd2FudCB0byB1c2UuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nLmluZm8oYEF2YWlsYWJsZSAke3RoaXMuY29uZmlnS2V5fTpgKTtcbiAgICBmb3IgKGNvbnN0IFtleHROYW1lLCBleHREYXRhXSBvZiBfLnRvUGFpcnModGhpcy5pbnN0YWxsZWRFeHRlbnNpb25zKSkge1xuICAgICAgbG9nLmluZm8oYCAgLSAke3RoaXMuZXh0ZW5zaW9uRGVzYyhleHROYW1lLCBleHREYXRhKX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBleHRlbnNpb24uIFN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lIC0gRXh0ZW5zaW9uIG5hbWVcbiAgICogQHBhcmFtIHtvYmplY3R9IGV4dERhdGEgLSBFeHRlbnNpb24gZGF0YVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAYWJzdHJhY3RcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBleHRlbnNpb25EZXNjIChleHROYW1lLCBleHREYXRhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIG11c3QgYmUgaW1wbGVtZW50ZWQgaW4gYSBzdWJjbGFzcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBnZXRFeHRlbnNpb25SZXF1aXJlUGF0aCAoZXh0TmFtZSkge1xuICAgIGNvbnN0IHtwa2dOYW1lLCBpbnN0YWxsUGF0aH0gPSB0aGlzLmluc3RhbGxlZEV4dGVuc2lvbnNbZXh0TmFtZV07XG4gICAgcmV0dXJuIHBhdGgucmVzb2x2ZSh0aGlzLmFwcGl1bUhvbWUsIGluc3RhbGxQYXRoLCAnbm9kZV9tb2R1bGVzJywgcGtnTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWVcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGdldEluc3RhbGxQYXRoIChleHROYW1lKSB7XG4gICAgY29uc3Qge2luc3RhbGxQYXRofSA9IHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9uc1tleHROYW1lXTtcbiAgICByZXR1cm4gcGF0aC5yZXNvbHZlKHRoaXMuYXBwaXVtSG9tZSwgaW5zdGFsbFBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGV4dGVuc2lvbiBhbmQgcmV0dXJucyBpdHMgbWFpbiBjbGFzc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZVxuICAgKiBAcmV0dXJucyB7aW1wb3J0KCd0eXBlLWZlc3QnKS5DbGFzczx1bmtub3duPn1cbiAgICovXG4gIHJlcXVpcmUgKGV4dE5hbWUpIHtcbiAgICBjb25zdCB7bWFpbkNsYXNzfSA9IHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9uc1tleHROYW1lXTtcbiAgICBjb25zdCByZXFQYXRoID0gdGhpcy5nZXRFeHRlbnNpb25SZXF1aXJlUGF0aChleHROYW1lKTtcbiAgICBjb25zdCByZXFSZXNvbHZlZCA9IHJlcXVpcmUucmVzb2x2ZShyZXFQYXRoKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuQVBQSVVNX1JFTE9BRF9FWFRFTlNJT05TICYmIHJlcXVpcmUuY2FjaGVbcmVxUmVzb2x2ZWRdKSB7XG4gICAgICBsb2cuZGVidWcoYFJlbW92aW5nICR7cmVxUmVzb2x2ZWR9IGZyb20gcmVxdWlyZSBjYWNoZWApO1xuICAgICAgZGVsZXRlIHJlcXVpcmUuY2FjaGVbcmVxUmVzb2x2ZWRdO1xuICAgIH1cbiAgICByZXR1cm4gcmVxdWlyZShyZXFQYXRoKVttYWluQ2xhc3NdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNJbnN0YWxsZWQgKGV4dE5hbWUpIHtcbiAgICByZXR1cm4gXy5pbmNsdWRlcyhPYmplY3Qua2V5cyh0aGlzLmluc3RhbGxlZEV4dGVuc2lvbnMpLCBleHROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlbmRlZCB0byBiZSBjYWxsZWQgYnkgY29ycmVzcG9uZGluZyBpbnN0YW5jZSBtZXRob2RzIG9mIHN1YmNsYXNzLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBwaXVtSG9tZVxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IGV4dFR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBFeHRlbnNpb24gbmFtZSAodW5pcXVlIHRvIGl0cyB0eXBlKVxuICAgKiBAcGFyYW0ge0V4dERhdGF9IGV4dERhdGEgLSBFeHRlbnNpb24gY29uZmlnXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJ2FqdicpLlNjaGVtYU9iamVjdHx1bmRlZmluZWR9XG4gICAqL1xuICBzdGF0aWMgX3JlYWRFeHRlbnNpb25TY2hlbWEgKGFwcGl1bUhvbWUsIGV4dFR5cGUsIGV4dE5hbWUsIGV4dERhdGEpIHtcbiAgICBjb25zdCB7aW5zdGFsbFBhdGgsIHBrZ05hbWUsIHNjaGVtYTogYXJnU2NoZW1hUGF0aH0gPSBleHREYXRhO1xuICAgIGlmICghYXJnU2NoZW1hUGF0aCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgYE5vIFxcYHNjaGVtYVxcYCBwcm9wZXJ0eSBmb3VuZCBpbiBjb25maWcgZm9yICR7ZXh0VHlwZX0gJHtwa2dOYW1lfSAtLSB3aHkgaXMgdGhpcyBmdW5jdGlvbiBiZWluZyBjYWxsZWQ/YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGxldCBtb2R1bGVPYmplY3Q7XG4gICAgaWYgKF8uaXNTdHJpbmcoYXJnU2NoZW1hUGF0aCkpIHtcbiAgICAgIGNvbnN0IHNjaGVtYVBhdGggPSByZXNvbHZlRnJvbShcbiAgICAgICAgcGF0aC5yZXNvbHZlKGFwcGl1bUhvbWUsIGluc3RhbGxQYXRoKSxcbiAgICAgICAgLy8gdGhpcyBwYXRoIHNlcCBpcyBmaW5lIGJlY2F1c2UgYHJlc29sdmVGcm9tYCB1c2VzIE5vZGUncyBtb2R1bGUgcmVzb2x1dGlvblxuICAgICAgICBwYXRoLm5vcm1hbGl6ZShgJHtwa2dOYW1lfS8ke2FyZ1NjaGVtYVBhdGh9YCksXG4gICAgICApO1xuICAgICAgbW9kdWxlT2JqZWN0ID0gcmVxdWlyZShzY2hlbWFQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbW9kdWxlT2JqZWN0ID0gYXJnU2NoZW1hUGF0aDtcbiAgICB9XG4gICAgLy8gdGhpcyBzdWNrcy4gZGVmYXVsdCBleHBvcnRzIHNob3VsZCBiZSBkZXN0cm95ZWRcbiAgICBjb25zdCBzY2hlbWEgPSBtb2R1bGVPYmplY3QuX19lc01vZHVsZVxuICAgICAgPyBtb2R1bGVPYmplY3QuZGVmYXVsdFxuICAgICAgOiBtb2R1bGVPYmplY3Q7XG4gICAgcmVnaXN0ZXJTY2hlbWEoZXh0VHlwZSwgZXh0TmFtZSwgc2NoZW1hKTtcbiAgICByZXR1cm4gc2NoZW1hO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGFuIGV4dGVuc2lvbiBwcm92aWRlcyBhIHNjaGVtYSwgdGhpcyB3aWxsIGxvYWQgdGhlIHNjaGVtYSBhbmQgYXR0ZW1wdCB0b1xuICAgKiByZWdpc3RlciBpdCB3aXRoIHRoZSBzY2hlbWEgcmVnaXN0cmFyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZSAtIE5hbWUgb2YgZXh0ZW5zaW9uXG4gICAqIEBwYXJhbSB7RXh0RGF0YX0gZXh0RGF0YSAtIEV4dGVuc2lvbiBkYXRhXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJ2FqdicpLlNjaGVtYU9iamVjdHx1bmRlZmluZWR9XG4gICAqL1xuICByZWFkRXh0ZW5zaW9uU2NoZW1hIChleHROYW1lLCBleHREYXRhKSB7XG4gICAgcmV0dXJuIEV4dGVuc2lvbkNvbmZpZy5fcmVhZEV4dGVuc2lvblNjaGVtYSh0aGlzLmFwcGl1bUhvbWUsIHRoaXMuZXh0ZW5zaW9uVHlwZSwgZXh0TmFtZSwgZXh0RGF0YSk7XG4gIH1cbn1cblxuZXhwb3J0IHsgRFJJVkVSX1RZUEUsIFBMVUdJTl9UWVBFIH0gZnJvbSAnLi9leHQtY29uZmlnLWlvJztcbmV4cG9ydCB7XG4gIElOU1RBTExfVFlQRV9OUE0sIElOU1RBTExfVFlQRV9HSVQsIElOU1RBTExfVFlQRV9MT0NBTCwgSU5TVEFMTF9UWVBFX0dJVEhVQixcbiAgSU5TVEFMTF9UWVBFUywgREVGQVVMVF9BUFBJVU1fSE9NRSwgQVBQSVVNX0hPTUVcbn07XG5cbi8qKlxuICogQ29uZmlnIHByb2JsZW1cbiAqIEB0eXBlZGVmIHtPYmplY3R9IFByb2JsZW1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBlcnIgLSBFcnJvciBtZXNzYWdlXG4gKiBAcHJvcGVydHkge2FueX0gdmFsIC0gQXNzb2NpYXRlZCB2YWx1ZVxuICovXG5cbi8qKlxuICogQWxpYXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vZXh0LWNvbmZpZy1pbycpLkV4dGVuc2lvblR5cGV9IEV4dGVuc2lvblR5cGVcbiAqL1xuXG4vKipcbiAqIEV4dGVuc2lvbiBkYXRhIChwdWxsZWQgZnJvbSBjb25maWcgWUFNTClcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEV4dERhdGFcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfGltcG9ydCgnYWp2JykuU2NoZW1hT2JqZWN0fSBbc2NoZW1hXSAtIE9wdGlvbmFsIHNjaGVtYSBwYXRoIGlmIHRoZSBleHQgZGVmaW5lZCBpdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBrZ05hbWUgLSBQYWNrYWdlIG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpbnN0YWxsUGF0aCAtIEFjdHVhbGx5IGxvb2tzIG1vcmUgbGlrZSBhIG1vZHVsZSBpZGVudGlmaWVyPyBSZXNvbHZlZCBmcm9tIGBBUFBJVU1fSE9NRWBcbiAqL1xuXG4iXSwiZmlsZSI6ImxpYi9leHRlbnNpb24tY29uZmlnLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|