appium 2.0.0-beta.23 → 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/lib/appium.js +19 -7
- package/build/lib/cli/args.js +13 -15
- package/build/lib/cli/parser.js +2 -2
- package/build/lib/config.js +31 -24
- package/build/lib/extension-config.js +1 -1
- package/build/lib/main.js +29 -28
- package/build/lib/plugins.js +4 -2
- package/build/lib/schema/arg-spec.js +5 -3
- package/build/lib/schema/cli-args.js +7 -13
- package/build/lib/schema/schema.js +80 -9
- package/build/lib/utils.js +16 -36
- package/build/test/cli/cli-helpers.js +1 -1
- package/build/test/config-specs.js +122 -35
- package/build/test/driver-specs.js +96 -31
- package/build/test/fixtures/flattened-schema.js +31 -3
- package/build/test/parser-specs.js +69 -64
- package/build/test/schema/cli-args-specs.js +4 -27
- package/build/test/schema/schema-specs.js +56 -38
- package/build/test/utils-specs.js +24 -2
- package/lib/appium.js +45 -8
- package/lib/cli/args.js +17 -14
- package/lib/cli/parser.js +1 -1
- package/lib/config.js +75 -31
- package/lib/extension-config.js +1 -1
- package/lib/main.js +87 -37
- package/lib/plugins.js +2 -0
- package/lib/schema/arg-spec.js +8 -2
- package/lib/schema/cli-args.js +6 -30
- package/lib/schema/schema.js +142 -22
- package/lib/utils.js +28 -29
- package/package.json +4 -4
- package/types/types.d.ts +5 -0
package/build/lib/plugins.js
CHANGED
|
@@ -8,9 +8,11 @@ exports.KNOWN_PLUGINS = void 0;
|
|
|
8
8
|
require("source-map-support/register");
|
|
9
9
|
|
|
10
10
|
const KNOWN_PLUGINS = {
|
|
11
|
-
images: '@appium/images-plugin'
|
|
11
|
+
images: '@appium/images-plugin',
|
|
12
|
+
'execute-driver': '@appium/execute-driver-plugin',
|
|
13
|
+
'relaxed-caps': '@appium/relaxed-caps-plugin'
|
|
12
14
|
};
|
|
13
15
|
exports.KNOWN_PLUGINS = KNOWN_PLUGINS;require('source-map-support').install();
|
|
14
16
|
|
|
15
17
|
|
|
16
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9wbHVnaW5zLmpzIl0sIm5hbWVzIjpbIktOT1dOX1BMVUdJTlMiLCJpbWFnZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUlBLE1BQU1BLGFBQWEsR0FBRztBQUNwQkMsRUFBQUEsTUFBTSxFQUFFLHVCQURZO0FBRXBCLG9CQUFrQiwrQkFGRTtBQUdwQixrQkFBZ0I7QUFISSxDQUF0QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgaXMgYSBtYXAgb2YgcGx1Z2luIG5hbWVzIHRvIG5wbSBwYWNrYWdlcyByZXByZXNlbnRpbmcgdGhvc2UgcGx1Z2lucy5cbi8vIFRoZSBwbHVnaW5zIGluIHRoaXMgbGlzdCB3aWxsIGJlIGF2YWlsYWJsZSB0byB0aGUgQ0xJIHNvIHVzZXJzIGNhbiBqdXN0XG4vLyB0eXBlICdhcHBpdW0gcGx1Z2luIGluc3RhbGwgJ25hbWUnJywgcmF0aGVyIHRoYW4gaGF2aW5nIHRvIHNwZWNpZnkgdGhlIGZ1bGxcbi8vIG5wbSBwYWNrYWdlLiBJLmUuLCB0aGVzZSBhcmUgdGhlIG9mZmljaWFsbHkgcmVjb2duaXplZCBwbHVnaW5zLlxuY29uc3QgS05PV05fUExVR0lOUyA9IHtcbiAgaW1hZ2VzOiAnQGFwcGl1bS9pbWFnZXMtcGx1Z2luJyxcbiAgJ2V4ZWN1dGUtZHJpdmVyJzogJ0BhcHBpdW0vZXhlY3V0ZS1kcml2ZXItcGx1Z2luJyxcbiAgJ3JlbGF4ZWQtY2Fwcyc6ICdAYXBwaXVtL3JlbGF4ZWQtY2Fwcy1wbHVnaW4nLFxufTtcblxuZXhwb3J0IHtcbiAgS05PV05fUExVR0lOUyxcbn07XG4iXSwiZmlsZSI6ImxpYi9wbHVnaW5zLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
@@ -33,13 +33,14 @@ class ArgSpec {
|
|
|
33
33
|
(0, _defineProperty2.default)(this, "ref", void 0);
|
|
34
34
|
(0, _defineProperty2.default)(this, "arg", void 0);
|
|
35
35
|
(0, _defineProperty2.default)(this, "dest", void 0);
|
|
36
|
+
(0, _defineProperty2.default)(this, "rawDest", void 0);
|
|
36
37
|
(0, _defineProperty2.default)(this, "defaultValue", void 0);
|
|
37
38
|
const arg = ArgSpec.toArg(name, extType, extName);
|
|
38
39
|
const ref = ArgSpec.toSchemaRef(name, extType, extName);
|
|
39
40
|
|
|
40
|
-
const
|
|
41
|
+
const rawDest = _lodash.default.camelCase(dest !== null && dest !== void 0 ? dest : name);
|
|
41
42
|
|
|
42
|
-
const destKeypath = extType && extName ? [extType, extName,
|
|
43
|
+
const destKeypath = extType && extName ? [extType, extName, rawDest].join('.') : rawDest;
|
|
43
44
|
this.defaultValue = defaultValue;
|
|
44
45
|
this.name = name;
|
|
45
46
|
this.extType = extType;
|
|
@@ -47,6 +48,7 @@ class ArgSpec {
|
|
|
47
48
|
this.arg = arg;
|
|
48
49
|
this.dest = destKeypath;
|
|
49
50
|
this.ref = ref;
|
|
51
|
+
this.rawDest = rawDest;
|
|
50
52
|
}
|
|
51
53
|
|
|
52
54
|
static toSchemaRef(name, extType, extName) {
|
|
@@ -117,4 +119,4 @@ class ArgSpec {
|
|
|
117
119
|
exports.ArgSpec = ArgSpec;require('source-map-support').install();
|
|
118
120
|
|
|
119
121
|
|
|
120
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zY2hlbWEvYXJnLXNwZWMuanMiXSwibmFtZXMiOlsiQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQiLCJTRVJWRVJfUFJPUF9OQU1FIiwiU0NIRU1BX0lEX1JFR0VYUCIsIlBST1BFUlRJRVMiLCJBcmdTcGVjIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZXh0VHlwZSIsImV4dE5hbWUiLCJkZXN0IiwiZGVmYXVsdFZhbHVlIiwiYXJnIiwidG9BcmciLCJyZWYiLCJ0b1NjaGVtYVJlZiIsImJhc2VEZXN0IiwiXyIsImNhbWVsQ2FzZSIsImRlc3RLZXlwYXRoIiwiam9pbiIsImJhc2VSZWYiLCJ0b1NjaGVtYUJhc2VSZWYiLCJ0b05vcm1hbGl6ZWRFeHROYW1lIiwicHJvcGVyTmFtZSIsImtlYmFiQ2FzZSIsInJlcGxhY2UiLCJleHRlbnNpb25JbmZvRnJvbVJvb3RTY2hlbWFJZCIsInNjaGVtYUlkIiwibWF0Y2hlcyIsIm1hdGNoIiwiZ3JvdXBzIiwibm9ybWFsaXplZEV4dE5hbWUiLCJjcmVhdGUiLCJvcHRzIiwiT2JqZWN0IiwiZnJlZXplIiwidG9TdHJpbmciLCJzdHIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFNTyxNQUFNQSx1QkFBdUIsR0FBRyxhQUFoQzs7QUFPQSxNQUFNQyxnQkFBZ0IsR0FBRyxRQUF6Qjs7QUFLUCxNQUFNQyxnQkFBZ0IsR0FBRyxrREFBekI7QUFLQSxNQUFNQyxVQUFVLEdBQUcsWUFBbkI7O0FBUU8sTUFBTUMsT0FBTixDQUFjO0FBOERuQkMsRUFBQUEsV0FBVyxDQUFFQyxJQUFGLEVBQVE7QUFBQ0MsSUFBQUEsT0FBRDtBQUFVQyxJQUFBQSxPQUFWO0FBQW1CQyxJQUFBQSxJQUFuQjtBQUF5QkMsSUFBQUE7QUFBekIsTUFBeUMsRUFBakQsRUFBcUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUc5RCxVQUFNQyxHQUFHLEdBQUdQLE9BQU8sQ0FBQ1EsS0FBUixDQUFjTixJQUFkLEVB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QUYsRUFBUTJCLElBQVIsRUFBYztBQUN6QixXQUFPQyxNQUFNLENBQUNDLE1BQVAsQ0FBYyxJQUFJL0IsT0FBSixDQUFZRSxJQUFaLEVBQWtCMkIsSUFBbEIsQ0FBZCxDQUFQO0FBQ0Q7O0FBT0RHLEVBQUFBLFFBQVEsR0FBSTtBQUNWLFFBQUlDLEdBQUcsR0FBSSxhQUFZLEtBQUsvQixJQUFLLEtBQUksS0FBS08sR0FBSSxHQUE5Qzs7QUFDQSxRQUFJLEtBQUtOLE9BQUwsSUFBZ0IsS0FBS0MsT0FBekIsRUFBa0M7QUFDaEM2QixNQUFBQSxHQUFHLElBQUssVUFBUyxLQUFLOUIsT0FBUSxJQUFHLEtBQUtDLE9BQVEsR0FBOUM7QUFDRDs7QUFDRCxXQUFPNkIsR0FBUDtBQUNEOztBQS9La0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG4vKipcbiAqIFRoZSBvcmlnaW5hbCBJRCBvZiB0aGUgQXBwaXVtIGNvbmZpZyBzY2hlbWEuXG4gKiBXZSB1c2UgdGhpcyBpbiB0aGUgQ0xJIHRvIGNvbnZlcnQgaXQgdG8gYGFyZ3BhcnNlYCBvcHRpb25zLlxuICovXG5leHBvcnQgY29uc3QgQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQgPSAnYXBwaXVtLmpzb24nO1xuXG4vKipcbiAqIFRoZSBzY2hlbWEgcHJvcCBjb250YWluaW5nIHNlcnZlci1yZWxhdGVkIG9wdGlvbnMuIEV2ZXJ5dGhpbmcgaW4gaGVyZVxuICogaXMgXCJuYXRpdmVcIiB0byBBcHBpdW0uXG4gKiBVc2VkIGJ5IHtAbGluayBmbGF0dGVuU2NoZW1hfSBmb3IgdHJhbnNmb3JtaW5nIHRoZSBzY2hlbWEgaW50byBDTEkgYXJncy5cbiAqL1xuZXhwb3J0IGNvbnN0IFNFUlZFUl9QUk9QX05BTUUgPSAnc2VydmVyJztcblxuLyoqXG4gKiBVc2VkIHRvIHBhcnNlIGV4dGVuc2lvbiBpbmZvIGZyb20gYSBzY2hlbWEgSUQuXG4gKi9cbmNvbnN0IFNDSEVNQV9JRF9SRUdFWFAgPSAvXig/PGV4dFR5cGU+Lis/KS0oPzxub3JtYWxpemVkRXh0TmFtZT4uKylcXC5qc29uJC87XG5cbi8qKlxuICogQXZvaWQgdHlwb3MgYnkgdXNpbmcgY29uc3RhbnRzIVxuICovXG5jb25zdCBQUk9QRVJUSUVTID0gJ3Byb3BlcnRpZXMnO1xuXG4vKipcbiAqIEFuIGBBcmdTcGVjYCBpcyBhIGNsYXNzIHJlcHJlc2VudGluZyBtZXRhZGF0YSBhYm91dCBhbiBhcmd1bWVudCAob3IgY29uZmlnXG4gKiBvcHRpb24pIHVzZWQgZm9yIGNyb3NzLXJlZmVyZW5jaW5nLlxuICpcbiAqIFRoaXMgY2xhc3MgaGFzIG5vIGluc3RhbmNlIG1ldGhvZHMsIGFuZCBpcyBiYXNpY2FsbHkganVzdCBhIHJlYWQtb25seSBcInN0cnVjdFwiLlxuICovXG5leHBvcnQgY2xhc3MgQXJnU3BlYyB7XG4gIC8qKlxuICAgKiBUaGUgY2Fub25pY2FsIG5hbWUgb2YgdGhlIGFyZ3VtZW50LiBDb3JyZXNwb25kcyB0byBrZXkgaW4gc2NoZW1hJ3MgYHByb3BlcnRpZXNgIHByb3AuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBuYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgYEV4dGVuc2lvblR5cGVgIG9mIHRoZSBhcmd1bWVudC4gVGhpcyB3aWxsIGJlIHNldCBpZiB0aGUgYXJnIGNhbWUgZnJvbSBhbiBleHRlbnNpb247XG4gICAqIG90aGVyd2lzZSBpdCB3aWxsIGJlIGB1bmRlZmluZWRgLlxuICAgKiBAdHlwZSB7RXh0ZW5zaW9uVHlwZXx1bmRlZmluZWR9XG4gICAqL1xuICBleHRUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uLCBpZiB0aGlzIGFyZ3VtZW50IGNhbWUgZnJvbSBhbiBleHRlbnNpb24uXG4gICAqXG4gICAqIE90aGVyd2lzZSBgdW5kZWZpbmVkYC5cbiAgICogQHR5cGUge3N0cmluZ3x1bmRlZmluZWR9XG4gICAqL1xuICBleHROYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgc2NoZW1hIElEIChgJGlkYCkgZm9yIHRoZSBhcmd1bWVudC4gIFRoaXMgaXMgYXV0b21hdGljYWxseSBkZXRlcm1pbmVkLCBhbmQgYW55IHVzZXItcHJvdmlkZWQgYCRpZGBzIHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICByZWY7XG5cbiAgLyoqXG4gICAqIFRoZSBDTEkgYXJndW1lbnQsIHNhbnMgbGVhZGluZyBkYXNoZXMuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBhcmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNpcmVkIGtleXBhdGggZm9yIHRoZSBhcmd1bWVudCBhZnRlciBhcmd1bWVudHMgaGF2ZSBiZWVuIHBhcnNlZC5cbiAgICpcbiAgICogVHlwaWNhbGx5IHRoaXMgaXMgY2FtZWxDYXNlZC4gIElmIHRoZSBhcmcgY2FtZSBmcm9tIGFuIGV4dGVuc2lvbiwgaXQgd2lsbCBiZSBwcmVmaXhlZCB3aXRoXG4gICAqIGA8ZXh0VHlwZT4uPGV4dE5hbWU+LmBcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGRlc3Q7XG5cbiAgLyoqXG4gICAqIFdoYXRldmVyIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgYXJndW1lbnQgaXMsIGFzIHNwZWNpZmllZCBieSB0aGVcbiAgICogYGRlZmF1bHRgIHByb3BlcnR5IG9mIHRoZSBzY2hlbWEuXG4gICAqIEB0eXBlIHtEfVxuICAgKi9cbiAgZGVmYXVsdFZhbHVlO1xuXG4gIC8qKlxuICAgKiBCdWlsZHMgc29tZSBjb21wdXRlZCBmaWVsZHMgYW5kIGFzc2lnbnMgdGhlbSB0byB0aGUgaW5zdGFuY2UuXG4gICAqXG4gICAqIFVuZGVmaW5lZCBwcm9wZXJ0aWVzIGFyZSBub3QgYXNzaWduZWQuXG4gICAqXG4gICAqIFRoZSBfY29uc3RydWN0b3JfIGlzIHByaXZhdGUuIFVzZSB7QGxpbmsgQXJnU3BlYy5jcmVhdGV9IGluc3RlYWQuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0ZW1wbGF0ZSBEXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7QXJnU3BlY09wdGlvbnM8RD59IFtvcHRzXVxuICAgKi9cbiAgY29uc3RydWN0b3IgKG5hbWUsIHtleHRUeXBlLCBleHROYW1lLCBkZXN0LCBkZWZhdWx0VmFsdWV9ID0ge30pIHtcbiAgICAvLyB3ZSBtdXN0IG5vcm1hbGl6ZSB0aGUgZXh0ZW5zaW9uIG5hbWUgdG8gZml0IGludG8gb3VyIGNvbnZlbnRpb24gZm9yIENMSVxuICAgIC8vIGFyZ3MuXG4gICAgY29uc3QgYXJnID0gQXJnU3BlYy50b0FyZyhuYW1lLCBleHRUeXBlLCBleHROYW1lKTtcblxuICAgIGNvbnN0IHJlZiA9IEFyZ1NwZWMudG9TY2hlbWFSZWYobmFtZSwgZXh0VHlwZSwgZXh0TmFtZSk7XG5cbiAgICAvLyBpZiBubyBleHBsaWNpdCBgZGVzdGAgcHJvdmlkZWQsIGp1c3QgY2FtZWxDYXNlIHRoZSBuYW1lIHRvIGF2b2lkIG5lZWRpbmdcbiAgICAvLyB0byB1c2UgYnJhY2tldCBzeW50YXggd2hlbiBhY2Nlc3NpbmcgcHJvcHMgb24gdGhlIHBhcnNlZCBhcmdzIG9iamVjdC5cbiAgICBjb25zdCBiYXNlRGVzdCA9IF8uY2FtZWxDYXNlKGRlc3QgPz8gbmFtZSk7XG5cbiAgICBjb25zdCBkZXN0S2V5cGF0aCA9XG4gICAgICBleHRUeXBlICYmIGV4dE5hbWUgPyBbZXh0VHlwZSwgZXh0TmFtZSwgYmFzZURlc3RdLmpvaW4oJy4nKSA6IGJhc2VEZXN0O1xuXG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmV4dFR5cGUgPSBleHRUeXBlO1xuICAgIHRoaXMuZXh0TmFtZSA9IGV4dE5hbWU7XG4gICAgdGhpcy5hcmcgPSBhcmc7XG4gICAgdGhpcy5kZXN0ID0gZGVzdEtleXBhdGg7XG4gICAgdGhpcy5yZWYgPSByZWY7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBzY2hlbWEgSUQgKGAkaWRgKSBmb3IgdGhlICoqYXJndW1lbnQqKiBnaXZlbiB0aGUgcGFyYW1ldGVycy5cbiAgICpcbiAgICogSWYgeW91IG5lZWQgdGhlIFwicm9vdFwiIG9yIFwiYmFzZVwiIHNjaGVtYSBJRCwgdXNlIHtAbGluayBBcmdTcGVjLnRvU2NoZW1hQmFzZVJlZn0gaW5zdGVhZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBBcmd1bWVudCBuYW1lXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gW2V4dFR5cGVdIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHROYW1lXSAtIEV4dGVuc2lvbiBuYW1lXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFNjaGVtYSBJRFxuICAgKi9cbiAgc3RhdGljIHRvU2NoZW1hUmVmIChuYW1lLCBleHRUeXBlLCBleHROYW1lKSB7XG4gICAgY29uc3QgYmFzZVJlZiA9IEFyZ1NwZWMudG9TY2hlbWFCYXNlUmVmKGV4dFR5cGUsIGV4dE5hbWUpO1xuICAgIGlmIChleHRUeXBlICYmIGV4dE5hbWUpIHtcbiAgICAgIHJldHVybiBbYCR7YmFzZVJlZn0jYCwgUFJPUEVSVElFUywgbmFtZV0uam9pbignLycpO1xuICAgIH1cbiAgICByZXR1cm4gW2Ake2Jhc2VSZWZ9I2AsIFBST1BFUlRJRVMsIFNFUlZFUl9QUk9QX05BTUUsIFBST1BFUlRJRVMsIG5hbWVdLmpvaW4oJy8nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHNjaGVtYSBJRCBmb3IgYW4gZXh0ZW5zaW9uIG9yIHRoZSBiYXNlIHNjaGVtYSBJRC5cbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBbZXh0VHlwZV0gLSBFeHRlbnNpb24gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4dE5hbWVdIC0gRXh0ZW5zaW9uIG5hbWVcbiAgICovXG4gIHN0YXRpYyB0b1NjaGVtYUJhc2VSZWYgKGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICBpZiAoZXh0VHlwZSAmJiBleHROYW1lKSB7XG4gICAgICByZXR1cm4gYCR7ZXh0VHlwZX0tJHtBcmdTcGVjLnRvTm9ybWFsaXplZEV4dE5hbWUoZXh0TmFtZSl9Lmpzb25gO1xuICAgIH1cbiAgICByZXR1cm4gQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSB1bmlxdWUgSUQgZm9yIHRoZSBhcmd1bWVudCBnaXZlbiB0aGUgcGFyYW1ldGVycy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBBcmd1bWVudCBuYW1lXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gW2V4dFR5cGVdIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHROYW1lXSAtIEV4dGVuc2lvbiBuYW1lXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFVuaXF1ZSBJRFxuICAgKi9cbiAgc3RhdGljIHRvQXJnIChuYW1lLCBleHRUeXBlLCBleHROYW1lKSB7XG4gICAgY29uc3QgcHJvcGVyTmFtZSA9IF8ua2ViYWJDYXNlKG5hbWUucmVwbGFjZSgvXi0tPy8sICcnKSk7XG4gICAgaWYgKGV4dFR5cGUgJiYgZXh0TmFtZSkge1xuICAgICAgcmV0dXJuIFtleHRUeXBlLCBfLmtlYmFiQ2FzZShleHROYW1lKSwgcHJvcGVyTmFtZV0uam9pbignLScpO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcGVyTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemVzIGEgcmF3IGV4dGVuc2lvbiBuYW1lIChub3QgaW5jbHVkaW5nIHRoZSB0eXBlKS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBFeHRlbnNpb24gbmFtZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBOb3JtYWxpemVkIGV4dGVuc2lvbiBuYW1lXG4gICAqL1xuICBzdGF0aWMgdG9Ob3JtYWxpemVkRXh0TmFtZSAoZXh0TmFtZSkge1xuICAgIHJldHVybiBfLmtlYmFiQ2FzZShleHROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIGdpdmVuIHRoZSByb290IElEIG9mIGEgc2NoZW1hIGZvciBhbiBleHRlbnNpb24gKGA8ZXh0VHlwZT4tPG5vcm1hbGl6ZWRFeHROYW1lPi5qc29uYCkgUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgZXh0ZW5zaW9uIHR5cGUgYW5kIHRoZSBfbm9ybWFsaXplZF8gZXh0ZW5zaW9uIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY2hlbWFJZCAtIFJvb3Qgc2NoZW1hIElEXG4gICAqIEByZXR1cm5zIHt7ZXh0VHlwZTogRXh0ZW5zaW9uVHlwZXx1bmRlZmluZWQsIG5vcm1hbGl6ZWRFeHROYW1lOiBzdHJpbmd8dW5kZWZpbmVkfX1cbiAgICovXG4gIHN0YXRpYyBleHRlbnNpb25JbmZvRnJvbVJvb3RTY2hlbWFJZCAoc2NoZW1hSWQpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gc2NoZW1hSWQubWF0Y2goU0NIRU1BX0lEX1JFR0VYUCk7XG4gICAgaWYgKG1hdGNoZXM/Lmdyb3Vwcykge1xuICAgICAgY29uc3Qge2V4dFR5cGUsIG5vcm1hbGl6ZWRFeHROYW1lfSA9IG1hdGNoZXMuZ3JvdXBzO1xuICAgICAgcmV0dXJuIHtleHRUeXBlLCBub3JtYWxpemVkRXh0TmFtZX07XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGBBcmdTcGVjYFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBjYW5vbmljYWwgbmFtZSBvZiB0aGUgYXJndW1lbnQuIENvcnJlc3BvbmRzIHRvIGEga2V5IGluIGEgc2NoZW1hJ3NcbiAgICogYHByb3BlcnRpZXNgIHByb3BlcnR5LlxuICAgKiBAcGFyYW0ge0FyZ1NwZWNPcHRpb25zfSBbb3B0c10gLSBPcHRpb25zXG4gICAqIEByZXR1cm5zIHtSZWFkb25seTxBcmdTcGVjPn1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGUgKG5hbWUsIG9wdHMpIHtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShuZXcgQXJnU3BlYyhuYW1lLCBvcHRzKSk7XG4gIH1cblxuICAvKipcbiAgICogU3RyaW5nIHJlcHJlc2VudGF0aW9uLCB1c2VmdWwgZm9yIGRlYnVnZ2luZ1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgdG9TdHJpbmcgKCkge1xuICAgIGxldCBzdHIgPSBgW0FyZ1NwZWNdICR7dGhpcy5uYW1lfSAoJHt0aGlzLnJlZn0pYDtcbiAgICBpZiAodGhpcy5leHRUeXBlICYmIHRoaXMuZXh0TmFtZSkge1xuICAgICAgc3RyICs9IGAgKGV4dDogJHt0aGlzLmV4dFR5cGV9LyR7dGhpcy5leHROYW1lfSlgO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xuICB9XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIEFyZ1NwZWMuY3JlYXRlfVxuICogQHRlbXBsYXRlIERcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFyZ1NwZWNPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2V4dE5hbWVdXG4gKiBAcHJvcGVydHkge0V4dGVuc2lvblR5cGV9IFtleHRUeXBlXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkZXN0XVxuICogQHByb3BlcnR5IHtEfSBbZGVmYXVsdFZhbHVlXVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vZXh0LWNvbmZpZy1pbycpLkV4dGVuc2lvblR5cGV9IEV4dGVuc2lvblR5cGVcbiAqL1xuIl0sImZpbGUiOiJsaWIvc2NoZW1hL2FyZy1zcGVjLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
122
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zY2hlbWEvYXJnLXNwZWMuanMiXSwibmFtZXMiOlsiQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQiLCJTRVJWRVJfUFJPUF9OQU1FIiwiU0NIRU1BX0lEX1JFR0VYUCIsIlBST1BFUlRJRVMiLCJBcmdTcGVjIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZXh0VHlwZSIsImV4dE5hbWUiLCJkZXN0IiwiZGVmYXVsdFZhbHVlIiwiYXJnIiwidG9BcmciLCJyZWYiLCJ0b1NjaGVtYVJlZiIsInJhd0Rlc3QiLCJfIiwiY2FtZWxDYXNlIiwiZGVzdEtleXBhdGgiLCJqb2luIiwiYmFzZVJlZiIsInRvU2NoZW1hQmFzZVJlZiIsInRvTm9ybWFsaXplZEV4dE5hbWUiLCJwcm9wZXJOYW1lIiwia2ViYWJDYXNlIiwicmVwbGFjZSIsImV4dGVuc2lvbkluZm9Gcm9tUm9vdFNjaGVtYUlkIiwic2NoZW1hSWQiLCJtYXRjaGVzIiwibWF0Y2giLCJncm91cHMiLCJub3JtYWxpemVkRXh0TmFtZSIsImNyZWF0ZSIsIm9wdHMiLCJPYmplY3QiLCJmcmVlemUiLCJ0b1N0cmluZyIsInN0ciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQU1PLE1BQU1BLHVCQUF1QixHQUFHLGFBQWhDOztBQU9BLE1BQU1DLGdCQUFnQixHQUFHLFFBQXpCOztBQUtQLE1BQU1DLGdCQUFnQixHQUFHLGtEQUF6QjtBQUtBLE1BQU1DLFVBQVUsR0FBRyxZQUFuQjs7QUFRTyxNQUFNQyxPQUFOLENBQWM7QUFtRW5CQyxFQUFBQSxXQUFXLENBQUVDLElBQUYsRUFBUTtBQUFDQyxJQUFBQSxPQUFEO0FBQVVDLElBQUFBLE9BQVY7QUFBbUJDLElBQUFBLElBQW5CO0FBQXlCQyxJQUFBQTtBQUF6QixNQUF5QyxFQUFqRCxFQUFxRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHOUQsVUFBTUMsR0FBRyxHQUFHUCxPQUFPLENBQUNRLEtBQVIsQ0FBY04sSUFB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QUFDRDs7QUFVWSxTQUFOQyxNQUFNLENBQUUxQixJQUFGLEVBQVEyQixJQUFSLEVBQWM7QUFDekIsV0FBT0MsTUFBTSxDQUFDQyxNQUFQLENBQWMsSUFBSS9CLE9BQUosQ0FBWUUsSUFBWixFQUFrQjJCLElBQWxCLENBQWQsQ0FBUDtBQUNEOztBQU9ERyxFQUFBQSxRQUFRLEdBQUk7QUFDVixRQUFJQyxHQUFHLEdBQUksYUFBWSxLQUFLL0IsSUFBSyxLQUFJLEtBQUtPLEdBQUksR0FBOUM7O0FBQ0EsUUFBSSxLQUFLTixPQUFMLElBQWdCLEtBQUtDLE9BQXpCLEVBQWtDO0FBQ2hDNkIsTUFBQUEsR0FBRyxJQUFLLFVBQVMsS0FBSzlCLE9BQVEsSUFBRyxLQUFLQyxPQUFRLEdBQTlDO0FBQ0Q7O0FBQ0QsV0FBTzZCLEdBQVA7QUFDRDs7QUFyTGtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBUaGUgb3JpZ2luYWwgSUQgb2YgdGhlIEFwcGl1bSBjb25maWcgc2NoZW1hLlxuICogV2UgdXNlIHRoaXMgaW4gdGhlIENMSSB0byBjb252ZXJ0IGl0IHRvIGBhcmdwYXJzZWAgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEID0gJ2FwcGl1bS5qc29uJztcblxuLyoqXG4gKiBUaGUgc2NoZW1hIHByb3AgY29udGFpbmluZyBzZXJ2ZXItcmVsYXRlZCBvcHRpb25zLiBFdmVyeXRoaW5nIGluIGhlcmVcbiAqIGlzIFwibmF0aXZlXCIgdG8gQXBwaXVtLlxuICogVXNlZCBieSB7QGxpbmsgZmxhdHRlblNjaGVtYX0gZm9yIHRyYW5zZm9ybWluZyB0aGUgc2NoZW1hIGludG8gQ0xJIGFyZ3MuXG4gKi9cbmV4cG9ydCBjb25zdCBTRVJWRVJfUFJPUF9OQU1FID0gJ3NlcnZlcic7XG5cbi8qKlxuICogVXNlZCB0byBwYXJzZSBleHRlbnNpb24gaW5mbyBmcm9tIGEgc2NoZW1hIElELlxuICovXG5jb25zdCBTQ0hFTUFfSURfUkVHRVhQID0gL14oPzxleHRUeXBlPi4rPyktKD88bm9ybWFsaXplZEV4dE5hbWU+LispXFwuanNvbiQvO1xuXG4vKipcbiAqIEF2b2lkIHR5cG9zIGJ5IHVzaW5nIGNvbnN0YW50cyFcbiAqL1xuY29uc3QgUFJPUEVSVElFUyA9ICdwcm9wZXJ0aWVzJztcblxuLyoqXG4gKiBBbiBgQXJnU3BlY2AgaXMgYSBjbGFzcyByZXByZXNlbnRpbmcgbWV0YWRhdGEgYWJvdXQgYW4gYXJndW1lbnQgKG9yIGNvbmZpZ1xuICogb3B0aW9uKSB1c2VkIGZvciBjcm9zcy1yZWZlcmVuY2luZy5cbiAqXG4gKiBUaGlzIGNsYXNzIGhhcyBubyBpbnN0YW5jZSBtZXRob2RzLCBhbmQgaXMgYmFzaWNhbGx5IGp1c3QgYSByZWFkLW9ubHkgXCJzdHJ1Y3RcIi5cbiAqL1xuZXhwb3J0IGNsYXNzIEFyZ1NwZWMge1xuICAvKipcbiAgICogVGhlIGNhbm9uaWNhbCBuYW1lIG9mIHRoZSBhcmd1bWVudC4gQ29ycmVzcG9uZHMgdG8ga2V5IGluIHNjaGVtYSdzIGBwcm9wZXJ0aWVzYCBwcm9wLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgbmFtZTtcblxuICAvKipcbiAgICogVGhlIGBFeHRlbnNpb25UeXBlYCBvZiB0aGUgYXJndW1lbnQuIFRoaXMgd2lsbCBiZSBzZXQgaWYgdGhlIGFyZyBjYW1lIGZyb20gYW4gZXh0ZW5zaW9uO1xuICAgKiBvdGhlcndpc2UgaXQgd2lsbCBiZSBgdW5kZWZpbmVkYC5cbiAgICogQHR5cGUge0V4dGVuc2lvblR5cGV8dW5kZWZpbmVkfVxuICAgKi9cbiAgZXh0VHlwZTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiwgaWYgdGhpcyBhcmd1bWVudCBjYW1lIGZyb20gYW4gZXh0ZW5zaW9uLlxuICAgKlxuICAgKiBPdGhlcndpc2UgYHVuZGVmaW5lZGAuXG4gICAqIEB0eXBlIHtzdHJpbmd8dW5kZWZpbmVkfVxuICAgKi9cbiAgZXh0TmFtZTtcblxuICAvKipcbiAgICogVGhlIHNjaGVtYSBJRCAoYCRpZGApIGZvciB0aGUgYXJndW1lbnQuICBUaGlzIGlzIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lZCwgYW5kIGFueSB1c2VyLXByb3ZpZGVkIGAkaWRgcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgcmVmO1xuXG4gIC8qKlxuICAgKiBUaGUgQ0xJIGFyZ3VtZW50LCBzYW5zIGxlYWRpbmcgZGFzaGVzLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgYXJnO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzaXJlZCBrZXlwYXRoIGZvciB0aGUgYXJndW1lbnQgYWZ0ZXIgYXJndW1lbnRzIGhhdmUgYmVlbiBwYXJzZWQuXG4gICAqXG4gICAqIFR5cGljYWxseSB0aGlzIGlzIGNhbWVsQ2FzZWQuICBJZiB0aGUgYXJnIGNhbWUgZnJvbSBhbiBleHRlbnNpb24sIGl0IHdpbGwgYmUgcHJlZml4ZWQgd2l0aFxuICAgKiBgPGV4dFR5cGU+LjxleHROYW1lPi5gXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBkZXN0O1xuXG4gIC8qKlxuICAgKiBUaGUgc2FtZSBhcyB7QGxpbmsgQXJnU3BlYy5kZXN0fSBidXQgd2l0aG91dCB0aGUgbGVhZGluZyBgPGV4dFR5cGU+LjxleHROYW1lPi5gIHByZWZpeC5cbiAgICovXG4gIHJhd0Rlc3Q7XG5cbiAgLyoqXG4gICAqIFdoYXRldmVyIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgYXJndW1lbnQgaXMsIGFzIHNwZWNpZmllZCBieSB0aGVcbiAgICogYGRlZmF1bHRgIHByb3BlcnR5IG9mIHRoZSBzY2hlbWEuXG4gICAqIEB0eXBlIHtEfVxuICAgKi9cbiAgZGVmYXVsdFZhbHVlO1xuXG4gIC8qKlxuICAgKiBCdWlsZHMgc29tZSBjb21wdXRlZCBmaWVsZHMgYW5kIGFzc2lnbnMgdGhlbSB0byB0aGUgaW5zdGFuY2UuXG4gICAqXG4gICAqIFVuZGVmaW5lZCBwcm9wZXJ0aWVzIGFyZSBub3QgYXNzaWduZWQuXG4gICAqXG4gICAqIFRoZSBfY29uc3RydWN0b3JfIGlzIHByaXZhdGUuIFVzZSB7QGxpbmsgQXJnU3BlYy5jcmVhdGV9IGluc3RlYWQuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0ZW1wbGF0ZSBEXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7QXJnU3BlY09wdGlvbnM8RD59IFtvcHRzXVxuICAgKi9cbiAgY29uc3RydWN0b3IgKG5hbWUsIHtleHRUeXBlLCBleHROYW1lLCBkZXN0LCBkZWZhdWx0VmFsdWV9ID0ge30pIHtcbiAgICAvLyB3ZSBtdXN0IG5vcm1hbGl6ZSB0aGUgZXh0ZW5zaW9uIG5hbWUgdG8gZml0IGludG8gb3VyIGNvbnZlbnRpb24gZm9yIENMSVxuICAgIC8vIGFyZ3MuXG4gICAgY29uc3QgYXJnID0gQXJnU3BlYy50b0FyZyhuYW1lLCBleHRUeXBlLCBleHROYW1lKTtcblxuICAgIGNvbnN0IHJlZiA9IEFyZ1NwZWMudG9TY2hlbWFSZWYobmFtZSwgZXh0VHlwZSwgZXh0TmFtZSk7XG5cbiAgICAvLyBpZiBubyBleHBsaWNpdCBgZGVzdGAgcHJvdmlkZWQsIGp1c3QgY2FtZWxDYXNlIHRoZSBuYW1lIHRvIGF2b2lkIG5lZWRpbmdcbiAgICAvLyB0byB1c2UgYnJhY2tldCBzeW50YXggd2hlbiBhY2Nlc3NpbmcgcHJvcHMgb24gdGhlIHBhcnNlZCBhcmdzIG9iamVjdC5cbiAgICBjb25zdCByYXdEZXN0ID0gXy5jYW1lbENhc2UoZGVzdCA/PyBuYW1lKTtcblxuICAgIGNvbnN0IGRlc3RLZXlwYXRoID1cbiAgICAgIGV4dFR5cGUgJiYgZXh0TmFtZSA/IFtleHRUeXBlLCBleHROYW1lLCByYXdEZXN0XS5qb2luKCcuJykgOiByYXdEZXN0O1xuXG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmV4dFR5cGUgPSBleHRUeXBlO1xuICAgIHRoaXMuZXh0TmFtZSA9IGV4dE5hbWU7XG4gICAgdGhpcy5hcmcgPSBhcmc7XG4gICAgdGhpcy5kZXN0ID0gZGVzdEtleXBhdGg7XG4gICAgdGhpcy5yZWYgPSByZWY7XG4gICAgdGhpcy5yYXdEZXN0ID0gcmF3RGVzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHNjaGVtYSBJRCAoYCRpZGApIGZvciB0aGUgKiphcmd1bWVudCoqIGdpdmVuIHRoZSBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBJZiB5b3UgbmVlZCB0aGUgXCJyb290XCIgb3IgXCJiYXNlXCIgc2NoZW1hIElELCB1c2Uge0BsaW5rIEFyZ1NwZWMudG9TY2hlbWFCYXNlUmVmfSBpbnN0ZWFkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIEFyZ3VtZW50IG5hbWVcbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBbZXh0VHlwZV0gLSBFeHRlbnNpb24gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4dE5hbWVdIC0gRXh0ZW5zaW9uIG5hbWVcbiAgICogQHJldHVybnMge3N0cmluZ30gU2NoZW1hIElEXG4gICAqL1xuICBzdGF0aWMgdG9TY2hlbWFSZWYgKG5hbWUsIGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICBjb25zdCBiYXNlUmVmID0gQXJnU3BlYy50b1NjaGVtYUJhc2VSZWYoZXh0VHlwZSwgZXh0TmFtZSk7XG4gICAgaWYgKGV4dFR5cGUgJiYgZXh0TmFtZSkge1xuICAgICAgcmV0dXJuIFtgJHtiYXNlUmVmfSNgLCBQUk9QRVJUSUVTLCBuYW1lXS5qb2luKCcvJyk7XG4gICAgfVxuICAgIHJldHVybiBbYCR7YmFzZVJlZn0jYCwgUFJPUEVSVElFUywgU0VSVkVSX1BST1BfTkFNRSwgUFJPUEVSVElFUywgbmFtZV0uam9pbignLycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgc2NoZW1hIElEIGZvciBhbiBleHRlbnNpb24gb3IgdGhlIGJhc2Ugc2NoZW1hIElELlxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IFtleHRUeXBlXSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0TmFtZV0gLSBFeHRlbnNpb24gbmFtZVxuICAgKi9cbiAgc3RhdGljIHRvU2NoZW1hQmFzZVJlZiAoZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIGlmIChleHRUeXBlICYmIGV4dE5hbWUpIHtcbiAgICAgIHJldHVybiBgJHtleHRUeXBlfS0ke0FyZ1NwZWMudG9Ob3JtYWxpemVkRXh0TmFtZShleHROYW1lKX0uanNvbmA7XG4gICAgfVxuICAgIHJldHVybiBBUFBJVU1fQ09ORklHX1NDSEVNQV9JRDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHVuaXF1ZSBJRCBmb3IgdGhlIGFyZ3VtZW50IGdpdmVuIHRoZSBwYXJhbWV0ZXJzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIEFyZ3VtZW50IG5hbWVcbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBbZXh0VHlwZV0gLSBFeHRlbnNpb24gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4dE5hbWVdIC0gRXh0ZW5zaW9uIG5hbWVcbiAgICogQHJldHVybnMge3N0cmluZ30gVW5pcXVlIElEXG4gICAqL1xuICBzdGF0aWMgdG9BcmcgKG5hbWUsIGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICBjb25zdCBwcm9wZXJOYW1lID0gXy5rZWJhYkNhc2UobmFtZS5yZXBsYWNlKC9eLS0/LywgJycpKTtcbiAgICBpZiAoZXh0VHlwZSAmJiBleHROYW1lKSB7XG4gICAgICByZXR1cm4gW2V4dFR5cGUsIF8ua2ViYWJDYXNlKGV4dE5hbWUpLCBwcm9wZXJOYW1lXS5qb2luKCctJyk7XG4gICAgfVxuICAgIHJldHVybiBwcm9wZXJOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZXMgYSByYXcgZXh0ZW5zaW9uIG5hbWUgKG5vdCBpbmNsdWRpbmcgdGhlIHR5cGUpLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZSAtIEV4dGVuc2lvbiBuYW1lXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IE5vcm1hbGl6ZWQgZXh0ZW5zaW9uIG5hbWVcbiAgICovXG4gIHN0YXRpYyB0b05vcm1hbGl6ZWRFeHROYW1lIChleHROYW1lKSB7XG4gICAgcmV0dXJuIF8ua2ViYWJDYXNlKGV4dE5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gZ2l2ZW4gdGhlIHJvb3QgSUQgb2YgYSBzY2hlbWEgZm9yIGFuIGV4dGVuc2lvbiAoYDxleHRUeXBlPi08bm9ybWFsaXplZEV4dE5hbWU+Lmpzb25gKSBSZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBleHRlbnNpb24gdHlwZSBhbmQgdGhlIF9ub3JtYWxpemVkXyBleHRlbnNpb24gbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjaGVtYUlkIC0gUm9vdCBzY2hlbWEgSURcbiAgICogQHJldHVybnMge3tleHRUeXBlOiBFeHRlbnNpb25UeXBlfHVuZGVmaW5lZCwgbm9ybWFsaXplZEV4dE5hbWU6IHN0cmluZ3x1bmRlZmluZWR9fVxuICAgKi9cbiAgc3RhdGljIGV4dGVuc2lvbkluZm9Gcm9tUm9vdFNjaGVtYUlkIChzY2hlbWFJZCkge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBzY2hlbWFJZC5tYXRjaChTQ0hFTUFfSURfUkVHRVhQKTtcbiAgICBpZiAobWF0Y2hlcz8uZ3JvdXBzKSB7XG4gICAgICBjb25zdCB7ZXh0VHlwZSwgbm9ybWFsaXplZEV4dE5hbWV9ID0gbWF0Y2hlcy5ncm91cHM7XG4gICAgICByZXR1cm4ge2V4dFR5cGUsIG5vcm1hbGl6ZWRFeHROYW1lfTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYEFyZ1NwZWNgXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIGNhbm9uaWNhbCBuYW1lIG9mIHRoZSBhcmd1bWVudC4gQ29ycmVzcG9uZHMgdG8gYSBrZXkgaW4gYSBzY2hlbWEnc1xuICAgKiBgcHJvcGVydGllc2AgcHJvcGVydHkuXG4gICAqIEBwYXJhbSB7QXJnU3BlY09wdGlvbnN9IFtvcHRzXSAtIE9wdGlvbnNcbiAgICogQHJldHVybnMge1JlYWRvbmx5PEFyZ1NwZWM+fVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZSAobmFtZSwgb3B0cykge1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKG5ldyBBcmdTcGVjKG5hbWUsIG9wdHMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdHJpbmcgcmVwcmVzZW50YXRpb24sIHVzZWZ1bCBmb3IgZGVidWdnaW5nXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICB0b1N0cmluZyAoKSB7XG4gICAgbGV0IHN0ciA9IGBbQXJnU3BlY10gJHt0aGlzLm5hbWV9ICgke3RoaXMucmVmfSlgO1xuICAgIGlmICh0aGlzLmV4dFR5cGUgJiYgdGhpcy5leHROYW1lKSB7XG4gICAgICBzdHIgKz0gYCAoZXh0OiAke3RoaXMuZXh0VHlwZX0vJHt0aGlzLmV4dE5hbWV9KWA7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH1cbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgQXJnU3BlYy5jcmVhdGV9XG4gKiBAdGVtcGxhdGUgRFxuICogQHR5cGVkZWYge09iamVjdH0gQXJnU3BlY09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZXh0TmFtZV1cbiAqIEBwcm9wZXJ0eSB7RXh0ZW5zaW9uVHlwZX0gW2V4dFR5cGVdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2Rlc3RdXG4gKiBAcHJvcGVydHkge0R9IFtkZWZhdWx0VmFsdWVdXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9leHQtY29uZmlnLWlvJykuRXh0ZW5zaW9uVHlwZX0gRXh0ZW5zaW9uVHlwZVxuICovXG4iXSwiZmlsZSI6ImxpYi9zY2hlbWEvYXJnLXNwZWMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
@@ -80,12 +80,7 @@ function makeDescription(schema) {
|
|
|
80
80
|
return desc;
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
function subSchemaToArgDef(subSchema, argSpec
|
|
84
|
-
var _overrides$dest;
|
|
85
|
-
|
|
86
|
-
const {
|
|
87
|
-
overrides = {}
|
|
88
|
-
} = opts;
|
|
83
|
+
function subSchemaToArgDef(subSchema, argSpec) {
|
|
89
84
|
let {
|
|
90
85
|
type,
|
|
91
86
|
appiumCliAliases,
|
|
@@ -94,8 +89,7 @@ function subSchemaToArgDef(subSchema, argSpec, opts = {}) {
|
|
|
94
89
|
} = subSchema;
|
|
95
90
|
const {
|
|
96
91
|
name,
|
|
97
|
-
arg
|
|
98
|
-
dest
|
|
92
|
+
arg
|
|
99
93
|
} = argSpec;
|
|
100
94
|
const aliases = [aliasToFlag(argSpec), ...(appiumCliAliases !== null && appiumCliAliases !== void 0 ? appiumCliAliases : []).map(alias => aliasToFlag(argSpec, alias))];
|
|
101
95
|
let argOpts = {
|
|
@@ -107,7 +101,8 @@ function subSchemaToArgDef(subSchema, argSpec, opts = {}) {
|
|
|
107
101
|
switch (type) {
|
|
108
102
|
case TYPENAMES.BOOLEAN:
|
|
109
103
|
{
|
|
110
|
-
argOpts.action = '
|
|
104
|
+
argOpts.action = 'store_const';
|
|
105
|
+
argOpts.const = true;
|
|
111
106
|
break;
|
|
112
107
|
}
|
|
113
108
|
|
|
@@ -170,19 +165,18 @@ function subSchemaToArgDef(subSchema, argSpec, opts = {}) {
|
|
|
170
165
|
}
|
|
171
166
|
}
|
|
172
167
|
|
|
173
|
-
argOpts = _lodash.default.merge(argOpts, (_overrides$dest = overrides[dest]) !== null && _overrides$dest !== void 0 ? _overrides$dest : {});
|
|
174
168
|
return [aliases, argOpts];
|
|
175
169
|
}
|
|
176
170
|
|
|
177
|
-
function toParserArgs(
|
|
171
|
+
function toParserArgs() {
|
|
178
172
|
const flattened = (0, _schema.flattenSchema)().filter(({
|
|
179
173
|
schema
|
|
180
174
|
}) => !schema.appiumCliIgnored);
|
|
181
175
|
return new Map(_lodash.default.map(flattened, ({
|
|
182
176
|
schema,
|
|
183
177
|
argSpec
|
|
184
|
-
}) => subSchemaToArgDef(schema, argSpec
|
|
178
|
+
}) => subSchemaToArgDef(schema, argSpec)));
|
|
185
179
|
}require('source-map-support').install();
|
|
186
180
|
|
|
187
181
|
|
|
188
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zY2hlbWEvY2xpLWFyZ3MuanMiXSwibmFtZXMiOlsiVFlQRU5BTUVTIiwiT2JqZWN0IiwiZnJlZXplIiwiQVJSQVkiLCJPQkpFQ1QiLCJCT09MRUFOIiwiSU5URUdFUiIsIk5VTUJFUiIsIk5VTEwiLCJTVFJJTkciLCJTSE9SVF9BUkdfQ1VUT0ZGIiwiYWxpYXNUb0ZsYWciLCJhcmdTcGVjIiwiYWxpYXMiLCJleHRUeXBlIiwiZXh0TmFtZSIsIm5hbWUiLCJhcmciLCJpc1Nob3J0IiwibGVuZ3RoIiwiXyIsImtlYmFiQ2FzZSIsInNjcmVhbWluZ1NuYWtlQ2FzZSIsImZsb3ciLCJzbmFrZUNhc2UiLCJ0b1VwcGVyIiwiZ2V0U2NoZW1hVmFsaWRhdG9yIiwicmVmIiwic2NoZW1hSWQiLCJjb2VyY2UiLCJpZGVudGl0eSIsInZhbHVlIiwiY29lcmNlZCIsImVycm9ycyIsImlzRW1wdHkiLCJBcmd1bWVudFR5cGVFcnJvciIsIm1ha2VEZXNjcmlwdGlvbiIsInNjaGVtYSIsImFwcGl1bUNsaURlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJhcHBpdW1EZXByZWNhdGVkIiwiZGVzYyIsInN1YlNjaGVtYVRvQXJnRGVmIiwic3ViU2NoZW1hIiwib3B0cyIsIm92ZXJyaWRlcyIsInR5cGUiLCJhcHBpdW1DbGlBbGlhc2VzIiwiYXBwaXVtQ2xpVHJhbnNmb3JtZXIiLCJlbnVtIiwiZW51bVZhbHVlcyIsImRlc3QiLCJhbGlhc2VzIiwibWFwIiwiYXJnT3B0cyIsInJlcXVpcmVkIiwiaGVscCIsImFyZ1R5cGVGdW5jdGlvbiIsImFjdGlvbiIsInRyYW5zZm9ybWVycyIsImpzb24iLCJjc3YiLCJwYXJzZUZsb2F0IiwicGFyc2VJbnQiLCJUeXBlRXJyb3IiLCJtZXRhdmFyIiwiY2hvaWNlcyIsIlN0cmluZyIsIm1lcmdlIiwidG9QYXJzZXJBcmdzIiwiZmxhdHRlbmVkIiwiZmlsdGVyIiwiYXBwaXVtQ2xpSWdub3JlZCIsIk1hcCJdLCJtYXBwaW5ncyI6Ijs7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RUFBQUEsT0FBTyxHQUFHbEMsZ0JBQUVnRCxLQUFGLENBQ1JkLE9BRFEscUJBS1JULFNBQVMsQ0FBQ00sSUFBRCxDQUxELDZEQUtXLEVBTFgsQ0FBVjtBQVFBLFNBQU8sQ0FBQ0MsT0FBRCxFQUFVRSxPQUFWLENBQVA7QUFDRDs7QUFXTSxTQUFTZSxZQUFULENBQXVCekIsSUFBSSxHQUFHLEVBQTlCLEVBQWtDO0FBQ3ZDLFFBQU0wQixTQUFTLEdBQUcsNkJBQWdCQyxNQUFoQixDQUF1QixDQUFDO0FBQUNsQyxJQUFBQTtBQUFELEdBQUQsS0FBYyxDQUFDQSxNQUFNLENBQUNtQyxnQkFBN0MsQ0FBbEI7QUFDQSxTQUFPLElBQUlDLEdBQUosQ0FDTHJELGdCQUFFaUMsR0FBRixDQUFNaUIsU0FBTixFQUFpQixDQUFDO0FBQUNqQyxJQUFBQSxNQUFEO0FBQVN6QixJQUFBQTtBQUFULEdBQUQsS0FDZjhCLGlCQUFpQixDQUFDTCxNQUFELEVBQVN6QixPQUFULEVBQWtCZ0MsSUFBbEIsQ0FEbkIsQ0FESyxDQUFQO0FBS0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtBcmd1bWVudFR5cGVFcnJvcn0gZnJvbSAnYXJncGFyc2UnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7Zm9ybWF0RXJyb3JzIGFzIGZvcm1hdEVycm9yc30gZnJvbSAnLi4vY29uZmlnLWZpbGUnO1xuaW1wb3J0IHtmbGF0dGVuU2NoZW1hLCB2YWxpZGF0ZX0gZnJvbSAnLi9zY2hlbWEnO1xuaW1wb3J0IHt0cmFuc2Zvcm1lcnN9IGZyb20gJy4vY2xpLXRyYW5zZm9ybWVycyc7XG5cbi8qKlxuICogVGhpcyBtb2R1bGUgY29uY2VybnMgZnVuY3Rpb25zIHdoaWNoIGNvbnZlcnQgc2NoZW1hIGRlZmluaXRpb25zIHRvXG4gKiBgYXJncGFyc2VgLWNvbXBhdGlibGUgZGF0YSBzdHJ1Y3R1cmVzLCBmb3IgZGVyaXZpbmcgQ0xJIGFyZ3VtZW50cyBmcm9tIGFcbiAqIHNjaGVtYS5cbiAqL1xuXG4vKipcbiAqIExvb2t1cCBvZiBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSBgdHlwZWAgZmllbGQgaW4gYSBKU09OIHNjaGVtYS5cbiAqIEB0eXBlIHtSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoJ2pzb24tc2NoZW1hJykuSlNPTlNjaGVtYTdUeXBlTmFtZT4+fVxuICovXG5jb25zdCBUWVBFTkFNRVMgPSBPYmplY3QuZnJlZXplKHtcbiAgQVJSQVk6ICdhcnJheScsXG4gIE9CSkVDVDogJ29iamVjdCcsXG4gIEJPT0xFQU46ICdib29sZWFuJyxcbiAgSU5URUdFUjogJ2ludGVnZXInLFxuICBOVU1CRVI6ICdudW1iZXInLFxuICBOVUxMOiAnbnVsbCcsXG4gIFNUUklORzogJ3N0cmluZycsXG59KTtcblxuLyoqXG4gKiBPcHRpb25zIHdpdGggYWxpYXMgbGVuZ3RocyBsZXNzIHRoYW4gdGhpcyB3aWxsIGJlIGNvbnNpZGVyZWQgXCJzaG9ydFwiIGZsYWdzLlxuICovXG5jb25zdCBTSE9SVF9BUkdfQ1VUT0ZGID0gMztcblxuLyoqXG4gKiBDb252ZXJ0IGFuIGFsaWFzIChgZm9vYCkgdG8gYSBmbGFnIChgLS1mb29gKSBvciBhIHNob3J0IGZsYWcgKGAtZmApLlxuICogQHBhcmFtIHtBcmdTcGVjfSBhcmdTcGVjIC0gdGhlIGFyZ3VtZW50IHNwZWNpZmljYXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBbYWxpYXNdIC0gdGhlIGFsaWFzIHRvIGNvbnZlcnQgdG8gYSBmbGFnXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgZmxhZ1xuICovXG5mdW5jdGlvbiBhbGlhc1RvRmxhZyAoYXJnU3BlYywgYWxpYXMpIHtcbiAgY29uc3Qge2V4dFR5cGUsIGV4dE5hbWUsIG5hbWV9ID0gYXJnU3BlYztcbiAgY29uc3QgYXJnID0gYWxpYXMgPz8gbmFtZTtcbiAgY29uc3QgaXNTaG9ydCA9IGFyZy5sZW5ndGggPCBTSE9SVF9BUkdfQ1VUT0ZGO1xuICBpZiAoZXh0VHlwZSAmJiBleHROYW1lKSB7XG4gICAgcmV0dXJuIGlzU2hvcnRcbiAgICAgID8gYC0tJHtleHRUeXBlfS0ke18ua2ViYWJDYXNlKGV4dE5hbWUpfS0ke2FyZ31gXG4gICAgICA6IGAtLSR7ZXh0VHlwZX0tJHtfLmtlYmFiQ2FzZShleHROYW1lKX0tJHtfLmtlYmFiQ2FzZShhcmcpfWA7XG4gIH1cbiAgcmV0dXJuIGlzU2hvcnQgPyBgLSR7YXJnfWAgOiBgLS0ke18ua2ViYWJDYXNlKGFyZyl9YDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN0cmluZyB0byBTQ1JFQU1JTkdfU05BS0VfQ0FTRVxuICovXG5jb25zdCBzY3JlYW1pbmdTbmFrZUNhc2UgPSBfLmZsb3coXy5zbmFrZUNhc2UsIF8udG9VcHBlcik7XG5cbi8qKlxuICogR2l2ZW4gdW5pcXVlIHByb3BlcnR5IG5hbWUgYG5hbWVgLCByZXR1cm4gYSBmdW5jdGlvbiB3aGljaCB2YWxpZGF0ZXMgYSB2YWx1ZVxuICogYWdhaW5zdCBhIHByb3BlcnR5IHdpdGhpbiB0aGUgc2NoZW1hLlxuICogQHRlbXBsYXRlIENvZXJjZWRcbiAqIEBwYXJhbSB7QXJnU3BlY30gYXJnU3BlYyAtIEFyZ3VtZW50IG5hbWVcbiAqIEBwYXJhbSB7KHZhbHVlOiBzdHJpbmcpID0+IENvZXJjZWR9IFtjb2VyY2VdIC0gRnVuY3Rpb24gdG8gY29lcmNlIHRvIGEgZGlmZmVyZW50XG4gKiBwcmltaXRpdmVcbiAqIEB0b2RvIFNlZSBpZiB3ZSBjYW4gcmVtb3ZlIGBjb2VyY2VgIGJ5IGFsbG93aW5nIEFqdiB0byBjb2VyY2UgaW4gaXRzXG4gKiBjb25zdHJ1Y3RvciBvcHRpb25zXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiBnZXRTY2hlbWFWYWxpZGF0b3IgKHtyZWY6IHNjaGVtYUlkfSwgY29lcmNlID0gXy5pZGVudGl0eSkge1xuICAvKiogQHBhcmFtIHtzdHJpbmd9IHZhbHVlICovXG4gIHJldHVybiAodmFsdWUpID0+IHtcbiAgICBjb25zdCBjb2VyY2VkID0gY29lcmNlKHZhbHVlKTtcbiAgICBjb25zdCBlcnJvcnMgPSB2YWxpZGF0ZShjb2VyY2VkLCBzY2hlbWFJZCk7XG4gICAgaWYgKF8uaXNFbXB0eShlcnJvcnMpKSB7XG4gICAgICByZXR1cm4gY29lcmNlZDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEFyZ3VtZW50VHlwZUVycm9yKFxuICAgICAgJ1xcblxcbicgKyBmb3JtYXRFcnJvcnMoZXJyb3JzLCB2YWx1ZSwge3NjaGVtYUlkfSksXG4gICAgKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgdGhlIGRlc2NyaXB0aW9uIGZvciBkaXNwbGF5IG9uIHRoZSBDTEksIGdpdmVuIHRoZSBzY2hlbWEuXG4gKiBAcGFyYW0ge0FwcGl1bUpTT05TY2hlbWF9IHNjaGVtYVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gbWFrZURlc2NyaXB0aW9uIChzY2hlbWEpIHtcbiAgY29uc3Qge2FwcGl1bUNsaURlc2NyaXB0aW9uLCBkZXNjcmlwdGlvbiA9ICcnLCBhcHBpdW1EZXByZWNhdGVkfSA9IHNjaGVtYTtcbiAgbGV0IGRlc2MgPSBhcHBpdW1DbGlEZXNjcmlwdGlvbiA/PyBkZXNjcmlwdGlvbjtcbiAgaWYgKGFwcGl1bURlcHJlY2F0ZWQpIHtcbiAgICBkZXNjID0gYFtERVBSRUNBVEVEXSAke2Rlc2N9YDtcbiAgfVxuICByZXR1cm4gZGVzYztcbn1cblxuLyoqXG4gKiBHaXZlbiBhcmcgYG5hbWVgLCBhIEpTT04gc2NoZW1hIGBzdWJTY2hlbWFgLCBhbmQgb3B0aW9ucywgcmV0dXJuIGFuIGFyZ3VtZW50IGRlZmluaXRpb25cbiAqIGFzIHVuZGVyc3Rvb2QgYnkgYGFyZ3BhcnNlYC5cbiAqIEBwYXJhbSB7QXBwaXVtSlNPTlNjaGVtYX0gc3ViU2NoZW1hIC0gSlNPTiBzY2hlbWEgZm9yIHRoZSBvcHRpb25cbiAqIEBwYXJhbSB7QXJnU3BlY30gYXJnU3BlYyAtIEFyZ3VtZW50IHNwZWMgdHVwbGVcbiAqIEBwYXJhbSB7U3ViU2NoZW1hVG9BcmdEZWZPcHRpb25zfSBbb3B0c10gLSBPcHRpb25zXG4gKiBAcmV0dXJucyB7W3N0cmluZ1tdLCBpbXBvcnQoJ2FyZ3BhcnNlJykuQXJndW1lbnRPcHRpb25zXX0gVHVwbGUgb2YgZmxhZyBhbmQgb3B0aW9uc1xuICovXG5mdW5jdGlvbiBzdWJTY2hlbWFUb0FyZ0RlZiAoc3ViU2NoZW1hLCBhcmdTcGVjLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge292ZXJyaWRlcyA9IHt9fSA9IG9wdHM7XG4gIGxldCB7XG4gICAgdHlwZSxcbiAgICBhcHBpdW1DbGlBbGlhc2VzLFxuICAgIGFwcGl1bUNsaVRyYW5zZm9ybWVyLFxuICAgIGVudW06IGVudW1WYWx1ZXMsXG4gIH0gPSBzdWJTY2hlbWE7XG5cbiAgY29uc3Qge25hbWUsIGFyZywgZGVzdH0gPSBhcmdTcGVjO1xuXG4gIGNvbnN0IGFsaWFzZXMgPSBbXG4gICAgYWxpYXNUb0ZsYWcoYXJnU3BlYyksXG4gICAgLi4uLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi8gKGFwcGl1bUNsaUFsaWFzZXMgPz8gW10pLm1hcCgoYWxpYXMpID0+XG4gICAgICBhbGlhc1RvRmxhZyhhcmdTcGVjLCBhbGlhcyksXG4gICAgKSxcbiAgXTtcblxuICAvKiogQHR5cGUge2ltcG9ydCgnYXJncGFyc2UnKS5Bcmd1bWVudE9wdGlvbnN9ICovXG4gIGxldCBhcmdPcHRzID0ge1xuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBoZWxwOiBtYWtlRGVzY3JpcHRpb24oc3ViU2NoZW1hKVxuICB9O1xuXG4gIC8qKlxuICAgKiBHZW5lcmFsbHkgd2Ugd2lsbCBwcm92aWRlIGEgYHR5cGVgIHRvIGBhcmdwYXJzZWAgYXMgYSBmdW5jdGlvbiB3aGljaFxuICAgKiB2YWxpZGF0ZXMgdXNpbmcgYWp2ICh3aGljaCBpcyBtdWNoIG1vcmUgZnVsbC1mZWF0dXJlZCB0aGFuIHdoYXQgYGFyZ3BhcnNlYFxuICAgKiBjYW4gb2ZmZXIpLiBUaGUgZXhjZXB0aW9uIGlzIGBib29sZWFuYC10eXBlIG9wdGlvbnMsIHdoaWNoIGhhdmUgbm9cbiAgICogYGFyZ1R5cGVgLlxuICAgKlxuICAgKiBOb3Qgc3VyZSBpZiB0aGlzIHR5cGUgaXMgY29ycmVjdCwgYnV0IGl0J3Mgbm90IGRvaW5nIHdoYXQgSSB3YW50LiAgSSB3YW50XG4gICAqIHRvIHNheSBcInRoaXMgaXMgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIHNvbWV0aGluZyBvZiB0eXBlIGBUYCB3aGVyZSBgVGAgaXNcbiAgICogbmV2ZXIgYSBgUHJvbWlzZWBcIi4gIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBzeW5jLlxuICAgKiBAdHlwZSB7KCh2YWx1ZTogc3RyaW5nKSA9PiB1bmtub3duKXx1bmRlZmluZWR9XG4gICAqL1xuICBsZXQgYXJnVHlwZUZ1bmN0aW9uO1xuXG4gIC8vIGhhbmRsZSBzcGVjaWFsIGNhc2VzIGZvciB2YXJpb3VzIHR5cGVzXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIC8vIGJvb2xlYW5zIGRvIG5vdCBoYXZlIGEgdHlwZSBwZXIgYEFyZ3VtZW50T3B0aW9uc2AsIGp1c3QgYW4gXCJhY3Rpb25cIlxuICAgIGNhc2UgVFlQRU5BTUVTLkJPT0xFQU46IHtcbiAgICAgIGFyZ09wdHMuYWN0aW9uID0gJ3N0b3JlX3RydWUnO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSBUWVBFTkFNRVMuT0JKRUNUOiB7XG4gICAgICBhcmdUeXBlRnVuY3Rpb24gPSB0cmFuc2Zvcm1lcnMuanNvbjtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIGFycmF5cyBhcmUgdHJlYXRlZCBhcyBDU1ZzLCBiZWNhdXNlIGBhcmdwYXJzZWAgZG9lc24ndCBoYW5kbGUgYXJyYXkgZGF0YS5cbiAgICBjYXNlIFRZUEVOQU1FUy5BUlJBWToge1xuICAgICAgYXJnVHlwZUZ1bmN0aW9uID0gdHJhbnNmb3JtZXJzLmNzdjtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIFwibnVtYmVyXCIgdHlwZSBpcyBjb2VyY2VkIHRvIGZsb2F0LiBgYXJncGFyc2VgIGRvZXMgdGhpcyBmb3IgdXMgaWYgd2UgdXNlIGBmbG9hdGAgdHlwZSwgYnV0XG4gICAgLy8gd2UgZG9uJ3QuXG4gICAgY2FzZSBUWVBFTkFNRVMuTlVNQkVSOiB7XG4gICAgICBhcmdUeXBlRnVuY3Rpb24gPSBnZXRTY2hlbWFWYWxpZGF0b3IoYXJnU3BlYywgcGFyc2VGbG9hdCk7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBcImludGVnZXJcIiBpcyBjb2VyY2VkIHRvIGFuIC4uIGludGVnZXIuICBhZ2FpbiwgYGFyZ3BhcnNlYCB3b3VsZCBkbyB0aGlzIGZvciB1cyBpZiB3ZSB1c2VkIGBpbnRgLlxuICAgIGNhc2UgVFlQRU5BTUVTLklOVEVHRVI6IHtcbiAgICAgIGFyZ1R5cGVGdW5jdGlvbiA9IGdldFNjaGVtYVZhbGlkYXRvcihhcmdTcGVjLCBfLnBhcnNlSW50KTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIHN0cmluZ3MgKGxpa2UgbnVtYmVyIGFuZCBpbnRlZ2VyKSBhcmUgc3ViamVjdCB0byBmdXJ0aGVyIHZhbGlkYXRpb25cbiAgICAvLyAoZS5nLiwgbXVzdCBzYXRpc2Z5IGEgbWFzayBvciByZWdleCBvciBldmVuIHNvbWUgY3VzdG9tIHZhbGlkYXRpb25cbiAgICAvLyBmdW5jdGlvbilcbiAgICBjYXNlIFRZUEVOQU1FUy5TVFJJTkc6IHtcbiAgICAgIGFyZ1R5cGVGdW5jdGlvbiA9IGdldFNjaGVtYVZhbGlkYXRvcihhcmdTcGVjKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHRoZXJlIG1heSBiZSBzb21lIHdheSB0byByZXN0cmljdCB0aGlzIGF0IHRoZSBBanYgbGV2ZWwgLS1cbiAgICAvLyB0aGF0IG1heSBpbnZvbHZlIHBhdGNoaW5nIHRoZSBtZXRhc2NoZW1hLlxuICAgIGNhc2UgVFlQRU5BTUVTLk5VTEw6XG4gICAgLy8gZmFsbHMgdGhyb3VnaFxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIGBTY2hlbWEgcHJvcGVydHkgXCIke2FyZ31cIjogXFxgJHt0eXBlfVxcYCB0eXBlIHVua25vd24gb3IgZGlzYWxsb3dlZGAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIG1ldGF2YXIgaXMgdXNlZCBpbiBoZWxwIHRleHQuIGBib29sZWFuYCBjYW5ub3QgaGF2ZSBhIG1ldGF2YXItLWl0IGlzIG5vdFxuICAvLyBkaXNwbGF5ZWQtLWFuZCBgYXJncGFyc2VgIHRocm93cyBpZiB5b3UgZ2l2ZSBpdCBvbmUuXG4gIGlmICh0eXBlICE9PSBUWVBFTkFNRVMuQk9PTEVBTikge1xuICAgIGFyZ09wdHMubWV0YXZhciA9IHNjcmVhbWluZ1NuYWtlQ2FzZShuYW1lKTtcbiAgfVxuXG4gIC8vIHRoZSB2YWxpZGl0eSBvZiBcImFwcGl1bUNsaVRyYW5zZm9ybWVyXCIgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIGRldGVybWluZWRcbiAgLy8gYnkgYWp2IGR1cmluZyBzY2hlbWEgdmFsaWRhdGlvbiBpbiBgZmluYWxpemVTY2hlbWEoKWAuIHRoZSBgYXJyYXlgICZcbiAgLy8gYG9iamVjdGAgdHlwZXMgaGF2ZSBhbHJlYWR5IGFkZGVkIGEgZm9ybWF0dGVyIChzZWUgYWJvdmUsIHNvIHdlIGRvbid0IGRvIGl0XG4gIC8vIHR3aWNlKS5cbiAgaWYgKFxuICAgIHR5cGUgIT09IFRZUEVOQU1FUy5BUlJBWSAmJlxuICAgIHR5cGUgIT09IFRZUEVOQU1FUy5PQkpFQ1QgJiZcbiAgICBhcHBpdW1DbGlUcmFuc2Zvcm1lclxuICApIHtcbiAgICBhcmdUeXBlRnVuY3Rpb24gPSBfLmZsb3coXG4gICAgICBhcmdUeXBlRnVuY3Rpb24gPz8gXy5pZGVudGl0eSxcbiAgICAgIHRyYW5zZm9ybWVyc1thcHBpdW1DbGlUcmFuc2Zvcm1lcl0sXG4gICAgKTtcbiAgfVxuXG4gIGlmIChhcmdUeXBlRnVuY3Rpb24pIHtcbiAgICBhcmdPcHRzLnR5cGUgPSBhcmdUeXBlRnVuY3Rpb247XG4gIH1cblxuICAvLyBjb252ZXJ0IEpTT04gc2NoZW1hIGBlbnVtYCB0byBgY2hvaWNlc2AuIGBlbnVtYCBjYW4gY29udGFpbiBhbnkgSlNPTiB0eXBlLCBidXQgYGFyZ3BhcnNlYFxuICAvLyBpcyBsaW1pdGVkIHRvIGEgc2luZ2xlIHR5cGUgcGVyIGFyZyAoSSB0aGluaykuICBzbyBsZXQncyBtYWtlIGV2ZXJ5dGhpbmcgYSBzdHJpbmcuXG4gIC8vIGFuZCBtaWdodCBhcyB3ZWxsIF9yZXF1aXJlXyB0aGUgYHR5cGU6IHN0cmluZ2Agd2hpbGUgd2UncmUgYXQgaXQuXG4gIGlmIChlbnVtVmFsdWVzICYmICFfLmlzRW1wdHkoZW51bVZhbHVlcykpIHtcbiAgICBpZiAodHlwZSA9PT0gVFlQRU5BTUVTLlNUUklORykge1xuICAgICAgYXJnT3B0cy5jaG9pY2VzID0gZW51bVZhbHVlcy5tYXAoU3RyaW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgYFByb2JsZW0gd2l0aCBzY2hlbWEgZm9yICR7YXJnfTsgXFxgZW51bVxcYCBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgXFxgdHlwZTogJ3N0cmluZydcXGBgLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBvdmVycmlkZXMgb3ZlcnJpZGUgYW55dGhpbmcgd2UgY29tcHV0ZWQgaGVyZS4gIHVzdWFsbHkgdGhpcyBpbnZvbHZlcyBcImN1c3RvbSB0eXBlc1wiLFxuICAvLyB3aGljaCBhcmUgcmVhbGx5IGp1c3QgdHJhbnNmb3JtIGZ1bmN0aW9ucy5cbiAgYXJnT3B0cyA9IF8ubWVyZ2UoXG4gICAgYXJnT3B0cyxcbiAgICAvKiogc2hvdWxkIHRoZSBvdmVycmlkZSBrZXlzIGNvcnJlc3BvbmQgdG8gdGhlIHByb3AgbmFtZSBvciB0aGUgcHJvcCBkZXN0P1xuICAgICAqIHRoZSBwcm9wIGRlc3QgaXMgY29tcHV0ZWQgYnkge0BsaW5rIGFsaWFzVG9EZXN0fS5cbiAgICAgKi9cbiAgICBvdmVycmlkZXNbZGVzdF0gPz8ge30sXG4gICk7XG5cbiAgcmV0dXJuIFthbGlhc2VzLCBhcmdPcHRzXTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZmluYWxpemVkLCBmbGF0dGVuZWQgc2NoZW1hIHJlcHJlc2VudGF0aW9uIGludG9cbiAqIEFyZ3VtZW50RGVmaW5pdGlvbnMgZm9yIGhhbmRvZmYgdG8gYGFyZ3BhcnNlYC5cbiAqXG4gKiBAcGFyYW0ge1RvUGFyc2VyQXJnc09wdGlvbnN9IG9wdHMgLSBPcHRpb25zXG4gKiBAdGhyb3dzIElmIHNjaGVtYSBoYXMgbm90IGJlZW4gYWRkZWQgdG8gYWp2ICh2aWEgYGZpbmFsaXplU2NoZW1hKClgKVxuICogQHJldHVybnMge2ltcG9ydCgnLi4vY2xpL2FyZ3MnKS5Bcmd1bWVudERlZmluaXRpb25zfSBBIG1hcCBvZiBhcnJ5YXMgb2ZcbiAqIGFsaWFzZXMgdG8gYGFyZ3BhcnNlYCBhcmd1bWVudHM7IGVtcHR5IGlmIG5vIHNjaGVtYSBmb3VuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9QYXJzZXJBcmdzIChvcHRzID0ge30pIHtcbiAgY29uc3QgZmxhdHRlbmVkID0gZmxhdHRlblNjaGVtYSgpLmZpbHRlcigoe3NjaGVtYX0pID0+ICFzY2hlbWEuYXBwaXVtQ2xpSWdub3JlZCk7XG4gIHJldHVybiBuZXcgTWFwKFxuICAgIF8ubWFwKGZsYXR0ZW5lZCwgKHtzY2hlbWEsIGFyZ1NwZWN9KSA9PlxuICAgICAgc3ViU2NoZW1hVG9BcmdEZWYoc2NoZW1hLCBhcmdTcGVjLCBvcHRzKSxcbiAgICApLFxuICApO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayB0b1BhcnNlckFyZ3N9XG4gKiBAdHlwZWRlZiB7U3ViU2NoZW1hVG9BcmdEZWZPcHRpb25zfSBUb1BhcnNlckFyZ3NPcHRpb25zXG4gKi9cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgc3ViU2NoZW1hVG9BcmdEZWZ9LlxuICogQHR5cGVkZWYge09iamVjdH0gU3ViU2NoZW1hVG9BcmdEZWZPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3ByZWZpeF0gLSBUaGUgcHJlZml4IHRvIHVzZSBmb3IgdGhlIGZsYWcsIGlmIGFueVxuICogQHByb3BlcnR5IHt7W2tleTogc3RyaW5nXTogaW1wb3J0KCdhcmdwYXJzZScpLkFyZ3VtZW50T3B0aW9uc319IFtvdmVycmlkZXNdIC0gQW4gb2JqZWN0IG9mIGtleS92YWx1ZSBwYWlycyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCB2YWx1ZXNcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhanYvZGlzdC90eXBlcycpLkZvcm1hdFZhbGlkYXRvcjxUPn0gRm9ybWF0VmFsaWRhdG9yPFQ+XG4gKi9cblxuLyoqXG4gKiBBIEpTT04gNyBzY2hlbWEgd2l0aCBvdXIgY3VzdG9tIGtleXdvcmRzLlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9rZXl3b3JkcycpLkFwcGl1bUpTT05TY2hlbWFLZXl3b3JkcyAmIGltcG9ydCgnanNvbi1zY2hlbWEnKS5KU09OU2NoZW1hN30gQXBwaXVtSlNPTlNjaGVtYVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9hcmctc3BlYycpLkFyZ1NwZWN9IEFyZ1NwZWNcbiAqL1xuIl0sImZpbGUiOiJsaWIvc2NoZW1hL2NsaS1hcmdzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
182
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zY2hlbWEvY2xpLWFyZ3MuanMiXSwibmFtZXMiOlsiVFlQRU5BTUVTIiwiT2JqZWN0IiwiZnJlZXplIiwiQVJSQVkiLCJPQkpFQ1QiLCJCT09MRUFOIiwiSU5URUdFUiIsIk5VTUJFUiIsIk5VTEwiLCJTVFJJTkciLCJTSE9SVF9BUkdfQ1VUT0ZGIiwiYWxpYXNUb0ZsYWciLCJhcmdTcGVjIiwiYWxpYXMiLCJleHRUeXBlIiwiZXh0TmFtZSIsIm5hbWUiLCJhcmciLCJpc1Nob3J0IiwibGVuZ3RoIiwiXyIsImtlYmFiQ2FzZSIsInNjcmVhbWluZ1NuYWtlQ2FzZSIsImZsb3ciLCJzbmFrZUNhc2UiLCJ0b1VwcGVyIiwiZ2V0U2NoZW1hVmFsaWRhdG9yIiwicmVmIiwic2NoZW1hSWQiLCJjb2VyY2UiLCJpZGVudGl0eSIsInZhbHVlIiwiY29lcmNlZCIsImVycm9ycyIsImlzRW1wdHkiLCJBcmd1bWVudFR5cGVFcnJvciIsIm1ha2VEZXNjcmlwdGlvbiIsInNjaGVtYSIsImFwcGl1bUNsaURlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJhcHBpdW1EZXByZWNhdGVkIiwiZGVzYyIsInN1YlNjaGVtYVRvQXJnRGVmIiwic3ViU2NoZW1hIiwidHlwZSIsImFwcGl1bUNsaUFsaWFzZXMiLCJhcHBpdW1DbGlUcmFuc2Zvcm1lciIsImVudW0iLCJlbnVtVmFsdWVzIiwiYWxpYXNlcyIsIm1hcCIsImFyZ09wdHMiLCJyZXF1aXJlZCIsImhlbHAiLCJhcmdUeXBlRnVuY3Rpb24iLCJhY3Rpb24iLCJjb25zdCIsInRyYW5zZm9ybWVycyIsImpzb24iLCJjc3YiLCJwYXJzZUZsb2F0IiwicGFyc2VJbnQiLCJUeXBlRXJyb3IiLCJtZXRhdmFyIiwiY2hvaWNlcyIsIlN0cmluZyIsInRvUGFyc2VyQXJncyIsImZsYXR0ZW5lZCIsImZpbHRlciIsImFwcGl1bUNsaUlnbm9yZWQiLCJNYXAiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7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QkMsTUFBaEIsQ0FBdUIsQ0FBQztBQUFDL0IsSUFBQUE7QUFBRCxHQUFELEtBQWMsQ0FBQ0EsTUFBTSxDQUFDZ0MsZ0JBQTdDLENBQWxCO0FBQ0EsU0FBTyxJQUFJQyxHQUFKLENBQ0xsRCxnQkFBRThCLEdBQUYsQ0FBTWlCLFNBQU4sRUFBaUIsQ0FBQztBQUFDOUIsSUFBQUEsTUFBRDtBQUFTekIsSUFBQUE7QUFBVCxHQUFELEtBQ2Y4QixpQkFBaUIsQ0FBQ0wsTUFBRCxFQUFTekIsT0FBVCxDQURuQixDQURLLENBQVA7QUFLRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge0FyZ3VtZW50VHlwZUVycm9yfSBmcm9tICdhcmdwYXJzZSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtmb3JtYXRFcnJvcnMgYXMgZm9ybWF0RXJyb3JzfSBmcm9tICcuLi9jb25maWctZmlsZSc7XG5pbXBvcnQge2ZsYXR0ZW5TY2hlbWEsIHZhbGlkYXRlfSBmcm9tICcuL3NjaGVtYSc7XG5pbXBvcnQge3RyYW5zZm9ybWVyc30gZnJvbSAnLi9jbGktdHJhbnNmb3JtZXJzJztcblxuLyoqXG4gKiBUaGlzIG1vZHVsZSBjb25jZXJucyBmdW5jdGlvbnMgd2hpY2ggY29udmVydCBzY2hlbWEgZGVmaW5pdGlvbnMgdG9cbiAqIGBhcmdwYXJzZWAtY29tcGF0aWJsZSBkYXRhIHN0cnVjdHVyZXMsIGZvciBkZXJpdmluZyBDTEkgYXJndW1lbnRzIGZyb20gYVxuICogc2NoZW1hLlxuICovXG5cbi8qKlxuICogTG9va3VwIG9mIHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIGB0eXBlYCBmaWVsZCBpbiBhIEpTT04gc2NoZW1hLlxuICogQHR5cGUge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsIGltcG9ydCgnanNvbi1zY2hlbWEnKS5KU09OU2NoZW1hN1R5cGVOYW1lPj59XG4gKi9cbmNvbnN0IFRZUEVOQU1FUyA9IE9iamVjdC5mcmVlemUoe1xuICBBUlJBWTogJ2FycmF5JyxcbiAgT0JKRUNUOiAnb2JqZWN0JyxcbiAgQk9PTEVBTjogJ2Jvb2xlYW4nLFxuICBJTlRFR0VSOiAnaW50ZWdlcicsXG4gIE5VTUJFUjogJ251bWJlcicsXG4gIE5VTEw6ICdudWxsJyxcbiAgU1RSSU5HOiAnc3RyaW5nJyxcbn0pO1xuXG4vKipcbiAqIE9wdGlvbnMgd2l0aCBhbGlhcyBsZW5ndGhzIGxlc3MgdGhhbiB0aGlzIHdpbGwgYmUgY29uc2lkZXJlZCBcInNob3J0XCIgZmxhZ3MuXG4gKi9cbmNvbnN0IFNIT1JUX0FSR19DVVRPRkYgPSAzO1xuXG4vKipcbiAqIENvbnZlcnQgYW4gYWxpYXMgKGBmb29gKSB0byBhIGZsYWcgKGAtLWZvb2ApIG9yIGEgc2hvcnQgZmxhZyAoYC1mYCkuXG4gKiBAcGFyYW0ge0FyZ1NwZWN9IGFyZ1NwZWMgLSB0aGUgYXJndW1lbnQgc3BlY2lmaWNhdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IFthbGlhc10gLSB0aGUgYWxpYXMgdG8gY29udmVydCB0byBhIGZsYWdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBmbGFnXG4gKi9cbmZ1bmN0aW9uIGFsaWFzVG9GbGFnIChhcmdTcGVjLCBhbGlhcykge1xuICBjb25zdCB7ZXh0VHlwZSwgZXh0TmFtZSwgbmFtZX0gPSBhcmdTcGVjO1xuICBjb25zdCBhcmcgPSBhbGlhcyA/PyBuYW1lO1xuICBjb25zdCBpc1Nob3J0ID0gYXJnLmxlbmd0aCA8IFNIT1JUX0FSR19DVVRPRkY7XG4gIGlmIChleHRUeXBlICYmIGV4dE5hbWUpIHtcbiAgICByZXR1cm4gaXNTaG9ydFxuICAgICAgPyBgLS0ke2V4dFR5cGV9LSR7Xy5rZWJhYkNhc2UoZXh0TmFtZSl9LSR7YXJnfWBcbiAgICAgIDogYC0tJHtleHRUeXBlfS0ke18ua2ViYWJDYXNlKGV4dE5hbWUpfS0ke18ua2ViYWJDYXNlKGFyZyl9YDtcbiAgfVxuICByZXR1cm4gaXNTaG9ydCA/IGAtJHthcmd9YCA6IGAtLSR7Xy5rZWJhYkNhc2UoYXJnKX1gO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3RyaW5nIHRvIFNDUkVBTUlOR19TTkFLRV9DQVNFXG4gKi9cbmNvbnN0IHNjcmVhbWluZ1NuYWtlQ2FzZSA9IF8uZmxvdyhfLnNuYWtlQ2FzZSwgXy50b1VwcGVyKTtcblxuLyoqXG4gKiBHaXZlbiB1bmlxdWUgcHJvcGVydHkgbmFtZSBgbmFtZWAsIHJldHVybiBhIGZ1bmN0aW9uIHdoaWNoIHZhbGlkYXRlcyBhIHZhbHVlXG4gKiBhZ2FpbnN0IGEgcHJvcGVydHkgd2l0aGluIHRoZSBzY2hlbWEuXG4gKiBAdGVtcGxhdGUgQ29lcmNlZFxuICogQHBhcmFtIHtBcmdTcGVjfSBhcmdTcGVjIC0gQXJndW1lbnQgbmFtZVxuICogQHBhcmFtIHsodmFsdWU6IHN0cmluZykgPT4gQ29lcmNlZH0gW2NvZXJjZV0gLSBGdW5jdGlvbiB0byBjb2VyY2UgdG8gYSBkaWZmZXJlbnRcbiAqIHByaW1pdGl2ZVxuICogQHRvZG8gU2VlIGlmIHdlIGNhbiByZW1vdmUgYGNvZXJjZWAgYnkgYWxsb3dpbmcgQWp2IHRvIGNvZXJjZSBpbiBpdHNcbiAqIGNvbnN0cnVjdG9yIG9wdGlvbnNcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIGdldFNjaGVtYVZhbGlkYXRvciAoe3JlZjogc2NoZW1hSWR9LCBjb2VyY2UgPSBfLmlkZW50aXR5KSB7XG4gIC8qKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgKi9cbiAgcmV0dXJuICh2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IGNvZXJjZWQgPSBjb2VyY2UodmFsdWUpO1xuICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlKGNvZXJjZWQsIHNjaGVtYUlkKTtcbiAgICBpZiAoXy5pc0VtcHR5KGVycm9ycykpIHtcbiAgICAgIHJldHVybiBjb2VyY2VkO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgQXJndW1lbnRUeXBlRXJyb3IoXG4gICAgICAnXFxuXFxuJyArIGZvcm1hdEVycm9ycyhlcnJvcnMsIHZhbHVlLCB7c2NoZW1hSWR9KSxcbiAgICApO1xuICB9O1xufVxuXG4vKipcbiAqIERldGVybWluZSB0aGUgZGVzY3JpcHRpb24gZm9yIGRpc3BsYXkgb24gdGhlIENMSSwgZ2l2ZW4gdGhlIHNjaGVtYS5cbiAqIEBwYXJhbSB7QXBwaXVtSlNPTlNjaGVtYX0gc2NoZW1hXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBtYWtlRGVzY3JpcHRpb24gKHNjaGVtYSkge1xuICBjb25zdCB7YXBwaXVtQ2xpRGVzY3JpcHRpb24sIGRlc2NyaXB0aW9uID0gJycsIGFwcGl1bURlcHJlY2F0ZWR9ID0gc2NoZW1hO1xuICBsZXQgZGVzYyA9IGFwcGl1bUNsaURlc2NyaXB0aW9uID8/IGRlc2NyaXB0aW9uO1xuICBpZiAoYXBwaXVtRGVwcmVjYXRlZCkge1xuICAgIGRlc2MgPSBgW0RFUFJFQ0FURURdICR7ZGVzY31gO1xuICB9XG4gIHJldHVybiBkZXNjO1xufVxuXG4vKipcbiAqIEdpdmVuIGFyZyBgbmFtZWAsIGEgSlNPTiBzY2hlbWEgYHN1YlNjaGVtYWAsIGFuZCBvcHRpb25zLCByZXR1cm4gYW4gYXJndW1lbnQgZGVmaW5pdGlvblxuICogYXMgdW5kZXJzdG9vZCBieSBgYXJncGFyc2VgLlxuICogQHBhcmFtIHtBcHBpdW1KU09OU2NoZW1hfSBzdWJTY2hlbWEgLSBKU09OIHNjaGVtYSBmb3IgdGhlIG9wdGlvblxuICogQHBhcmFtIHtBcmdTcGVjfSBhcmdTcGVjIC0gQXJndW1lbnQgc3BlYyB0dXBsZVxuICogQHJldHVybnMge1tzdHJpbmdbXSwgaW1wb3J0KCdhcmdwYXJzZScpLkFyZ3VtZW50T3B0aW9uc119IFR1cGxlIG9mIGZsYWcgYW5kIG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gc3ViU2NoZW1hVG9BcmdEZWYgKHN1YlNjaGVtYSwgYXJnU3BlYykge1xuICBsZXQge1xuICAgIHR5cGUsXG4gICAgYXBwaXVtQ2xpQWxpYXNlcyxcbiAgICBhcHBpdW1DbGlUcmFuc2Zvcm1lcixcbiAgICBlbnVtOiBlbnVtVmFsdWVzLFxuICB9ID0gc3ViU2NoZW1hO1xuXG4gIGNvbnN0IHtuYW1lLCBhcmd9ID0gYXJnU3BlYztcblxuICBjb25zdCBhbGlhc2VzID0gW1xuICAgIGFsaWFzVG9GbGFnKGFyZ1NwZWMpLFxuICAgIC4uLi8qKiBAdHlwZSB7c3RyaW5nW119ICovIChhcHBpdW1DbGlBbGlhc2VzID8/IFtdKS5tYXAoKGFsaWFzKSA9PlxuICAgICAgYWxpYXNUb0ZsYWcoYXJnU3BlYywgYWxpYXMpLFxuICAgICksXG4gIF07XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ2FyZ3BhcnNlJykuQXJndW1lbnRPcHRpb25zfSAqL1xuICBsZXQgYXJnT3B0cyA9IHtcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgaGVscDogbWFrZURlc2NyaXB0aW9uKHN1YlNjaGVtYSlcbiAgfTtcblxuICAvKipcbiAgICogR2VuZXJhbGx5IHdlIHdpbGwgcHJvdmlkZSBhIGB0eXBlYCB0byBgYXJncGFyc2VgIGFzIGEgZnVuY3Rpb24gd2hpY2hcbiAgICogdmFsaWRhdGVzIHVzaW5nIGFqdiAod2hpY2ggaXMgbXVjaCBtb3JlIGZ1bGwtZmVhdHVyZWQgdGhhbiB3aGF0IGBhcmdwYXJzZWBcbiAgICogY2FuIG9mZmVyKS4gVGhlIGV4Y2VwdGlvbiBpcyBgYm9vbGVhbmAtdHlwZSBvcHRpb25zLCB3aGljaCBoYXZlIG5vXG4gICAqIGBhcmdUeXBlYC5cbiAgICpcbiAgICogTm90IHN1cmUgaWYgdGhpcyB0eXBlIGlzIGNvcnJlY3QsIGJ1dCBpdCdzIG5vdCBkb2luZyB3aGF0IEkgd2FudC4gIEkgd2FudFxuICAgKiB0byBzYXkgXCJ0aGlzIGlzIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBzb21ldGhpbmcgb2YgdHlwZSBgVGAgd2hlcmUgYFRgIGlzXG4gICAqIG5ldmVyIGEgYFByb21pc2VgXCIuICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgc3luYy5cbiAgICogQHR5cGUgeygodmFsdWU6IHN0cmluZykgPT4gdW5rbm93bil8dW5kZWZpbmVkfVxuICAgKi9cbiAgbGV0IGFyZ1R5cGVGdW5jdGlvbjtcblxuICAvLyBoYW5kbGUgc3BlY2lhbCBjYXNlcyBmb3IgdmFyaW91cyB0eXBlc1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAvLyBib29sZWFucyBkbyBub3QgaGF2ZSBhIHR5cGUgcGVyIGBBcmd1bWVudE9wdGlvbnNgLCBqdXN0IGFuIFwiYWN0aW9uXCJcbiAgICBjYXNlIFRZUEVOQU1FUy5CT09MRUFOOiB7XG4gICAgICBhcmdPcHRzLmFjdGlvbiA9ICdzdG9yZV9jb25zdCc7XG4gICAgICBhcmdPcHRzLmNvbnN0ID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgVFlQRU5BTUVTLk9CSkVDVDoge1xuICAgICAgYXJnVHlwZUZ1bmN0aW9uID0gdHJhbnNmb3JtZXJzLmpzb247XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBhcnJheXMgYXJlIHRyZWF0ZWQgYXMgQ1NWcywgYmVjYXVzZSBgYXJncGFyc2VgIGRvZXNuJ3QgaGFuZGxlIGFycmF5IGRhdGEuXG4gICAgY2FzZSBUWVBFTkFNRVMuQVJSQVk6IHtcbiAgICAgIGFyZ1R5cGVGdW5jdGlvbiA9IHRyYW5zZm9ybWVycy5jc3Y7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBcIm51bWJlclwiIHR5cGUgaXMgY29lcmNlZCB0byBmbG9hdC4gYGFyZ3BhcnNlYCBkb2VzIHRoaXMgZm9yIHVzIGlmIHdlIHVzZSBgZmxvYXRgIHR5cGUsIGJ1dFxuICAgIC8vIHdlIGRvbid0LlxuICAgIGNhc2UgVFlQRU5BTUVTLk5VTUJFUjoge1xuICAgICAgYXJnVHlwZUZ1bmN0aW9uID0gZ2V0U2NoZW1hVmFsaWRhdG9yKGFyZ1NwZWMsIHBhcnNlRmxvYXQpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gXCJpbnRlZ2VyXCIgaXMgY29lcmNlZCB0byBhbiAuLiBpbnRlZ2VyLiAgYWdhaW4sIGBhcmdwYXJzZWAgd291bGQgZG8gdGhpcyBmb3IgdXMgaWYgd2UgdXNlZCBgaW50YC5cbiAgICBjYXNlIFRZUEVOQU1FUy5JTlRFR0VSOiB7XG4gICAgICBhcmdUeXBlRnVuY3Rpb24gPSBnZXRTY2hlbWFWYWxpZGF0b3IoYXJnU3BlYywgXy5wYXJzZUludCk7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBzdHJpbmdzIChsaWtlIG51bWJlciBhbmQgaW50ZWdlcikgYXJlIHN1YmplY3QgdG8gZnVydGhlciB2YWxpZGF0aW9uXG4gICAgLy8gKGUuZy4sIG11c3Qgc2F0aXNmeSBhIG1hc2sgb3IgcmVnZXggb3IgZXZlbiBzb21lIGN1c3RvbSB2YWxpZGF0aW9uXG4gICAgLy8gZnVuY3Rpb24pXG4gICAgY2FzZSBUWVBFTkFNRVMuU1RSSU5HOiB7XG4gICAgICBhcmdUeXBlRnVuY3Rpb24gPSBnZXRTY2hlbWFWYWxpZGF0b3IoYXJnU3BlYyk7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiB0aGVyZSBtYXkgYmUgc29tZSB3YXkgdG8gcmVzdHJpY3QgdGhpcyBhdCB0aGUgQWp2IGxldmVsIC0tXG4gICAgLy8gdGhhdCBtYXkgaW52b2x2ZSBwYXRjaGluZyB0aGUgbWV0YXNjaGVtYS5cbiAgICBjYXNlIFRZUEVOQU1FUy5OVUxMOlxuICAgIC8vIGZhbGxzIHRocm91Z2hcbiAgICBkZWZhdWx0OiB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBgU2NoZW1hIHByb3BlcnR5IFwiJHthcmd9XCI6IFxcYCR7dHlwZX1cXGAgdHlwZSB1bmtub3duIG9yIGRpc2FsbG93ZWRgLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBtZXRhdmFyIGlzIHVzZWQgaW4gaGVscCB0ZXh0LiBgYm9vbGVhbmAgY2Fubm90IGhhdmUgYSBtZXRhdmFyLS1pdCBpcyBub3RcbiAgLy8gZGlzcGxheWVkLS1hbmQgYGFyZ3BhcnNlYCB0aHJvd3MgaWYgeW91IGdpdmUgaXQgb25lLlxuICBpZiAodHlwZSAhPT0gVFlQRU5BTUVTLkJPT0xFQU4pIHtcbiAgICBhcmdPcHRzLm1ldGF2YXIgPSBzY3JlYW1pbmdTbmFrZUNhc2UobmFtZSk7XG4gIH1cblxuICAvLyB0aGUgdmFsaWRpdHkgb2YgXCJhcHBpdW1DbGlUcmFuc2Zvcm1lclwiIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBkZXRlcm1pbmVkXG4gIC8vIGJ5IGFqdiBkdXJpbmcgc2NoZW1hIHZhbGlkYXRpb24gaW4gYGZpbmFsaXplU2NoZW1hKClgLiB0aGUgYGFycmF5YCAmXG4gIC8vIGBvYmplY3RgIHR5cGVzIGhhdmUgYWxyZWFkeSBhZGRlZCBhIGZvcm1hdHRlciAoc2VlIGFib3ZlLCBzbyB3ZSBkb24ndCBkbyBpdFxuICAvLyB0d2ljZSkuXG4gIGlmIChcbiAgICB0eXBlICE9PSBUWVBFTkFNRVMuQVJSQVkgJiZcbiAgICB0eXBlICE9PSBUWVBFTkFNRVMuT0JKRUNUICYmXG4gICAgYXBwaXVtQ2xpVHJhbnNmb3JtZXJcbiAgKSB7XG4gICAgYXJnVHlwZUZ1bmN0aW9uID0gXy5mbG93KFxuICAgICAgYXJnVHlwZUZ1bmN0aW9uID8/IF8uaWRlbnRpdHksXG4gICAgICB0cmFuc2Zvcm1lcnNbYXBwaXVtQ2xpVHJhbnNmb3JtZXJdLFxuICAgICk7XG4gIH1cblxuICBpZiAoYXJnVHlwZUZ1bmN0aW9uKSB7XG4gICAgYXJnT3B0cy50eXBlID0gYXJnVHlwZUZ1bmN0aW9uO1xuICB9XG5cbiAgLy8gY29udmVydCBKU09OIHNjaGVtYSBgZW51bWAgdG8gYGNob2ljZXNgLiBgZW51bWAgY2FuIGNvbnRhaW4gYW55IEpTT04gdHlwZSwgYnV0IGBhcmdwYXJzZWBcbiAgLy8gaXMgbGltaXRlZCB0byBhIHNpbmdsZSB0eXBlIHBlciBhcmcgKEkgdGhpbmspLiAgc28gbGV0J3MgbWFrZSBldmVyeXRoaW5nIGEgc3RyaW5nLlxuICAvLyBhbmQgbWlnaHQgYXMgd2VsbCBfcmVxdWlyZV8gdGhlIGB0eXBlOiBzdHJpbmdgIHdoaWxlIHdlJ3JlIGF0IGl0LlxuICBpZiAoZW51bVZhbHVlcyAmJiAhXy5pc0VtcHR5KGVudW1WYWx1ZXMpKSB7XG4gICAgaWYgKHR5cGUgPT09IFRZUEVOQU1FUy5TVFJJTkcpIHtcbiAgICAgIGFyZ09wdHMuY2hvaWNlcyA9IGVudW1WYWx1ZXMubWFwKFN0cmluZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIGBQcm9ibGVtIHdpdGggc2NoZW1hIGZvciAke2FyZ307IFxcYGVudW1cXGAgaXMgb25seSBzdXBwb3J0ZWQgZm9yIFxcYHR5cGU6ICdzdHJpbmcnXFxgYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFthbGlhc2VzLCBhcmdPcHRzXTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZmluYWxpemVkLCBmbGF0dGVuZWQgc2NoZW1hIHJlcHJlc2VudGF0aW9uIGludG9cbiAqIEFyZ3VtZW50RGVmaW5pdGlvbnMgZm9yIGhhbmRvZmYgdG8gYGFyZ3BhcnNlYC5cbiAqXG4gKiBAdGhyb3dzIElmIHNjaGVtYSBoYXMgbm90IGJlZW4gYWRkZWQgdG8gYWp2ICh2aWEgYGZpbmFsaXplU2NoZW1hKClgKVxuICogQHJldHVybnMge2ltcG9ydCgnLi4vY2xpL2FyZ3MnKS5Bcmd1bWVudERlZmluaXRpb25zfSBBIG1hcCBvZiBhcnJ5YXMgb2ZcbiAqIGFsaWFzZXMgdG8gYGFyZ3BhcnNlYCBhcmd1bWVudHM7IGVtcHR5IGlmIG5vIHNjaGVtYSBmb3VuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9QYXJzZXJBcmdzICgpIHtcbiAgY29uc3QgZmxhdHRlbmVkID0gZmxhdHRlblNjaGVtYSgpLmZpbHRlcigoe3NjaGVtYX0pID0+ICFzY2hlbWEuYXBwaXVtQ2xpSWdub3JlZCk7XG4gIHJldHVybiBuZXcgTWFwKFxuICAgIF8ubWFwKGZsYXR0ZW5lZCwgKHtzY2hlbWEsIGFyZ1NwZWN9KSA9PlxuICAgICAgc3ViU2NoZW1hVG9BcmdEZWYoc2NoZW1hLCBhcmdTcGVjKSxcbiAgICApLFxuICApO1xufVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhanYvZGlzdC90eXBlcycpLkZvcm1hdFZhbGlkYXRvcjxUPn0gRm9ybWF0VmFsaWRhdG9yPFQ+XG4gKi9cblxuLyoqXG4gKiBBIEpTT04gNyBzY2hlbWEgd2l0aCBvdXIgY3VzdG9tIGtleXdvcmRzLlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9rZXl3b3JkcycpLkFwcGl1bUpTT05TY2hlbWFLZXl3b3JkcyAmIGltcG9ydCgnanNvbi1zY2hlbWEnKS5KU09OU2NoZW1hN30gQXBwaXVtSlNPTlNjaGVtYVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9hcmctc3BlYycpLkFyZ1NwZWN9IEFyZ1NwZWNcbiAqL1xuIl0sImZpbGUiOiJsaWIvc2NoZW1hL2NsaS1hcmdzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.validate = exports.resetSchema = exports.registerSchema = exports.isFinalized = exports.isAllowedSchemaFileExtension = exports.hasArgSpec = exports.getSchema = exports.
|
|
8
|
+
exports.validate = exports.resetSchema = exports.registerSchema = exports.isFinalized = exports.isAllowedSchemaFileExtension = exports.hasArgSpec = exports.getSchema = exports.getDefaultsForSchema = exports.getDefaultsForExtension = exports.getArgSpec = exports.flattenSchema = exports.finalizeSchema = exports.SchemaUnsupportedSchemaError = exports.SchemaUnknownSchemaError = exports.SchemaNameConflictError = exports.SchemaFinalizationError = exports.ALLOWED_SCHEMA_EXTENSIONS = void 0;
|
|
9
9
|
|
|
10
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
11
|
|
|
@@ -50,7 +50,7 @@ class AppiumSchema {
|
|
|
50
50
|
const instance = (_AppiumSchema$_instan = AppiumSchema._instance) !== null && _AppiumSchema$_instan !== void 0 ? _AppiumSchema$_instan : new AppiumSchema();
|
|
51
51
|
AppiumSchema._instance = instance;
|
|
52
52
|
|
|
53
|
-
_lodash.default.bindAll(instance, ['finalize', 'flatten', 'getArgSpec', 'getDefaults', 'getSchema', 'hasArgSpec', 'isFinalized', 'registerSchema', 'reset', 'validate']);
|
|
53
|
+
_lodash.default.bindAll(instance, ['finalize', 'flatten', 'getArgSpec', 'getDefaults', 'getDefaultsForExtension', 'getSchema', 'hasArgSpec', 'isFinalized', 'registerSchema', 'reset', 'validate']);
|
|
54
54
|
|
|
55
55
|
return instance;
|
|
56
56
|
}
|
|
@@ -146,8 +146,12 @@ class AppiumSchema {
|
|
|
146
146
|
}
|
|
147
147
|
|
|
148
148
|
registerSchema(extType, extName, schema) {
|
|
149
|
-
if (!(extType && extName
|
|
150
|
-
throw new TypeError('Expected
|
|
149
|
+
if (!(extType && extName) || _lodash.default.isUndefined(schema)) {
|
|
150
|
+
throw new TypeError('Expected extension type, extension name, and a defined schema');
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (!AppiumSchema.isSupportedSchemaType(schema)) {
|
|
154
|
+
throw new SchemaUnsupportedSchemaError(schema, extType, extName);
|
|
151
155
|
}
|
|
152
156
|
|
|
153
157
|
const normalizedExtName = _lodash.default.kebabCase(extName);
|
|
@@ -173,12 +177,12 @@ class AppiumSchema {
|
|
|
173
177
|
return this._argSpecs.has(_argSpec.ArgSpec.toArg(name, extType, extName));
|
|
174
178
|
}
|
|
175
179
|
|
|
176
|
-
getDefaults() {
|
|
180
|
+
getDefaults(flatten = true) {
|
|
177
181
|
if (!this.isFinalized()) {
|
|
178
182
|
throw new SchemaFinalizationError();
|
|
179
183
|
}
|
|
180
184
|
|
|
181
|
-
|
|
185
|
+
const reducer = flatten ? (defaults, {
|
|
182
186
|
defaultValue,
|
|
183
187
|
dest
|
|
184
188
|
}) => {
|
|
@@ -186,6 +190,35 @@ class AppiumSchema {
|
|
|
186
190
|
defaults[dest] = defaultValue;
|
|
187
191
|
}
|
|
188
192
|
|
|
193
|
+
return defaults;
|
|
194
|
+
} : (defaults, {
|
|
195
|
+
defaultValue,
|
|
196
|
+
dest
|
|
197
|
+
}) => {
|
|
198
|
+
if (!_lodash.default.isUndefined(defaultValue)) {
|
|
199
|
+
_lodash.default.set(defaults, dest, defaultValue);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
return defaults;
|
|
203
|
+
};
|
|
204
|
+
const retval = {};
|
|
205
|
+
return [...this._argSpecs.values()].reduce(reducer, retval);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
getDefaultsForExtension(extType, extName) {
|
|
209
|
+
if (!this.isFinalized()) {
|
|
210
|
+
throw new SchemaFinalizationError();
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
const specs = [...this._argSpecs.values()].filter(spec => spec.extType === extType && spec.extName === extName);
|
|
214
|
+
return specs.reduce((defaults, {
|
|
215
|
+
defaultValue,
|
|
216
|
+
rawDest
|
|
217
|
+
}) => {
|
|
218
|
+
if (!_lodash.default.isUndefined(defaultValue)) {
|
|
219
|
+
defaults[rawDest] = defaultValue;
|
|
220
|
+
}
|
|
221
|
+
|
|
189
222
|
return defaults;
|
|
190
223
|
}, {});
|
|
191
224
|
}
|
|
@@ -283,6 +316,10 @@ class AppiumSchema {
|
|
|
283
316
|
return ALLOWED_SCHEMA_EXTENSIONS.has(_path.default.extname(filename));
|
|
284
317
|
}
|
|
285
318
|
|
|
319
|
+
static isSupportedSchemaType(schema) {
|
|
320
|
+
return _lodash.default.isPlainObject(schema) && schema.$async !== true;
|
|
321
|
+
}
|
|
322
|
+
|
|
286
323
|
}
|
|
287
324
|
|
|
288
325
|
(0, _defineProperty2.default)(AppiumSchema, "_instance", void 0);
|
|
@@ -325,6 +362,38 @@ class SchemaUnknownSchemaError extends ReferenceError {
|
|
|
325
362
|
}
|
|
326
363
|
|
|
327
364
|
exports.SchemaUnknownSchemaError = SchemaUnknownSchemaError;
|
|
365
|
+
|
|
366
|
+
class SchemaUnsupportedSchemaError extends TypeError {
|
|
367
|
+
constructor(schema, extType, extName) {
|
|
368
|
+
super((() => {
|
|
369
|
+
let msg = `Unsupported schema from ${extType} "${extName}":`;
|
|
370
|
+
|
|
371
|
+
if (_lodash.default.isBoolean(schema)) {
|
|
372
|
+
return `${msg} schema cannot be a boolean`;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
if (_lodash.default.isPlainObject(schema)) {
|
|
376
|
+
if (schema.$async) {
|
|
377
|
+
return `${msg} schema cannot be an async schema`;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
throw new TypeError(`schema IS supported; this error should not be thrown (this is a bug). value of schema: ${JSON.stringify(schema)}`);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
return `${msg} schema must be a plain object without a true "$async" property`;
|
|
384
|
+
})());
|
|
385
|
+
(0, _defineProperty2.default)(this, "code", 'APPIUMERR_SCHEMA_UNSUPPORTED_SCHEMA');
|
|
386
|
+
(0, _defineProperty2.default)(this, "data", void 0);
|
|
387
|
+
this.data = {
|
|
388
|
+
schema,
|
|
389
|
+
extType,
|
|
390
|
+
extName
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
exports.SchemaUnsupportedSchemaError = SchemaUnsupportedSchemaError;
|
|
328
397
|
const appiumSchema = AppiumSchema.create();
|
|
329
398
|
const {
|
|
330
399
|
registerSchema,
|
|
@@ -336,9 +405,11 @@ const {
|
|
|
336
405
|
validate,
|
|
337
406
|
getSchema,
|
|
338
407
|
flatten: flattenSchema,
|
|
339
|
-
getDefaults:
|
|
408
|
+
getDefaults: getDefaultsForSchema,
|
|
409
|
+
getDefaultsForExtension
|
|
340
410
|
} = appiumSchema;
|
|
341
|
-
exports.
|
|
411
|
+
exports.getDefaultsForExtension = getDefaultsForExtension;
|
|
412
|
+
exports.getDefaultsForSchema = getDefaultsForSchema;
|
|
342
413
|
exports.flattenSchema = flattenSchema;
|
|
343
414
|
exports.getSchema = getSchema;
|
|
344
415
|
exports.validate = validate;
|
|
@@ -354,4 +425,4 @@ const {
|
|
|
354
425
|
exports.isAllowedSchemaFileExtension = isAllowedSchemaFileExtension;require('source-map-support').install();
|
|
355
426
|
|
|
356
427
|
|
|
357
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zY2hlbWEvc2NoZW1hLmpzIl0sIm5hbWVzIjpbIkFMTE9XRURfU0NIRU1BX0VYVEVOU0lPTlMiLCJTZXQiLCJBcHBpdW1TY2hlbWEiLCJjb25zdHJ1Y3RvciIsIlJlYWRvbmx5TWFwIiwiRFJJVkVSX1RZUEUiLCJNYXAiLCJQTFVHSU5fVFlQRSIsIl9hanYiLCJfaW5zdGFudGlhdGVBanYiLCJjcmVhdGUiLCJpbnN0YW5jZSIsIl9pbnN0YW5jZSIsIl8iLCJiaW5kQWxsIiwiaGFzUmVnaXN0ZXJlZFNjaGVtYSIsImV4dFR5cGUiLCJleHROYW1lIiwiX3JlZ2lzdGVyZWRTY2hlbWFzIiwiaGFzIiwiaXNGaW5hbGl6ZWQiLCJCb29sZWFuIiwiX2ZpbmFsaXplZFNjaGVtYXMiLCJmaW5hbGl6ZSIsImFqdiIsImJhc2VTY2hlbWEiLCJjbG9uZURlZXAiLCJhcHBpdW1Db25maWdTY2hlbWEiLCJhZGRBcmdTcGVjcyIsInNjaGVtYSIsInByb3BOYW1lIiwicHJvcFNjaGVtYSIsIk9iamVjdCIsImVudHJpZXMiLCJhcmdTcGVjIiwiQXJnU3BlYyIsImRlc3QiLCJhcHBpdW1DbGlEZXN0IiwiZGVmYXVsdFZhbHVlIiwiZGVmYXVsdCIsImFyZyIsIl9hcmdTcGVjcyIsInNldCIsIm9taXQiLCJwcm9wZXJ0aWVzIiwic2VydmVyIiwiZmluYWxpemVkU2NoZW1hcyIsImZpbmFsU2NoZW1hIiwicmVkdWNlIiwiZXh0ZW5zaW9uU2NoZW1hcyIsImZvckVhY2giLCIkcmVmIiwidG9TY2hlbWFCYXNlUmVmIiwiJGlkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCIkY29tbWVudCIsInZhbGlkYXRlU2NoZW1hIiwiYWRkU2NoZW1hIiwiQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQiLCJmcmVlemUiLCJBanYiLCJhbGxFcnJvcnMiLCJrZXl3b3JkcyIsImtleXdvcmQiLCJhZGRLZXl3b3JkIiwicmVzZXQiLCJzY2hlbWFJZCIsImtleXMiLCJyZW1vdmVTY2hlbWEiLCJyZWdpc3RlclNjaGVtYSIsImlzRW1wdHkiLCJUeXBlRXJyb3IiLCJub3JtYWxpemVkRXh0TmFtZSIsImtlYmFiQ2FzZSIsImdldCIsIlNjaGVtYU5hbWVDb25mbGljdEVycm9yIiwiZ2V0QXJnU3BlYyIsIm5hbWUiLCJ0b0FyZyIsImhhc0FyZ1NwZWMiLCJnZXREZWZhdWx0cyIsIlNjaGVtYUZpbmFsaXphdGlvbkVycm9yIiwidmFsdWVzIiwiZGVmYXVsdHMiLCJpc1VuZGVmaW5lZCIsImZsYXR0ZW4iLCJnZXRTY2hlbWEiLCJzdGFjayIsInByZWZpeCIsImZsYXR0ZW5lZCIsInBhaXJzIiwidG9QYWlycyIsImtleSIsInZhbHVlIiwicHVzaCIsIlNFUlZFUl9QUk9QX05BTUUiLCJyZWZTY2hlbWEiLCJlcnIiLCJTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IiLCJleHRlbnNpb25JbmZvRnJvbVJvb3RTY2hlbWFJZCIsIlJlZmVyZW5jZUVycm9yIiwicmVmIiwiX2dldFZhbGlkYXRvciIsImlkIiwidmFsaWRhdG9yIiwidmFsaWRhdGUiLCJpc0FycmF5IiwiZXJyb3JzIiwiaXNBbGxvd2VkU2NoZW1hRmlsZUV4dGVuc2lvbiIsImZpbGVuYW1lIiwicGF0aCIsImV4dG5hbWUiLCJFcnJvciIsImRhdGEiLCJhcHBpdW1TY2hlbWEiLCJmaW5hbGl6ZVNjaGVtYSIsInJlc2V0U2NoZW1hIiwiZmxhdHRlblNjaGVtYSIsImdldERlZmF1bHRzRnJvbVNjaGVtYSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUtPLE1BQU1BLHlCQUF5QixHQUFHLElBQUlDLEdBQUosQ0FBUSxDQUFDLE9BQUQsRUFBVSxLQUFWLEVBQWlCLE1BQWpCLENBQVIsQ0FBbEM7OztBQU9QLE1BQU1DLFlBQU4sQ0FBbUI7QUFtRGpCQyxFQUFBQSxXQUFXLEdBQUk7QUFBQSxxREF6Q0gsSUFBSUMsa0JBQUosRUF5Q0c7QUFBQSw4REEvQk07QUFB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RStELFFBQUYsRUFBWTtBQUNyQixVQUFPLG9CQUFtQkEsUUFBUyxHQUFuQztBQURxQixnREFWaEIsaUNBVWdCO0FBQUE7QUFFckIsU0FBSytDLElBQUwsR0FBWTtBQUFDL0MsTUFBQUE7QUFBRCxLQUFaO0FBQ0Q7O0FBakIwRDs7O0FBb0I3RCxNQUFNZ0QsWUFBWSxHQUFHaEgsWUFBWSxDQUFDUSxNQUFiLEVBQXJCO0FBRU8sTUFBTTtBQUNYMkQsRUFBQUEsY0FEVztBQUVYTyxFQUFBQSxVQUZXO0FBR1hHLEVBQUFBLFVBSFc7QUFJWDNELEVBQUFBLFdBSlc7QUFLWEcsRUFBQUEsUUFBUSxFQUFFNEYsY0FMQztBQU1YbEQsRUFBQUEsS0FBSyxFQUFFbUQsV0FOSTtBQU9YWCxFQUFBQSxRQVBXO0FBUVhuQixFQUFBQSxTQVJXO0FBU1hELEVBQUFBLE9BQU8sRUFBRWdDLGFBVEU7QUFVWHJDLEVBQUFBLFdBQVcsRUFBRXNDO0FBVkYsSUFXVEosWUFYRzs7Ozs7Ozs7Ozs7QUFZQSxNQUFNO0FBQUNOLEVBQUFBO0FBQUQsSUFBaUMxRyxZQUF2QyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQWp2IGZyb20gJ2Fqdic7XG5pbXBvcnQgYWRkRm9ybWF0cyBmcm9tICdhanYtZm9ybWF0cyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQge0RSSVZFUl9UWVBFLCBQTFVHSU5fVFlQRX0gZnJvbSAnLi4vZXh0ZW5zaW9uLWNvbmZpZyc7XG5pbXBvcnQge1JlYWRvbmx5TWFwfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgYXBwaXVtQ29uZmlnU2NoZW1hIGZyb20gJy4vYXBwaXVtLWNvbmZpZy1zY2hlbWEnO1xuaW1wb3J0IHtBcmdTcGVjLCBTRVJWRVJfUFJPUF9OQU1FLCBBUFBJVU1fQ09ORklHX1NDSEVNQV9JRH0gZnJvbSAnLi9hcmctc3BlYyc7XG5pbXBvcnQge2tleXdvcmRzfSBmcm9tICcuL2tleXdvcmRzJztcblxuLyoqXG4gKiBFeHRlbnNpb25zIHRoYXQgYW4gZXh0ZW5zaW9uIHNjaGVtYSBmaWxlIGNhbiBoYXZlLlxuICovXG5leHBvcnQgY29uc3QgQUxMT1dFRF9TQ0hFTUFfRVhURU5TSU9OUyA9IG5ldyBTZXQoWycuanNvbicsICcuanMnLCAnLmNqcyddKTtcblxuLyoqXG4gKiBBIHdyYXBwZXIgYXJvdW5kIEFqdiBhbmQgc2NoZW1hLXJlbGF0ZWQgZnVuY3Rpb25zLlxuICpcbiAqIFNob3VsZCBoYXZlIGJlZW4gbmFtZWQgSGlnaGxhbmRlciwgYmVjYXVzZSBfdGhlcmUgY2FuIG9ubHkgYmUgb25lX1xuICovXG5jbGFzcyBBcHBpdW1TY2hlbWEge1xuICAvKipcbiAgICogQSBtYXBwaW5nIG9mIHVuaXF1ZSBhcmd1bWVudCBJRHMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyB7QGxpbmsgQXJnU3BlY31zLlxuICAgKlxuICAgKiBBbiBcImFyZ3VtZW50XCIgaXMgYSBDTEkgYXJndW1lbnQgb3IgYSBjb25maWcgcHJvcGVydHkuXG4gICAqXG4gICAqIFVzZWQgdG8gcHJvdmlkZSBlYXN5IGxvb2t1cHMgb2YgYXJndW1lbnQgbWV0YWRhdGEgd2hlbiBjb252ZXJ0aW5nIGJldHdlZW4gZGlmZmVyZW50IHJlcHJlc2VudGF0aW9ucyBvZiB0aG9zZSBhcmd1bWVudHMuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSZWFkb25seU1hcDxzdHJpbmcsQXJnU3BlYz59XG4gICAqL1xuICBfYXJnU3BlY3MgPSBuZXcgUmVhZG9ubHlNYXAoKTtcblxuICAvKipcbiAgICogQSBtYXAgb2YgZXh0ZW5zaW9uIHR5cGVzIHRvIGV4dGVuc2lvbiBuYW1lcyB0byBzY2hlbWEgb2JqZWN0cy5cbiAgICpcbiAgICogVGhpcyBkYXRhIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gbmFtaW5nIGNvbmZsaWN0cy4gVGhlIHNjaGVtYXNcbiAgICogYXJlIHN0b3JlZCBoZXJlIGluIG1lbW9yeSB1bnRpbCB0aGUgaW5zdGFuY2UgaXMgX2ZpbmFsaXplZF8uXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSZWNvcmQ8RXh0ZW5zaW9uVHlwZSxNYXA8c3RyaW5nLFNjaGVtYU9iamVjdD4+fVxuICAgKi9cbiAgX3JlZ2lzdGVyZWRTY2hlbWFzID0ge1tEUklWRVJfVFlQRV06IG5ldyBNYXAoKSwgW1BMVUdJTl9UWVBFXTogbmV3IE1hcCgpfTtcblxuICAvKipcbiAgICogQWp2IGluc3RhbmNlXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtBanZ9XG4gICAqL1xuICBfYWp2O1xuXG4gIC8qKlxuICAgKiBTaW5nbGV0b24gaW5zdGFuY2UuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtBcHBpdW1TY2hlbWF9XG4gICAqL1xuICBzdGF0aWMgX2luc3RhbmNlO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgb2Ygc2NoZW1hIElEcyB0byBmaW5hbGl6ZWQgc2NoZW1hcy5cbiAgICpcbiAgICogVGhpcyBkb2VzIG5vdCBpbmNsdWRlIHJlZmVyZW5jZXMsIGJ1dCByYXRoZXIgdGhlIHJvb3Qgc2NoZW1hcyB0aGVtc2VsdmVzLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxTdHJpY3RTY2hlbWFPYmplY3Q+P31cbiAgICovXG4gIF9maW5hbGl6ZWRTY2hlbWFzID0gbnVsbDtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgQWp2LCBhZGRzIHN0YW5kYXJkIGZvcm1hdHMgYW5kIG91ciBjdXN0b20ga2V5d29yZHMuXG4gICAqIEBzZWUgaHR0cHM6Ly9ucG0uaW0vYWp2LWZvcm1hdHNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLl9hanYgPSBBcHBpdW1TY2hlbWEuX2luc3RhbnRpYXRlQWp2KCk7XG4gIH1cblxuICAvKipcbiAgICogRmFjdG9yeSBmdW5jdGlvbiBmb3Ige0BsaW5rIEFwcGl1bVNjaGVtYX0gaW5zdGFuY2VzLlxuICAgKlxuICAgKiBSZXR1cm5zIGEgc2luZ2xldG9uIGluc3RhbmNlIGlmIG9uZSBleGlzdHMsIG90aGVyd2lzZSBjcmVhdGVzIGEgbmV3IG9uZS5cbiAgICogQmluZHMgcHVibGljIG1ldGhvZHMgdG8gdGhlIGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7QXBwaXVtU2NoZW1hfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZSAoKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBBcHBpdW1TY2hlbWEuX2luc3RhbmNlID8/IG5ldyBBcHBpdW1TY2hlbWEoKTtcbiAgICBBcHBpdW1TY2hlbWEuX2luc3RhbmNlID0gaW5zdGFuY2U7XG5cbiAgICBfLmJpbmRBbGwoaW5zdGFuY2UsIFtcbiAgICAgICdmaW5hbGl6ZScsXG4gICAgICAnZmxhdHRlbicsXG4gICAgICAnZ2V0QXJnU3BlYycsXG4gICAgICAnZ2V0RGVmYXVsdHMnLFxuICAgICAgJ2dldFNjaGVtYScsXG4gICAgICAnaGFzQXJnU3BlYycsXG4gICAgICAnaXNGaW5hbGl6ZWQnLFxuICAgICAgJ3JlZ2lzdGVyU2NoZW1hJyxcbiAgICAgICdyZXNldCcsXG4gICAgICAndmFsaWRhdGUnLFxuICAgIF0pO1xuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIGEgc2NoZW1hIGhhcyBiZWVuIHJlZ2lzdGVyZWQgdXNpbmcgZ2l2ZW4gZXh0ZW5zaW9uIHR5cGUgYW5kIG5hbWUuXG4gICAqXG4gICAqIFRoaXMgZG9lcyBub3QgZGVwZW5kIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBpbnN0YW5jZSBoYXMgYmVlbiBfZmluYWxpemVkXy5cbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBleHRUeXBlIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBOYW1lXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBJZiByZWdpc3RlcmVkXG4gICAqL1xuICBoYXNSZWdpc3RlcmVkU2NoZW1hIChleHRUeXBlLCBleHROYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzW2V4dFR5cGVdLmhhcyhleHROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYHRydWVgIGlmIHtAbGluayBBcHBpdW1TY2hlbWEuZmluYWxpemUgZmluYWxpemV9IGhhcyBiZWVuIGNhbGxlZFxuICAgKiBzdWNjZXNzZnVsbHkgYW5kIHtAbGluayBBcHBpdW1TY2hlbWEucmVzZXQgcmVzZXR9IGhhcyBub3QgYmVlbiBjYWxsZWQgc2luY2UuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBJZiBmaW5hbGl6ZWRcbiAgICovXG4gIGlzRmluYWxpemVkICgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLl9maW5hbGl6ZWRTY2hlbWFzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgd2hlbiBubyBtb3JlIHNjaGVtYXMgd2lsbCBiZSByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBUaGlzIGRvZXMgdGhyZWUgdGhpbmdzOlxuICAgKiAxLiBJdCBjb21iaW5lcyBhbGwgc2NoZW1hcyBmcm9tIGV4dGVuc2lvbnMgaW50byB0aGUgQXBwaXVtIGNvbmZpZyBzY2hlbWEsXG4gICAqICAgIHRoZW4gYWRkcyB0aGUgcmVzdWx0IHRvIHRoZSBgQWp2YCBpbnN0YW5jZS5cbiAgICogMi4gSXQgYWRkcyBzY2hlbWFzIGZvciBfZWFjaF8gYXJndW1lbnQvcHJvcGVydHkgZm9yIHZhbGlkYXRpb24gcHVycG9zZXMuXG4gICAqICAgIFRoZSBDTEkgdXNlcyB0aGVzZSBzY2hlbWFzIHRvIHZhbGlkYXRlIHNwZWNpZmljIGFyZ3VtZW50cy5cbiAgICogMy4gVGhlIHNjaGVtYXMgYXJlIHZhbGlkYXRlZCBhZ2FpbnN0IEpTT04gc2NoZW1hIGRyYWZ0LTA3ICh3aGljaCBpcyB0aGVcbiAgICogICAgb25seSBvbmUgc3VwcG9ydGVkIGF0IHRoaXMgdGltZSlcbiAgICpcbiAgICogQW55IG1ldGhvZCBpbiB0aGlzIGluc3RhbmNlIHRoYXQgbmVlZHMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgYEFqdmAgaW5zdGFuY2VcbiAgICogd2lsbCB0aHJvdyBpZiB0aGlzIG1ldGhvZCBoYXMgbm90IGJlZW4gY2FsbGVkLlxuICAgKlxuICAgKiBJZiB0aGUgaW5zdGFuY2UgaGFzIGFscmVhZHkgYmVlbiBmaW5hbGl6ZWQsIHRoaXMgaXMgYSBuby1vcC5cbiAgICogQHB1YmxpY1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHNjaGVtYSBpcyBub3QgdmFsaWRcbiAgICogQHJldHVybnMge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsU3RyaWN0U2NoZW1hT2JqZWN0Pj59IFJlY29yZCBvZiBzY2hlbWEgSURzIHRvIGZ1bGwgc2NoZW1hIG9iamVjdHNcbiAgICovXG4gIGZpbmFsaXplICgpIHtcbiAgICBpZiAodGhpcy5pc0ZpbmFsaXplZCgpKSB7XG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLFN0cmljdFNjaGVtYU9iamVjdD59ICovIChcbiAgICAgICAgdGhpcy5fZmluYWxpemVkU2NoZW1hc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBhanYgPSB0aGlzLl9hanY7XG5cbiAgICAvLyBBanYgd2lsbCBfbXV0YXRlXyB0aGUgc2NoZW1hLCBzbyB3ZSBuZWVkIHRvIGNsb25lIGl0LlxuICAgIGNvbnN0IGJhc2VTY2hlbWEgPSBfLmNsb25lRGVlcCgvKiogQHR5cGUge1N0cmljdFNjaGVtYU9iamVjdH0gKi8oYXBwaXVtQ29uZmlnU2NoZW1hKSk7XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U2NoZW1hT2JqZWN0fSBzY2hlbWFcbiAgICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IFtleHRUeXBlXVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0TmFtZV1cbiAgICAgKi9cbiAgICBjb25zdCBhZGRBcmdTcGVjcyA9IChzY2hlbWEsIGV4dFR5cGUsIGV4dE5hbWUpID0+IHtcbiAgICAgIGZvciAobGV0IFtwcm9wTmFtZSwgcHJvcFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hKSkge1xuICAgICAgICBjb25zdCBhcmdTcGVjID0gQXJnU3BlYy5jcmVhdGUocHJvcE5hbWUsIHtcbiAgICAgICAgICBkZXN0OiBwcm9wU2NoZW1hLmFwcGl1bUNsaURlc3QsXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiBwcm9wU2NoZW1hLmRlZmF1bHQsXG4gICAgICAgICAgZXh0VHlwZSxcbiAgICAgICAgICBleHROYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qge2FyZ30gPSBhcmdTcGVjO1xuICAgICAgICB0aGlzLl9hcmdTcGVjcy5zZXQoYXJnLCBhcmdTcGVjKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgYWRkQXJnU3BlY3MoXG4gICAgICBfLm9taXQoYmFzZVNjaGVtYS5wcm9wZXJ0aWVzLnNlcnZlci5wcm9wZXJ0aWVzLCBbXG4gICAgICAgIERSSVZFUl9UWVBFLFxuICAgICAgICBQTFVHSU5fVFlQRSxcbiAgICAgIF0pLFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxTdHJpY3RTY2hlbWFPYmplY3Q+fVxuICAgICAqL1xuICAgIGNvbnN0IGZpbmFsaXplZFNjaGVtYXMgPSB7fTtcblxuICAgIGNvbnN0IGZpbmFsU2NoZW1hID0gXy5yZWR1Y2UoXG4gICAgICB0aGlzLl9yZWdpc3RlcmVkU2NoZW1hcyxcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHt0eXBlb2YgYmFzZVNjaGVtYX0gYmFzZVNjaGVtYVxuICAgICAgICogQHBhcmFtIHtNYXA8c3RyaW5nLFNjaGVtYU9iamVjdD59IGV4dGVuc2lvblNjaGVtYXNcbiAgICAgICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZVxuICAgICAgICovXG4gICAgICAoYmFzZVNjaGVtYSwgZXh0ZW5zaW9uU2NoZW1hcywgZXh0VHlwZSkgPT4ge1xuICAgICAgICBleHRlbnNpb25TY2hlbWFzLmZvckVhY2goKHNjaGVtYSwgZXh0TmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0ICRyZWYgPSBBcmdTcGVjLnRvU2NoZW1hQmFzZVJlZihleHRUeXBlLCBleHROYW1lKTtcbiAgICAgICAgICBzY2hlbWEuJGlkID0gJHJlZjtcbiAgICAgICAgICBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgPSBmYWxzZTsgLy8gdGhpcyBtYWtlcyBgc2NoZW1hYCBiZWNvbWUgYSBgU3RyaWN0U2NoZW1hT2JqZWN0YFxuICAgICAgICAgIGJhc2VTY2hlbWEucHJvcGVydGllcy5zZXJ2ZXIucHJvcGVydGllc1tleHRUeXBlXS5wcm9wZXJ0aWVzW2V4dE5hbWVdID1cbiAgICAgICAgICAgIHskcmVmLCAkY29tbWVudDogZXh0TmFtZX07XG4gICAgICAgICAgYWp2LnZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdHJ1ZSk7XG4gICAgICAgICAgYWRkQXJnU3BlY3Moc2NoZW1hLnByb3BlcnRpZXMsIGV4dFR5cGUsIGV4dE5hbWUpO1xuICAgICAgICAgIGFqdi5hZGRTY2hlbWEoc2NoZW1hLCAkcmVmKTtcbiAgICAgICAgICBmaW5hbGl6ZWRTY2hlbWFzWyRyZWZdID0gLyoqIEB0eXBlIHtTdHJpY3RTY2hlbWFPYmplY3R9ICovKHNjaGVtYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYmFzZVNjaGVtYTtcbiAgICAgIH0sXG4gICAgICBiYXNlU2NoZW1hLFxuICAgICk7XG5cbiAgICBhanYuYWRkU2NoZW1hKGZpbmFsU2NoZW1hLCBBUFBJVU1fQ09ORklHX1NDSEVNQV9JRCk7XG4gICAgZmluYWxpemVkU2NoZW1hc1tBUFBJVU1fQ09ORklHX1NDSEVNQV9JRF0gPSBmaW5hbFNjaGVtYTtcbiAgICBhanYudmFsaWRhdGVTY2hlbWEoZmluYWxTY2hlbWEsIHRydWUpO1xuXG4gICAgdGhpcy5fZmluYWxpemVkU2NoZW1hcyA9IGZpbmFsaXplZFNjaGVtYXM7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoZmluYWxpemVkU2NoZW1hcyk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlcyBhbmQgY3JlYXRlcyBhbiBBanYgaW5zdGFuY2UuXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtBanZ9XG4gICAqL1xuICBzdGF0aWMgX2luc3RhbnRpYXRlQWp2ICgpIHtcbiAgICBjb25zdCBhanYgPSBhZGRGb3JtYXRzKFxuICAgICAgbmV3IEFqdih7XG4gICAgICAgIC8vIHdpdGhvdXQgdGhpcyBub3QgbXVjaCB2YWxpZGF0aW9uIGFjdHVhbGx5IGhhcHBlbnNcbiAgICAgICAgYWxsRXJyb3JzOiB0cnVlLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIGFkZCBjdXN0b20ga2V5d29yZHMgdG8gYWp2LiBzZWUgc2NoZW1hLWtleXdvcmRzLmpzXG4gICAgXy5mb3JFYWNoKGtleXdvcmRzLCAoa2V5d29yZCkgPT4ge1xuICAgICAgYWp2LmFkZEtleXdvcmQoa2V5d29yZCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYWp2O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGlzIGluc3RhbmNlIHRvIGl0cyBvcmlnaW5hbCBzdGF0ZS5cbiAgICpcbiAgICogLSBSZW1vdmVzIGFsbCBhZGRlZCBzY2hlbWFzIGZyb20gdGhlIGBBanZgIGluc3RhbmNlXG4gICAqIC0gUmVzZXRzIHRoZSBtYXAgb2Yge0BsaW5rIEFyZ1NwZWMgQXJnU3BlY3N9XG4gICAqIC0gUmVzZXRzIHRoZSBtYXAgb2YgcmVnaXN0ZXJlZCBzY2hlbWFzXG4gICAqIC0gU2V0cyB0aGUge0BsaW5rIEFwcGl1bVNjaGVtYS5fZmluYWxpemVkIF9maW5hbGl6ZWR9IGZsYWcgdG8gYGZhbHNlYFxuICAgKlxuICAgKiBJZiB5b3UgbmVlZCB0byBjYWxsIHtAbGluayBBcHBpdW1TY2hlbWEuZmluYWxpemV9IGFnYWluLCB5b3UnbGwgd2FudCB0byBjYWxsIHRoaXMgZmlyc3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgcmVzZXQgKCkge1xuICAgIGZvciAoY29uc3Qgc2NoZW1hSWQgb2YgT2JqZWN0LmtleXModGhpcy5fZmluYWxpemVkU2NoZW1hcyA/PyB7fSkpIHtcbiAgICAgIHRoaXMuX2Fqdi5yZW1vdmVTY2hlbWEoc2NoZW1hSWQpO1xuICAgIH1cbiAgICB0aGlzLl9hcmdTcGVjcyA9IG5ldyBSZWFkb25seU1hcCgpO1xuICAgIHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzID0ge1xuICAgICAgW0RSSVZFUl9UWVBFXTogbmV3IE1hcCgpLFxuICAgICAgW1BMVUdJTl9UWVBFXTogbmV3IE1hcCgpLFxuICAgIH07XG4gICAgdGhpcy5fZmluYWxpemVkU2NoZW1hcyA9IG51bGw7XG5cbiAgICAvLyBBanYgc2VlbXMgdG8gaGF2ZSBhbiBvdmVyLWVhZ2VyIGNhY2hlLCBzbyB3ZSBoYXZlIHRvIGR1bXAgdGhlIG9iamVjdCBlbnRpcmVseS5cbiAgICB0aGlzLl9hanYgPSBBcHBpdW1TY2hlbWEuX2luc3RhbnRpYXRlQWp2KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgc2NoZW1hIGZyb20gYW4gZXh0ZW5zaW9uLlxuICAgKlxuICAgKiBUaGlzIGlzIFwiZmFpbC1mYXN0XCIgaW4gdGhhdCB0aGUgc2NoZW1hIHdpbGwgaW1tZWRpYXRlbHkgYmUgdmFsaWRhdGVkIGFnYWluc3QgSlNPTiBzY2hlbWEgZHJhZnQtMDcgX29yXyB3aGF0ZXZlciB0aGUgdmFsdWUgb2YgdGhlIHNjaGVtYSdzIGAkc2NoZW1hYCBwcm9wIGlzLlxuICAgKlxuICAgKiBEb2VzIF9ub3RfIGFkZCB0aGUgc2NoZW1hIHRvIHRoZSBgYWp2YCBpbnN0YW5jZSAodGhpcyBpcyBkb25lIGJ5IHtAbGluayBBcHBpdW1TY2hlbWEuZmluYWxpemV9KS5cbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uL2V4dC1jb25maWctaW8nKS5FeHRlbnNpb25UeXBlfSBleHRUeXBlIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBVbmlxdWUgZXh0ZW5zaW9uIG5hbWUgZm9yIGB0eXBlYFxuICAgKiBAcGFyYW0ge1NjaGVtYU9iamVjdH0gc2NoZW1hIC0gU2NoZW1hIG9iamVjdFxuICAgKiBAdGhyb3dzIHtTY2hlbWFOYW1lQ29uZmxpY3RFcnJvcn0gSWYgdGhlIHNjaGVtYSBpcyBhbiBpbnZhbGlkXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgcmVnaXN0ZXJTY2hlbWEgKGV4dFR5cGUsIGV4dE5hbWUsIHNjaGVtYSkge1xuICAgIGlmICghKGV4dFR5cGUgJiYgZXh0TmFtZSAmJiAhXy5pc0VtcHR5KHNjaGVtYSkpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnRXhwZWN0ZWQgbm9uZW1wdHkgZXh0ZW5zaW9uIHR5cGUsIGV4dGVuc2lvbiBuYW1lIGFuZCBzY2hlbWEgcGFyYW1ldGVycycsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRFeHROYW1lID0gXy5rZWJhYkNhc2UoZXh0TmFtZSk7XG4gICAgaWYgKHRoaXMuaGFzUmVnaXN0ZXJlZFNjaGVtYShleHRUeXBlLCBub3JtYWxpemVkRXh0TmFtZSkpIHtcbiAgICAgIGlmICh0aGlzLl9yZWdpc3RlcmVkU2NoZW1hc1tleHRUeXBlXS5nZXQobm9ybWFsaXplZEV4dE5hbWUpID09PSBzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IFNjaGVtYU5hbWVDb25mbGljdEVycm9yKGV4dFR5cGUsIGV4dE5hbWUpO1xuICAgIH1cbiAgICB0aGlzLl9hanYudmFsaWRhdGVTY2hlbWEoc2NoZW1hLCB0cnVlKTtcblxuICAgIHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzW2V4dFR5cGVdLnNldChub3JtYWxpemVkRXh0TmFtZSwgc2NoZW1hKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEge0BsaW5rIEFyZ1NwZWN9IGZvciB0aGUgZ2l2ZW4gYXJndW1lbnQgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBDTEkgYXJndW1lbnQgbmFtZVxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IFtleHRUeXBlXSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0TmFtZV0gLSBFeHRlbnNpb24gbmFtZVxuICAgKiBAcmV0dXJucyB7QXJnU3BlY3x1bmRlZmluZWR9IEFyZ1NwZWMgb3IgYHVuZGVmaW5lZGAgaWYgbm90IGZvdW5kXG4gICAqL1xuICBnZXRBcmdTcGVjIChuYW1lLCBleHRUeXBlLCBleHROYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FyZ1NwZWNzLmdldChBcmdTcGVjLnRvQXJnKG5hbWUsIGV4dFR5cGUsIGV4dE5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5zdGFuY2Uga25vd3MgYWJvdXQgYW4gYXJndW1lbnQgYnkgdGhlIGdpdmVuIGBuYW1lYC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBDTEkgYXJndW1lbnQgbmFtZVxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IFtleHRUeXBlXSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0TmFtZV0gLSBFeHRlbnNpb24gbmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHN1Y2ggYW4ge0BsaW5rIEFyZ1NwZWN9IGV4aXN0c1xuICAgKi9cbiAgaGFzQXJnU3BlYyAobmFtZSwgZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9hcmdTcGVjcy5oYXMoQXJnU3BlYy50b0FyZyhuYW1lLCBleHRUeXBlLCBleHROYW1lKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGBSZWNvcmRgIG9mIGFyZ3VtZW50IFwiZGVzdFwiIHN0cmluZ3MgdG8gZGVmYXVsdCB2YWx1ZXMuXG4gICAqXG4gICAqIFRoZSBcImRlc3RcIiBzdHJpbmcgaXMgdGhlIHByb3BlcnR5IG5hbWUgaW4gb2JqZWN0IHJldHVybmVkIGJ5IGBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlclsncGFyc2VfYXJncyddYC5cbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsQXJnU3BlY1snZGVmYXVsdFZhbHVlJ10+fVxuICAgKi9cbiAgZ2V0RGVmYXVsdHMgKCkge1xuICAgIGlmICghdGhpcy5pc0ZpbmFsaXplZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hRmluYWxpemF0aW9uRXJyb3IoKTtcbiAgICB9XG4gICAgcmV0dXJuIFsuLi50aGlzLl9hcmdTcGVjcy52YWx1ZXMoKV0ucmVkdWNlKFxuICAgICAgKGRlZmF1bHRzLCB7ZGVmYXVsdFZhbHVlLCBkZXN0fSkgPT4ge1xuICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICAgIGRlZmF1bHRzW2Rlc3RdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYXR0ZW4gc2NoZW1hIGludG8gYW4gYXJyYXkgb2YgYFNjaGVtYU9iamVjdGBzIGFuZCBhc3NvY2lhdGVkXG4gICAqIHtAbGluayBBcmdTcGVjIEFyZ1NwZWNzfS5cbiAgICpcbiAgICogQ29udmVydHMgbmVzdGVkIGV4dGVuc2lvbiBzY2hlbWFzIHRvIGtleXMgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiB0eXBlIGFuZFxuICAgKiBuYW1lLiBVc2VkIHdoZW4gdHJhbnNsYXRpbmcgdG8gYGFyZ3BhcnNlYCBvcHRpb25zIG9yIGdldHRpbmcgdGhlIGxpc3Qgb2ZcbiAgICogZGVmYXVsdCB2YWx1ZXMgKHNlZSB7QGxpbmsgQXBwaXVtU2NoZW1hLmdldERlZmF1bHRzfSkgZm9yIENMSSBvciBvdGhlcndpc2UuXG4gICAqXG4gICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gaW50ZXJtZWRpYXRlIHJlcHJzZW50YXRpb24gdXNlZCBieSBgY2xpLWFyZ3NgXG4gICAqIG1vZHVsZSdzIGB0b1BhcnNlckFyZ3NgLCB3aGljaCBjb252ZXJ0cyB0aGUgZmluYWxpemVkIHNjaGVtYSB0byBwYXJhbWV0ZXJzXG4gICAqIHVzZWQgYnkgYGFyZ3BhcnNlYC5cbiAgICogQHRocm93cyBJZiB7QGxpbmsgQXBwaXVtU2NoZW1hLmZpbmFsaXplfSBoYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAgICogQHJldHVybnMge0ZsYXR0ZW5lZFNjaGVtYX1cbiAgICovXG4gIGZsYXR0ZW4gKCkge1xuICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuZ2V0U2NoZW1hKCk7XG5cbiAgICAvKiogQHR5cGUge3twcm9wZXJ0aWVzOiBTY2hlbWFPYmplY3QsIHByZWZpeDogc3RyaW5nW119W119ICovXG4gICAgY29uc3Qgc3RhY2sgPSBbe3Byb3BlcnRpZXM6IHNjaGVtYS5wcm9wZXJ0aWVzLCBwcmVmaXg6IFtdfV07XG4gICAgLyoqIEB0eXBlIHtGbGF0dGVuZWRTY2hlbWF9ICovXG4gICAgY29uc3QgZmxhdHRlbmVkID0gW107XG5cbiAgICAvLyB0aGlzIGJpdCBpcyBhIHJlY3Vyc2l2ZSBhbGdvcml0aG0gcmV3cml0dGVuIGFzIGEgZm9yIGxvb3AuXG4gICAgLy8gd2hlbiB3ZSBmaW5kIHNvbWV0aGluZyB3ZSB3YW50IHRvIHRyYXZlcnNlLCB3ZSBhZGQgaXQgdG8gYHN0YWNrYFxuICAgIGZvciAoY29uc3Qge3Byb3BlcnRpZXMsIHByZWZpeH0gb2Ygc3RhY2spIHtcbiAgICAgIGNvbnN0IHBhaXJzID0gXy50b1BhaXJzKHByb3BlcnRpZXMpO1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcGFpcnMpIHtcbiAgICAgICAgY29uc3Qge3Byb3BlcnRpZXMsICRyZWZ9ID0gdmFsdWU7XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICAgICAgcHJlZml4OiBrZXkgPT09IFNFUlZFUl9QUk9QX05BTUUgPyBbXSA6IFsuLi5wcmVmaXgsIGtleV0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoJHJlZikge1xuICAgICAgICAgIGxldCByZWZTY2hlbWE7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlZlNjaGVtYSA9IHRoaXMuZ2V0U2NoZW1hKCRyZWYpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gdGhpcyBjYW4gaGFwcGVuIGlmIGFuIGV4dGVuc2lvbiBzY2hlbWEgc3VwcGxpZXMgYSAkcmVmIHRvIGEgbm9uLWV4aXN0ZW50IHNjaGVtYVxuICAgICAgICAgICAgdGhyb3cgbmV3IFNjaGVtYVVua25vd25TY2hlbWFFcnJvcigkcmVmKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qge25vcm1hbGl6ZWRFeHROYW1lfSA9XG4gICAgICAgICAgICBBcmdTcGVjLmV4dGVuc2lvbkluZm9Gcm9tUm9vdFNjaGVtYUlkKCRyZWYpO1xuICAgICAgICAgIGlmICghbm9ybWFsaXplZEV4dE5hbWUpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXG4gICAgICAgICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIGV4dGVuc2lvbiBuYW1lIGZyb20gc2NoZW1hIElEICR7JHJlZn0uIFRoaXMgaXMgYSBidWcuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcHJvcGVydGllczogcmVmU2NoZW1hLnByb3BlcnRpZXMsXG4gICAgICAgICAgICBwcmVmaXg6IFsuLi5wcmVmaXgsIGtleSwgbm9ybWFsaXplZEV4dE5hbWVdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSAhPT0gRFJJVkVSX1RZUEUgJiYga2V5ICE9PSBQTFVHSU5fVFlQRSkge1xuICAgICAgICAgIGNvbnN0IFtleHRUeXBlLCBleHROYW1lXSA9IHByZWZpeDtcbiAgICAgICAgICBjb25zdCBhcmdTcGVjID0gdGhpcy5nZXRBcmdTcGVjKFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgLyoqIEB0eXBlIHtFeHRlbnNpb25UeXBlfSAqLyAoZXh0VHlwZSksXG4gICAgICAgICAgICBleHROYW1lLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFhcmdTcGVjKSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxuICAgICAgICAgICAgICBgVW5rbm93biBhcmd1bWVudCB3aXRoIGtleSAke2tleX0sIGV4dFR5cGUgJHtleHRUeXBlfSBhbmQgZXh0TmFtZSAke2V4dE5hbWV9LiBUaGlzIGlzIGEgYnVnLmAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbGF0dGVuZWQucHVzaCh7c2NoZW1hOiBfLmNsb25lRGVlcCh2YWx1ZSksIGFyZ1NwZWN9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmbGF0dGVuZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBzY2hlbWEgaXRzZWxmXG4gICAqIEBwdWJsaWNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWZdIC0gU2NoZW1hIElEXG4gICAqIEB0aHJvd3MgSWYgdGhlIHNjaGVtYSBoYXMgbm90IHlldCBiZWVuIF9maW5hbGl6ZWRfXG4gICAqIEByZXR1cm5zIHtTY2hlbWFPYmplY3R9XG4gICAqL1xuICBnZXRTY2hlbWEgKHJlZiA9IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7U2NoZW1hT2JqZWN0fSAqLyAodGhpcy5fZ2V0VmFsaWRhdG9yKHJlZikuc2NoZW1hKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgc2NoZW1hIHZhbGlkYXRvciBmdW5jdGlvbiBmcm9tIEFqdlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2lkXSAtIFNjaGVtYSBJRFxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7aW1wb3J0KCdhanYnKS5WYWxpZGF0ZUZ1bmN0aW9ufVxuICAgKi9cbiAgX2dldFZhbGlkYXRvciAoaWQgPSBBUFBJVU1fQ09ORklHX1NDSEVNQV9JRCkge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHRoaXMuX2Fqdi5nZXRTY2hlbWEoaWQpO1xuICAgIGlmICghdmFsaWRhdG9yKSB7XG4gICAgICBpZiAoaWQgPT09IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgICAgIHRocm93IG5ldyBTY2hlbWFGaW5hbGl6YXRpb25FcnJvcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFNjaGVtYVVua25vd25TY2hlbWFFcnJvcihpZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWxpZGF0b3I7XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYW4gb2JqZWN0LCB2YWxpZGF0ZXMgaXQgYWdhaW5zdCB0aGUgQXBwaXVtIGNvbmZpZyBzY2hlbWEuXG4gICAqIElmIGVycm9ycyBvY2N1ciwgdGhlIHJldHVybmVkIGFycmF5IHdpbGwgYmUgbm9uLWVtcHR5LlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBUaGUgdmFsdWUgKGhvcGVmdWxseSBhbiBvYmplY3QpIHRvIHZhbGlkYXRlIGFnYWluc3QgdGhlIHNjaGVtYVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlZl0gLSBTY2hlbWEgSUQgb3IgcmVmLlxuICAgKiBAcHVibGljXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJ2FqdicpLkVycm9yT2JqZWN0W119IEFycmF5IG9mIGVycm9ycywgaWYgYW55LlxuICAgKi9cbiAgdmFsaWRhdGUgKHZhbHVlLCByZWYgPSBBUFBJVU1fQ09ORklHX1NDSEVNQV9JRCkge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IC8qKiBAdHlwZSB7aW1wb3J0KCdhanYnKS5WYWxpZGF0ZUZ1bmN0aW9ufSAqLyAoXG4gICAgICB0aGlzLl9nZXRWYWxpZGF0b3IocmVmKVxuICAgICk7XG4gICAgcmV0dXJuICF2YWxpZGF0b3IodmFsdWUpICYmIF8uaXNBcnJheSh2YWxpZGF0b3IuZXJyb3JzKVxuICAgICAgPyBbLi4udmFsaWRhdG9yLmVycm9yc11cbiAgICAgIDogW107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgYGZpbGVuYW1lYCdzIGZpbGUgZXh0ZW5zaW9uIGlzIGFsbG93ZWQgKGluIHtAbGluayBBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TfSkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc0FsbG93ZWRTY2hlbWFGaWxlRXh0ZW5zaW9uIChmaWxlbmFtZSkge1xuICAgIHJldHVybiBBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TLmhhcyhwYXRoLmV4dG5hbWUoZmlsZW5hbWUpKTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIHRoZSB7QGxpbmsgQXBwaXVtU2NoZW1hfSBpbnN0YW5jZSBoYXMgbm90IHlldCBiZWVuIGZpbmFsaXplZCwgYnV0XG4gKiB0aGUgbWV0aG9kIGNhbGxlZCByZXF1aXJlcyBpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjaGVtYUZpbmFsaXphdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHN0cmluZz59XG4gICAqL1xuICBjb2RlID0gJ0FQUElVTUVSUl9TQ0hFTUFfRklOQUxJWkFUSU9OJztcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoJ1NjaGVtYSBub3QgeWV0IGZpbmFsaXplZDsgYGZpbmFsaXplKClgIG11c3QgYmUgY2FsbGVkIGZpcnN0LicpO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBcInVuaXF1ZVwiIHNjaGVtYSBJRCBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBzY2hlbWEgSUQuXG4gKlxuICogVGhpcyBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgY2F1c2VkIGJ5IGF0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgdGhlIHNhbWUgc2NoZW1hIHR3aWNlLlxuICovXG5leHBvcnQgY2xhc3MgU2NoZW1hTmFtZUNvbmZsaWN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9OQU1FX0NPTkZMSUNUJztcblxuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHtleHRUeXBlOiBFeHRlbnNpb25UeXBlLCBleHROYW1lOiBzdHJpbmd9Pn1cbiAgICovXG4gIGRhdGE7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZVxuICAgKi9cbiAgY29uc3RydWN0b3IgKGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICBzdXBlcihcbiAgICAgIGBOYW1lIGZvciAke2V4dFR5cGV9IHNjaGVtYSBcIiR7ZXh0TmFtZX1cIiBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBzY2hlbWFgLFxuICAgICk7XG4gICAgdGhpcy5kYXRhID0ge2V4dFR5cGUsIGV4dE5hbWV9O1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBzY2hlbWEgSUQgd2FzIGV4cGVjdGVkLCBidXQgaXQgZG9lc24ndCBleGlzdCBvbiB0aGUge0BsaW5rIEFqdn0gaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IgZXh0ZW5kcyBSZWZlcmVuY2VFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9VTktOT1dOX1NDSEVNQSc7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTx7c2NoZW1hSWQ6IHN0cmluZ30+fVxuICAgKi9cbiAgZGF0YTtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjaGVtYUlkXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoc2NoZW1hSWQpIHtcbiAgICBzdXBlcihgVW5rbm93biBzY2hlbWE6IFwiJHtzY2hlbWFJZH1cImApO1xuICAgIHRoaXMuZGF0YSA9IHtzY2hlbWFJZH07XG4gIH1cbn1cblxuY29uc3QgYXBwaXVtU2NoZW1hID0gQXBwaXVtU2NoZW1hLmNyZWF0ZSgpO1xuXG5leHBvcnQgY29uc3Qge1xuICByZWdpc3RlclNjaGVtYSxcbiAgZ2V0QXJnU3BlYyxcbiAgaGFzQXJnU3BlYyxcbiAgaXNGaW5hbGl6ZWQsXG4gIGZpbmFsaXplOiBmaW5hbGl6ZVNjaGVtYSxcbiAgcmVzZXQ6IHJlc2V0U2NoZW1hLFxuICB2YWxpZGF0ZSxcbiAgZ2V0U2NoZW1hLFxuICBmbGF0dGVuOiBmbGF0dGVuU2NoZW1hLFxuICBnZXREZWZhdWx0czogZ2V0RGVmYXVsdHNGcm9tU2NoZW1hLFxufSA9IGFwcGl1bVNjaGVtYTtcbmV4cG9ydCBjb25zdCB7aXNBbGxvd2VkU2NoZW1hRmlsZUV4dGVuc2lvbn0gPSBBcHBpdW1TY2hlbWE7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnYWp2JykuU2NoZW1hT2JqZWN0fSBTY2hlbWFPYmplY3RcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2V4dC1jb25maWctaW8nKS5FeHRlbnNpb25UeXBlfSBFeHRlbnNpb25UeXBlXG4gKi9cblxuLyoqXG4gKiBBbiBvYmplY3QgaGF2aW5nIHByb3BlcnR5IGBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VgXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTdHJpY3RQcm9wXG4gKiBAcHJvcGVydHkge2ZhbHNlfSBhZGRpdGlvbmFsUHJvcGVydGllc1xuICovXG5cbi8qKlxuICogQSB7QGxpbmsgU2NoZW1hT2JqZWN0fSB3aXRoIGBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VgXG4gKiBAdHlwZWRlZiB7U2NoZW1hT2JqZWN0ICYgU3RyaWN0UHJvcH0gU3RyaWN0U2NoZW1hT2JqZWN0XG4gKi9cblxuLyoqXG4gKiBBIGxpc3Qgb2Ygc2NoZW1hcyBhc3NvY2lhdGVkIHdpdGggcHJvcGVydGllcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyB7QGxpbmsgQXJnU3BlY30gb2JqZWN0cy5cbiAqXG4gKiBJbnRlcm1lZGlhdGUgZGF0YSBzdHJ1Y3R1cmUgdXNlZCB3aGVuIGNvbnZlcnRpbmcgdGhlIGVudGlyZSBzY2hlbWEgZG93biB0byBDTEkgYXJndW1lbnRzLlxuICogQHR5cGVkZWYge3tzY2hlbWE6IFNjaGVtYU9iamVjdCwgYXJnU3BlYzogQXJnU3BlY31bXX0gRmxhdHRlbmVkU2NoZW1hXG4gKi9cbiJdLCJmaWxlIjoibGliL3NjaGVtYS9zY2hlbWEuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
428
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zY2hlbWEvc2NoZW1hLmpzIl0sIm5hbWVzIjpbIkFMTE9XRURfU0NIRU1BX0VYVEVOU0lPTlMiLCJTZXQiLCJBcHBpdW1TY2hlbWEiLCJjb25zdHJ1Y3RvciIsIlJlYWRvbmx5TWFwIiwiRFJJVkVSX1RZUEUiLCJNYXAiLCJQTFVHSU5fVFlQRSIsIl9hanYiLCJfaW5zdGFudGlhdGVBanYiLCJjcmVhdGUiLCJpbnN0YW5jZSIsIl9pbnN0YW5jZSIsIl8iLCJiaW5kQWxsIiwiaGFzUmVnaXN0ZXJlZFNjaGVtYSIsImV4dFR5cGUiLCJleHROYW1lIiwiX3JlZ2lzdGVyZWRTY2hlbWFzIiwiaGFzIiwiaXNGaW5hbGl6ZWQiLCJCb29sZWFuIiwiX2ZpbmFsaXplZFNjaGVtYXMiLCJmaW5hbGl6ZSIsImFqdiIsImJhc2VTY2hlbWEiLCJjbG9uZURlZXAiLCJhcHBpdW1Db25maWdTY2hlbWEiLCJhZGRBcmdTcGVjcyIsInNjaGVtYSIsInByb3BOYW1lIiwicHJvcFNjaGVtYSIsIk9iamVjdCIsImVudHJpZXMiLCJhcmdTcGVjIiwiQXJnU3BlYyIsImRlc3QiLCJhcHBpdW1DbGlEZXN0IiwiZGVmYXVsdFZhbHVlIiwiZGVmYXVsdCIsImFyZyIsIl9hcmdTcGVjcyIsInNldCIsIm9taXQiLCJwcm9wZXJ0aWVzIiwic2VydmVyIiwiZmluYWxpemVkU2NoZW1hcyIsImZpbmFsU2NoZW1hIiwicmVkdWNlIiwiZXh0ZW5zaW9uU2NoZW1hcyIsImZvckVhY2giLCIkcmVmIiwidG9TY2hlbWFCYXNlUmVmIiwiJGlkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCIkY29tbWVudCIsInZhbGlkYXRlU2NoZW1hIiwiYWRkU2NoZW1hIiwiQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQiLCJmcmVlemUiLCJBanYiLCJhbGxFcnJvcnMiLCJrZXl3b3JkcyIsImtleXdvcmQiLCJhZGRLZXl3b3JkIiwicmVzZXQiLCJzY2hlbWFJZCIsImtleXMiLCJyZW1vdmVTY2hlbWEiLCJyZWdpc3RlclNjaGVtYSIsImlzVW5kZWZpbmVkIiwiVHlwZUVycm9yIiwiaXNTdXBwb3J0ZWRTY2hlbWFUeXBlIiwiU2NoZW1hVW5zdXBwb3J0ZWRTY2hlbWFFcnJvciIsIm5vcm1hbGl6ZWRFeHROYW1lIiwia2ViYWJDYXNlIiwiZ2V0IiwiU2NoZW1hTmFtZUNvbmZsaWN0RXJyb3IiLCJnZXRBcmdTcGVjIiwibmFtZSIsInRvQXJnIiwiaGFzQXJnU3BlYyIsImdldERlZmF1bHRzIiwiZmxhdHRlbiIsIlNjaGVtYUZpbmFsaXphdGlvbkVycm9yIiwicmVkdWNlciIsImRlZmF1bHRzIiwicmV0dmFsIiwidmFsdWVzIiwiZ2V0RGVmYXVsdHNGb3JFeHRlbnNpb24iLCJzcGVjcyIsImZpbHRlciIsInNwZWMiLCJyYXdEZXN0IiwiZ2V0U2NoZW1hIiwic3RhY2siLCJwcmVmaXgiLCJmbGF0dGVuZWQiLCJwYWlycyIsInRvUGFpcnMiLCJrZXkiLCJ2YWx1ZSIsInB1c2giLCJTRVJWRVJfUFJPUF9OQU1FIiwicmVmU2NoZW1hIiwiZXJyIiwiU2NoZW1hVW5rbm93blNjaGVtYUVycm9yIiwiZXh0ZW5zaW9uSW5mb0Zyb21Sb290U2NoZW1hSWQiLCJSZWZlcmVuY2VFcnJvciIsInJlZiIsIl9nZXRWYWxpZGF0b3IiLCJpZCIsInZhbGlkYXRvciIsInZhbGlkYXRlIiwiaXNBcnJheSIsImVycm9ycyIsImlzQWxsb3dlZFNjaGVtYUZpbGVFeHRlbnNpb24iLCJmaWxlbmFtZSIsInBhdGgiLCJleHRuYW1lIiwiaXNQbGFpbk9iamVjdCIsIiRhc3luYyIsIkVycm9yIiwiZGF0YSIsIm1zZyIsImlzQm9vbGVhbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJhcHBpdW1TY2hlbWEiLCJmaW5hbGl6ZVNjaGVtYSIsInJlc2V0U2NoZW1hIiwiZmxhdHRlblNjaGVtYSIsImdldERlZmF1bHRzRm9yU2NoZW1hIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FB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O0FBRUQsY0FBTSxJQUFJckQsU0FBSixDQUNILDBGQUF5RnVELElBQUksQ0FBQ0MsU0FBTCxDQUN4RmxHLE1BRHdGLENBRXhGLEVBSEUsQ0FBTjtBQUtEOztBQUNELGFBQVEsR0FBRStGLEdBQUksaUVBQWQ7QUFDRCxLQWpCRCxHQURGO0FBRnFDLGdEQVpoQyxxQ0FZZ0M7QUFBQTtBQXNCckMsU0FBS0QsSUFBTCxHQUFZO0FBQUM5RixNQUFBQSxNQUFEO0FBQVNiLE1BQUFBLE9BQVQ7QUFBa0JDLE1BQUFBO0FBQWxCLEtBQVo7QUFDRDs7QUF2Q3lEOzs7QUEwQzVELE1BQU0rRyxZQUFZLEdBQUc5SCxZQUFZLENBQUNRLE1BQWIsRUFBckI7QUFFTyxNQUFNO0FBQ1gyRCxFQUFBQSxjQURXO0FBRVhTLEVBQUFBLFVBRlc7QUFHWEcsRUFBQUEsVUFIVztBQUlYN0QsRUFBQUEsV0FKVztBQUtYRyxFQUFBQSxRQUFRLEVBQUUwRyxjQUxDO0FBTVhoRSxFQUFBQSxLQUFLLEVBQUVpRSxXQU5JO0FBT1hqQixFQUFBQSxRQVBXO0FBUVhuQixFQUFBQSxTQVJXO0FBU1hYLEVBQUFBLE9BQU8sRUFBRWdELGFBVEU7QUFVWGpELEVBQUFBLFdBQVcsRUFBRWtELG9CQVZGO0FBV1gzQyxFQUFBQTtBQVhXLElBWVR1QyxZQVpHOzs7Ozs7Ozs7Ozs7QUFhQSxNQUFNO0FBQUNaLEVBQUFBO0FBQUQsSUFBaUNsSCxZQUF2QyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQWp2IGZyb20gJ2Fqdic7XG5pbXBvcnQgYWRkRm9ybWF0cyBmcm9tICdhanYtZm9ybWF0cyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBEUklWRVJfVFlQRSwgUExVR0lOX1RZUEUgfSBmcm9tICcuLi9leHRlbnNpb24tY29uZmlnJztcbmltcG9ydCB7IFJlYWRvbmx5TWFwIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IGFwcGl1bUNvbmZpZ1NjaGVtYSBmcm9tICcuL2FwcGl1bS1jb25maWctc2NoZW1hJztcbmltcG9ydCB7IEFQUElVTV9DT05GSUdfU0NIRU1BX0lELCBBcmdTcGVjLCBTRVJWRVJfUFJPUF9OQU1FIH0gZnJvbSAnLi9hcmctc3BlYyc7XG5pbXBvcnQgeyBrZXl3b3JkcyB9IGZyb20gJy4va2V5d29yZHMnO1xuXG4vKipcbiAqIEV4dGVuc2lvbnMgdGhhdCBhbiBleHRlbnNpb24gc2NoZW1hIGZpbGUgY2FuIGhhdmUuXG4gKi9cbmV4cG9ydCBjb25zdCBBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TID0gbmV3IFNldChbJy5qc29uJywgJy5qcycsICcuY2pzJ10pO1xuXG4vKipcbiAqIEEgd3JhcHBlciBhcm91bmQgQWp2IGFuZCBzY2hlbWEtcmVsYXRlZCBmdW5jdGlvbnMuXG4gKlxuICogU2hvdWxkIGhhdmUgYmVlbiBuYW1lZCBIaWdobGFuZGVyLCBiZWNhdXNlIF90aGVyZSBjYW4gb25seSBiZSBvbmVfXG4gKi9cbmNsYXNzIEFwcGl1bVNjaGVtYSB7XG4gIC8qKlxuICAgKiBBIG1hcHBpbmcgb2YgdW5pcXVlIGFyZ3VtZW50IElEcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIHtAbGluayBBcmdTcGVjfXMuXG4gICAqXG4gICAqIEFuIFwiYXJndW1lbnRcIiBpcyBhIENMSSBhcmd1bWVudCBvciBhIGNvbmZpZyBwcm9wZXJ0eS5cbiAgICpcbiAgICogVXNlZCB0byBwcm92aWRlIGVhc3kgbG9va3VwcyBvZiBhcmd1bWVudCBtZXRhZGF0YSB3aGVuIGNvbnZlcnRpbmcgYmV0d2VlbiBkaWZmZXJlbnQgcmVwcmVzZW50YXRpb25zIG9mIHRob3NlIGFyZ3VtZW50cy5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge1JlYWRvbmx5TWFwPHN0cmluZyxBcmdTcGVjPn1cbiAgICovXG4gIF9hcmdTcGVjcyA9IG5ldyBSZWFkb25seU1hcCgpO1xuXG4gIC8qKlxuICAgKiBBIG1hcCBvZiBleHRlbnNpb24gdHlwZXMgdG8gZXh0ZW5zaW9uIG5hbWVzIHRvIHNjaGVtYSBvYmplY3RzLlxuICAgKlxuICAgKiBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIHVzZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBuYW1pbmcgY29uZmxpY3RzLiBUaGUgc2NoZW1hc1xuICAgKiBhcmUgc3RvcmVkIGhlcmUgaW4gbWVtb3J5IHVudGlsIHRoZSBpbnN0YW5jZSBpcyBfZmluYWxpemVkXy5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge1JlY29yZDxFeHRlbnNpb25UeXBlLE1hcDxzdHJpbmcsU2NoZW1hT2JqZWN0Pj59XG4gICAqL1xuICBfcmVnaXN0ZXJlZFNjaGVtYXMgPSB7W0RSSVZFUl9UWVBFXTogbmV3IE1hcCgpLCBbUExVR0lOX1RZUEVdOiBuZXcgTWFwKCl9O1xuXG4gIC8qKlxuICAgKiBBanYgaW5zdGFuY2VcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0Fqdn1cbiAgICovXG4gIF9hanY7XG5cbiAgLyoqXG4gICAqIFNpbmdsZXRvbiBpbnN0YW5jZS5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0FwcGl1bVNjaGVtYX1cbiAgICovXG4gIHN0YXRpYyBfaW5zdGFuY2U7XG5cbiAgLyoqXG4gICAqIExvb2t1cCBvZiBzY2hlbWEgSURzIHRvIGZpbmFsaXplZCBzY2hlbWFzLlxuICAgKlxuICAgKiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgcmVmZXJlbmNlcywgYnV0IHJhdGhlciB0aGUgcm9vdCBzY2hlbWFzIHRoZW1zZWx2ZXMuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLFN0cmljdFNjaGVtYU9iamVjdD4/fVxuICAgKi9cbiAgX2ZpbmFsaXplZFNjaGVtYXMgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBBanYsIGFkZHMgc3RhbmRhcmQgZm9ybWF0cyBhbmQgb3VyIGN1c3RvbSBrZXl3b3Jkcy5cbiAgICogQHNlZSBodHRwczovL25wbS5pbS9hanYtZm9ybWF0c1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMuX2FqdiA9IEFwcGl1bVNjaGVtYS5faW5zdGFudGlhdGVBanYoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3J5IGZ1bmN0aW9uIGZvciB7QGxpbmsgQXBwaXVtU2NoZW1hfSBpbnN0YW5jZXMuXG4gICAqXG4gICAqIFJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2UgaWYgb25lIGV4aXN0cywgb3RoZXJ3aXNlIGNyZWF0ZXMgYSBuZXcgb25lLlxuICAgKiBCaW5kcyBwdWJsaWMgbWV0aG9kcyB0byB0aGUgaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHtBcHBpdW1TY2hlbWF9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlICgpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IEFwcGl1bVNjaGVtYS5faW5zdGFuY2UgPz8gbmV3IEFwcGl1bVNjaGVtYSgpO1xuICAgIEFwcGl1bVNjaGVtYS5faW5zdGFuY2UgPSBpbnN0YW5jZTtcblxuICAgIF8uYmluZEFsbChpbnN0YW5jZSwgW1xuICAgICAgJ2ZpbmFsaXplJyxcbiAgICAgICdmbGF0dGVuJyxcbiAgICAgICdnZXRBcmdTcGVjJyxcbiAgICAgICdnZXREZWZhdWx0cycsXG4gICAgICAnZ2V0RGVmYXVsdHNGb3JFeHRlbnNpb24nLFxuICAgICAgJ2dldFNjaGVtYScsXG4gICAgICAnaGFzQXJnU3BlYycsXG4gICAgICAnaXNGaW5hbGl6ZWQnLFxuICAgICAgJ3JlZ2lzdGVyU2NoZW1hJyxcbiAgICAgICdyZXNldCcsXG4gICAgICAndmFsaWRhdGUnLFxuICAgIF0pO1xuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIGEgc2NoZW1hIGhhcyBiZWVuIHJlZ2lzdGVyZWQgdXNpbmcgZ2l2ZW4gZXh0ZW5zaW9uIHR5cGUgYW5kIG5hbWUuXG4gICAqXG4gICAqIFRoaXMgZG9lcyBub3QgZGVwZW5kIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBpbnN0YW5jZSBoYXMgYmVlbiBfZmluYWxpemVkXy5cbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBleHRUeXBlIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBOYW1lXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBJZiByZWdpc3RlcmVkXG4gICAqL1xuICBoYXNSZWdpc3RlcmVkU2NoZW1hIChleHRUeXBlLCBleHROYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzW2V4dFR5cGVdLmhhcyhleHROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYHRydWVgIGlmIHtAbGluayBBcHBpdW1TY2hlbWEuZmluYWxpemUgZmluYWxpemV9IGhhcyBiZWVuIGNhbGxlZFxuICAgKiBzdWNjZXNzZnVsbHkgYW5kIHtAbGluayBBcHBpdW1TY2hlbWEucmVzZXQgcmVzZXR9IGhhcyBub3QgYmVlbiBjYWxsZWQgc2luY2UuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBJZiBmaW5hbGl6ZWRcbiAgICovXG4gIGlzRmluYWxpemVkICgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLl9maW5hbGl6ZWRTY2hlbWFzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgd2hlbiBubyBtb3JlIHNjaGVtYXMgd2lsbCBiZSByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBUaGlzIGRvZXMgdGhyZWUgdGhpbmdzOlxuICAgKiAxLiBJdCBjb21iaW5lcyBhbGwgc2NoZW1hcyBmcm9tIGV4dGVuc2lvbnMgaW50byB0aGUgQXBwaXVtIGNvbmZpZyBzY2hlbWEsXG4gICAqICAgIHRoZW4gYWRkcyB0aGUgcmVzdWx0IHRvIHRoZSBgQWp2YCBpbnN0YW5jZS5cbiAgICogMi4gSXQgYWRkcyBzY2hlbWFzIGZvciBfZWFjaF8gYXJndW1lbnQvcHJvcGVydHkgZm9yIHZhbGlkYXRpb24gcHVycG9zZXMuXG4gICAqICAgIFRoZSBDTEkgdXNlcyB0aGVzZSBzY2hlbWFzIHRvIHZhbGlkYXRlIHNwZWNpZmljIGFyZ3VtZW50cy5cbiAgICogMy4gVGhlIHNjaGVtYXMgYXJlIHZhbGlkYXRlZCBhZ2FpbnN0IEpTT04gc2NoZW1hIGRyYWZ0LTA3ICh3aGljaCBpcyB0aGVcbiAgICogICAgb25seSBvbmUgc3VwcG9ydGVkIGF0IHRoaXMgdGltZSlcbiAgICpcbiAgICogQW55IG1ldGhvZCBpbiB0aGlzIGluc3RhbmNlIHRoYXQgbmVlZHMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgYEFqdmAgaW5zdGFuY2VcbiAgICogd2lsbCB0aHJvdyBpZiB0aGlzIG1ldGhvZCBoYXMgbm90IGJlZW4gY2FsbGVkLlxuICAgKlxuICAgKiBJZiB0aGUgaW5zdGFuY2UgaGFzIGFscmVhZHkgYmVlbiBmaW5hbGl6ZWQsIHRoaXMgaXMgYSBuby1vcC5cbiAgICogQHB1YmxpY1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHNjaGVtYSBpcyBub3QgdmFsaWRcbiAgICogQHJldHVybnMge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsU3RyaWN0U2NoZW1hT2JqZWN0Pj59IFJlY29yZCBvZiBzY2hlbWEgSURzIHRvIGZ1bGwgc2NoZW1hIG9iamVjdHNcbiAgICovXG4gIGZpbmFsaXplICgpIHtcbiAgICBpZiAodGhpcy5pc0ZpbmFsaXplZCgpKSB7XG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLFN0cmljdFNjaGVtYU9iamVjdD59ICovIChcbiAgICAgICAgdGhpcy5fZmluYWxpemVkU2NoZW1hc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBhanYgPSB0aGlzLl9hanY7XG5cbiAgICAvLyBBanYgd2lsbCBfbXV0YXRlXyB0aGUgc2NoZW1hLCBzbyB3ZSBuZWVkIHRvIGNsb25lIGl0LlxuICAgIGNvbnN0IGJhc2VTY2hlbWEgPSBfLmNsb25lRGVlcChhcHBpdW1Db25maWdTY2hlbWEpO1xuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1NjaGVtYU9iamVjdH0gc2NoZW1hXG4gICAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBbZXh0VHlwZV1cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4dE5hbWVdXG4gICAgICovXG4gICAgY29uc3QgYWRkQXJnU3BlY3MgPSAoc2NoZW1hLCBleHRUeXBlLCBleHROYW1lKSA9PiB7XG4gICAgICBmb3IgKGxldCBbcHJvcE5hbWUsIHByb3BTY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYSkpIHtcbiAgICAgICAgY29uc3QgYXJnU3BlYyA9IEFyZ1NwZWMuY3JlYXRlKHByb3BOYW1lLCB7XG4gICAgICAgICAgZGVzdDogcHJvcFNjaGVtYS5hcHBpdW1DbGlEZXN0LFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogcHJvcFNjaGVtYS5kZWZhdWx0LFxuICAgICAgICAgIGV4dFR5cGUsXG4gICAgICAgICAgZXh0TmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHthcmd9ID0gYXJnU3BlYztcbiAgICAgICAgdGhpcy5fYXJnU3BlY3Muc2V0KGFyZywgYXJnU3BlYyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGFkZEFyZ1NwZWNzKFxuICAgICAgXy5vbWl0KGJhc2VTY2hlbWEucHJvcGVydGllcy5zZXJ2ZXIucHJvcGVydGllcywgW1xuICAgICAgICBEUklWRVJfVFlQRSxcbiAgICAgICAgUExVR0lOX1RZUEUsXG4gICAgICBdKSxcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsU3RyaWN0U2NoZW1hT2JqZWN0Pn1cbiAgICAgKi9cbiAgICBjb25zdCBmaW5hbGl6ZWRTY2hlbWFzID0ge307XG5cbiAgICBjb25zdCBmaW5hbFNjaGVtYSA9IF8ucmVkdWNlKFxuICAgICAgdGhpcy5fcmVnaXN0ZXJlZFNjaGVtYXMsXG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSB7dHlwZW9mIGJhc2VTY2hlbWF9IGJhc2VTY2hlbWFcbiAgICAgICAqIEBwYXJhbSB7TWFwPHN0cmluZyxTY2hlbWFPYmplY3Q+fSBleHRlbnNpb25TY2hlbWFzXG4gICAgICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IGV4dFR5cGVcbiAgICAgICAqL1xuICAgICAgKGJhc2VTY2hlbWEsIGV4dGVuc2lvblNjaGVtYXMsIGV4dFR5cGUpID0+IHtcbiAgICAgICAgZXh0ZW5zaW9uU2NoZW1hcy5mb3JFYWNoKChzY2hlbWEsIGV4dE5hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCAkcmVmID0gQXJnU3BlYy50b1NjaGVtYUJhc2VSZWYoZXh0VHlwZSwgZXh0TmFtZSk7XG4gICAgICAgICAgc2NoZW1hLiRpZCA9ICRyZWY7XG4gICAgICAgICAgc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gZmFsc2U7IC8vIHRoaXMgbWFrZXMgYHNjaGVtYWAgYmVjb21lIGEgYFN0cmljdFNjaGVtYU9iamVjdGBcbiAgICAgICAgICBiYXNlU2NoZW1hLnByb3BlcnRpZXMuc2VydmVyLnByb3BlcnRpZXNbZXh0VHlwZV0ucHJvcGVydGllc1tleHROYW1lXSA9XG4gICAgICAgICAgICB7JHJlZiwgJGNvbW1lbnQ6IGV4dE5hbWV9O1xuICAgICAgICAgIGFqdi52YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRydWUpO1xuICAgICAgICAgIGFkZEFyZ1NwZWNzKHNjaGVtYS5wcm9wZXJ0aWVzLCBleHRUeXBlLCBleHROYW1lKTtcbiAgICAgICAgICBhanYuYWRkU2NoZW1hKHNjaGVtYSwgJHJlZik7XG4gICAgICAgICAgZmluYWxpemVkU2NoZW1hc1skcmVmXSA9IC8qKiBAdHlwZSB7U3RyaWN0U2NoZW1hT2JqZWN0fSAqLyAoc2NoZW1hKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBiYXNlU2NoZW1hO1xuICAgICAgfSxcbiAgICAgIGJhc2VTY2hlbWEsXG4gICAgKTtcblxuICAgIGFqdi5hZGRTY2hlbWEoZmluYWxTY2hlbWEsIEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKTtcbiAgICBmaW5hbGl6ZWRTY2hlbWFzW0FQUElVTV9DT05GSUdfU0NIRU1BX0lEXSA9IGZpbmFsU2NoZW1hO1xuICAgIGFqdi52YWxpZGF0ZVNjaGVtYShmaW5hbFNjaGVtYSwgdHJ1ZSk7XG5cbiAgICB0aGlzLl9maW5hbGl6ZWRTY2hlbWFzID0gZmluYWxpemVkU2NoZW1hcztcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShmaW5hbGl6ZWRTY2hlbWFzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIGFuZCBjcmVhdGVzIGFuIEFqdiBpbnN0YW5jZS5cbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge0Fqdn1cbiAgICovXG4gIHN0YXRpYyBfaW5zdGFudGlhdGVBanYgKCkge1xuICAgIGNvbnN0IGFqdiA9IGFkZEZvcm1hdHMoXG4gICAgICBuZXcgQWp2KHtcbiAgICAgICAgLy8gd2l0aG91dCB0aGlzIG5vdCBtdWNoIHZhbGlkYXRpb24gYWN0dWFsbHkgaGFwcGVuc1xuICAgICAgICBhbGxFcnJvcnM6IHRydWUsXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gYWRkIGN1c3RvbSBrZXl3b3JkcyB0byBhanYuIHNlZSBzY2hlbWEta2V5d29yZHMuanNcbiAgICBfLmZvckVhY2goa2V5d29yZHMsIChrZXl3b3JkKSA9PiB7XG4gICAgICBhanYuYWRkS2V5d29yZChrZXl3b3JkKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBhanY7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoaXMgaW5zdGFuY2UgdG8gaXRzIG9yaWdpbmFsIHN0YXRlLlxuICAgKlxuICAgKiAtIFJlbW92ZXMgYWxsIGFkZGVkIHNjaGVtYXMgZnJvbSB0aGUgYEFqdmAgaW5zdGFuY2VcbiAgICogLSBSZXNldHMgdGhlIG1hcCBvZiB7QGxpbmsgQXJnU3BlYyBBcmdTcGVjc31cbiAgICogLSBSZXNldHMgdGhlIG1hcCBvZiByZWdpc3RlcmVkIHNjaGVtYXNcbiAgICogLSBTZXRzIHRoZSB7QGxpbmsgQXBwaXVtU2NoZW1hLl9maW5hbGl6ZWQgX2ZpbmFsaXplZH0gZmxhZyB0byBgZmFsc2VgXG4gICAqXG4gICAqIElmIHlvdSBuZWVkIHRvIGNhbGwge0BsaW5rIEFwcGl1bVNjaGVtYS5maW5hbGl6ZX0gYWdhaW4sIHlvdSdsbCB3YW50IHRvIGNhbGwgdGhpcyBmaXJzdC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICByZXNldCAoKSB7XG4gICAgZm9yIChjb25zdCBzY2hlbWFJZCBvZiBPYmplY3Qua2V5cyh0aGlzLl9maW5hbGl6ZWRTY2hlbWFzID8/IHt9KSkge1xuICAgICAgdGhpcy5fYWp2LnJlbW92ZVNjaGVtYShzY2hlbWFJZCk7XG4gICAgfVxuICAgIHRoaXMuX2FyZ1NwZWNzID0gbmV3IFJlYWRvbmx5TWFwKCk7XG4gICAgdGhpcy5fcmVnaXN0ZXJlZFNjaGVtYXMgPSB7XG4gICAgICBbRFJJVkVSX1RZUEVdOiBuZXcgTWFwKCksXG4gICAgICBbUExVR0lOX1RZUEVdOiBuZXcgTWFwKCksXG4gICAgfTtcbiAgICB0aGlzLl9maW5hbGl6ZWRTY2hlbWFzID0gbnVsbDtcblxuICAgIC8vIEFqdiBzZWVtcyB0byBoYXZlIGFuIG92ZXItZWFnZXIgY2FjaGUsIHNvIHdlIGhhdmUgdG8gZHVtcCB0aGUgb2JqZWN0IGVudGlyZWx5LlxuICAgIHRoaXMuX2FqdiA9IEFwcGl1bVNjaGVtYS5faW5zdGFudGlhdGVBanYoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBzY2hlbWEgZnJvbSBhbiBleHRlbnNpb24uXG4gICAqXG4gICAqIFRoaXMgaXMgXCJmYWlsLWZhc3RcIiBpbiB0aGF0IHRoZSBzY2hlbWEgd2lsbCBpbW1lZGlhdGVseSBiZSB2YWxpZGF0ZWQgYWdhaW5zdCBKU09OIHNjaGVtYSBkcmFmdC0wNyBfb3JfIHdoYXRldmVyIHRoZSB2YWx1ZSBvZiB0aGUgc2NoZW1hJ3MgYCRzY2hlbWFgIHByb3AgaXMuXG4gICAqXG4gICAqIERvZXMgX25vdF8gYWRkIHRoZSBzY2hlbWEgdG8gdGhlIGBhanZgIGluc3RhbmNlICh0aGlzIGlzIGRvbmUgYnkge0BsaW5rIEFwcGl1bVNjaGVtYS5maW5hbGl6ZX0pLlxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vZXh0LWNvbmZpZy1pbycpLkV4dGVuc2lvblR5cGV9IGV4dFR5cGUgLSBFeHRlbnNpb24gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZSAtIFVuaXF1ZSBleHRlbnNpb24gbmFtZSBmb3IgYHR5cGVgXG4gICAqIEBwYXJhbSB7U2NoZW1hT2JqZWN0fSBzY2hlbWEgLSBTY2hlbWEgb2JqZWN0XG4gICAqIEB0aHJvd3Mge1NjaGVtYU5hbWVDb25mbGljdEVycm9yfSBJZiB0aGUgc2NoZW1hIGlzIGFuIGludmFsaWRcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICByZWdpc3RlclNjaGVtYSAoZXh0VHlwZSwgZXh0TmFtZSwgc2NoZW1hKSB7XG4gICAgaWYgKCEoZXh0VHlwZSAmJiBleHROYW1lKSB8fCBfLmlzVW5kZWZpbmVkKHNjaGVtYSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdFeHBlY3RlZCBleHRlbnNpb24gdHlwZSwgZXh0ZW5zaW9uIG5hbWUsIGFuZCBhIGRlZmluZWQgc2NoZW1hJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghQXBwaXVtU2NoZW1hLmlzU3VwcG9ydGVkU2NoZW1hVHlwZShzY2hlbWEpKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hVW5zdXBwb3J0ZWRTY2hlbWFFcnJvcihzY2hlbWEsIGV4dFR5cGUsIGV4dE5hbWUpO1xuICAgIH1cbiAgICBjb25zdCBub3JtYWxpemVkRXh0TmFtZSA9IF8ua2ViYWJDYXNlKGV4dE5hbWUpO1xuICAgIGlmICh0aGlzLmhhc1JlZ2lzdGVyZWRTY2hlbWEoZXh0VHlwZSwgbm9ybWFsaXplZEV4dE5hbWUpKSB7XG4gICAgICBpZiAodGhpcy5fcmVnaXN0ZXJlZFNjaGVtYXNbZXh0VHlwZV0uZ2V0KG5vcm1hbGl6ZWRFeHROYW1lKSA9PT0gc2NoZW1hKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBTY2hlbWFOYW1lQ29uZmxpY3RFcnJvcihleHRUeXBlLCBleHROYW1lKTtcbiAgICB9XG4gICAgdGhpcy5fYWp2LnZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdHJ1ZSk7XG5cbiAgICB0aGlzLl9yZWdpc3RlcmVkU2NoZW1hc1tleHRUeXBlXS5zZXQobm9ybWFsaXplZEV4dE5hbWUsIHNjaGVtYSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHtAbGluayBBcmdTcGVjfSBmb3IgdGhlIGdpdmVuIGFyZ3VtZW50IG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gQ0xJIGFyZ3VtZW50IG5hbWVcbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBbZXh0VHlwZV0gLSBFeHRlbnNpb24gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4dE5hbWVdIC0gRXh0ZW5zaW9uIG5hbWVcbiAgICogQHJldHVybnMge0FyZ1NwZWN8dW5kZWZpbmVkfSBBcmdTcGVjIG9yIGB1bmRlZmluZWRgIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgZ2V0QXJnU3BlYyAobmFtZSwgZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9hcmdTcGVjcy5nZXQoQXJnU3BlYy50b0FyZyhuYW1lLCBleHRUeXBlLCBleHROYW1lKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGluc3RhbmNlIGtub3dzIGFib3V0IGFuIGFyZ3VtZW50IGJ5IHRoZSBnaXZlbiBgbmFtZWAuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gQ0xJIGFyZ3VtZW50IG5hbWVcbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBbZXh0VHlwZV0gLSBFeHRlbnNpb24gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4dE5hbWVdIC0gRXh0ZW5zaW9uIG5hbWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiBzdWNoIGFuIHtAbGluayBBcmdTcGVjfSBleGlzdHNcbiAgICovXG4gIGhhc0FyZ1NwZWMgKG5hbWUsIGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJnU3BlY3MuaGFzKEFyZ1NwZWMudG9BcmcobmFtZSwgZXh0VHlwZSwgZXh0TmFtZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBgUmVjb3JkYCBvZiBhcmd1bWVudCBcImRlc3RcIiBzdHJpbmdzIHRvIGRlZmF1bHQgdmFsdWVzLlxuICAgKlxuICAgKiBUaGUgXCJkZXN0XCIgc3RyaW5nIGlzIHRoZSBwcm9wZXJ0eSBuYW1lIGluIG9iamVjdCByZXR1cm5lZCBieVxuICAgKiBgYXJncGFyc2UuQXJndW1lbnRQYXJzZXJbJ3BhcnNlX2FyZ3MnXWAuXG4gICAqIEB0ZW1wbGF0ZSB7Ym9vbGVhbnx1bmRlZmluZWR9IEZsYXR0ZW5lZFxuICAgKiBAcGFyYW0ge0ZsYXR0ZW5lZH0gW2ZsYXR0ZW49dHJ1ZV0gLSBJZiBgdHJ1ZWAsIGZsYXR0ZW5zIHRoZSByZXR1cm5lZCBvYmplY3RcbiAgICogdXNpbmcgXCJrZXlwYXRoXCItc3R5bGUga2V5cyBvZiB0aGUgZm9ybWF0IGA8ZXh0VHlwZT4uPGV4dE5hbWU+LjxhcmdOYW1lPmAuXG4gICAqIE90aGVyd2lzZSwgcmV0dXJucyBhIG5lc3RlZCBvYmplY3QgdXNpbmcgYGV4dFR5cGVgIGFuZCBgZXh0TmFtZWAgYXNcbiAgICogcHJvcGVydGllcy4gQmFzZSBhcmd1bWVudHMgKHNlcnZlciBhcmd1bWVudHMpIGFyZSBhbHdheXMgYXQgdGhlIHRvcCBsZXZlbC5cbiAgICogQHJldHVybnMge0RlZmF1bHRWYWx1ZXM8RmxhdHRlbmVkPn1cbiAgICovXG4gIGdldERlZmF1bHRzIChmbGF0dGVuID0gLyoqIEB0eXBlIHtGbGF0dGVuZWR9ICovICh0cnVlKSkge1xuICAgIGlmICghdGhpcy5pc0ZpbmFsaXplZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hRmluYWxpemF0aW9uRXJyb3IoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBjYWxsYmFjayBEZWZhdWx0UmVkdWNlclxuICAgICAqIEBwYXJhbSB7RGVmYXVsdFZhbHVlczxGbGF0dGVuZWQ+fSBkZWZhdWx0c1xuICAgICAqIEBwYXJhbSB7QXJnU3BlY30gYXJnU3BlY1xuICAgICAqIEByZXR1cm5zIHtEZWZhdWx0VmFsdWVzPEZsYXR0ZW5lZD59XG4gICAgICovXG4gICAgLyoqIEB0eXBlIHtEZWZhdWx0UmVkdWNlcn0gKi9cbiAgICBjb25zdCByZWR1Y2VyID0gZmxhdHRlblxuICAgICAgPyAoZGVmYXVsdHMsIHtkZWZhdWx0VmFsdWUsIGRlc3R9KSA9PiB7XG4gICAgICAgIGlmICghXy5pc1VuZGVmaW5lZChkZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgICAgZGVmYXVsdHNbZGVzdF0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRzO1xuICAgICAgfVxuICAgICAgOiAoZGVmYXVsdHMsIHtkZWZhdWx0VmFsdWUsIGRlc3R9KSA9PiB7XG4gICAgICAgIGlmICghXy5pc1VuZGVmaW5lZChkZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgICAgXy5zZXQoZGVmYXVsdHMsIGRlc3QsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRzO1xuICAgICAgfTtcblxuICAgIC8qKiBAdHlwZSB7RGVmYXVsdFZhbHVlczxGbGF0dGVuZWQ+fSAqL1xuICAgIGNvbnN0IHJldHZhbCA9IHt9O1xuICAgIHJldHVybiBbLi4udGhpcy5fYXJnU3BlY3MudmFsdWVzKCldLnJlZHVjZShyZWR1Y2VyLCByZXR2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBmbGF0dGVuZWQgUmVjb3JkIG9mIGRlZmF1bHRzIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi4gS2V5cyB3aWxsXG4gICAqIGJlIG9mIGZvcm1hdCBgPGFyZ05hbWU+YC5cbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBleHRUeXBlIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBFeHRlbnNpb24gbmFtZVxuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZyxBcmdTcGVjRGVmYXVsdFZhbHVlPn1cbiAgICovXG4gIGdldERlZmF1bHRzRm9yRXh0ZW5zaW9uIChleHRUeXBlLCBleHROYW1lKSB7XG4gICAgaWYgKCF0aGlzLmlzRmluYWxpemVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBTY2hlbWFGaW5hbGl6YXRpb25FcnJvcigpO1xuICAgIH1cbiAgICBjb25zdCBzcGVjcyA9IFsuLi50aGlzLl9hcmdTcGVjcy52YWx1ZXMoKV0uZmlsdGVyKFxuICAgICAgKHNwZWMpID0+IHNwZWMuZXh0VHlwZSA9PT0gZXh0VHlwZSAmJiBzcGVjLmV4dE5hbWUgPT09IGV4dE5hbWUsXG4gICAgKTtcbiAgICByZXR1cm4gc3BlY3MucmVkdWNlKChkZWZhdWx0cywge2RlZmF1bHRWYWx1ZSwgcmF3RGVzdH0pID0+IHtcbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZChkZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgIGRlZmF1bHRzW3Jhd0Rlc3RdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlZmF1bHRzO1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGbGF0dGVuIHNjaGVtYSBpbnRvIGFuIGFycmF5IG9mIGBTY2hlbWFPYmplY3RgcyBhbmQgYXNzb2NpYXRlZFxuICAgKiB7QGxpbmsgQXJnU3BlYyBBcmdTcGVjc30uXG4gICAqXG4gICAqIENvbnZlcnRzIG5lc3RlZCBleHRlbnNpb24gc2NoZW1hcyB0byBrZXlzIGJhc2VkIG9uIHRoZSBleHRlbnNpb24gdHlwZSBhbmRcbiAgICogbmFtZS4gVXNlZCB3aGVuIHRyYW5zbGF0aW5nIHRvIGBhcmdwYXJzZWAgb3B0aW9ucyBvciBnZXR0aW5nIHRoZSBsaXN0IG9mXG4gICAqIGRlZmF1bHQgdmFsdWVzIChzZWUge0BsaW5rIEFwcGl1bVNjaGVtYS5nZXREZWZhdWx0c30pIGZvciBDTEkgb3Igb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGFuIGludGVybWVkaWF0ZSByZXByc2VudGF0aW9uIHVzZWQgYnkgYGNsaS1hcmdzYFxuICAgKiBtb2R1bGUncyBgdG9QYXJzZXJBcmdzYCwgd2hpY2ggY29udmVydHMgdGhlIGZpbmFsaXplZCBzY2hlbWEgdG8gcGFyYW1ldGVyc1xuICAgKiB1c2VkIGJ5IGBhcmdwYXJzZWAuXG4gICAqIEB0aHJvd3MgSWYge0BsaW5rIEFwcGl1bVNjaGVtYS5maW5hbGl6ZX0gaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gICAqIEByZXR1cm5zIHtGbGF0dGVuZWRTY2hlbWF9XG4gICAqL1xuICBmbGF0dGVuICgpIHtcbiAgICBjb25zdCBzY2hlbWEgPSB0aGlzLmdldFNjaGVtYSgpO1xuXG4gICAgLyoqIEB0eXBlIHt7cHJvcGVydGllczogU2NoZW1hT2JqZWN0LCBwcmVmaXg6IHN0cmluZ1tdfVtdfSAqL1xuICAgIGNvbnN0IHN0YWNrID0gW3twcm9wZXJ0aWVzOiBzY2hlbWEucHJvcGVydGllcywgcHJlZml4OiBbXX1dO1xuICAgIC8qKiBAdHlwZSB7RmxhdHRlbmVkU2NoZW1hfSAqL1xuICAgIGNvbnN0IGZsYXR0ZW5lZCA9IFtdO1xuXG4gICAgLy8gdGhpcyBiaXQgaXMgYSByZWN1cnNpdmUgYWxnb3JpdGhtIHJld3JpdHRlbiBhcyBhIGZvciBsb29wLlxuICAgIC8vIHdoZW4gd2UgZmluZCBzb21ldGhpbmcgd2Ugd2FudCB0byB0cmF2ZXJzZSwgd2UgYWRkIGl0IHRvIGBzdGFja2BcbiAgICBmb3IgKGNvbnN0IHtwcm9wZXJ0aWVzLCBwcmVmaXh9IG9mIHN0YWNrKSB7XG4gICAgICBjb25zdCBwYWlycyA9IF8udG9QYWlycyhwcm9wZXJ0aWVzKTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHBhaXJzKSB7XG4gICAgICAgIGNvbnN0IHtwcm9wZXJ0aWVzLCAkcmVmfSA9IHZhbHVlO1xuICAgICAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgICAgIHByZWZpeDoga2V5ID09PSBTRVJWRVJfUFJPUF9OQU1FID8gW10gOiBbLi4ucHJlZml4LCBrZXldLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKCRyZWYpIHtcbiAgICAgICAgICBsZXQgcmVmU2NoZW1hO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZWZTY2hlbWEgPSB0aGlzLmdldFNjaGVtYSgkcmVmKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgY2FuIGhhcHBlbiBpZiBhbiBleHRlbnNpb24gc2NoZW1hIHN1cHBsaWVzIGEgJHJlZiB0byBhIG5vbi1leGlzdGVudCBzY2hlbWFcbiAgICAgICAgICAgIHRocm93IG5ldyBTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IoJHJlZik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHtub3JtYWxpemVkRXh0TmFtZX0gPVxuICAgICAgICAgICAgQXJnU3BlYy5leHRlbnNpb25JbmZvRnJvbVJvb3RTY2hlbWFJZCgkcmVmKTtcbiAgICAgICAgICBpZiAoIW5vcm1hbGl6ZWRFeHROYW1lKSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxuICAgICAgICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBleHRlbnNpb24gbmFtZSBmcm9tIHNjaGVtYSBJRCAkeyRyZWZ9LiBUaGlzIGlzIGEgYnVnLmAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHJlZlNjaGVtYS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgcHJlZml4OiBbLi4ucHJlZml4LCBrZXksIG5vcm1hbGl6ZWRFeHROYW1lXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgIT09IERSSVZFUl9UWVBFICYmIGtleSAhPT0gUExVR0lOX1RZUEUpIHtcbiAgICAgICAgICBjb25zdCBbZXh0VHlwZSwgZXh0TmFtZV0gPSBwcmVmaXg7XG4gICAgICAgICAgY29uc3QgYXJnU3BlYyA9IHRoaXMuZ2V0QXJnU3BlYyhcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIC8qKiBAdHlwZSB7RXh0ZW5zaW9uVHlwZX0gKi8gKGV4dFR5cGUpLFxuICAgICAgICAgICAgZXh0TmFtZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghYXJnU3BlYykge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcbiAgICAgICAgICAgICAgYFVua25vd24gYXJndW1lbnQgd2l0aCBrZXkgJHtrZXl9LCBleHRUeXBlICR7ZXh0VHlwZX0gYW5kIGV4dE5hbWUgJHtleHROYW1lfS4gVGhpcyBpcyBhIGJ1Zy5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmxhdHRlbmVkLnB1c2goe3NjaGVtYTogXy5jbG9uZURlZXAodmFsdWUpLCBhcmdTcGVjfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdHRlbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgc2NoZW1hIGl0c2VsZlxuICAgKiBAcHVibGljXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVmXSAtIFNjaGVtYSBJRFxuICAgKiBAdGhyb3dzIElmIHRoZSBzY2hlbWEgaGFzIG5vdCB5ZXQgYmVlbiBmaW5hbGl6ZWRcbiAgICogQHJldHVybnMge1NjaGVtYU9iamVjdH1cbiAgICovXG4gIGdldFNjaGVtYSAocmVmID0gQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQpIHtcbiAgICByZXR1cm4gLyoqIEB0eXBlIHtTY2hlbWFPYmplY3R9ICovICh0aGlzLl9nZXRWYWxpZGF0b3IocmVmKS5zY2hlbWEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBzY2hlbWEgdmFsaWRhdG9yIGZ1bmN0aW9uIGZyb20gQWp2XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbaWRdIC0gU2NoZW1hIElEXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJ2FqdicpLlZhbGlkYXRlRnVuY3Rpb259XG4gICAqL1xuICBfZ2V0VmFsaWRhdG9yIChpZCA9IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gdGhpcy5fYWp2LmdldFNjaGVtYShpZCk7XG4gICAgaWYgKCF2YWxpZGF0b3IpIHtcbiAgICAgIGlmIChpZCA9PT0gQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNjaGVtYUZpbmFsaXphdGlvbkVycm9yKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgU2NoZW1hVW5rbm93blNjaGVtYUVycm9yKGlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhbiBvYmplY3QsIHZhbGlkYXRlcyBpdCBhZ2FpbnN0IHRoZSBBcHBpdW0gY29uZmlnIHNjaGVtYS5cbiAgICogSWYgZXJyb3JzIG9jY3VyLCB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBiZSBub24tZW1wdHkuXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSAtIFRoZSB2YWx1ZSAoaG9wZWZ1bGx5IGFuIG9iamVjdCkgdG8gdmFsaWRhdGUgYWdhaW5zdCB0aGUgc2NoZW1hXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVmXSAtIFNjaGVtYSBJRCBvciByZWYuXG4gICAqIEBwdWJsaWNcbiAgICogQHJldHVybnMge2ltcG9ydCgnYWp2JykuRXJyb3JPYmplY3RbXX0gQXJyYXkgb2YgZXJyb3JzLCBpZiBhbnkuXG4gICAqL1xuICB2YWxpZGF0ZSAodmFsdWUsIHJlZiA9IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gdGhpcy5fZ2V0VmFsaWRhdG9yKHJlZik7XG4gICAgcmV0dXJuICF2YWxpZGF0b3IodmFsdWUpICYmIF8uaXNBcnJheSh2YWxpZGF0b3IuZXJyb3JzKVxuICAgICAgPyBbLi4udmFsaWRhdG9yLmVycm9yc11cbiAgICAgIDogW107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgYGZpbGVuYW1lYCdzIGZpbGUgZXh0ZW5zaW9uIGlzIGFsbG93ZWQgKGluIHtAbGluayBBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TfSkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc0FsbG93ZWRTY2hlbWFGaWxlRXh0ZW5zaW9uIChmaWxlbmFtZSkge1xuICAgIHJldHVybiBBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TLmhhcyhwYXRoLmV4dG5hbWUoZmlsZW5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBgc2NoZW1hYCBpcyBhIHBsYWluIG9iamVjdCB3aXRoIGEgbm9uLXRydWUgYCRhc3luY2AgcHJvcGVydHkuXG4gICAqIEBwYXJhbSB7YW55fSBzY2hlbWEgLSBTY2hlbWEgdG8gY2hlY2tcbiAgICogQHJldHVybnMge3NjaGVtYSBpcyBTY2hlbWFPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgaXNTdXBwb3J0ZWRTY2hlbWFUeXBlIChzY2hlbWEpIHtcbiAgICByZXR1cm4gXy5pc1BsYWluT2JqZWN0KHNjaGVtYSkgJiYgc2NoZW1hLiRhc3luYyAhPT0gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIHRoZSB7QGxpbmsgQXBwaXVtU2NoZW1hfSBpbnN0YW5jZSBoYXMgbm90IHlldCBiZWVuIGZpbmFsaXplZCwgYnV0XG4gKiB0aGUgbWV0aG9kIGNhbGxlZCByZXF1aXJlcyBpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjaGVtYUZpbmFsaXphdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHN0cmluZz59XG4gICAqL1xuICBjb2RlID0gJ0FQUElVTUVSUl9TQ0hFTUFfRklOQUxJWkFUSU9OJztcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoJ1NjaGVtYSBub3QgeWV0IGZpbmFsaXplZDsgYGZpbmFsaXplKClgIG11c3QgYmUgY2FsbGVkIGZpcnN0LicpO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBcInVuaXF1ZVwiIHNjaGVtYSBJRCBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBzY2hlbWEgSUQuXG4gKlxuICogVGhpcyBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgY2F1c2VkIGJ5IGF0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgdGhlIHNhbWUgc2NoZW1hIHR3aWNlLlxuICovXG5leHBvcnQgY2xhc3MgU2NoZW1hTmFtZUNvbmZsaWN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9OQU1FX0NPTkZMSUNUJztcblxuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHtleHRUeXBlOiBFeHRlbnNpb25UeXBlLCBleHROYW1lOiBzdHJpbmd9Pn1cbiAgICovXG4gIGRhdGE7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZVxuICAgKi9cbiAgY29uc3RydWN0b3IgKGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICBzdXBlcihcbiAgICAgIGBOYW1lIGZvciAke2V4dFR5cGV9IHNjaGVtYSBcIiR7ZXh0TmFtZX1cIiBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBzY2hlbWFgLFxuICAgICk7XG4gICAgdGhpcy5kYXRhID0ge2V4dFR5cGUsIGV4dE5hbWV9O1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBzY2hlbWEgSUQgd2FzIGV4cGVjdGVkLCBidXQgaXQgZG9lc24ndCBleGlzdCBvbiB0aGUge0BsaW5rIEFqdn0gaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IgZXh0ZW5kcyBSZWZlcmVuY2VFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9VTktOT1dOX1NDSEVNQSc7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTx7c2NoZW1hSWQ6IHN0cmluZ30+fVxuICAgKi9cbiAgZGF0YTtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjaGVtYUlkXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoc2NoZW1hSWQpIHtcbiAgICBzdXBlcihgVW5rbm93biBzY2hlbWE6IFwiJHtzY2hlbWFJZH1cImApO1xuICAgIHRoaXMuZGF0YSA9IHtzY2hlbWFJZH07XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd24gd2hlbiBhIHNjaGVtYSBpcyBwcm92aWRlZCwgYnV0IGl0J3Mgb2YgYW4gdW5zdXBwb3J0ZWQgdHlwZS5cbiAqXG4gKiBcIlZhbGlkXCIgc2NoZW1hcyB3aGljaCBhcmUgdW5zdXBwb3J0ZWQgaW5jbHVkZSBib29sZWFuIHNjaGVtYXMgYW5kIGFzeW5jIHNjaGVtYXNcbiAqIChoYXZpbmcgYSBgdHJ1ZWAgYCRhc3luY2AgcHJvcGVydHkpLlxuICovXG5leHBvcnQgY2xhc3MgU2NoZW1hVW5zdXBwb3J0ZWRTY2hlbWFFcnJvciBleHRlbmRzIFR5cGVFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9VTlNVUFBPUlRFRF9TQ0hFTUEnO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8e3NjaGVtYTogYW55LCBleHRUeXBlOiBFeHRlbnNpb25UeXBlLCBleHROYW1lOiBzdHJpbmd9Pn1cbiAgICovXG4gIGRhdGE7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55fSBzY2hlbWFcbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBleHRUeXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoc2NoZW1hLCBleHRUeXBlLCBleHROYW1lKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy84Mjc3XG4gICAgc3VwZXIoXG4gICAgICAoKCkgPT4ge1xuICAgICAgICBsZXQgbXNnID0gYFVuc3VwcG9ydGVkIHNjaGVtYSBmcm9tICR7ZXh0VHlwZX0gXCIke2V4dE5hbWV9XCI6YDtcbiAgICAgICAgaWYgKF8uaXNCb29sZWFuKHNjaGVtYSkpIHtcbiAgICAgICAgICByZXR1cm4gYCR7bXNnfSBzY2hlbWEgY2Fubm90IGJlIGEgYm9vbGVhbmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdChzY2hlbWEpKSB7XG4gICAgICAgICAgaWYgKHNjaGVtYS4kYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHttc2d9IHNjaGVtYSBjYW5ub3QgYmUgYW4gYXN5bmMgc2NoZW1hYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgYHNjaGVtYSBJUyBzdXBwb3J0ZWQ7IHRoaXMgZXJyb3Igc2hvdWxkIG5vdCBiZSB0aHJvd24gKHRoaXMgaXMgYSBidWcpLiB2YWx1ZSBvZiBzY2hlbWE6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgICl9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHttc2d9IHNjaGVtYSBtdXN0IGJlIGEgcGxhaW4gb2JqZWN0IHdpdGhvdXQgYSB0cnVlIFwiJGFzeW5jXCIgcHJvcGVydHlgO1xuICAgICAgfSkoKSxcbiAgICApO1xuICAgIHRoaXMuZGF0YSA9IHtzY2hlbWEsIGV4dFR5cGUsIGV4dE5hbWV9O1xuICB9XG59XG5cbmNvbnN0IGFwcGl1bVNjaGVtYSA9IEFwcGl1bVNjaGVtYS5jcmVhdGUoKTtcblxuZXhwb3J0IGNvbnN0IHtcbiAgcmVnaXN0ZXJTY2hlbWEsXG4gIGdldEFyZ1NwZWMsXG4gIGhhc0FyZ1NwZWMsXG4gIGlzRmluYWxpemVkLFxuICBmaW5hbGl6ZTogZmluYWxpemVTY2hlbWEsXG4gIHJlc2V0OiByZXNldFNjaGVtYSxcbiAgdmFsaWRhdGUsXG4gIGdldFNjaGVtYSxcbiAgZmxhdHRlbjogZmxhdHRlblNjaGVtYSxcbiAgZ2V0RGVmYXVsdHM6IGdldERlZmF1bHRzRm9yU2NoZW1hLFxuICBnZXREZWZhdWx0c0ZvckV4dGVuc2lvbixcbn0gPSBhcHBpdW1TY2hlbWE7XG5leHBvcnQgY29uc3Qge2lzQWxsb3dlZFNjaGVtYUZpbGVFeHRlbnNpb259ID0gQXBwaXVtU2NoZW1hO1xuXG4vKipcbiAqIEFwcGl1bSBvbmx5IHN1cHBvcnRzIHNjaGVtYXMgdGhhdCBhcmUgcGxhaW4gb2JqZWN0czsgbm90IGFycmF5cy5cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FqdicpLlNjaGVtYU9iamVjdCAmIHtba2V5OiBudW1iZXJdOiBuZXZlcn19IFNjaGVtYU9iamVjdFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vZXh0LWNvbmZpZy1pbycpLkV4dGVuc2lvblR5cGV9IEV4dGVuc2lvblR5cGVcbiAqL1xuXG4vKipcbiAqIEFuIG9iamVjdCBoYXZpbmcgcHJvcGVydHkgYGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZWBcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0cmljdFByb3BcbiAqIEBwcm9wZXJ0eSB7ZmFsc2V9IGFkZGl0aW9uYWxQcm9wZXJ0aWVzXG4gKi9cblxuLyoqXG4gKiBBIHtAbGluayBTY2hlbWFPYmplY3R9IHdpdGggYGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZWBcbiAqIEB0eXBlZGVmIHtTY2hlbWFPYmplY3QgJiBTdHJpY3RQcm9wfSBTdHJpY3RTY2hlbWFPYmplY3RcbiAqL1xuXG4vKipcbiAqIEEgbGlzdCBvZiBzY2hlbWFzIGFzc29jaWF0ZWQgd2l0aCBwcm9wZXJ0aWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHtAbGluayBBcmdTcGVjfSBvYmplY3RzLlxuICpcbiAqIEludGVybWVkaWF0ZSBkYXRhIHN0cnVjdHVyZSB1c2VkIHdoZW4gY29udmVydGluZyB0aGUgZW50aXJlIHNjaGVtYSBkb3duIHRvIENMSSBhcmd1bWVudHMuXG4gKiBAdHlwZWRlZiB7e3NjaGVtYTogU2NoZW1hT2JqZWN0LCBhcmdTcGVjOiBBcmdTcGVjfVtdfSBGbGF0dGVuZWRTY2hlbWFcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtBcmdTcGVjWydkZWZhdWx0VmFsdWUnXX0gQXJnU3BlY0RlZmF1bHRWYWx1ZVxuICovXG5cbi8qKlxuICogZS5nLiBge2RyaXZlcjoge2ZvbzogJ2Jhcid9fWAgd2hlcmUgYGZvb2AgaXMgdGhlIGFyZyBuYW1lIGFuZCBgYmFyYCBpcyB0aGUgZGVmYXVsdCB2YWx1ZS5cbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLFJlY29yZDxzdHJpbmcsQXJnU3BlY0RlZmF1bHRWYWx1ZT4+fSBOZXN0ZWRBcmdTcGVjRGVmYXVsdFZhbHVlXG4gKi9cblxuLyoqXG4gKiBIZWxwZXIgdHlwZSBmb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB7QGxpbmsgQXBwaXVtU2NoZW1hLmdldERlZmF1bHRzfVxuICogQHRlbXBsYXRlIHtib29sZWFufHVuZGVmaW5lZH0gRmxhdHRlbmVkXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZyxGbGF0dGVuZWQgZXh0ZW5kcyB0cnVlID8gQXJnU3BlY0RlZmF1bHRWYWx1ZSA6IEFyZ1NwZWNEZWZhdWx0VmFsdWUgfCBOZXN0ZWRBcmdTcGVjRGVmYXVsdFZhbHVlPn0gRGVmYXVsdFZhbHVlc1xuICovXG4iXSwiZmlsZSI6ImxpYi9zY2hlbWEvc2NoZW1hLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|