@jsprismarine/brigadier 0.14.1 → 0.14.2-unstable-20260920220147
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/CHANGELOG.md +4 -0
- package/dist/CommandDispatcher.cjs.cjs +34 -30
- package/dist/CommandDispatcher.es.js +34 -30
- package/dist/StringReader.cjs.cjs +10 -9
- package/dist/StringReader.es.js +10 -9
- package/dist/arguments/BoolArgumentType.cjs.cjs +1 -1
- package/dist/arguments/BoolArgumentType.es.js +1 -1
- package/dist/arguments/FloatArgumentType.cjs.cjs +1 -1
- package/dist/arguments/FloatArgumentType.es.js +1 -1
- package/dist/arguments/IntegerArgumentType.cjs.cjs +1 -1
- package/dist/arguments/IntegerArgumentType.es.js +1 -1
- package/dist/context/CommandContextBuilder.cjs.cjs +17 -14
- package/dist/context/CommandContextBuilder.es.js +17 -14
- package/dist/context/StringRange.cjs.cjs +1 -1
- package/dist/context/StringRange.es.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/suggestion/IntegerSuggestion.cjs.cjs +1 -1
- package/dist/suggestion/IntegerSuggestion.es.js +1 -1
- package/dist/suggestion/Suggestions.cjs.cjs +3 -2
- package/dist/suggestion/Suggestions.es.js +3 -2
- package/dist/tree/ArgumentCommandNode.cjs.cjs +5 -4
- package/dist/tree/ArgumentCommandNode.es.js +5 -4
- package/dist/tree/CommandNode.cjs.cjs +1 -1
- package/dist/tree/CommandNode.es.js +1 -1
- package/dist/tree/LiteralCommandNode.cjs.cjs +1 -1
- package/dist/tree/LiteralCommandNode.es.js +1 -1
- package/dist/tree/RootCommandNode.cjs.cjs +1 -1
- package/dist/tree/RootCommandNode.es.js +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -37,9 +37,11 @@ var CommandDispatcher = class {
|
|
|
37
37
|
if (input instanceof require_StringReader.default) {
|
|
38
38
|
if (source) parse = this.parse(input, source);
|
|
39
39
|
} else parse = input;
|
|
40
|
-
if (parse.getReader().canRead())
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
if (parse.getReader().canRead()) {
|
|
41
|
+
if (parse.getExceptions().size === 1) throw parse.getExceptions().values().next().value;
|
|
42
|
+
else if (parse.getContext().getRange().isEmpty()) throw require_exceptions_CommandSyntaxException.default.BUILT_IN_EXCEPTIONS.dispatcherUnknownCommand().createWithContext(parse.getReader());
|
|
43
|
+
else throw require_exceptions_CommandSyntaxException.default.BUILT_IN_EXCEPTIONS.dispatcherUnknownArgument().createWithContext(parse.getReader());
|
|
44
|
+
}
|
|
43
45
|
let result = [];
|
|
44
46
|
let forked = false;
|
|
45
47
|
let foundCommand = false;
|
|
@@ -175,34 +177,36 @@ var CommandDispatcher = class {
|
|
|
175
177
|
let childOptional = node.getCommand() != null;
|
|
176
178
|
let open = childOptional ? USAGE_OPTIONAL_OPEN : USAGE_REQUIRED_OPEN;
|
|
177
179
|
let close = childOptional ? USAGE_OPTIONAL_CLOSE : USAGE_REQUIRED_CLOSE;
|
|
178
|
-
if (!deep)
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
let usage = this.__getSmartUsage(child, source, childOptional, true);
|
|
190
|
-
if (usage !== null) childUsage.add(usage);
|
|
191
|
-
}
|
|
192
|
-
if (childUsage.size === 1) {
|
|
193
|
-
let usage = childUsage.values().next().value;
|
|
194
|
-
return self + ARGUMENT_SEPARATOR + (childOptional ? USAGE_OPTIONAL_OPEN + usage + USAGE_OPTIONAL_CLOSE : usage);
|
|
195
|
-
} else if (childUsage.size > 1) {
|
|
196
|
-
let builder = open;
|
|
197
|
-
let count = 0;
|
|
180
|
+
if (!deep) {
|
|
181
|
+
if (node.getRedirect() != null) {
|
|
182
|
+
let redirect = node.getRedirect() == this.root ? "..." : "-> " + node.getRedirect()?.getUsageText();
|
|
183
|
+
return self + ARGUMENT_SEPARATOR + redirect;
|
|
184
|
+
} else {
|
|
185
|
+
let children = [...node.getChildren()].filter((c) => c.canUse(source));
|
|
186
|
+
if (children.length == 1) {
|
|
187
|
+
let usage = this.__getSmartUsage(children[0], source, childOptional, childOptional);
|
|
188
|
+
if (usage !== null) return self + ARGUMENT_SEPARATOR + usage;
|
|
189
|
+
} else if (children.length > 1) {
|
|
190
|
+
let childUsage = /* @__PURE__ */ new Set();
|
|
198
191
|
for (let child of children) {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
count++;
|
|
192
|
+
let usage = this.__getSmartUsage(child, source, childOptional, true);
|
|
193
|
+
if (usage !== null) childUsage.add(usage);
|
|
202
194
|
}
|
|
203
|
-
if (
|
|
204
|
-
|
|
205
|
-
return self + ARGUMENT_SEPARATOR +
|
|
195
|
+
if (childUsage.size === 1) {
|
|
196
|
+
let usage = childUsage.values().next().value;
|
|
197
|
+
return self + ARGUMENT_SEPARATOR + (childOptional ? USAGE_OPTIONAL_OPEN + usage + USAGE_OPTIONAL_CLOSE : usage);
|
|
198
|
+
} else if (childUsage.size > 1) {
|
|
199
|
+
let builder = open;
|
|
200
|
+
let count = 0;
|
|
201
|
+
for (let child of children) {
|
|
202
|
+
if (count > 0) builder += USAGE_OR;
|
|
203
|
+
builder += child.getUsageText();
|
|
204
|
+
count++;
|
|
205
|
+
}
|
|
206
|
+
if (count > 0) {
|
|
207
|
+
builder += close;
|
|
208
|
+
return self + ARGUMENT_SEPARATOR + builder;
|
|
209
|
+
}
|
|
206
210
|
}
|
|
207
211
|
}
|
|
208
212
|
}
|
|
@@ -261,4 +265,4 @@ var CommandDispatcher = class {
|
|
|
261
265
|
//#endregion
|
|
262
266
|
exports.default = CommandDispatcher;
|
|
263
267
|
|
|
264
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tbWFuZERpc3BhdGNoZXIuY2pzLmNqcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi9zcmMvQ29tbWFuZERpc3BhdGNoZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgQW1iaWd1aXR5Q29uc3VtZXIgZnJvbSAnLi9BbWJpZ3VpdHlDb25zdW1lcic7XG5pbXBvcnQgUGFyc2VSZXN1bHRzIGZyb20gJy4vUGFyc2VSZXN1bHRzJztcbmltcG9ydCB0eXBlIFJlc3VsdENvbnN1bWVyIGZyb20gJy4vUmVzdWx0Q29uc3VtZXInO1xuaW1wb3J0IFN0cmluZ1JlYWRlciBmcm9tICcuL1N0cmluZ1JlYWRlcic7XG5pbXBvcnQgdHlwZSBMaXRlcmFsQXJndW1lbnRCdWlsZGVyIGZyb20gJy4vYnVpbGRlci9MaXRlcmFsQXJndW1lbnRCdWlsZGVyJztcbmltcG9ydCB0eXBlIENvbW1hbmRDb250ZXh0IGZyb20gJy4vY29udGV4dC9Db21tYW5kQ29udGV4dCc7XG5pbXBvcnQgQ29tbWFuZENvbnRleHRCdWlsZGVyIGZyb20gJy4vY29udGV4dC9Db21tYW5kQ29udGV4dEJ1aWxkZXInO1xuaW1wb3J0IHR5cGUgU3VnZ2VzdGlvbkNvbnRleHQgZnJvbSAnLi9jb250ZXh0L1N1Z2dlc3Rpb25Db250ZXh0JztcbmltcG9ydCBDb21tYW5kU3ludGF4RXhjZXB0aW9uIGZyb20gJy4vZXhjZXB0aW9ucy9Db21tYW5kU3ludGF4RXhjZXB0aW9uJztcbmltcG9ydCBTdWdnZXN0aW9ucyBmcm9tICcuL3N1Z2dlc3Rpb24vU3VnZ2VzdGlvbnMnO1xuaW1wb3J0IFN1Z2dlc3Rpb25zQnVpbGRlciBmcm9tICcuL3N1Z2dlc3Rpb24vU3VnZ2VzdGlvbnNCdWlsZGVyJztcbmltcG9ydCB0eXBlIENvbW1hbmROb2RlIGZyb20gJy4vdHJlZS9Db21tYW5kTm9kZSc7XG5pbXBvcnQgdHlwZSBMaXRlcmFsQ29tbWFuZE5vZGUgZnJvbSAnLi90cmVlL0xpdGVyYWxDb21tYW5kTm9kZSc7XG5pbXBvcnQgUm9vdENvbW1hbmROb2RlIGZyb20gJy4vdHJlZS9Sb290Q29tbWFuZE5vZGUnO1xuXG5jb25zdCBBUkdVTUVOVF9TRVBBUkFUT1IgPSAnICc7XG5jb25zdCBVU0FHRV9PUFRJT05BTF9PUEVOID0gJ1snO1xuY29uc3QgVVNBR0VfT1BUSU9OQUxfQ0xPU0UgPSAnXSc7XG5jb25zdCBVU0FHRV9SRVFVSVJFRF9PUEVOID0gJygnO1xuY29uc3QgVVNBR0VfUkVRVUlSRURfQ0xPU0UgPSAnKSc7XG5jb25zdCBVU0FHRV9PUiA9ICd8JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tbWFuZERpc3BhdGNoZXI8Uz4ge1xuICAgIHByaXZhdGUgcm9vdDogUm9vdENvbW1hbmROb2RlPFM+O1xuXG4gICAgcHJpdmF0ZSBjb25zdW1lcjogUmVzdWx0Q29uc3VtZXI8Uz4gPSB7XG4gICAgICAgIG9uQ29tbWFuZENvbXBsZXRlKCkge31cbiAgICB9O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHJvb3Q6IFJvb3RDb21tYW5kTm9kZTxTPiB8IG51bGwgPSBudWxsKSB7XG4gICAgICAgIHRoaXMucm9vdCA9IHJvb3QgfHwgbmV3IFJvb3RDb21tYW5kTm9kZTxTPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlcihjb21tYW5kOiBMaXRlcmFsQXJndW1lbnRCdWlsZGVyPFM+KTogTGl0ZXJhbENvbW1hbmROb2RlPFM+IHtcbiAgICAgICAgbGV0IGJ1aWxkID0gY29tbWFuZC5idWlsZCgpO1xuICAgICAgICB0aGlzLnJvb3QuYWRkQ2hpbGQoYnVpbGQpO1xuICAgICAgICByZXR1cm4gYnVpbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldENvbnN1bWVyKGNvbnN1bWVyOiBSZXN1bHRDb25zdW1lcjxTPikge1xuICAgICAgICB0aGlzLmNvbnN1bWVyID0gY29uc3VtZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGV4ZWN1dGUoXG4gICAgICAgIGlucHV0OiBzdHJpbmcgfCBTdHJpbmdSZWFkZXIgfCBQYXJzZVJlc3VsdHM8Uz4sXG4gICAgICAgIHNvdXJjZTogUyB8IG51bGwgPSBudWxsXG4gICAgKTogUHJvbWlzZTxhbnk+IHwgUHJvbWlzZTxhbnk+W10gfCBhbnkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykgaW5wdXQgPSBuZXcgU3RyaW5nUmVhZGVyKGlucHV0KTtcblxuICAgICAgICBsZXQgcGFyc2UhOiBQYXJzZVJlc3VsdHM8Uz47IC8vIEZJWE1FOiBUaGlzIGlzIGEgaGFjayB0byBtYWtlIFR5cGVTY3JpcHQgaGFwcHkuXG4gICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIFN0cmluZ1JlYWRlcikge1xuICAgICAgICAgICAgaWYgKHNvdXJjZSkgcGFyc2UgPSB0aGlzLnBhcnNlKGlucHV0LCBzb3VyY2UpO1xuICAgICAgICB9IGVsc2UgcGFyc2UgPSBpbnB1dDtcblxuICAgICAgICBpZiAocGFyc2UuZ2V0UmVhZGVyKCkuY2FuUmVhZCgpKSB7XG4gICAgICAgICAgICBpZiAocGFyc2UuZ2V0RXhjZXB0aW9ucygpLnNpemUgPT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBwYXJzZS5nZXRFeGNlcHRpb25zKCkudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJzZS5nZXRDb250ZXh0KCkuZ2V0UmFuZ2UoKS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBDb21tYW5kU3ludGF4RXhjZXB0aW9uLkJVSUxUX0lOX0VYQ0VQVElPTlMuZGlzcGF0Y2hlclVua25vd25Db21tYW5kKCkuY3JlYXRlV2l0aENvbnRleHQoXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlLmdldFJlYWRlcigpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgQ29tbWFuZFN5bnRheEV4Y2VwdGlvbi5CVUlMVF9JTl9FWENFUFRJT05TLmRpc3BhdGNoZXJVbmtub3duQXJndW1lbnQoKS5jcmVhdGVXaXRoQ29udGV4dChcbiAgICAgICAgICAgICAgICAgICAgcGFyc2UuZ2V0UmVhZGVyKClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBsZXQgZm9ya2VkID0gZmFsc2U7XG4gICAgICAgIGxldCBmb3VuZENvbW1hbmQgPSBmYWxzZTtcbiAgICAgICAgbGV0IGNvbW1hbmQgPSBwYXJzZS5nZXRSZWFkZXIoKS5nZXRTdHJpbmcoKTtcbiAgICAgICAgbGV0IG9yaWdpbmFsID0gcGFyc2UuZ2V0Q29udGV4dCgpLmJ1aWxkKGNvbW1hbmQpO1xuICAgICAgICBsZXQgY29udGV4dHM6IEFycmF5PENvbW1hbmRDb250ZXh0PFM+PiB8IG51bGwgPSBbXTtcbiAgICAgICAgY29udGV4dHMucHVzaChvcmlnaW5hbCk7XG4gICAgICAgIGxldCBuZXh0OiBDb21tYW5kQ29udGV4dDxTPltdIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIHdoaWxlICgoY29udGV4dHMgYXMgYW55KSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250ZXh0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBjb250ZXh0ID0gY29udGV4dHNbaV07IC8vIEZJWE1FXG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkID0gY29udGV4dD8uZ2V0Q2hpbGQoKTtcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dCAmJiBjaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JrZWQgPSBmb3JrZWQgfHwgY29udGV4dC5pc0ZvcmtlZCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuaGFzTm9kZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRDb21tYW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtb2RpZmllciA9IGNvbnRleHQuZ2V0UmVkaXJlY3RNb2RpZmllcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2RpZmllcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmV4dCkgbmV4dCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQucHVzaChjaGlsZC5jb3B5Rm9yKGNvbnRleHQuZ2V0U291cmNlKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdHM6IEFycmF5PFM+ID0gbW9kaWZpZXIuYXBwbHkoY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0KSBuZXh0ID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5wdXNoKGNoaWxkLmNvcHlGb3Ioc291cmNlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleDogYW55KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZXIub25Db21tYW5kQ29tcGxldGUoY29udGV4dCwgZmFsc2UsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcmtlZCkgdGhyb3cgZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Py5nZXRDb21tYW5kKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZm91bmRDb21tYW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGNvbnRleHQuZ2V0Q29tbWFuZCgpIShjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZXIub25Db21tYW5kQ29tcGxldGUoY29udGV4dCwgdHJ1ZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleDogYW55KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVyLm9uQ29tbWFuZENvbXBsZXRlKGNvbnRleHQsIGZhbHNlLCBleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcmtlZCkgdGhyb3cgZXg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRleHRzID0gbmV4dCE7IC8vIEZJWE1FXG4gICAgICAgICAgICBuZXh0ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZm91bmRDb21tYW5kKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnN1bWVyLm9uQ29tbWFuZENvbXBsZXRlKG9yaWdpbmFsLCBmYWxzZSwgMCk7XG4gICAgICAgICAgICB0aHJvdyBDb21tYW5kU3ludGF4RXhjZXB0aW9uLkJVSUxUX0lOX0VYQ0VQVElPTlMuZGlzcGF0Y2hlclVua25vd25Db21tYW5kKCkuY3JlYXRlV2l0aENvbnRleHQoXG4gICAgICAgICAgICAgICAgcGFyc2UuZ2V0UmVhZGVyKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBwYXJzZShjb21tYW5kOiBzdHJpbmcgfCBTdHJpbmdSZWFkZXIsIHNvdXJjZTogUyk6IFBhcnNlUmVzdWx0czxTPiB7XG4gICAgICAgIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gJ3N0cmluZycpIGNvbW1hbmQgPSBuZXcgU3RyaW5nUmVhZGVyKGNvbW1hbmQpO1xuXG4gICAgICAgIGxldCBjb250ZXh0OiBDb21tYW5kQ29udGV4dEJ1aWxkZXI8Uz4gPSBuZXcgQ29tbWFuZENvbnRleHRCdWlsZGVyKHRoaXMsIHNvdXJjZSwgdGhpcy5yb290LCBjb21tYW5kLmdldEN1cnNvcigpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VOb2Rlcyh0aGlzLnJvb3QsIGNvbW1hbmQsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VOb2RlcyhcbiAgICAgICAgbm9kZTogQ29tbWFuZE5vZGU8Uz4sXG4gICAgICAgIG9yaWdpbmFsUmVhZGVyOiBTdHJpbmdSZWFkZXIsXG4gICAgICAgIGNvbnRleHRTb0ZhcjogQ29tbWFuZENvbnRleHRCdWlsZGVyPFM+XG4gICAgKTogUGFyc2VSZXN1bHRzPFM+IHtcbiAgICAgICAgbGV0IHNvdXJjZTogUyA9IGNvbnRleHRTb0Zhci5nZXRTb3VyY2UoKTtcbiAgICAgICAgbGV0IGVycm9yczogTWFwPENvbW1hbmROb2RlPFM+LCBDb21tYW5kU3ludGF4RXhjZXB0aW9uPiB8IG51bGwgPSBudWxsO1xuICAgICAgICBsZXQgcG90ZW50aWFsczogUGFyc2VSZXN1bHRzPFM+W10gfCBudWxsID0gbnVsbDtcbiAgICAgICAgbGV0IGN1cnNvciA9IG9yaWdpbmFsUmVhZGVyLmdldEN1cnNvcigpO1xuICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiBub2RlLmdldFJlbGV2YW50Tm9kZXMob3JpZ2luYWxSZWFkZXIpKSB7XG4gICAgICAgICAgICBpZiAoIWNoaWxkLmNhblVzZShzb3VyY2UpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgbGV0IGNvbnRleHQ6IENvbW1hbmRDb250ZXh0QnVpbGRlcjxTPiA9IGNvbnRleHRTb0Zhci5jb3B5KCk7XG4gICAgICAgICAgICBsZXQgcmVhZGVyOiBTdHJpbmdSZWFkZXIgPSBuZXcgU3RyaW5nUmVhZGVyKG9yaWdpbmFsUmVhZGVyKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY2hpbGQucGFyc2UocmVhZGVyLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgICAgIGlmIChyZWFkZXIuY2FuUmVhZCgpKVxuICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGVyLnBlZWsoKSAhPSBBUkdVTUVOVF9TRVBBUkFUT1IpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBDb21tYW5kU3ludGF4RXhjZXB0aW9uLkJVSUxUX0lOX0VYQ0VQVElPTlMuZGlzcGF0Y2hlckV4cGVjdGVkQXJndW1lbnRTZXBhcmF0b3IoKS5jcmVhdGVXaXRoQ29udGV4dChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGNhdGNoIChleDogdW5rbm93bikge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcnMgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVycm9ycy5zZXQoY2hpbGQsIGV4IGFzIGFueSk7XG4gICAgICAgICAgICAgICAgcmVhZGVyLnNldEN1cnNvcihjdXJzb3IpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250ZXh0LndpdGhDb21tYW5kKGNoaWxkLmdldENvbW1hbmQoKSEpO1xuICAgICAgICAgICAgaWYgKHJlYWRlci5jYW5SZWFkKCFjaGlsZC5nZXRSZWRpcmVjdCgpID8gMiA6IDEpKSB7XG4gICAgICAgICAgICAgICAgcmVhZGVyLnNraXAoKTtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZ2V0UmVkaXJlY3QoKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGRDb250ZXh0OiBDb21tYW5kQ29udGV4dEJ1aWxkZXI8Uz4gPSBuZXcgQ29tbWFuZENvbnRleHRCdWlsZGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmdldFJlZGlyZWN0KCkhLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLmdldEN1cnNvcigpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJzZTogUGFyc2VSZXN1bHRzPFM+ID0gdGhpcy5wYXJzZU5vZGVzKGNoaWxkLmdldFJlZGlyZWN0KCkhLCByZWFkZXIsIGNoaWxkQ29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQud2l0aENoaWxkKHBhcnNlLmdldENvbnRleHQoKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGFyc2VSZXN1bHRzKGNvbnRleHQsIHBhcnNlLmdldFJlYWRlcigpLCBwYXJzZS5nZXRFeGNlcHRpb25zKCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJzZTogUGFyc2VSZXN1bHRzPFM+ID0gdGhpcy5wYXJzZU5vZGVzKGNoaWxkLCByZWFkZXIsIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocG90ZW50aWFscyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxzID0gW107XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxzLnB1c2gocGFyc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHBvdGVudGlhbHMgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxzID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBvdGVudGlhbHMucHVzaChuZXcgUGFyc2VSZXN1bHRzKGNvbnRleHQsIHJlYWRlciwgbmV3IE1hcCgpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG90ZW50aWFscykge1xuICAgICAgICAgICAgaWYgKHBvdGVudGlhbHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHBvdGVudGlhbHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWEuZ2V0UmVhZGVyKCkuY2FuUmVhZCgpICYmIGIuZ2V0UmVhZGVyKCkuY2FuUmVhZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGEuZ2V0UmVhZGVyKCkuY2FuUmVhZCgpICYmICFiLmdldFJlYWRlcigpLmNhblJlYWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGEuZ2V0RXhjZXB0aW9ucygpLnNpemUgPT09IDAgJiYgYi5nZXRFeGNlcHRpb25zKCkuc2l6ZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLmdldEV4Y2VwdGlvbnMoKS5zaXplICE9PSAwICYmIGIuZ2V0RXhjZXB0aW9ucygpLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBvdGVudGlhbHNbMF0hOyAvLyBGSVhNRVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQYXJzZVJlc3VsdHM8Uz4oY29udGV4dFNvRmFyLCBvcmlnaW5hbFJlYWRlciwgZXJyb3JzID09IG51bGwgPyBuZXcgTWFwKCkgOiBlcnJvcnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGxVc2FnZShub2RlOiBDb21tYW5kTm9kZTxTPiwgc291cmNlOiBTLCByZXN0cmljdGVkOiBib29sZWFuKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICAgICAgdGhpcy5fX2dldEFsbFVzYWdlKG5vZGUsIHNvdXJjZSwgcmVzdWx0LCAnJywgcmVzdHJpY3RlZCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfX2dldEFsbFVzYWdlKG5vZGU6IENvbW1hbmROb2RlPFM+LCBzb3VyY2U6IFMsIHJlc3VsdDogc3RyaW5nW10sIHByZWZpeCA9ICcnLCByZXN0cmljdGVkOiBib29sZWFuKSB7XG4gICAgICAgIGlmIChyZXN0cmljdGVkICYmICFub2RlLmNhblVzZShzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5nZXRDb21tYW5kKCkgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocHJlZml4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlLmdldFJlZGlyZWN0KCkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgcmVkaXJlY3QgPSBub2RlLmdldFJlZGlyZWN0KCkgPT09IHRoaXMucm9vdCA/ICcuLi4nIDogJy0+ICcgKyBub2RlLmdldFJlZGlyZWN0KCk/LmdldFVzYWdlVGV4dCgpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgICAgcHJlZml4Lmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/IG5vZGUuZ2V0VXNhZ2VUZXh0KCkgKyBBUkdVTUVOVF9TRVBBUkFUT1IgKyByZWRpcmVjdFxuICAgICAgICAgICAgICAgICAgICA6IHByZWZpeCArIEFSR1VNRU5UX1NFUEFSQVRPUiArIHJlZGlyZWN0XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUuZ2V0Q2hpbGRyZW5Db3VudCgpID4gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgY2hpbGQgb2Ygbm9kZS5nZXRDaGlsZHJlbigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2dldEFsbFVzYWdlKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeC5sZW5ndGggPT09IDAgPyBjaGlsZC5nZXRVc2FnZVRleHQoKSA6IHByZWZpeCArIEFSR1VNRU5UX1NFUEFSQVRPUiArIGNoaWxkLmdldFVzYWdlVGV4dCgpLFxuICAgICAgICAgICAgICAgICAgICByZXN0cmljdGVkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTbWFydFVzYWdlKG5vZGU6IENvbW1hbmROb2RlPFM+LCBzb3VyY2U6IFMpOiBNYXA8Q29tbWFuZE5vZGU8Uz4sIHN0cmluZz4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE1hcDxDb21tYW5kTm9kZTxTPiwgc3RyaW5nPigpO1xuXG4gICAgICAgIGxldCBvcHRpb25hbCA9IG5vZGUuZ2V0Q29tbWFuZCgpICE9PSBudWxsO1xuICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiBub2RlLmdldENoaWxkcmVuKCkpIHtcbiAgICAgICAgICAgIGxldCB1c2FnZSA9IHRoaXMuX19nZXRTbWFydFVzYWdlKGNoaWxkLCBzb3VyY2UsIG9wdGlvbmFsLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAodXNhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc2V0KGNoaWxkLCB1c2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX19nZXRTbWFydFVzYWdlKG5vZGU6IENvbW1hbmROb2RlPFM+LCBzb3VyY2U6IFMsIG9wdGlvbmFsOiBib29sZWFuLCBkZWVwOiBib29sZWFuKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGlmICghbm9kZS5jYW5Vc2Uoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2VsZiA9IG9wdGlvbmFsID8gVVNBR0VfT1BUSU9OQUxfT1BFTiArIG5vZGUuZ2V0VXNhZ2VUZXh0KCkgKyBVU0FHRV9PUFRJT05BTF9DTE9TRSA6IG5vZGUuZ2V0VXNhZ2VUZXh0KCk7XG4gICAgICAgIGxldCBjaGlsZE9wdGlvbmFsID0gbm9kZS5nZXRDb21tYW5kKCkgIT0gbnVsbDtcbiAgICAgICAgbGV0IG9wZW4gPSBjaGlsZE9wdGlvbmFsID8gVVNBR0VfT1BUSU9OQUxfT1BFTiA6IFVTQUdFX1JFUVVJUkVEX09QRU47XG4gICAgICAgIGxldCBjbG9zZSA9IGNoaWxkT3B0aW9uYWwgPyBVU0FHRV9PUFRJT05BTF9DTE9TRSA6IFVTQUdFX1JFUVVJUkVEX0NMT1NFO1xuXG4gICAgICAgIGlmICghZGVlcCkge1xuICAgICAgICAgICAgaWYgKG5vZGUuZ2V0UmVkaXJlY3QoKSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlZGlyZWN0ID0gbm9kZS5nZXRSZWRpcmVjdCgpID09IHRoaXMucm9vdCA/ICcuLi4nIDogJy0+ICcgKyBub2RlLmdldFJlZGlyZWN0KCk/LmdldFVzYWdlVGV4dCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmICsgQVJHVU1FTlRfU0VQQVJBVE9SICsgcmVkaXJlY3Q7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbjogQ29tbWFuZE5vZGU8Uz5bXSA9IFsuLi5ub2RlLmdldENoaWxkcmVuKCldLmZpbHRlcigoYykgPT4gYy5jYW5Vc2Uoc291cmNlKSk7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB1c2FnZSA9IHRoaXMuX19nZXRTbWFydFVzYWdlKFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5bMF0hLCAvLyBGSVhNRVxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRPcHRpb25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkT3B0aW9uYWxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVzYWdlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZiArIEFSR1VNRU5UX1NFUEFSQVRPUiArIHVzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZHJlbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZFVzYWdlID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXNhZ2UgPSB0aGlzLl9fZ2V0U21hcnRVc2FnZShjaGlsZCwgc291cmNlLCBjaGlsZE9wdGlvbmFsLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2FnZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkVXNhZ2UuYWRkKHVzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRVc2FnZS5zaXplID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXNhZ2UgPSBjaGlsZFVzYWdlLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJHVU1FTlRfU0VQQVJBVE9SICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hpbGRPcHRpb25hbCA/IFVTQUdFX09QVElPTkFMX09QRU4gKyB1c2FnZSArIFVTQUdFX09QVElPTkFMX0NMT1NFIDogdXNhZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkVXNhZ2Uuc2l6ZSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBidWlsZGVyID0gb3BlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlciArPSBVU0FHRV9PUjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlciArPSBjaGlsZC5nZXRVc2FnZVRleHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIgKz0gY2xvc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYgKyBBUkdVTUVOVF9TRVBBUkFUT1IgKyBidWlsZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRDb21wbGV0aW9uU3VnZ2VzdGlvbnMoXG4gICAgICAgIHBhcnNlOiBQYXJzZVJlc3VsdHM8Uz4sXG4gICAgICAgIGN1cnNvciA9IHBhcnNlLmdldFJlYWRlcigpLmdldFRvdGFsTGVuZ3RoKClcbiAgICApOiBQcm9taXNlPFN1Z2dlc3Rpb25zPiB7XG4gICAgICAgIGxldCBjb250ZXh0OiBDb21tYW5kQ29udGV4dEJ1aWxkZXI8Uz4gPSBwYXJzZS5nZXRDb250ZXh0KCk7XG4gICAgICAgIGxldCBub2RlQmVmb3JlQ3Vyc29yOiBTdWdnZXN0aW9uQ29udGV4dDxTPiA9IGNvbnRleHQuZmluZFN1Z2dlc3Rpb25Db250ZXh0KGN1cnNvcik7XG4gICAgICAgIGxldCBwYXJlbnQ6IENvbW1hbmROb2RlPFM+ID0gbm9kZUJlZm9yZUN1cnNvci5wYXJlbnQ7XG4gICAgICAgIGxldCBzdGFydCA9IE1hdGgubWluKG5vZGVCZWZvcmVDdXJzb3Iuc3RhcnRQb3MsIGN1cnNvcik7XG4gICAgICAgIGxldCBmdWxsSW5wdXQgPSBwYXJzZS5nZXRSZWFkZXIoKS5nZXRTdHJpbmcoKTtcbiAgICAgICAgbGV0IHRydW5jYXRlZElucHV0ID0gZnVsbElucHV0LnN1YnN0cmluZygwLCBjdXJzb3IpO1xuICAgICAgICBsZXQgZnV0dXJlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBub2RlIG9mIHBhcmVudC5nZXRDaGlsZHJlbigpKSB7XG4gICAgICAgICAgICBsZXQgZnV0dXJlID0gYXdhaXQgU3VnZ2VzdGlvbnMuZW1wdHkoKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZnV0dXJlID0gYXdhaXQgbm9kZS5saXN0U3VnZ2VzdGlvbnMoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYnVpbGQodHJ1bmNhdGVkSW5wdXQpLFxuICAgICAgICAgICAgICAgICAgICBuZXcgU3VnZ2VzdGlvbnNCdWlsZGVyKHRydW5jYXRlZElucHV0LCBzdGFydClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoaWdub3JlZCkge31cbiAgICAgICAgICAgIGZ1dHVyZXMucHVzaChmdXR1cmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShTdWdnZXN0aW9ucy5tZXJnZShmdWxsSW5wdXQsIGZ1dHVyZXMpISk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJvb3QoKTogUm9vdENvbW1hbmROb2RlPFM+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGF0aCh0YXJnZXQ6IENvbW1hbmROb2RlPFM+KTogc3RyaW5nW10ge1xuICAgICAgICBsZXQgbm9kZXM6IEFycmF5PEFycmF5PENvbW1hbmROb2RlPFM+Pj4gPSBbXTtcbiAgICAgICAgdGhpcy5hZGRQYXRocyh0aGlzLnJvb3QsIG5vZGVzLCBbXSk7XG4gICAgICAgIGZvciAobGV0IGxpc3Qgb2Ygbm9kZXMpIHtcbiAgICAgICAgICAgIGlmIChsaXN0W2xpc3QubGVuZ3RoIC0gMV0gPT09IHRhcmdldCkge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBub2RlIG9mIGxpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUgIT09IHRoaXMucm9vdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobm9kZS5nZXROYW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kTm9kZShwYXRoOiBzdHJpbmdbXSk6IENvbW1hbmROb2RlPFM+IHwgbnVsbCB7XG4gICAgICAgIGxldCBub2RlOiBDb21tYW5kTm9kZTxTPiB8IHVuZGVmaW5lZCA9IHRoaXMucm9vdDtcbiAgICAgICAgZm9yIChsZXQgbmFtZSBvZiBwYXRoKSB7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5nZXRDaGlsZChuYW1lKTtcbiAgICAgICAgICAgIGlmICghbm9kZSkgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRBbWJpZ3VpdGllcyhjb25zdW1lcjogQW1iaWd1aXR5Q29uc3VtZXI8Uz4sIGNvbnRleHQ6IGFueSkge1xuICAgICAgICB0aGlzLnJvb3QuZmluZEFtYmlndWl0aWVzKGNvbnN1bWVyLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFBhdGhzKG5vZGU6IENvbW1hbmROb2RlPFM+LCByZXN1bHQ6IEFycmF5PEFycmF5PENvbW1hbmROb2RlPFM+Pj4sIHBhcmVudHM6IEFycmF5PENvbW1hbmROb2RlPFM+Pik6IHZvaWQge1xuICAgICAgICBsZXQgY3VycmVudDogQXJyYXk8Q29tbWFuZE5vZGU8Uz4+ID0gW107XG4gICAgICAgIGN1cnJlbnQucHVzaCguLi5wYXJlbnRzKTtcbiAgICAgICAgY3VycmVudC5wdXNoKG5vZGUpO1xuICAgICAgICByZXN1bHQucHVzaChjdXJyZW50KTtcbiAgICAgICAgZm9yIChsZXQgY2hpbGQgb2Ygbm9kZS5nZXRDaGlsZHJlbigpKSB0aGlzLmFkZFBhdGhzKGNoaWxkLCByZXN1bHQsIGN1cnJlbnQpO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQWVBLElBQU0scUJBQXFCO0FBQzNCLElBQU0sc0JBQXNCO0FBQzVCLElBQU0sdUJBQXVCO0FBQzdCLElBQU0sc0JBQXNCO0FBQzVCLElBQU0sdUJBQXVCO0FBQzdCLElBQU0sV0FBVztBQUVqQixJQUFxQixvQkFBckIsTUFBMEM7Q0FDdEM7Q0FFQSxXQUFzQyxFQUNsQyxvQkFBb0IsQ0FBQyxFQUN6QjtDQUVBLFlBQW1CLE9BQWtDLE1BQU07RUFDdkQsS0FBSyxPQUFPLFFBQVEsSUFBSSw2QkFBQSxRQUFtQjtDQUMvQztDQUVBLFNBQWdCLFNBQTJEO0VBQ3ZFLElBQUksUUFBUSxRQUFRLE1BQU07RUFDMUIsS0FBSyxLQUFLLFNBQVMsS0FBSztFQUN4QixPQUFPO0NBQ1g7Q0FFQSxZQUFtQixVQUE2QjtFQUM1QyxLQUFLLFdBQVc7Q0FDcEI7Q0FFQSxRQUNJLE9BQ0EsU0FBbUIsTUFDZ0I7RUFDbkMsSUFBSSxPQUFPLFVBQVUsVUFBVSxRQUFRLElBQUkscUJBQUEsUUFBYSxLQUFLO0VBRTdELElBQUk7RUFDSixJQUFJLGlCQUFpQixxQkFBQTtPQUNiLFFBQVEsUUFBUSxLQUFLLE1BQU0sT0FBTyxNQUFNO0VBQUEsT0FDekMsUUFBUTtFQUVmLElBQUksTUFBTSxVQUFVLEVBQUUsUUFBUSxHQUMxQixJQUFJLE1BQU0sY0FBYyxFQUFFLFNBQVMsR0FDL0Is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
|
|
268
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tbWFuZERpc3BhdGNoZXIuY2pzLmNqcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi9zcmMvQ29tbWFuZERpc3BhdGNoZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgQW1iaWd1aXR5Q29uc3VtZXIgZnJvbSAnLi9BbWJpZ3VpdHlDb25zdW1lcic7XG5pbXBvcnQgUGFyc2VSZXN1bHRzIGZyb20gJy4vUGFyc2VSZXN1bHRzJztcbmltcG9ydCB0eXBlIFJlc3VsdENvbnN1bWVyIGZyb20gJy4vUmVzdWx0Q29uc3VtZXInO1xuaW1wb3J0IFN0cmluZ1JlYWRlciBmcm9tICcuL1N0cmluZ1JlYWRlcic7XG5pbXBvcnQgdHlwZSBMaXRlcmFsQXJndW1lbnRCdWlsZGVyIGZyb20gJy4vYnVpbGRlci9MaXRlcmFsQXJndW1lbnRCdWlsZGVyJztcbmltcG9ydCB0eXBlIENvbW1hbmRDb250ZXh0IGZyb20gJy4vY29udGV4dC9Db21tYW5kQ29udGV4dCc7XG5pbXBvcnQgQ29tbWFuZENvbnRleHRCdWlsZGVyIGZyb20gJy4vY29udGV4dC9Db21tYW5kQ29udGV4dEJ1aWxkZXInO1xuaW1wb3J0IHR5cGUgU3VnZ2VzdGlvbkNvbnRleHQgZnJvbSAnLi9jb250ZXh0L1N1Z2dlc3Rpb25Db250ZXh0JztcbmltcG9ydCBDb21tYW5kU3ludGF4RXhjZXB0aW9uIGZyb20gJy4vZXhjZXB0aW9ucy9Db21tYW5kU3ludGF4RXhjZXB0aW9uJztcbmltcG9ydCBTdWdnZXN0aW9ucyBmcm9tICcuL3N1Z2dlc3Rpb24vU3VnZ2VzdGlvbnMnO1xuaW1wb3J0IFN1Z2dlc3Rpb25zQnVpbGRlciBmcm9tICcuL3N1Z2dlc3Rpb24vU3VnZ2VzdGlvbnNCdWlsZGVyJztcbmltcG9ydCB0eXBlIENvbW1hbmROb2RlIGZyb20gJy4vdHJlZS9Db21tYW5kTm9kZSc7XG5pbXBvcnQgdHlwZSBMaXRlcmFsQ29tbWFuZE5vZGUgZnJvbSAnLi90cmVlL0xpdGVyYWxDb21tYW5kTm9kZSc7XG5pbXBvcnQgUm9vdENvbW1hbmROb2RlIGZyb20gJy4vdHJlZS9Sb290Q29tbWFuZE5vZGUnO1xuXG5jb25zdCBBUkdVTUVOVF9TRVBBUkFUT1IgPSAnICc7XG5jb25zdCBVU0FHRV9PUFRJT05BTF9PUEVOID0gJ1snO1xuY29uc3QgVVNBR0VfT1BUSU9OQUxfQ0xPU0UgPSAnXSc7XG5jb25zdCBVU0FHRV9SRVFVSVJFRF9PUEVOID0gJygnO1xuY29uc3QgVVNBR0VfUkVRVUlSRURfQ0xPU0UgPSAnKSc7XG5jb25zdCBVU0FHRV9PUiA9ICd8JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tbWFuZERpc3BhdGNoZXI8Uz4ge1xuICAgIHByaXZhdGUgcm9vdDogUm9vdENvbW1hbmROb2RlPFM+O1xuXG4gICAgcHJpdmF0ZSBjb25zdW1lcjogUmVzdWx0Q29uc3VtZXI8Uz4gPSB7XG4gICAgICAgIG9uQ29tbWFuZENvbXBsZXRlKCkge31cbiAgICB9O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHJvb3Q6IFJvb3RDb21tYW5kTm9kZTxTPiB8IG51bGwgPSBudWxsKSB7XG4gICAgICAgIHRoaXMucm9vdCA9IHJvb3QgfHwgbmV3IFJvb3RDb21tYW5kTm9kZTxTPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlcihjb21tYW5kOiBMaXRlcmFsQXJndW1lbnRCdWlsZGVyPFM+KTogTGl0ZXJhbENvbW1hbmROb2RlPFM+IHtcbiAgICAgICAgbGV0IGJ1aWxkID0gY29tbWFuZC5idWlsZCgpO1xuICAgICAgICB0aGlzLnJvb3QuYWRkQ2hpbGQoYnVpbGQpO1xuICAgICAgICByZXR1cm4gYnVpbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldENvbnN1bWVyKGNvbnN1bWVyOiBSZXN1bHRDb25zdW1lcjxTPikge1xuICAgICAgICB0aGlzLmNvbnN1bWVyID0gY29uc3VtZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGV4ZWN1dGUoXG4gICAgICAgIGlucHV0OiBzdHJpbmcgfCBTdHJpbmdSZWFkZXIgfCBQYXJzZVJlc3VsdHM8Uz4sXG4gICAgICAgIHNvdXJjZTogUyB8IG51bGwgPSBudWxsXG4gICAgKTogUHJvbWlzZTxhbnk+IHwgUHJvbWlzZTxhbnk+W10gfCBhbnkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykgaW5wdXQgPSBuZXcgU3RyaW5nUmVhZGVyKGlucHV0KTtcblxuICAgICAgICBsZXQgcGFyc2UhOiBQYXJzZVJlc3VsdHM8Uz47IC8vIEZJWE1FOiBUaGlzIGlzIGEgaGFjayB0byBtYWtlIFR5cGVTY3JpcHQgaGFwcHkuXG4gICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIFN0cmluZ1JlYWRlcikge1xuICAgICAgICAgICAgaWYgKHNvdXJjZSkgcGFyc2UgPSB0aGlzLnBhcnNlKGlucHV0LCBzb3VyY2UpO1xuICAgICAgICB9IGVsc2UgcGFyc2UgPSBpbnB1dDtcblxuICAgICAgICBpZiAocGFyc2UuZ2V0UmVhZGVyKCkuY2FuUmVhZCgpKSB7XG4gICAgICAgICAgICBpZiAocGFyc2UuZ2V0RXhjZXB0aW9ucygpLnNpemUgPT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBwYXJzZS5nZXRFeGNlcHRpb25zKCkudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJzZS5nZXRDb250ZXh0KCkuZ2V0UmFuZ2UoKS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBDb21tYW5kU3ludGF4RXhjZXB0aW9uLkJVSUxUX0lOX0VYQ0VQVElPTlMuZGlzcGF0Y2hlclVua25vd25Db21tYW5kKCkuY3JlYXRlV2l0aENvbnRleHQoXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlLmdldFJlYWRlcigpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgQ29tbWFuZFN5bnRheEV4Y2VwdGlvbi5CVUlMVF9JTl9FWENFUFRJT05TLmRpc3BhdGNoZXJVbmtub3duQXJndW1lbnQoKS5jcmVhdGVXaXRoQ29udGV4dChcbiAgICAgICAgICAgICAgICAgICAgcGFyc2UuZ2V0UmVhZGVyKClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBsZXQgZm9ya2VkID0gZmFsc2U7XG4gICAgICAgIGxldCBmb3VuZENvbW1hbmQgPSBmYWxzZTtcbiAgICAgICAgbGV0IGNvbW1hbmQgPSBwYXJzZS5nZXRSZWFkZXIoKS5nZXRTdHJpbmcoKTtcbiAgICAgICAgbGV0IG9yaWdpbmFsID0gcGFyc2UuZ2V0Q29udGV4dCgpLmJ1aWxkKGNvbW1hbmQpO1xuICAgICAgICBsZXQgY29udGV4dHM6IEFycmF5PENvbW1hbmRDb250ZXh0PFM+PiB8IG51bGwgPSBbXTtcbiAgICAgICAgY29udGV4dHMucHVzaChvcmlnaW5hbCk7XG4gICAgICAgIGxldCBuZXh0OiBDb21tYW5kQ29udGV4dDxTPltdIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIHdoaWxlICgoY29udGV4dHMgYXMgYW55KSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250ZXh0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBjb250ZXh0ID0gY29udGV4dHNbaV07IC8vIEZJWE1FXG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkID0gY29udGV4dD8uZ2V0Q2hpbGQoKTtcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dCAmJiBjaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JrZWQgPSBmb3JrZWQgfHwgY29udGV4dC5pc0ZvcmtlZCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuaGFzTm9kZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRDb21tYW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtb2RpZmllciA9IGNvbnRleHQuZ2V0UmVkaXJlY3RNb2RpZmllcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2RpZmllcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmV4dCkgbmV4dCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQucHVzaChjaGlsZC5jb3B5Rm9yKGNvbnRleHQuZ2V0U291cmNlKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdHM6IEFycmF5PFM+ID0gbW9kaWZpZXIuYXBwbHkoY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0KSBuZXh0ID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5wdXNoKGNoaWxkLmNvcHlGb3Ioc291cmNlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleDogYW55KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZXIub25Db21tYW5kQ29tcGxldGUoY29udGV4dCwgZmFsc2UsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcmtlZCkgdGhyb3cgZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Py5nZXRDb21tYW5kKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZm91bmRDb21tYW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGNvbnRleHQuZ2V0Q29tbWFuZCgpIShjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZXIub25Db21tYW5kQ29tcGxldGUoY29udGV4dCwgdHJ1ZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleDogYW55KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVyLm9uQ29tbWFuZENvbXBsZXRlKGNvbnRleHQsIGZhbHNlLCBleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcmtlZCkgdGhyb3cgZXg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRleHRzID0gbmV4dCE7IC8vIEZJWE1FXG4gICAgICAgICAgICBuZXh0ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZm91bmRDb21tYW5kKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnN1bWVyLm9uQ29tbWFuZENvbXBsZXRlKG9yaWdpbmFsLCBmYWxzZSwgMCk7XG4gICAgICAgICAgICB0aHJvdyBDb21tYW5kU3ludGF4RXhjZXB0aW9uLkJVSUxUX0lOX0VYQ0VQVElPTlMuZGlzcGF0Y2hlclVua25vd25Db21tYW5kKCkuY3JlYXRlV2l0aENvbnRleHQoXG4gICAgICAgICAgICAgICAgcGFyc2UuZ2V0UmVhZGVyKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBwYXJzZShjb21tYW5kOiBzdHJpbmcgfCBTdHJpbmdSZWFkZXIsIHNvdXJjZTogUyk6IFBhcnNlUmVzdWx0czxTPiB7XG4gICAgICAgIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gJ3N0cmluZycpIGNvbW1hbmQgPSBuZXcgU3RyaW5nUmVhZGVyKGNvbW1hbmQpO1xuXG4gICAgICAgIGxldCBjb250ZXh0OiBDb21tYW5kQ29udGV4dEJ1aWxkZXI8Uz4gPSBuZXcgQ29tbWFuZENvbnRleHRCdWlsZGVyKHRoaXMsIHNvdXJjZSwgdGhpcy5yb290LCBjb21tYW5kLmdldEN1cnNvcigpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VOb2Rlcyh0aGlzLnJvb3QsIGNvbW1hbmQsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VOb2RlcyhcbiAgICAgICAgbm9kZTogQ29tbWFuZE5vZGU8Uz4sXG4gICAgICAgIG9yaWdpbmFsUmVhZGVyOiBTdHJpbmdSZWFkZXIsXG4gICAgICAgIGNvbnRleHRTb0ZhcjogQ29tbWFuZENvbnRleHRCdWlsZGVyPFM+XG4gICAgKTogUGFyc2VSZXN1bHRzPFM+IHtcbiAgICAgICAgbGV0IHNvdXJjZTogUyA9IGNvbnRleHRTb0Zhci5nZXRTb3VyY2UoKTtcbiAgICAgICAgbGV0IGVycm9yczogTWFwPENvbW1hbmROb2RlPFM+LCBDb21tYW5kU3ludGF4RXhjZXB0aW9uPiB8IG51bGwgPSBudWxsO1xuICAgICAgICBsZXQgcG90ZW50aWFsczogUGFyc2VSZXN1bHRzPFM+W10gfCBudWxsID0gbnVsbDtcbiAgICAgICAgbGV0IGN1cnNvciA9IG9yaWdpbmFsUmVhZGVyLmdldEN1cnNvcigpO1xuICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiBub2RlLmdldFJlbGV2YW50Tm9kZXMob3JpZ2luYWxSZWFkZXIpKSB7XG4gICAgICAgICAgICBpZiAoIWNoaWxkLmNhblVzZShzb3VyY2UpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgbGV0IGNvbnRleHQ6IENvbW1hbmRDb250ZXh0QnVpbGRlcjxTPiA9IGNvbnRleHRTb0Zhci5jb3B5KCk7XG4gICAgICAgICAgICBsZXQgcmVhZGVyOiBTdHJpbmdSZWFkZXIgPSBuZXcgU3RyaW5nUmVhZGVyKG9yaWdpbmFsUmVhZGVyKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY2hpbGQucGFyc2UocmVhZGVyLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgICAgIGlmIChyZWFkZXIuY2FuUmVhZCgpKVxuICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGVyLnBlZWsoKSAhPSBBUkdVTUVOVF9TRVBBUkFUT1IpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBDb21tYW5kU3ludGF4RXhjZXB0aW9uLkJVSUxUX0lOX0VYQ0VQVElPTlMuZGlzcGF0Y2hlckV4cGVjdGVkQXJndW1lbnRTZXBhcmF0b3IoKS5jcmVhdGVXaXRoQ29udGV4dChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGNhdGNoIChleDogdW5rbm93bikge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcnMgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVycm9ycy5zZXQoY2hpbGQsIGV4IGFzIGFueSk7XG4gICAgICAgICAgICAgICAgcmVhZGVyLnNldEN1cnNvcihjdXJzb3IpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250ZXh0LndpdGhDb21tYW5kKGNoaWxkLmdldENvbW1hbmQoKSEpO1xuICAgICAgICAgICAgaWYgKHJlYWRlci5jYW5SZWFkKCFjaGlsZC5nZXRSZWRpcmVjdCgpID8gMiA6IDEpKSB7XG4gICAgICAgICAgICAgICAgcmVhZGVyLnNraXAoKTtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZ2V0UmVkaXJlY3QoKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGRDb250ZXh0OiBDb21tYW5kQ29udGV4dEJ1aWxkZXI8Uz4gPSBuZXcgQ29tbWFuZENvbnRleHRCdWlsZGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmdldFJlZGlyZWN0KCkhLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLmdldEN1cnNvcigpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJzZTogUGFyc2VSZXN1bHRzPFM+ID0gdGhpcy5wYXJzZU5vZGVzKGNoaWxkLmdldFJlZGlyZWN0KCkhLCByZWFkZXIsIGNoaWxkQ29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQud2l0aENoaWxkKHBhcnNlLmdldENvbnRleHQoKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGFyc2VSZXN1bHRzKGNvbnRleHQsIHBhcnNlLmdldFJlYWRlcigpLCBwYXJzZS5nZXRFeGNlcHRpb25zKCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJzZTogUGFyc2VSZXN1bHRzPFM+ID0gdGhpcy5wYXJzZU5vZGVzKGNoaWxkLCByZWFkZXIsIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocG90ZW50aWFscyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxzID0gW107XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxzLnB1c2gocGFyc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHBvdGVudGlhbHMgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxzID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBvdGVudGlhbHMucHVzaChuZXcgUGFyc2VSZXN1bHRzKGNvbnRleHQsIHJlYWRlciwgbmV3IE1hcCgpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG90ZW50aWFscykge1xuICAgICAgICAgICAgaWYgKHBvdGVudGlhbHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHBvdGVudGlhbHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWEuZ2V0UmVhZGVyKCkuY2FuUmVhZCgpICYmIGIuZ2V0UmVhZGVyKCkuY2FuUmVhZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGEuZ2V0UmVhZGVyKCkuY2FuUmVhZCgpICYmICFiLmdldFJlYWRlcigpLmNhblJlYWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGEuZ2V0RXhjZXB0aW9ucygpLnNpemUgPT09IDAgJiYgYi5nZXRFeGNlcHRpb25zKCkuc2l6ZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLmdldEV4Y2VwdGlvbnMoKS5zaXplICE9PSAwICYmIGIuZ2V0RXhjZXB0aW9ucygpLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBvdGVudGlhbHNbMF0hOyAvLyBGSVhNRVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQYXJzZVJlc3VsdHM8Uz4oY29udGV4dFNvRmFyLCBvcmlnaW5hbFJlYWRlciwgZXJyb3JzID09IG51bGwgPyBuZXcgTWFwKCkgOiBlcnJvcnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGxVc2FnZShub2RlOiBDb21tYW5kTm9kZTxTPiwgc291cmNlOiBTLCByZXN0cmljdGVkOiBib29sZWFuKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICAgICAgdGhpcy5fX2dldEFsbFVzYWdlKG5vZGUsIHNvdXJjZSwgcmVzdWx0LCAnJywgcmVzdHJpY3RlZCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfX2dldEFsbFVzYWdlKG5vZGU6IENvbW1hbmROb2RlPFM+LCBzb3VyY2U6IFMsIHJlc3VsdDogc3RyaW5nW10sIHByZWZpeCA9ICcnLCByZXN0cmljdGVkOiBib29sZWFuKSB7XG4gICAgICAgIGlmIChyZXN0cmljdGVkICYmICFub2RlLmNhblVzZShzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5nZXRDb21tYW5kKCkgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocHJlZml4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlLmdldFJlZGlyZWN0KCkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgcmVkaXJlY3QgPSBub2RlLmdldFJlZGlyZWN0KCkgPT09IHRoaXMucm9vdCA/ICcuLi4nIDogJy0+ICcgKyBub2RlLmdldFJlZGlyZWN0KCk/LmdldFVzYWdlVGV4dCgpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgICAgcHJlZml4Lmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/IG5vZGUuZ2V0VXNhZ2VUZXh0KCkgKyBBUkdVTUVOVF9TRVBBUkFUT1IgKyByZWRpcmVjdFxuICAgICAgICAgICAgICAgICAgICA6IHByZWZpeCArIEFSR1VNRU5UX1NFUEFSQVRPUiArIHJlZGlyZWN0XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUuZ2V0Q2hpbGRyZW5Db3VudCgpID4gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgY2hpbGQgb2Ygbm9kZS5nZXRDaGlsZHJlbigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2dldEFsbFVzYWdlKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeC5sZW5ndGggPT09IDAgPyBjaGlsZC5nZXRVc2FnZVRleHQoKSA6IHByZWZpeCArIEFSR1VNRU5UX1NFUEFSQVRPUiArIGNoaWxkLmdldFVzYWdlVGV4dCgpLFxuICAgICAgICAgICAgICAgICAgICByZXN0cmljdGVkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTbWFydFVzYWdlKG5vZGU6IENvbW1hbmROb2RlPFM+LCBzb3VyY2U6IFMpOiBNYXA8Q29tbWFuZE5vZGU8Uz4sIHN0cmluZz4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE1hcDxDb21tYW5kTm9kZTxTPiwgc3RyaW5nPigpO1xuXG4gICAgICAgIGxldCBvcHRpb25hbCA9IG5vZGUuZ2V0Q29tbWFuZCgpICE9PSBudWxsO1xuICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiBub2RlLmdldENoaWxkcmVuKCkpIHtcbiAgICAgICAgICAgIGxldCB1c2FnZSA9IHRoaXMuX19nZXRTbWFydFVzYWdlKGNoaWxkLCBzb3VyY2UsIG9wdGlvbmFsLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAodXNhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc2V0KGNoaWxkLCB1c2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX19nZXRTbWFydFVzYWdlKG5vZGU6IENvbW1hbmROb2RlPFM+LCBzb3VyY2U6IFMsIG9wdGlvbmFsOiBib29sZWFuLCBkZWVwOiBib29sZWFuKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGlmICghbm9kZS5jYW5Vc2Uoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2VsZiA9IG9wdGlvbmFsID8gVVNBR0VfT1BUSU9OQUxfT1BFTiArIG5vZGUuZ2V0VXNhZ2VUZXh0KCkgKyBVU0FHRV9PUFRJT05BTF9DTE9TRSA6IG5vZGUuZ2V0VXNhZ2VUZXh0KCk7XG4gICAgICAgIGxldCBjaGlsZE9wdGlvbmFsID0gbm9kZS5nZXRDb21tYW5kKCkgIT0gbnVsbDtcbiAgICAgICAgbGV0IG9wZW4gPSBjaGlsZE9wdGlvbmFsID8gVVNBR0VfT1BUSU9OQUxfT1BFTiA6IFVTQUdFX1JFUVVJUkVEX09QRU47XG4gICAgICAgIGxldCBjbG9zZSA9IGNoaWxkT3B0aW9uYWwgPyBVU0FHRV9PUFRJT05BTF9DTE9TRSA6IFVTQUdFX1JFUVVJUkVEX0NMT1NFO1xuXG4gICAgICAgIGlmICghZGVlcCkge1xuICAgICAgICAgICAgaWYgKG5vZGUuZ2V0UmVkaXJlY3QoKSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlZGlyZWN0ID0gbm9kZS5nZXRSZWRpcmVjdCgpID09IHRoaXMucm9vdCA/ICcuLi4nIDogJy0+ICcgKyBub2RlLmdldFJlZGlyZWN0KCk/LmdldFVzYWdlVGV4dCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmICsgQVJHVU1FTlRfU0VQQVJBVE9SICsgcmVkaXJlY3Q7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbjogQ29tbWFuZE5vZGU8Uz5bXSA9IFsuLi5ub2RlLmdldENoaWxkcmVuKCldLmZpbHRlcigoYykgPT4gYy5jYW5Vc2Uoc291cmNlKSk7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB1c2FnZSA9IHRoaXMuX19nZXRTbWFydFVzYWdlKFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5bMF0hLCAvLyBGSVhNRVxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRPcHRpb25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkT3B0aW9uYWxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVzYWdlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZiArIEFSR1VNRU5UX1NFUEFSQVRPUiArIHVzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZHJlbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZFVzYWdlID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXNhZ2UgPSB0aGlzLl9fZ2V0U21hcnRVc2FnZShjaGlsZCwgc291cmNlLCBjaGlsZE9wdGlvbmFsLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2FnZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkVXNhZ2UuYWRkKHVzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRVc2FnZS5zaXplID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXNhZ2UgPSBjaGlsZFVzYWdlLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJHVU1FTlRfU0VQQVJBVE9SICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hpbGRPcHRpb25hbCA/IFVTQUdFX09QVElPTkFMX09QRU4gKyB1c2FnZSArIFVTQUdFX09QVElPTkFMX0NMT1NFIDogdXNhZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkVXNhZ2Uuc2l6ZSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBidWlsZGVyID0gb3BlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlciArPSBVU0FHRV9PUjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlciArPSBjaGlsZC5nZXRVc2FnZVRleHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIgKz0gY2xvc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYgKyBBUkdVTUVOVF9TRVBBUkFUT1IgKyBidWlsZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRDb21wbGV0aW9uU3VnZ2VzdGlvbnMoXG4gICAgICAgIHBhcnNlOiBQYXJzZVJlc3VsdHM8Uz4sXG4gICAgICAgIGN1cnNvciA9IHBhcnNlLmdldFJlYWRlcigpLmdldFRvdGFsTGVuZ3RoKClcbiAgICApOiBQcm9taXNlPFN1Z2dlc3Rpb25zPiB7XG4gICAgICAgIGxldCBjb250ZXh0OiBDb21tYW5kQ29udGV4dEJ1aWxkZXI8Uz4gPSBwYXJzZS5nZXRDb250ZXh0KCk7XG4gICAgICAgIGxldCBub2RlQmVmb3JlQ3Vyc29yOiBTdWdnZXN0aW9uQ29udGV4dDxTPiA9IGNvbnRleHQuZmluZFN1Z2dlc3Rpb25Db250ZXh0KGN1cnNvcik7XG4gICAgICAgIGxldCBwYXJlbnQ6IENvbW1hbmROb2RlPFM+ID0gbm9kZUJlZm9yZUN1cnNvci5wYXJlbnQ7XG4gICAgICAgIGxldCBzdGFydCA9IE1hdGgubWluKG5vZGVCZWZvcmVDdXJzb3Iuc3RhcnRQb3MsIGN1cnNvcik7XG4gICAgICAgIGxldCBmdWxsSW5wdXQgPSBwYXJzZS5nZXRSZWFkZXIoKS5nZXRTdHJpbmcoKTtcbiAgICAgICAgbGV0IHRydW5jYXRlZElucHV0ID0gZnVsbElucHV0LnN1YnN0cmluZygwLCBjdXJzb3IpO1xuICAgICAgICBsZXQgZnV0dXJlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBub2RlIG9mIHBhcmVudC5nZXRDaGlsZHJlbigpKSB7XG4gICAgICAgICAgICBsZXQgZnV0dXJlID0gYXdhaXQgU3VnZ2VzdGlvbnMuZW1wdHkoKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZnV0dXJlID0gYXdhaXQgbm9kZS5saXN0U3VnZ2VzdGlvbnMoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYnVpbGQodHJ1bmNhdGVkSW5wdXQpLFxuICAgICAgICAgICAgICAgICAgICBuZXcgU3VnZ2VzdGlvbnNCdWlsZGVyKHRydW5jYXRlZElucHV0LCBzdGFydClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoaWdub3JlZCkge31cbiAgICAgICAgICAgIGZ1dHVyZXMucHVzaChmdXR1cmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShTdWdnZXN0aW9ucy5tZXJnZShmdWxsSW5wdXQsIGZ1dHVyZXMpISk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJvb3QoKTogUm9vdENvbW1hbmROb2RlPFM+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGF0aCh0YXJnZXQ6IENvbW1hbmROb2RlPFM+KTogc3RyaW5nW10ge1xuICAgICAgICBsZXQgbm9kZXM6IEFycmF5PEFycmF5PENvbW1hbmROb2RlPFM+Pj4gPSBbXTtcbiAgICAgICAgdGhpcy5hZGRQYXRocyh0aGlzLnJvb3QsIG5vZGVzLCBbXSk7XG4gICAgICAgIGZvciAobGV0IGxpc3Qgb2Ygbm9kZXMpIHtcbiAgICAgICAgICAgIGlmIChsaXN0W2xpc3QubGVuZ3RoIC0gMV0gPT09IHRhcmdldCkge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBub2RlIG9mIGxpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUgIT09IHRoaXMucm9vdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobm9kZS5nZXROYW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kTm9kZShwYXRoOiBzdHJpbmdbXSk6IENvbW1hbmROb2RlPFM+IHwgbnVsbCB7XG4gICAgICAgIGxldCBub2RlOiBDb21tYW5kTm9kZTxTPiB8IHVuZGVmaW5lZCA9IHRoaXMucm9vdDtcbiAgICAgICAgZm9yIChsZXQgbmFtZSBvZiBwYXRoKSB7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5nZXRDaGlsZChuYW1lKTtcbiAgICAgICAgICAgIGlmICghbm9kZSkgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRBbWJpZ3VpdGllcyhjb25zdW1lcjogQW1iaWd1aXR5Q29uc3VtZXI8Uz4sIGNvbnRleHQ6IGFueSkge1xuICAgICAgICB0aGlzLnJvb3QuZmluZEFtYmlndWl0aWVzKGNvbnN1bWVyLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFBhdGhzKG5vZGU6IENvbW1hbmROb2RlPFM+LCByZXN1bHQ6IEFycmF5PEFycmF5PENvbW1hbmROb2RlPFM+Pj4sIHBhcmVudHM6IEFycmF5PENvbW1hbmROb2RlPFM+Pik6IHZvaWQge1xuICAgICAgICBsZXQgY3VycmVudDogQXJyYXk8Q29tbWFuZE5vZGU8Uz4+ID0gW107XG4gICAgICAgIGN1cnJlbnQucHVzaCguLi5wYXJlbnRzKTtcbiAgICAgICAgY3VycmVudC5wdXNoKG5vZGUpO1xuICAgICAgICByZXN1bHQucHVzaChjdXJyZW50KTtcbiAgICAgICAgZm9yIChsZXQgY2hpbGQgb2Ygbm9kZS5nZXRDaGlsZHJlbigpKSB0aGlzLmFkZFBhdGhzKGNoaWxkLCByZXN1bHQsIGN1cnJlbnQpO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQWVBLElBQU0scUJBQXFCO0FBQzNCLElBQU0sc0JBQXNCO0FBQzVCLElBQU0sdUJBQXVCO0FBQzdCLElBQU0sc0JBQXNCO0FBQzVCLElBQU0sdUJBQXVCO0FBQzdCLElBQU0sV0FBVztBQUVqQixJQUFxQixvQkFBckIsTUFBMEM7Q0FDdEM7Q0FFQSxXQUFzQyxFQUNsQyxvQkFBb0IsQ0FBQyxFQUN6QjtDQUVBLFlBQW1CLE9BQWtDLE1BQU07RUFDdkQsS0FBSyxPQUFPLFFBQVEsSUFBSSw2QkFBQSxRQUFtQjtDQUMvQztDQUVBLFNBQWdCLFNBQTJEO0VBQ3ZFLElBQUksUUFBUSxRQUFRLE1BQU07RUFDMUIsS0FBSyxLQUFLLFNBQVMsS0FBSztFQUN4QixPQUFPO0NBQ1g7Q0FFQSxZQUFtQixVQUE2QjtFQUM1QyxLQUFLLFdBQVc7Q0FDcEI7Q0FFQSxRQUNJLE9BQ0EsU0FBbUIsTUFDZ0I7RUFDbkMsSUFBSSxPQUFPLFVBQVUsVUFBVSxRQUFRLElBQUkscUJBQUEsUUFBYSxLQUFLO0VBRTdELElBQUk7RUFDSixJQUFJLGlCQUFpQixxQkFBQSxTQUNiO09BQUEsUUFBUSxRQUFRLEtBQUssTUFBTSxPQUFPLE1BQU07RUFBQSxPQUN6QyxRQUFRO0VBRWYsSUFBSSxNQUFNLFVBQVUsQ0FBQyxDQUFDLFFBQVEsR0FBRztHQUM3QixJQUFJLE1BQU0sY0FBYyxD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
|
|
@@ -32,9 +32,11 @@ var CommandDispatcher = class {
|
|
|
32
32
|
if (input instanceof StringReader) {
|
|
33
33
|
if (source) parse = this.parse(input, source);
|
|
34
34
|
} else parse = input;
|
|
35
|
-
if (parse.getReader().canRead())
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
if (parse.getReader().canRead()) {
|
|
36
|
+
if (parse.getExceptions().size === 1) throw parse.getExceptions().values().next().value;
|
|
37
|
+
else if (parse.getContext().getRange().isEmpty()) throw CommandSyntaxException.BUILT_IN_EXCEPTIONS.dispatcherUnknownCommand().createWithContext(parse.getReader());
|
|
38
|
+
else throw CommandSyntaxException.BUILT_IN_EXCEPTIONS.dispatcherUnknownArgument().createWithContext(parse.getReader());
|
|
39
|
+
}
|
|
38
40
|
let result = [];
|
|
39
41
|
let forked = false;
|
|
40
42
|
let foundCommand = false;
|
|
@@ -170,34 +172,36 @@ var CommandDispatcher = class {
|
|
|
170
172
|
let childOptional = node.getCommand() != null;
|
|
171
173
|
let open = childOptional ? USAGE_OPTIONAL_OPEN : USAGE_REQUIRED_OPEN;
|
|
172
174
|
let close = childOptional ? USAGE_OPTIONAL_CLOSE : USAGE_REQUIRED_CLOSE;
|
|
173
|
-
if (!deep)
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
let usage = this.__getSmartUsage(child, source, childOptional, true);
|
|
185
|
-
if (usage !== null) childUsage.add(usage);
|
|
186
|
-
}
|
|
187
|
-
if (childUsage.size === 1) {
|
|
188
|
-
let usage = childUsage.values().next().value;
|
|
189
|
-
return self + ARGUMENT_SEPARATOR + (childOptional ? USAGE_OPTIONAL_OPEN + usage + USAGE_OPTIONAL_CLOSE : usage);
|
|
190
|
-
} else if (childUsage.size > 1) {
|
|
191
|
-
let builder = open;
|
|
192
|
-
let count = 0;
|
|
175
|
+
if (!deep) {
|
|
176
|
+
if (node.getRedirect() != null) {
|
|
177
|
+
let redirect = node.getRedirect() == this.root ? "..." : "-> " + node.getRedirect()?.getUsageText();
|
|
178
|
+
return self + ARGUMENT_SEPARATOR + redirect;
|
|
179
|
+
} else {
|
|
180
|
+
let children = [...node.getChildren()].filter((c) => c.canUse(source));
|
|
181
|
+
if (children.length == 1) {
|
|
182
|
+
let usage = this.__getSmartUsage(children[0], source, childOptional, childOptional);
|
|
183
|
+
if (usage !== null) return self + ARGUMENT_SEPARATOR + usage;
|
|
184
|
+
} else if (children.length > 1) {
|
|
185
|
+
let childUsage = /* @__PURE__ */ new Set();
|
|
193
186
|
for (let child of children) {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
count++;
|
|
187
|
+
let usage = this.__getSmartUsage(child, source, childOptional, true);
|
|
188
|
+
if (usage !== null) childUsage.add(usage);
|
|
197
189
|
}
|
|
198
|
-
if (
|
|
199
|
-
|
|
200
|
-
return self + ARGUMENT_SEPARATOR +
|
|
190
|
+
if (childUsage.size === 1) {
|
|
191
|
+
let usage = childUsage.values().next().value;
|
|
192
|
+
return self + ARGUMENT_SEPARATOR + (childOptional ? USAGE_OPTIONAL_OPEN + usage + USAGE_OPTIONAL_CLOSE : usage);
|
|
193
|
+
} else if (childUsage.size > 1) {
|
|
194
|
+
let builder = open;
|
|
195
|
+
let count = 0;
|
|
196
|
+
for (let child of children) {
|
|
197
|
+
if (count > 0) builder += USAGE_OR;
|
|
198
|
+
builder += child.getUsageText();
|
|
199
|
+
count++;
|
|
200
|
+
}
|
|
201
|
+
if (count > 0) {
|
|
202
|
+
builder += close;
|
|
203
|
+
return self + ARGUMENT_SEPARATOR + builder;
|
|
204
|
+
}
|
|
201
205
|
}
|
|
202
206
|
}
|
|
203
207
|
}
|
|
@@ -256,4 +260,4 @@ var CommandDispatcher = class {
|
|
|
256
260
|
//#endregion
|
|
257
261
|
export { CommandDispatcher as default };
|
|
258
262
|
|
|
259
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tbWFuZERpc3BhdGNoZXIuZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL0NvbW1hbmREaXNwYXRjaGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIEFtYmlndWl0eUNvbnN1bWVyIGZyb20gJy4vQW1iaWd1aXR5Q29uc3VtZXInO1xuaW1wb3J0IFBhcnNlUmVzdWx0cyBmcm9tICcuL1BhcnNlUmVzdWx0cyc7XG5pbXBvcnQgdHlwZSBSZXN1bHRDb25zdW1lciBmcm9tICcuL1Jlc3VsdENvbnN1bWVyJztcbmltcG9ydCBTdHJpbmdSZWFkZXIgZnJvbSAnLi9TdHJpbmdSZWFkZXInO1xuaW1wb3J0IHR5cGUgTGl0ZXJhbEFyZ3VtZW50QnVpbGRlciBmcm9tICcuL2J1aWxkZXIvTGl0ZXJhbEFyZ3VtZW50QnVpbGRlcic7XG5pbXBvcnQgdHlwZSBDb21tYW5kQ29udGV4dCBmcm9tICcuL2NvbnRleHQvQ29tbWFuZENvbnRleHQnO1xuaW1wb3J0IENvbW1hbmRDb250ZXh0QnVpbGRlciBmcm9tICcuL2NvbnRleHQvQ29tbWFuZENvbnRleHRCdWlsZGVyJztcbmltcG9ydCB0eXBlIFN1Z2dlc3Rpb25Db250ZXh0IGZyb20gJy4vY29udGV4dC9TdWdnZXN0aW9uQ29udGV4dCc7XG5pbXBvcnQgQ29tbWFuZFN5bnRheEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbnMvQ29tbWFuZFN5bnRheEV4Y2VwdGlvbic7XG5pbXBvcnQgU3VnZ2VzdGlvbnMgZnJvbSAnLi9zdWdnZXN0aW9uL1N1Z2dlc3Rpb25zJztcbmltcG9ydCBTdWdnZXN0aW9uc0J1aWxkZXIgZnJvbSAnLi9zdWdnZXN0aW9uL1N1Z2dlc3Rpb25zQnVpbGRlcic7XG5pbXBvcnQgdHlwZSBDb21tYW5kTm9kZSBmcm9tICcuL3RyZWUvQ29tbWFuZE5vZGUnO1xuaW1wb3J0IHR5cGUgTGl0ZXJhbENvbW1hbmROb2RlIGZyb20gJy4vdHJlZS9MaXRlcmFsQ29tbWFuZE5vZGUnO1xuaW1wb3J0IFJvb3RDb21tYW5kTm9kZSBmcm9tICcuL3RyZWUvUm9vdENvbW1hbmROb2RlJztcblxuY29uc3QgQVJHVU1FTlRfU0VQQVJBVE9SID0gJyAnO1xuY29uc3QgVVNBR0VfT1BUSU9OQUxfT1BFTiA9ICdbJztcbmNvbnN0IFVTQUdFX09QVElPTkFMX0NMT1NFID0gJ10nO1xuY29uc3QgVVNBR0VfUkVRVUlSRURfT1BFTiA9ICcoJztcbmNvbnN0IFVTQUdFX1JFUVVJUkVEX0NMT1NFID0gJyknO1xuY29uc3QgVVNBR0VfT1IgPSAnfCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbW1hbmREaXNwYXRjaGVyPFM+IHtcbiAgICBwcml2YXRlIHJvb3Q6IFJvb3RDb21tYW5kTm9kZTxTPjtcblxuICAgIHByaXZhdGUgY29uc3VtZXI6IFJlc3VsdENvbnN1bWVyPFM+ID0ge1xuICAgICAgICBvbkNvbW1hbmRDb21wbGV0ZSgpIHt9XG4gICAgfTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihyb290OiBSb290Q29tbWFuZE5vZGU8Uz4gfCBudWxsID0gbnVsbCkge1xuICAgICAgICB0aGlzLnJvb3QgPSByb290IHx8IG5ldyBSb290Q29tbWFuZE5vZGU8Uz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXIoY29tbWFuZDogTGl0ZXJhbEFyZ3VtZW50QnVpbGRlcjxTPik6IExpdGVyYWxDb21tYW5kTm9kZTxTPiB7XG4gICAgICAgIGxldCBidWlsZCA9IGNvbW1hbmQuYnVpbGQoKTtcbiAgICAgICAgdGhpcy5yb290LmFkZENoaWxkKGJ1aWxkKTtcbiAgICAgICAgcmV0dXJuIGJ1aWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRDb25zdW1lcihjb25zdW1lcjogUmVzdWx0Q29uc3VtZXI8Uz4pIHtcbiAgICAgICAgdGhpcy5jb25zdW1lciA9IGNvbnN1bWVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBleGVjdXRlKFxuICAgICAgICBpbnB1dDogc3RyaW5nIHwgU3RyaW5nUmVhZGVyIHwgUGFyc2VSZXN1bHRzPFM+LFxuICAgICAgICBzb3VyY2U6IFMgfCBudWxsID0gbnVsbFxuICAgICk6IFByb21pc2U8YW55PiB8IFByb21pc2U8YW55PltdIHwgYW55IHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIGlucHV0ID0gbmV3IFN0cmluZ1JlYWRlcihpbnB1dCk7XG5cbiAgICAgICAgbGV0IHBhcnNlITogUGFyc2VSZXN1bHRzPFM+OyAvLyBGSVhNRTogVGhpcyBpcyBhIGhhY2sgdG8gbWFrZSBUeXBlU2NyaXB0IGhhcHB5LlxuICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBTdHJpbmdSZWFkZXIpIHtcbiAgICAgICAgICAgIGlmIChzb3VyY2UpIHBhcnNlID0gdGhpcy5wYXJzZShpbnB1dCwgc291cmNlKTtcbiAgICAgICAgfSBlbHNlIHBhcnNlID0gaW5wdXQ7XG5cbiAgICAgICAgaWYgKHBhcnNlLmdldFJlYWRlcigpLmNhblJlYWQoKSkge1xuICAgICAgICAgICAgaWYgKHBhcnNlLmdldEV4Y2VwdGlvbnMoKS5zaXplID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgcGFyc2UuZ2V0RXhjZXB0aW9ucygpLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyc2UuZ2V0Q29udGV4dCgpLmdldFJhbmdlKCkuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgQ29tbWFuZFN5bnRheEV4Y2VwdGlvbi5CVUlMVF9JTl9FWENFUFRJT05TLmRpc3BhdGNoZXJVbmtub3duQ29tbWFuZCgpLmNyZWF0ZVdpdGhDb250ZXh0KFxuICAgICAgICAgICAgICAgICAgICBwYXJzZS5nZXRSZWFkZXIoKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IENvbW1hbmRTeW50YXhFeGNlcHRpb24uQlVJTFRfSU5fRVhDRVBUSU9OUy5kaXNwYXRjaGVyVW5rbm93bkFyZ3VtZW50KCkuY3JlYXRlV2l0aENvbnRleHQoXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlLmdldFJlYWRlcigpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgbGV0IGZvcmtlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgZm91bmRDb21tYW5kID0gZmFsc2U7XG4gICAgICAgIGxldCBjb21tYW5kID0gcGFyc2UuZ2V0UmVhZGVyKCkuZ2V0U3RyaW5nKCk7XG4gICAgICAgIGxldCBvcmlnaW5hbCA9IHBhcnNlLmdldENvbnRleHQoKS5idWlsZChjb21tYW5kKTtcbiAgICAgICAgbGV0IGNvbnRleHRzOiBBcnJheTxDb21tYW5kQ29udGV4dDxTPj4gfCBudWxsID0gW107XG4gICAgICAgIGNvbnRleHRzLnB1c2gob3JpZ2luYWwpO1xuICAgICAgICBsZXQgbmV4dDogQ29tbWFuZENvbnRleHQ8Uz5bXSB8IG51bGwgPSBudWxsO1xuICAgICAgICB3aGlsZSAoKGNvbnRleHRzIGFzIGFueSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29udGV4dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgY29udGV4dCA9IGNvbnRleHRzW2ldOyAvLyBGSVhNRVxuICAgICAgICAgICAgICAgIGxldCBjaGlsZCA9IGNvbnRleHQ/LmdldENoaWxkKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQgJiYgY2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ya2VkID0gZm9ya2VkIHx8IGNvbnRleHQuaXNGb3JrZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmhhc05vZGVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kQ29tbWFuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbW9kaWZpZXIgPSBjb250ZXh0LmdldFJlZGlyZWN0TW9kaWZpZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbW9kaWZpZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHQpIG5leHQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0LnB1c2goY2hpbGQuY29weUZvcihjb250ZXh0LmdldFNvdXJjZSgpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRzOiBBcnJheTxTPiA9IG1vZGlmaWVyLmFwcGx5KGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmV4dCkgbmV4dCA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2YgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQucHVzaChjaGlsZC5jb3B5Rm9yKHNvdXJjZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXg6IGFueSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVyLm9uQ29tbWFuZENvbXBsZXRlKGNvbnRleHQsIGZhbHNlLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JrZWQpIHRocm93IGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGV4dD8uZ2V0Q29tbWFuZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvdW5kQ29tbWFuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBjb250ZXh0LmdldENvbW1hbmQoKSEoY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVyLm9uQ29tbWFuZENvbXBsZXRlKGNvbnRleHQsIHRydWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXg6IGFueSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lci5vbkNvbW1hbmRDb21wbGV0ZShjb250ZXh0LCBmYWxzZSwgZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JrZWQpIHRocm93IGV4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250ZXh0cyA9IG5leHQhOyAvLyBGSVhNRVxuICAgICAgICAgICAgbmV4dCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWZvdW5kQ29tbWFuZCkge1xuICAgICAgICAgICAgdGhpcy5jb25zdW1lci5vbkNvbW1hbmRDb21wbGV0ZShvcmlnaW5hbCwgZmFsc2UsIDApO1xuICAgICAgICAgICAgdGhyb3cgQ29tbWFuZFN5bnRheEV4Y2VwdGlvbi5CVUlMVF9JTl9FWENFUFRJT05TLmRpc3BhdGNoZXJVbmtub3duQ29tbWFuZCgpLmNyZWF0ZVdpdGhDb250ZXh0KFxuICAgICAgICAgICAgICAgIHBhcnNlLmdldFJlYWRlcigpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGFyc2UoY29tbWFuZDogc3RyaW5nIHwgU3RyaW5nUmVhZGVyLCBzb3VyY2U6IFMpOiBQYXJzZVJlc3VsdHM8Uz4ge1xuICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgPT09ICdzdHJpbmcnKSBjb21tYW5kID0gbmV3IFN0cmluZ1JlYWRlcihjb21tYW5kKTtcblxuICAgICAgICBsZXQgY29udGV4dDogQ29tbWFuZENvbnRleHRCdWlsZGVyPFM+ID0gbmV3IENvbW1hbmRDb250ZXh0QnVpbGRlcih0aGlzLCBzb3VyY2UsIHRoaXMucm9vdCwgY29tbWFuZC5nZXRDdXJzb3IoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlTm9kZXModGhpcy5yb290LCBjb21tYW5kLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlTm9kZXMoXG4gICAgICAgIG5vZGU6IENvbW1hbmROb2RlPFM+LFxuICAgICAgICBvcmlnaW5hbFJlYWRlcjogU3RyaW5nUmVhZGVyLFxuICAgICAgICBjb250ZXh0U29GYXI6IENvbW1hbmRDb250ZXh0QnVpbGRlcjxTPlxuICAgICk6IFBhcnNlUmVzdWx0czxTPiB7XG4gICAgICAgIGxldCBzb3VyY2U6IFMgPSBjb250ZXh0U29GYXIuZ2V0U291cmNlKCk7XG4gICAgICAgIGxldCBlcnJvcnM6IE1hcDxDb21tYW5kTm9kZTxTPiwgQ29tbWFuZFN5bnRheEV4Y2VwdGlvbj4gfCBudWxsID0gbnVsbDtcbiAgICAgICAgbGV0IHBvdGVudGlhbHM6IFBhcnNlUmVzdWx0czxTPltdIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGxldCBjdXJzb3IgPSBvcmlnaW5hbFJlYWRlci5nZXRDdXJzb3IoKTtcbiAgICAgICAgZm9yIChsZXQgY2hpbGQgb2Ygbm9kZS5nZXRSZWxldmFudE5vZGVzKG9yaWdpbmFsUmVhZGVyKSkge1xuICAgICAgICAgICAgaWYgKCFjaGlsZC5jYW5Vc2Uoc291cmNlKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGxldCBjb250ZXh0OiBDb21tYW5kQ29udGV4dEJ1aWxkZXI8Uz4gPSBjb250ZXh0U29GYXIuY29weSgpO1xuICAgICAgICAgICAgbGV0IHJlYWRlcjogU3RyaW5nUmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihvcmlnaW5hbFJlYWRlcik7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNoaWxkLnBhcnNlKHJlYWRlciwgY29udGV4dCk7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVhZGVyLmNhblJlYWQoKSlcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRlci5wZWVrKCkgIT0gQVJHVU1FTlRfU0VQQVJBVE9SKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgQ29tbWFuZFN5bnRheEV4Y2VwdGlvbi5CVUlMVF9JTl9FWENFUFRJT05TLmRpc3BhdGNoZXJFeHBlY3RlZEFyZ3VtZW50U2VwYXJhdG9yKCkuY3JlYXRlV2l0aENvbnRleHQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXg6IHVua25vd24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlcnJvcnMuc2V0KGNoaWxkLCBleCBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIHJlYWRlci5zZXRDdXJzb3IoY3Vyc29yKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGV4dC53aXRoQ29tbWFuZChjaGlsZC5nZXRDb21tYW5kKCkhKTtcbiAgICAgICAgICAgIGlmIChyZWFkZXIuY2FuUmVhZCghY2hpbGQuZ2V0UmVkaXJlY3QoKSA/IDIgOiAxKSkge1xuICAgICAgICAgICAgICAgIHJlYWRlci5za2lwKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLmdldFJlZGlyZWN0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNoaWxkQ29udGV4dDogQ29tbWFuZENvbnRleHRCdWlsZGVyPFM+ID0gbmV3IENvbW1hbmRDb250ZXh0QnVpbGRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5nZXRSZWRpcmVjdCgpISxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5nZXRDdXJzb3IoKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyc2U6IFBhcnNlUmVzdWx0czxTPiA9IHRoaXMucGFyc2VOb2RlcyhjaGlsZC5nZXRSZWRpcmVjdCgpISwgcmVhZGVyLCBjaGlsZENvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndpdGhDaGlsZChwYXJzZS5nZXRDb250ZXh0KCkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBhcnNlUmVzdWx0cyhjb250ZXh0LCBwYXJzZS5nZXRSZWFkZXIoKSwgcGFyc2UuZ2V0RXhjZXB0aW9ucygpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyc2U6IFBhcnNlUmVzdWx0czxTPiA9IHRoaXMucGFyc2VOb2RlcyhjaGlsZCwgcmVhZGVyLCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvdGVudGlhbHMgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG90ZW50aWFscyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcG90ZW50aWFscy5wdXNoKHBhcnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChwb3RlbnRpYWxzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcG90ZW50aWFscyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxzLnB1c2gobmV3IFBhcnNlUmVzdWx0cyhjb250ZXh0LCByZWFkZXIsIG5ldyBNYXAoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvdGVudGlhbHMpIHtcbiAgICAgICAgICAgIGlmIChwb3RlbnRpYWxzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhLmdldFJlYWRlcigpLmNhblJlYWQoKSAmJiBiLmdldFJlYWRlcigpLmNhblJlYWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLmdldFJlYWRlcigpLmNhblJlYWQoKSAmJiAhYi5nZXRSZWFkZXIoKS5jYW5SZWFkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLmdldEV4Y2VwdGlvbnMoKS5zaXplID09PSAwICYmIGIuZ2V0RXhjZXB0aW9ucygpLnNpemUgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoYS5nZXRFeGNlcHRpb25zKCkuc2l6ZSAhPT0gMCAmJiBiLmdldEV4Y2VwdGlvbnMoKS5zaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwb3RlbnRpYWxzWzBdITsgLy8gRklYTUVcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgUGFyc2VSZXN1bHRzPFM+KGNvbnRleHRTb0Zhciwgb3JpZ2luYWxSZWFkZXIsIGVycm9ycyA9PSBudWxsID8gbmV3IE1hcCgpIDogZXJyb3JzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWxsVXNhZ2Uobm9kZTogQ29tbWFuZE5vZGU8Uz4sIHNvdXJjZTogUywgcmVzdHJpY3RlZDogYm9vbGVhbik6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgICAgIHRoaXMuX19nZXRBbGxVc2FnZShub2RlLCBzb3VyY2UsIHJlc3VsdCwgJycsIHJlc3RyaWN0ZWQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX19nZXRBbGxVc2FnZShub2RlOiBDb21tYW5kTm9kZTxTPiwgc291cmNlOiBTLCByZXN1bHQ6IHN0cmluZ1tdLCBwcmVmaXggPSAnJywgcmVzdHJpY3RlZDogYm9vbGVhbikge1xuICAgICAgICBpZiAocmVzdHJpY3RlZCAmJiAhbm9kZS5jYW5Vc2Uoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGUuZ2V0Q29tbWFuZCgpICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHByZWZpeCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5nZXRSZWRpcmVjdCgpICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZGlyZWN0ID0gbm9kZS5nZXRSZWRpcmVjdCgpID09PSB0aGlzLnJvb3QgPyAnLi4uJyA6ICctPiAnICsgbm9kZS5nZXRSZWRpcmVjdCgpPy5nZXRVc2FnZVRleHQoKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgIHByZWZpeC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBub2RlLmdldFVzYWdlVGV4dCgpICsgQVJHVU1FTlRfU0VQQVJBVE9SICsgcmVkaXJlY3RcbiAgICAgICAgICAgICAgICAgICAgOiBwcmVmaXggKyBBUkdVTUVOVF9TRVBBUkFUT1IgKyByZWRpcmVjdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLmdldENoaWxkcmVuQ291bnQoKSA+IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGNoaWxkIG9mIG5vZGUuZ2V0Q2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX19nZXRBbGxVc2FnZShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXgubGVuZ3RoID09PSAwID8gY2hpbGQuZ2V0VXNhZ2VUZXh0KCkgOiBwcmVmaXggKyBBUkdVTUVOVF9TRVBBUkFUT1IgKyBjaGlsZC5nZXRVc2FnZVRleHQoKSxcbiAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3RlZFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U21hcnRVc2FnZShub2RlOiBDb21tYW5kTm9kZTxTPiwgc291cmNlOiBTKTogTWFwPENvbW1hbmROb2RlPFM+LCBzdHJpbmc+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBNYXA8Q29tbWFuZE5vZGU8Uz4sIHN0cmluZz4oKTtcblxuICAgICAgICBsZXQgb3B0aW9uYWwgPSBub2RlLmdldENvbW1hbmQoKSAhPT0gbnVsbDtcbiAgICAgICAgZm9yIChsZXQgY2hpbGQgb2Ygbm9kZS5nZXRDaGlsZHJlbigpKSB7XG4gICAgICAgICAgICBsZXQgdXNhZ2UgPSB0aGlzLl9fZ2V0U21hcnRVc2FnZShjaGlsZCwgc291cmNlLCBvcHRpb25hbCwgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKHVzYWdlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnNldChjaGlsZCwgdXNhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9fZ2V0U21hcnRVc2FnZShub2RlOiBDb21tYW5kTm9kZTxTPiwgc291cmNlOiBTLCBvcHRpb25hbDogYm9vbGVhbiwgZGVlcDogYm9vbGVhbik6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBpZiAoIW5vZGUuY2FuVXNlKHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNlbGYgPSBvcHRpb25hbCA/IFVTQUdFX09QVElPTkFMX09QRU4gKyBub2RlLmdldFVzYWdlVGV4dCgpICsgVVNBR0VfT1BUSU9OQUxfQ0xPU0UgOiBub2RlLmdldFVzYWdlVGV4dCgpO1xuICAgICAgICBsZXQgY2hpbGRPcHRpb25hbCA9IG5vZGUuZ2V0Q29tbWFuZCgpICE9IG51bGw7XG4gICAgICAgIGxldCBvcGVuID0gY2hpbGRPcHRpb25hbCA/IFVTQUdFX09QVElPTkFMX09QRU4gOiBVU0FHRV9SRVFVSVJFRF9PUEVOO1xuICAgICAgICBsZXQgY2xvc2UgPSBjaGlsZE9wdGlvbmFsID8gVVNBR0VfT1BUSU9OQUxfQ0xPU0UgOiBVU0FHRV9SRVFVSVJFRF9DTE9TRTtcblxuICAgICAgICBpZiAoIWRlZXApIHtcbiAgICAgICAgICAgIGlmIChub2RlLmdldFJlZGlyZWN0KCkgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGxldCByZWRpcmVjdCA9IG5vZGUuZ2V0UmVkaXJlY3QoKSA9PSB0aGlzLnJvb3QgPyAnLi4uJyA6ICctPiAnICsgbm9kZS5nZXRSZWRpcmVjdCgpPy5nZXRVc2FnZVRleHQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZiArIEFSR1VNRU5UX1NFUEFSQVRPUiArIHJlZGlyZWN0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW46IENvbW1hbmROb2RlPFM+W10gPSBbLi4ubm9kZS5nZXRDaGlsZHJlbigpXS5maWx0ZXIoKGMpID0+IGMuY2FuVXNlKHNvdXJjZSkpO1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdXNhZ2UgPSB0aGlzLl9fZ2V0U21hcnRVc2FnZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuWzBdISwgLy8gRklYTUVcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkT3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE9wdGlvbmFsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1c2FnZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYgKyBBUkdVTUVOVF9TRVBBUkFUT1IgKyB1c2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGRVc2FnZSA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVzYWdlID0gdGhpcy5fX2dldFNtYXJ0VXNhZ2UoY2hpbGQsIHNvdXJjZSwgY2hpbGRPcHRpb25hbCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFVzYWdlLmFkZCh1c2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkVXNhZ2Uuc2l6ZSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVzYWdlID0gY2hpbGRVc2FnZS52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSR1VNRU5UX1NFUEFSQVRPUiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoaWxkT3B0aW9uYWwgPyBVU0FHRV9PUFRJT05BTF9PUEVOICsgdXNhZ2UgKyBVU0FHRV9PUFRJT05BTF9DTE9TRSA6IHVzYWdlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZFVzYWdlLnNpemUgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYnVpbGRlciA9IG9wZW47XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIgKz0gVVNBR0VfT1I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIgKz0gY2hpbGQuZ2V0VXNhZ2VUZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyICs9IGNsb3NlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmICsgQVJHVU1FTlRfU0VQQVJBVE9SICsgYnVpbGRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q29tcGxldGlvblN1Z2dlc3Rpb25zKFxuICAgICAgICBwYXJzZTogUGFyc2VSZXN1bHRzPFM+LFxuICAgICAgICBjdXJzb3IgPSBwYXJzZS5nZXRSZWFkZXIoKS5nZXRUb3RhbExlbmd0aCgpXG4gICAgKTogUHJvbWlzZTxTdWdnZXN0aW9ucz4ge1xuICAgICAgICBsZXQgY29udGV4dDogQ29tbWFuZENvbnRleHRCdWlsZGVyPFM+ID0gcGFyc2UuZ2V0Q29udGV4dCgpO1xuICAgICAgICBsZXQgbm9kZUJlZm9yZUN1cnNvcjogU3VnZ2VzdGlvbkNvbnRleHQ8Uz4gPSBjb250ZXh0LmZpbmRTdWdnZXN0aW9uQ29udGV4dChjdXJzb3IpO1xuICAgICAgICBsZXQgcGFyZW50OiBDb21tYW5kTm9kZTxTPiA9IG5vZGVCZWZvcmVDdXJzb3IucGFyZW50O1xuICAgICAgICBsZXQgc3RhcnQgPSBNYXRoLm1pbihub2RlQmVmb3JlQ3Vyc29yLnN0YXJ0UG9zLCBjdXJzb3IpO1xuICAgICAgICBsZXQgZnVsbElucHV0ID0gcGFyc2UuZ2V0UmVhZGVyKCkuZ2V0U3RyaW5nKCk7XG4gICAgICAgIGxldCB0cnVuY2F0ZWRJbnB1dCA9IGZ1bGxJbnB1dC5zdWJzdHJpbmcoMCwgY3Vyc29yKTtcbiAgICAgICAgbGV0IGZ1dHVyZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgbm9kZSBvZiBwYXJlbnQuZ2V0Q2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgbGV0IGZ1dHVyZSA9IGF3YWl0IFN1Z2dlc3Rpb25zLmVtcHR5KCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZ1dHVyZSA9IGF3YWl0IG5vZGUubGlzdFN1Z2dlc3Rpb25zKFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmJ1aWxkKHRydW5jYXRlZElucHV0KSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IFN1Z2dlc3Rpb25zQnVpbGRlcih0cnVuY2F0ZWRJbnB1dCwgc3RhcnQpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGlnbm9yZWQpIHt9XG4gICAgICAgICAgICBmdXR1cmVzLnB1c2goZnV0dXJlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoU3VnZ2VzdGlvbnMubWVyZ2UoZnVsbElucHV0LCBmdXR1cmVzKSEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSb290KCk6IFJvb3RDb21tYW5kTm9kZTxTPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3Q7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhdGgodGFyZ2V0OiBDb21tYW5kTm9kZTxTPik6IHN0cmluZ1tdIHtcbiAgICAgICAgbGV0IG5vZGVzOiBBcnJheTxBcnJheTxDb21tYW5kTm9kZTxTPj4+ID0gW107XG4gICAgICAgIHRoaXMuYWRkUGF0aHModGhpcy5yb290LCBub2RlcywgW10pO1xuICAgICAgICBmb3IgKGxldCBsaXN0IG9mIG5vZGVzKSB7XG4gICAgICAgICAgICBpZiAobGlzdFtsaXN0Lmxlbmd0aCAtIDFdID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgbm9kZSBvZiBsaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlICE9PSB0aGlzLnJvb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5vZGUuZ2V0TmFtZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluZE5vZGUocGF0aDogc3RyaW5nW10pOiBDb21tYW5kTm9kZTxTPiB8IG51bGwge1xuICAgICAgICBsZXQgbm9kZTogQ29tbWFuZE5vZGU8Uz4gfCB1bmRlZmluZWQgPSB0aGlzLnJvb3Q7XG4gICAgICAgIGZvciAobGV0IG5hbWUgb2YgcGF0aCkge1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUuZ2V0Q2hpbGQobmFtZSk7XG4gICAgICAgICAgICBpZiAoIW5vZGUpIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kQW1iaWd1aXRpZXMoY29uc3VtZXI6IEFtYmlndWl0eUNvbnN1bWVyPFM+LCBjb250ZXh0OiBhbnkpIHtcbiAgICAgICAgdGhpcy5yb290LmZpbmRBbWJpZ3VpdGllcyhjb25zdW1lciwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRQYXRocyhub2RlOiBDb21tYW5kTm9kZTxTPiwgcmVzdWx0OiBBcnJheTxBcnJheTxDb21tYW5kTm9kZTxTPj4+LCBwYXJlbnRzOiBBcnJheTxDb21tYW5kTm9kZTxTPj4pOiB2b2lkIHtcbiAgICAgICAgbGV0IGN1cnJlbnQ6IEFycmF5PENvbW1hbmROb2RlPFM+PiA9IFtdO1xuICAgICAgICBjdXJyZW50LnB1c2goLi4ucGFyZW50cyk7XG4gICAgICAgIGN1cnJlbnQucHVzaChub2RlKTtcbiAgICAgICAgcmVzdWx0LnB1c2goY3VycmVudCk7XG4gICAgICAgIGZvciAobGV0IGNoaWxkIG9mIG5vZGUuZ2V0Q2hpbGRyZW4oKSkgdGhpcy5hZGRQYXRocyhjaGlsZCwgcmVzdWx0LCBjdXJyZW50KTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBZUEsSUFBTSxxQkFBcUI7QUFDM0IsSUFBTSxzQkFBc0I7QUFDNUIsSUFBTSx1QkFBdUI7QUFDN0IsSUFBTSxzQkFBc0I7QUFDNUIsSUFBTSx1QkFBdUI7QUFDN0IsSUFBTSxXQUFXO0FBRWpCLElBQXFCLG9CQUFyQixNQUEwQztDQUN0QztDQUVBLFdBQXNDLEVBQ2xDLG9CQUFvQixDQUFDLEVBQ3pCO0NBRUEsWUFBbUIsT0FBa0MsTUFBTTtFQUN2RCxLQUFLLE9BQU8sUUFBUSxJQUFJLGdCQUFtQjtDQUMvQztDQUVBLFNBQWdCLFNBQTJEO0VBQ3ZFLElBQUksUUFBUSxRQUFRLE1BQU07RUFDMUIsS0FBSyxLQUFLLFNBQVMsS0FBSztFQUN4QixPQUFPO0NBQ1g7Q0FFQSxZQUFtQixVQUE2QjtFQUM1QyxLQUFLLFdBQVc7Q0FDcEI7Q0FFQSxRQUNJLE9BQ0EsU0FBbUIsTUFDZ0I7RUFDbkMsSUFBSSxPQUFPLFVBQVUsVUFBVSxRQUFRLElBQUksYUFBYSxLQUFLO0VBRTdELElBQUk7RUFDSixJQUFJLGlCQUFpQjtPQUNiLFFBQVEsUUFBUSxLQUFLLE1BQU0sT0FBTyxNQUFNO0VBQUEsT0FDekMsUUFBUTtFQUVmLElBQUksTUFBTSxVQUFVLEVBQUUsUUFBUSxHQUMxQixJQUFJLE1BQU0sY0FBYyxFQUFFLFNBQVMsR0FDL0IsTUFBTSxNQUFNLGNBQWMsRUFBRSxPQUFP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
|
|
263
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tbWFuZERpc3BhdGNoZXIuZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL0NvbW1hbmREaXNwYXRjaGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIEFtYmlndWl0eUNvbnN1bWVyIGZyb20gJy4vQW1iaWd1aXR5Q29uc3VtZXInO1xuaW1wb3J0IFBhcnNlUmVzdWx0cyBmcm9tICcuL1BhcnNlUmVzdWx0cyc7XG5pbXBvcnQgdHlwZSBSZXN1bHRDb25zdW1lciBmcm9tICcuL1Jlc3VsdENvbnN1bWVyJztcbmltcG9ydCBTdHJpbmdSZWFkZXIgZnJvbSAnLi9TdHJpbmdSZWFkZXInO1xuaW1wb3J0IHR5cGUgTGl0ZXJhbEFyZ3VtZW50QnVpbGRlciBmcm9tICcuL2J1aWxkZXIvTGl0ZXJhbEFyZ3VtZW50QnVpbGRlcic7XG5pbXBvcnQgdHlwZSBDb21tYW5kQ29udGV4dCBmcm9tICcuL2NvbnRleHQvQ29tbWFuZENvbnRleHQnO1xuaW1wb3J0IENvbW1hbmRDb250ZXh0QnVpbGRlciBmcm9tICcuL2NvbnRleHQvQ29tbWFuZENvbnRleHRCdWlsZGVyJztcbmltcG9ydCB0eXBlIFN1Z2dlc3Rpb25Db250ZXh0IGZyb20gJy4vY29udGV4dC9TdWdnZXN0aW9uQ29udGV4dCc7XG5pbXBvcnQgQ29tbWFuZFN5bnRheEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbnMvQ29tbWFuZFN5bnRheEV4Y2VwdGlvbic7XG5pbXBvcnQgU3VnZ2VzdGlvbnMgZnJvbSAnLi9zdWdnZXN0aW9uL1N1Z2dlc3Rpb25zJztcbmltcG9ydCBTdWdnZXN0aW9uc0J1aWxkZXIgZnJvbSAnLi9zdWdnZXN0aW9uL1N1Z2dlc3Rpb25zQnVpbGRlcic7XG5pbXBvcnQgdHlwZSBDb21tYW5kTm9kZSBmcm9tICcuL3RyZWUvQ29tbWFuZE5vZGUnO1xuaW1wb3J0IHR5cGUgTGl0ZXJhbENvbW1hbmROb2RlIGZyb20gJy4vdHJlZS9MaXRlcmFsQ29tbWFuZE5vZGUnO1xuaW1wb3J0IFJvb3RDb21tYW5kTm9kZSBmcm9tICcuL3RyZWUvUm9vdENvbW1hbmROb2RlJztcblxuY29uc3QgQVJHVU1FTlRfU0VQQVJBVE9SID0gJyAnO1xuY29uc3QgVVNBR0VfT1BUSU9OQUxfT1BFTiA9ICdbJztcbmNvbnN0IFVTQUdFX09QVElPTkFMX0NMT1NFID0gJ10nO1xuY29uc3QgVVNBR0VfUkVRVUlSRURfT1BFTiA9ICcoJztcbmNvbnN0IFVTQUdFX1JFUVVJUkVEX0NMT1NFID0gJyknO1xuY29uc3QgVVNBR0VfT1IgPSAnfCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbW1hbmREaXNwYXRjaGVyPFM+IHtcbiAgICBwcml2YXRlIHJvb3Q6IFJvb3RDb21tYW5kTm9kZTxTPjtcblxuICAgIHByaXZhdGUgY29uc3VtZXI6IFJlc3VsdENvbnN1bWVyPFM+ID0ge1xuICAgICAgICBvbkNvbW1hbmRDb21wbGV0ZSgpIHt9XG4gICAgfTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihyb290OiBSb290Q29tbWFuZE5vZGU8Uz4gfCBudWxsID0gbnVsbCkge1xuICAgICAgICB0aGlzLnJvb3QgPSByb290IHx8IG5ldyBSb290Q29tbWFuZE5vZGU8Uz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXIoY29tbWFuZDogTGl0ZXJhbEFyZ3VtZW50QnVpbGRlcjxTPik6IExpdGVyYWxDb21tYW5kTm9kZTxTPiB7XG4gICAgICAgIGxldCBidWlsZCA9IGNvbW1hbmQuYnVpbGQoKTtcbiAgICAgICAgdGhpcy5yb290LmFkZENoaWxkKGJ1aWxkKTtcbiAgICAgICAgcmV0dXJuIGJ1aWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRDb25zdW1lcihjb25zdW1lcjogUmVzdWx0Q29uc3VtZXI8Uz4pIHtcbiAgICAgICAgdGhpcy5jb25zdW1lciA9IGNvbnN1bWVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBleGVjdXRlKFxuICAgICAgICBpbnB1dDogc3RyaW5nIHwgU3RyaW5nUmVhZGVyIHwgUGFyc2VSZXN1bHRzPFM+LFxuICAgICAgICBzb3VyY2U6IFMgfCBudWxsID0gbnVsbFxuICAgICk6IFByb21pc2U8YW55PiB8IFByb21pc2U8YW55PltdIHwgYW55IHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIGlucHV0ID0gbmV3IFN0cmluZ1JlYWRlcihpbnB1dCk7XG5cbiAgICAgICAgbGV0IHBhcnNlITogUGFyc2VSZXN1bHRzPFM+OyAvLyBGSVhNRTogVGhpcyBpcyBhIGhhY2sgdG8gbWFrZSBUeXBlU2NyaXB0IGhhcHB5LlxuICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBTdHJpbmdSZWFkZXIpIHtcbiAgICAgICAgICAgIGlmIChzb3VyY2UpIHBhcnNlID0gdGhpcy5wYXJzZShpbnB1dCwgc291cmNlKTtcbiAgICAgICAgfSBlbHNlIHBhcnNlID0gaW5wdXQ7XG5cbiAgICAgICAgaWYgKHBhcnNlLmdldFJlYWRlcigpLmNhblJlYWQoKSkge1xuICAgICAgICAgICAgaWYgKHBhcnNlLmdldEV4Y2VwdGlvbnMoKS5zaXplID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgcGFyc2UuZ2V0RXhjZXB0aW9ucygpLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyc2UuZ2V0Q29udGV4dCgpLmdldFJhbmdlKCkuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgQ29tbWFuZFN5bnRheEV4Y2VwdGlvbi5CVUlMVF9JTl9FWENFUFRJT05TLmRpc3BhdGNoZXJVbmtub3duQ29tbWFuZCgpLmNyZWF0ZVdpdGhDb250ZXh0KFxuICAgICAgICAgICAgICAgICAgICBwYXJzZS5nZXRSZWFkZXIoKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IENvbW1hbmRTeW50YXhFeGNlcHRpb24uQlVJTFRfSU5fRVhDRVBUSU9OUy5kaXNwYXRjaGVyVW5rbm93bkFyZ3VtZW50KCkuY3JlYXRlV2l0aENvbnRleHQoXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlLmdldFJlYWRlcigpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgbGV0IGZvcmtlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgZm91bmRDb21tYW5kID0gZmFsc2U7XG4gICAgICAgIGxldCBjb21tYW5kID0gcGFyc2UuZ2V0UmVhZGVyKCkuZ2V0U3RyaW5nKCk7XG4gICAgICAgIGxldCBvcmlnaW5hbCA9IHBhcnNlLmdldENvbnRleHQoKS5idWlsZChjb21tYW5kKTtcbiAgICAgICAgbGV0IGNvbnRleHRzOiBBcnJheTxDb21tYW5kQ29udGV4dDxTPj4gfCBudWxsID0gW107XG4gICAgICAgIGNvbnRleHRzLnB1c2gob3JpZ2luYWwpO1xuICAgICAgICBsZXQgbmV4dDogQ29tbWFuZENvbnRleHQ8Uz5bXSB8IG51bGwgPSBudWxsO1xuICAgICAgICB3aGlsZSAoKGNvbnRleHRzIGFzIGFueSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29udGV4dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgY29udGV4dCA9IGNvbnRleHRzW2ldOyAvLyBGSVhNRVxuICAgICAgICAgICAgICAgIGxldCBjaGlsZCA9IGNvbnRleHQ/LmdldENoaWxkKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQgJiYgY2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ya2VkID0gZm9ya2VkIHx8IGNvbnRleHQuaXNGb3JrZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmhhc05vZGVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kQ29tbWFuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbW9kaWZpZXIgPSBjb250ZXh0LmdldFJlZGlyZWN0TW9kaWZpZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbW9kaWZpZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHQpIG5leHQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0LnB1c2goY2hpbGQuY29weUZvcihjb250ZXh0LmdldFNvdXJjZSgpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRzOiBBcnJheTxTPiA9IG1vZGlmaWVyLmFwcGx5KGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmV4dCkgbmV4dCA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2YgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQucHVzaChjaGlsZC5jb3B5Rm9yKHNvdXJjZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXg6IGFueSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVyLm9uQ29tbWFuZENvbXBsZXRlKGNvbnRleHQsIGZhbHNlLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JrZWQpIHRocm93IGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGV4dD8uZ2V0Q29tbWFuZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvdW5kQ29tbWFuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBjb250ZXh0LmdldENvbW1hbmQoKSEoY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVyLm9uQ29tbWFuZENvbXBsZXRlKGNvbnRleHQsIHRydWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXg6IGFueSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lci5vbkNvbW1hbmRDb21wbGV0ZShjb250ZXh0LCBmYWxzZSwgZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JrZWQpIHRocm93IGV4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250ZXh0cyA9IG5leHQhOyAvLyBGSVhNRVxuICAgICAgICAgICAgbmV4dCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWZvdW5kQ29tbWFuZCkge1xuICAgICAgICAgICAgdGhpcy5jb25zdW1lci5vbkNvbW1hbmRDb21wbGV0ZShvcmlnaW5hbCwgZmFsc2UsIDApO1xuICAgICAgICAgICAgdGhyb3cgQ29tbWFuZFN5bnRheEV4Y2VwdGlvbi5CVUlMVF9JTl9FWENFUFRJT05TLmRpc3BhdGNoZXJVbmtub3duQ29tbWFuZCgpLmNyZWF0ZVdpdGhDb250ZXh0KFxuICAgICAgICAgICAgICAgIHBhcnNlLmdldFJlYWRlcigpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGFyc2UoY29tbWFuZDogc3RyaW5nIHwgU3RyaW5nUmVhZGVyLCBzb3VyY2U6IFMpOiBQYXJzZVJlc3VsdHM8Uz4ge1xuICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgPT09ICdzdHJpbmcnKSBjb21tYW5kID0gbmV3IFN0cmluZ1JlYWRlcihjb21tYW5kKTtcblxuICAgICAgICBsZXQgY29udGV4dDogQ29tbWFuZENvbnRleHRCdWlsZGVyPFM+ID0gbmV3IENvbW1hbmRDb250ZXh0QnVpbGRlcih0aGlzLCBzb3VyY2UsIHRoaXMucm9vdCwgY29tbWFuZC5nZXRDdXJzb3IoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlTm9kZXModGhpcy5yb290LCBjb21tYW5kLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlTm9kZXMoXG4gICAgICAgIG5vZGU6IENvbW1hbmROb2RlPFM+LFxuICAgICAgICBvcmlnaW5hbFJlYWRlcjogU3RyaW5nUmVhZGVyLFxuICAgICAgICBjb250ZXh0U29GYXI6IENvbW1hbmRDb250ZXh0QnVpbGRlcjxTPlxuICAgICk6IFBhcnNlUmVzdWx0czxTPiB7XG4gICAgICAgIGxldCBzb3VyY2U6IFMgPSBjb250ZXh0U29GYXIuZ2V0U291cmNlKCk7XG4gICAgICAgIGxldCBlcnJvcnM6IE1hcDxDb21tYW5kTm9kZTxTPiwgQ29tbWFuZFN5bnRheEV4Y2VwdGlvbj4gfCBudWxsID0gbnVsbDtcbiAgICAgICAgbGV0IHBvdGVudGlhbHM6IFBhcnNlUmVzdWx0czxTPltdIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGxldCBjdXJzb3IgPSBvcmlnaW5hbFJlYWRlci5nZXRDdXJzb3IoKTtcbiAgICAgICAgZm9yIChsZXQgY2hpbGQgb2Ygbm9kZS5nZXRSZWxldmFudE5vZGVzKG9yaWdpbmFsUmVhZGVyKSkge1xuICAgICAgICAgICAgaWYgKCFjaGlsZC5jYW5Vc2Uoc291cmNlKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGxldCBjb250ZXh0OiBDb21tYW5kQ29udGV4dEJ1aWxkZXI8Uz4gPSBjb250ZXh0U29GYXIuY29weSgpO1xuICAgICAgICAgICAgbGV0IHJlYWRlcjogU3RyaW5nUmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihvcmlnaW5hbFJlYWRlcik7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNoaWxkLnBhcnNlKHJlYWRlciwgY29udGV4dCk7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVhZGVyLmNhblJlYWQoKSlcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRlci5wZWVrKCkgIT0gQVJHVU1FTlRfU0VQQVJBVE9SKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgQ29tbWFuZFN5bnRheEV4Y2VwdGlvbi5CVUlMVF9JTl9FWENFUFRJT05TLmRpc3BhdGNoZXJFeHBlY3RlZEFyZ3VtZW50U2VwYXJhdG9yKCkuY3JlYXRlV2l0aENvbnRleHQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXg6IHVua25vd24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlcnJvcnMuc2V0KGNoaWxkLCBleCBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIHJlYWRlci5zZXRDdXJzb3IoY3Vyc29yKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGV4dC53aXRoQ29tbWFuZChjaGlsZC5nZXRDb21tYW5kKCkhKTtcbiAgICAgICAgICAgIGlmIChyZWFkZXIuY2FuUmVhZCghY2hpbGQuZ2V0UmVkaXJlY3QoKSA/IDIgOiAxKSkge1xuICAgICAgICAgICAgICAgIHJlYWRlci5za2lwKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLmdldFJlZGlyZWN0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNoaWxkQ29udGV4dDogQ29tbWFuZENvbnRleHRCdWlsZGVyPFM+ID0gbmV3IENvbW1hbmRDb250ZXh0QnVpbGRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5nZXRSZWRpcmVjdCgpISxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5nZXRDdXJzb3IoKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyc2U6IFBhcnNlUmVzdWx0czxTPiA9IHRoaXMucGFyc2VOb2RlcyhjaGlsZC5nZXRSZWRpcmVjdCgpISwgcmVhZGVyLCBjaGlsZENvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndpdGhDaGlsZChwYXJzZS5nZXRDb250ZXh0KCkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBhcnNlUmVzdWx0cyhjb250ZXh0LCBwYXJzZS5nZXRSZWFkZXIoKSwgcGFyc2UuZ2V0RXhjZXB0aW9ucygpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyc2U6IFBhcnNlUmVzdWx0czxTPiA9IHRoaXMucGFyc2VOb2RlcyhjaGlsZCwgcmVhZGVyLCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvdGVudGlhbHMgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG90ZW50aWFscyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcG90ZW50aWFscy5wdXNoKHBhcnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChwb3RlbnRpYWxzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcG90ZW50aWFscyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxzLnB1c2gobmV3IFBhcnNlUmVzdWx0cyhjb250ZXh0LCByZWFkZXIsIG5ldyBNYXAoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvdGVudGlhbHMpIHtcbiAgICAgICAgICAgIGlmIChwb3RlbnRpYWxzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhLmdldFJlYWRlcigpLmNhblJlYWQoKSAmJiBiLmdldFJlYWRlcigpLmNhblJlYWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLmdldFJlYWRlcigpLmNhblJlYWQoKSAmJiAhYi5nZXRSZWFkZXIoKS5jYW5SZWFkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLmdldEV4Y2VwdGlvbnMoKS5zaXplID09PSAwICYmIGIuZ2V0RXhjZXB0aW9ucygpLnNpemUgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoYS5nZXRFeGNlcHRpb25zKCkuc2l6ZSAhPT0gMCAmJiBiLmdldEV4Y2VwdGlvbnMoKS5zaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwb3RlbnRpYWxzWzBdITsgLy8gRklYTUVcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgUGFyc2VSZXN1bHRzPFM+KGNvbnRleHRTb0Zhciwgb3JpZ2luYWxSZWFkZXIsIGVycm9ycyA9PSBudWxsID8gbmV3IE1hcCgpIDogZXJyb3JzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWxsVXNhZ2Uobm9kZTogQ29tbWFuZE5vZGU8Uz4sIHNvdXJjZTogUywgcmVzdHJpY3RlZDogYm9vbGVhbik6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgICAgIHRoaXMuX19nZXRBbGxVc2FnZShub2RlLCBzb3VyY2UsIHJlc3VsdCwgJycsIHJlc3RyaWN0ZWQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX19nZXRBbGxVc2FnZShub2RlOiBDb21tYW5kTm9kZTxTPiwgc291cmNlOiBTLCByZXN1bHQ6IHN0cmluZ1tdLCBwcmVmaXggPSAnJywgcmVzdHJpY3RlZDogYm9vbGVhbikge1xuICAgICAgICBpZiAocmVzdHJpY3RlZCAmJiAhbm9kZS5jYW5Vc2Uoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGUuZ2V0Q29tbWFuZCgpICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHByZWZpeCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5nZXRSZWRpcmVjdCgpICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZGlyZWN0ID0gbm9kZS5nZXRSZWRpcmVjdCgpID09PSB0aGlzLnJvb3QgPyAnLi4uJyA6ICctPiAnICsgbm9kZS5nZXRSZWRpcmVjdCgpPy5nZXRVc2FnZVRleHQoKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgIHByZWZpeC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBub2RlLmdldFVzYWdlVGV4dCgpICsgQVJHVU1FTlRfU0VQQVJBVE9SICsgcmVkaXJlY3RcbiAgICAgICAgICAgICAgICAgICAgOiBwcmVmaXggKyBBUkdVTUVOVF9TRVBBUkFUT1IgKyByZWRpcmVjdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLmdldENoaWxkcmVuQ291bnQoKSA+IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGNoaWxkIG9mIG5vZGUuZ2V0Q2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX19nZXRBbGxVc2FnZShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXgubGVuZ3RoID09PSAwID8gY2hpbGQuZ2V0VXNhZ2VUZXh0KCkgOiBwcmVmaXggKyBBUkdVTUVOVF9TRVBBUkFUT1IgKyBjaGlsZC5nZXRVc2FnZVRleHQoKSxcbiAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3RlZFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U21hcnRVc2FnZShub2RlOiBDb21tYW5kTm9kZTxTPiwgc291cmNlOiBTKTogTWFwPENvbW1hbmROb2RlPFM+LCBzdHJpbmc+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBNYXA8Q29tbWFuZE5vZGU8Uz4sIHN0cmluZz4oKTtcblxuICAgICAgICBsZXQgb3B0aW9uYWwgPSBub2RlLmdldENvbW1hbmQoKSAhPT0gbnVsbDtcbiAgICAgICAgZm9yIChsZXQgY2hpbGQgb2Ygbm9kZS5nZXRDaGlsZHJlbigpKSB7XG4gICAgICAgICAgICBsZXQgdXNhZ2UgPSB0aGlzLl9fZ2V0U21hcnRVc2FnZShjaGlsZCwgc291cmNlLCBvcHRpb25hbCwgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKHVzYWdlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnNldChjaGlsZCwgdXNhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9fZ2V0U21hcnRVc2FnZShub2RlOiBDb21tYW5kTm9kZTxTPiwgc291cmNlOiBTLCBvcHRpb25hbDogYm9vbGVhbiwgZGVlcDogYm9vbGVhbik6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBpZiAoIW5vZGUuY2FuVXNlKHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNlbGYgPSBvcHRpb25hbCA/IFVTQUdFX09QVElPTkFMX09QRU4gKyBub2RlLmdldFVzYWdlVGV4dCgpICsgVVNBR0VfT1BUSU9OQUxfQ0xPU0UgOiBub2RlLmdldFVzYWdlVGV4dCgpO1xuICAgICAgICBsZXQgY2hpbGRPcHRpb25hbCA9IG5vZGUuZ2V0Q29tbWFuZCgpICE9IG51bGw7XG4gICAgICAgIGxldCBvcGVuID0gY2hpbGRPcHRpb25hbCA/IFVTQUdFX09QVElPTkFMX09QRU4gOiBVU0FHRV9SRVFVSVJFRF9PUEVOO1xuICAgICAgICBsZXQgY2xvc2UgPSBjaGlsZE9wdGlvbmFsID8gVVNBR0VfT1BUSU9OQUxfQ0xPU0UgOiBVU0FHRV9SRVFVSVJFRF9DTE9TRTtcblxuICAgICAgICBpZiAoIWRlZXApIHtcbiAgICAgICAgICAgIGlmIChub2RlLmdldFJlZGlyZWN0KCkgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGxldCByZWRpcmVjdCA9IG5vZGUuZ2V0UmVkaXJlY3QoKSA9PSB0aGlzLnJvb3QgPyAnLi4uJyA6ICctPiAnICsgbm9kZS5nZXRSZWRpcmVjdCgpPy5nZXRVc2FnZVRleHQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZiArIEFSR1VNRU5UX1NFUEFSQVRPUiArIHJlZGlyZWN0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW46IENvbW1hbmROb2RlPFM+W10gPSBbLi4ubm9kZS5nZXRDaGlsZHJlbigpXS5maWx0ZXIoKGMpID0+IGMuY2FuVXNlKHNvdXJjZSkpO1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdXNhZ2UgPSB0aGlzLl9fZ2V0U21hcnRVc2FnZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuWzBdISwgLy8gRklYTUVcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkT3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE9wdGlvbmFsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1c2FnZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYgKyBBUkdVTUVOVF9TRVBBUkFUT1IgKyB1c2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGRVc2FnZSA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVzYWdlID0gdGhpcy5fX2dldFNtYXJ0VXNhZ2UoY2hpbGQsIHNvdXJjZSwgY2hpbGRPcHRpb25hbCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFVzYWdlLmFkZCh1c2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkVXNhZ2Uuc2l6ZSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVzYWdlID0gY2hpbGRVc2FnZS52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSR1VNRU5UX1NFUEFSQVRPUiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoaWxkT3B0aW9uYWwgPyBVU0FHRV9PUFRJT05BTF9PUEVOICsgdXNhZ2UgKyBVU0FHRV9PUFRJT05BTF9DTE9TRSA6IHVzYWdlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZFVzYWdlLnNpemUgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYnVpbGRlciA9IG9wZW47XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIgKz0gVVNBR0VfT1I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIgKz0gY2hpbGQuZ2V0VXNhZ2VUZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyICs9IGNsb3NlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmICsgQVJHVU1FTlRfU0VQQVJBVE9SICsgYnVpbGRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q29tcGxldGlvblN1Z2dlc3Rpb25zKFxuICAgICAgICBwYXJzZTogUGFyc2VSZXN1bHRzPFM+LFxuICAgICAgICBjdXJzb3IgPSBwYXJzZS5nZXRSZWFkZXIoKS5nZXRUb3RhbExlbmd0aCgpXG4gICAgKTogUHJvbWlzZTxTdWdnZXN0aW9ucz4ge1xuICAgICAgICBsZXQgY29udGV4dDogQ29tbWFuZENvbnRleHRCdWlsZGVyPFM+ID0gcGFyc2UuZ2V0Q29udGV4dCgpO1xuICAgICAgICBsZXQgbm9kZUJlZm9yZUN1cnNvcjogU3VnZ2VzdGlvbkNvbnRleHQ8Uz4gPSBjb250ZXh0LmZpbmRTdWdnZXN0aW9uQ29udGV4dChjdXJzb3IpO1xuICAgICAgICBsZXQgcGFyZW50OiBDb21tYW5kTm9kZTxTPiA9IG5vZGVCZWZvcmVDdXJzb3IucGFyZW50O1xuICAgICAgICBsZXQgc3RhcnQgPSBNYXRoLm1pbihub2RlQmVmb3JlQ3Vyc29yLnN0YXJ0UG9zLCBjdXJzb3IpO1xuICAgICAgICBsZXQgZnVsbElucHV0ID0gcGFyc2UuZ2V0UmVhZGVyKCkuZ2V0U3RyaW5nKCk7XG4gICAgICAgIGxldCB0cnVuY2F0ZWRJbnB1dCA9IGZ1bGxJbnB1dC5zdWJzdHJpbmcoMCwgY3Vyc29yKTtcbiAgICAgICAgbGV0IGZ1dHVyZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgbm9kZSBvZiBwYXJlbnQuZ2V0Q2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgbGV0IGZ1dHVyZSA9IGF3YWl0IFN1Z2dlc3Rpb25zLmVtcHR5KCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZ1dHVyZSA9IGF3YWl0IG5vZGUubGlzdFN1Z2dlc3Rpb25zKFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmJ1aWxkKHRydW5jYXRlZElucHV0KSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IFN1Z2dlc3Rpb25zQnVpbGRlcih0cnVuY2F0ZWRJbnB1dCwgc3RhcnQpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGlnbm9yZWQpIHt9XG4gICAgICAgICAgICBmdXR1cmVzLnB1c2goZnV0dXJlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoU3VnZ2VzdGlvbnMubWVyZ2UoZnVsbElucHV0LCBmdXR1cmVzKSEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSb290KCk6IFJvb3RDb21tYW5kTm9kZTxTPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3Q7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhdGgodGFyZ2V0OiBDb21tYW5kTm9kZTxTPik6IHN0cmluZ1tdIHtcbiAgICAgICAgbGV0IG5vZGVzOiBBcnJheTxBcnJheTxDb21tYW5kTm9kZTxTPj4+ID0gW107XG4gICAgICAgIHRoaXMuYWRkUGF0aHModGhpcy5yb290LCBub2RlcywgW10pO1xuICAgICAgICBmb3IgKGxldCBsaXN0IG9mIG5vZGVzKSB7XG4gICAgICAgICAgICBpZiAobGlzdFtsaXN0Lmxlbmd0aCAtIDFdID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgbm9kZSBvZiBsaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlICE9PSB0aGlzLnJvb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5vZGUuZ2V0TmFtZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluZE5vZGUocGF0aDogc3RyaW5nW10pOiBDb21tYW5kTm9kZTxTPiB8IG51bGwge1xuICAgICAgICBsZXQgbm9kZTogQ29tbWFuZE5vZGU8Uz4gfCB1bmRlZmluZWQgPSB0aGlzLnJvb3Q7XG4gICAgICAgIGZvciAobGV0IG5hbWUgb2YgcGF0aCkge1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUuZ2V0Q2hpbGQobmFtZSk7XG4gICAgICAgICAgICBpZiAoIW5vZGUpIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kQW1iaWd1aXRpZXMoY29uc3VtZXI6IEFtYmlndWl0eUNvbnN1bWVyPFM+LCBjb250ZXh0OiBhbnkpIHtcbiAgICAgICAgdGhpcy5yb290LmZpbmRBbWJpZ3VpdGllcyhjb25zdW1lciwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRQYXRocyhub2RlOiBDb21tYW5kTm9kZTxTPiwgcmVzdWx0OiBBcnJheTxBcnJheTxDb21tYW5kTm9kZTxTPj4+LCBwYXJlbnRzOiBBcnJheTxDb21tYW5kTm9kZTxTPj4pOiB2b2lkIHtcbiAgICAgICAgbGV0IGN1cnJlbnQ6IEFycmF5PENvbW1hbmROb2RlPFM+PiA9IFtdO1xuICAgICAgICBjdXJyZW50LnB1c2goLi4ucGFyZW50cyk7XG4gICAgICAgIGN1cnJlbnQucHVzaChub2RlKTtcbiAgICAgICAgcmVzdWx0LnB1c2goY3VycmVudCk7XG4gICAgICAgIGZvciAobGV0IGNoaWxkIG9mIG5vZGUuZ2V0Q2hpbGRyZW4oKSkgdGhpcy5hZGRQYXRocyhjaGlsZCwgcmVzdWx0LCBjdXJyZW50KTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBZUEsSUFBTSxxQkFBcUI7QUFDM0IsSUFBTSxzQkFBc0I7QUFDNUIsSUFBTSx1QkFBdUI7QUFDN0IsSUFBTSxzQkFBc0I7QUFDNUIsSUFBTSx1QkFBdUI7QUFDN0IsSUFBTSxXQUFXO0FBRWpCLElBQXFCLG9CQUFyQixNQUEwQztDQUN0QztDQUVBLFdBQXNDLEVBQ2xDLG9CQUFvQixDQUFDLEVBQ3pCO0NBRUEsWUFBbUIsT0FBa0MsTUFBTTtFQUN2RCxLQUFLLE9BQU8sUUFBUSxJQUFJLGdCQUFtQjtDQUMvQztDQUVBLFNBQWdCLFNBQTJEO0VBQ3ZFLElBQUksUUFBUSxRQUFRLE1BQU07RUFDMUIsS0FBSyxLQUFLLFNBQVMsS0FBSztFQUN4QixPQUFPO0NBQ1g7Q0FFQSxZQUFtQixVQUE2QjtFQUM1QyxLQUFLLFdBQVc7Q0FDcEI7Q0FFQSxRQUNJLE9BQ0EsU0FBbUIsTUFDZ0I7RUFDbkMsSUFBSSxPQUFPLFVBQVUsVUFBVSxRQUFRLElBQUksYUFBYSxLQUFLO0VBRTdELElBQUk7RUFDSixJQUFJLGlCQUFpQixjQUNiO09BQUEsUUFBUSxRQUFRLEtBQUssTUFBTSxPQUFPLE1BQU07RUFBQSxPQUN6QyxRQUFRO0VBRWYsSUFBSSxNQUFNLFVBQVUsQ0FBQyxDQUFDLFFBQVEsR0FBRztHQUM3QixJQUFJLE1BQU0sY0FBYyxDQUFDLENBQUMsU0FBUyxHQUMvQixNQUFN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
|
|
@@ -95,14 +95,15 @@ var StringReader = class StringReader {
|
|
|
95
95
|
let escaped = false;
|
|
96
96
|
while (this.canRead()) {
|
|
97
97
|
let c = this.read();
|
|
98
|
-
if (escaped)
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
98
|
+
if (escaped) {
|
|
99
|
+
if (c == SYNTAX_SINGLE_QUOTE || c == SYNTAX_DOUBLE_QUOTE || c == SYNTAX_ESCAPE) {
|
|
100
|
+
result += c;
|
|
101
|
+
escaped = false;
|
|
102
|
+
} else {
|
|
103
|
+
this.setCursor(this.getCursor() - 1);
|
|
104
|
+
throw require_exceptions_CommandSyntaxException.default.BUILT_IN_EXCEPTIONS.readerInvalidEscape().createWithContext(this, c);
|
|
105
|
+
}
|
|
106
|
+
} else if (c == SYNTAX_ESCAPE) escaped = true;
|
|
106
107
|
else if (c == startQuote) return result;
|
|
107
108
|
else result += c;
|
|
108
109
|
}
|
|
@@ -131,4 +132,4 @@ var StringReader = class StringReader {
|
|
|
131
132
|
//#endregion
|
|
132
133
|
exports.default = StringReader;
|
|
133
134
|
|
|
134
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaW5nUmVhZGVyLmNqcy5janMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL1N0cmluZ1JlYWRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBJbW11dGFibGVTdHJpbmdSZWFkZXIgZnJvbSAnLi9JbW11dGFibGVTdHJpbmdSZWFkZXInO1xuaW1wb3J0IENvbW1hbmRTeW50YXhFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb25zL0NvbW1hbmRTeW50YXhFeGNlcHRpb24nO1xuXG5jb25zdCBTWU5UQVhfRVNDQVBFID0gJ1xcXFwnO1xuY29uc3QgU1lOVEFYX0RPVUJMRV9RVU9URSA9ICdcIic7XG5jb25zdCBTWU5UQVhfU0lOR0xFX1FVT1RFID0gYCdgO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdSZWFkZXIgaW1wbGVtZW50cyBJbW11dGFibGVTdHJpbmdSZWFkZXIge1xuICAgIHByaXZhdGUgc3RyaW5nOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBjdXJzb3I6IG51bWJlciA9IDA7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3Iob3RoZXI6IHN0cmluZyB8IFN0cmluZ1JlYWRlcikge1xuICAgICAgICBpZiAodHlwZW9mIG90aGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5zdHJpbmcgPSBvdGhlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RyaW5nID0gb3RoZXIuc3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3IgPSBvdGhlci5jdXJzb3I7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmluZztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Q3Vyc29yKGN1cnNvcjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuY3Vyc29yID0gY3Vyc29yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZW1haW5pbmdMZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nLmxlbmd0aCAtIHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUb3RhbExlbmd0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmcubGVuZ3RoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDdXJzb3IoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZWFkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmluZy5zdWJzdHJpbmcoMCwgdGhpcy5jdXJzb3IpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZW1haW5pbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nLnN1YnN0cmluZyh0aGlzLmN1cnNvcik7XG4gICAgfVxuXG4gICAgcHVibGljIGNhblJlYWQobGVuZ3RoID0gMSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJzb3IgKyBsZW5ndGggPD0gdGhpcy5zdHJpbmcubGVuZ3RoO1xuICAgIH1cblxuICAgIHB1YmxpYyBwZWVrKG9mZnNldDogbnVtYmVyID0gMCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5jdXJzb3IgKyBvZmZzZXQpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5jdXJzb3IrKyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNraXAoKSB7XG4gICAgICAgIHRoaXMuY3Vyc29yKys7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBpc0FsbG93ZWROdW1iZXIoYzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHx8IGMgPT0gJy4nIHx8IGMgPT0gJy0nIHx8IGMgPT0gJysnIHx8IGMgPT0gJ2UnIHx8IGMgPT0gJ0UnO1xuICAgIH1cblxuICAgIHB1YmxpYyBza2lwV2hpdGVzcGFjZSgpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuY2FuUmVhZCgpICYmIC9cXHMvLnRlc3QodGhpcy5wZWVrKCkpKSB7XG4gICAgICAgICAgICB0aGlzLnNraXAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWFkSW50KCk6IG51bWJlciB7XG4gICAgICAgIGxldCBzdGFydCA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB3aGlsZSAodGhpcy5jYW5SZWFkKCkgJiYgU3RyaW5nUmVhZGVyLmlzQWxsb3dlZE51bWJlcih0aGlzLnBlZWsoKSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2tpcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG51bWJlciA9IHRoaXMuc3RyaW5nLnN1YnN0cmluZyhzdGFydCwgdGhpcy5jdXJzb3IpO1xuICAgICAgICBpZiAobnVtYmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgQ29tbWFuZFN5bnRheEV4Y2VwdGlvbi5CVUlMVF9JTl9FWENFUFRJT05TLnJlYWRlckV4cGVjdGVkSW50KCkuY3JlYXRlV2l0aENvbnRleHQodGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUZsb2F0KG51bWJlcik7XG4gICAgICAgIGlmIChpc05hTihyZXN1bHQpIHx8IHJlc3VsdCAhPT0gTWF0aC5yb3VuZChyZXN1bHQpKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnNvciA9IHN0YXJ0O1xuICAgICAgICAgICAgdGhyb3cgQ29tbWFuZFN5bnRheEV4Y2VwdGlvbi5CVUlMVF9JTl9FWENFUFRJT05TLnJlYWRlckludmFsaWRJbnQoKS5jcmVhdGVXaXRoQ29udGV4dCh0aGlzLCBudW1iZXIpO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVhZEZsb2F0KCk6IG51bWJlciB7XG4gICAgICAgIGxldCBzdGFydCA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB3aGlsZSAodGhpcy5jYW5SZWFkKCkgJiYgU3RyaW5nUmVhZGVyLmlzQWxsb3dlZE51bWJlcih0aGlzLnBlZWsoKSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2tpcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG51bWJlciA9IHRoaXMuc3RyaW5nLnN1YnN0cmluZyhzdGFydCwgdGhpcy5jdXJzb3IpO1xuICAgICAgICBpZiAobnVtYmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgQ29tbWFuZFN5bnRheEV4Y2VwdGlvbi5CVUlMVF9JTl9FWENFUFRJT05TLnJlYWRlckV4cGVjdGVkRmxvYXQoKS5jcmVhdGVXaXRoQ29udGV4dCh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlRmxvYXQobnVtYmVyKTtcbiAgICAgICAgaWYgKGlzTmFOKHJlc3VsdCkgfHwgcmVzdWx0ICE9PSBOdW1iZXIobnVtYmVyKSkge1xuICAgICAgICAgICAgdGhpcy5jdXJzb3IgPSBzdGFydDtcbiAgICAgICAgICAgIHRocm93IENvbW1hbmRTeW50YXhFeGNlcHRpb24uQlVJTFRfSU5fRVhDRVBUSU9OUy5yZWFkZXJJbnZhbGlkRmxvYXQoKS5jcmVhdGVXaXRoQ29udGV4dCh0aGlzLCBudW1iZXIpO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGlzQWxsb3dlZEluVW5xdW90ZWRTdHJpbmcoYzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHx8XG4gICAgICAgICAgICAoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8XG4gICAgICAgICAgICAoYyA+PSAnYScgJiYgYyA8PSAneicpIHx8XG4gICAgICAgICAgICBjID09ICdfJyB8fFxuICAgICAgICAgICAgYyA9PSAnLScgfHxcbiAgICAgICAgICAgIGMgPT0gJy4nIHx8XG4gICAgICAgICAgICBjID09ICcrJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkVW5xdW90ZWRTdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHdoaWxlICh0aGlzLmNhblJlYWQoKSAmJiBTdHJpbmdSZWFkZXIuaXNBbGxvd2VkSW5VbnF1b3RlZFN0cmluZyh0aGlzLnBlZWsoKSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2tpcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nLnN1YnN0cmluZyhzdGFydCwgdGhpcy5jdXJzb3IpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkUXVvdGVkU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWFkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBlZWsoKSAhPSBTWU5UQVhfU0lOR0xFX1FVT1RFICYmIHRoaXMucGVlaygpICE9IFNZTlRBWF9ET1VCTEVfUVVPVEUpIHtcbiAgICAgICAgICAgIHRocm93IENvbW1hbmRTeW50YXhFeGNlcHRpb24uQlVJTFRfSU5fRVhDRVBUSU9OUy5yZWFkZXJFeHBlY3RlZFN0YXJ0T2ZRdW90ZSgpLmNyZWF0ZVdpdGhDb250ZXh0KHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhcnRRdW90ZSA9IHRoaXMucmVhZCgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGxldCBlc2NhcGVkID0gZmFsc2U7XG4gICAgICAgIHdoaWxlICh0aGlzLmNhblJlYWQoKSkge1xuICAgICAgICAgICAgbGV0IGMgPSB0aGlzLnJlYWQoKTtcbiAgICAgICAgICAgIGlmIChlc2NhcGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGMgPT0gU1lOVEFYX1NJTkdMRV9RVU9URSB8fCBjID09IFNZTlRBWF9ET1VCTEVfUVVPVEUgfHwgYyA9PSBTWU5UQVhfRVNDQVBFKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjO1xuICAgICAgICAgICAgICAgICAgICBlc2NhcGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDdXJzb3IodGhpcy5nZXRDdXJzb3IoKSAtIDEpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBDb21tYW5kU3ludGF4RXhjZXB0aW9uLkJVSUxUX0lOX0VYQ0VQVElPTlMucmVhZGVySW52YWxpZEVzY2FwZSgpLmNyZWF0ZVdpdGhDb250ZXh0KHRoaXMsIGMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSBTWU5UQVhfRVNDQVBFKSB7XG4gICAgICAgICAgICAgICAgZXNjYXBlZCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gc3RhcnRRdW90ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgQ29tbWFuZFN5bnRheEV4Y2VwdGlvbi5CVUlMVF9JTl9FWENFUFRJT05TLnJlYWRlckV4cGVjdGVkRW5kT2ZRdW90ZSgpLmNyZWF0ZVdpdGhDb250ZXh0KHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmNhblJlYWQoKSAmJiAodGhpcy5wZWVrKCkgPT09IFNZTlRBWF9TSU5HTEVfUVVPVEUgfHwgdGhpcy5wZWVrKCkgPT09IFNZTlRBWF9ET1VCTEVfUVVPVEUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWFkUXVvdGVkU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWFkVW5xdW90ZWRTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWFkQm9vbGVhbigpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMucmVhZFN0cmluZygpO1xuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBDb21tYW5kU3ludGF4RXhjZXB0aW9uLkJVSUxUX0lOX0VYQ0VQVElPTlMucmVhZGVyRXhwZWN0ZWRCb29sKCkuY3JlYXRlV2l0aENvbnRleHQodGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gc3RhcnQ7XG4gICAgICAgICAgICB0aHJvdyBDb21tYW5kU3ludGF4RXhjZXB0aW9uLkJVSUxUX0lOX0VYQ0VQVElPTlMucmVhZGVySW52YWxpZEJvb2woKS5jcmVhdGVXaXRoQ29udGV4dCh0aGlzLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZXhwZWN0KGM6IHN0cmluZykge1xuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZCgpIHx8IHRoaXMucGVlaygpICE9PSBjKSB7XG4gICAgICAgICAgICB0aHJvdyBDb21tYW5kU3ludGF4RXhjZXB0aW9uLkJVSUxUX0lOX0VYQ0VQVElPTlMucmVhZGVyRXhwZWN0ZWRTeW1ib2woKS5jcmVhdGVXaXRoQ29udGV4dCh0aGlzLCBjKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2tpcCgpO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdBLElBQU0sZ0JBQWdCO0FBQ3RCLElBQU0sc0JBQXNCO0FBQzVCLElBQU0sc0JBQXNCO0FBRTVCLElBQXFCLGVBQXJCLE1BQXFCLGFBQThDO0NBQy9EO0NBQ0EsU0FBeUI7Q0FFekIsWUFBbUIsT0FBOEI7RUFDN0MsSUFBSSxPQUFPLFVBQVUsVUFDakIsS0FBSyxTQUFTO09BQ1g7R0FDSCxLQUFLLFNBQVMsTUFBTTtHQUNwQixLQUFLLFNBQVMsTUFBTTtFQUN4QjtDQUNKO0NBRUEsWUFBMkI7RUFDdkIsT0FBTyxLQUFLO0NBQ2hCO0NBRUEsVUFBaUIsUUFBZ0I7RUFDN0IsS0FBSyxTQUFTO0NBQ2xCO0NBRUEscUJBQW9DO0VBQ2hDLE9BQU8sS0FBSyxPQUFPLFNBQVMsS0FBSztDQUNyQztDQUVBLGlCQUFnQztFQUM1QixPQUFPLEtBQUssT0FBTztDQUN2QjtDQUVBLFlBQTJCO0VBQ3ZCLE9BQU8sS0FBSztDQUNoQjtDQUVBLFVBQXlCO0VBQ3JCLE9BQU8sS0FBSyxPQUFPLFVBQVUsR0FBRyxLQUFLLE1BQU07Q0FDL0M7Q0FFQSxlQUE4QjtFQUMxQixPQUFPLEtBQUssT0FBTyxVQUFVLEtBQUssTUFBTTtDQUM1QztDQUVBLFFBQWUsU0FBUyxHQUFZO0VBQ2hDLE9BQU8sS0FBSyxTQUFTLFVBQVUsS0FBSyxPQUFPO0NBQy9DO0NBRUEsS0FBWSxTQUFpQixHQUFXO0VBQ3BDLE9BQU8sS0FBSyxPQUFPLE9BQU8sS0FBSyxTQUFTLE1BQU07Q0FDbEQ7Q0FFQSxPQUFzQjtFQUNsQixPQUFPLEtBQUssT0FBTyxPQUFPLEtBQUssUUFBUTtDQUMzQztDQUVBLE9BQWM7RUFDVixLQUFLO0NBQ1Q7Q0FFQSxPQUFjLGdCQUFnQixHQUFvQjtFQUM5QyxPQUFRLEtBQUssT0FBTyxLQUFLLE9BQVEsS0FBSyxPQUFPLEtBQUssT0FBTyxLQUFL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
|
|
135
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaW5nUmVhZGVyLmNqcy5janMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL1N0cmluZ1JlYWRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBJbW11dGFibGVTdHJpbmdSZWFkZXIgZnJvbSAnLi9JbW11dGFibGVTdHJpbmdSZWFkZXInO1xuaW1wb3J0IENvbW1hbmRTeW50YXhFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb25zL0NvbW1hbmRTeW50YXhFeGNlcHRpb24nO1xuXG5jb25zdCBTWU5UQVhfRVNDQVBFID0gJ1xcXFwnO1xuY29uc3QgU1lOVEFYX0RPVUJMRV9RVU9URSA9ICdcIic7XG5jb25zdCBTWU5UQVhfU0lOR0xFX1FVT1RFID0gYCdgO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdSZWFkZXIgaW1wbGVtZW50cyBJbW11dGFibGVTdHJpbmdSZWFkZXIge1xuICAgIHByaXZhdGUgc3RyaW5nOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBjdXJzb3I6IG51bWJlciA9IDA7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3Iob3RoZXI6IHN0cmluZyB8IFN0cmluZ1JlYWRlcikge1xuICAgICAgICBpZiAodHlwZW9mIG90aGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5zdHJpbmcgPSBvdGhlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RyaW5nID0gb3RoZXIuc3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3IgPSBvdGhlci5jdXJzb3I7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmluZztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Q3Vyc29yKGN1cnNvcjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuY3Vyc29yID0gY3Vyc29yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZW1haW5pbmdMZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nLmxlbmd0aCAtIHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUb3RhbExlbmd0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmcubGVuZ3RoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDdXJzb3IoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZWFkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmluZy5zdWJzdHJpbmcoMCwgdGhpcy5jdXJzb3IpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZW1haW5pbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nLnN1YnN0cmluZyh0aGlzLmN1cnNvcik7XG4gICAgfVxuXG4gICAgcHVibGljIGNhblJlYWQobGVuZ3RoID0gMSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJzb3IgKyBsZW5ndGggPD0gdGhpcy5zdHJpbmcubGVuZ3RoO1xuICAgIH1cblxuICAgIHB1YmxpYyBwZWVrKG9mZnNldDogbnVtYmVyID0gMCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5jdXJzb3IgKyBvZmZzZXQpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5jdXJzb3IrKyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNraXAoKSB7XG4gICAgICAgIHRoaXMuY3Vyc29yKys7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBpc0FsbG93ZWROdW1iZXIoYzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHx8IGMgPT0gJy4nIHx8IGMgPT0gJy0nIHx8IGMgPT0gJysnIHx8IGMgPT0gJ2UnIHx8IGMgPT0gJ0UnO1xuICAgIH1cblxuICAgIHB1YmxpYyBza2lwV2hpdGVzcGFjZSgpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuY2FuUmVhZCgpICYmIC9cXHMvLnRlc3QodGhpcy5wZWVrKCkpKSB7XG4gICAgICAgICAgICB0aGlzLnNraXAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWFkSW50KCk6IG51bWJlciB7XG4gICAgICAgIGxldCBzdGFydCA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB3aGlsZSAodGhpcy5jYW5SZWFkKCkgJiYgU3RyaW5nUmVhZGVyLmlzQWxsb3dlZE51bWJlcih0aGlzLnBlZWsoKSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2tpcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG51bWJlciA9IHRoaXMuc3RyaW5nLnN1YnN0cmluZyhzdGFydCwgdGhpcy5jdXJzb3IpO1xuICAgICAgICBpZiAobnVtYmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgQ29tbWFuZFN5bnRheEV4Y2VwdGlvbi5CVUlMVF9JTl9FWENFUFRJT05TLnJlYWRlckV4cGVjdGVkSW50KCkuY3JlYXRlV2l0aENvbnRleHQodGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUZsb2F0KG51bWJlcik7XG4gICAgICAgIGlmIChpc05hTihyZXN1bHQpIHx8IHJlc3VsdCAhPT0gTWF0aC5yb3VuZChyZXN1bHQpKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnNvciA9IHN0YXJ0O1xuICAgICAgICAgICAgdGhyb3cgQ29tbWFuZFN5bnRheEV4Y2VwdGlvbi5CVUlMVF9JTl9FWENFUFRJT05TLnJlYWRlckludmFsaWRJbnQoKS5jcmVhdGVXaXRoQ29udGV4dCh0aGlzLCBudW1iZXIpO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVhZEZsb2F0KCk6IG51bWJlciB7XG4gICAgICAgIGxldCBzdGFydCA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB3aGlsZSAodGhpcy5jYW5SZWFkKCkgJiYgU3RyaW5nUmVhZGVyLmlzQWxsb3dlZE51bWJlcih0aGlzLnBlZWsoKSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2tpcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG51bWJlciA9IHRoaXMuc3RyaW5nLnN1YnN0cmluZyhzdGFydCwgdGhpcy5jdXJzb3IpO1xuICAgICAgICBpZiAobnVtYmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgQ29tbWFuZFN5bnRheEV4Y2VwdGlvbi5CVUlMVF9JTl9FWENFUFRJT05TLnJlYWRlckV4cGVjdGVkRmxvYXQoKS5jcmVhdGVXaXRoQ29udGV4dCh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlRmxvYXQobnVtYmVyKTtcbiAgICAgICAgaWYgKGlzTmFOKHJlc3VsdCkgfHwgcmVzdWx0ICE9PSBOdW1iZXIobnVtYmVyKSkge1xuICAgICAgICAgICAgdGhpcy5jdXJzb3IgPSBzdGFydDtcbiAgICAgICAgICAgIHRocm93IENvbW1hbmRTeW50YXhFeGNlcHRpb24uQlVJTFRfSU5fRVhDRVBUSU9OUy5yZWFkZXJJbnZhbGlkRmxvYXQoKS5jcmVhdGVXaXRoQ29udGV4dCh0aGlzLCBudW1iZXIpO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGlzQWxsb3dlZEluVW5xdW90ZWRTdHJpbmcoYzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHx8XG4gICAgICAgICAgICAoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8XG4gICAgICAgICAgICAoYyA+PSAnYScgJiYgYyA8PSAneicpIHx8XG4gICAgICAgICAgICBjID09ICdfJyB8fFxuICAgICAgICAgICAgYyA9PSAnLScgfHxcbiAgICAgICAgICAgIGMgPT0gJy4nIHx8XG4gICAgICAgICAgICBjID09ICcrJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkVW5xdW90ZWRTdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHdoaWxlICh0aGlzLmNhblJlYWQoKSAmJiBTdHJpbmdSZWFkZXIuaXNBbGxvd2VkSW5VbnF1b3RlZFN0cmluZyh0aGlzLnBlZWsoKSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2tpcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nLnN1YnN0cmluZyhzdGFydCwgdGhpcy5jdXJzb3IpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkUXVvdGVkU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWFkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBlZWsoKSAhPSBTWU5UQVhfU0lOR0xFX1FVT1RFICYmIHRoaXMucGVlaygpICE9IFNZTlRBWF9ET1VCTEVfUVVPVEUpIHtcbiAgICAgICAgICAgIHRocm93IENvbW1hbmRTeW50YXhFeGNlcHRpb24uQlVJTFRfSU5fRVhDRVBUSU9OUy5yZWFkZXJFeHBlY3RlZFN0YXJ0T2ZRdW90ZSgpLmNyZWF0ZVdpdGhDb250ZXh0KHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhcnRRdW90ZSA9IHRoaXMucmVhZCgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGxldCBlc2NhcGVkID0gZmFsc2U7XG4gICAgICAgIHdoaWxlICh0aGlzLmNhblJlYWQoKSkge1xuICAgICAgICAgICAgbGV0IGMgPSB0aGlzLnJlYWQoKTtcbiAgICAgICAgICAgIGlmIChlc2NhcGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGMgPT0gU1lOVEFYX1NJTkdMRV9RVU9URSB8fCBjID09IFNZTlRBWF9ET1VCTEVfUVVPVEUgfHwgYyA9PSBTWU5UQVhfRVNDQVBFKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjO1xuICAgICAgICAgICAgICAgICAgICBlc2NhcGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDdXJzb3IodGhpcy5nZXRDdXJzb3IoKSAtIDEpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBDb21tYW5kU3ludGF4RXhjZXB0aW9uLkJVSUxUX0lOX0VYQ0VQVElPTlMucmVhZGVySW52YWxpZEVzY2FwZSgpLmNyZWF0ZVdpdGhDb250ZXh0KHRoaXMsIGMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSBTWU5UQVhfRVNDQVBFKSB7XG4gICAgICAgICAgICAgICAgZXNjYXBlZCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gc3RhcnRRdW90ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgQ29tbWFuZFN5bnRheEV4Y2VwdGlvbi5CVUlMVF9JTl9FWENFUFRJT05TLnJlYWRlckV4cGVjdGVkRW5kT2ZRdW90ZSgpLmNyZWF0ZVdpdGhDb250ZXh0KHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmNhblJlYWQoKSAmJiAodGhpcy5wZWVrKCkgPT09IFNZTlRBWF9TSU5HTEVfUVVPVEUgfHwgdGhpcy5wZWVrKCkgPT09IFNZTlRBWF9ET1VCTEVfUVVPVEUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWFkUXVvdGVkU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWFkVW5xdW90ZWRTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWFkQm9vbGVhbigpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMucmVhZFN0cmluZygpO1xuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBDb21tYW5kU3ludGF4RXhjZXB0aW9uLkJVSUxUX0lOX0VYQ0VQVElPTlMucmVhZGVyRXhwZWN0ZWRCb29sKCkuY3JlYXRlV2l0aENvbnRleHQodGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gc3RhcnQ7XG4gICAgICAgICAgICB0aHJvdyBDb21tYW5kU3ludGF4RXhjZXB0aW9uLkJVSUxUX0lOX0VYQ0VQVElPTlMucmVhZGVySW52YWxpZEJvb2woKS5jcmVhdGVXaXRoQ29udGV4dCh0aGlzLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZXhwZWN0KGM6IHN0cmluZykge1xuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZCgpIHx8IHRoaXMucGVlaygpICE9PSBjKSB7XG4gICAgICAgICAgICB0aHJvdyBDb21tYW5kU3ludGF4RXhjZXB0aW9uLkJVSUxUX0lOX0VYQ0VQVElPTlMucmVhZGVyRXhwZWN0ZWRTeW1ib2woKS5jcmVhdGVXaXRoQ29udGV4dCh0aGlzLCBjKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2tpcCgpO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdBLElBQU0sZ0JBQWdCO0FBQ3RCLElBQU0sc0JBQXNCO0FBQzVCLElBQU0sc0JBQXNCO0FBRTVCLElBQXFCLGVBQXJCLE1BQXFCLGFBQThDO0NBQy9EO0NBQ0EsU0FBeUI7Q0FFekIsWUFBbUIsT0FBOEI7RUFDN0MsSUFBSSxPQUFPLFVBQVUsVUFDakIsS0FBSyxTQUFTO09BQ1g7R0FDSCxLQUFLLFNBQVMsTUFBTTtHQUNwQixLQUFLLFNBQVMsTUFBTTtFQUN4QjtDQUNKO0NBRUEsWUFBMkI7RUFDdkIsT0FBTyxLQUFLO0NBQ2hCO0NBRUEsVUFBaUIsUUFBZ0I7RUFDN0IsS0FBSyxTQUFTO0NBQ2xCO0NBRUEscUJBQW9DO0VBQ2hDLE9BQU8sS0FBSyxPQUFPLFNBQVMsS0FBSztDQUNyQztDQUVBLGlCQUFnQztFQUM1QixPQUFPLEtBQUssT0FBTztDQUN2QjtDQUVBLFlBQTJCO0VBQ3ZCLE9BQU8sS0FBSztDQUNoQjtDQUVBLFVBQXlCO0VBQ3JCLE9BQU8sS0FBSyxPQUFPLFVBQVUsR0FBRyxLQUFLLE1BQU07Q0FDL0M7Q0FFQSxlQUE4QjtFQUMxQixPQUFPLEtBQUssT0FBTyxVQUFVLEtBQUssTUFBTTtDQUM1QztDQUVBLFFBQWUsU0FBUyxHQUFZO0VBQ2hDLE9BQU8sS0FBSyxTQUFTLFVBQVUsS0FBSyxPQUFPO0NBQy9DO0NBRUEsS0FBWSxTQUFpQixHQUFXO0VBQ3BDLE9BQU8sS0FBSyxPQUFPLE9BQU8sS0FBSyxTQUFTLE1BQU07Q0FDbEQ7Q0FFQSxPQUFzQjtFQUNsQixPQUFPLEtBQUssT0FBTyxPQUFPLEtBQUssUUFBUTtDQUMzQztDQUVBLE9BQWM7RUFDVixLQUFLO0NBQ1Q7Q0FFQSxPQUFjLGdCQUFnQixHQUFvQjtFQUM5QyxPQUFRLEtBQUssT0FBTyxLQUFLLE9BQVEsS0FBSyxPQUFPLEtBQUssT0FBTyxLQUFL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
|