semantifold 0.9.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- package/bin/semantifold.js +6 -0
- package/build/bin/semantifold.d.ts +3 -0
- package/build/bin/semantifold.d.ts.map +1 -0
- package/build/bin/semantifold.js +5 -0
- package/build/index.d.ts +8 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +9 -1
- package/build/src/artifact-path.d.ts +16 -0
- package/build/src/artifact-path.d.ts.map +1 -1
- package/build/src/artifact-path.js +29 -3
- package/build/src/backends/c-check.d.ts +7 -0
- package/build/src/backends/c-check.d.ts.map +1 -0
- package/build/src/backends/c-check.js +65 -0
- package/build/src/backends/check-plan.d.ts +96 -0
- package/build/src/backends/check-plan.d.ts.map +1 -0
- package/build/src/backends/check-plan.js +135 -0
- package/build/src/backends/cpp-check.d.ts +7 -0
- package/build/src/backends/cpp-check.d.ts.map +1 -0
- package/build/src/backends/cpp-check.js +59 -0
- package/build/src/backends/csharp-check.d.ts +7 -0
- package/build/src/backends/csharp-check.d.ts.map +1 -0
- package/build/src/backends/csharp-check.js +125 -0
- package/build/src/backends/csharp.d.ts +1 -0
- package/build/src/backends/csharp.d.ts.map +1 -1
- package/build/src/backends/csharp.js +5 -4
- package/build/src/backends/dart-check.d.ts +7 -0
- package/build/src/backends/dart-check.d.ts.map +1 -0
- package/build/src/backends/dart-check.js +103 -0
- package/build/src/backends/dart.d.ts +2 -0
- package/build/src/backends/dart.d.ts.map +1 -1
- package/build/src/backends/dart.js +5 -5
- package/build/src/backends/go-check.d.ts +7 -0
- package/build/src/backends/go-check.d.ts.map +1 -0
- package/build/src/backends/go-check.js +77 -0
- package/build/src/backends/go.d.ts +1 -0
- package/build/src/backends/go.d.ts.map +1 -1
- package/build/src/backends/go.js +3 -3
- package/build/src/backends/java-check.d.ts +21 -0
- package/build/src/backends/java-check.d.ts.map +1 -0
- package/build/src/backends/java-check.js +73 -0
- package/build/src/backends/javascript-check.d.ts +7 -0
- package/build/src/backends/javascript-check.d.ts.map +1 -0
- package/build/src/backends/javascript-check.js +29 -0
- package/build/src/backends/kotlin-check.d.ts +7 -0
- package/build/src/backends/kotlin-check.d.ts.map +1 -0
- package/build/src/backends/kotlin-check.js +31 -0
- package/build/src/backends/kotlin.d.ts +1 -1
- package/build/src/backends/kotlin.js +2 -2
- package/build/src/backends/php-check.d.ts +7 -0
- package/build/src/backends/php-check.d.ts.map +1 -0
- package/build/src/backends/php-check.js +21 -0
- package/build/src/backends/program.d.ts +7 -0
- package/build/src/backends/program.d.ts.map +1 -1
- package/build/src/backends/program.js +16 -1
- package/build/src/backends/python-check.d.ts +7 -0
- package/build/src/backends/python-check.d.ts.map +1 -0
- package/build/src/backends/python-check.js +28 -0
- package/build/src/backends/ruby-check.d.ts +7 -0
- package/build/src/backends/ruby-check.d.ts.map +1 -0
- package/build/src/backends/ruby-check.js +21 -0
- package/build/src/backends/rust-check.d.ts +7 -0
- package/build/src/backends/rust-check.d.ts.map +1 -0
- package/build/src/backends/rust-check.js +65 -0
- package/build/src/backends/shared.d.ts.map +1 -1
- package/build/src/backends/shared.js +29 -1
- package/build/src/backends/swift-check.d.ts +7 -0
- package/build/src/backends/swift-check.d.ts.map +1 -0
- package/build/src/backends/swift-check.js +77 -0
- package/build/src/backends/typescript-check.d.ts +7 -0
- package/build/src/backends/typescript-check.d.ts.map +1 -0
- package/build/src/backends/typescript-check.js +33 -0
- package/build/src/backends/zig-check.d.ts +7 -0
- package/build/src/backends/zig-check.d.ts.map +1 -0
- package/build/src/backends/zig-check.js +70 -0
- package/build/src/diagnostic.d.ts +13 -1
- package/build/src/diagnostic.d.ts.map +1 -1
- package/build/src/diagnostic.js +14 -2
- package/build/src/frontends/java.d.ts.map +1 -1
- package/build/src/frontends/java.js +23 -1
- package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
- package/build/src/frontends/javascript-typescript.js +45 -4
- package/build/src/frontends/php.d.ts.map +1 -1
- package/build/src/frontends/php.js +54 -3
- package/build/src/frontends/program.d.ts +6 -0
- package/build/src/frontends/program.d.ts.map +1 -1
- package/build/src/frontends/program.js +9 -1
- package/build/src/frontends/ruby.d.ts.map +1 -1
- package/build/src/frontends/ruby.js +55 -5
- package/build/src/language-registry.d.ts +54 -0
- package/build/src/language-registry.d.ts.map +1 -1
- package/build/src/language-registry.js +124 -10
- package/build/src/project-build.d.ts +172 -0
- package/build/src/project-build.d.ts.map +1 -0
- package/build/src/project-build.js +320 -0
- package/build/src/project-cli.d.ts +40 -0
- package/build/src/project-cli.d.ts.map +1 -0
- package/build/src/project-cli.js +145 -0
- package/build/src/project-manifest.d.ts +148 -0
- package/build/src/project-manifest.d.ts.map +1 -0
- package/build/src/project-manifest.js +432 -0
- package/build/src/project-reporter.d.ts +81 -0
- package/build/src/project-reporter.d.ts.map +1 -0
- package/build/src/project-reporter.js +293 -0
- package/build/src/project-snapshot.d.ts +129 -0
- package/build/src/project-snapshot.d.ts.map +1 -0
- package/build/src/project-snapshot.js +362 -0
- package/build/src/project-watch-reporter.d.ts +125 -0
- package/build/src/project-watch-reporter.d.ts.map +1 -0
- package/build/src/project-watch-reporter.js +280 -0
- package/build/src/project-watch.d.ts +133 -0
- package/build/src/project-watch.d.ts.map +1 -0
- package/build/src/project-watch.js +839 -0
- package/build/src/publication.d.ts +69 -5
- package/build/src/publication.d.ts.map +1 -1
- package/build/src/publication.js +246 -57
- package/build/src/semantic/effects.js +3 -1
- package/build/src/semantic/provenance.d.ts.map +1 -1
- package/build/src/semantic/provenance.js +11 -1
- package/build/src/semantic/types.d.ts +355 -4
- package/build/src/semantic/types.d.ts.map +1 -1
- package/build/src/semantic/types.js +92 -3
- package/build/src/semantic/validate.js +18 -1
- package/build/src/subprocess.d.ts +8 -0
- package/build/src/subprocess.d.ts.map +1 -1
- package/build/src/subprocess.js +50 -9
- package/build/src/target-check.d.ts +52 -0
- package/build/src/target-check.d.ts.map +1 -0
- package/build/src/target-check.js +796 -0
- package/build/src/toolchains.d.ts.map +1 -1
- package/build/src/toolchains.js +3 -3
- package/docs/adr-expression-breadth.md +186 -0
- package/docs/architecture.md +3 -1
- package/docs/c.md +4 -0
- package/docs/cpp.md +4 -0
- package/docs/dart.md +4 -0
- package/docs/generated-artifact-publication.md +11 -8
- package/docs/kotlin.md +2 -2
- package/docs/language-support.md +40 -6
- package/docs/parser-qualification.md +1 -1
- package/docs/project-build-cli.md +147 -0
- package/docs/project-watch.md +60 -0
- package/docs/rust.md +4 -0
- package/docs/swift.md +2 -0
- package/docs/testing.md +70 -3
- package/docs/watch-build-pipeline.md +39 -23
- package/docs/zig.md +2 -0
- package/examples/jsdoc-java-watch/expected-output.txt +3 -0
- package/examples/jsdoc-java-watch/semantifold.json +23 -0
- package/examples/jsdoc-java-watch/src/main.js +21 -0
- package/index.js +8 -0
- package/package.json +6 -1
- package/src/artifact-path.js +31 -2
- package/src/backends/c-check.js +80 -0
- package/src/backends/check-plan.js +147 -0
- package/src/backends/cpp-check.js +73 -0
- package/src/backends/csharp-check.js +139 -0
- package/src/backends/csharp.js +4 -3
- package/src/backends/dart-check.js +117 -0
- package/src/backends/dart.js +4 -4
- package/src/backends/go-check.js +89 -0
- package/src/backends/go.js +2 -2
- package/src/backends/java-check.js +77 -0
- package/src/backends/javascript-check.js +33 -0
- package/src/backends/kotlin-check.js +41 -0
- package/src/backends/kotlin.js +1 -1
- package/src/backends/php-check.js +23 -0
- package/src/backends/program.js +17 -0
- package/src/backends/python-check.js +30 -0
- package/src/backends/ruby-check.js +23 -0
- package/src/backends/rust-check.js +78 -0
- package/src/backends/shared.js +30 -0
- package/src/backends/swift-check.js +89 -0
- package/src/backends/typescript-check.js +37 -0
- package/src/backends/zig-check.js +81 -0
- package/src/diagnostic.js +9 -1
- package/src/frontends/java.js +24 -0
- package/src/frontends/javascript-typescript.js +49 -2
- package/src/frontends/php.js +61 -2
- package/src/frontends/program.js +9 -0
- package/src/frontends/ruby.js +62 -2
- package/src/language-registry.js +130 -9
- package/src/project-build.js +353 -0
- package/src/project-cli.js +155 -0
- package/src/project-manifest.js +479 -0
- package/src/project-reporter.js +320 -0
- package/src/project-snapshot.js +403 -0
- package/src/project-watch-reporter.js +303 -0
- package/src/project-watch.js +870 -0
- package/src/publication.js +275 -58
- package/src/semantic/effects.js +1 -0
- package/src/semantic/provenance.js +8 -0
- package/src/semantic/types.js +101 -2
- package/src/semantic/validate.js +26 -0
- package/src/subprocess.js +49 -8
- package/src/target-check.js +844 -0
- package/src/toolchains.js +3 -2
- package/tsconfig.json +1 -1
|
@@ -6,7 +6,7 @@ import { blockReferencesProtectedEntry } from "../semantic/effects.js";
|
|
|
6
6
|
import { locationFromOffsets, moduleLocation } from "../semantic/location.js";
|
|
7
7
|
import { withAdaptedOperation } from "../semantic/operators.js";
|
|
8
8
|
import { withParserRanges } from "../semantic/provenance.js";
|
|
9
|
-
import { hasOnlyUnicodeScalars } from "../semantic/scalars.js";
|
|
9
|
+
import { hasOnlyUnicodeScalars, scalarType } from "../semantic/scalars.js";
|
|
10
10
|
import { isTask034ResourceProbe } from "../semantic/capabilities.js";
|
|
11
11
|
import { hasExactEffectSupport } from "../backends/effects.js";
|
|
12
12
|
import { requireSourceReturnType, requireSourceScalarType } from "./scalars.js";
|
|
@@ -388,14 +388,55 @@ function convertExpression(node, language, filename, source, context = { binding
|
|
|
388
388
|
}
|
|
389
389
|
}
|
|
390
390
|
if (node.type == "TemplateLiteral") {
|
|
391
|
-
if (node.expressions.length > 0)
|
|
392
|
-
|
|
391
|
+
if (node.expressions.length > 0) {
|
|
392
|
+
/** @type {import("../semantic/types.js").Expression[]} */
|
|
393
|
+
const ordered = [];
|
|
394
|
+
node.quasis.forEach((quasi, index) => {
|
|
395
|
+
if (typeof quasi.value.cooked != "string" || !hasOnlyUnicodeScalars(quasi.value.cooked)) {
|
|
396
|
+
return unsupportedSyntax(language, "invalid Unicode string literal", nodeLocation(quasi, filename, source));
|
|
397
|
+
}
|
|
398
|
+
const quasiLocation = nodeLocation(quasi, filename, source);
|
|
399
|
+
if (quasi.value.cooked.length > 0)
|
|
400
|
+
ordered.push(withParserRanges({ kind: /** @type {const} */ ("StringLiteral"), location: quasiLocation, value: quasi.value.cooked }, { literal: quasiLocation }));
|
|
401
|
+
if (index < node.expressions.length) {
|
|
402
|
+
ordered.push(convertExpression(/** @type {import("@babel/types").Expression} */ (node.expressions[index]), language, filename, source, context, scalarType("string")));
|
|
403
|
+
}
|
|
404
|
+
});
|
|
405
|
+
if (ordered.length == 0)
|
|
406
|
+
return unsupportedSyntax(language, "interpolated string", location);
|
|
407
|
+
let lowered = ordered[0];
|
|
408
|
+
for (const part of ordered.slice(1)) {
|
|
409
|
+
const semantic = withAdaptedOperation({
|
|
410
|
+
kind: /** @type {const} */ ("BinaryExpression"),
|
|
411
|
+
left: lowered,
|
|
412
|
+
location,
|
|
413
|
+
right: part
|
|
414
|
+
}, /** @type {import("../semantic/operators.js").AdaptedOperation} */ ("StringConcat"));
|
|
415
|
+
lowered = /** @type {import("../semantic/types.js").Expression} */ ( /** @type {unknown} */(semantic));
|
|
416
|
+
}
|
|
417
|
+
return lowered;
|
|
418
|
+
}
|
|
393
419
|
const quasi = node.quasis[0];
|
|
394
420
|
if (typeof quasi.value.cooked != "string" || !hasOnlyUnicodeScalars(quasi.value.cooked)) {
|
|
395
421
|
return unsupportedSyntax(language, "invalid Unicode string literal", location);
|
|
396
422
|
}
|
|
397
423
|
return withParserRanges({ kind: /** @type {const} */ ("StringLiteral"), location, value: quasi.value.cooked }, { literal: location });
|
|
398
424
|
}
|
|
425
|
+
if (node.type == "ConditionalExpression") {
|
|
426
|
+
return /** @type {import("../semantic/types.js").Expression} */ ( /** @type {unknown} */(withParserRanges({
|
|
427
|
+
alternate: convertExpression(node.alternate, language, filename, source, context),
|
|
428
|
+
condition: convertExpression(node.test, language, filename, source, context),
|
|
429
|
+
consequent: convertExpression(node.consequent, language, filename, source, context),
|
|
430
|
+
kind: /** @type {const} */ ("ConditionalExpression"),
|
|
431
|
+
location
|
|
432
|
+
}, {
|
|
433
|
+
alternate: nodeLocation(node.alternate, filename, source),
|
|
434
|
+
colon: tokenLocation(node, ":", node.consequent.end ?? node.test.end ?? node.start ?? 0, node.alternate.start ?? node.end ?? source.length, filename, source),
|
|
435
|
+
condition: nodeLocation(node.test, filename, source),
|
|
436
|
+
consequent: nodeLocation(node.consequent, filename, source),
|
|
437
|
+
operator: tokenLocation(node, "?", node.test.end ?? node.start ?? 0, node.consequent.start ?? node.end ?? source.length, filename, source)
|
|
438
|
+
})));
|
|
439
|
+
}
|
|
399
440
|
if (node.type == "UnaryExpression" && ["!", "-"].includes(node.operator)) {
|
|
400
441
|
const operand = convertExpression(node.argument, language, filename, source, context);
|
|
401
442
|
const semantic = withAdaptedOperation(withParserRanges({
|
|
@@ -2362,4 +2403,4 @@ function rememberTokens(value, tokens, visited = new WeakSet()) {
|
|
|
2362
2403
|
rememberTokens(child, tokens, visited);
|
|
2363
2404
|
}
|
|
2364
2405
|
}
|
|
2365
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC10eXBlc2NyaXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Zyb250ZW5kcy9qYXZhc2NyaXB0LXR5cGVzY3JpcHQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxLQUFLLElBQUksVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFBO0FBQ2pELE9BQU8sRUFBQyxLQUFLLElBQUksWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUE7QUFDcEQsT0FBTyxFQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUNwRyxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUNwRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUE7QUFDM0UsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUE7QUFDN0QsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMkJBQTJCLENBQUE7QUFDMUQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sd0JBQXdCLENBQUE7QUFDNUQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sNkJBQTZCLENBQUE7QUFDbEUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sd0JBQXdCLENBQUE7QUFDNUQsT0FBTyxFQUFDLHVCQUF1QixFQUFFLHVCQUF1QixFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQzdFLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSwyQkFBMkIsRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxnQ0FBZ0MsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFB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cGFyc2UgYXMgcGFyc2VCYWJlbH0gZnJvbSBcIkBiYWJlbC9wYXJzZXJcIlxuaW1wb3J0IHtwYXJzZSBhcyBwYXJzZUNvbW1lbnR9IGZyb20gXCJjb21tZW50LXBhcnNlclwiXG5pbXBvcnQge21pc3NpbmdUeXBlLCBwYXJzZUZhaWx1cmUsIFNlbWFudGlmb2xkRGlhZ25vc3RpYywgdW5zdXBwb3J0ZWRTeW50YXh9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7YmxvY2tSZWZlcmVuY2VzUHJvdGVjdGVkRW50cnl9IGZyb20gXCIuLi9zZW1hbnRpYy9lZmZlY3RzLmpzXCJcbmltcG9ydCB7bG9jYXRpb25Gcm9tT2Zmc2V0cywgbW9kdWxlTG9jYXRpb259IGZyb20gXCIuLi9zZW1hbnRpYy9sb2NhdGlvbi5qc1wiXG5pbXBvcnQge3dpdGhBZGFwdGVkT3BlcmF0aW9ufSBmcm9tIFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCJcbmltcG9ydCB7d2l0aFBhcnNlclJhbmdlc30gZnJvbSBcIi4uL3NlbWFudGljL3Byb3ZlbmFuY2UuanNcIlxuaW1wb3J0IHtoYXNPbmx5VW5pY29kZVNjYWxhcnN9IGZyb20gXCIuLi9zZW1hbnRpYy9zY2FsYXJzLmpzXCJcbmltcG9ydCB7aXNUYXNrMDM0UmVzb3VyY2VQcm9iZX0gZnJvbSBcIi4uL3NlbWFudGljL2NhcGFiaWxpdGllcy5qc1wiXG5pbXBvcnQge2hhc0V4YWN0RWZmZWN0U3VwcG9ydH0gZnJvbSBcIi4uL2JhY2tlbmRzL2VmZmVjdHMuanNcIlxuaW1wb3J0IHtyZXF1aXJlU291cmNlUmV0dXJuVHlwZSwgcmVxdWlyZVNvdXJjZVNjYWxhclR5cGV9IGZyb20gXCIuL3NjYWxhcnMuanNcIlxuaW1wb3J0IHtkb2N1bWVudGVkVmFsdWVUeXBlLCBpbnN0YW50aWF0ZWRSZWNvcmRGaWVsZFR5cGUsIGl0ZXJhdGlvbkJpbmRpbmdUeXBlLCBpdGVyYXRpb25PcGVyYW5kVHlwZSwga25vd25DYWxsUmV0dXJuVHlwZSwgbGlzdFR5cGUsIG1hcFR5cGUsIG9wdGlvbmFsVHlwZSwgb3JkZXJlZE1hcFR5cGVGcm9tTWFwLCBvd25lZFJlZmVyZW5jZVR5cGUsIG93bmVkUmVzb3VyY2VUeXBlLCBwcmVzZXJ2ZXNHZW5lcmljT3B0aW9uYWxFdmlkZW5jZSwgcmVjb3JkVHlwZSwgcmVmZXJlbmNlVHlwZSwgdHlwZVZhcmlhYmxlfSBmcm9tIFwiLi90eXBlcy5qc1wiXG5cbi8qKiBAdHlwZWRlZiB7Tm9uTnVsbGFibGU8aW1wb3J0KFwiQGJhYmVsL3BhcnNlclwiKS5QYXJzZVJlc3VsdDxpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRmlsZT5bXCJ0b2tlbnNcIl0+W251bWJlcl19IEJhYmVsVG9rZW4gKi9cbi8qKiBAdHlwZWRlZiB7e2J5U3RhcnQ6IE1hcDxudW1iZXIsIEJhYmVsVG9rZW4+LCB0b2tlbnM6IEJhYmVsVG9rZW5bXX19IEJhYmVsVG9rZW5JbmRleCAqL1xuLyoqIEB0eXBlZGVmIHt7bmFtZTogc3RyaW5nLCBuYW1lTG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBwYXJhbWV0ZXJzOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QYXJhbWV0ZXJbXSwgcmV0dXJuVHlwZTogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGUsIHR5cGVQYXJhbWV0ZXJzPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcltdLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259fSBKYXZhU2NyaXB0RnVuY3Rpb25TaWduYXR1cmUgKi9cbi8qKiBAdHlwZWRlZiB7e2JpbmRpbmdzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0JpbmRpbmdUeXBlPiwgY2xhc3NlczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj4sIGN1cnJlbnRDbGFzcz86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24sIGVycm9yczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj4sIGVycm9yTmFtZXM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+LCBmdW5jdGlvbnM6IE1hcDxzdHJpbmcsIEphdmFTY3JpcHRGdW5jdGlvblNpZ25hdHVyZT4sIGxleGljYWxWYWx1ZU5hbWVzPzogU2V0PHN0cmluZz4sIG9yZGVyZWRNYXBEZWNsYXJhdGlvbnM/OiBTZXQ8b2JqZWN0PiwgcmVjb3JkTmFtZXM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+LCByZWNvcmRzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj4sIHJldHVyblR5cGU/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZSwgdHlwZVBhcmFtZXRlcnM/OiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyPiwgdmFsdWVSZWNvcmROYW1lczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn19IEphdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dCAqL1xuXG4vKiogQHR5cGUge1dlYWtNYXA8b2JqZWN0LCBCYWJlbFRva2VuSW5kZXg+fSAqL1xuY29uc3Qgbm9kZVRva2VucyA9IG5ldyBXZWFrTWFwKClcbmNvbnN0IHJlZmVyZW5jZU1ldGhvZEhvb2tzID0gbmV3IFNldChbXG4gIFwiX19kZWZpbmVHZXR0ZXJfX1wiLCBcIl9fZGVmaW5lU2V0dGVyX19cIiwgXCJfX2xvb2t1cEdldHRlcl9fXCIsIFwiX19sb29rdXBTZXR0ZXJfX1wiLCBcIl9fcHJvdG9fX1wiLCBcImNvbnN0cnVjdG9yXCIsXG4gIFwiaGFzT3duUHJvcGVydHlcIiwgXCJpc1Byb3RvdHlwZU9mXCIsIFwicHJvcGVydHlJc0VudW1lcmFibGVcIiwgXCJ0b0xvY2FsZVN0cmluZ1wiLCBcInRvU3RyaW5nXCIsIFwidmFsdWVPZlwiXG5dKVxuY29uc3QgYmFiZWxCaW5hcnlPcGVyYXRpb25zID0gbmV3IE1hcChbXG4gIFtcIitcIiwgXCJBZGRcIl0sXG4gIFtcIi1cIiwgXCJTdWJ0cmFjdFwiXSxcbiAgW1wiKlwiLCBcIk11bHRpcGx5XCJdLFxuICBbXCI9PT1cIiwgXCJFcXVhbFwiXSxcbiAgW1wiIT09XCIsIFwiTm90RXF1YWxcIl0sXG4gIFtcIjxcIiwgXCJMZXNzVGhhblwiXSxcbiAgW1wiPD1cIiwgXCJMZXNzVGhhbk9yRXF1YWxcIl0sXG4gIFtcIj5cIiwgXCJHcmVhdGVyVGhhblwiXSxcbiAgW1wiPj1cIiwgXCJHcmVhdGVyVGhhbk9yRXF1YWxcIl1cbl0pXG5cbi8qKlxuICogUmV0dXJucyBhIHNvdXJjZSBsb2NhdGlvbiBmb3IgYSBCYWJlbCBub2RlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9kZX0gbm9kZSAtIEJhYmVsIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBOb3JtYWxpemVkIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAodHlwZW9mIG5vZGUuc3RhcnQgIT0gXCJudW1iZXJcIiB8fCB0eXBlb2Ygbm9kZS5lbmQgIT0gXCJudW1iZXJcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQmFiZWwgb21pdHRlZCBzb3VyY2Ugb2Zmc2V0cyBmb3IgJHtub2RlLnR5cGV9LmApXG4gIH1cblxuICByZXR1cm4gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBub2RlLnN0YXJ0LCBub2RlLmVuZClcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpZGVudGlmaWVyIHNwZWxsaW5nIHJhdGhlciB0aGFuIGEgdHJhaWxpbmcgVHlwZVNjcmlwdCBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuSWRlbnRpZmllcn0gbm9kZSAtIFBhcnNlciBpZGVudGlmaWVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gSWRlbnRpZmllciBsb2NhdGlvbi5cbiAqL1xuZnVuY3Rpb24gaWRlbnRpZmllckxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKHR5cGVvZiBub2RlLnN0YXJ0ICE9IFwibnVtYmVyXCIpIHRocm93IG5ldyBFcnJvcihcIkJhYmVsIG9taXR0ZWQgYW4gaWRlbnRpZmllciBzdGFydCBvZmZzZXQuXCIpXG4gIGNvbnN0IHRva2VuID0gbm9kZVRva2Vucy5nZXQobm9kZSk/LmJ5U3RhcnQuZ2V0KG5vZGUuc3RhcnQpXG5cbiAgaWYgKCF0b2tlbiB8fCB0b2tlbi50eXBlLmxhYmVsICE9IFwibmFtZVwiKSB0aHJvdyBuZXcgRXJyb3IoYEJhYmVsIG9taXR0ZWQgdGhlIGlkZW50aWZpZXIgdG9rZW4gZm9yICcke25vZGUubmFtZX0nLmApXG5cbiAgcmV0dXJuIGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgdG9rZW4uc3RhcnQsIHRva2VuLmVuZClcbn1cblxuLyoqXG4gKiBMb2NhdGVzIG9uZSBCYWJlbCB0b2tlbiB3aXRoaW4gcGFyc2VyLW5vZGUgYm91bmRhcmllcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLk5vZGV9IG93bmVyIC0gVG9rZW4tb3duaW5nIHBhcnNlciBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gRXhhY3QgdG9rZW4gc3BlbGxpbmcuXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnRPZmZzZXQgLSBJbmNsdXNpdmUgYm91bmRhcnkuXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kT2Zmc2V0IC0gRXhjbHVzaXZlIGJvdW5kYXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gRXhhY3QgdG9rZW4gbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIHRva2VuTG9jYXRpb24ob3duZXIsIHZhbHVlLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IHRva2VucyA9IG5vZGVUb2tlbnMuZ2V0KG93bmVyKT8udG9rZW5zID8/IFtdXG4gIGxldCBsb3cgPSAwXG4gIGxldCBoaWdoID0gdG9rZW5zLmxlbmd0aFxuXG4gIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgY29uc3QgbWlkZGxlID0gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAyKVxuXG4gICAgaWYgKHRva2Vuc1ttaWRkbGVdLnN0YXJ0IDwgc3RhcnRPZmZzZXQpIGxvdyA9IG1pZGRsZSArIDFcbiAgICBlbHNlIGhpZ2ggPSBtaWRkbGVcbiAgfVxuICBsZXQgdG9rZW5cblxuICBmb3IgKGxldCBpbmRleCA9IGxvdzsgaW5kZXggPCB0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1tpbmRleF0uc3RhcnQgPCBlbmRPZmZzZXQ7IGluZGV4KyspIHtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSB0b2tlbnNbaW5kZXhdXG5cbiAgICBpZiAoY2FuZGlkYXRlLmVuZCA8PSBlbmRPZmZzZXQgJiYgKGNhbmRpZGF0ZS52YWx1ZSA9PSB2YWx1ZSB8fCBjYW5kaWRhdGUudHlwZS5sYWJlbCA9PSB2YWx1ZSkpIHtcbiAgICAgIHRva2VuID0gY2FuZGlkYXRlXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICghdG9rZW4pIHRocm93IG5ldyBFcnJvcihgQmFiZWwgb21pdHRlZCB0b2tlbiAnJHt2YWx1ZX0nIGJldHdlZW4gJHtzdGFydE9mZnNldH0gYW5kICR7ZW5kT2Zmc2V0fS5gKVxuXG4gIHJldHVybiBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpXG59XG5cbi8qKlxuICogTG9jYXRlcyBhIGNvbW1lbnQtcGFyc2VyIHRva2VuIGluc2lkZSBhIEJhYmVsLW93bmVkIGRvYyBjb21tZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ29tbWVudEJsb2NrfSBjb21tZW50IC0gQmFiZWwgZG9jIGNvbW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcImNvbW1lbnQtcGFyc2VyXCIpLlNwZWN9IHRhZyAtIFBhcnNlZCBkb2MgdGFnLlxuICogQHBhcmFtIHtcIm5hbWVcIiB8IFwidHlwZVwifSBmaWVsZCAtIFRva2VuIGZpZWxkLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gRXhhY3QgdG9rZW4gbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbW1lbnRUYWdMb2NhdGlvbihjb21tZW50LCB0YWcsIGZpZWxkLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxpbmUgPSB0YWcuc291cmNlWzBdXG5cbiAgaWYgKHR5cGVvZiBjb21tZW50LnN0YXJ0ICE9IFwibnVtYmVyXCIgfHwgIWxpbmUpIHRocm93IG5ldyBFcnJvcihgQ29tbWVudCBwYXJzZXIgb21pdHRlZCB0aGUgQCR7dGFnLnRhZ30gc291cmNlIHRva2VuLmApXG5cbiAgbGV0IGxpbmVTdGFydCA9IGNvbW1lbnQuc3RhcnRcblxuICBmb3IgKGxldCBsaW5lTnVtYmVyID0gMDsgbGluZU51bWJlciA8IGxpbmUubnVtYmVyOyBsaW5lTnVtYmVyKyspIHtcbiAgICB3aGlsZSAobGluZVN0YXJ0IDwgc291cmNlLmxlbmd0aCAmJiBzb3VyY2VbbGluZVN0YXJ0XSAhPSBcIlxcclwiICYmIHNvdXJjZVtsaW5lU3RhcnRdICE9IFwiXFxuXCIpIGxpbmVTdGFydCsrXG4gICAgaWYgKHNvdXJjZVtsaW5lU3RhcnRdID09IFwiXFxyXCIgJiYgc291cmNlW2xpbmVTdGFydCArIDFdID09IFwiXFxuXCIpIGxpbmVTdGFydCArPSAyXG4gICAgZWxzZSBsaW5lU3RhcnQrK1xuICB9XG5cbiAgY29uc3Qgb3JkZXJlZEZpZWxkcyA9IFtcInN0YXJ0XCIsIFwiZGVsaW1pdGVyXCIsIFwicG9zdERlbGltaXRlclwiLCBcInRhZ1wiLCBcInBvc3RUYWdcIiwgXCJ0eXBlXCIsIFwicG9zdFR5cGVcIiwgXCJuYW1lXCJdXG4gIGNvbnN0IGZpZWxkSW5kZXggPSBvcmRlcmVkRmllbGRzLmluZGV4T2YoZmllbGQpXG4gIGxldCBzdGFydCA9IGxpbmVTdGFydCArIG9yZGVyZWRGaWVsZHMuc2xpY2UoMCwgZmllbGRJbmRleCkucmVkdWNlKChsZW5ndGgsIGtleSkgPT5cbiAgICBsZW5ndGggKyBsaW5lLnRva2Vuc1svKiogQHR5cGUge2tleW9mIHR5cGVvZiBsaW5lLnRva2Vuc30gKi8gKGtleSldLmxlbmd0aCwgMClcbiAgY29uc3QgdG9rZW4gPSBsaW5lLnRva2Vuc1tmaWVsZF1cbiAgbGV0IGxlbmd0aCA9IHRva2VuLmxlbmd0aFxuXG4gIGlmIChmaWVsZCA9PSBcInR5cGVcIiAmJiB0YWcudHlwZSkge1xuICAgIGNvbnN0IG5lc3RlZE9mZnNldCA9IHRva2VuLmluZGV4T2YodGFnLnR5cGUpXG5cbiAgICBpZiAobmVzdGVkT2Zmc2V0IDwgMCkgdGhyb3cgbmV3IEVycm9yKGBDb21tZW50IHBhcnNlciBvbWl0dGVkIHRoZSBAJHt0YWcudGFnfSB0eXBlIHNwZWxsaW5nLmApXG4gICAgc3RhcnQgKz0gbmVzdGVkT2Zmc2V0XG4gICAgbGVuZ3RoID0gdGFnLnR5cGUubGVuZ3RoXG4gIH1cblxuICByZXR1cm4gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBzdGFydCwgc3RhcnQgKyBsZW5ndGgpXG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIGBNYXBgIHJlc29sdmVzIHRvIHRoZSBuYXRpdmUgaW50cmluc2ljIGluIHRoZSBjdXJyZW50IGxleGljYWwgc2NvcGUuXG4gKiBAcGFyYW0ge0phdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgbmF0aXZlIE1hcCBjb25zdHJ1Y3Rpb24gaXMgdW5zaGFkb3dlZC5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlTWFwQXZhaWxhYmxlKGNvbnRleHQpIHtcbiAgcmV0dXJuICFjb250ZXh0LmJpbmRpbmdzLmhhcyhcIk1hcFwiKSAmJiAhY29udGV4dC5sZXhpY2FsVmFsdWVOYW1lcz8uaGFzKFwiTWFwXCIpICYmXG4gICAgIWNvbnRleHQuZnVuY3Rpb25zLmhhcyhcIk1hcFwiKSAmJiAhY29udGV4dC52YWx1ZVJlY29yZE5hbWVzLmhhcyhcIk1hcFwiKSAmJiAhY29udGV4dC5lcnJvck5hbWVzLmhhcyhcIk1hcFwiKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3VwcG9ydGVkIEJhYmVsIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5FeHByZXNzaW9ufSBub2RlIC0gQmFiZWwgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dH0gW2NvbnRleHRdIC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVmFsdWVUeXBlfSBbZXhwZWN0ZWRUeXBlXSAtIEV4cGxpY2l0IGNvbnRleHR1YWwgdmFsdWUgdHlwZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZXNlcnZlT3B0aW9uYWxdIC0gV2hldGhlciBhbiBvcHRpb25hbCBpZGVudGlmaWVyIHJlbWFpbnMgd3JhcHBlZC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBTZW1hbnRpYyBleHByZXNzaW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCA9IHtiaW5kaW5nczogbmV3IE1hcCgpLCBjbGFzc2VzOiBuZXcgTWFwKCksIGVycm9yczogbmV3IE1hcCgpLCBlcnJvck5hbWVzOiBuZXcgTWFwKCksIGZ1bmN0aW9uczogbmV3IE1hcCgpLCByZWNvcmROYW1lczogbmV3IE1hcCgpLCByZWNvcmRzOiBuZXcgTWFwKCksIHZhbHVlUmVjb3JkTmFtZXM6IG5ldyBNYXAoKX0sIGV4cGVjdGVkVHlwZSwgcHJlc2VydmVPcHRpb25hbCA9IGZhbHNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJiBub2RlLm5hbWUgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJ1bmRlZmluZWQgYWJzZW5jZSB2YWx1ZVwiLCBsb2NhdGlvbilcbiAgfVxuXG4gIGlmIChleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgIGlmIChub2RlLnR5cGUgPT0gXCJOdWxsTGl0ZXJhbFwiKSB7XG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxOb25lXCIpLCBsb2NhdGlvbn0sIHthYnNlbmNlOiBsb2NhdGlvbn0pXG4gICAgfVxuICAgIGlmIChrbm93bkV4cHJlc3Npb25UeXBlKG5vZGUsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgICByZXR1cm4gY29udmVydEV4cHJlc3Npb24obm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHVuZGVmaW5lZCwgdHJ1ZSlcbiAgICB9XG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxTb21lXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICB2YWx1ZTogY29udmVydEV4cHJlc3Npb24obm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGV4cGVjdGVkVHlwZS52YWx1ZVR5cGUpXG4gICAgfSwge3NvbWU6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJOdWxsTGl0ZXJhbFwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibnVsbCBvdXRzaWRlIGFuIGV4cGxpY2l0IG9wdGlvbmFsIGNvbnRleHRcIiwgbG9jYXRpb24pXG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIlRTTm9uTnVsbEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24sIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuXG4gICAgaWYgKGxhbmd1YWdlICE9IFwidHlwZXNjcmlwdFwiIHx8IGV4cHJlc3Npb24ua2luZCAhPSBcIk1hcExvb2t1cEV4cHJlc3Npb25cIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm5vbi1udWxsIGFzc2VydGlvbiBvdGhlciB0aGFuIE1hcC5nZXQgcmVzdWx0XCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBleHByZXNzaW9uLmxvY2F0aW9uID0gbG9jYXRpb25cbiAgICByZXR1cm4gZXhwcmVzc2lvblxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIklkZW50aWZpZXJcIikge1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSwgbG9jYXRpb24sIG5hbWU6IG5vZGUubmFtZX0sIHtcbiAgICAgIG5hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG5cbiAgICBpZiAoIXByZXNlcnZlT3B0aW9uYWwgJiYgY29udGV4dC5iaW5kaW5ncy5nZXQobm9kZS5uYW1lKT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxVbndyYXBcIiksIGxvY2F0aW9uLCBvcGVyYW5kOiBpZGVudGlmaWVyfSwge3Vud3JhcDogbG9jYXRpb259KVxuICAgIH1cblxuICAgIHJldHVybiBpZGVudGlmaWVyXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiVGhpc0V4cHJlc3Npb25cIikge1xuICAgIGlmICghY29udGV4dC5jdXJyZW50Q2xhc3MpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJyZWNlaXZlciBvdXRzaWRlIGEgcmVmZXJlbmNlIGNsYXNzXCIsIGxvY2F0aW9uKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2NsYXNzSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoY29udGV4dC5jdXJyZW50Q2xhc3MuaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWNlaXZlckV4cHJlc3Npb25cIiksIGxvY2F0aW9ufSxcbiAgICAgIHtyZWNlaXZlcjogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIk51bWVyaWNMaXRlcmFsXCIpIHtcbiAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKG5vZGUudmFsdWUpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibm9uLXNhZmUgaW50ZWdlciBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkludGVnZXJMaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IG5vZGUudmFsdWV9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkJvb2xlYW5MaXRlcmFsXCIpIHtcbiAgICBpZiAodHlwZW9mIG5vZGUudmFsdWUgIT0gXCJib29sZWFuXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJpbnZhbGlkIGJvb2xlYW4gbGl0ZXJhbCB2YWx1ZVwiLCBsb2NhdGlvbilcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCb29sZWFuTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBub2RlLnZhbHVlfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJTdHJpbmdMaXRlcmFsXCIpIHtcbiAgICBpZiAodHlwZW9mIG5vZGUudmFsdWUgIT0gXCJzdHJpbmdcIiB8fCAhaGFzT25seVVuaWNvZGVTY2FsYXJzKG5vZGUudmFsdWUpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiaW52YWxpZCBVbmljb2RlIHN0cmluZyBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJTdHJpbmdMaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IG5vZGUudmFsdWV9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkFycmF5RXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgZWxlbWVudFR5cGUgPSBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJMaXN0VHlwZVwiID8gZXhwZWN0ZWRUeXBlLmVsZW1lbnRUeXBlIDogdW5kZWZpbmVkXG4gICAgY29uc3QgZWxlbWVudHMgPSBub2RlLmVsZW1lbnRzLm1hcCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInNwYXJzZSBhcnJheSBob2xlXCIsIGFycmF5SG9sZUxvY2F0aW9uKG5vZGUsIGluZGV4LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT0gXCJTcHJlYWRFbGVtZW50XCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJhcnJheSBzcHJlYWRcIiwgbm9kZUxvY2F0aW9uKGVsZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gICAgICByZXR1cm4gY29udmVydEV4cHJlc3Npb24oZWxlbWVudCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGVsZW1lbnRUeXBlKVxuICAgIH0pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7ZWxlbWVudHMsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkxpc3RMaXRlcmFsXCIpLCBsb2NhdGlvbn0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiTmV3RXhwcmVzc2lvblwiICYmIG5vZGUuY2FsbGVlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiYgbm9kZS5jYWxsZWUubmFtZSA9PSBcIk1hcFwiKSB7XG4gICAgaWYgKCFuYXRpdmVNYXBBdmFpbGFibGUoY29udGV4dCkpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJzaGFkb3dlZCBNYXAgY29uc3RydWN0b3JcIiwgaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuY2FsbGVlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgaWYgKGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIlJlY29yZFR5cGVcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIk1hcCB1c2VkIGFzIGEgc3RydWN0dXJhbCByZWNvcmQgc3Vic3RpdHV0ZVwiLCBsb2NhdGlvbilcbiAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzIHx8IG5vZGUudHlwZVBhcmFtZXRlcnMgfHwgbm9kZS5hcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImdlbmVyaWMgb3IgaW52YWxpZCBNYXAgY29uc3RydWN0aW9uXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBpbml0aWFsaXplciA9IG5vZGUuYXJndW1lbnRzWzBdXG5cbiAgICBpZiAoIWluaXRpYWxpemVyKSByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBlbnRyaWVzOiBbXSxcbiAgICAgIGtpbmQ6IGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCJcbiAgICAgICAgPyAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcmRlcmVkTWFwTGl0ZXJhbFwiKVxuICAgICAgICA6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1hcExpdGVyYWxcIiksXG4gICAgICBsb2NhdGlvblxuICAgIH0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gICAgaWYgKGluaXRpYWxpemVyLnR5cGUgPT0gXCJTcHJlYWRFbGVtZW50XCIgfHwgaW5pdGlhbGl6ZXIudHlwZSA9PSBcIkFyZ3VtZW50UGxhY2Vob2xkZXJcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBpbml0aWFsaXplci50eXBlLCBub2RlTG9jYXRpb24oaW5pdGlhbGl6ZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBpZiAoaW5pdGlhbGl6ZXIudHlwZSAhPSBcIkFycmF5RXhwcmVzc2lvblwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiTWFwIGluaXRpYWxpemVyIG90aGVyIHRoYW4gYW4gZW50cnkgYXJyYXlcIiwgbm9kZUxvY2F0aW9uKGluaXRpYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgdmFsdWVUeXBlID0gZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiTWFwVHlwZVwiIHx8IGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCJcbiAgICAgID8gZXhwZWN0ZWRUeXBlLnZhbHVlVHlwZSA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IGVudHJpZXMgPSBpbml0aWFsaXplci5lbGVtZW50cy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoIWVsZW1lbnQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJzcGFyc2UgbWFwIGluaXRpYWxpemVyXCIsIGFycmF5SG9sZUxvY2F0aW9uKGluaXRpYWxpemVyLCBpbmRleCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBpZiAoZWxlbWVudC50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibWFwIHNwcmVhZFwiLCBub2RlTG9jYXRpb24oZWxlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBpZiAoZWxlbWVudC50eXBlICE9IFwiQXJyYXlFeHByZXNzaW9uXCIgfHwgZWxlbWVudC5lbGVtZW50cy5sZW5ndGggIT0gMikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiTWFwIGVudHJ5IG90aGVyIHRoYW4gYSBrZXkvdmFsdWUgcGFpclwiLCBub2RlTG9jYXRpb24oZWxlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBlbGVtZW50LmVsZW1lbnRzXG5cbiAgICAgIGlmICgha2V5KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwic3BhcnNlIG1hcCBrZXlcIiwgYXJyYXlIb2xlTG9jYXRpb24oZWxlbWVudCwgMCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBpZiAoIXZhbHVlKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwic3BhcnNlIG1hcCB2YWx1ZVwiLCBhcnJheUhvbGVMb2NhdGlvbihlbGVtZW50LCAxLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIGlmIChrZXkudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIiB8fCB2YWx1ZS50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiKSB7XG4gICAgICAgIGNvbnN0IHNwcmVhZCA9IGtleS50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiID8ga2V5IDogdmFsdWVcblxuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibWFwIGVudHJ5IHNwcmVhZFwiLCBub2RlTG9jYXRpb24oc3ByZWFkLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGlmIChrZXkudHlwZSAhPSBcIlN0cmluZ0xpdGVyYWxcIikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibWFwIGtleSBvdGhlciB0aGFuIGEgc3RyaW5nIGxpdGVyYWxcIiwgbm9kZUxvY2F0aW9uKGtleSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBrZXlFeHByZXNzaW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdHJpbmdMaXRlcmFsfSAqLyAoXG4gICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGtleSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgICApXG5cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAga2V5OiBrZXlFeHByZXNzaW9uLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNYXBFbnRyeVwiKSxcbiAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihlbGVtZW50LCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgdmFsdWU6IGNvbnZlcnRFeHByZXNzaW9uKHZhbHVlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgdmFsdWVUeXBlKVxuICAgICAgfSwge1xuICAgICAgICBrZXk6IGtleUV4cHJlc3Npb24ubG9jYXRpb24sXG4gICAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKGVsZW1lbnQsIFwiLFwiLCBrZXkuZW5kID8/IGVsZW1lbnQuc3RhcnQgPz8gMCwgdmFsdWUuc3RhcnQgPz8gZWxlbWVudC5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIH0pXG4gICAgfSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGVudHJpZXMsXG4gICAgICBraW5kOiBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiXG4gICAgICAgID8gLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3JkZXJlZE1hcExpdGVyYWxcIilcbiAgICAgICAgOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNYXBMaXRlcmFsXCIpLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIk5ld0V4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiSWRlbnRpZmllclwiICYmIGNvbnRleHQudmFsdWVSZWNvcmROYW1lcy5oYXMobm9kZS5jYWxsZWUubmFtZSkpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSAqLyAoY29udGV4dC52YWx1ZVJlY29yZE5hbWVzLmdldChub2RlLmNhbGxlZS5uYW1lKSlcbiAgICBpZiAoZGVjbGFyYXRpb24ua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIikge1xuICAgICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cyB8fCBub2RlLnR5cGVQYXJhbWV0ZXJzKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiZ2VuZXJpYyByZWZlcmVuY2UgY29uc3RydWN0aW9uXCIsIGxvY2F0aW9uKVxuICAgICAgY29uc3QgYXJndW1lbnRzXyA9IG5vZGUuYXJndW1lbnRzLm1hcCgoYXJndW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChhcmd1bWVudC50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGFyZ3VtZW50LnR5cGUgPT0gXCJBcmd1bWVudFBsYWNlaG9sZGVyXCIpIHtcbiAgICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGFyZ3VtZW50LnR5cGUsIG5vZGVMb2NhdGlvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5wYXJhbWV0ZXJzW2luZGV4XT8udHlwZSlcbiAgICAgIH0pXG4gICAgICBjb25zdCBjbGFzc0xvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuY2FsbGVlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudHNfLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWZlcmVuY2VDb25zdHJ1Y3Rpb25cIiksIGxvY2F0aW9uLFxuICAgICAgICByZWZlcmVuY2U6IGRlY2xhcmF0aW9uLm93bmVyc2hpcD8ua2luZCA9PSBcIm93bmVkUmVzb3VyY2VcIlxuICAgICAgICAgID8gb3duZWRSZWZlcmVuY2VUeXBlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBjbGFzc0xvY2F0aW9uKVxuICAgICAgICAgIDogcmVmZXJlbmNlVHlwZSgvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgY2xhc3NMb2NhdGlvbil9LCB7Y2xhc3M6IGNsYXNzTG9jYXRpb259KVxuICAgIH1cbiAgICBjb25zdCBzb3VyY2VBcmd1bWVudHMgPSBub2RlLnR5cGVBcmd1bWVudHM/LnBhcmFtcyA/PyBub2RlLnR5cGVQYXJhbWV0ZXJzPy5wYXJhbXNcbiAgICBjb25zdCB0eXBlQXJndW1lbnRzID0gc291cmNlQXJndW1lbnRzPy5tYXAoKC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlRTVHlwZX0gKi8gYXJndW1lbnQpID0+IGNvbnZlcnRUeXBlU2NyaXB0VmFsdWVUeXBlTm9kZShcbiAgICAgIGFyZ3VtZW50LFxuICAgICAgYFJlY29yZCAnJHtkZWNsYXJhdGlvbi5uYW1lfScgYXBwbGljYXRpb25gLCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dC5yZWNvcmROYW1lcywgY29udGV4dC50eXBlUGFyYW1ldGVyc1xuICAgICkpID8/IChleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIgJiYgZXhwZWN0ZWRUeXBlLmRlY2xhcmF0aW9uSWQgPT0gZGVjbGFyYXRpb24uaWQgPyBleHBlY3RlZFR5cGUuYXJndW1lbnRzIDogdW5kZWZpbmVkKVxuICAgIGNvbnN0IGFyZ3VtZW50c18gPSBub2RlLmFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGFyZ3VtZW50LnR5cGUgPT0gXCJTcHJlYWRFbGVtZW50XCIgfHwgYXJndW1lbnQudHlwZSA9PSBcIkFyZ3VtZW50UGxhY2Vob2xkZXJcIikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGFyZ3VtZW50LnR5cGUsIG5vZGVMb2NhdGlvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsXG4gICAgICAgIGluc3RhbnRpYXRlZFJlY29yZEZpZWxkVHlwZShkZWNsYXJhdGlvbiwgdHlwZUFyZ3VtZW50cywgaW5kZXgpKVxuICAgIH0pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBhcmd1bWVudHM6IGFyZ3VtZW50c18sXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWNvcmRDb25zdHJ1Y3Rpb25cIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJlY29yZDogcmVjb3JkVHlwZSgvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuY2FsbGVlLCBmaWxlbmFtZSwgc291cmNlKSwgdHlwZUFyZ3VtZW50cylcbiAgICB9LCB7cmVjb3JkOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5jYWxsZWUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiYgIW5vZGUub3B0aW9uYWwgJiYgbm9kZS5vYmplY3QudHlwZSAhPSBcIlN1cGVyXCIpIHtcbiAgICBpZiAoIW5vZGUuY29tcHV0ZWQgJiYgbm9kZS5vYmplY3QudHlwZSA9PSBcIlRoaXNFeHByZXNzaW9uXCIgJiYgY29udGV4dC5jdXJyZW50Q2xhc3MpIHtcbiAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLklkZW50aWZpZXIgfCB1bmRlZmluZWR9ICovXG4gICAgICBsZXQgcHJvcGVydHlcblxuICAgICAgaWYgKGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiICYmIG5vZGUucHJvcGVydHkudHlwZSA9PSBcIlByaXZhdGVOYW1lXCIpIHByb3BlcnR5ID0gbm9kZS5wcm9wZXJ0eS5pZFxuICAgICAgaWYgKGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiICYmIG5vZGUucHJvcGVydHkudHlwZSA9PSBcIklkZW50aWZpZXJcIikgcHJvcGVydHkgPSBub2RlLnByb3BlcnR5XG4gICAgICBpZiAoIXByb3BlcnR5KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibm9uY2Fub25pY2FsIHByaXZhdGUgaW5zdGFuY2UgZmllbGQgYWNjZXNzXCIsIGxvY2F0aW9uKVxuICAgICAgY29uc3QgZmllbGQgPSBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBwcm9wZXJ0eS5uYW1lKVxuXG4gICAgICBpZiAoIWZpZWxkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGB1bmtub3duIHByaXZhdGUgZmllbGQgJyR7cHJvcGVydHkubmFtZX0nYCwgaWRlbnRpZmllckxvY2F0aW9uKHByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtmaWVsZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChmaWVsZC5pZCksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlByaXZhdGVGaWVsZFJlYWRcIiksIGxvY2F0aW9uLFxuICAgICAgICByZWNlaXZlcjogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNlaXZlckV4cHJlc3Npb259ICovIChcbiAgICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihub2RlLm9iamVjdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKX0sIHttZW1iZXI6IGlkZW50aWZpZXJMb2NhdGlvbihwcm9wZXJ0eSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cbiAgICBpZiAoa25vd25WYWx1ZUV4cHJlc3Npb25UeXBlKG5vZGUub2JqZWN0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSk/LmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJwcml2YXRlIHJlZmVyZW5jZS1jbGFzcyBmaWVsZCBhY2Nlc3NcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmICghbm9kZS5jb21wdXRlZCAmJiBub2RlLm9iamVjdC50eXBlID09IFwiSWRlbnRpZmllclwiICYmIG5vZGUucHJvcGVydHkudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJlxuICAgICAgbm9kZS5wcm9wZXJ0eS5uYW1lID09IFwibWVzc2FnZVwiICYmIGNvbnRleHQuYmluZGluZ3MuZ2V0KG5vZGUub2JqZWN0Lm5hbWUpPy5raW5kID09IFwiRXJyb3JUeXBlXCIpIHtcbiAgICAgIGNvbnN0IHJlY2VpdmVyTG9jYXRpb24gPSBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5vYmplY3QsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JNZXNzYWdlUmVhZFwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHJlY2VpdmVyOiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSwgbG9jYXRpb246IHJlY2VpdmVyTG9jYXRpb24sIG5hbWU6IG5vZGUub2JqZWN0Lm5hbWV9LCB7XG4gICAgICAgICAgbmFtZTogcmVjZWl2ZXJMb2NhdGlvblxuICAgICAgICB9KVxuICAgICAgfSwge21lbWJlcjogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUucHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKG5vZGUuY29tcHV0ZWQpIHtcbiAgICAgIGlmIChrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5vYmplY3QsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKT8ua2luZCA9PSBcIlJlY29yZFR5cGVcIikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiY29tcHV0ZWQgcmVjb3JkIG1lbWJlciBhY2Nlc3NcIiwgbm9kZUxvY2F0aW9uKG5vZGUucHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgaWYgKG5vZGUucHJvcGVydHkudHlwZSA9PSBcIlByaXZhdGVOYW1lXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgbm9kZS5wcm9wZXJ0eS50eXBlLCBsb2NhdGlvbilcblxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBjb2xsZWN0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLm9iamVjdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgICBpbmRleDogY29udmVydEV4cHJlc3Npb24obm9kZS5wcm9wZXJ0eSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJMaXN0SW5kZXhFeHByZXNzaW9uXCIpLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgdG90YWxpdHk6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcInByb3ZlblwiKVxuICAgICAgfSwge1xuICAgICAgICBvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihub2RlLCBcIltcIiwgbm9kZS5vYmplY3QuZW5kID8/IG5vZGUuc3RhcnQgPz8gMCwgbm9kZS5wcm9wZXJ0eS5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKG5vZGUucHJvcGVydHkudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJiBbXCJsZW5ndGhcIiwgXCJzaXplXCJdLmluY2x1ZGVzKG5vZGUucHJvcGVydHkubmFtZSkpIHtcbiAgICAgIGNvbnN0IHJlY2VpdmVyVHlwZSA9IGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLm9iamVjdCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICAgIGlmIChyZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIpIHtcbiAgICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICAgIGZpZWxkOiBub2RlLnByb3BlcnR5Lm5hbWUsXG4gICAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWVtYmVyUmVhZFwiKSxcbiAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICByZWNlaXZlcjogY29udmVydEV4cHJlc3Npb24obm9kZS5vYmplY3QsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgICAgICB9LCB7bWVtYmVyOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5wcm9wZXJ0eSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBjb2xsZWN0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLm9iamVjdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgICBjb2xsZWN0aW9uS2luZDogLyoqIEB0eXBlIHtcImxpc3RcIiB8IFwibWFwXCJ9ICovIChub2RlLnByb3BlcnR5Lm5hbWUgPT0gXCJsZW5ndGhcIiA/IFwibGlzdFwiIDogXCJtYXBcIiksXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNvbGxlY3Rpb25TaXplRXhwcmVzc2lvblwiKSxcbiAgICAgICAgbG9jYXRpb25cbiAgICAgIH0sIHtvcGVyYXRvcjogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUucHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKG5vZGUucHJvcGVydHkudHlwZSA9PSBcIklkZW50aWZpZXJcIikge1xuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBmaWVsZDogbm9kZS5wcm9wZXJ0eS5uYW1lLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNZW1iZXJSZWFkXCIpLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgcmVjZWl2ZXI6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUub2JqZWN0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICAgIH0sIHttZW1iZXI6IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLnByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIlRlbXBsYXRlTGl0ZXJhbFwiKSB7XG4gICAgaWYgKG5vZGUuZXhwcmVzc2lvbnMubGVuZ3RoID4gMCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImludGVycG9sYXRlZCBzdHJpbmdcIiwgbG9jYXRpb24pXG5cbiAgICBjb25zdCBxdWFzaSA9IG5vZGUucXVhc2lzWzBdXG5cbiAgICBpZiAodHlwZW9mIHF1YXNpLnZhbHVlLmNvb2tlZCAhPSBcInN0cmluZ1wiIHx8ICFoYXNPbmx5VW5pY29kZVNjYWxhcnMocXVhc2kudmFsdWUuY29va2VkKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImludmFsaWQgVW5pY29kZSBzdHJpbmcgbGl0ZXJhbFwiLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiU3RyaW5nTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBxdWFzaS52YWx1ZS5jb29rZWR9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiICYmIFtcIiFcIiwgXCItXCJdLmluY2x1ZGVzKG5vZGUub3BlcmF0b3IpKSB7XG4gICAgY29uc3Qgb3BlcmFuZCA9IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUuYXJndW1lbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIlVuYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBvcGVyYW5kXG4gICAgfSwge1xuICAgICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24obm9kZSwgbm9kZS5vcGVyYXRvciwgbm9kZS5zdGFydCA/PyAwLCBub2RlLmFyZ3VtZW50LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSksIG5vZGUub3BlcmF0b3IgPT0gXCIhXCIgPyBcIk5vdFwiIDogXCJOZWdhdGVcIilcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChzZW1hbnRpYykpXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiTG9naWNhbEV4cHJlc3Npb25cIiAmJiBbXCImJlwiLCBcInx8XCJdLmluY2x1ZGVzKG5vZGUub3BlcmF0b3IpKSB7XG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IFwiQmluYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbGVmdDogY29udmVydEV4cHJlc3Npb24obm9kZS5sZWZ0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJpZ2h0OiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnJpZ2h0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9LCB7XG4gICAgICBvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihub2RlLCBub2RlLm9wZXJhdG9yLCBub2RlLmxlZnQuZW5kID8/IG5vZGUuc3RhcnQgPz8gMCwgbm9kZS5yaWdodC5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pLCBub2RlLm9wZXJhdG9yID09IFwiJiZcIiA/IFwiQW5kXCIgOiBcIk9yXCIpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIiAmJiBub2RlLm9wZXJhdG9yID09IFwiIT09XCIgJiYgbm9kZS5sZWZ0LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICBub2RlLnJpZ2h0LnR5cGUgPT0gXCJOdWxsTGl0ZXJhbFwiKSB7XG4gICAgY29uc3Qgb3BlcmFuZCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSWRlbnRpZmllckV4cHJlc3Npb259ICovIChcbiAgICAgIGNvbnZlcnRFeHByZXNzaW9uKG5vZGUubGVmdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHVuZGVmaW5lZCwgdHJ1ZSlcbiAgICApXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxJc1ByZXNlbnRcIiksIGxvY2F0aW9uLCBvcGVyYW5kfSwge1xuICAgICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24obm9kZSwgbm9kZS5vcGVyYXRvciwgbm9kZS5sZWZ0LmVuZCA/PyBub2RlLnN0YXJ0ID8/IDAsIG5vZGUucmlnaHQuc3RhcnQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIiAmJiBiYWJlbEJpbmFyeU9wZXJhdGlvbnMuaGFzKG5vZGUub3BlcmF0b3IpKSB7XG4gICAgaWYgKG5vZGUubGVmdC50eXBlID09IFwiUHJpdmF0ZU5hbWVcIikgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIG5vZGUubGVmdC50eXBlLCBsb2NhdGlvbilcblxuICAgIGNvbnN0IGxlZnQgPSBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmxlZnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIGNvbnN0IHJpZ2h0ID0gY29udmVydEV4cHJlc3Npb24obm9kZS5yaWdodCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG5cbiAgICBjb25zdCBzZW1hbnRpYyA9IHdpdGhBZGFwdGVkT3BlcmF0aW9uKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogXCJCaW5hcnlFeHByZXNzaW9uXCIsXG4gICAgICBsZWZ0LFxuICAgICAgbG9jYXRpb24sXG4gICAgICByaWdodFxuICAgIH0sIHtcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKG5vZGUsIG5vZGUub3BlcmF0b3IsIG5vZGUubGVmdC5lbmQgPz8gbm9kZS5zdGFydCA/PyAwLCBub2RlLnJpZ2h0LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSksIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCIpLkFkYXB0ZWRPcGVyYXRpb259ICovIChiYWJlbEJpbmFyeU9wZXJhdGlvbnMuZ2V0KG5vZGUub3BlcmF0b3IpKSlcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChzZW1hbnRpYykpXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiQmluYXJ5RXhwcmVzc2lvblwiICYmIFtcIj09XCIsIFwiIT1cIl0uaW5jbHVkZXMobm9kZS5vcGVyYXRvcikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGBjb2VyY2l2ZSBlcXVhbGl0eSAke25vZGUub3BlcmF0b3J9YCwgbG9jYXRpb24pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgaWYgKG5vZGUub3B0aW9uYWwgfHwgbm9kZS5jYWxsZWUub3B0aW9uYWwgfHwgbm9kZS50eXBlQXJndW1lbnRzIHx8IG5vZGUudHlwZVBhcmFtZXRlcnMpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJvcHRpb25hbCBvciBnZW5lcmljIGNhbGxcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNvbnRleHQuZnVuY3Rpb25zLmdldChub2RlLmNhbGxlZS5uYW1lKVxuICAgIGNvbnN0IGFyZ3VtZW50c18gPSBub2RlLmFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGFyZ3VtZW50LnR5cGUgPT0gXCJTcHJlYWRFbGVtZW50XCIgfHwgYXJndW1lbnQudHlwZSA9PSBcIkFyZ3VtZW50UGxhY2Vob2xkZXJcIikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGFyZ3VtZW50LnR5cGUsIG5vZGVMb2NhdGlvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHNpZ25hdHVyZT8ucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUsXG4gICAgICAgIHByZXNlcnZlc0dlbmVyaWNPcHRpb25hbEV2aWRlbmNlKHNpZ25hdHVyZSwgaW5kZXgpKVxuICAgIH0pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudHNfLCBjYWxsZWU6IG5vZGUuY2FsbGVlLm5hbWUsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhbGxFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sIHtcbiAgICAgIGNhbGxlZTogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuY2FsbGVlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiAhbm9kZS5vcHRpb25hbCAmJiAhbm9kZS50eXBlQXJndW1lbnRzICYmICFub2RlLnR5cGVQYXJhbWV0ZXJzICYmXG4gICAgbm9kZS5jYWxsZWUudHlwZSA9PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJiAhbm9kZS5jYWxsZWUuY29tcHV0ZWQgJiYgIW5vZGUuY2FsbGVlLm9wdGlvbmFsICYmXG4gICAgbm9kZS5jYWxsZWUub2JqZWN0LnR5cGUgIT0gXCJTdXBlclwiICYmIG5vZGUuY2FsbGVlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5jYWxsZWUub2JqZWN0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChyZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIgfHwgcmVjZWl2ZXJUeXBlPy5raW5kID09IFwiT3duZWRSZWZlcmVuY2VUeXBlXCIpIHtcbiAgICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gY29udGV4dC5jbGFzc2VzLmdldChyZWNlaXZlclR5cGUuZGVjbGFyYXRpb25JZClcbiAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBub2RlLmNhbGxlZS5wcm9wZXJ0eS5uYW1lXG4gICAgICBjb25zdCBtZXRob2QgPSBkZWNsYXJhdGlvbj8ubWV0aG9kcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5uYW1lID09IG1ldGhvZE5hbWUpXG4gICAgICBjb25zdCBhcmd1bWVudHNfID0gbm9kZS5hcmd1bWVudHMubWFwKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGFyZ3VtZW50LnR5cGUgPT0gXCJTcHJlYWRFbGVtZW50XCIgfHwgYXJndW1lbnQudHlwZSA9PSBcIkFyZ3VtZW50UGxhY2Vob2xkZXJcIikge1xuICAgICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYXJndW1lbnQudHlwZSwgbm9kZUxvY2F0aW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIG1ldGhvZD8ucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUpXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudHNfLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNZXRob2RDYWxsRXhwcmVzc2lvblwiKSwgbG9jYXRpb24sXG4gICAgICAgIG1ldGhvZDogbWV0aG9kPy5pZCA/PyBub2RlLmNhbGxlZS5wcm9wZXJ0eS5uYW1lLFxuICAgICAgICByZWNlaXZlcjogY29udmVydEV4cHJlc3Npb24obm9kZS5jYWxsZWUub2JqZWN0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCl9LFxuICAgICAge21lbWJlcjogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuY2FsbGVlLnByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkNhbGxFeHByZXNzaW9uXCIgJiYgIW5vZGUub3B0aW9uYWwgJiYgIW5vZGUudHlwZUFyZ3VtZW50cyAmJiAhbm9kZS50eXBlUGFyYW1ldGVycyAmJlxuICAgIG5vZGUuY2FsbGVlLnR5cGUgPT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiYgIW5vZGUuY2FsbGVlLmNvbXB1dGVkICYmICFub2RlLmNhbGxlZS5vcHRpb25hbCAmJlxuICAgIG5vZGUuY2FsbGVlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJiBub2RlLmNhbGxlZS5wcm9wZXJ0eS50eXBlID09IFwiSWRlbnRpZmllclwiICYmXG4gICAgbm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSA9PSBcImdldFwiKSB7XG4gICAgaWYgKG5vZGUuYXJndW1lbnRzLmxlbmd0aCAhPSAxKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiTWFwLmdldCBhcmd1bWVudCBjb3VudFwiLCBsb2NhdGlvbilcbiAgICBjb25zdCBrZXkgPSBub2RlLmFyZ3VtZW50c1swXVxuXG4gICAgaWYgKGtleS50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGtleS50eXBlID09IFwiQXJndW1lbnRQbGFjZWhvbGRlclwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGtleS50eXBlLCBub2RlTG9jYXRpb24oa2V5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBjb2xsZWN0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmNhbGxlZS5vYmplY3QsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGtleTogY29udmVydEV4cHJlc3Npb24oa2V5LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNYXBMb29rdXBFeHByZXNzaW9uXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICB0b3RhbGl0eTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwicHJvdmVuXCIpXG4gICAgfSwge29wZXJhdG9yOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5jYWxsZWUucHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgbm9kZS50eXBlLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBvbmx5IGV4cHJlc3Npb24gcmVzdWx0IHR5cGVzIGFscmVhZHkgZXN0YWJsaXNoZWQgYnkgZXhwbGljaXQgbW9kdWxlXG4gKiBzaWduYXR1cmVzIGFuZCBjb2xsZWN0aW9uIGJpbmRpbmdzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRXhwcmVzc2lvbn0gbm9kZSAtIFBhcnNlci1vd25lZCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JUeXBlIHwgdW5kZWZpbmVkfSBLbm93biByZXN1bHQgdHlwZS5cbiAqL1xuZnVuY3Rpb24ga25vd25FeHByZXNzaW9uVHlwZShub2RlLCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAobm9kZS50eXBlID09IFwiVFNOb25OdWxsRXhwcmVzc2lvblwiKSByZXR1cm4ga25vd25FeHByZXNzaW9uVHlwZShub2RlLmV4cHJlc3Npb24sIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKVxuICBpZiAobm9kZS50eXBlID09IFwiSWRlbnRpZmllclwiKSByZXR1cm4gY29udGV4dC5iaW5kaW5ncy5nZXQobm9kZS5uYW1lKVxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KG5vZGUuY2FsbGVlLm5hbWUpXG5cbiAgICBpZiAoc2lnbmF0dXJlKSByZXR1cm4ga25vd25DYWxsUmV0dXJuVHlwZShzaWduYXR1cmUsIG5vZGUuYXJndW1lbnRzLm1hcCgoYXJndW1lbnQpID0+XG4gICAgICBhcmd1bWVudC50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGFyZ3VtZW50LnR5cGUgPT0gXCJBcmd1bWVudFBsYWNlaG9sZGVyXCJcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiBrbm93bkV4cHJlc3Npb25UeXBlKGFyZ3VtZW50LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSkpKVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJOZXdFeHByZXNzaW9uXCIgJiYgbm9kZS5jYWxsZWUudHlwZSA9PSBcIklkZW50aWZpZXJcIikge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gY29udGV4dC52YWx1ZVJlY29yZE5hbWVzLmdldChub2RlLmNhbGxlZS5uYW1lKVxuXG4gICAgaWYgKGRlY2xhcmF0aW9uPy5pZCkge1xuICAgICAgaWYgKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpIHJldHVybiB7ZGVjbGFyYXRpb25JZDogZGVjbGFyYXRpb24uaWQsXG4gICAgICAgIGtpbmQ6IGRlY2xhcmF0aW9uLm93bmVyc2hpcD8ua2luZCA9PSBcIm93bmVkUmVzb3VyY2VcIiA/IFwiT3duZWRSZWZlcmVuY2VUeXBlXCIgOiBcIlJlZmVyZW5jZVR5cGVcIn1cbiAgICAgIGNvbnN0IHNvdXJjZUFyZ3VtZW50cyA9IG5vZGUudHlwZUFyZ3VtZW50cz8ucGFyYW1zID8/IG5vZGUudHlwZVBhcmFtZXRlcnM/LnBhcmFtc1xuICAgICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHNvdXJjZUFyZ3VtZW50cz8ubWFwKCgvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5UU1R5cGV9ICovIGFyZ3VtZW50KSA9PlxuICAgICAgICBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUoXG4gICAgICAgICAgYXJndW1lbnQsXG4gICAgICAgICAgYFJlY29yZCAnJHtkZWNsYXJhdGlvbi5uYW1lfScgYXBwbGljYXRpb25gLFxuICAgICAgICAgIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgY29udGV4dC5yZWNvcmROYW1lcyxcbiAgICAgICAgICBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzXG4gICAgICAgICkpXG5cbiAgICAgIHJldHVybiB7ZGVjbGFyYXRpb25JZDogZGVjbGFyYXRpb24uaWQsIGtpbmQ6IFwiUmVjb3JkVHlwZVwiLCAuLi4odHlwZUFyZ3VtZW50cyA/IHthcmd1bWVudHM6IHR5cGVBcmd1bWVudHN9IDoge30pfVxuICAgIH1cbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiVGhpc0V4cHJlc3Npb25cIiAmJiBjb250ZXh0LmN1cnJlbnRDbGFzcz8uaWQpIHtcbiAgICByZXR1cm4ge2RlY2xhcmF0aW9uSWQ6IGNvbnRleHQuY3VycmVudENsYXNzLmlkLCBraW5kOiBcIlJlZmVyZW5jZVR5cGVcIn1cbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFub2RlLmNhbGxlZS5jb21wdXRlZCAmJlxuICAgIG5vZGUuY2FsbGVlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJiBub2RlLmNhbGxlZS5wcm9wZXJ0eS50eXBlID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgY29uc3QgcmVjZWl2ZXIgPSBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5jYWxsZWUub2JqZWN0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChyZWNlaXZlcj8ua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIikge1xuICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IG5vZGUuY2FsbGVlLnByb3BlcnR5Lm5hbWVcblxuICAgICAgcmV0dXJuIGNvbnRleHQuY2xhc3Nlcy5nZXQocmVjZWl2ZXIuZGVjbGFyYXRpb25JZCk/Lm1ldGhvZHMuZmluZCgobWV0aG9kKSA9PiBtZXRob2QubmFtZSA9PSBtZXRob2ROYW1lKT8ucmV0dXJuVHlwZVxuICAgIH1cbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFub2RlLmNvbXB1dGVkICYmIG5vZGUub2JqZWN0LnR5cGUgPT0gXCJUaGlzRXhwcmVzc2lvblwiICYmIGNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgaWYgKGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiICYmIG5vZGUucHJvcGVydHkudHlwZSA9PSBcIlByaXZhdGVOYW1lXCIpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBub2RlLnByb3BlcnR5LmlkLm5hbWVcblxuICAgICAgcmV0dXJuIGNvbnRleHQuY3VycmVudENsYXNzLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQubmFtZSA9PSBuYW1lKT8udHlwZVxuICAgIH1cbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgJiYgbm9kZS5wcm9wZXJ0eS50eXBlID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgICBjb25zdCBuYW1lID0gbm9kZS5wcm9wZXJ0eS5uYW1lXG5cbiAgICAgIHJldHVybiBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbmFtZSk/LnR5cGVcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJiAhbm9kZS5jb21wdXRlZCAmJiBub2RlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJiBub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICBjb25zdCByZWNlaXZlciA9IGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLm9iamVjdCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAocmVjZWl2ZXI/LmtpbmQgIT0gXCJSZWNvcmRUeXBlXCIpIHJldHVybiB1bmRlZmluZWRcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGNvbnRleHQucmVjb3Jkcy5nZXQocmVjZWl2ZXIuZGVjbGFyYXRpb25JZClcbiAgICBjb25zdCBtZW1iZXJOYW1lID0gbm9kZS5wcm9wZXJ0eS5uYW1lXG4gICAgY29uc3QgaW5kZXggPSBkZWNsYXJhdGlvbj8uZmllbGRzLmZpbmRJbmRleCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbWVtYmVyTmFtZSkgPz8gLTFcblxuICAgIHJldHVybiBkZWNsYXJhdGlvbiA/IGluc3RhbnRpYXRlZFJlY29yZEZpZWxkVHlwZShkZWNsYXJhdGlvbiwgcmVjZWl2ZXIuYXJndW1lbnRzLCBpbmRleCkgOiB1bmRlZmluZWRcbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmIG5vZGUuY29tcHV0ZWQgJiYgbm9kZS5vYmplY3QudHlwZSAhPSBcIlN1cGVyXCIpIHtcbiAgICBjb25zdCBjb2xsZWN0aW9uVHlwZSA9IGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLm9iamVjdCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAoY29sbGVjdGlvblR5cGU/LmtpbmQgPT0gXCJMaXN0VHlwZVwiKSByZXR1cm4gY29sbGVjdGlvblR5cGUuZWxlbWVudFR5cGVcbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmXG4gICAgIW5vZGUuY2FsbGVlLmNvbXB1dGVkICYmIG5vZGUuY2FsbGVlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJlxuICAgIG5vZGUuY2FsbGVlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiYgbm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSA9PSBcImdldFwiKSB7XG4gICAgY29uc3QgY29sbGVjdGlvblR5cGUgPSBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5jYWxsZWUub2JqZWN0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIiB8fCBjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHJldHVybiBjb2xsZWN0aW9uVHlwZS52YWx1ZVR5cGVcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgdmFsdWUgdHlwZSBwcm9kdWNlZCBieSB0aGUgZnJvbnRlbmQncyBpbXBsaWNpdCBvcHRpb25hbC1iaW5kaW5nIHVud3JhcC5cbiAqIFNlbWFudGljIHZhbGlkYXRpb24gc2VwYXJhdGVseSBwcm92ZXMgdGhhdCB0aGUgdW53cmFwIG9jY3VycyBvbmx5IG9uIGEgcHJlc2VudCBwYXRoLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRXhwcmVzc2lvbn0gbm9kZSAtIFBhcnNlci1vd25lZCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JUeXBlIHwgdW5kZWZpbmVkfSBDb252ZXJ0ZWQgdmFsdWUgdHlwZS5cbiAqL1xuZnVuY3Rpb24ga25vd25WYWx1ZUV4cHJlc3Npb25UeXBlKG5vZGUsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IHR5cGUgPSBrbm93bkV4cHJlc3Npb25UeXBlKG5vZGUsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIHJldHVybiBub2RlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiYgdHlwZT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiID8gdHlwZS52YWx1ZVR5cGUgOiB0eXBlXG59XG5cbi8qKlxuICogUmV0dXJucyBhIHN0YWJsZSBwYXJzZXItYm91bmRlZCBsb2NhdGlvbiBmb3Igb25lIGFic2VudCBhcnJheSBlbGVtZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQXJyYXlFeHByZXNzaW9ufSBub2RlIC0gQXJyYXkgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIE1pc3NpbmcgZWxlbWVudCBpbmRleC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEhvbGUgbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGFycmF5SG9sZUxvY2F0aW9uKG5vZGUsIGluZGV4LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IHByZXZpb3VzID0gbm9kZS5lbGVtZW50cy5zbGljZSgwLCBpbmRleCkuZmluZExhc3QoKGVsZW1lbnQpID0+IGVsZW1lbnQgIT0gbnVsbClcbiAgY29uc3QgbmV4dCA9IG5vZGUuZWxlbWVudHMuc2xpY2UoaW5kZXggKyAxKS5maW5kKChlbGVtZW50KSA9PiBlbGVtZW50ICE9IG51bGwpXG4gIGNvbnN0IHN0YXJ0ID0gcHJldmlvdXM/LmVuZCA/PyAobm9kZS5zdGFydCA/PyAwKSArIDFcbiAgY29uc3QgZW5kID0gbmV4dD8uc3RhcnQgPz8gTWF0aC5tYXgoc3RhcnQgKyAxLCAobm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCkgLSAxKVxuXG4gIHJldHVybiBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIHN0YXJ0LCBNYXRoLm1heChzdGFydCArIDEsIE1hdGgubWluKGVuZCwgc291cmNlLmxlbmd0aCkpKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3VwcG9ydGVkIHJldHVybiBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnR9IG5vZGUgLSBCYWJlbCBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZXR1cm5TdGF0ZW1lbnR9IFNlbWFudGljIHJldHVybi5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJldHVybihub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLnR5cGUgIT0gXCJSZXR1cm5TdGF0ZW1lbnRcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBub2RlLnR5cGUsIGxvY2F0aW9uKVxuXG4gIHJldHVybiB7XG4gICAgLi4uKG5vZGUuYXJndW1lbnQgPyB7ZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oXG4gICAgICBub2RlLmFyZ3VtZW50LFxuICAgICAgbGFuZ3VhZ2UsXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIHNvdXJjZSxcbiAgICAgIGNvbnRleHQsXG4gICAgICBjb250ZXh0LnJldHVyblR5cGU/LmtpbmQgPT0gXCJUeXBlUmVmZXJlbmNlXCIgJiYgY29udGV4dC5yZXR1cm5UeXBlLm5hbWUgPT0gXCJ2b2lkXCIgPyB1bmRlZmluZWQgOiBjb250ZXh0LnJldHVyblR5cGVcbiAgICApfSA6IHt9KSxcbiAgICBraW5kOiBcIlJldHVyblN0YXRlbWVudFwiLFxuICAgIGxvY2F0aW9uXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgc3VwcG9ydGVkIGxvY2FsIGRlY2xhcmF0aW9uIG9yIGFzc2lnbm1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnR9IG5vZGUgLSBCYWJlbCBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Mb2NhbFN0YXRlbWVudCB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50fSBTZW1hbnRpYyBsb2NhbCBvciBwcml2YXRlLWZpZWxkIHN0YXRlbWVudC5cbiAqL1xuZnVuY3Rpb24gY29udmVydExvY2FsU3RhdGVtZW50KG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIikge1xuICAgIGlmICghW1wibGV0XCIsIFwiY29uc3RcIl0uaW5jbHVkZXMobm9kZS5raW5kKSB8fCBub2RlLmRlY2xhcmF0aW9ucy5sZW5ndGggIT0gMSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBgJHtub2RlLmtpbmR9IGRlY2xhcmF0aW9uYCwgbG9jYXRpb24pXG4gICAgfVxuXG4gICAgY29uc3QgZGVjbGFyYXRvciA9IG5vZGUuZGVjbGFyYXRpb25zWzBdXG4gICAgY29uc3QgZGVjbGFyYXRvckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGRlY2xhcmF0b3IsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAoZGVjbGFyYXRvci5pZC50eXBlICE9IFwiSWRlbnRpZmllclwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGRlY2xhcmF0b3IuaWQudHlwZSwgZGVjbGFyYXRvckxvY2F0aW9uKVxuICAgIGlmICghZGVjbGFyYXRvci5pbml0KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidW5pbml0aWFsaXplZCBkZWNsYXJhdGlvblwiLCBkZWNsYXJhdG9yTG9jYXRpb24pXG5cbiAgICBsZXQgdHlwZSA9IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiXG4gICAgICA/IGNvbnZlcnRUeXBlU2NyaXB0VHlwZShkZWNsYXJhdG9yLmlkLnR5cGVBbm5vdGF0aW9uLCBgTG9jYWwgJyR7ZGVjbGFyYXRvci5pZC5uYW1lfSdgLCBkZWNsYXJhdG9yTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgICAgIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG4gICAgICA6IGxvY2FsSmF2YVNjcmlwdFR5cGUobm9kZSwgZGVjbGFyYXRvci5pZC5uYW1lLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuXG4gICAgaWYgKG5vZGUua2luZCA9PSBcImNvbnN0XCIgJiYgdHlwZS5raW5kID09IFwiTWFwVHlwZVwiICYmIGNvbnRleHQub3JkZXJlZE1hcERlY2xhcmF0aW9ucz8uaGFzKGRlY2xhcmF0b3IpICYmXG4gICAgICBkZWNsYXJhdG9yLmluaXQudHlwZSA9PSBcIk5ld0V4cHJlc3Npb25cIiAmJiBkZWNsYXJhdG9yLmluaXQuY2FsbGVlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAgIGRlY2xhcmF0b3IuaW5pdC5jYWxsZWUubmFtZSA9PSBcIk1hcFwiICYmIG5hdGl2ZU1hcEF2YWlsYWJsZShjb250ZXh0KSkge1xuICAgICAgdHlwZSA9IG9yZGVyZWRNYXBUeXBlRnJvbU1hcCh0eXBlLCBkZWNsYXJhdG9yTG9jYXRpb24pXG4gICAgfVxuXG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGluaXRpYWxpemVyOiBjb252ZXJ0RXhwcmVzc2lvbihkZWNsYXJhdG9yLmluaXQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCB0eXBlKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkxvY2FsRGVjbGFyYXRpb25cIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG11dGFibGU6IG5vZGUua2luZCA9PSBcImxldFwiLFxuICAgICAgbmFtZTogZGVjbGFyYXRvci5pZC5uYW1lLFxuICAgICAgdHlwZVxuICAgIH0sIHtcbiAgICAgIG5hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihkZWNsYXJhdG9yLmlkLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKGRlY2xhcmF0b3IsIFwiPVwiLCBkZWNsYXJhdG9yLmlkLmVuZCA/PyBkZWNsYXJhdG9yLnN0YXJ0ID8/IDAsIGRlY2xhcmF0b3IuaW5pdC5zdGFydCA/PyBkZWNsYXJhdG9yLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG5cbiAgICBjb250ZXh0LmJpbmRpbmdzLnNldChkZWNsYXJhdG9yLmlkLm5hbWUsIHR5cGUpXG4gICAgcmV0dXJuIHNlbWFudGljXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiICYmIG5vZGUuZXhwcmVzc2lvbi50eXBlID09IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBub2RlLmV4cHJlc3Npb25cbiAgICBjb25zdCB0YXJnZXRMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihhc3NpZ25tZW50LmxlZnQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAoYXNzaWdubWVudC5vcGVyYXRvciAhPSBcIj1cIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBgYXNzaWdubWVudCAke2Fzc2lnbm1lbnQub3BlcmF0b3J9YCwgbG9jYXRpb24pXG4gICAgaWYgKGFzc2lnbm1lbnQubGVmdC50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFhc3NpZ25tZW50LmxlZnQuY29tcHV0ZWQgJiZcbiAgICAgIGFzc2lnbm1lbnQubGVmdC5vYmplY3QudHlwZSA9PSBcIlRoaXNFeHByZXNzaW9uXCIgJiYgY29udGV4dC5jdXJyZW50Q2xhc3MpIHtcbiAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLklkZW50aWZpZXIgfCB1bmRlZmluZWR9ICovXG4gICAgICBsZXQgcHJvcGVydHlcblxuICAgICAgaWYgKGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiICYmIGFzc2lnbm1lbnQubGVmdC5wcm9wZXJ0eS50eXBlID09IFwiUHJpdmF0ZU5hbWVcIikgcHJvcGVydHkgPSBhc3NpZ25tZW50LmxlZnQucHJvcGVydHkuaWRcbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiAmJiBhc3NpZ25tZW50LmxlZnQucHJvcGVydHkudHlwZSA9PSBcIklkZW50aWZpZXJcIikgcHJvcGVydHkgPSBhc3NpZ25tZW50LmxlZnQucHJvcGVydHlcbiAgICAgIGlmICghcHJvcGVydHkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJub25jYW5vbmljYWwgcHJpdmF0ZSBpbnN0YW5jZSBmaWVsZCBhc3NpZ25tZW50XCIsIGxvY2F0aW9uKVxuICAgICAgY29uc3QgZmllbGQgPSBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBwcm9wZXJ0eS5uYW1lKVxuXG4gICAgICBpZiAoIWZpZWxkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGB1bmtub3duIHByaXZhdGUgZmllbGQgJyR7cHJvcGVydHkubmFtZX0nYCwgaWRlbnRpZmllckxvY2F0aW9uKHByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oYXNzaWdubWVudC5yaWdodCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGZpZWxkLnR5cGUpLFxuICAgICAgICBmaWVsZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChmaWVsZC5pZCksXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50XCIpLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgcmVjZWl2ZXI6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjZWl2ZXJFeHByZXNzaW9ufSAqLyAoXG4gICAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXNzaWdubWVudC5sZWZ0Lm9iamVjdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKVxuICAgICAgfSwge21lbWJlcjogaWRlbnRpZmllckxvY2F0aW9uKHByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKSwgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24oYXNzaWdubWVudCwgXCI9XCIsXG4gICAgICAgIGFzc2lnbm1lbnQubGVmdC5lbmQgPz8gYXNzaWdubWVudC5zdGFydCA/PyAwLCBhc3NpZ25tZW50LnJpZ2h0LnN0YXJ0ID8/IGFzc2lnbm1lbnQuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKGFzc2lnbm1lbnQubGVmdC50eXBlICE9IFwiSWRlbnRpZmllclwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGFzc2lnbm1lbnQubGVmdC50eXBlLCB0YXJnZXRMb2NhdGlvbilcblxuICAgIGNvbnN0IHRhcmdldCA9IHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbjogdGFyZ2V0TG9jYXRpb24sIG5hbWU6IGFzc2lnbm1lbnQubGVmdC5uYW1lfSwge1xuICAgICAgbmFtZTogaWRlbnRpZmllckxvY2F0aW9uKGFzc2lnbm1lbnQubGVmdCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuXG4gICAgY29uc3QgYmluZGluZ1R5cGUgPSBjb250ZXh0LmJpbmRpbmdzLmdldChhc3NpZ25tZW50LmxlZnQubmFtZSlcbiAgICBjb25zdCBzZW1hbnRpYyA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oYXNzaWdubWVudC5yaWdodCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsXG4gICAgICAgIGJpbmRpbmdUeXBlPy5raW5kID09IFwiRXJyb3JUeXBlXCIgPyB1bmRlZmluZWQgOiBiaW5kaW5nVHlwZSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJBc3NpZ25tZW50U3RhdGVtZW50XCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICB0YXJnZXRcbiAgICB9LCB7XG4gICAgICBvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihhc3NpZ25tZW50LCBcIj1cIiwgYXNzaWdubWVudC5sZWZ0LmVuZCA/PyBhc3NpZ25tZW50LnN0YXJ0ID8/IDAsIGFzc2lnbm1lbnQucmlnaHQuc3RhcnQgPz8gYXNzaWdubWVudC5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHNlbWFudGljXG4gIH1cblxuICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIG5vZGUudHlwZSwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogUmVhZHMgYW4gaW1tZWRpYXRlbHkgYXNzb2NpYXRlZCBKYXZhU2NyaXB0IGxvY2FsIGBAdHlwZWAgdGFnLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVmFyaWFibGVEZWNsYXJhdGlvbn0gbm9kZSAtIExvY2FsIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBMb2NhbCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXI+fSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IFNlbWFudGljIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGxvY2FsSmF2YVNjcmlwdFR5cGUobm9kZSwgbmFtZSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGNvbnN0IGNvbW1lbnQgPSBub2RlLmxlYWRpbmdDb21tZW50cz8uYXQoLTEpXG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKCFjb21tZW50IHx8IGNvbW1lbnQudHlwZSAhPSBcIkNvbW1lbnRCbG9ja1wiIHx8ICFjb21tZW50LnZhbHVlLnN0YXJ0c1dpdGgoXCIqXCIpKSB7XG4gICAgcmV0dXJuIG1pc3NpbmdUeXBlKFwiamF2YXNjcmlwdFwiLCBgTG9jYWwgJyR7bmFtZX0nYCwgbG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBnYXAgPSBzb3VyY2Uuc2xpY2UoY29tbWVudC5lbmQgPz8gMCwgbm9kZS5zdGFydCA/PyAwKVxuXG4gIGlmICghL15cXHMqJC91LnRlc3QoZ2FwKSB8fCAoZ2FwLm1hdGNoKC9cXG4vZ3UpPy5sZW5ndGggPz8gMCkgPiAxKSB7XG4gICAgcmV0dXJuIG1pc3NpbmdUeXBlKFwiamF2YXNjcmlwdFwiLCBgTG9jYWwgJyR7bmFtZX0nYCwgbG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBibG9jayA9IHBhcnNlQ29tbWVudChgLyoke2NvbW1lbnQudmFsdWV9Ki9gKVswXVxuICBjb25zdCB0YWdzID0gYmxvY2s/LnRhZ3MuZmlsdGVyKCh0YWcpID0+IHRhZy50YWcgPT0gXCJ0eXBlXCIpID8/IFtdXG5cbiAgY29uc3QgdGFnID0gdGFncy5sZW5ndGggPT0gMSA/IHRhZ3NbMF0gOiB1bmRlZmluZWRcblxuICByZXR1cm4gY29udmVydFR5cGUoXG4gICAgdGFnPy50eXBlLFxuICAgIFwiamF2YXNjcmlwdFwiLFxuICAgIGBMb2NhbCAnJHtuYW1lfSdgLFxuICAgIGxvY2F0aW9uLFxuICAgIHNvdXJjZSxcbiAgICB0YWcgPyBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudCwgdGFnLCBcInR5cGVcIiwgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvbixcbiAgICByZWNvcmROYW1lcyxcbiAgICB0eXBlUGFyYW1ldGVyc1xuICApXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4aGF1c3RpdmUgQmFiZWwgc3RhdGVtZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuU3RhdGVtZW50fSBub2RlIC0gQmFiZWwgc3RhdGVtZW50LlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2Fub25pY2FsWmVyb1JlcXVpcmVkIC0gV2hldGhlciBnZW5lcmF0ZWQgc2NhbGFyIG91dHB1dCBtYXkgY29udGFpbiBzaWduZWQgemVyby5cbiAqIEBwYXJhbSB7SmF2YVNjcmlwdENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RhdGVtZW50fSBTZW1hbnRpYyBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRTdGF0ZW1lbnQobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dCkge1xuICBpZiAobm9kZS50eXBlID09IFwiUmV0dXJuU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0UmV0dXJuKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAobm9kZS50eXBlID09IFwiSWZTdGF0ZW1lbnRcIikgcmV0dXJuIGNvbnZlcnRJZihub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KVxuICBpZiAobm9kZS50eXBlID09IFwiVGhyb3dTdGF0ZW1lbnRcIikgcmV0dXJuIGNvbnZlcnRUeXBlZFRocm93KG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAobm9kZS50eXBlID09IFwiVHJ5U3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0VHlwZWRUcnkobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dClcbiAgaWYgKG5vZGUudHlwZSA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0V2hpbGUobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dClcbiAgaWYgKG5vZGUudHlwZSA9PSBcIkZvck9mU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0Rm9yRWFjaChub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KVxuICBpZiAobm9kZS50eXBlID09IFwiQnJlYWtTdGF0ZW1lbnRcIiB8fCBub2RlLnR5cGUgPT0gXCJDb250aW51ZVN0YXRlbWVudFwiKSB7XG4gICAgaWYgKG5vZGUubGFiZWwpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYGxhYmVsZWQgJHtub2RlLnR5cGUgPT0gXCJCcmVha1N0YXRlbWVudFwiID8gXCJicmVha1wiIDogXCJjb250aW51ZVwifWAsXG4gICAgICBub2RlTG9jYXRpb24obm9kZS5sYWJlbCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3Qga2V5d29yZCA9IG5vZGUudHlwZSA9PSBcIkJyZWFrU3RhdGVtZW50XCIgPyBcImJyZWFrXCIgOiBcImNvbnRpbnVlXCJcbiAgICBjb25zdCBsb2NhdGlvbiA9IHRva2VuTG9jYXRpb24obm9kZSwga2V5d29yZCwgbm9kZS5zdGFydCA/PyAwLCBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IG5vZGUudHlwZSwgbG9jYXRpb259LCB7a2V5d29yZDogbG9jYXRpb259KVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIgfHwgbm9kZS50eXBlID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiICYmIG5vZGUuZXhwcmVzc2lvbi50eXBlID09IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBjb252ZXJ0TG9jYWxTdGF0ZW1lbnQobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIikge1xuICAgIGlmIChub2RlLmV4cHJlc3Npb24udHlwZSA9PSBcIkNhbGxFeHByZXNzaW9uXCIgJiYgKG5vZGUuZXhwcmVzc2lvbi5jYWxsZWUudHlwZSA9PSBcIklkZW50aWZpZXJcIiB8fFxuICAgICAgbm9kZS5leHByZXNzaW9uLmNhbGxlZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFub2RlLmV4cHJlc3Npb24uY2FsbGVlLmNvbXB1dGVkICYmXG4gICAgICBub2RlLmV4cHJlc3Npb24uY2FsbGVlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJlxuICAgICAgW1wiUmVmZXJlbmNlVHlwZVwiLCBcIk93bmVkUmVmZXJlbmNlVHlwZVwiXS5pbmNsdWRlcyhTdHJpbmcoXG4gICAgICAgIGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLmV4cHJlc3Npb24uY2FsbGVlLm9iamVjdCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpPy5raW5kKSkpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBleHByZXNzaW9uOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNhbGxFeHByZXNzaW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTWV0aG9kQ2FsbEV4cHJlc3Npb259ICovIChcbiAgICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24sIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgICAgICApLFxuICAgICAgICBraW5kOiBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIixcbiAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0UHJpbnQobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dClcbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgbm9kZS50eXBlLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG59XG5cbi8qKlxuICogQ29udmVydHMgZXhhY3QgYHRocm93IG5ldyBEZWNsYXJlZEVycm9yKG1lc3NhZ2UpYC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlRocm93U3RhdGVtZW50fSBub2RlIC0gQmFiZWwgdGhyb3cgc3RhdGVtZW50LlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YVNjcmlwdENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJhaXNlU3RhdGVtZW50fSBTZW1hbnRpYyByYWlzZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGVkVGhyb3cobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYXJndW1lbnQgPSBub2RlLmFyZ3VtZW50XG5cbiAgaWYgKCFhcmd1bWVudCB8fCBhcmd1bWVudC50eXBlICE9IFwiTmV3RXhwcmVzc2lvblwiIHx8IGFyZ3VtZW50LmNhbGxlZS50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8XG4gICAgY29udGV4dC5iaW5kaW5ncy5oYXMoYXJndW1lbnQuY2FsbGVlLm5hbWUpIHx8ICFjb250ZXh0LmVycm9yTmFtZXMuaGFzKGFyZ3VtZW50LmNhbGxlZS5uYW1lKSB8fCBhcmd1bWVudC5hcmd1bWVudHMubGVuZ3RoICE9IDEgfHxcbiAgICBhcmd1bWVudC5hcmd1bWVudHNbMF0udHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIiB8fCBhcmd1bWVudC5hcmd1bWVudHNbMF0udHlwZSA9PSBcIkFyZ3VtZW50UGxhY2Vob2xkZXJcIiB8fFxuICAgIGFyZ3VtZW50LnR5cGVBcmd1bWVudHMgfHwgYXJndW1lbnQudHlwZVBhcmFtZXRlcnMpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidGhyb3cgb3RoZXIgdGhhbiBleGFjdCBkZWNsYXJlZCBlcnJvciBjb25zdHJ1Y3Rpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259ICovIChjb250ZXh0LmVycm9yTmFtZXMuZ2V0KGFyZ3VtZW50LmNhbGxlZS5uYW1lKSlcbiAgY29uc3QgdHlwZUxvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKGFyZ3VtZW50LmNhbGxlZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgZXJyb3I6IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZXJyb3I6IHdpdGhQYXJzZXJSYW5nZXMoe2RlY2xhcmF0aW9uSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvclR5cGVcIil9LCB7dHlwZTogdHlwZUxvY2F0aW9ufSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvckNvbnN0cnVjdGlvblwiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbWVzc2FnZTogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQuYXJndW1lbnRzWzBdLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9LCB7dHlwZTogdHlwZUxvY2F0aW9ufSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmFpc2VTdGF0ZW1lbnRcIiksXG4gICAgbG9jYXRpb25cbiAgfSwge2tleXdvcmQ6IHRva2VuTG9jYXRpb24obm9kZSwgXCJ0aHJvd1wiLCBub2RlLnN0YXJ0ID8/IDAsIGFyZ3VtZW50LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgY2F0Y2ggd2l0aCB0aGUgY2Fub25pY2FsIGBpbnN0YW5jZW9mYCBndWFyZCBhbmQgZXhhY3QgcmV0aHJvdy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlRyeVN0YXRlbWVudH0gbm9kZSAtIEJhYmVsIHRyeSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBjYW5vbmljYWxaZXJvUmVxdWlyZWQgLSBXaGV0aGVyIHNjYWxhciBvdXRwdXQgY2Fub25pY2FsaXplcyB6ZXJvLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHJ5U3RhdGVtZW50fSBTZW1hbnRpYyBleGFjdCBoYW5kbGVyLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHlwZWRUcnkobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLmZpbmFsaXplciB8fCAhbm9kZS5oYW5kbGVyIHx8IG5vZGUuaGFuZGxlci5wYXJhbT8udHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBub2RlLmhhbmRsZXIuYm9keS5kaXJlY3RpdmVzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidHJ5IHdpdGhvdXQgb25lIGV4cGxpY2l0IGd1YXJkZWQgY2F0Y2hcIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgYmluZGluZyA9IG5vZGUuaGFuZGxlci5wYXJhbVxuICBjb25zdCBndWFyZCA9IG5vZGUuaGFuZGxlci5ib2R5LmJvZHlbMF1cblxuICBpZiAoIWd1YXJkIHx8IGd1YXJkLnR5cGUgIT0gXCJJZlN0YXRlbWVudFwiIHx8IGd1YXJkLmFsdGVybmF0ZSB8fCBndWFyZC50ZXN0LnR5cGUgIT0gXCJVbmFyeUV4cHJlc3Npb25cIiB8fFxuICAgIGd1YXJkLnRlc3Qub3BlcmF0b3IgIT0gXCIhXCIgfHwgZ3VhcmQudGVzdC5hcmd1bWVudC50eXBlICE9IFwiQmluYXJ5RXhwcmVzc2lvblwiIHx8IGd1YXJkLnRlc3QuYXJndW1lbnQub3BlcmF0b3IgIT0gXCJpbnN0YW5jZW9mXCIgfHxcbiAgICBndWFyZC50ZXN0LmFyZ3VtZW50LmxlZnQudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBndWFyZC50ZXN0LmFyZ3VtZW50LmxlZnQubmFtZSAhPSBiaW5kaW5nLm5hbWUgfHxcbiAgICBndWFyZC50ZXN0LmFyZ3VtZW50LnJpZ2h0LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgZ3VhcmQudGVzdC5hcmd1bWVudC5yaWdodC5uYW1lID09IGJpbmRpbmcubmFtZSB8fFxuICAgIGNvbnRleHQuYmluZGluZ3MuaGFzKGd1YXJkLnRlc3QuYXJndW1lbnQucmlnaHQubmFtZSkgfHwgIWNvbnRleHQuZXJyb3JOYW1lcy5oYXMoZ3VhcmQudGVzdC5hcmd1bWVudC5yaWdodC5uYW1lKSB8fFxuICAgIGd1YXJkLmNvbnNlcXVlbnQudHlwZSAhPSBcIkJsb2NrU3RhdGVtZW50XCIgfHwgZ3VhcmQuY29uc2VxdWVudC5ib2R5Lmxlbmd0aCAhPSAxIHx8IGd1YXJkLmNvbnNlcXVlbnQuZGlyZWN0aXZlcy5sZW5ndGggPiAwIHx8XG4gICAgZ3VhcmQuY29uc2VxdWVudC5ib2R5WzBdLnR5cGUgIT0gXCJUaHJvd1N0YXRlbWVudFwiIHx8IGd1YXJkLmNvbnNlcXVlbnQuYm9keVswXS5hcmd1bWVudD8udHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fFxuICAgIGd1YXJkLmNvbnNlcXVlbnQuYm9keVswXS5hcmd1bWVudC5uYW1lICE9IGJpbmRpbmcubmFtZSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJjYXRjaCB3aXRob3V0IGV4YWN0IGluc3RhbmNlb2YgZ3VhcmQgYW5kIHVubWF0Y2hlZCByZXRocm93XCIsIG5vZGVMb2NhdGlvbihndWFyZCA/PyBub2RlLmhhbmRsZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSAqLyAoY29udGV4dC5lcnJvck5hbWVzLmdldChndWFyZC50ZXN0LmFyZ3VtZW50LnJpZ2h0Lm5hbWUpKVxuICBjb25zdCBjYXVnaHRUeXBlTG9jYXRpb24gPSBpZGVudGlmaWVyTG9jYXRpb24oZ3VhcmQudGVzdC5hcmd1bWVudC5yaWdodCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY2F0Y2hUeXBlID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgZGVjbGFyYXRpb25JZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JUeXBlXCIpXG4gIH0sIHt0eXBlOiBjYXVnaHRUeXBlTG9jYXRpb259KVxuICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cbiAgY29uc3QgY2F0Y2hDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpfVxuXG4gIGNhdGNoQ29udGV4dC5iaW5kaW5ncy5zZXQoYmluZGluZy5uYW1lLCBjYXRjaFR5cGUpXG4gIGNvbnN0IGNhdGNoU3RhdGVtZW50cyA9IG5vZGUuaGFuZGxlci5ib2R5LmJvZHkuc2xpY2UoMSlcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKG5vZGUuYmxvY2ssIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGJvZHlDb250ZXh0KSxcbiAgICBjYXRjaEJpbmRpbmc6IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2F0Y2hCaW5kaW5nXCIpLFxuICAgICAgbG9jYXRpb246IGlkZW50aWZpZXJMb2NhdGlvbihiaW5kaW5nLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgICBuYW1lOiBiaW5kaW5nLm5hbWUsXG4gICAgICB0eXBlOiBjYXRjaFR5cGVcbiAgICB9LCB7bmFtZTogaWRlbnRpZmllckxvY2F0aW9uKGJpbmRpbmcsIGZpbGVuYW1lLCBzb3VyY2UpfSksXG4gICAgY2F0Y2hCb2R5OiBjb252ZXJ0QmxvY2soY2F0Y2hTdGF0ZW1lbnRzLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjYXRjaENvbnRleHQsXG4gICAgICBub2RlTG9jYXRpb24obm9kZS5oYW5kbGVyLmJvZHksIGZpbGVuYW1lLCBzb3VyY2UpKSxcbiAgICBjYXRjaFR5cGUsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHJ5U3RhdGVtZW50XCIpLFxuICAgIGxvY2F0aW9uXG4gIH0sIHtcbiAgICBjYXRjaDogdG9rZW5Mb2NhdGlvbihub2RlLmhhbmRsZXIsIFwiY2F0Y2hcIiwgbm9kZS5oYW5kbGVyLnN0YXJ0ID8/IDAsIGJpbmRpbmcuc3RhcnQgPz8gbm9kZS5oYW5kbGVyLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBndWFyZDogbm9kZUxvY2F0aW9uKGd1YXJkLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICB0cnk6IHRva2VuTG9jYXRpb24obm9kZSwgXCJ0cnlcIiwgbm9kZS5zdGFydCA/PyAwLCBub2RlLmJsb2NrLnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIH0pXG59XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGV4YWN0IGJsb2NrLWJvZGllZCBgZm9yIChjb25zdCB2YWx1ZSBvZiBsaXN0KWAgcHJvZmlsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkZvck9mU3RhdGVtZW50fSBub2RlIC0gQmFiZWwgZm9yLW9mIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNhbm9uaWNhbFplcm9SZXF1aXJlZCAtIFdoZXRoZXIgc2NhbGFyIG91dHB1dCBjYW5vbmljYWxpemVzIHplcm8uXG4gKiBAcGFyYW0ge0phdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZvckVhY2hTdGF0ZW1lbnQgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoTWFwU3RhdGVtZW50fSBTZW1hbnRpYyBsb29wLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0Rm9yRWFjaChub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUuYXdhaXQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJhc3luYyBmb3Itb2ZcIiwgbG9jYXRpb24pXG4gIGlmIChub2RlLmxlZnQudHlwZSAhPSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImZvci1vZiBhc3NpZ25tZW50IGJpbmRpbmdcIiwgbm9kZUxvY2F0aW9uKG5vZGUubGVmdCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGlmIChub2RlLmxlZnQua2luZCAhPSBcImNvbnN0XCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGAke25vZGUubGVmdC5raW5kfSBpdGVyYXRpb24gYmluZGluZ2AsIHRva2VuTG9jYXRpb24oXG4gICAgICBub2RlLmxlZnQsXG4gICAgICBub2RlLmxlZnQua2luZCxcbiAgICAgIG5vZGUubGVmdC5zdGFydCA/PyBub2RlLnN0YXJ0ID8/IDAsXG4gICAgICBub2RlLmxlZnQuZW5kID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIHNvdXJjZVxuICAgICkpXG4gIH1cbiAgaWYgKG5vZGUubGVmdC5kZWNsYXJhdGlvbnMubGVuZ3RoICE9IDEpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJtdWx0aXBsZSBpdGVyYXRpb24gYmluZGluZ3NcIiwgbm9kZUxvY2F0aW9uKG5vZGUubGVmdCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGRlY2xhcmF0b3IgPSBub2RlLmxlZnQuZGVjbGFyYXRpb25zWzBdXG5cbiAgaWYgKGRlY2xhcmF0b3IuaWQudHlwZSA9PSBcIkFycmF5UGF0dGVyblwiKSB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gZGVjbGFyYXRvci5pZC5lbGVtZW50c1xuXG4gICAgaWYgKGRlY2xhcmF0b3IuaWQuZWxlbWVudHMubGVuZ3RoICE9IDIgfHwgIWtleSB8fCAhdmFsdWUgfHwga2V5LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgdmFsdWUudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fFxuICAgICAgZGVjbGFyYXRvci5pZC50eXBlQW5ub3RhdGlvbiB8fCBrZXkudHlwZUFubm90YXRpb24gfHwgdmFsdWUudHlwZUFubm90YXRpb24gfHwga2V5Lm9wdGlvbmFsIHx8IHZhbHVlLm9wdGlvbmFsKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibWFwIGl0ZXJhdGlvbiBiaW5kaW5nIHNoYXBlXCIsIG5vZGVMb2NhdGlvbihkZWNsYXJhdG9yLmlkLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgaWYgKGRlY2xhcmF0b3IuaW5pdCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImluaXRpYWxpemVkIGl0ZXJhdGlvbiBiaW5kaW5nXCIsIG5vZGVMb2NhdGlvbihkZWNsYXJhdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBpZiAobm9kZS5ib2R5LnR5cGUgIT0gXCJCbG9ja1N0YXRlbWVudFwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiZm9yLW9mIHdpdGhvdXQgYmxvY2sgYm9keVwiLCBub2RlTG9jYXRpb24obm9kZS5ib2R5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBjb25zdCBjb2xsZWN0aW9uVHlwZSA9IGl0ZXJhdGlvbk9wZXJhbmRUeXBlKGtub3duRXhwcmVzc2lvblR5cGUobm9kZS5yaWdodCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gICAgaWYgKGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiTWFwVHlwZVwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidW5vcmRlcmVkIG1hcCBpdGVyYXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUucmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBpZiAoIWNvbGxlY3Rpb25UeXBlIHx8IGNvbGxlY3Rpb25UeXBlLmtpbmQgIT0gXCJPcmRlcmVkTWFwVHlwZVwiKSB7XG4gICAgICByZXR1cm4gbWlzc2luZ1R5cGUobGFuZ3VhZ2UsIFwiT3JkZXJlZCBtYXAgaXRlcmF0aW9uIGNvbGxlY3Rpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUucmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCBrZXlMb2NhdGlvbiA9IGlkZW50aWZpZXJMb2NhdGlvbihrZXksIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgdmFsdWVMb2NhdGlvbiA9IGlkZW50aWZpZXJMb2NhdGlvbih2YWx1ZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBrZXlUeXBlID0gaXRlcmF0aW9uQmluZGluZ1R5cGUoY29sbGVjdGlvblR5cGUua2V5VHlwZSwga2V5TG9jYXRpb24pXG4gICAgY29uc3QgdmFsdWVUeXBlID0gaXRlcmF0aW9uQmluZGluZ1R5cGUoY29sbGVjdGlvblR5cGUudmFsdWVUeXBlLCB2YWx1ZUxvY2F0aW9uKVxuICAgIGNvbnN0IGtleUJpbmRpbmcgPSB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlZhbHVlQmluZGluZ1wiKSwgbG9jYXRpb246IGtleUxvY2F0aW9uLCBtdXRhYmxlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpLFxuICAgICAgbmFtZToga2V5Lm5hbWUsIHR5cGU6IGtleVR5cGVcbiAgICB9LCB7bmFtZToga2V5TG9jYXRpb259KVxuICAgIGNvbnN0IHZhbHVlQmluZGluZyA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVmFsdWVCaW5kaW5nXCIpLCBsb2NhdGlvbjogdmFsdWVMb2NhdGlvbiwgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICAgIG5hbWU6IHZhbHVlLm5hbWUsIHR5cGU6IHZhbHVlVHlwZVxuICAgIH0sIHtuYW1lOiB2YWx1ZUxvY2F0aW9ufSlcbiAgICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cblxuICAgIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldChrZXkubmFtZSwga2V5VHlwZSlcbiAgICBib2R5Q29udGV4dC5iaW5kaW5ncy5zZXQodmFsdWUubmFtZSwgdmFsdWVUeXBlKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGJvZHk6IGNvbnZlcnRCbG9jayhub2RlLmJvZHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGJvZHlDb250ZXh0KSxcbiAgICAgIGtleUJpbmRpbmcsXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBtYXA6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmlnaHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIHZhbHVlQmluZGluZ1xuICAgIH0sIHtcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKG5vZGUsIFwib2ZcIiwgbm9kZS5sZWZ0LmVuZCA/PyBub2RlLnN0YXJ0ID8/IDAsIG5vZGUucmlnaHQuc3RhcnQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCxcbiAgICAgICAgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuICB9XG4gIGlmIChkZWNsYXJhdG9yLmlkLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgZGVjbGFyYXRvci5pZC50eXBlLCBub2RlTG9jYXRpb24oZGVjbGFyYXRvci5pZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGlmIChkZWNsYXJhdG9yLmluaXQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJpbml0aWFsaXplZCBpdGVyYXRpb24gYmluZGluZ1wiLCBub2RlTG9jYXRpb24oZGVjbGFyYXRvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGlmIChub2RlLmJvZHkudHlwZSAhPSBcIkJsb2NrU3RhdGVtZW50XCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJmb3Itb2Ygd2l0aG91dCBibG9jayBib2R5XCIsIG5vZGVMb2NhdGlvbihub2RlLmJvZHksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCBjb2xsZWN0aW9uVHlwZSA9IGl0ZXJhdGlvbk9wZXJhbmRUeXBlKGtub3duRXhwcmVzc2lvblR5cGUobm9kZS5yaWdodCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gIGlmIChjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIiB8fCBjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibWFwIGl0ZXJhdGlvbiB3aXRob3V0IGtleS92YWx1ZSBwYWlyIGJpbmRpbmdcIiwgbm9kZUxvY2F0aW9uKG5vZGUucmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGlmICghY29sbGVjdGlvblR5cGUgfHwgY29sbGVjdGlvblR5cGUua2luZCAhPSBcIkxpc3RUeXBlXCIpIHtcbiAgICByZXR1cm4gbWlzc2luZ1R5cGUobGFuZ3VhZ2UsIFwiSXRlcmF0aW9uIGNvbGxlY3Rpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUucmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGJpbmRpbmdMb2NhdGlvbiA9IGlkZW50aWZpZXJMb2NhdGlvbihkZWNsYXJhdG9yLmlkLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBpbmZlcnJlZFR5cGUgPSBjb2xsZWN0aW9uVHlwZS5lbGVtZW50VHlwZVxuICBjb25zdCBiaW5kaW5nVHlwZSA9IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiICYmIGRlY2xhcmF0b3IuaWQudHlwZUFubm90YXRpb25cbiAgICA/IGNvbnZlcnRUeXBlU2NyaXB0VHlwZShkZWNsYXJhdG9yLmlkLnR5cGVBbm5vdGF0aW9uLCBgSXRlcmF0aW9uIGJpbmRpbmcgJyR7ZGVjbGFyYXRvci5pZC5uYW1lfSdgLCBiaW5kaW5nTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgICBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuICAgIDogaXRlcmF0aW9uQmluZGluZ1R5cGUoaW5mZXJyZWRUeXBlLCBiaW5kaW5nTG9jYXRpb24pXG4gIGNvbnN0IHZhbHVlQmluZGluZyA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlZhbHVlQmluZGluZ1wiKSxcbiAgICBsb2NhdGlvbjogYmluZGluZ0xvY2F0aW9uLFxuICAgIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgbmFtZTogZGVjbGFyYXRvci5pZC5uYW1lLFxuICAgIHR5cGU6IGJpbmRpbmdUeXBlXG4gIH0sIHtuYW1lOiBiaW5kaW5nTG9jYXRpb259KVxuICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cblxuICBib2R5Q29udGV4dC5iaW5kaW5ncy5zZXQoZGVjbGFyYXRvci5pZC5uYW1lLCBiaW5kaW5nVHlwZSlcbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGJvZHk6IGNvbnZlcnRCbG9jayhub2RlLmJvZHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGJvZHlDb250ZXh0KSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJGb3JFYWNoU3RhdGVtZW50XCIpLFxuICAgIGxpc3Q6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmlnaHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICBsb2NhdGlvbixcbiAgICB2YWx1ZUJpbmRpbmdcbiAgfSwge1xuICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKG5vZGUsIFwib2ZcIiwgbm9kZS5sZWZ0LmVuZCA/PyBub2RlLnN0YXJ0ID8/IDAsIG5vZGUucmlnaHQuc3RhcnQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgQmFiZWwgYmxvY2sgb3Igbm9ybWFsaXplZCBzaW5nbGUtc3RhdGVtZW50IGJvZHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5CbG9ja1N0YXRlbWVudCB8IGltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnRbXX0gaW5wdXQgLSBQYXJzZXIgYmxvY2sgb3Igc3RhdGVtZW50cy5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNhbm9uaWNhbFplcm9SZXF1aXJlZCAtIFdoZXRoZXIgZ2VuZXJhdGVkIHNjYWxhciBvdXRwdXQgbWF5IGNvbnRhaW4gc2lnbmVkIHplcm8uXG4gKiBAcGFyYW0ge0phdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gW2xvY2F0aW9uXSAtIExvY2F0aW9uIGZvciBhIHN0YXRlbWVudC1hcnJheSBibG9jay5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gU2VtYW50aWMgYmxvY2suXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRCbG9jayhpbnB1dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dCwgbG9jYXRpb24pIHtcbiAgY29uc3Qgc3RhdGVtZW50cyA9IEFycmF5LmlzQXJyYXkoaW5wdXQpID8gaW5wdXQgOiBpbnB1dC5ib2R5XG4gIGNvbnN0IGRpcmVjdGl2ZXMgPSBBcnJheS5pc0FycmF5KGlucHV0KSA/IFtdIDogaW5wdXQuZGlyZWN0aXZlc1xuICBjb25zdCBibG9ja0xvY2F0aW9uID0gbG9jYXRpb24gPz8gbm9kZUxvY2F0aW9uKC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkJsb2NrU3RhdGVtZW50fSAqLyAoaW5wdXQpLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBsZXhpY2FsVmFsdWVOYW1lcyA9IG5ldyBTZXQoY29udGV4dC5sZXhpY2FsVmFsdWVOYW1lcylcblxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgaWYgKHN0YXRlbWVudC50eXBlICE9IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiKSBjb250aW51ZVxuICAgIGZvciAoY29uc3QgZGVjbGFyYXRvciBvZiBzdGF0ZW1lbnQuZGVjbGFyYXRpb25zKSB7XG4gICAgICBpZiAoZGVjbGFyYXRvci5pZC50eXBlID09IFwiSWRlbnRpZmllclwiKSBsZXhpY2FsVmFsdWVOYW1lcy5hZGQoZGVjbGFyYXRvci5pZC5uYW1lKVxuICAgIH1cbiAgfVxuICBjb25zdCBibG9ja0NvbnRleHQgPSB7Li4uY29udGV4dCwgbGV4aWNhbFZhbHVlTmFtZXN9XG5cbiAgaWYgKGRpcmVjdGl2ZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJkaXJlY3RpdmVcIiwgbm9kZUxvY2F0aW9uKGRpcmVjdGl2ZXNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBraW5kOiBcIkJsb2NrXCIsXG4gICAgbG9jYXRpb246IGJsb2NrTG9jYXRpb24sXG4gICAgc3RhdGVtZW50czogc3RhdGVtZW50cy5tYXAoKHN0YXRlbWVudCkgPT4gY29udmVydFN0YXRlbWVudChzdGF0ZW1lbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGJsb2NrQ29udGV4dCkpXG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkcyBKYXZhU2NyaXB0IEpTRG9jIHR5cGVzIGZyb20gYSBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb259IG5vZGUgLSBCYWJlbCBmdW5jdGlvbiBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3duZXJJZF0gLSBTdGFibGUgZGVjbGFyYXRpb24gaWRlbnRpdHkgZm9yIHR5cGUtcGFyYW1ldGVyIElEcy5cbiAqIEByZXR1cm5zIHt7cGFyYW1ldGVyczogTWFwPHN0cmluZywge2xvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgc291cmNlVHlwZTogc3RyaW5nfT4sIHJldHVyblR5cGU6IHtsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNvdXJjZVR5cGU6IHN0cmluZ30gfCB1bmRlZmluZWQsIHR5cGVQYXJhbWV0ZXJzPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcltdfX0gUGFyc2VkIHR5cGVzLlxuICovXG5mdW5jdGlvbiBqc2RvY1R5cGVzKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIG93bmVySWQpIHtcbiAgY29uc3QgY29tbWVudCA9IG5vZGUubGVhZGluZ0NvbW1lbnRzPy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS50eXBlID09IFwiQ29tbWVudEJsb2NrXCIgJiYgY2FuZGlkYXRlLnZhbHVlLnN0YXJ0c1dpdGgoXCIqXCIpKVxuXG4gIGlmICghY29tbWVudCkgbWlzc2luZ1R5cGUoXCJqYXZhc2NyaXB0XCIsIGBGdW5jdGlvbiAnJHtub2RlLmlkPy5uYW1lID8/IFwiYW5vbnltb3VzXCJ9J2AsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcblxuICBjb25zdCBjb21tZW50QmxvY2sgPSAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Db21tZW50QmxvY2t9ICovIChjb21tZW50KVxuICBjb25zdCBibG9jayA9IHBhcnNlQ29tbWVudChgLyoke2NvbW1lbnRCbG9jay52YWx1ZX0qL2ApWzBdXG4gIGNvbnN0IHBhcmFtZXRlclRhZ3MgPSBibG9jay50YWdzLmZpbHRlcigodGFnKSA9PiB0YWcudGFnID09IFwicGFyYW1cIilcbiAgY29uc3QgcmV0dXJuVGFncyA9IGJsb2NrLnRhZ3MuZmlsdGVyKCh0YWcpID0+IHRhZy50YWcgPT0gXCJyZXR1cm5zXCIgfHwgdGFnLnRhZyA9PSBcInJldHVyblwiKVxuICBjb25zdCB0eXBlUGFyYW1ldGVycyA9IGpzZG9jVHlwZVBhcmFtZXRlcnMoY29tbWVudEJsb2NrLCBibG9jay50YWdzLCBvd25lcklkLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChuZXcgU2V0KHBhcmFtZXRlclRhZ3MubWFwKCh0YWcpID0+IHRhZy5uYW1lKSkuc2l6ZSAhPSBwYXJhbWV0ZXJUYWdzLmxlbmd0aCkge1xuICAgIGNvbnN0IGR1cGxpY2F0ZSA9IHBhcmFtZXRlclRhZ3MuZmluZCgodGFnLCBpbmRleCkgPT4gcGFyYW1ldGVyVGFncy5maW5kSW5kZXgoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT0gdGFnLm5hbWUpICE9IGluZGV4KVxuXG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcImR1cGxpY2F0ZSBAcGFyYW0gYW5ub3RhdGlvblwiLCBkdXBsaWNhdGVcbiAgICAgID8gY29tbWVudFRhZ0xvY2F0aW9uKGNvbW1lbnRCbG9jaywgZHVwbGljYXRlLCBcIm5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIDogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGlmIChyZXR1cm5UYWdzLmxlbmd0aCA+IDEpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwiZHVwbGljYXRlIEByZXR1cm4gYW5ub3RhdGlvblwiLFxuICAgICAgY29tbWVudFRhZ0xvY2F0aW9uKGNvbW1lbnRCbG9jaywgcmV0dXJuVGFnc1sxXSwgXCJ0eXBlXCIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBuZXcgTWFwKHBhcmFtZXRlclRhZ3MubWFwKCh0YWcpID0+IFt0YWcubmFtZSwge1xuICAgIGxvY2F0aW9uOiBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudEJsb2NrLCB0YWcsIFwidHlwZVwiLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBzb3VyY2VUeXBlOiB0YWcudHlwZVxuICB9XSkpXG4gIGNvbnN0IHJldHVyblRhZyA9IHJldHVyblRhZ3NbMF1cblxuICByZXR1cm4ge1xuICAgIHBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogcmV0dXJuVGFnID8ge2xvY2F0aW9uOiBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudEJsb2NrLCByZXR1cm5UYWcsIFwidHlwZVwiLCBmaWxlbmFtZSwgc291cmNlKSwgc291cmNlVHlwZTogcmV0dXJuVGFnLnR5cGV9IDogdW5kZWZpbmVkLFxuICAgIC4uLih0eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgfVxufVxuXG4vKipcbiAqIFJlYWRzIGV4YWN0IHVuYm91bmRlZCBpbnZhcmlhbnQgYEB0ZW1wbGF0ZSBOYW1lYCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Db21tZW50QmxvY2t9IGNvbW1lbnQgLSBQYXJzZXItb3duZWQgSlNEb2MgYmxvY2suXG4gKiBAcGFyYW0ge2ltcG9ydChcImNvbW1lbnQtcGFyc2VyXCIpLlNwZWNbXX0gdGFncyAtIFBhcnNlZCB0YWdzLlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IG93bmVySWQgLSBTdGFibGUgZGVjbGFyYXRpb24gaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXJbXSB8IHVuZGVmaW5lZH0gT3JkZXJlZCBwYXJhbWV0ZXJzIHdoZW4gcHJlc2VudC5cbiAqL1xuZnVuY3Rpb24ganNkb2NUeXBlUGFyYW1ldGVycyhjb21tZW50LCB0YWdzLCBvd25lcklkLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IG1hbGZvcm1lZCA9IHRhZ3MuZmluZCgodGFnKSA9PiB0YWcudGFnLnN0YXJ0c1dpdGgoXCJ0ZW1wbGF0ZVwiKSAmJiB0YWcudGFnICE9IFwidGVtcGxhdGVcIilcblxuICBpZiAobWFsZm9ybWVkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwidW5zdXBwb3J0ZWQgdHlwZSBwYXJhbWV0ZXIgdmFyaWFuY2VcIiwgY29tbWVudFRhZ0xvY2F0aW9uKGNvbW1lbnQsIG1hbGZvcm1lZCwgXCJuYW1lXCIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCB0ZW1wbGF0ZVRhZ3MgPSB0YWdzLmZpbHRlcigodGFnKSA9PiB0YWcudGFnID09IFwidGVtcGxhdGVcIilcblxuICBpZiAodGVtcGxhdGVUYWdzLmxlbmd0aCA9PSAwKSByZXR1cm4gdW5kZWZpbmVkXG4gIGlmICghb3duZXJJZCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcInR5cGUgcGFyYW1ldGVyIG91dHNpZGUgYSBkZWNsYXJhdGlvblwiLFxuICAgIG5vZGVMb2NhdGlvbigvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlfSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoY29tbWVudCkpLCBmaWxlbmFtZSwgc291cmNlKSlcblxuICByZXR1cm4gdGVtcGxhdGVUYWdzLm1hcCgodGFnLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGxvY2F0aW9uID0gY29tbWVudFRhZ0xvY2F0aW9uKGNvbW1lbnQsIHRhZywgXCJuYW1lXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAoIS9eW0EtWmEtel8kXVtBLVphLXowLTlfJF0qJC91LnRlc3QodGFnLm5hbWUpIHx8IHRhZy50eXBlIHx8IHRhZy5kZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcImJvdW5kZWQsIGRlZmF1bHRlZCwgb3IgbWFsZm9ybWVkIHR5cGUgcGFyYW1ldGVyXCIsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtpZDogYCR7b3duZXJJZH06dHlwZToke2luZGV4fWAsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlR5cGVQYXJhbWV0ZXJcIiksIGxvY2F0aW9uLCBuYW1lOiB0YWcubmFtZX0sIHtuYW1lOiBsb2NhdGlvbn0pXG4gIH0pXG59XG5cbi8qKlxuICogUmVhZHMgYW4gb3B0aW9uYWwgY2xhc3MtbGV2ZWwgSlNEb2MgdGVtcGxhdGUgYmxvY2suXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBub2RlIC0gQ2xhc3MgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gb3duZXJJZCAtIFJlY29yZCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcltdIHwgdW5kZWZpbmVkfSBPcmRlcmVkIHBhcmFtZXRlcnMuXG4gKi9cbmZ1bmN0aW9uIGNsYXNzSnNkb2NUeXBlUGFyYW1ldGVycyhub2RlLCBvd25lcklkLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGNvbW1lbnQgPSAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Db21tZW50QmxvY2sgfCB1bmRlZmluZWR9ICovIChcbiAgICBub2RlLmxlYWRpbmdDb21tZW50cz8uZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUudHlwZSA9PSBcIkNvbW1lbnRCbG9ja1wiICYmIGNhbmRpZGF0ZS52YWx1ZS5zdGFydHNXaXRoKFwiKlwiKSkpXG5cbiAgaWYgKCFjb21tZW50KSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IGJsb2NrID0gcGFyc2VDb21tZW50KGAvKiR7Y29tbWVudC52YWx1ZX0qL2ApWzBdXG5cbiAgcmV0dXJuIGpzZG9jVHlwZVBhcmFtZXRlcnMoY29tbWVudCwgYmxvY2sudGFncywgb3duZXJJZCwgZmlsZW5hbWUsIHNvdXJjZSlcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhIHN1cHBvcnRlZCBKYXZhU2NyaXB0IEpTRG9jIHNjYWxhciB0eXBlIHNwZWxsaW5nLlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IHNvdXJjZVR5cGUgLSBTb3VyY2UtbGFuZ3VhZ2UgdHlwZS5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IFt0eXBlTG9jYXRpb25dIC0gRXhhY3QgdHlwZSB0b2tlbiBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gU2VtYW50aWMgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGUoc291cmNlVHlwZSwgbGFuZ3VhZ2UsIHN1YmplY3QsIGxvY2F0aW9uLCBzb3VyY2UsIHR5cGVMb2NhdGlvbiA9IGxvY2F0aW9uLCByZWNvcmROYW1lcyA9IG5ldyBNYXAoKSwgdHlwZVBhcmFtZXRlcnMgPSBuZXcgTWFwKCkpIHtcbiAgaWYgKGxhbmd1YWdlICE9IFwiamF2YXNjcmlwdFwiKSByZXR1cm4gcmVxdWlyZVNvdXJjZVNjYWxhclR5cGUobGFuZ3VhZ2UsIHNvdXJjZVR5cGUsIHN1YmplY3QsIGxvY2F0aW9uLCB0eXBlTG9jYXRpb24pXG5cbiAgcmV0dXJuIGRvY3VtZW50ZWRWYWx1ZVR5cGUoe2xhbmd1YWdlLCBsb2NhdGlvbjogdHlwZUxvY2F0aW9uLCBvd25lckxvY2F0aW9uOiBsb2NhdGlvbiwgcmVjb3JkczogcmVjb3JkTmFtZXMsIHNvdXJjZSwgc291cmNlVHlwZSwgc3ViamVjdCwgdHlwZVBhcmFtZXRlcnN9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBKYXZhU2NyaXB0IGZ1bmN0aW9uIHJldHVybiBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IHNvdXJjZVR5cGUgLSBKU0RvYyB0eXBlIHNwZWxsaW5nLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3QgLSBUeXBlZCBmdW5jdGlvbiByZXR1cm4uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIEZ1bmN0aW9uIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IFt0eXBlTG9jYXRpb25dIC0gRXhhY3QgYW5ub3RhdGlvbiBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZX0gU2VtYW50aWMgcmV0dXJuIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRSZXR1cm5UeXBlKHNvdXJjZVR5cGUsIGxhbmd1YWdlLCBzdWJqZWN0LCBsb2NhdGlvbiwgc291cmNlLCB0eXBlTG9jYXRpb24gPSBsb2NhdGlvbiwgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKCksIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGlmIChzb3VyY2VUeXBlID09IFwidm9pZFwiKSByZXR1cm4gcmVxdWlyZVNvdXJjZVJldHVyblR5cGUobGFuZ3VhZ2UsIHNvdXJjZVR5cGUsIHN1YmplY3QsIGxvY2F0aW9uLCB0eXBlTG9jYXRpb24pXG5cbiAgcmV0dXJuIGNvbnZlcnRUeXBlKHNvdXJjZVR5cGUsIGxhbmd1YWdlLCBzdWJqZWN0LCBsb2NhdGlvbiwgc291cmNlLCB0eXBlTG9jYXRpb24sIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycylcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgVHlwZVNjcmlwdCBzY2FsYXIga2V5d29yZCBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVHlwZUFubm90YXRpb24gfCBpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVFNUeXBlQW5ub3RhdGlvbiB8IGltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob29wIHwgbnVsbCB8IHVuZGVmaW5lZH0gYW5ub3RhdGlvbiAtIFR5cGUgYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IG93bmVyTG9jYXRpb24gLSBPd25pbmcgZGVjbGFyYXRpb24gbG9jYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gW3JlY29yZE5hbWVzXSAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyPn0gW3R5cGVQYXJhbWV0ZXJzXSAtIERlY2xhcmF0aW9uLXNjb3BlZCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVmFsdWVUeXBlfSBTZW1hbnRpYyB0eXBlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHlwZVNjcmlwdFR5cGUoYW5ub3RhdGlvbiwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKCksIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGlmICghYW5ub3RhdGlvbikgcmV0dXJuIG1pc3NpbmdUeXBlKFwidHlwZXNjcmlwdFwiLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uKVxuICBpZiAoYW5ub3RhdGlvbi50eXBlICE9IFwiVFNUeXBlQW5ub3RhdGlvblwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcInVuc3VwcG9ydGVkIHNjYWxhciB0eXBlXCIsIG5vZGVMb2NhdGlvbihhbm5vdGF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUoYW5ub3RhdGlvbi50eXBlQW5ub3RhdGlvbiwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBib3VuZGVkIHJlY3Vyc2l2ZSBUeXBlU2NyaXB0IHZhbHVlLXR5cGUgdHJlZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlRTVHlwZX0gdHlwZU5vZGUgLSBQYXJzZXItb3duZWQgdHlwZSBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3QgLSBUeXBlZCBzdWJqZWN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gb3duZXJMb2NhdGlvbiAtIE93bmluZyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSBbcmVjb3JkTmFtZXNdIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXI+fSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IFNlbWFudGljIHZhbHVlIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUeXBlU2NyaXB0VmFsdWVUeXBlTm9kZSh0eXBlTm9kZSwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKCksIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGNvbnN0IHNvdXJjZVR5cGUgPSB0eXBlTm9kZS50eXBlID09IFwiVFNOdW1iZXJLZXl3b3JkXCIgPyBcIm51bWJlclwiIDpcbiAgICB0eXBlTm9kZS50eXBlID09IFwiVFNCb29sZWFuS2V5d29yZFwiID8gXCJib29sZWFuXCIgOiB0eXBlTm9kZS50eXBlID09IFwiVFNTdHJpbmdLZXl3b3JkXCIgPyBcInN0cmluZ1wiIDogdW5kZWZpbmVkXG5cbiAgaWYgKHNvdXJjZVR5cGUpIHtcbiAgICByZXR1cm4gcmVxdWlyZVNvdXJjZVNjYWxhclR5cGUoXCJ0eXBlc2NyaXB0XCIsIHNvdXJjZVR5cGUsIHN1YmplY3QsIG93bmVyTG9jYXRpb24sIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgaWYgKHR5cGVOb2RlLnR5cGUgPT0gXCJUU1R5cGVSZWZlcmVuY2VcIiAmJiB0eXBlTm9kZS50eXBlTmFtZS50eXBlID09IFwiSWRlbnRpZmllclwiICYmICF0eXBlTm9kZS50eXBlUGFyYW1ldGVycyAmJlxuICAgIHR5cGVQYXJhbWV0ZXJzLmhhcyh0eXBlTm9kZS50eXBlTmFtZS5uYW1lKSkge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcn0gKi8gKHR5cGVQYXJhbWV0ZXJzLmdldCh0eXBlTm9kZS50eXBlTmFtZS5uYW1lKSlcblxuICAgIHJldHVybiB0eXBlVmFyaWFibGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChwYXJhbWV0ZXIuaWQpLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGlmICh0eXBlTm9kZS50eXBlID09IFwiVFNUeXBlUmVmZXJlbmNlXCIgJiYgdHlwZU5vZGUudHlwZU5hbWUudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJlxuICAgIHJlY29yZE5hbWVzLmhhcyh0eXBlTm9kZS50eXBlTmFtZS5uYW1lKSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9ufSAqLyAocmVjb3JkTmFtZXMuZ2V0KHR5cGVOb2RlLnR5cGVOYW1lLm5hbWUpKVxuXG4gICAgaWYgKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJFZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uXCIpIHtcbiAgICAgIGlmICh0eXBlTm9kZS50eXBlUGFyYW1ldGVycykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcImdlbmVyaWMgb3duZWQgcmVzb3VyY2UgdHlwZVwiLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgcmV0dXJuIG93bmVkUmVzb3VyY2VUeXBlKGRlY2xhcmF0aW9uLmlkLCBub2RlTG9jYXRpb24odHlwZU5vZGUudHlwZU5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBpZiAoZGVjbGFyYXRpb24ua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIikge1xuICAgICAgaWYgKHR5cGVOb2RlLnR5cGVQYXJhbWV0ZXJzKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJ0eXBlc2NyaXB0XCIsIFwiZ2VuZXJpYyByZWZlcmVuY2UgY2xhc3MgdHlwZVwiLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24odHlwZU5vZGUudHlwZU5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICByZXR1cm4gZGVjbGFyYXRpb24ub3duZXJzaGlwPy5raW5kID09IFwib3duZWRSZXNvdXJjZVwiXG4gICAgICAgID8gb3duZWRSZWZlcmVuY2VUeXBlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBsb2NhdGlvbilcbiAgICAgICAgOiByZWZlcmVuY2VUeXBlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgYXJndW1lbnRzXyA9IHR5cGVOb2RlLnR5cGVQYXJhbWV0ZXJzPy5wYXJhbXMubWFwKChwYXJhbWV0ZXIpID0+XG4gICAgICBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUocGFyYW1ldGVyLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpKVxuXG4gICAgcmV0dXJuIHJlY29yZFR5cGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIG5vZGVMb2NhdGlvbih0eXBlTm9kZS50eXBlTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSksIGFyZ3VtZW50c18pXG4gIH1cbiAgaWYgKHR5cGVOb2RlLnR5cGUgPT0gXCJUU1VuaW9uVHlwZVwiKSB7XG4gICAgaWYgKHR5cGVOb2RlLnR5cGVzLmxlbmd0aCAhPSAyIHx8IHR5cGVOb2RlLnR5cGVzWzFdLnR5cGUgIT0gXCJUU051bGxLZXl3b3JkXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcbiAgICAgICAgXCJ0eXBlc2NyaXB0XCIsXG4gICAgICAgIHR5cGVOb2RlLnR5cGVzLnNvbWUoKG1lbWJlcikgPT4gbWVtYmVyLnR5cGUgPT0gXCJUU051bGxLZXl3b3JkXCIpXG4gICAgICAgICAgPyBcImFyYml0cmFyeSB1bmlvbiB0eXBlXCJcbiAgICAgICAgICA6IFwidW5zdXBwb3J0ZWQgY29sbGVjdGlvbiBvciBzY2FsYXIgdHlwZVwiLFxuICAgICAgICBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICApXG4gICAgfVxuICAgIGNvbnN0IHZhbHVlTm9kZSA9IHR5cGVOb2RlLnR5cGVzWzBdXG5cbiAgICByZXR1cm4gb3B0aW9uYWxUeXBlKFxuICAgICAgY29udmVydFR5cGVTY3JpcHRWYWx1ZVR5cGVOb2RlKHZhbHVlTm9kZSwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKSxcbiAgICAgIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBub2RlTG9jYXRpb24odmFsdWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIClcbiAgfVxuICBpZiAodHlwZU5vZGUudHlwZSA9PSBcIlRTVHlwZU9wZXJhdG9yXCIgJiYgdHlwZU5vZGUub3BlcmF0b3IgPT0gXCJyZWFkb25seVwiICYmIHR5cGVOb2RlLnR5cGVBbm5vdGF0aW9uLnR5cGUgPT0gXCJUU0FycmF5VHlwZVwiKSB7XG4gICAgY29uc3QgZWxlbWVudE5vZGUgPSB0eXBlTm9kZS50eXBlQW5ub3RhdGlvbi5lbGVtZW50VHlwZVxuXG4gICAgcmV0dXJuIGxpc3RUeXBlKFxuICAgICAgY29udmVydFR5cGVTY3JpcHRWYWx1ZVR5cGVOb2RlKGVsZW1lbnROb2RlLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpLFxuICAgICAgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5vZGVMb2NhdGlvbihlbGVtZW50Tm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICApXG4gIH1cbiAgaWYgKHR5cGVOb2RlLnR5cGUgPT0gXCJUU1R5cGVSZWZlcmVuY2VcIiAmJiB0eXBlTm9kZS50eXBlTmFtZS50eXBlID09IFwiSWRlbnRpZmllclwiICYmXG4gICAgW1wiUmVhZG9ubHlBcnJheVwiLCBcIlJlYWRvbmx5TWFwXCJdLmluY2x1ZGVzKHR5cGVOb2RlLnR5cGVOYW1lLm5hbWUpKSB7XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHR5cGVOb2RlLnR5cGVQYXJhbWV0ZXJzPy5wYXJhbXMgPz8gW11cblxuICAgIGlmICh0eXBlTm9kZS50eXBlTmFtZS5uYW1lID09IFwiUmVhZG9ubHlBcnJheVwiICYmIHBhcmFtZXRlcnMubGVuZ3RoID09IDEpIHtcbiAgICAgIHJldHVybiBsaXN0VHlwZShcbiAgICAgICAgY29udmVydFR5cGVTY3JpcHRWYWx1ZVR5cGVOb2RlKHBhcmFtZXRlcnNbMF0sIHN1YmplY3QsIG93bmVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycyksXG4gICAgICAgIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIG5vZGVMb2NhdGlvbihwYXJhbWV0ZXJzWzBdLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgKVxuICAgIH1cbiAgICBpZiAodHlwZU5vZGUudHlwZU5hbWUubmFtZSA9PSBcIlJlYWRvbmx5TWFwXCIgJiYgcGFyYW1ldGVycy5sZW5ndGggPT0gMikge1xuICAgICAgY29uc3Qga2V5VHlwZSA9IGNvbnZlcnRUeXBlU2NyaXB0VmFsdWVUeXBlTm9kZShwYXJhbWV0ZXJzWzBdLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG5cbiAgICAgIGlmIChrZXlUeXBlLmtpbmQgIT0gXCJUeXBlUmVmZXJlbmNlXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcIm1hcCBrZXkgdHlwZSBvdGhlciB0aGFuIHN0cmluZ1wiLCBub2RlTG9jYXRpb24ocGFyYW1ldGVyc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwVHlwZShcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgY29udmVydFR5cGVTY3JpcHRWYWx1ZVR5cGVOb2RlKHBhcmFtZXRlcnNbMV0sIHN1YmplY3QsIG93bmVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycyksXG4gICAgICAgIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIG5vZGVMb2NhdGlvbihwYXJhbWV0ZXJzWzBdLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKHBhcmFtZXRlcnNbMV0sIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcInVuc3VwcG9ydGVkIGNvbGxlY3Rpb24gb3Igc2NhbGFyIHR5cGVcIiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgVHlwZVNjcmlwdCBmdW5jdGlvbiByZXR1cm4gYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlR5cGVBbm5vdGF0aW9uIHwgaW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlRTVHlwZUFubm90YXRpb24gfCBpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9vcCB8IG51bGwgfCB1bmRlZmluZWR9IGFubm90YXRpb24gLSBSZXR1cm4gYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgZnVuY3Rpb24gcmV0dXJuLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gb3duZXJMb2NhdGlvbiAtIEZ1bmN0aW9uIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZX0gU2VtYW50aWMgcmV0dXJuIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUeXBlU2NyaXB0UmV0dXJuVHlwZShhbm5vdGF0aW9uLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcyA9IG5ldyBNYXAoKSwgdHlwZVBhcmFtZXRlcnMgPSBuZXcgTWFwKCkpIHtcbiAgaWYgKCFhbm5vdGF0aW9uKSByZXR1cm4gcmVxdWlyZVNvdXJjZVJldHVyblR5cGUoXCJ0eXBlc2NyaXB0XCIsIHVuZGVmaW5lZCwgc3ViamVjdCwgb3duZXJMb2NhdGlvbilcbiAgaWYgKGFubm90YXRpb24udHlwZSAhPSBcIlRTVHlwZUFubm90YXRpb25cIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInR5cGVzY3JpcHRcIiwgXCJ1bnN1cHBvcnRlZCByZXR1cm4gdHlwZVwiLCBub2RlTG9jYXRpb24oYW5ub3RhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgdHlwZU5vZGUgPSBhbm5vdGF0aW9uLnR5cGVBbm5vdGF0aW9uXG5cbiAgaWYgKHR5cGVOb2RlLnR5cGUgPT0gXCJUU1ZvaWRLZXl3b3JkXCIpIHtcbiAgICByZXR1cm4gcmVxdWlyZVNvdXJjZVJldHVyblR5cGUoXCJ0eXBlc2NyaXB0XCIsIFwidm9pZFwiLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIGNvbnZlcnRUeXBlU2NyaXB0VmFsdWVUeXBlTm9kZSh0eXBlTm9kZSwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBuYXRpdmUgdW5ib3VuZGVkIGludmFyaWFudCBUeXBlU2NyaXB0IHBhcmFtZXRlciBsaXN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVFNUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSBkZWNsYXJhdGlvbiAtIFBhcnNlci1vd25lZCBsaXN0LlxuICogQHBhcmFtIHtzdHJpbmd9IG93bmVySWQgLSBTdGFibGUgb3duaW5nIGRlY2xhcmF0aW9uIGlkZW50aXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyW10gfCB1bmRlZmluZWR9IFNlbWFudGljIHBhcmFtZXRlcnMuXG4gKi9cbmZ1bmN0aW9uIHR5cGVTY3JpcHRUeXBlUGFyYW1ldGVycyhkZWNsYXJhdGlvbiwgb3duZXJJZCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAoIWRlY2xhcmF0aW9uKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgcmV0dXJuIGRlY2xhcmF0aW9uLnBhcmFtcy5tYXAoKHBhcmFtZXRlciwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAocGFyYW1ldGVyLmNvbnN0cmFpbnQgfHwgcGFyYW1ldGVyLmRlZmF1bHQgfHwgUmVmbGVjdC5nZXQocGFyYW1ldGVyLCBcImluXCIpIHx8IFJlZmxlY3QuZ2V0KHBhcmFtZXRlciwgXCJvdXRcIikgfHxcbiAgICAgIFJlZmxlY3QuZ2V0KHBhcmFtZXRlciwgXCJjb25zdFwiKSB8fCB0eXBlb2YgcGFyYW1ldGVyLm5hbWUgIT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcImJvdW5kZWQsIGRlZmF1bHRlZCwgdmFyaWFudCwgb3IgY29uc3QgdHlwZSBwYXJhbWV0ZXJcIiwgbG9jYXRpb24pXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2lkOiBgJHtvd25lcklkfTp0eXBlOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHlwZVBhcmFtZXRlclwiKSwgbG9jYXRpb24sIG5hbWU6IHBhcmFtZXRlci5uYW1lfSwge25hbWU6IGxvY2F0aW9ufSlcbiAgfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN1cHBvcnRlZCBmdW5jdGlvbiBzaWduYXR1cmUgYmVmb3JlIGFueSBib2R5IGV4cHJlc3Npb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gbm9kZSAtIEJhYmVsIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3duZXJJZCAtIFN0YWJsZSBmdW5jdGlvbiBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHtKYXZhU2NyaXB0RnVuY3Rpb25TaWduYXR1cmV9IFNlbWFudGljIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZ1bmN0aW9uU2lnbmF0dXJlKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgb3duZXJJZCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICghbm9kZS5pZCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImFub255bW91cyBmdW5jdGlvblwiLCBsb2NhdGlvbilcbiAgaWYgKG5vZGUuYXN5bmMpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJhc3luYyBmdW5jdGlvblwiLCBsb2NhdGlvbilcbiAgaWYgKG5vZGUuZ2VuZXJhdG9yKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiZ2VuZXJhdG9yIGZ1bmN0aW9uXCIsIGxvY2F0aW9uKVxuICBjb25zdCBuYXRpdmVUeXBlUGFyYW1ldGVycyA9IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiXG4gICAgPyB0eXBlU2NyaXB0VHlwZVBhcmFtZXRlcnMoLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVFNUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSAqLyAobm9kZS50eXBlUGFyYW1ldGVycyksIG93bmVySWQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgOiBub2RlLnR5cGVQYXJhbWV0ZXJzID8gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibmF0aXZlIGdlbmVyaWMgZnVuY3Rpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUudHlwZVBhcmFtZXRlcnMsIGZpbGVuYW1lLCBzb3VyY2UpKSA6IHVuZGVmaW5lZFxuICBjb25zdCBkb2N1bWVudGVkVHlwZXMgPSBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiA/IGpzZG9jVHlwZXMobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgb3duZXJJZCkgOiB1bmRlZmluZWRcbiAgY29uc3QgdHlwZVBhcmFtZXRlcnNfID0gbmF0aXZlVHlwZVBhcmFtZXRlcnMgPz8gZG9jdW1lbnRlZFR5cGVzPy50eXBlUGFyYW1ldGVyc1xuICBjb25zdCB0eXBlUGFyYW1ldGVyTmFtZXMgPSBuZXcgTWFwKCh0eXBlUGFyYW1ldGVyc18gPz8gW10pLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlcl0pKVxuICBjb25zdCBwYXJhbWV0ZXJzID0gbm9kZS5wYXJhbXMubWFwKChwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAocGFyYW1ldGVyLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgcGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlckxvY2F0aW9uKVxuICAgIGlmIChwYXJhbWV0ZXIub3B0aW9uYWwpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJvcHRpb25hbCBwYXJhbWV0ZXJcIiwgcGFyYW1ldGVyTG9jYXRpb24pXG5cbiAgICBjb25zdCBkb2N1bWVudGVkVHlwZSA9IGRvY3VtZW50ZWRUeXBlcz8ucGFyYW1ldGVycy5nZXQocGFyYW1ldGVyLm5hbWUpXG4gICAgY29uc3QgdHlwZSA9IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiXG4gICAgICA/IGNvbnZlcnRUeXBlKGRvY3VtZW50ZWRUeXBlPy5zb3VyY2VUeXBlLCBsYW5ndWFnZSwgYFBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24sIHNvdXJjZSwgZG9jdW1lbnRlZFR5cGU/LmxvY2F0aW9uLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlck5hbWVzKVxuICAgICAgOiBjb252ZXJ0VHlwZVNjcmlwdFR5cGUocGFyYW1ldGVyLnR5cGVBbm5vdGF0aW9uLCBgUGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfSdgLCBwYXJhbWV0ZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlBhcmFtZXRlclwiKSxcbiAgICAgIGxvY2F0aW9uOiBwYXJhbWV0ZXJMb2NhdGlvbixcbiAgICAgIG5hbWU6IHBhcmFtZXRlci5uYW1lLFxuICAgICAgdHlwZVxuICAgIH0sIHtuYW1lOiBpZGVudGlmaWVyTG9jYXRpb24ocGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG4gIGNvbnN0IGV4dHJhRG9jdW1lbnRlZFBhcmFtZXRlciA9IGRvY3VtZW50ZWRUeXBlcyAmJiBbLi4uZG9jdW1lbnRlZFR5cGVzLnBhcmFtZXRlcnMua2V5cygpXVxuICAgIC5maW5kKChuYW1lKSA9PiAhbm9kZS5wYXJhbXMuc29tZSgocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJiBwYXJhbWV0ZXIubmFtZSA9PSBuYW1lKSlcblxuICBpZiAoZXh0cmFEb2N1bWVudGVkUGFyYW1ldGVyKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGBhbm5vdGF0aW9uIGZvciB1bmtub3duIHBhcmFtZXRlciAnJHtleHRyYURvY3VtZW50ZWRQYXJhbWV0ZXJ9J2AsIGxvY2F0aW9uKVxuICBjb25zdCByZXR1cm5Bbm5vdGF0aW9uID0gbm9kZS5yZXR1cm5UeXBlXG4gIGNvbnN0IHJldHVyblR5cGUgPSBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIlxuICAgID8gY29udmVydFJldHVyblR5cGUoZG9jdW1lbnRlZFR5cGVzPy5yZXR1cm5UeXBlPy5zb3VyY2VUeXBlLCBsYW5ndWFnZSwgYEZ1bmN0aW9uICcke25vZGUuaWQubmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLCBzb3VyY2UsIGRvY3VtZW50ZWRUeXBlcz8ucmV0dXJuVHlwZT8ubG9jYXRpb24sIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpXG4gICAgOiBjb252ZXJ0VHlwZVNjcmlwdFJldHVyblR5cGUocmV0dXJuQW5ub3RhdGlvbiwgYEZ1bmN0aW9uICcke25vZGUuaWQubmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlck5hbWVzKVxuICByZXR1cm4ge1xuICAgIGxvY2F0aW9uLFxuICAgIG5hbWU6IG5vZGUuaWQubmFtZSxcbiAgICBuYW1lTG9jYXRpb246IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmlkLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBwYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGUsXG4gICAgLi4uKHR5cGVQYXJhbWV0ZXJzXyA/IHt0eXBlUGFyYW1ldGVyczogdHlwZVBhcmFtZXRlcnNffSA6IHt9KVxuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdXBwb3J0ZWQgZnVuY3Rpb24gYm9keSB1c2luZyBhbGwgYWxyZWFkeS1wcm92ZWQgc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb259IG5vZGUgLSBCYWJlbCBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7SmF2YVNjcmlwdEZ1bmN0aW9uU2lnbmF0dXJlfSBzaWduYXR1cmUgLSBDb252ZXJ0ZWQgc2lnbmF0dXJlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBKYXZhU2NyaXB0RnVuY3Rpb25TaWduYXR1cmU+fSBmdW5jdGlvbnMgLSBNb2R1bGUgc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn0gdmFsdWVSZWNvcmROYW1lcyAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGF2YWlsYWJsZSBpbiB2YWx1ZSBwb3NpdGlvbnMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZCBkZWNsYXJhdGlvbnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gUmVmZXJlbmNlIGNsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvck5hbWVzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2Fub25pY2FsWmVyb1JlcXVpcmVkIC0gV2hldGhlciBnZW5lcmF0ZWQgc2NhbGFyIG91dHB1dCBtYXkgY29udGFpbiBzaWduZWQgemVyby5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSBTZW1hbnRpYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZ1bmN0aW9uKG5vZGUsIHNpZ25hdHVyZSwgZnVuY3Rpb25zLCByZWNvcmROYW1lcywgdmFsdWVSZWNvcmROYW1lcywgcmVjb3JkcywgY2xhc3NlcywgZXJyb3JOYW1lcywgZXJyb3JzLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkKSB7XG4gIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgYmluZGluZ3M6IG5ldyBNYXAoc2lnbmF0dXJlLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyLnR5cGVdKSksXG4gICAgY2xhc3NlcyxcbiAgICBlcnJvck5hbWVzLFxuICAgIGVycm9ycyxcbiAgICBmdW5jdGlvbnMsXG4gICAgb3JkZXJlZE1hcERlY2xhcmF0aW9uczogb3JkZXJlZE1hcERlY2xhcmF0aW9uc0Zvcihub2RlLmJvZHkpLFxuICAgIHJlY29yZE5hbWVzLFxuICAgIHJlY29yZHMsXG4gICAgcmV0dXJuVHlwZTogc2lnbmF0dXJlLnJldHVyblR5cGUsXG4gICAgdHlwZVBhcmFtZXRlcnM6IG5ldyBNYXAoKHNpZ25hdHVyZS50eXBlUGFyYW1ldGVycyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyXSkpLFxuICAgIHZhbHVlUmVjb3JkTmFtZXNcbiAgfVxuICBjb25zdCBib2R5ID0gY29udmVydEJsb2NrKG5vZGUuYm9keSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dClcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keSxcbiAgICBraW5kOiBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIixcbiAgICBsb2NhdGlvbjogc2lnbmF0dXJlLmxvY2F0aW9uLFxuICAgIG5hbWU6IHNpZ25hdHVyZS5uYW1lLFxuICAgIHBhcmFtZXRlcnM6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGU6IHNpZ25hdHVyZS5yZXR1cm5UeXBlLFxuICAgIC4uLihzaWduYXR1cmUudHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IHNpZ25hdHVyZS50eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgfSwge25hbWU6IHNpZ25hdHVyZS5uYW1lTG9jYXRpb259KVxufVxuXG4vKipcbiAqIFJlc29sdmVzIHBhcnNlci1vd25lZCBwYWlyIGxvb3BzIHRvIGV4YWN0IGRlY2xhcmF0aW9ucyBpbnNpZGUgb25lIGxleGljYWwgb3duZXIuXG4gKiBBbWJpZ3VvdXMgc2FtZS1uYW1lIGRlY2xhcmF0aW9ucyBwcm9kdWNlIG5vIGV2aWRlbmNlIGFuZCBmYWlsIGR1cmluZyBsb29wIGNvbnZlcnNpb24uXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gRnVuY3Rpb24gYm9keSBvciBlbnRyeS1wb2ludCBzdWJ0cmVlLlxuICogQHJldHVybnMge1NldDxvYmplY3Q+fSBFeGFjdCBwYWlyLWl0ZXJhdGVkIHBhcnNlciBkZWNsYXJhdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIG9yZGVyZWRNYXBEZWNsYXJhdGlvbnNGb3IodmFsdWUpIHtcbiAgLyoqIEB0eXBlIHt7ZGVjbGFyYXRpb246IG9iamVjdCwgbmFtZTogc3RyaW5nLCBvZmZzZXQ6IG51bWJlcn1bXX0gKi9cbiAgY29uc3QgZGVjbGFyYXRpb25zID0gW11cbiAgLyoqIEB0eXBlIHt7bmFtZTogc3RyaW5nLCBvZmZzZXQ6IG51bWJlcn1bXX0gKi9cbiAgY29uc3QgcmVjZWl2ZXJzID0gW11cbiAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0KClcbiAgLyoqXG4gICAqIFZpc2l0cyBvbmUgcGFyc2VyIGNhbmRpZGF0ZS5cbiAgICogQHBhcmFtIHt1bmtub3dufSBjYW5kaWRhdGUgLSBQYXJzZXIgY2FuZGlkYXRlLlxuICAgKi9cbiAgY29uc3QgdmlzaXQgPSAoY2FuZGlkYXRlKSA9PiB7XG4gICAgaWYgKCFjYW5kaWRhdGUgfHwgdHlwZW9mIGNhbmRpZGF0ZSAhPSBcIm9iamVjdFwiIHx8IHNlZW4uaGFzKGNhbmRpZGF0ZSkpIHJldHVyblxuICAgIHNlZW4uYWRkKGNhbmRpZGF0ZSlcbiAgICBjb25zdCB0eXBlID0gUmVmbGVjdC5nZXQoY2FuZGlkYXRlLCBcInR5cGVcIilcblxuICAgIGlmICh0eXBlID09IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiIHx8IHR5cGUgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpIHJldHVyblxuICAgIGlmICh0eXBlID09IFwiVmFyaWFibGVEZWNsYXJhdG9yXCIpIHtcbiAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBSZWZsZWN0LmdldChjYW5kaWRhdGUsIFwiaWRcIilcblxuICAgICAgaWYgKFJlZmxlY3QuZ2V0KGlkZW50aWZpZXIsIFwidHlwZVwiKSA9PSBcIklkZW50aWZpZXJcIikgZGVjbGFyYXRpb25zLnB1c2goe1xuICAgICAgICBkZWNsYXJhdGlvbjogY2FuZGlkYXRlLFxuICAgICAgICBuYW1lOiBSZWZsZWN0LmdldChpZGVudGlmaWVyLCBcIm5hbWVcIiksXG4gICAgICAgIG9mZnNldDogUmVmbGVjdC5nZXQoY2FuZGlkYXRlLCBcInN0YXJ0XCIpXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIkZvck9mU3RhdGVtZW50XCIpIHtcbiAgICAgIGNvbnN0IGxlZnQgPSBSZWZsZWN0LmdldChjYW5kaWRhdGUsIFwibGVmdFwiKVxuICAgICAgY29uc3QgcmlnaHQgPSBSZWZsZWN0LmdldChjYW5kaWRhdGUsIFwicmlnaHRcIilcbiAgICAgIGNvbnN0IGxvb3BEZWNsYXJhdGlvbnMgPSBsZWZ0ICYmIHR5cGVvZiBsZWZ0ID09IFwib2JqZWN0XCIgPyBSZWZsZWN0LmdldChsZWZ0LCBcImRlY2xhcmF0aW9uc1wiKSA6IHVuZGVmaW5lZFxuICAgICAgY29uc3QgcGF0dGVybiA9IEFycmF5LmlzQXJyYXkobG9vcERlY2xhcmF0aW9ucykgJiYgbG9vcERlY2xhcmF0aW9ucy5sZW5ndGggPT0gMSA/IFJlZmxlY3QuZ2V0KGxvb3BEZWNsYXJhdGlvbnNbMF0sIFwiaWRcIikgOiB1bmRlZmluZWRcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gcGF0dGVybiAmJiB0eXBlb2YgcGF0dGVybiA9PSBcIm9iamVjdFwiID8gUmVmbGVjdC5nZXQocGF0dGVybiwgXCJlbGVtZW50c1wiKSA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAoUmVmbGVjdC5nZXQobGVmdCwgXCJraW5kXCIpID09IFwiY29uc3RcIiAmJiBSZWZsZWN0LmdldChwYXR0ZXJuLCBcInR5cGVcIikgPT0gXCJBcnJheVBhdHRlcm5cIiAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KGVsZW1lbnRzKSAmJiBlbGVtZW50cy5sZW5ndGggPT0gMiAmJiBlbGVtZW50cy5ldmVyeSgoZWxlbWVudCkgPT4gUmVmbGVjdC5nZXQoZWxlbWVudCwgXCJ0eXBlXCIpID09IFwiSWRlbnRpZmllclwiKSAmJlxuICAgICAgICBSZWZsZWN0LmdldChyaWdodCwgXCJ0eXBlXCIpID09IFwiSWRlbnRpZmllclwiKSByZWNlaXZlcnMucHVzaCh7XG4gICAgICAgIG5hbWU6IFJlZmxlY3QuZ2V0KHJpZ2h0LCBcIm5hbWVcIiksXG4gICAgICAgIG9mZnNldDogUmVmbGVjdC5nZXQoY2FuZGlkYXRlLCBcInN0YXJ0XCIpXG4gICAgICB9KVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrZXksIGNoaWxkXSBvZiBPYmplY3QuZW50cmllcyhjYW5kaWRhdGUpKSB7XG4gICAgICBpZiAoW1wiZXh0cmFcIiwgXCJpbm5lckNvbW1lbnRzXCIsIFwibGVhZGluZ0NvbW1lbnRzXCIsIFwibG9jXCIsIFwidHJhaWxpbmdDb21tZW50c1wiXS5pbmNsdWRlcyhrZXkpKSBjb250aW51ZVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjaGlsZCkgdmlzaXQoaXRlbSlcbiAgICAgIH0gZWxzZSB2aXNpdChjaGlsZClcbiAgICB9XG4gIH1cblxuICB2aXNpdCh2YWx1ZSlcbiAgY29uc3Qgc2VsZWN0ZWQgPSBuZXcgU2V0KClcbiAgZm9yIChjb25zdCByZWNlaXZlciBvZiByZWNlaXZlcnMpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gZGVjbGFyYXRpb25zLmZpbHRlcigoe25hbWUsIG9mZnNldH0pID0+IG5hbWUgPT0gcmVjZWl2ZXIubmFtZSAmJiBvZmZzZXQgPCByZWNlaXZlci5vZmZzZXQpXG5cbiAgICBpZiAobWF0Y2hlcy5sZW5ndGggPT0gMSkgc2VsZWN0ZWQuYWRkKG1hdGNoZXNbMF0uZGVjbGFyYXRpb24pXG4gIH1cblxuICByZXR1cm4gc2VsZWN0ZWRcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgZW1wdHkgbmF0aXZlIEVycm9yIHN1YmNsYXNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gbm9kZSAtIEJhYmVsIGNsYXNzIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIFByZWRlY2xhcmVkIHNlbWFudGljIGVycm9yLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSBTZW1hbnRpYyBlcnJvciBkZWNsYXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFTY3JpcHRFcnJvcihub2RlLCBkZWNsYXJhdGlvbiwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoIW5vZGUuaWQgfHwgbm9kZS5zdXBlckNsYXNzPy50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IG5vZGUuc3VwZXJDbGFzcy5uYW1lICE9IFwiRXJyb3JcIiB8fFxuICAgIG5vZGUuYm9keS5ib2R5Lmxlbmd0aCAhPSAwIHx8IG5vZGUuZGVjb3JhdG9ycz8ubGVuZ3RoIHx8IG5vZGUudHlwZVBhcmFtZXRlcnMgfHwgbm9kZS5zdXBlclR5cGVQYXJhbWV0ZXJzIHx8XG4gICAgUmVmbGVjdC5nZXQobm9kZSwgXCJhYnN0cmFjdFwiKSB8fCBSZWZsZWN0LmdldChub2RlLCBcImRlY2xhcmVcIikgfHwgUmVmbGVjdC5nZXQobm9kZSwgXCJpbXBsZW1lbnRzXCIpPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibm9uY2Fub25pY2FsIHR5cGVkIGVycm9yIGRlY2xhcmF0aW9uXCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoZGVjbGFyYXRpb24sIHtcbiAgICBuYW1lOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5pZCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgdHlwZTogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuc3VwZXJDbGFzcywgZmlsZW5hbWUsIHNvdXJjZSlcbiAgfSlcbn1cblxuLyoqXG4gKiBQcmVkZWNsYXJlcyB0aGUgYm91bmRlZCBuYXRpdmUgcHJpdmF0ZS1maWVsZCByZWZlcmVuY2UtY2xhc3MgcHJvZmlsZSBhbmQgYWxsIGNhbGxhYmxlIHNpZ25hdHVyZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBub2RlIC0gUGFyc2VyIGNsYXNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIFByZWRlY2xhcmVkIGNsYXNzIGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gbm9taW5hbE5hbWVzIC0gTm9taW5hbCB0eXBlcyBieSBuYW1lLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIFNvdXJjZSBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gU2VtYW50aWMgY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIHByZWRlY2xhcmVSZWZlcmVuY2VDbGFzcyhub2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICghbm9kZS5pZCB8fCBub2RlLnN1cGVyQ2xhc3MgfHwgbm9kZS5kZWNvcmF0b3JzPy5sZW5ndGggfHwgbm9kZS50eXBlUGFyYW1ldGVycyB8fCBub2RlLnN1cGVyVHlwZVBhcmFtZXRlcnMgfHxcbiAgICBSZWZsZWN0LmdldChub2RlLCBcImFic3RyYWN0XCIpIHx8IFJlZmxlY3QuZ2V0KG5vZGUsIFwiZGVjbGFyZVwiKSB8fCBSZWZsZWN0LmdldChub2RlLCBcImltcGxlbWVudHNcIik/Lmxlbmd0aCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJyZWZlcmVuY2UgY2xhc3MgaW5oZXJpdGFuY2UsIGdlbmVyaWNzLCBkZWNvcmF0aW9uLCBvciBtb2RpZmllclwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBjb25zdHJ1Y3Rvck5vZGVzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NNZXRob2RbXX0gKi8gKFxuICAgIG5vZGUuYm9keS5ib2R5LmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIudHlwZSA9PSBcIkNsYXNzTWV0aG9kXCIgJiYgbWVtYmVyLmtpbmQgPT0gXCJjb25zdHJ1Y3RvclwiKSlcbiAgY29uc3QgZmllbGROb2RlcyA9IG5vZGUuYm9keS5ib2R5LmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIudHlwZSA9PSBcIkNsYXNzUHJvcGVydHlcIiB8fCBtZW1iZXIudHlwZSA9PSBcIkNsYXNzUHJpdmF0ZVByb3BlcnR5XCIpXG4gIGNvbnN0IG1ldGhvZE5vZGVzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NNZXRob2RbXX0gKi8gKFxuICAgIG5vZGUuYm9keS5ib2R5LmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIudHlwZSA9PSBcIkNsYXNzTWV0aG9kXCIgJiYgbWVtYmVyLmtpbmQgPT0gXCJtZXRob2RcIikpXG5cbiAgaWYgKGNvbnN0cnVjdG9yTm9kZXMubGVuZ3RoICE9IDEgfHwgZmllbGROb2Rlcy5sZW5ndGggPT0gMCB8fFxuICAgIGZpZWxkTm9kZXMubGVuZ3RoICsgbWV0aG9kTm9kZXMubGVuZ3RoICsgY29uc3RydWN0b3JOb2Rlcy5sZW5ndGggIT0gbm9kZS5ib2R5LmJvZHkubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInJlZmVyZW5jZSBjbGFzcyByZXF1aXJlcyBwcml2YXRlIGZpZWxkcywgb25lIGNvbnN0cnVjdG9yLCBhbmQgb3JkaW5hcnkgbWV0aG9kc1wiLCBsb2NhdGlvbilcbiAgfVxuICBkZWNsYXJhdGlvbi5maWVsZHMgPSBmaWVsZE5vZGVzLm1hcCgobWVtYmVyLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGZpZWxkTG9jYXRpb24gPSBub2RlTG9jYXRpb24obWVtYmVyLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGxldCBuYW1lXG4gICAgbGV0IG5hbWVMb2NhdGlvblxuICAgIGxldCB0eXBlXG5cbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIpIHtcbiAgICAgIGlmIChtZW1iZXIudHlwZSAhPSBcIkNsYXNzUHJvcGVydHlcIiB8fCBtZW1iZXIua2V5LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgbWVtYmVyLmNvbXB1dGVkIHx8IG1lbWJlci5zdGF0aWMgfHxcbiAgICAgICAgbWVtYmVyLmFjY2Vzc2liaWxpdHkgIT0gXCJwcml2YXRlXCIgfHwgbWVtYmVyLnJlYWRvbmx5IHx8IG1lbWJlci52YWx1ZSB8fCBtZW1iZXIub3B0aW9uYWwgfHwgbWVtYmVyLmRlY29yYXRvcnM/Lmxlbmd0aCB8fFxuICAgICAgICBSZWZsZWN0LmdldChtZW1iZXIsIFwiYWJzdHJhY3RcIikgfHwgUmVmbGVjdC5nZXQobWVtYmVyLCBcImRlY2xhcmVcIikpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm5vbmNhbm9uaWNhbCBwcml2YXRlIGluc3RhbmNlIGZpZWxkXCIsIGZpZWxkTG9jYXRpb24pXG4gICAgICB9XG4gICAgICBuYW1lID0gbWVtYmVyLmtleS5uYW1lXG4gICAgICBuYW1lTG9jYXRpb24gPSBpZGVudGlmaWVyTG9jYXRpb24obWVtYmVyLmtleSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIHR5cGUgPSBjb252ZXJ0VHlwZVNjcmlwdFR5cGUobWVtYmVyLnR5cGVBbm5vdGF0aW9uLCBgUHJpdmF0ZSBmaWVsZCAnJHtuYW1lfSdgLCBmaWVsZExvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCBub21pbmFsTmFtZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtZW1iZXIudHlwZSAhPSBcIkNsYXNzUHJpdmF0ZVByb3BlcnR5XCIgfHwgbWVtYmVyLmtleS50eXBlICE9IFwiUHJpdmF0ZU5hbWVcIiB8fCBtZW1iZXIuc3RhdGljIHx8IG1lbWJlci52YWx1ZSB8fFxuICAgICAgICBtZW1iZXIuZGVjb3JhdG9ycz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJub25jYW5vbmljYWwgcHJpdmF0ZSBpbnN0YW5jZSBmaWVsZFwiLCBmaWVsZExvY2F0aW9uKVxuICAgICAgfVxuICAgICAgbmFtZSA9IG1lbWJlci5rZXkuaWQubmFtZVxuICAgICAgbmFtZUxvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKG1lbWJlci5rZXkuaWQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICBjb25zdCBjb21tZW50ID0gbWVtYmVyLmxlYWRpbmdDb21tZW50cz8uYXQoLTEpXG4gICAgICBjb25zdCBnYXAgPSBjb21tZW50ID8gc291cmNlLnNsaWNlKGNvbW1lbnQuZW5kID8/IDAsIG1lbWJlci5zdGFydCA/PyAwKSA6IFwiXCJcbiAgICAgIGNvbnN0IGJsb2NrID0gY29tbWVudD8udHlwZSA9PSBcIkNvbW1lbnRCbG9ja1wiICYmIGNvbW1lbnQudmFsdWUuc3RhcnRzV2l0aChcIipcIikgJiYgL15cXHMqJC91LnRlc3QoZ2FwKVxuICAgICAgICA/IHBhcnNlQ29tbWVudChgLyoke2NvbW1lbnQudmFsdWV9Ki9gKVswXSA6IHVuZGVmaW5lZFxuICAgICAgY29uc3QgdGFncyA9IGJsb2NrPy50YWdzLmZpbHRlcigodGFnKSA9PiB0YWcudGFnID09IFwidHlwZVwiKSA/PyBbXVxuXG4gICAgICBpZiAoIWNvbW1lbnQgfHwgdGFncy5sZW5ndGggIT0gMSB8fCB0YWdzWzBdLm5hbWUgfHwgdGFnc1swXS5kZXNjcmlwdGlvbikge1xuICAgICAgICByZXR1cm4gbWlzc2luZ1R5cGUobGFuZ3VhZ2UsIGBQcml2YXRlIGZpZWxkICcke25hbWV9J2AsIGZpZWxkTG9jYXRpb24pXG4gICAgICB9XG4gICAgICB0eXBlID0gY29udmVydFR5cGUodGFnc1swXS50eXBlLCBsYW5ndWFnZSwgYFByaXZhdGUgZmllbGQgJyR7bmFtZX0nYCwgZmllbGRMb2NhdGlvbiwgc291cmNlLFxuICAgICAgICBjb21tZW50VGFnTG9jYXRpb24oLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ29tbWVudEJsb2NrfSAqLyAoY29tbWVudCksIHRhZ3NbMF0sIFwidHlwZVwiLCBmaWxlbmFtZSwgc291cmNlKSwgbm9taW5hbE5hbWVzKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmZpZWxkOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IGZpZWxkTG9jYXRpb24sIG5hbWUsIHR5cGV9LCB7bmFtZTogbmFtZUxvY2F0aW9ufSlcbiAgfSlcbiAgY29uc3Qgb3duZWRGaWVsZHMgPSBkZWNsYXJhdGlvbi5maWVsZHMuZmlsdGVyKCh7dHlwZX0pID0+IHR5cGUua2luZCA9PSBcIk93bmVkUmVzb3VyY2VUeXBlXCIpXG5cbiAgaWYgKG93bmVkRmllbGRzLmxlbmd0aCA9PSAxKSB7XG4gICAgY29uc3Qgb3duZWRGaWVsZCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUHJpdmF0ZUZpZWxkICYge3R5cGU6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLk93bmVkUmVzb3VyY2VUeXBlfX0gKi8gKG93bmVkRmllbGRzWzBdKVxuXG4gICAgZGVjbGFyYXRpb24ub3duZXJzaGlwID0ge2ZpZWxkSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAob3duZWRGaWVsZC5pZCksIGtpbmQ6IFwib3duZWRSZXNvdXJjZVwiLCByZXNvdXJjZUlkOiBvd25lZEZpZWxkLnR5cGUucmVzb3VyY2VJZH1cbiAgfVxuXG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzTWV0aG9kfSAqLyAoY29uc3RydWN0b3JOb2Rlc1swXSlcbiAgY29uc3QgY29uc3RydWN0b3JTaWduYXR1cmUgPSBjb252ZXJ0Q2xhc3NDYWxsYWJsZVNpZ25hdHVyZShjb25zdHJ1Y3Rvck5vZGUsIGRlY2xhcmF0aW9uLCBub21pbmFsTmFtZXMsIGxhbmd1YWdlLFxuICAgIGZpbGVuYW1lLCBzb3VyY2UsIHRydWUpXG4gIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yID0gd2l0aFBhcnNlclJhbmdlcyh7Ym9keTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gKi8gKHt9KSxcbiAgICBpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmNvbnN0cnVjdG9yYCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ29uc3RydWN0b3JEZWNsYXJhdGlvblwiKSwgbG9jYXRpb246IGNvbnN0cnVjdG9yU2lnbmF0dXJlLmxvY2F0aW9uLFxuICAgIHBhcmFtZXRlcnM6IGNvbnN0cnVjdG9yU2lnbmF0dXJlLnBhcmFtZXRlcnN9LCB7Y29uc3RydWN0b3I6IGNvbnN0cnVjdG9yU2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pXG4gIGRlY2xhcmF0aW9uLm1ldGhvZHMgPSBtZXRob2ROb2Rlcy5tYXAoKG1ldGhvZE5vZGUsIGluZGV4KSA9PiB7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY29udmVydENsYXNzQ2FsbGFibGVTaWduYXR1cmUobWV0aG9kTm9kZSwgZGVjbGFyYXRpb24sIG5vbWluYWxOYW1lcywgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGZhbHNlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2JvZHk6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9ICovICh7fSksIGlkOiBgJHtkZWNsYXJhdGlvbi5pZH06bWV0aG9kOiR7aW5kZXh9YCxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1ldGhvZERlY2xhcmF0aW9uXCIpLCBsb2NhdGlvbjogc2lnbmF0dXJlLmxvY2F0aW9uLCBuYW1lOiBzaWduYXR1cmUubmFtZSxcbiAgICAgIHBhcmFtZXRlcnM6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzLCByZXR1cm5UeXBlOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlfSAqLyAoc2lnbmF0dXJlLnJldHVyblR5cGUpfSxcbiAgICB7bmFtZTogc2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pXG4gIH0pXG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoZGVjbGFyYXRpb24sIHtuYW1lOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5pZCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSByZWZlcmVuY2UgY2xhc3MgYm9keSBhZnRlciBldmVyeSBjbGFzcyBzaWduYXR1cmUgaXMgY29tcGxldGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBub2RlIC0gUGFyc2VyIGNsYXNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIENvbXBsZXRlIHByZWRlY2xhcmVkIGNsYXNzIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IG5vbWluYWxOYW1lcyAtIE5vbWluYWwgdHlwZXMgYnkgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn0gdmFsdWVOYW1lcyAtIE5vbWluYWwgY29uc3RydWN0b3JzIGJ5IG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZHMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gQ2xhc3NlcyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgSmF2YVNjcmlwdEZ1bmN0aW9uU2lnbmF0dXJlPn0gZnVuY3Rpb25zIC0gVG9wLWxldmVsIHNpZ25hdHVyZXMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvck5hbWVzIC0gRXJyb3JzIGJ5IG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvcnMgLSBFcnJvcnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gU291cmNlIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2Fub25pY2FsWmVyb1JlcXVpcmVkIC0gV2hldGhlciBzY2FsYXIgb3V0cHV0IGNhbm9uaWNhbGl6ZXMgemVyby5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBDb21wbGV0ZWQgc2VtYW50aWMgY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRSZWZlcmVuY2VDbGFzc0JvZGllcyhub2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCB2YWx1ZU5hbWVzLCByZWNvcmRzLCBjbGFzc2VzLCBmdW5jdGlvbnMsIGVycm9yTmFtZXMsXG4gIGVycm9ycywgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCkge1xuICBjb25zdCBjb25zdHJ1Y3Rvck5vZGUgPSAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc01ldGhvZH0gKi8gKFxuICAgIG5vZGUuYm9keS5ib2R5LmZpbmQoKG1lbWJlcikgPT4gbWVtYmVyLnR5cGUgPT0gXCJDbGFzc01ldGhvZFwiICYmIG1lbWJlci5raW5kID09IFwiY29uc3RydWN0b3JcIikpXG4gIGNvbnN0IG1ldGhvZE5vZGVzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NNZXRob2RbXX0gKi8gKFxuICAgIG5vZGUuYm9keS5ib2R5LmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIudHlwZSA9PSBcIkNsYXNzTWV0aG9kXCIgJiYgbWVtYmVyLmtpbmQgPT0gXCJtZXRob2RcIikpXG4gIGNvbnN0IGJhc2VDb250ZXh0ID0ge2JpbmRpbmdzOiBuZXcgTWFwKCksIGNsYXNzZXMsIGN1cnJlbnRDbGFzczogZGVjbGFyYXRpb24sIGVycm9yTmFtZXMsIGVycm9ycywgZnVuY3Rpb25zLFxuICAgIHJlY29yZE5hbWVzOiBub21pbmFsTmFtZXMsIHJlY29yZHMsIHZhbHVlUmVjb3JkTmFtZXM6IHZhbHVlTmFtZXN9XG4gIGNvbnN0IGNvbnN0cnVjdG9yQ29udGV4dCA9IHsuLi5iYXNlQ29udGV4dCxcbiAgICBiaW5kaW5nczogbmV3IE1hcChkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLFxuICAgIHJldHVyblR5cGU6IHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJUeXBlUmVmZXJlbmNlXCIpLCBuYW1lOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJ2b2lkXCIpfX1cblxuICBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5ib2R5ID0gY29udmVydEJsb2NrKGNvbnN0cnVjdG9yTm9kZS5ib2R5LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLFxuICAgIGNvbnN0cnVjdG9yQ29udGV4dClcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1ldGhvZE5vZGVzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IG1ldGhvZCA9IGRlY2xhcmF0aW9uLm1ldGhvZHNbaW5kZXhdXG4gICAgY29uc3QgY29udGV4dCA9IHsuLi5iYXNlQ29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAobWV0aG9kLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyLnR5cGVdKSksXG4gICAgICByZXR1cm5UeXBlOiBtZXRob2QucmV0dXJuVHlwZX1cblxuICAgIG1ldGhvZC5ib2R5ID0gY29udmVydEJsb2NrKG1ldGhvZE5vZGVzW2luZGV4XS5ib2R5LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KVxuICB9XG5cbiAgcmV0dXJuIGRlY2xhcmF0aW9uXG59XG5cbi8qKlxuICogUmVhZHMgb25lIGNvbnN0cnVjdG9yIG9yIG1ldGhvZCBzaWduYXR1cmUgd2l0aG91dCBhZG1pdHRpbmcgb3ZlcmxvYWRzIG9yIG1vZGlmaWVycy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzTWV0aG9kfSBub2RlIC0gUGFyc2VyIG1ldGhvZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBEZWNsYXJpbmcgY2xhc3MuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSBub21pbmFsTmFtZXMgLSBOb21pbmFsIHR5cGVzLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIFNvdXJjZSBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNvbnN0cnVjdG9yIC0gV2hldGhlciB0aGlzIGlzIHRoZSBjb25zdHJ1Y3Rvci5cbiAqIEByZXR1cm5zIHt7bG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYW1lOiBzdHJpbmcsIG5hbWVMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHBhcmFtZXRlcnM6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdLCByZXR1cm5UeXBlPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9fSBTaWduYXR1cmUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRDbGFzc0NhbGxhYmxlU2lnbmF0dXJlKG5vZGUsIGRlY2xhcmF0aW9uLCBub21pbmFsTmFtZXMsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb25zdHJ1Y3Rvcikge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLmNvbXB1dGVkIHx8IG5vZGUuc3RhdGljIHx8IG5vZGUuYXN5bmMgfHwgbm9kZS5nZW5lcmF0b3IgfHwgbm9kZS5kZWNvcmF0b3JzPy5sZW5ndGggfHwgbm9kZS50eXBlUGFyYW1ldGVycyB8fFxuICAgIG5vZGUua2V5LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgY29uc3RydWN0b3IgIT0gKG5vZGUua2luZCA9PSBcImNvbnN0cnVjdG9yXCIpIHx8XG4gICAgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgJiYgbm9kZS5hY2Nlc3NpYmlsaXR5ICE9IG51bGwpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibm9uY2Fub25pY2FsIHJlZmVyZW5jZSBjbGFzcyBjYWxsYWJsZVwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBkb2N1bWVudGVkID0gbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCJcbiAgICA/IGpzZG9jVHlwZXMoLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKG5vZGUpKSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICA6IHVuZGVmaW5lZFxuICBpZiAoY29uc3RydWN0b3IgJiYgKG5vZGUucmV0dXJuVHlwZSB8fCBkb2N1bWVudGVkPy5yZXR1cm5UeXBlKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJjb25zdHJ1Y3RvciByZXR1cm4gYW5ub3RhdGlvblwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBwYXJhbWV0ZXJzID0gbm9kZS5wYXJhbXMubWFwKChwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAocGFyYW1ldGVyLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgcGFyYW1ldGVyLm9wdGlvbmFsIHx8IHBhcmFtZXRlci5kZWNvcmF0b3JzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJub25jYW5vbmljYWwgbWV0aG9kIHBhcmFtZXRlclwiLCBwYXJhbWV0ZXJMb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgZG9jdW1lbnRlZFR5cGUgPSBkb2N1bWVudGVkPy5wYXJhbWV0ZXJzLmdldChwYXJhbWV0ZXIubmFtZSlcbiAgICBjb25zdCB0eXBlID0gbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCJcbiAgICAgID8gY29udmVydFR5cGVTY3JpcHRUeXBlKHBhcmFtZXRlci50eXBlQW5ub3RhdGlvbiwgYFBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIG5vbWluYWxOYW1lcylcbiAgICAgIDogY29udmVydFR5cGUoZG9jdW1lbnRlZFR5cGU/LnNvdXJjZVR5cGUsIGxhbmd1YWdlLCBgUGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfSdgLCBwYXJhbWV0ZXJMb2NhdGlvbiwgc291cmNlLFxuICAgICAgICBkb2N1bWVudGVkVHlwZT8ubG9jYXRpb24sIG5vbWluYWxOYW1lcylcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQYXJhbWV0ZXJcIiksIGxvY2F0aW9uOiBwYXJhbWV0ZXJMb2NhdGlvbiwgbmFtZTogcGFyYW1ldGVyLm5hbWUsIHR5cGV9LFxuICAgICAge25hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfSlcbiAgaWYgKGRvY3VtZW50ZWQgJiYgZG9jdW1lbnRlZC5wYXJhbWV0ZXJzLnNpemUgIT0gcGFyYW1ldGVycy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibWV0aG9kIEpTRG9jIHBhcmFtZXRlciBtaXNtYXRjaFwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBuYW1lID0gY29uc3RydWN0b3IgPyBcImNvbnN0cnVjdG9yXCIgOiBub2RlLmtleS5uYW1lXG4gIGNvbnN0IG5hbWVMb2NhdGlvbiA9IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmtleSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoIWNvbnN0cnVjdG9yICYmIHJlZmVyZW5jZU1ldGhvZEhvb2tzLmhhcyhuYW1lKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYHJlc2VydmVkIHJlZmVyZW5jZSBtZXRob2QgJyR7bmFtZX0nYCwgbmFtZUxvY2F0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHtsb2NhdGlvbiwgbmFtZSwgbmFtZUxvY2F0aW9uLCBwYXJhbWV0ZXJzLCAuLi4oY29uc3RydWN0b3IgPyB7fSA6IHtyZXR1cm5UeXBlOiBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIlxuICAgID8gY29udmVydFR5cGVTY3JpcHRSZXR1cm5UeXBlKG5vZGUucmV0dXJuVHlwZSwgYE1ldGhvZCAnJHtuYW1lfScgcmV0dXJuYCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIG5vbWluYWxOYW1lcylcbiAgICA6IGNvbnZlcnRSZXR1cm5UeXBlKGRvY3VtZW50ZWQ/LnJldHVyblR5cGU/LnNvdXJjZVR5cGUsIGxhbmd1YWdlLCBgTWV0aG9kICcke25hbWV9JyByZXR1cm5gLCBsb2NhdGlvbiwgc291cmNlLFxuICAgICAgZG9jdW1lbnRlZD8ucmV0dXJuVHlwZT8ubG9jYXRpb24sIG5vbWluYWxOYW1lcyl9KX1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgVHlwZVNjcmlwdCByZWFkb25seSBjb25zdHJ1Y3Rvci1wYXJhbWV0ZXIgcmVjb3JkIHByb2ZpbGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBub2RlIC0gQ2xhc3MgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIFByZWRlY2xhcmVkIG5vbWluYWwgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIEFsbCBub21pbmFsIGRlY2xhcmF0aW9ucyBieSBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbn0gU2VtYW50aWMgcmVjb3JkIGRlY2xhcmF0aW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHlwZVNjcmlwdFJlY29yZChub2RlLCBkZWNsYXJhdGlvbiwgcmVjb3JkTmFtZXMsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgaW1wbGVtZW50c18gPSBSZWZsZWN0LmdldChub2RlLCBcImltcGxlbWVudHNcIilcbiAgY29uc3QgbWl4aW5zID0gUmVmbGVjdC5nZXQobm9kZSwgXCJtaXhpbnNcIilcblxuICBpZiAoIW5vZGUuaWQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInR5cGVzY3JpcHRcIiwgXCJhbm9ueW1vdXMgcmVjb3JkIGNsYXNzXCIsIGxvY2F0aW9uKVxuICBpZiAobm9kZS5zdXBlckNsYXNzIHx8IChBcnJheS5pc0FycmF5KGltcGxlbWVudHNfKSAmJiBpbXBsZW1lbnRzXy5sZW5ndGgpIHx8IG5vZGUuZGVjb3JhdG9ycz8ubGVuZ3RoIHx8IG5vZGUuc3VwZXJUeXBlUGFyYW1ldGVycyB8fFxuICAgIFJlZmxlY3QuZ2V0KG5vZGUsIFwiYWJzdHJhY3RcIikgfHwgUmVmbGVjdC5nZXQobm9kZSwgXCJkZWNsYXJlXCIpIHx8IChBcnJheS5pc0FycmF5KG1peGlucykgJiYgbWl4aW5zLmxlbmd0aCkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJ0eXBlc2NyaXB0XCIsIFwicmVjb3JkIGluaGVyaXRhbmNlLCBkZWNvcmF0aW9uLCBvciBtb2RpZmllclwiLCBsb2NhdGlvbilcbiAgfVxuICBpZiAobm9kZS5ib2R5LmJvZHkubGVuZ3RoICE9IDEgfHwgbm9kZS5ib2R5LmJvZHlbMF0udHlwZSAhPSBcIkNsYXNzTWV0aG9kXCIpIHtcbiAgICBjb25zdCBleHRyYSA9IG5vZGUuYm9keS5ib2R5WzFdID8/IG5vZGUuYm9keS5ib2R5WzBdID8/IG5vZGUuYm9keVxuXG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcInJlY29yZCBjbGFzcyBib2R5IG91dHNpZGUgb25lIGNvbnN0cnVjdG9yXCIsIG5vZGVMb2NhdGlvbihleHRyYSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgY29uc3RydWN0b3IgPSBub2RlLmJvZHkuYm9keVswXVxuICBjb25zdCB0eXBlUGFyYW1ldGVyTmFtZXMgPSBuZXcgTWFwKChkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyXSkpXG5cbiAgaWYgKGNvbnN0cnVjdG9yLmtpbmQgIT0gXCJjb25zdHJ1Y3RvclwiIHx8IGNvbnN0cnVjdG9yLmNvbXB1dGVkIHx8IGNvbnN0cnVjdG9yLnN0YXRpYyB8fCBjb25zdHJ1Y3Rvci5hc3luYyB8fCBjb25zdHJ1Y3Rvci5nZW5lcmF0b3IgfHxcbiAgICBjb25zdHJ1Y3Rvci5rZXkudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBjb25zdHJ1Y3Rvci5rZXkubmFtZSAhPSBcImNvbnN0cnVjdG9yXCIgfHwgY29uc3RydWN0b3IuZGVjb3JhdG9ycz8ubGVuZ3RoIHx8XG4gICAgY29uc3RydWN0b3IucmV0dXJuVHlwZSB8fCBjb25zdHJ1Y3Rvci50eXBlUGFyYW1ldGVycyB8fCBSZWZsZWN0LmdldChjb25zdHJ1Y3RvciwgXCJhY2Nlc3NpYmlsaXR5XCIpIHx8XG4gICAgY29uc3RydWN0b3IuYm9keS5ib2R5Lmxlbmd0aCAhPSAwIHx8IGNvbnN0cnVjdG9yLmJvZHkuZGlyZWN0aXZlcy5sZW5ndGggIT0gMCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInR5cGVzY3JpcHRcIiwgXCJub25jYW5vbmljYWwgcmVjb3JkIGNvbnN0cnVjdG9yXCIsIG5vZGVMb2NhdGlvbihjb25zdHJ1Y3RvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgZGVjbGFyYXRpb24uZmllbGRzID0gY29uc3RydWN0b3IucGFyYW1zLm1hcCgocGFyYW1ldGVyKSA9PiB7XG4gICAgY29uc3QgZmllbGRMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAocGFyYW1ldGVyLnR5cGUgIT0gXCJUU1BhcmFtZXRlclByb3BlcnR5XCIgfHwgcGFyYW1ldGVyLnJlYWRvbmx5ICE9PSB0cnVlIHx8IHBhcmFtZXRlci5hY2Nlc3NpYmlsaXR5IHx8IHBhcmFtZXRlci5vdmVycmlkZSB8fFxuICAgICAgcGFyYW1ldGVyLnBhcmFtZXRlci50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IHBhcmFtZXRlci5wYXJhbWV0ZXIub3B0aW9uYWwgfHwgcGFyYW1ldGVyLnBhcmFtZXRlci5kZWNvcmF0b3JzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInR5cGVzY3JpcHRcIiwgXCJyZWNvcmQgZmllbGQgb3V0c2lkZSByZWFkb25seSBwYXJhbWV0ZXItcHJvcGVydHkgcHJvZmlsZVwiLCBmaWVsZExvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBpZGVudGlmaWVyID0gcGFyYW1ldGVyLnBhcmFtZXRlclxuICAgIGNvbnN0IGZpZWxkID0ge1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkRmllbGRcIiksXG4gICAgICBsb2NhdGlvbjogZmllbGRMb2NhdGlvbixcbiAgICAgIG5hbWU6IGlkZW50aWZpZXIubmFtZSxcbiAgICAgIHR5cGU6IGNvbnZlcnRUeXBlU2NyaXB0VHlwZShpZGVudGlmaWVyLnR5cGVBbm5vdGF0aW9uLCBgUmVjb3JkIGZpZWxkICcke2lkZW50aWZpZXIubmFtZX0nYCwgZmllbGRMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgICAgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhmaWVsZCwge25hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihpZGVudGlmaWVyLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoZGVjbGFyYXRpb24sIHtuYW1lOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5pZCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBKU0RvYyBjb25zdHJ1Y3Rvci9yZWFkb25seS1hc3NpZ25tZW50L2ZyZWV6ZSByZWNvcmQgcHJvZmlsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzRGVjbGFyYXRpb259IG5vZGUgLSBDbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgbm9taW5hbCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IFNlbWFudGljIHJlY29yZCBkZWNsYXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFTY3JpcHRSZWNvcmQobm9kZSwgZGVjbGFyYXRpb24sIHJlY29yZE5hbWVzLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGltcGxlbWVudHNfID0gUmVmbGVjdC5nZXQobm9kZSwgXCJpbXBsZW1lbnRzXCIpXG4gIGNvbnN0IG1peGlucyA9IFJlZmxlY3QuZ2V0KG5vZGUsIFwibWl4aW5zXCIpXG5cbiAgaWYgKCFub2RlLmlkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwiYW5vbnltb3VzIHJlY29yZCBjbGFzc1wiLCBsb2NhdGlvbilcbiAgaWYgKG5vZGUuc3VwZXJDbGFzcyB8fCBub2RlLmRlY29yYXRvcnM/Lmxlbmd0aCB8fCBub2RlLnR5cGVQYXJhbWV0ZXJzIHx8IG5vZGUuc3VwZXJUeXBlUGFyYW1ldGVycyB8fFxuICAgIChBcnJheS5pc0FycmF5KGltcGxlbWVudHNfKSAmJiBpbXBsZW1lbnRzXy5sZW5ndGgpIHx8IChBcnJheS5pc0FycmF5KG1peGlucykgJiYgbWl4aW5zLmxlbmd0aCkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwicmVjb3JkIGluaGVyaXRhbmNlIG9yIGRlY29yYXRpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgaWYgKG5vZGUuYm9keS5ib2R5Lmxlbmd0aCAhPSAxIHx8IG5vZGUuYm9keS5ib2R5WzBdLnR5cGUgIT0gXCJDbGFzc01ldGhvZFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcInJlY29yZCBjbGFzcyBib2R5IG91dHNpZGUgb25lIGNvbnN0cnVjdG9yXCIsIG5vZGVMb2NhdGlvbihub2RlLmJvZHkuYm9keVsxXSA/PyBub2RlLmJvZHkuYm9keVswXSA/PyBub2RlLmJvZHksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gbm9kZS5ib2R5LmJvZHlbMF1cbiAgY29uc3QgdHlwZVBhcmFtZXRlck5hbWVzID0gbmV3IE1hcCgoZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPz8gW10pLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlcl0pKVxuXG4gIGlmIChjb25zdHJ1Y3Rvci5raW5kICE9IFwiY29uc3RydWN0b3JcIiB8fCBjb25zdHJ1Y3Rvci5jb21wdXRlZCB8fCBjb25zdHJ1Y3Rvci5zdGF0aWMgfHwgY29uc3RydWN0b3IuYXN5bmMgfHwgY29uc3RydWN0b3IuZ2VuZXJhdG9yIHx8XG4gICAgY29uc3RydWN0b3Iua2V5LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgY29uc3RydWN0b3Iua2V5Lm5hbWUgIT0gXCJjb25zdHJ1Y3RvclwiIHx8IGNvbnN0cnVjdG9yLmRlY29yYXRvcnM/Lmxlbmd0aCB8fFxuICAgIGNvbnN0cnVjdG9yLnJldHVyblR5cGUgfHwgY29uc3RydWN0b3IudHlwZVBhcmFtZXRlcnMgfHwgY29uc3RydWN0b3IuYm9keS5kaXJlY3RpdmVzLmxlbmd0aCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJub25jYW5vbmljYWwgcmVjb3JkIGNvbnN0cnVjdG9yXCIsIG5vZGVMb2NhdGlvbihjb25zdHJ1Y3RvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgcGFyYW1ldGVycyA9IGNvbnN0cnVjdG9yLnBhcmFtc1xuXG4gIGlmIChwYXJhbWV0ZXJzLnNvbWUoKHBhcmFtZXRlcikgPT4gcGFyYW1ldGVyLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgcGFyYW1ldGVyLm9wdGlvbmFsIHx8IHBhcmFtZXRlci5kZWNvcmF0b3JzPy5sZW5ndGgpKSB7XG4gICAgY29uc3QgaW52YWxpZCA9IHBhcmFtZXRlcnMuZmluZCgocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBwYXJhbWV0ZXIub3B0aW9uYWwgfHwgcGFyYW1ldGVyLmRlY29yYXRvcnM/Lmxlbmd0aClcblxuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJub25jYW5vbmljYWwgcmVjb3JkIGNvbnN0cnVjdG9yIHBhcmFtZXRlclwiLCBub2RlTG9jYXRpb24oaW52YWxpZCA/PyBjb25zdHJ1Y3RvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgZG9jdW1lbnRlZCA9IGpzZG9jVHlwZXMoLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKGNvbnN0cnVjdG9yKSksIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKGRvY3VtZW50ZWQucmV0dXJuVHlwZSB8fCBkb2N1bWVudGVkLnBhcmFtZXRlcnMuc2l6ZSAhPSBwYXJhbWV0ZXJzLmxlbmd0aCB8fCBjb25zdHJ1Y3Rvci5ib2R5LmJvZHkubGVuZ3RoICE9IHBhcmFtZXRlcnMubGVuZ3RoICsgMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJpbmNvbXBsZXRlIHJlY29yZCBjb25zdHJ1Y3RvciBwcm9maWxlXCIsIG5vZGVMb2NhdGlvbihjb25zdHJ1Y3RvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgZGVjbGFyYXRpb24uZmllbGRzID0gcGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlciwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuSWRlbnRpZmllcn0gKi8gKHBhcmFtZXRlcilcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBjb25zdHJ1Y3Rvci5ib2R5LmJvZHlbaW5kZXhdXG4gICAgY29uc3QgZG9jdW1lbnRlZFR5cGUgPSBkb2N1bWVudGVkLnBhcmFtZXRlcnMuZ2V0KGlkZW50aWZpZXIubmFtZSlcblxuICAgIGlmICghZG9jdW1lbnRlZFR5cGUgfHwgc3RhdGVtZW50LnR5cGUgIT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmV4cHJlc3Npb24udHlwZSAhPSBcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIgfHxcbiAgICAgIHN0YXRlbWVudC5leHByZXNzaW9uLm9wZXJhdG9yICE9IFwiPVwiIHx8IHN0YXRlbWVudC5leHByZXNzaW9uLmxlZnQudHlwZSAhPSBcIk1lbWJlckV4cHJlc3Npb25cIiB8fCBzdGF0ZW1lbnQuZXhwcmVzc2lvbi5sZWZ0LmNvbXB1dGVkIHx8XG4gICAgICBzdGF0ZW1lbnQuZXhwcmVzc2lvbi5sZWZ0Lm9iamVjdC50eXBlICE9IFwiVGhpc0V4cHJlc3Npb25cIiB8fCBzdGF0ZW1lbnQuZXhwcmVzc2lvbi5sZWZ0LnByb3BlcnR5LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHxcbiAgICAgIHN0YXRlbWVudC5leHByZXNzaW9uLmxlZnQucHJvcGVydHkubmFtZSAhPSBpZGVudGlmaWVyLm5hbWUgfHwgc3RhdGVtZW50LmV4cHJlc3Npb24ucmlnaHQudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fFxuICAgICAgc3RhdGVtZW50LmV4cHJlc3Npb24ucmlnaHQubmFtZSAhPSBpZGVudGlmaWVyLm5hbWUpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJyZWNvcmQgZmllbGQgbm90IGluaXRpYWxpemVkIGV4YWN0bHkgb25jZVwiLCBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgcmVhZG9ubHlDb21tZW50ID0gc3RhdGVtZW50LmxlYWRpbmdDb21tZW50cz8uYXQoLTEpXG4gICAgY29uc3QgZ2FwID0gcmVhZG9ubHlDb21tZW50ID8gc291cmNlLnNsaWNlKHJlYWRvbmx5Q29tbWVudC5lbmQgPz8gMCwgc3RhdGVtZW50LnN0YXJ0ID8/IDApIDogXCJcIlxuICAgIGNvbnN0IHRhZ3MgPSByZWFkb25seUNvbW1lbnQ/LnR5cGUgPT0gXCJDb21tZW50QmxvY2tcIiAmJiByZWFkb25seUNvbW1lbnQudmFsdWUuc3RhcnRzV2l0aChcIipcIilcbiAgICAgID8gcGFyc2VDb21tZW50KGAvKiR7cmVhZG9ubHlDb21tZW50LnZhbHVlfSovYClbMF0/LnRhZ3MgPz8gW11cbiAgICAgIDogW11cblxuICAgIGlmICghcmVhZG9ubHlDb21tZW50IHx8ICEvXlxccyokL3UudGVzdChnYXApIHx8IHRhZ3MubGVuZ3RoICE9IDEgfHwgdGFnc1swXS50YWcgIT0gXCJyZWFkb25seVwiIHx8XG4gICAgICB0YWdzWzBdLm5hbWUgfHwgdGFnc1swXS50eXBlIHx8IHRhZ3NbMF0uZGVzY3JpcHRpb24pIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJyZWNvcmQgZmllbGQgd2l0aG91dCBleGFjdCBAcmVhZG9ubHkgYW5ub3RhdGlvblwiLCBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgZmllbGQgPSB7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWNvcmRGaWVsZFwiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5hbWU6IGlkZW50aWZpZXIubmFtZSxcbiAgICAgIHR5cGU6IGNvbnZlcnRUeXBlKGRvY3VtZW50ZWRUeXBlLnNvdXJjZVR5cGUsIFwiamF2YXNjcmlwdFwiLCBgUmVjb3JkIGZpZWxkICcke2lkZW50aWZpZXIubmFtZX0nYCxcbiAgICAgICAgbm9kZUxvY2F0aW9uKGlkZW50aWZpZXIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UsIGRvY3VtZW50ZWRUeXBlLmxvY2F0aW9uLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlck5hbWVzKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGZpZWxkLCB7bmFtZTogaWRlbnRpZmllckxvY2F0aW9uKHN0YXRlbWVudC5leHByZXNzaW9uLmxlZnQucHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfSlcbiAgY29uc3QgZnJlZXplID0gY29uc3RydWN0b3IuYm9keS5ib2R5LmF0KC0xKVxuXG4gIGlmICghZnJlZXplIHx8IGZyZWV6ZS50eXBlICE9IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIHx8IGZyZWV6ZS5leHByZXNzaW9uLnR5cGUgIT0gXCJDYWxsRXhwcmVzc2lvblwiIHx8IGZyZWV6ZS5leHByZXNzaW9uLm9wdGlvbmFsIHx8XG4gICAgZnJlZXplLmV4cHJlc3Npb24uYXJndW1lbnRzLmxlbmd0aCAhPSAxIHx8IGZyZWV6ZS5leHByZXNzaW9uLmFyZ3VtZW50c1swXS50eXBlICE9IFwiVGhpc0V4cHJlc3Npb25cIiB8fFxuICAgICFpc0phdmFTY3JpcHRSZWNvcmRGcmVlemUoZnJlZXplLmV4cHJlc3Npb24pKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcInJlY29yZCBjb25zdHJ1Y3RvciB3aXRob3V0IGZpbmFsIE9iamVjdC5mcmVlemUodGhpcylcIiwgbm9kZUxvY2F0aW9uKGZyZWV6ZSA/PyBjb25zdHJ1Y3RvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge25hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmlkLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogUmVjb2duaXplcyB0aGUgY2Fub25pY2FsIHNvdXJjZSBmcmVlemUgb3IgdGhlIGdlbmVyYXRlZCBpZGVudGlmaWVyLWZyZWUgaW50cmluc2ljIG93bmVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2FsbEV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBGaW5hbCBjb25zdHJ1Y3RvciBjYWxsLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGNhbGwgb3ducyB0aGUgbmF0aXZlIHJlY29yZC1mcmVlemUgb3BlcmF0aW9uLlxuICovXG5mdW5jdGlvbiBpc0phdmFTY3JpcHRSZWNvcmRGcmVlemUoZXhwcmVzc2lvbikge1xuICBjb25zdCBjYWxsZWUgPSBleHByZXNzaW9uLmNhbGxlZVxuXG4gIGlmIChjYWxsZWUudHlwZSAhPSBcIk1lbWJlckV4cHJlc3Npb25cIiB8fCBjYWxsZWUuY29tcHV0ZWQgfHwgY2FsbGVlLm9wdGlvbmFsIHx8XG4gICAgY2FsbGVlLnByb3BlcnR5LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgY2FsbGVlLnByb3BlcnR5Lm5hbWUgIT0gXCJmcmVlemVcIikgcmV0dXJuIGZhbHNlXG4gIGlmIChjYWxsZWUub2JqZWN0LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHJldHVybiBjYWxsZWUub2JqZWN0Lm5hbWUgPT0gXCJPYmplY3RcIlxuICBpZiAoY2FsbGVlLm9iamVjdC50eXBlICE9IFwiTWVtYmVyRXhwcmVzc2lvblwiIHx8IGNhbGxlZS5vYmplY3QuY29tcHV0ZWQgfHwgY2FsbGVlLm9iamVjdC5vcHRpb25hbCB8fFxuICAgIGNhbGxlZS5vYmplY3QucHJvcGVydHkudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBjYWxsZWUub2JqZWN0LnByb3BlcnR5Lm5hbWUgIT0gXCJjb25zdHJ1Y3RvclwiKSByZXR1cm4gZmFsc2VcblxuICByZXR1cm4gY2FsbGVlLm9iamVjdC5vYmplY3QudHlwZSA9PSBcIk9iamVjdEV4cHJlc3Npb25cIiAmJiBjYWxsZWUub2JqZWN0Lm9iamVjdC5wcm9wZXJ0aWVzLmxlbmd0aCA9PSAwICYmXG4gICAgY2FsbGVlLm9iamVjdC5vYmplY3QuZXh0cmE/LnBhcmVudGhlc2l6ZWQgPT09IHRydWVcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZXhpc3RpbmcgZXhhY3QgaWYvZWxzZSB0ZXJtaW5hbCBzaGFwZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLklmU3RhdGVtZW50fSBub2RlIC0gQmFiZWwgaWYgc3RhdGVtZW50LlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2Fub25pY2FsWmVyb1JlcXVpcmVkIC0gV2hldGhlciBnZW5lcmF0ZWQgc2NhbGFyIG91dHB1dCBtYXkgY29udGFpbiBzaWduZWQgemVyby5cbiAqIEBwYXJhbSB7SmF2YVNjcmlwdENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSWZTdGF0ZW1lbnR9IFNlbWFudGljIGJyYW5jaC5cbiAqL1xuZnVuY3Rpb24gY29udmVydElmKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY29uZGl0aW9uID0gY29udmVydEV4cHJlc3Npb24obm9kZS50ZXN0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgY29uc3QgY29uc2VxdWVudENvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyl9XG4gIGNvbnN0IGFsdGVybmF0ZUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyl9XG4gIGNvbnN0IGNvbnNlcXVlbnQgPSBub2RlLmNvbnNlcXVlbnQudHlwZSA9PSBcIkJsb2NrU3RhdGVtZW50XCJcbiAgICA/IGNvbnZlcnRCbG9jayhub2RlLmNvbnNlcXVlbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNvbnNlcXVlbnRDb250ZXh0KVxuICAgIDogY29udmVydEJsb2NrKFtub2RlLmNvbnNlcXVlbnRdLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb25zZXF1ZW50Q29udGV4dCwgbm9kZUxvY2F0aW9uKG5vZGUuY29uc2VxdWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGFsdGVybmF0ZSA9IG5vZGUuYWx0ZXJuYXRlXG4gICAgPyBub2RlLmFsdGVybmF0ZS50eXBlID09IFwiQmxvY2tTdGF0ZW1lbnRcIlxuICAgICAgPyBjb252ZXJ0QmxvY2sobm9kZS5hbHRlcm5hdGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGFsdGVybmF0ZUNvbnRleHQpXG4gICAgICA6IGNvbnZlcnRCbG9jayhbbm9kZS5hbHRlcm5hdGVdLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBhbHRlcm5hdGVDb250ZXh0LCBub2RlTG9jYXRpb24obm9kZS5hbHRlcm5hdGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIDogdW5kZWZpbmVkXG5cbiAgcmV0dXJuIHtcbiAgICAuLi4oYWx0ZXJuYXRlID8ge2FsdGVybmF0ZX0gOiB7fSksXG4gICAgY29uZGl0aW9uLFxuICAgIGNvbnNlcXVlbnQsXG4gICAga2luZDogXCJJZlN0YXRlbWVudFwiLFxuICAgIGxvY2F0aW9uXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgYmxvY2stYm9kaWVkIHByZS1jb25kaXRpb24gbG9vcC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLldoaWxlU3RhdGVtZW50fSBub2RlIC0gQmFiZWwgd2hpbGUgc3RhdGVtZW50LlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2Fub25pY2FsWmVyb1JlcXVpcmVkIC0gV2hldGhlciBnZW5lcmF0ZWQgc2NhbGFyIG91dHB1dCBtYXkgY29udGFpbiBzaWduZWQgemVyby5cbiAqIEBwYXJhbSB7SmF2YVNjcmlwdENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuV2hpbGVTdGF0ZW1lbnR9IFNlbWFudGljIGxvb3AuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRXaGlsZShub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUuYm9keS50eXBlICE9IFwiQmxvY2tTdGF0ZW1lbnRcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJ3aGlsZSB3aXRob3V0IGJsb2NrIGJvZHlcIiwgbm9kZUxvY2F0aW9uKG5vZGUuYm9keSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgYm9keUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyl9XG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGJvZHk6IGNvbnZlcnRCbG9jayhub2RlLmJvZHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGJvZHlDb250ZXh0KSxcbiAgICBjb25kaXRpb246IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUudGVzdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHVuZGVmaW5lZCwgdHJ1ZSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiV2hpbGVTdGF0ZW1lbnRcIiksXG4gICAgbG9jYXRpb25cbiAgfSwge2tleXdvcmQ6IHRva2VuTG9jYXRpb24obm9kZSwgXCJ3aGlsZVwiLCBub2RlLnN0YXJ0ID8/IDAsIG5vZGUudGVzdC5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIEJhYmVsIHBhcnNlZCBhbiBvcGVyYXRpb24gdGhhdCBtYWtlcyBnZW5lcmF0ZWQgSmF2YVNjcmlwdC1mYW1pbHkgc2NhbGFyIG91dHB1dCByZXF1aXJlIHplcm8gY2Fub25pY2FsaXphdGlvbi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBCYWJlbCBwYXJzZXIgc3VidHJlZS5cbiAqIEBwYXJhbSB7V2Vha1NldDxvYmplY3Q+fSBbdmlzaXRlZF0gLSBDeWNsZSBwcm90ZWN0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHN1YnRyZWUgY29udGFpbnMgaW50ZWdlciBuZWdhdGlvbiBvciBtdWx0aXBsaWNhdGlvbiBzeW50YXguXG4gKi9cbmZ1bmN0aW9uIHBhcnNlclRyZWVSZXF1aXJlc0Nhbm9uaWNhbFplcm8odmFsdWUsIHZpc2l0ZWQgPSBuZXcgV2Vha1NldCgpKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZVxuICBpZiAodmlzaXRlZC5oYXModmFsdWUpKSByZXR1cm4gZmFsc2VcblxuICB2aXNpdGVkLmFkZCh2YWx1ZSlcbiAgaWYgKFJlZmxlY3QuZ2V0KHZhbHVlLCBcInR5cGVcIikgPT0gXCJVbmFyeUV4cHJlc3Npb25cIiAmJiBSZWZsZWN0LmdldCh2YWx1ZSwgXCJvcGVyYXRvclwiKSA9PSBcIi1cIikgcmV0dXJuIHRydWVcbiAgaWYgKFJlZmxlY3QuZ2V0KHZhbHVlLCBcInR5cGVcIikgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIgJiYgUmVmbGVjdC5nZXQodmFsdWUsIFwib3BlcmF0b3JcIikgPT0gXCIqXCIpIHJldHVybiB0cnVlXG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHZhbHVlKS5zb21lKChba2V5LCBjaGlsZF0pID0+XG4gICAgIVtcImV4dHJhXCIsIFwiaW5uZXJDb21tZW50c1wiLCBcImxlYWRpbmdDb21tZW50c1wiLCBcImxvY1wiLCBcInRyYWlsaW5nQ29tbWVudHNcIl0uaW5jbHVkZXMoa2V5KSAmJlxuICAgIChBcnJheS5pc0FycmF5KGNoaWxkKVxuICAgICAgPyBjaGlsZC5zb21lKChpdGVtKSA9PiBwYXJzZXJUcmVlUmVxdWlyZXNDYW5vbmljYWxaZXJvKGl0ZW0sIHZpc2l0ZWQpKVxuICAgICAgOiBwYXJzZXJUcmVlUmVxdWlyZXNDYW5vbmljYWxaZXJvKGNoaWxkLCB2aXNpdGVkKSkpXG59XG5cbi8qKlxuICogUmVjb2duaXplcyB0aGUgcGFyc2VyLW93bmVkIHJlY2VpdmVyIHBhcmVudGhlc2VzIGVtaXR0ZWQgb25seSBmb3IgY2Fub25pY2FsIGludGVnZXIgb3V0cHV0LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRXhwcmVzc2lvbiB8IGltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdXBlcn0gcmVjZWl2ZXIgLSBRdWFsaWZpZWQtY2FsbCByZWNlaXZlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNhbGxFeHByZXNzaW9ufSBjYWxsIC0gT3V0ZXIgYHRvU3RyaW5nYCBjYWxsLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHJlY2VpdmVyIGhhcyB0aGUgZ2VuZXJhdGVkIHdyYXBwZXIgc2hhcGUuXG4gKi9cbmZ1bmN0aW9uIGhhc0Nhbm9uaWNhbFplcm9SZWNlaXZlcldyYXBwZXIocmVjZWl2ZXIsIGNhbGwpIHtcbiAgY29uc3QgZXh0cmEgPSBSZWZsZWN0LmdldChyZWNlaXZlciwgXCJleHRyYVwiKVxuICBjb25zdCBleHByZXNzaW9uUGFyZW50aGVzZXMgPSBbXCJCaW5hcnlFeHByZXNzaW9uXCIsIFwiTG9naWNhbEV4cHJlc3Npb25cIiwgXCJVbmFyeUV4cHJlc3Npb25cIl0uaW5jbHVkZXMocmVjZWl2ZXIudHlwZSkgPyAxIDogMFxuICBjb25zdCB3cmFwcGVyUGFyZW50aGVzZXMgPSBleHByZXNzaW9uUGFyZW50aGVzZXMgKyAxXG4gIGNvbnN0IHByb3BlcnR5ID0gY2FsbC5jYWxsZWUudHlwZSA9PSBcIk1lbWJlckV4cHJlc3Npb25cIiA/IGNhbGwuY2FsbGVlLnByb3BlcnR5IDogdW5kZWZpbmVkXG5cbiAgcmV0dXJuIEJvb2xlYW4oZXh0cmEpICYmIHR5cGVvZiBleHRyYSA9PSBcIm9iamVjdFwiICYmIFJlZmxlY3QuZ2V0KGV4dHJhLCBcInBhcmVudGhlc2l6ZWRcIikgPT09IHRydWUgJiZcbiAgICBSZWZsZWN0LmdldChleHRyYSwgXCJwYXJlblN0YXJ0XCIpID09PSBjYWxsLnN0YXJ0ICYmIHR5cGVvZiBjYWxsLnN0YXJ0ID09IFwibnVtYmVyXCIgJiYgdHlwZW9mIGNhbGwuZW5kID09IFwibnVtYmVyXCIgJiZcbiAgICB0eXBlb2YgcmVjZWl2ZXIuc3RhcnQgPT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgcmVjZWl2ZXIuZW5kID09IFwibnVtYmVyXCIgJiYgcHJvcGVydHk/LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICB0eXBlb2YgcHJvcGVydHkuc3RhcnQgPT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgcHJvcGVydHkuZW5kID09IFwibnVtYmVyXCIgJiYgY2FsbC5jYWxsZWUuc3RhcnQgPT09IGNhbGwuc3RhcnQgJiZcbiAgICByZWNlaXZlci5zdGFydCA9PSBjYWxsLnN0YXJ0ICsgd3JhcHBlclBhcmVudGhlc2VzICYmIHByb3BlcnR5LnN0YXJ0ID09IHJlY2VpdmVyLmVuZCArIHdyYXBwZXJQYXJlbnRoZXNlcyArIDEgJiZcbiAgICBwcm9wZXJ0eS5lbmQgPT0gcHJvcGVydHkuc3RhcnQgKyBcInRvU3RyaW5nXCIubGVuZ3RoICYmIGNhbGwuZW5kID09IHByb3BlcnR5LmVuZCArIDJcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGNvbnNvbGUubG9nIGVudHJ5LXBvaW50IGNhbGwuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnR9IG5vZGUgLSBCYWJlbCBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBjYW5vbmljYWxaZXJvUmVxdWlyZWQgLSBXaGV0aGVyIHRoaXMgcGFyc2VkIG1vZHVsZSBjb250YWlucyBhIHNpZ24tcHJvZHVjaW5nIGludGVnZXIgb3BlcmF0aW9uLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QcmludFN0YXRlbWVudH0gUHJpbnQgc3RhdGVtZW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UHJpbnQobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLnR5cGUgIT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHwgbm9kZS5leHByZXNzaW9uLnR5cGUgIT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBub2RlLnR5cGUsIGxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgY2FsbCA9IG5vZGUuZXhwcmVzc2lvblxuICBjb25zdCBjYWxsZWUgPSBjYWxsLmNhbGxlZVxuXG4gIGlmIChjYWxsZWUudHlwZSAhPSBcIk1lbWJlckV4cHJlc3Npb25cIiB8fCBjYWxsZWUuY29tcHV0ZWQgfHwgY2FsbGVlLm9iamVjdC50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8XG4gICAgY2FsbGVlLm9iamVjdC5uYW1lICE9IFwiY29uc29sZVwiIHx8IGNhbGxlZS5wcm9wZXJ0eS50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IGNhbGxlZS5wcm9wZXJ0eS5uYW1lICE9IFwibG9nXCIgfHxcbiAgICBjYWxsLmFyZ3VtZW50cy5sZW5ndGggIT0gMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJlbnRyeS1wb2ludCBleHByZXNzaW9uXCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgbGV0IGFyZ3VtZW50ID0gY2FsbC5hcmd1bWVudHNbMF1cblxuICBpZiAoYXJndW1lbnQudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIiB8fCBhcmd1bWVudC50eXBlID09IFwiQXJndW1lbnRQbGFjZWhvbGRlclwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBhcmd1bWVudC50eXBlLCBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgaWYgKGFyZ3VtZW50LnR5cGUgPT0gXCJDYWxsRXhwcmVzc2lvblwiICYmIGFyZ3VtZW50LmNhbGxlZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFhcmd1bWVudC5jYWxsZWUuY29tcHV0ZWQgJiZcbiAgICAhYXJndW1lbnQuY2FsbGVlLm9wdGlvbmFsICYmIGFyZ3VtZW50LmNhbGxlZS5vYmplY3QudHlwZSAhPSBcIlN1cGVyXCIgJiYgYXJndW1lbnQuY2FsbGVlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICBhcmd1bWVudC5jYWxsZWUucHJvcGVydHkubmFtZSA9PSBcInRvU3RyaW5nXCIgJiYgIWFyZ3VtZW50Lm9wdGlvbmFsICYmICFhcmd1bWVudC50eXBlQXJndW1lbnRzICYmXG4gICAgIWFyZ3VtZW50LnR5cGVQYXJhbWV0ZXJzICYmIGFyZ3VtZW50LmFyZ3VtZW50cy5sZW5ndGggPT0gMCkge1xuICAgIGlmICghY2Fub25pY2FsWmVyb1JlcXVpcmVkIHx8ICFoYXNDYW5vbmljYWxaZXJvUmVjZWl2ZXJXcmFwcGVyKGFyZ3VtZW50LmNhbGxlZS5vYmplY3QsIGFyZ3VtZW50KSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImVudHJ5LXBvaW50IHF1YWxpZmllZCBjYWxsXCIsIG5vZGVMb2NhdGlvbihhcmd1bWVudC5jYWxsZWUucHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBhcmd1bWVudCA9IGFyZ3VtZW50LmNhbGxlZS5vYmplY3RcbiAgfVxuXG4gIHJldHVybiB7ZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSwga2luZDogXCJQcmludFN0YXRlbWVudFwiLCBsb2NhdGlvbn1cbn1cblxuLyoqXG4gKiBQYXJzZXMgSmF2YVNjcmlwdCBvciBUeXBlU2NyaXB0IGludG8gdGhlIHNoYXJlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBQYXJzZXIgaW5wdXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGlucHV0Lmxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuc291cmNlIC0gU291cmNlIHRleHQuXG4gKiBAcGFyYW0ge3JlYWRvbmx5IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdENhcGFiaWxpdHlEZWNsYXJhdGlvbltdfSBbaW5wdXQuY2FwYWJpbGl0aWVzXSAtIENvbXBpbGVyLWF1dGhvcml6ZWQgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHt7aXNFbnRyeTogYm9vbGVhbiwgZnVuY3Rpb25zOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uPiwgcmVjb3JkczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+LCBlcnJvcnM/OiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPiwgdmFsdWVSZWNvcmRzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fX0gW2lucHV0LnByb2dyYW1dIC0gUmVzb2x2ZWQgcHJvZ3JhbSBpbXBvcnRzIGFuZCBlbnRyeSByb2xlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBTZW1hbnRpYyBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUphdmFTY3JpcHRUeXBlU2NyaXB0KHtjYXBhYmlsaXRpZXMgPSBbXSwgZmlsZW5hbWUsIGxhbmd1YWdlLCBzb3VyY2UsIHByb2dyYW19KSB7XG4gIGNvbnN0IGZpbGUgPSBwYXJzZUJhYmVsU291cmNlKHtmaWxlbmFtZSwgbGFuZ3VhZ2UsIHNvdXJjZSwgc291cmNlVHlwZTogcHJvZ3JhbSA/IFwibW9kdWxlXCIgOiBcInNjcmlwdFwifSlcbiAgY29uc3QgdG9rZW5zID0gZmlsZS50b2tlbnMgPz8gW11cbiAgY29uc3QgdG9rZW5JbmRleCA9IHtieVN0YXJ0OiBuZXcgTWFwKHRva2Vucy5tYXAoKHRva2VuKSA9PiBbdG9rZW4uc3RhcnQsIHRva2VuXSkpLCB0b2tlbnN9XG4gIGNvbnN0IGNhbm9uaWNhbFplcm9SZXF1aXJlZCA9IHBhcnNlclRyZWVSZXF1aXJlc0Nhbm9uaWNhbFplcm8oZmlsZS5wcm9ncmFtKVxuXG4gIHJlbWVtYmVyVG9rZW5zKGZpbGUsIHRva2VuSW5kZXgpXG4gIGNvbnN0IG51bGxDaGVja09wdE91dCA9IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiXG4gICAgPyBmaWxlLmNvbW1lbnRzPy5maW5kKChjb21tZW50KSA9PiBjb21tZW50LnZhbHVlLnRyaW0oKSA9PSBcIkB0cy1ub2NoZWNrXCIpXG4gICAgOiB1bmRlZmluZWRcblxuICBpZiAobnVsbENoZWNrT3B0T3V0KSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImRpc2FibGVkIFR5cGVTY3JpcHQgY2hlY2tpbmcgZGlyZWN0aXZlXCIsIGxvY2F0aW9uRnJvbU9mZnNldHMoXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIHNvdXJjZSxcbiAgICAgIG51bGxDaGVja09wdE91dC5zdGFydCA/PyAwLFxuICAgICAgbnVsbENoZWNrT3B0T3V0LmVuZCA/PyBzb3VyY2UubGVuZ3RoXG4gICAgKSlcbiAgfVxuICBpZiAoZmlsZS5wcm9ncmFtLmRpcmVjdGl2ZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJ0b3AtbGV2ZWwgZGlyZWN0aXZlXCIsIG5vZGVMb2NhdGlvbihmaWxlLnByb2dyYW0uZGlyZWN0aXZlc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuU3RhdGVtZW50W119ICovXG4gIGxldCBzZW1hbnRpY05vZGVzID0gW11cblxuICBmb3IgKGNvbnN0IG5vZGUgb2YgZmlsZS5wcm9ncmFtLmJvZHkpIHtcbiAgICBpZiAobm9kZS50eXBlID09IFwiSW1wb3J0RGVjbGFyYXRpb25cIikge1xuICAgICAgaWYgKCFwcm9ncmFtKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiaW1wb3J0IGRlY2xhcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChub2RlLnR5cGUgPT0gXCJFeHBvcnROYW1lZERlY2xhcmF0aW9uXCIpIHtcbiAgICAgIGlmICghcHJvZ3JhbSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImV4cG9ydCBkZWNsYXJhdGlvblwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBpZiAobm9kZS5zb3VyY2UgfHwgbm9kZS5kZWNsYXJhdGlvbiAmJiAhW1wiQ2xhc3NEZWNsYXJhdGlvblwiLCBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIl0uaW5jbHVkZXMobm9kZS5kZWNsYXJhdGlvbi50eXBlKSkge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwicmUtZXhwb3J0IG9yIHVuc3VwcG9ydGVkIGV4cG9ydGVkIGRlY2xhcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmRlY2xhcmF0aW9uKSB7XG4gICAgICAgIGlmICghbm9kZS5kZWNsYXJhdGlvbi5sZWFkaW5nQ29tbWVudHMgJiYgbm9kZS5sZWFkaW5nQ29tbWVudHMpIG5vZGUuZGVjbGFyYXRpb24ubGVhZGluZ0NvbW1lbnRzID0gbm9kZS5sZWFkaW5nQ29tbWVudHNcbiAgICAgICAgc2VtYW50aWNOb2Rlcy5wdXNoKC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gKi8gKG5vZGUuZGVjbGFyYXRpb24pKVxuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKG5vZGUudHlwZSA9PSBcIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvblwiIHx8IG5vZGUudHlwZSA9PSBcIkV4cG9ydEFsbERlY2xhcmF0aW9uXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgbm9kZS50eXBlLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIHNlbWFudGljTm9kZXMucHVzaChub2RlKVxuICB9XG4gIHNlbWFudGljTm9kZXMgPSB0YXNrMDM0SmF2YVNjcmlwdE5vZGVzKHNlbWFudGljTm9kZXMsIGNhcGFiaWxpdGllcywgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNsYXNzTm9kZXMgPSBzZW1hbnRpY05vZGVzLmZpbHRlcigobm9kZSkgPT4gbm9kZS50eXBlID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKVxuICBjb25zdCBlcnJvck5vZGVzID0gY2xhc3NOb2Rlcy5maWx0ZXIoKG5vZGUpID0+IG5vZGUuc3VwZXJDbGFzcz8udHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJiBub2RlLnN1cGVyQ2xhc3MubmFtZSA9PSBcIkVycm9yXCIpXG4gIGNvbnN0IHJlZmVyZW5jZUNsYXNzTm9kZXMgPSBjbGFzc05vZGVzLmZpbHRlcigobm9kZSkgPT4gIWVycm9yTm9kZXMuaW5jbHVkZXMobm9kZSkgJiZcbiAgICBub2RlLmJvZHkuYm9keS5zb21lKChtZW1iZXIpID0+IG1lbWJlci50eXBlID09IFwiQ2xhc3NQcm9wZXJ0eVwiIHx8IG1lbWJlci50eXBlID09IFwiQ2xhc3NQcml2YXRlUHJvcGVydHlcIikpXG4gIGNvbnN0IHJlY29yZE5vZGVzID0gY2xhc3NOb2Rlcy5maWx0ZXIoKG5vZGUpID0+ICFlcnJvck5vZGVzLmluY2x1ZGVzKG5vZGUpICYmICFyZWZlcmVuY2VDbGFzc05vZGVzLmluY2x1ZGVzKG5vZGUpKVxuICBjb25zdCBlcnJvckRlY2xhcmF0aW9ucyA9IGVycm9yTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT4gKHtcbiAgICBpZDogYGVycm9yOiR7aW5kZXh9YCxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvckRlY2xhcmF0aW9uXCIpLFxuICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgbmFtZTogbm9kZS5pZD8ubmFtZSA/PyBcIlwiXG4gIH0pKVxuICBjb25zdCByZWNvcmREZWNsYXJhdGlvbnMgPSByZWNvcmROb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgaWQgPSBgcmVjb3JkOiR7aW5kZXh9YFxuICAgIGNvbnN0IHR5cGVQYXJhbWV0ZXJzID0gbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCJcbiAgICAgID8gdHlwZVNjcmlwdFR5cGVQYXJhbWV0ZXJzKC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlRTVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gKi8gKG5vZGUudHlwZVBhcmFtZXRlcnMpLCBpZCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIDogY2xhc3NKc2RvY1R5cGVQYXJhbWV0ZXJzKG5vZGUsIGlkLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZpZWxkczogW10sXG4gICAgICBpZCxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY29yZERlY2xhcmF0aW9uXCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5hbWU6IG5vZGUuaWQ/Lm5hbWUgPz8gXCJcIixcbiAgICAgIC4uLih0eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgICB9XG4gIH0pXG4gIGNvbnN0IGNsYXNzRGVjbGFyYXRpb25zID0gcmVmZXJlbmNlQ2xhc3NOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiAoe1xuICAgIGNvbnN0cnVjdG9yOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNvbnN0cnVjdG9yRGVjbGFyYXRpb259ICovICh7fSksXG4gICAgZmllbGRzOiBbXSwgaWQ6IGBjbGFzczoke2luZGV4fWAsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNsYXNzRGVjbGFyYXRpb25cIiksXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSwgbWV0aG9kczogW10sIG5hbWU6IG5vZGUuaWQ/Lm5hbWUgPz8gXCJcIlxuICB9KSlcbiAgY29uc3QgcmVjb3JkTmFtZXMgPSAvKiogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSAqLyAoXG4gICAgbmV3IE1hcChwcm9ncmFtPy5yZWNvcmRzID8/IFtdKSlcbiAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBjYXBhYmlsaXRpZXMuZmxhdE1hcCgoe3Jlc291cmNlc30pID0+IHJlc291cmNlcykpIHJlY29yZE5hbWVzLnNldChyZXNvdXJjZS5uYW1lLCByZXNvdXJjZSlcbiAgY29uc3QgdmFsdWVSZWNvcmROYW1lcyA9IC8qKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn0gKi8gKFxuICAgIG5ldyBNYXAocHJvZ3JhbT8udmFsdWVSZWNvcmRzID8/IHByb2dyYW0/LnJlY29yZHMgPz8gW10pKVxuICBjb25zdCBlcnJvck5hbWVzID0gbmV3IE1hcChwcm9ncmFtPy5lcnJvcnMgPz8gW10pXG4gIGZvciAoY29uc3QgZmFpbHVyZSBvZiBjYXBhYmlsaXRpZXMuZmxhdE1hcCgoe2ZhaWx1cmVzfSkgPT4gZmFpbHVyZXMpKSB7XG4gICAgZXJyb3JOYW1lcy5zZXQoZmFpbHVyZS5uYW1lLCAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChmYWlsdXJlKSkpXG4gIH1cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBlcnJvckRlY2xhcmF0aW9ucykgZXJyb3JOYW1lcy5zZXQoZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyYXRpb24pXG4gIGNvbnN0IGVycm9yc0J5SWQgPSBuZXcgTWFwKFsuLi5lcnJvck5hbWVzLnZhbHVlcygpXS5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGVycm9ycyA9IGVycm9yTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT4gY29udmVydEphdmFTY3JpcHRFcnJvcihub2RlLCBlcnJvckRlY2xhcmF0aW9uc1tpbmRleF0sIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiByZWNvcmREZWNsYXJhdGlvbnMpIHJlY29yZE5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiByZWNvcmREZWNsYXJhdGlvbnMpIHZhbHVlUmVjb3JkTmFtZXMuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGNsYXNzRGVjbGFyYXRpb25zKSByZWNvcmROYW1lcy5zZXQoZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyYXRpb24pXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgY2xhc3NEZWNsYXJhdGlvbnMpIHZhbHVlUmVjb3JkTmFtZXMuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uKVxuICBjb25zdCB2YWx1ZVJlY29yZHNCeUlkID0gbmV3IE1hcChyZWNvcmREZWNsYXJhdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBkZWNsYXJhdGlvbl0pKVxuICBjb25zdCBjbGFzc2VzQnlJZCA9IG5ldyBNYXAoY2xhc3NEZWNsYXJhdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBkZWNsYXJhdGlvbl0pKVxuICBjb25zdCBjbGFzc2VzID0gcmVmZXJlbmNlQ2xhc3NOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiBwcmVkZWNsYXJlUmVmZXJlbmNlQ2xhc3MoXG4gICAgbm9kZSwgY2xhc3NEZWNsYXJhdGlvbnNbaW5kZXhdLCByZWNvcmROYW1lcywgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2VcbiAgKSlcbiAgY29uc3QgZnVuY3Rpb25Ob2RlcyA9IHNlbWFudGljTm9kZXMuZmlsdGVyKChub2RlKSA9PiBub2RlLnR5cGUgPT0gXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IHNpZ25hdHVyZXMgPSBmdW5jdGlvbk5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+XG4gICAgY29udmVydEZ1bmN0aW9uU2lnbmF0dXJlKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgYGZ1bmN0aW9uOiR7aW5kZXh9YCkpXG4gIGNvbnN0IGZ1bmN0aW9uU2lnbmF0dXJlcyA9IG5ldyBNYXAoWy4uLnByb2dyYW0/LmZ1bmN0aW9ucyA/PyBbXV0ubWFwKChbbG9jYWxOYW1lLCBkZWNsYXJhdGlvbl0pID0+IFtsb2NhbE5hbWUsIHtcbiAgICBsb2NhdGlvbjogZGVjbGFyYXRpb24ubG9jYXRpb24sXG4gICAgbmFtZTogbG9jYWxOYW1lLFxuICAgIG5hbWVMb2NhdGlvbjogZGVjbGFyYXRpb24ubG9jYXRpb24sXG4gICAgcGFyYW1ldGVyczogZGVjbGFyYXRpb24ucGFyYW1ldGVycyxcbiAgICByZXR1cm5UeXBlOiBkZWNsYXJhdGlvbi5yZXR1cm5UeXBlLFxuICAgIC4uLihkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyczogZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnN9IDoge30pXG4gIH1dKSlcbiAgZm9yIChjb25zdCBvcGVyYXRpb24gb2YgY2FwYWJpbGl0aWVzLmZsYXRNYXAoKHtvcGVyYXRpb25zfSkgPT4gb3BlcmF0aW9ucykpIHtcbiAgICBpZiAoIWZ1bmN0aW9uU2lnbmF0dXJlcy5oYXMob3BlcmF0aW9uLm5hbWUpKSBmdW5jdGlvblNpZ25hdHVyZXMuc2V0KG9wZXJhdGlvbi5uYW1lLCB7XG4gICAgICBsb2NhdGlvbjogbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBuYW1lOiBvcGVyYXRpb24ubmFtZSxcbiAgICAgIG5hbWVMb2NhdGlvbjogbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBwYXJhbWV0ZXJzOiBvcGVyYXRpb24ucGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4gKHsuLi5wYXJhbWV0ZXIsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlBhcmFtZXRlclwiKSwgbG9jYXRpb246IG1vZHVsZUxvY2F0aW9uKGZpbGVuYW1lLCBzb3VyY2UpfSkpLFxuICAgICAgcmV0dXJuVHlwZTogb3BlcmF0aW9uLnJldHVyblR5cGVcbiAgICB9KVxuICB9XG4gIGZvciAoY29uc3Qgc2lnbmF0dXJlIG9mIHNpZ25hdHVyZXMpIGZ1bmN0aW9uU2lnbmF0dXJlcy5zZXQoc2lnbmF0dXJlLm5hbWUsIHNpZ25hdHVyZSlcbiAgY29uc3QgcmVjb3JkcyA9IHJlY29yZE5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiXG4gICAgPyBjb252ZXJ0VHlwZVNjcmlwdFJlY29yZChub2RlLCByZWNvcmREZWNsYXJhdGlvbnNbaW5kZXhdLCByZWNvcmROYW1lcywgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICA6IGNvbnZlcnRKYXZhU2NyaXB0UmVjb3JkKG5vZGUsIHJlY29yZERlY2xhcmF0aW9uc1tpbmRleF0sIHJlY29yZE5hbWVzLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHJlZmVyZW5jZUNsYXNzTm9kZXMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29udmVydFJlZmVyZW5jZUNsYXNzQm9kaWVzKHJlZmVyZW5jZUNsYXNzTm9kZXNbaW5kZXhdLCBjbGFzc2VzW2luZGV4XSwgcmVjb3JkTmFtZXMsIHZhbHVlUmVjb3JkTmFtZXMsXG4gICAgICB2YWx1ZVJlY29yZHNCeUlkLCBjbGFzc2VzQnlJZCwgZnVuY3Rpb25TaWduYXR1cmVzLCBlcnJvck5hbWVzLCBlcnJvcnNCeUlkLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgIGNhbm9uaWNhbFplcm9SZXF1aXJlZClcbiAgfVxuICBjb25zdCBmdW5jdGlvbnMgPSBmdW5jdGlvbk5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+XG4gICAgY29udmVydEZ1bmN0aW9uKG5vZGUsIHNpZ25hdHVyZXNbaW5kZXhdLCBmdW5jdGlvblNpZ25hdHVyZXMsIHJlY29yZE5hbWVzLCB2YWx1ZVJlY29yZE5hbWVzLCB2YWx1ZVJlY29yZHNCeUlkLCBjbGFzc2VzQnlJZCxcbiAgICAgIGVycm9yTmFtZXMsIGVycm9yc0J5SWQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQpKVxuICBjb25zdCBlbnRyeU5vZGVzID0gc2VtYW50aWNOb2Rlcy5maWx0ZXIoKG5vZGUpID0+IG5vZGUudHlwZSAhPSBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiAmJiBub2RlLnR5cGUgIT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IGxvY2F0aW9uID0gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAocHJvZ3JhbSAmJiAhcHJvZ3JhbS5pc0VudHJ5ICYmIGVudHJ5Tm9kZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJ0b3AtbGV2ZWwgc2lkZSBlZmZlY3Qgb3V0c2lkZSB0aGUgc2VsZWN0ZWQgZW50cnkgbW9kdWxlXCIsIG5vZGVMb2NhdGlvbihlbnRyeU5vZGVzWzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBlbnRyeUxvY2F0aW9uID0gZW50cnlOb2Rlcy5sZW5ndGggPT0gMCA/IGxvY2F0aW9uIDogbG9jYXRpb25Gcm9tT2Zmc2V0cyhcbiAgICBmaWxlbmFtZSxcbiAgICBzb3VyY2UsXG4gICAgZW50cnlOb2Rlc1swXS5zdGFydCA/PyAwLFxuICAgIGVudHJ5Tm9kZXMuYXQoLTEpPy5lbmQgPz8gc291cmNlLmxlbmd0aFxuICApXG4gIGNvbnN0IGVudHJ5QmxvY2sgPSBjb252ZXJ0QmxvY2soXG4gICAgZW50cnlOb2RlcyxcbiAgICBsYW5ndWFnZSxcbiAgICBmaWxlbmFtZSxcbiAgICBzb3VyY2UsXG4gICAgY2Fub25pY2FsWmVyb1JlcXVpcmVkLFxuICAgIHtiaW5kaW5nczogbmV3IE1hcCgpLCBjbGFzc2VzOiBjbGFzc2VzQnlJZCwgZXJyb3JOYW1lcywgZXJyb3JzOiBlcnJvcnNCeUlkLCBmdW5jdGlvbnM6IGZ1bmN0aW9uU2lnbmF0dXJlcyxcbiAgICAgIG9yZGVyZWRNYXBEZWNsYXJhdGlvbnM6IG9yZGVyZWRNYXBEZWNsYXJhdGlvbnNGb3IoZW50cnlOb2RlcyksIHJlY29yZE5hbWVzLCByZWNvcmRzOiB2YWx1ZVJlY29yZHNCeUlkLCB2YWx1ZVJlY29yZE5hbWVzfSxcbiAgICBlbnRyeUxvY2F0aW9uXG4gIClcblxuICBpZiAoIXByb2dyYW0gJiYgZnVuY3Rpb25zLmxlbmd0aCA9PSAwICYmIGNhcGFiaWxpdGllcy5sZW5ndGggPT0gMCAmJiAhYmxvY2tSZWZlcmVuY2VzUHJvdGVjdGVkRW50cnkoZW50cnlCbG9jaykpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibW9kdWxlIHdpdGhvdXQgYSBmdW5jdGlvblwiLCBsb2NhdGlvbilcbiAgfVxuICByZXR1cm4ge1xuICAgIGVudHJ5UG9pbnQ6IHtcbiAgICAgIGJvZHk6IGVudHJ5QmxvY2ssXG4gICAgICBraW5kOiBcIkVudHJ5UG9pbnRcIixcbiAgICAgIGxvY2F0aW9uOiBlbnRyeUxvY2F0aW9uXG4gICAgfSxcbiAgICBmdW5jdGlvbnMsXG4gICAga2luZDogXCJNb2R1bGVcIixcbiAgICBsb2NhdGlvbixcbiAgICAuLi4oZXJyb3JzLmxlbmd0aCA+IDAgPyB7ZXJyb3JzfSA6IHt9KSxcbiAgICAuLi4oY2xhc3Nlcy5sZW5ndGggPiAwID8ge2NsYXNzZXN9IDoge30pLFxuICAgIC4uLihyZWNvcmRzLmxlbmd0aCA+IDAgPyB7cmVjb3Jkc30gOiB7fSlcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZXMgZXhhY3QgcHJvdGVjdGVkIE5vZGUgcHJvYmUgc3VwcG9ydCBiZWZvcmUgcG9ydGFibGUgY29udmVyc2lvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlN0YXRlbWVudFtdfSBub2RlcyAtIFBhcnNlZCB0b3AtbGV2ZWwgc3RhdGVtZW50cy5cbiAqIEBwYXJhbSB7cmVhZG9ubHkgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0Q2FwYWJpbGl0eURlY2xhcmF0aW9uW119IGNhcGFiaWxpdGllcyAtIEF1dGhvcml6ZWQgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIFNvdXJjZSBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlN0YXRlbWVudFtdfSBQb3J0YWJsZSBzdGF0ZW1lbnRzLlxuICovXG5mdW5jdGlvbiB0YXNrMDM0SmF2YVNjcmlwdE5vZGVzKG5vZGVzLCBjYXBhYmlsaXRpZXMsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICghaXNUYXNrMDM0UmVzb3VyY2VQcm9iZShjYXBhYmlsaXRpZXMpKSByZXR1cm4gbm9kZXNcbiAgY29uc3QgZmlyc3QgPSBub2Rlc1swXVxuICBjb25zdCBtYXJrZXIgPSBmaXJzdD8ubGVhZGluZ0NvbW1lbnRzPy5zb21lKChjb21tZW50KSA9PiBjb21tZW50LnR5cGUgPT0gXCJDb21tZW50QmxvY2tcIiAmJlxuICAgIGNvbW1lbnQudmFsdWUudHJpbSgpID09IFwic2VtYW50aWZvbGQtdGFzazAzNC1zdXBwb3J0XCIpXG5cbiAgaWYgKCFtYXJrZXIpIHJldHVybiBub2Rlc1xuICBpZiAoIWhhc0V4YWN0RWZmZWN0U3VwcG9ydChzb3VyY2UsIGxhbmd1YWdlKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJtYWxmb3JtZWQgcHJvdGVjdGVkIFRhc2sgMDM0IHN1cHBvcnRcIiwgbm9kZUxvY2F0aW9uKGZpcnN0LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBleHBlY3RlZCA9IFtcbiAgICBbXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIsIFwiX19zZW1hbnRpZm9sZFRhc2swMzRGc1wiXSwgW1wiQ2xhc3NEZWNsYXJhdGlvblwiLCBcIlByb2JlT3BlcmF0aW9uRmFpbHVyZVwiXSxcbiAgICBbXCJDbGFzc0RlY2xhcmF0aW9uXCIsIFwiUHJvYmVBY3F1aXJlRmFpbHVyZVwiXSwgW1wiQ2xhc3NEZWNsYXJhdGlvblwiLCBcIlByb2JlUmVhZEZhaWx1cmVcIl0sXG4gICAgW1wiQ2xhc3NEZWNsYXJhdGlvblwiLCBcIlByb2JlQ2xvc2VGYWlsdXJlXCJdLCBbXCJDbGFzc0RlY2xhcmF0aW9uXCIsIFwiUHJvYmVSZXNvdXJjZUNsb3NlZFwiXSxcbiAgICBbXCJDbGFzc0RlY2xhcmF0aW9uXCIsIFwiUHJvYmVSZXNvdXJjZVwiXSwgW1wiVmFyaWFibGVEZWNsYXJhdGlvblwiLCBcIl9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2VcIl0sXG4gICAgW1wiRnVuY3Rpb25EZWNsYXJhdGlvblwiLCBcInByb2JlRWZmZWN0XCJdLCBbXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIsIFwicHJvYmVBY3F1aXJlXCJdLFxuICAgIFtcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiwgXCJwcm9iZVJlYWRcIl0sIFtcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiwgXCJwcm9iZUNsb3NlXCJdLCBbXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIsIFwicHJvYmVUcmFjZVwiXVxuICBdXG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgZGVjbGFyYXRpb24gbmFtZSB1c2VkIHRvIHZlcmlmeSBvbmUgcHJvdGVjdGVkIHN1cHBvcnQgc3RhdGVtZW50LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnQgfCB1bmRlZmluZWR9IG5vZGUgLSBDYW5kaWRhdGUgc3RhdGVtZW50LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBEZWNsYXJlZCBuYW1lLlxuICAgKi9cbiAgY29uc3Qgbm9kZU5hbWUgPSAobm9kZSkgPT4ge1xuICAgIGlmICghbm9kZSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmIChub2RlLnR5cGUgPT0gXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIgJiYgbm9kZS5kZWNsYXJhdGlvbnMubGVuZ3RoID09IDEgJiYgbm9kZS5kZWNsYXJhdGlvbnNbMF0uaWQudHlwZSA9PSBcIklkZW50aWZpZXJcIikge1xuICAgICAgcmV0dXJuIG5vZGUuZGVjbGFyYXRpb25zWzBdLmlkLm5hbWVcbiAgICB9XG4gICAgY29uc3QgaWQgPSBSZWZsZWN0LmdldChub2RlLCBcImlkXCIpXG4gICAgcmV0dXJuIGlkICYmIHR5cGVvZiBpZCA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmdldChpZCwgXCJuYW1lXCIpID09IFwic3RyaW5nXCIgPyBSZWZsZWN0LmdldChpZCwgXCJuYW1lXCIpIDogdW5kZWZpbmVkXG4gIH1cbiAgY29uc3QgbWF0Y2hlcyA9IGV4cGVjdGVkLmV2ZXJ5KChbdHlwZSwgbmFtZV0sIGluZGV4KSA9PiBub2Rlc1tpbmRleF0/LnR5cGUgPT0gdHlwZSAmJiBub2RlTmFtZShub2Rlc1tpbmRleF0pID09IG5hbWUpXG4gIGNvbnN0IG5leHQgPSBub2Rlc1tleHBlY3RlZC5sZW5ndGhdXG4gIGNvbnN0IGVuZGVkID0gbmV4dD8ubGVhZGluZ0NvbW1lbnRzPy5zb21lKChjb21tZW50KSA9PiBjb21tZW50LnR5cGUgPT0gXCJDb21tZW50QmxvY2tcIiAmJlxuICAgIGNvbW1lbnQudmFsdWUudHJpbSgpID09IFwic2VtYW50aWZvbGQtdGFzazAzNC1zdXBwb3J0LWVuZFwiKVxuXG4gIGlmICghbWF0Y2hlcyB8fCBuZXh0ICYmICFlbmRlZCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJtYWxmb3JtZWQgcHJvdGVjdGVkIFRhc2sgMDM0IHN1cHBvcnRcIiwgbm9kZUxvY2F0aW9uKGZpcnN0LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICByZXR1cm4gbm9kZXMuc2xpY2UoZXhwZWN0ZWQubGVuZ3RoKVxufVxuXG4vKipcbiAqIEludm9rZXMgQmFiZWwgYW5kIG5vcm1hbGl6ZXMgc3ludGF4IGZhaWx1cmVzLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gUGFyc2VyIGlucHV0LlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LmZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBpbnB1dC5sYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LnNvdXJjZSAtIFNvdXJjZSB0ZXh0LlxuICogQHBhcmFtIHtcIm1vZHVsZVwiIHwgXCJzY3JpcHRcIn0gaW5wdXQuc291cmNlVHlwZSAtIEV4cGxpY2l0IHBhcnNlciBnb2FsLlxuICogQHJldHVybnMge2ltcG9ydChcIkBiYWJlbC9wYXJzZXJcIikuUGFyc2VSZXN1bHQ8aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkZpbGU+fSBCYWJlbCBmaWxlLlxuICovXG5mdW5jdGlvbiBwYXJzZUJhYmVsU291cmNlKHtmaWxlbmFtZSwgbGFuZ3VhZ2UsIHNvdXJjZSwgc291cmNlVHlwZX0pIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGFyc2VCYWJlbChzb3VyY2UsIHtcbiAgICAgIGFsbG93QXdhaXRPdXRzaWRlRnVuY3Rpb246IHRydWUsXG4gICAgICBwbHVnaW5zOiBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiA/IFtcImRlY29yYXRvcnMtbGVnYWN5XCIsIFwidHlwZXNjcmlwdFwiXSA6IFtcImRlY29yYXRvcnMtbGVnYWN5XCJdLFxuICAgICAgc291cmNlRmlsZW5hbWU6IGZpbGVuYW1lLFxuICAgICAgc291cmNlVHlwZSxcbiAgICAgIHRva2VuczogdHJ1ZVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHBhcnNlRmFpbHVyZShsYW5ndWFnZSwgZXJyb3IsIGJhYmVsUGFyc2VyRmFpbHVyZUxvY2F0aW9uKGVycm9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxufVxuXG4vKipcbiAqIFJlYWRzIG9ubHkgcGFyc2VyLW93bmVkIEVTTSBpbXBvcnQvZXhwb3J0IGRlY2xhcmF0aW9ucyBmb3IgcHJvZ3JhbSBhc3NlbWJseS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5maWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gaW5wdXQubGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5zb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHt7aW1wb3J0czoge2RlY2xhcmF0aW9uTG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBpbXBvcnRlZE5hbWU6IHN0cmluZywgaW1wb3J0ZWROYW1lTG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBsb2NhbE5hbWU6IHN0cmluZywgbG9jYWxOYW1lTG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHBhdGhMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNwZWNpZmllcjogc3RyaW5nLCBzdGRsaWJDYW5kaWRhdGU/OiB0cnVlLCB0eXBlT25seTogYm9vbGVhbn1bXSwgZXhwb3J0czoge2RlY2xhcmF0aW9uTG9jYXRpb24/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgZXhwb3J0ZWROYW1lOiBzdHJpbmcsIGV4cG9ydGVkTmFtZUxvY2F0aW9uPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIGxvY2FsTmFtZTogc3RyaW5nLCBsb2NhbE5hbWVMb2NhdGlvbj86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHR5cGVPbmx5OiBib29sZWFufVtdfX0gUGFyc2VyLW93bmVkIEVTTSBtb2R1bGUgaGVhZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zcGVjdEphdmFTY3JpcHRUeXBlU2NyaXB0TW9kdWxlKHtmaWxlbmFtZSwgbGFuZ3VhZ2UsIHNvdXJjZX0pIHtcbiAgY29uc3QgZmlsZSA9IHBhcnNlQmFiZWxTb3VyY2Uoe2ZpbGVuYW1lLCBsYW5ndWFnZSwgc291cmNlLCBzb3VyY2VUeXBlOiBcIm1vZHVsZVwifSlcbiAgY29uc3QgdG9rZW5zID0gZmlsZS50b2tlbnMgPz8gW11cblxuICByZW1lbWJlclRva2VucyhmaWxlLCB7YnlTdGFydDogbmV3IE1hcCh0b2tlbnMubWFwKCh0b2tlbikgPT4gW3Rva2VuLnN0YXJ0LCB0b2tlbl0pKSwgdG9rZW5zfSlcbiAgY29uc3QgY29tbW9uSnMgPSBmaW5kQ29tbW9uSnNOb2RlKGZpbGUucHJvZ3JhbSlcblxuICBpZiAoY29tbW9uSnMpIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIkNvbW1vbkpTIHJlcXVpcmUvbW9kdWxlIGV4cG9ydHNcIiwgbm9kZUxvY2F0aW9uKGNvbW1vbkpzLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgaW1wb3J0cyA9IFtdXG4gIGNvbnN0IGV4cG9ydHMgPSBbXVxuXG4gIGZvciAoY29uc3Qgbm9kZSBvZiBmaWxlLnByb2dyYW0uYm9keSkge1xuICAgIGlmIChub2RlLnR5cGUgPT0gXCJJbXBvcnREZWNsYXJhdGlvblwiKSB7XG4gICAgICBjb25zdCByZWxhdGl2ZSA9IG5vZGUuc291cmNlLnZhbHVlLnN0YXJ0c1dpdGgoXCIuL1wiKSB8fCBub2RlLnNvdXJjZS52YWx1ZS5zdGFydHNXaXRoKFwiLi4vXCIpXG4gICAgICBjb25zdCBzdGRsaWJDYW5kaWRhdGUgPSBub2RlLnNvdXJjZS52YWx1ZS5zdGFydHNXaXRoKFwic2VtYW50aWZvbGQ6XCIpIHx8IG5vZGUuc291cmNlLnZhbHVlLnN0YXJ0c1dpdGgoXCJub2RlOlwiKVxuXG4gICAgICBpZiAoIXJlbGF0aXZlICYmICFzdGRsaWJDYW5kaWRhdGUpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiYmFyZSBwYWNrYWdlIGltcG9ydFwiLCBub2RlTG9jYXRpb24obm9kZS5zb3VyY2UsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgaWYgKG5vZGUuc3BlY2lmaWVycy5sZW5ndGggPT0gMCkgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwic2lkZS1lZmZlY3Qtb25seSBpbXBvcnRcIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgaWYgKChub2RlLmF0dHJpYnV0ZXM/Lmxlbmd0aCA/PyAwKSA+IDAgfHwgKG5vZGUuYXNzZXJ0aW9ucz8ubGVuZ3RoID8/IDApID4gMCB8fCBSZWZsZWN0LmdldChub2RlLCBcInBoYXNlXCIpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImltcG9ydCBhdHRyaWJ1dGVzIG9yIHBoYXNlXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qgc3BlY2lmaWVyIG9mIG5vZGUuc3BlY2lmaWVycykge1xuICAgICAgICBpZiAoc3BlY2lmaWVyLnR5cGUgIT0gXCJJbXBvcnRTcGVjaWZpZXJcIiB8fCBzcGVjaWZpZXIuaW1wb3J0ZWQudHlwZSAhPSBcIklkZW50aWZpZXJcIikge1xuICAgICAgICAgIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBzcGVjaWZpZXIudHlwZSwgbm9kZUxvY2F0aW9uKHNwZWNpZmllciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICAgIH1cbiAgICAgICAgaW1wb3J0cy5wdXNoKHtcbiAgICAgICAgICBkZWNsYXJhdGlvbkxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgICAgaW1wb3J0ZWROYW1lOiBzcGVjaWZpZXIuaW1wb3J0ZWQubmFtZSxcbiAgICAgICAgICBpbXBvcnRlZE5hbWVMb2NhdGlvbjogaWRlbnRpZmllckxvY2F0aW9uKHNwZWNpZmllci5pbXBvcnRlZCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgICAgbG9jYWxOYW1lOiBzcGVjaWZpZXIubG9jYWwubmFtZSxcbiAgICAgICAgICBsb2NhbE5hbWVMb2NhdGlvbjogaWRlbnRpZmllckxvY2F0aW9uKHNwZWNpZmllci5sb2NhbCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihzcGVjaWZpZXIsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICAgIHBhdGhMb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUuc291cmNlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBzcGVjaWZpZXI6IG5vZGUuc291cmNlLnZhbHVlLFxuICAgICAgICAgIC4uLighcmVsYXRpdmUgPyB7c3RkbGliQ2FuZGlkYXRlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAodHJ1ZSl9IDoge30pLFxuICAgICAgICAgIHR5cGVPbmx5OiBub2RlLmltcG9ydEtpbmQgPT0gXCJ0eXBlXCIgfHwgc3BlY2lmaWVyLmltcG9ydEtpbmQgPT0gXCJ0eXBlXCJcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChub2RlLnR5cGUgPT0gXCJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb25cIiB8fCBub2RlLnR5cGUgPT0gXCJFeHBvcnRBbGxEZWNsYXJhdGlvblwiKSB7XG4gICAgICB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgbm9kZS50eXBlLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGlmIChub2RlLnR5cGUgIT0gXCJFeHBvcnROYW1lZERlY2xhcmF0aW9uXCIpIGNvbnRpbnVlXG4gICAgaWYgKG5vZGUuc291cmNlKSB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJyZS1leHBvcnRcIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGlmIChub2RlLmV4cG9ydEtpbmQgPT0gXCJ0eXBlXCIpIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInR5cGUtb25seSBleHBvcnRcIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGlmIChub2RlLmRlY2xhcmF0aW9uKSB7XG4gICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbi50eXBlICE9IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiICYmIG5vZGUuZGVjbGFyYXRpb24udHlwZSAhPSBcIkNsYXNzRGVjbGFyYXRpb25cIikge1xuICAgICAgICB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJ1bnN1cHBvcnRlZCBleHBvcnRlZCBkZWNsYXJhdGlvblwiLCBub2RlTG9jYXRpb24obm9kZS5kZWNsYXJhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBpZGVudGlmaWVyID0gbm9kZS5kZWNsYXJhdGlvbi5pZFxuXG4gICAgICBpZiAoIWlkZW50aWZpZXIpIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImFub255bW91cyBleHBvcnRlZCBkZWNsYXJhdGlvblwiLCBub2RlTG9jYXRpb24obm9kZS5kZWNsYXJhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBleHBvcnRzLnB1c2goe1xuICAgICAgICBkZWNsYXJhdGlvbkxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIGV4cG9ydGVkTmFtZTogaWRlbnRpZmllci5uYW1lLFxuICAgICAgICBleHBvcnRlZE5hbWVMb2NhdGlvbjogaWRlbnRpZmllckxvY2F0aW9uKGlkZW50aWZpZXIsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBsb2NhbE5hbWU6IGlkZW50aWZpZXIubmFtZSxcbiAgICAgICAgbG9jYWxOYW1lTG9jYXRpb246IGlkZW50aWZpZXJMb2NhdGlvbihpZGVudGlmaWVyLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbG9jYXRpb246IGlkZW50aWZpZXJMb2NhdGlvbihpZGVudGlmaWVyLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgdHlwZU9ubHk6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSlcbiAgICAgIH0pXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHNwZWNpZmllciBvZiBub2RlLnNwZWNpZmllcnMpIHtcbiAgICAgIGlmIChzcGVjaWZpZXIudHlwZSAhPSBcIkV4cG9ydFNwZWNpZmllclwiIHx8IHNwZWNpZmllci5sb2NhbC50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IHNwZWNpZmllci5leHBvcnRlZC50eXBlICE9IFwiSWRlbnRpZmllclwiKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBzcGVjaWZpZXIudHlwZSwgbm9kZUxvY2F0aW9uKHNwZWNpZmllciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBpZiAoc3BlY2lmaWVyLmV4cG9ydEtpbmQgPT0gXCJ0eXBlXCIpIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInR5cGUtb25seSBleHBvcnRcIiwgbm9kZUxvY2F0aW9uKHNwZWNpZmllciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBleHBvcnRzLnB1c2goe1xuICAgICAgICBkZWNsYXJhdGlvbkxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIGV4cG9ydGVkTmFtZTogc3BlY2lmaWVyLmV4cG9ydGVkLm5hbWUsXG4gICAgICAgIGV4cG9ydGVkTmFtZUxvY2F0aW9uOiBpZGVudGlmaWVyTG9jYXRpb24oc3BlY2lmaWVyLmV4cG9ydGVkLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbG9jYWxOYW1lOiBzcGVjaWZpZXIubG9jYWwubmFtZSxcbiAgICAgICAgbG9jYWxOYW1lTG9jYXRpb246IGlkZW50aWZpZXJMb2NhdGlvbihzcGVjaWZpZXIubG9jYWwsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKHNwZWNpZmllciwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIHR5cGVPbmx5OiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGR5bmFtaWMgPSBmaW5kRmFjYWRlVW5zYWZlSmF2YVNjcmlwdE5vZGUoZmlsZS5wcm9ncmFtLCBcImR5bmFtaWNcIiwgbmV3IFNldCgpKVxuXG4gIGlmIChkeW5hbWljKSBmYWNhZGVGcm9udGVuZEZhaWx1cmUobGFuZ3VhZ2UsIFwiU1RETElCX0ZBQ0FERV9EWU5BTUlDX1JFRkVSRU5DRVwiLFxuICAgIFwiRHluYW1pYyBpbXBvcnQgY2Fubm90IHByb3ZlIGEgc3RhbmRhcmQtbGlicmFyeSBmYWNhZGUgaWRlbnRpdHkuXCIsIG5vZGVMb2NhdGlvbihkeW5hbWljLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3Qgc3RkbGliQmluZGluZ3MgPSBuZXcgU2V0KGltcG9ydHMuZmlsdGVyKCh7c3RkbGliQ2FuZGlkYXRlfSkgPT4gc3RkbGliQ2FuZGlkYXRlKS5tYXAoKHtsb2NhbE5hbWV9KSA9PiBsb2NhbE5hbWUpKVxuXG4gIGlmIChzdGRsaWJCaW5kaW5ncy5zaXplID4gMCkge1xuICAgIGNvbnN0IG11dGF0aW9uID0gZmluZEZhY2FkZVVuc2FmZUphdmFTY3JpcHROb2RlKGZpbGUucHJvZ3JhbSwgXCJtdXRhdGlvblwiLCBzdGRsaWJCaW5kaW5ncylcblxuICAgIGlmIChtdXRhdGlvbikgZmFjYWRlRnJvbnRlbmRGYWlsdXJlKGxhbmd1YWdlLCBcIlNURExJQl9GQUNBREVfU0hBRE9XRURcIixcbiAgICAgIFwiQSBwYXJzZXItcHJvdmVkIHN0YW5kYXJkLWxpYnJhcnkgZmFjYWRlIGJpbmRpbmcgY2Fubm90IGJlIHJlYXNzaWduZWQgb3Igc2hhZG93ZWQuXCIsIG5vZGVMb2NhdGlvbihtdXRhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3QgcmVmbGVjdGlvbiA9IGZpbmRGYWNhZGVVbnNhZmVKYXZhU2NyaXB0Tm9kZShmaWxlLnByb2dyYW0sIFwicmVmbGVjdGlvblwiLCBzdGRsaWJCaW5kaW5ncylcblxuICAgIGlmIChyZWZsZWN0aW9uKSBmYWNhZGVGcm9udGVuZEZhaWx1cmUobGFuZ3VhZ2UsIFwiU1RETElCX0ZBQ0FERV9SRUZMRUNUSU9OX1VOU1VQUE9SVEVEXCIsXG4gICAgICBcIlJlZmxlY3RpdmUgbG9va3VwIGNhbm5vdCBwcmVzZXJ2ZSBhIHByb3ZlZCBzdGFuZGFyZC1saWJyYXJ5IGZhY2FkZSBzeW1ib2wgaWRlbnRpdHkuXCIsIG5vZGVMb2NhdGlvbihyZWZsZWN0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiB7ZXhwb3J0cywgaW1wb3J0c31cbn1cblxuLyoqXG4gKiBGaW5kcyBwYXJzZXItb3duZWQgZHluYW1pYywgbXV0YXRpbmcsIG9yIHJlZmxlY3RpdmUgY29uc3RydWN0cyByZWxldmFudCB0byBmYWNhZGUgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQmFiZWwgc3VidHJlZS5cbiAqIEBwYXJhbSB7XCJkeW5hbWljXCIgfCBcIm11dGF0aW9uXCIgfCBcInJlZmxlY3Rpb25cIn0gbW9kZSAtIFJlamVjdGVkIGNvbnN0cnVjdCBjbGFzcy5cbiAqIEBwYXJhbSB7U2V0PHN0cmluZz59IGJpbmRpbmdzIC0gUGFyc2VyLXByb3ZlZCBuYXRpdmUgZmFjYWRlIGJpbmRpbmdzLlxuICogQHBhcmFtIHtXZWFrU2V0PG9iamVjdD59IFtzZWVuXSAtIEN5Y2xlIGd1YXJkLlxuICogQHJldHVybnMge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlIHwgdW5kZWZpbmVkfSBGaXJzdCByZWplY3RlZCBwYXJzZXIgbm9kZS5cbiAqL1xuZnVuY3Rpb24gZmluZEZhY2FkZVVuc2FmZUphdmFTY3JpcHROb2RlKHZhbHVlLCBtb2RlLCBiaW5kaW5ncywgc2VlbiA9IG5ldyBXZWFrU2V0KCkpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT0gXCJvYmplY3RcIiB8fCBzZWVuLmhhcyh2YWx1ZSkpIHJldHVybiB1bmRlZmluZWRcbiAgc2Vlbi5hZGQodmFsdWUpXG4gIGNvbnN0IG5vZGUgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAodmFsdWUpXG5cbiAgaWYgKG1vZGUgPT0gXCJkeW5hbWljXCIgJiYgbm9kZS50eXBlID09IFwiSW1wb3J0RXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3Qgc291cmNlTm9kZSA9IG5vZGUuc291cmNlXG5cbiAgICBpZiAoaXNGYWNhZGVNb2R1bGVTdHJpbmdOb2RlKHNvdXJjZU5vZGUpKSByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9kZX0gKi8gKHZhbHVlKVxuICB9XG4gIGlmIChtb2RlID09IFwiZHluYW1pY1wiICYmIG5vZGUudHlwZSA9PSBcIkNhbGxFeHByZXNzaW9uXCIgJiYgbm9kZS5jYWxsZWUgJiYgdHlwZW9mIG5vZGUuY2FsbGVlID09IFwib2JqZWN0XCIgJiZcbiAgICBSZWZsZWN0LmdldChub2RlLmNhbGxlZSwgXCJ0eXBlXCIpID09IFwiSW1wb3J0XCIpIHtcbiAgICBjb25zdCBhcmd1bWVudHNfID0gQXJyYXkuaXNBcnJheShub2RlLmFyZ3VtZW50cykgPyBub2RlLmFyZ3VtZW50cyA6IFtdXG5cbiAgICBpZiAoaXNGYWNhZGVNb2R1bGVTdHJpbmdOb2RlKGFyZ3VtZW50c19bMF0pKSByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9kZX0gKi8gKHZhbHVlKVxuICB9XG4gIGlmIChtb2RlID09IFwicmVmbGVjdGlvblwiICYmIG5vZGUudHlwZSA9PSBcIkNhbGxFeHByZXNzaW9uXCIgJiYgbm9kZS5jYWxsZWUgJiYgdHlwZW9mIG5vZGUuY2FsbGVlID09IFwib2JqZWN0XCIgJiZcbiAgICBSZWZsZWN0LmdldChub2RlLmNhbGxlZSwgXCJ0eXBlXCIpID09IFwiSWRlbnRpZmllclwiICYmIFJlZmxlY3QuZ2V0KG5vZGUuY2FsbGVlLCBcIm5hbWVcIikgPT0gXCJldmFsXCIpIHtcbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9kZX0gKi8gKHZhbHVlKVxuICB9XG4gIGlmIChtb2RlID09IFwibXV0YXRpb25cIiAmJiAobm9kZS50eXBlID09IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIiB8fCBub2RlLnR5cGUgPT0gXCJVcGRhdGVFeHByZXNzaW9uXCIpKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gbm9kZS50eXBlID09IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIiA/IG5vZGUubGVmdCA6IG5vZGUuYXJndW1lbnRcblxuICAgIGlmICh0YXJnZXQgJiYgdHlwZW9mIHRhcmdldCA9PSBcIm9iamVjdFwiICYmIFJlZmxlY3QuZ2V0KHRhcmdldCwgXCJ0eXBlXCIpID09IFwiSWRlbnRpZmllclwiICYmXG4gICAgICBiaW5kaW5ncy5oYXMoU3RyaW5nKFJlZmxlY3QuZ2V0KHRhcmdldCwgXCJuYW1lXCIpKSkpIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlfSAqLyAodmFsdWUpXG4gIH1cbiAgZm9yIChjb25zdCBba2V5LCBjaGlsZF0gb2YgT2JqZWN0LmVudHJpZXMobm9kZSkpIHtcbiAgICBpZiAoW1wiZXh0cmFcIiwgXCJpbm5lckNvbW1lbnRzXCIsIFwibGVhZGluZ0NvbW1lbnRzXCIsIFwibG9jXCIsIFwidHJhaWxpbmdDb21tZW50c1wiXS5pbmNsdWRlcyhrZXkpKSBjb250aW51ZVxuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGNoaWxkKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gZmluZEZhY2FkZVVuc2FmZUphdmFTY3JpcHROb2RlKGl0ZW0sIG1vZGUsIGJpbmRpbmdzLCBzZWVuKVxuXG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZvdW5kID0gZmluZEZhY2FkZVVuc2FmZUphdmFTY3JpcHROb2RlKGNoaWxkLCBtb2RlLCBiaW5kaW5ncywgc2VlbilcblxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIENoZWNrcyBhIEJhYmVsIHN0cmluZyBsaXRlcmFsIGZvciBvbmUgY2F0YWxvZy1zdHlsZSBzdGRsaWIgbW9kdWxlIGlkZW50aXR5LlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIEJhYmVsIGltcG9ydCBhcmd1bWVudC9zb3VyY2Ugbm9kZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBleGFjdCBsaXRlcmFsIGlzIGEgZmFjYWRlIG1vZHVsZSBjYW5kaWRhdGUuXG4gKi9cbmZ1bmN0aW9uIGlzRmFjYWRlTW9kdWxlU3RyaW5nTm9kZSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2VcbiAgY29uc3Qgbm9kZSA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovICh2YWx1ZSlcbiAgY29uc3QgbGl0ZXJhbCA9IG5vZGUudmFsdWVcblxuICByZXR1cm4gbm9kZS50eXBlID09IFwiU3RyaW5nTGl0ZXJhbFwiICYmIHR5cGVvZiBsaXRlcmFsID09IFwic3RyaW5nXCIgJiZcbiAgICAobGl0ZXJhbC5zdGFydHNXaXRoKFwic2VtYW50aWZvbGQ6XCIpIHx8IGxpdGVyYWwuc3RhcnRzV2l0aChcIm5vZGU6XCIpKVxufVxuXG4vKipcbiAqIFRocm93cyBvbmUgc3RhYmxlIGxvY2F0ZWQgZmFjYWRlIGZyb250ZW5kIGRpYWdub3N0aWMuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gU291cmNlIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgLSBTdGFibGUgZGlhZ25vc3RpYyBjb2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBEaWFnbm9zdGljIGRldGFpbC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gUGFyc2VyLW93bmVkIGxvY2F0aW9uLlxuICogQHJldHVybnMge25ldmVyfSBBbHdheXMgdGhyb3dzLlxuICovXG5mdW5jdGlvbiBmYWNhZGVGcm9udGVuZEZhaWx1cmUobGFuZ3VhZ2UsIGNvZGUsIG1lc3NhZ2UsIGxvY2F0aW9uKSB7XG4gIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe2NvZGUsIGxhbmd1YWdlLCBsb2NhdGlvbiwgbWVzc2FnZX0pXG59XG5cbi8qKlxuICogRmluZHMgQ29tbW9uSlMgY29uc3RydWN0cyB0aHJvdWdoIEJhYmVsIG5vZGVzIHJhdGhlciB0aGFuIHNvdXJjZS10ZXh0IG1hdGNoaW5nLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIEJhYmVsIHN1YnRyZWUuXG4gKiBAcGFyYW0ge1dlYWtTZXQ8b2JqZWN0Pn0gW3NlZW5dIC0gQ3ljbGUgZ3VhcmQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLk5vZGUgfCB1bmRlZmluZWR9IFVuc3VwcG9ydGVkIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGZpbmRDb21tb25Kc05vZGUodmFsdWUsIHNlZW4gPSBuZXcgV2Vha1NldCgpKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9IFwib2JqZWN0XCIgfHwgc2Vlbi5oYXModmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkXG4gIHNlZW4uYWRkKHZhbHVlKVxuICBjb25zdCBub2RlID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKHZhbHVlKVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgY2FsbGVlID0gbm9kZS5jYWxsZWVcblxuICAgIGlmIChjYWxsZWUgJiYgdHlwZW9mIGNhbGxlZSA9PSBcIm9iamVjdFwiICYmIFJlZmxlY3QuZ2V0KGNhbGxlZSwgXCJ0eXBlXCIpID09IFwiSWRlbnRpZmllclwiICYmIFJlZmxlY3QuZ2V0KGNhbGxlZSwgXCJuYW1lXCIpID09IFwicmVxdWlyZVwiKSB7XG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9kZX0gKi8gKHZhbHVlKVxuICAgIH1cbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3Qgb2JqZWN0ID0gbm9kZS5vYmplY3RcblxuICAgIGlmIChvYmplY3QgJiYgdHlwZW9mIG9iamVjdCA9PSBcIm9iamVjdFwiICYmIFJlZmxlY3QuZ2V0KG9iamVjdCwgXCJ0eXBlXCIpID09IFwiSWRlbnRpZmllclwiICYmXG4gICAgICBbXCJleHBvcnRzXCIsIFwibW9kdWxlXCJdLmluY2x1ZGVzKFN0cmluZyhSZWZsZWN0LmdldChvYmplY3QsIFwibmFtZVwiKSkpKSB7XG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9kZX0gKi8gKHZhbHVlKVxuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IFtrZXksIGNoaWxkXSBvZiBPYmplY3QuZW50cmllcyhub2RlKSkge1xuICAgIGlmIChbXCJleHRyYVwiLCBcImlubmVyQ29tbWVudHNcIiwgXCJsZWFkaW5nQ29tbWVudHNcIiwgXCJsb2NcIiwgXCJ0cmFpbGluZ0NvbW1lbnRzXCJdLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGQpKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2hpbGQpIHtcbiAgICAgICAgY29uc3QgZm91bmQgPSBmaW5kQ29tbW9uSnNOb2RlKGl0ZW0sIHNlZW4pXG5cbiAgICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmRcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZm91bmQgPSBmaW5kQ29tbW9uSnNOb2RlKGNoaWxkLCBzZWVuKVxuXG4gICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIEJhYmVsJ3MgemVyby1iYXNlZCBVVEYtMTYgZmFpbHVyZSBvZmZzZXQgd2hlbiBhdmFpbGFibGUuXG4gKiBAcGFyYW0ge3Vua25vd259IGVycm9yIC0gTmF0aXZlIEJhYmVsIHBhcnNlciBlcnJvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFJlcXVlc3RlZCBzb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBGYWlsdXJlIHJhbmdlLlxuICovXG5mdW5jdGlvbiBiYWJlbFBhcnNlckZhaWx1cmVMb2NhdGlvbihlcnJvciwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAoIWVycm9yIHx8IHR5cGVvZiBlcnJvciAhPSBcIm9iamVjdFwiKSByZXR1cm4gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgZGlyZWN0ID0gUmVmbGVjdC5nZXQoZXJyb3IsIFwicG9zXCIpXG4gIGNvbnN0IHBhcnNlckxvY2F0aW9uID0gUmVmbGVjdC5nZXQoZXJyb3IsIFwibG9jXCIpXG4gIGNvbnN0IGxvY2F0ZWQgPSBwYXJzZXJMb2NhdGlvbiAmJiB0eXBlb2YgcGFyc2VyTG9jYXRpb24gPT0gXCJvYmplY3RcIiA/IFJlZmxlY3QuZ2V0KHBhcnNlckxvY2F0aW9uLCBcImluZGV4XCIpIDogdW5kZWZpbmVkXG4gIGNvbnN0IG9mZnNldCA9IE51bWJlci5pc1NhZmVJbnRlZ2VyKGRpcmVjdCkgPyBkaXJlY3QgOiBsb2NhdGVkXG5cbiAgaWYgKHR5cGVvZiBvZmZzZXQgIT0gXCJudW1iZXJcIiB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIob2Zmc2V0KSB8fCBvZmZzZXQgPCAwIHx8IG9mZnNldCA+IHNvdXJjZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcbiAgfVxuXG4gIHJldHVybiBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIG9mZnNldCwgTWF0aC5taW4ob2Zmc2V0ICsgMSwgc291cmNlLmxlbmd0aCkpXG59XG5cbi8qKlxuICogQXNzb2NpYXRlcyBCYWJlbCBub2RlcyB3aXRoIHRoZWlyIHBhcnNlciB0b2tlbiBzdHJlYW0gd2l0aG91dCBsZWFraW5nIGl0IGludG8gc2VtYW50aWMgdmFsdWVzLlxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlIC0gQ3VycmVudCBwYXJzZXIgdmFsdWUuXG4gKiBAcGFyYW0ge0JhYmVsVG9rZW5JbmRleH0gdG9rZW5zIC0gSW5kZXhlZCBwYXJzZXIgdG9rZW5zLlxuICogQHBhcmFtIHtXZWFrU2V0PG9iamVjdD59IFt2aXNpdGVkXSAtIEN5Y2xlIHByb3RlY3Rpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVtZW1iZXJUb2tlbnModmFsdWUsIHRva2VucywgdmlzaXRlZCA9IG5ldyBXZWFrU2V0KCkpIHtcbiAgaWYgKHZpc2l0ZWQuaGFzKHZhbHVlKSkgcmV0dXJuXG5cbiAgdmlzaXRlZC5hZGQodmFsdWUpXG4gIG5vZGVUb2tlbnMuc2V0KHZhbHVlLCB0b2tlbnMpXG5cbiAgZm9yIChjb25zdCBjaGlsZCBvZiBPYmplY3QudmFsdWVzKHZhbHVlKSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGNoaWxkKSBpZiAoaXRlbSAmJiB0eXBlb2YgaXRlbSA9PSBcIm9iamVjdFwiKSByZW1lbWJlclRva2VucyhpdGVtLCB0b2tlbnMsIHZpc2l0ZWQpXG4gICAgfSBlbHNlIGlmIChjaGlsZCAmJiB0eXBlb2YgY2hpbGQgPT0gXCJvYmplY3RcIikgcmVtZW1iZXJUb2tlbnMoY2hpbGQsIHRva2VucywgdmlzaXRlZClcbiAgfVxufVxuIl19
|
|
2406
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC10eXBlc2NyaXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Zyb250ZW5kcy9qYXZhc2NyaXB0LXR5cGVzY3JpcHQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxLQUFLLElBQUksVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFBO0FBQ2pELE9BQU8sRUFBQyxLQUFLLElBQUksWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUE7QUFDcEQsT0FBTyxFQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUNwRyxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUNwRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUE7QUFDM0UsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUE7QUFDN0QsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMkJBQTJCLENBQUE7QUFDMUQsT0FBTyxFQUFDLHFCQUFxQixFQUFFLFVBQVUsRUFBQyxNQUFNLHdCQUF3QixDQUFBO0FBQ3hFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDZCQUE2QixDQUFBO0FBQ2xFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHdCQUF3QixDQUFBO0FBQzVELE9BQU8sRUFBQyx1QkFBdUIsRUFBRSx1QkFBdUIsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUM3RSxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsMkJBQTJCLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0NBQWdDLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFB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TSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDakcsT0FBTyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsa0NBQWtDLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDdEYsQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksYUFBYSxFQUFFLENBQUM7UUFDMUUsT0FBTyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsMkNBQTJDLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDMUssQ0FBQztJQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3JDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUV0SCxJQUFJLFdBQVcsQ0FBQyxJQUFJLElBQUksYUFBYSxJQUFJLFdBQVcsQ0FBQyxRQUFRLElBQUksV0FBVyxDQUFDLE1BQU0sSUFBSSxXQUFXLENBQUMsS0FBSyxJQUFJLFdBQVcsQ0FBQyxTQUFTO1FBQy9ILFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLFlBQVksSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxhQUFhLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRSxN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LENBQUE7QUFDM0YsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsY0FBYyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxHQUFHLElBQUksT0FBTyxFQUFFO0lBQzVELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFNO0lBRTlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDbEIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFFN0IsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLO2dCQUFFLElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxJQUFJLFFBQVE7b0JBQUUsY0FBYyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDdEcsQ0FBQzthQUFNLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVE7WUFBRSxjQUFjLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUN0RixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3BhcnNlIGFzIHBhcnNlQmFiZWx9IGZyb20gXCJAYmFiZWwvcGFyc2VyXCJcbmltcG9ydCB7cGFyc2UgYXMgcGFyc2VDb21tZW50fSBmcm9tIFwiY29tbWVudC1wYXJzZXJcIlxuaW1wb3J0IHttaXNzaW5nVHlwZSwgcGFyc2VGYWlsdXJlLCBTZW1hbnRpZm9sZERpYWdub3N0aWMsIHVuc3VwcG9ydGVkU3ludGF4fSBmcm9tIFwiLi4vZGlhZ25vc3RpYy5qc1wiXG5pbXBvcnQge2Jsb2NrUmVmZXJlbmNlc1Byb3RlY3RlZEVudHJ5fSBmcm9tIFwiLi4vc2VtYW50aWMvZWZmZWN0cy5qc1wiXG5pbXBvcnQge2xvY2F0aW9uRnJvbU9mZnNldHMsIG1vZHVsZUxvY2F0aW9ufSBmcm9tIFwiLi4vc2VtYW50aWMvbG9jYXRpb24uanNcIlxuaW1wb3J0IHt3aXRoQWRhcHRlZE9wZXJhdGlvbn0gZnJvbSBcIi4uL3NlbWFudGljL29wZXJhdG9ycy5qc1wiXG5pbXBvcnQge3dpdGhQYXJzZXJSYW5nZXN9IGZyb20gXCIuLi9zZW1hbnRpYy9wcm92ZW5hbmNlLmpzXCJcbmltcG9ydCB7aGFzT25seVVuaWNvZGVTY2FsYXJzLCBzY2FsYXJUeXBlfSBmcm9tIFwiLi4vc2VtYW50aWMvc2NhbGFycy5qc1wiXG5pbXBvcnQge2lzVGFzazAzNFJlc291cmNlUHJvYmV9IGZyb20gXCIuLi9zZW1hbnRpYy9jYXBhYmlsaXRpZXMuanNcIlxuaW1wb3J0IHtoYXNFeGFjdEVmZmVjdFN1cHBvcnR9IGZyb20gXCIuLi9iYWNrZW5kcy9lZmZlY3RzLmpzXCJcbmltcG9ydCB7cmVxdWlyZVNvdXJjZVJldHVyblR5cGUsIHJlcXVpcmVTb3VyY2VTY2FsYXJUeXBlfSBmcm9tIFwiLi9zY2FsYXJzLmpzXCJcbmltcG9ydCB7ZG9jdW1lbnRlZFZhbHVlVHlwZSwgaW5zdGFudGlhdGVkUmVjb3JkRmllbGRUeXBlLCBpdGVyYXRpb25CaW5kaW5nVHlwZSwgaXRlcmF0aW9uT3BlcmFuZFR5cGUsIGtub3duQ2FsbFJldHVyblR5cGUsIGxpc3RUeXBlLCBtYXBUeXBlLCBvcHRpb25hbFR5cGUsIG9yZGVyZWRNYXBUeXBlRnJvbU1hcCwgb3duZWRSZWZlcmVuY2VUeXBlLCBvd25lZFJlc291cmNlVHlwZSwgcHJlc2VydmVzR2VuZXJpY09wdGlvbmFsRXZpZGVuY2UsIHJlY29yZFR5cGUsIHJlZmVyZW5jZVR5cGUsIHR5cGVWYXJpYWJsZX0gZnJvbSBcIi4vdHlwZXMuanNcIlxuXG4vKiogQHR5cGVkZWYge05vbk51bGxhYmxlPGltcG9ydChcIkBiYWJlbC9wYXJzZXJcIikuUGFyc2VSZXN1bHQ8aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkZpbGU+W1widG9rZW5zXCJdPltudW1iZXJdfSBCYWJlbFRva2VuICovXG4vKiogQHR5cGVkZWYge3tieVN0YXJ0OiBNYXA8bnVtYmVyLCBCYWJlbFRva2VuPiwgdG9rZW5zOiBCYWJlbFRva2VuW119fSBCYWJlbFRva2VuSW5kZXggKi9cbi8qKiBAdHlwZWRlZiB7e25hbWU6IHN0cmluZywgbmFtZUxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgcGFyYW1ldGVyczogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUGFyYW1ldGVyW10sIHJldHVyblR5cGU6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlLCB0eXBlUGFyYW1ldGVycz86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXJbXSwgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufX0gSmF2YVNjcmlwdEZ1bmN0aW9uU2lnbmF0dXJlICovXG4vKiogQHR5cGVkZWYge3tiaW5kaW5nczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNCaW5kaW5nVHlwZT4sIGNsYXNzZXM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+LCBjdXJyZW50Q2xhc3M/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uLCBlcnJvcnM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+LCBlcnJvck5hbWVzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPiwgZnVuY3Rpb25zOiBNYXA8c3RyaW5nLCBKYXZhU2NyaXB0RnVuY3Rpb25TaWduYXR1cmU+LCBsZXhpY2FsVmFsdWVOYW1lcz86IFNldDxzdHJpbmc+LCBvcmRlcmVkTWFwRGVjbGFyYXRpb25zPzogU2V0PG9iamVjdD4sIHJlY29yZE5hbWVzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPiwgcmVjb3JkczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+LCByZXR1cm5UeXBlPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGUsIHR5cGVQYXJhbWV0ZXJzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj4sIHZhbHVlUmVjb3JkTmFtZXM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj59fSBKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHQgKi9cblxuLyoqIEB0eXBlIHtXZWFrTWFwPG9iamVjdCwgQmFiZWxUb2tlbkluZGV4Pn0gKi9cbmNvbnN0IG5vZGVUb2tlbnMgPSBuZXcgV2Vha01hcCgpXG5jb25zdCByZWZlcmVuY2VNZXRob2RIb29rcyA9IG5ldyBTZXQoW1xuICBcIl9fZGVmaW5lR2V0dGVyX19cIiwgXCJfX2RlZmluZVNldHRlcl9fXCIsIFwiX19sb29rdXBHZXR0ZXJfX1wiLCBcIl9fbG9va3VwU2V0dGVyX19cIiwgXCJfX3Byb3RvX19cIiwgXCJjb25zdHJ1Y3RvclwiLFxuICBcImhhc093blByb3BlcnR5XCIsIFwiaXNQcm90b3R5cGVPZlwiLCBcInByb3BlcnR5SXNFbnVtZXJhYmxlXCIsIFwidG9Mb2NhbGVTdHJpbmdcIiwgXCJ0b1N0cmluZ1wiLCBcInZhbHVlT2ZcIlxuXSlcbmNvbnN0IGJhYmVsQmluYXJ5T3BlcmF0aW9ucyA9IG5ldyBNYXAoW1xuICBbXCIrXCIsIFwiQWRkXCJdLFxuICBbXCItXCIsIFwiU3VidHJhY3RcIl0sXG4gIFtcIipcIiwgXCJNdWx0aXBseVwiXSxcbiAgW1wiPT09XCIsIFwiRXF1YWxcIl0sXG4gIFtcIiE9PVwiLCBcIk5vdEVxdWFsXCJdLFxuICBbXCI8XCIsIFwiTGVzc1RoYW5cIl0sXG4gIFtcIjw9XCIsIFwiTGVzc1RoYW5PckVxdWFsXCJdLFxuICBbXCI+XCIsIFwiR3JlYXRlclRoYW5cIl0sXG4gIFtcIj49XCIsIFwiR3JlYXRlclRoYW5PckVxdWFsXCJdXG5dKVxuXG4vKipcbiAqIFJldHVybnMgYSBzb3VyY2UgbG9jYXRpb24gZm9yIGEgQmFiZWwgbm9kZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLk5vZGV9IG5vZGUgLSBCYWJlbCBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gTm9ybWFsaXplZCBsb2NhdGlvbi5cbiAqL1xuZnVuY3Rpb24gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKHR5cGVvZiBub2RlLnN0YXJ0ICE9IFwibnVtYmVyXCIgfHwgdHlwZW9mIG5vZGUuZW5kICE9IFwibnVtYmVyXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEJhYmVsIG9taXR0ZWQgc291cmNlIG9mZnNldHMgZm9yICR7bm9kZS50eXBlfS5gKVxuICB9XG5cbiAgcmV0dXJuIGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgbm9kZS5zdGFydCwgbm9kZS5lbmQpXG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaWRlbnRpZmllciBzcGVsbGluZyByYXRoZXIgdGhhbiBhIHRyYWlsaW5nIFR5cGVTY3JpcHQgYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLklkZW50aWZpZXJ9IG5vZGUgLSBQYXJzZXIgaWRlbnRpZmllci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IElkZW50aWZpZXIgbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGlkZW50aWZpZXJMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICh0eXBlb2Ygbm9kZS5zdGFydCAhPSBcIm51bWJlclwiKSB0aHJvdyBuZXcgRXJyb3IoXCJCYWJlbCBvbWl0dGVkIGFuIGlkZW50aWZpZXIgc3RhcnQgb2Zmc2V0LlwiKVxuICBjb25zdCB0b2tlbiA9IG5vZGVUb2tlbnMuZ2V0KG5vZGUpPy5ieVN0YXJ0LmdldChub2RlLnN0YXJ0KVxuXG4gIGlmICghdG9rZW4gfHwgdG9rZW4udHlwZS5sYWJlbCAhPSBcIm5hbWVcIikgdGhyb3cgbmV3IEVycm9yKGBCYWJlbCBvbWl0dGVkIHRoZSBpZGVudGlmaWVyIHRva2VuIGZvciAnJHtub2RlLm5hbWV9Jy5gKVxuXG4gIHJldHVybiBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpXG59XG5cbi8qKlxuICogTG9jYXRlcyBvbmUgQmFiZWwgdG9rZW4gd2l0aGluIHBhcnNlci1ub2RlIGJvdW5kYXJpZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlfSBvd25lciAtIFRva2VuLW93bmluZyBwYXJzZXIgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIEV4YWN0IHRva2VuIHNwZWxsaW5nLlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0T2Zmc2V0IC0gSW5jbHVzaXZlIGJvdW5kYXJ5LlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZE9mZnNldCAtIEV4Y2x1c2l2ZSBib3VuZGFyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEV4YWN0IHRva2VuIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiB0b2tlbkxvY2F0aW9uKG93bmVyLCB2YWx1ZSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCB0b2tlbnMgPSBub2RlVG9rZW5zLmdldChvd25lcik/LnRva2VucyA/PyBbXVxuICBsZXQgbG93ID0gMFxuICBsZXQgaGlnaCA9IHRva2Vucy5sZW5ndGhcblxuICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgIGNvbnN0IG1pZGRsZSA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMilcblxuICAgIGlmICh0b2tlbnNbbWlkZGxlXS5zdGFydCA8IHN0YXJ0T2Zmc2V0KSBsb3cgPSBtaWRkbGUgKyAxXG4gICAgZWxzZSBoaWdoID0gbWlkZGxlXG4gIH1cbiAgbGV0IHRva2VuXG5cbiAgZm9yIChsZXQgaW5kZXggPSBsb3c7IGluZGV4IDwgdG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbaW5kZXhdLnN0YXJ0IDwgZW5kT2Zmc2V0OyBpbmRleCsrKSB7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gdG9rZW5zW2luZGV4XVxuXG4gICAgaWYgKGNhbmRpZGF0ZS5lbmQgPD0gZW5kT2Zmc2V0ICYmIChjYW5kaWRhdGUudmFsdWUgPT0gdmFsdWUgfHwgY2FuZGlkYXRlLnR5cGUubGFiZWwgPT0gdmFsdWUpKSB7XG4gICAgICB0b2tlbiA9IGNhbmRpZGF0ZVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoYEJhYmVsIG9taXR0ZWQgdG9rZW4gJyR7dmFsdWV9JyBiZXR3ZWVuICR7c3RhcnRPZmZzZXR9IGFuZCAke2VuZE9mZnNldH0uYClcblxuICByZXR1cm4gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCB0b2tlbi5zdGFydCwgdG9rZW4uZW5kKVxufVxuXG4vKipcbiAqIExvY2F0ZXMgYSBjb21tZW50LXBhcnNlciB0b2tlbiBpbnNpZGUgYSBCYWJlbC1vd25lZCBkb2MgY29tbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNvbW1lbnRCbG9ja30gY29tbWVudCAtIEJhYmVsIGRvYyBjb21tZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJjb21tZW50LXBhcnNlclwiKS5TcGVjfSB0YWcgLSBQYXJzZWQgZG9jIHRhZy5cbiAqIEBwYXJhbSB7XCJuYW1lXCIgfCBcInR5cGVcIn0gZmllbGQgLSBUb2tlbiBmaWVsZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEV4YWN0IHRva2VuIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudCwgdGFnLCBmaWVsZCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsaW5lID0gdGFnLnNvdXJjZVswXVxuXG4gIGlmICh0eXBlb2YgY29tbWVudC5zdGFydCAhPSBcIm51bWJlclwiIHx8ICFsaW5lKSB0aHJvdyBuZXcgRXJyb3IoYENvbW1lbnQgcGFyc2VyIG9taXR0ZWQgdGhlIEAke3RhZy50YWd9IHNvdXJjZSB0b2tlbi5gKVxuXG4gIGxldCBsaW5lU3RhcnQgPSBjb21tZW50LnN0YXJ0XG5cbiAgZm9yIChsZXQgbGluZU51bWJlciA9IDA7IGxpbmVOdW1iZXIgPCBsaW5lLm51bWJlcjsgbGluZU51bWJlcisrKSB7XG4gICAgd2hpbGUgKGxpbmVTdGFydCA8IHNvdXJjZS5sZW5ndGggJiYgc291cmNlW2xpbmVTdGFydF0gIT0gXCJcXHJcIiAmJiBzb3VyY2VbbGluZVN0YXJ0XSAhPSBcIlxcblwiKSBsaW5lU3RhcnQrK1xuICAgIGlmIChzb3VyY2VbbGluZVN0YXJ0XSA9PSBcIlxcclwiICYmIHNvdXJjZVtsaW5lU3RhcnQgKyAxXSA9PSBcIlxcblwiKSBsaW5lU3RhcnQgKz0gMlxuICAgIGVsc2UgbGluZVN0YXJ0KytcbiAgfVxuXG4gIGNvbnN0IG9yZGVyZWRGaWVsZHMgPSBbXCJzdGFydFwiLCBcImRlbGltaXRlclwiLCBcInBvc3REZWxpbWl0ZXJcIiwgXCJ0YWdcIiwgXCJwb3N0VGFnXCIsIFwidHlwZVwiLCBcInBvc3RUeXBlXCIsIFwibmFtZVwiXVxuICBjb25zdCBmaWVsZEluZGV4ID0gb3JkZXJlZEZpZWxkcy5pbmRleE9mKGZpZWxkKVxuICBsZXQgc3RhcnQgPSBsaW5lU3RhcnQgKyBvcmRlcmVkRmllbGRzLnNsaWNlKDAsIGZpZWxkSW5kZXgpLnJlZHVjZSgobGVuZ3RoLCBrZXkpID0+XG4gICAgbGVuZ3RoICsgbGluZS50b2tlbnNbLyoqIEB0eXBlIHtrZXlvZiB0eXBlb2YgbGluZS50b2tlbnN9ICovIChrZXkpXS5sZW5ndGgsIDApXG4gIGNvbnN0IHRva2VuID0gbGluZS50b2tlbnNbZmllbGRdXG4gIGxldCBsZW5ndGggPSB0b2tlbi5sZW5ndGhcblxuICBpZiAoZmllbGQgPT0gXCJ0eXBlXCIgJiYgdGFnLnR5cGUpIHtcbiAgICBjb25zdCBuZXN0ZWRPZmZzZXQgPSB0b2tlbi5pbmRleE9mKHRhZy50eXBlKVxuXG4gICAgaWYgKG5lc3RlZE9mZnNldCA8IDApIHRocm93IG5ldyBFcnJvcihgQ29tbWVudCBwYXJzZXIgb21pdHRlZCB0aGUgQCR7dGFnLnRhZ30gdHlwZSBzcGVsbGluZy5gKVxuICAgIHN0YXJ0ICs9IG5lc3RlZE9mZnNldFxuICAgIGxlbmd0aCA9IHRhZy50eXBlLmxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgc3RhcnQsIHN0YXJ0ICsgbGVuZ3RoKVxufVxuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBgTWFwYCByZXNvbHZlcyB0byB0aGUgbmF0aXZlIGludHJpbnNpYyBpbiB0aGUgY3VycmVudCBsZXhpY2FsIHNjb3BlLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIG5hdGl2ZSBNYXAgY29uc3RydWN0aW9uIGlzIHVuc2hhZG93ZWQuXG4gKi9cbmZ1bmN0aW9uIG5hdGl2ZU1hcEF2YWlsYWJsZShjb250ZXh0KSB7XG4gIHJldHVybiAhY29udGV4dC5iaW5kaW5ncy5oYXMoXCJNYXBcIikgJiYgIWNvbnRleHQubGV4aWNhbFZhbHVlTmFtZXM/LmhhcyhcIk1hcFwiKSAmJlxuICAgICFjb250ZXh0LmZ1bmN0aW9ucy5oYXMoXCJNYXBcIikgJiYgIWNvbnRleHQudmFsdWVSZWNvcmROYW1lcy5oYXMoXCJNYXBcIikgJiYgIWNvbnRleHQuZXJyb3JOYW1lcy5oYXMoXCJNYXBcIilcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN1cHBvcnRlZCBCYWJlbCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRXhwcmVzc2lvbn0gbm9kZSAtIEJhYmVsIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IFtjb250ZXh0XSAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gW2V4cGVjdGVkVHlwZV0gLSBFeHBsaWNpdCBjb250ZXh0dWFsIHZhbHVlIHR5cGUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVzZXJ2ZU9wdGlvbmFsXSAtIFdoZXRoZXIgYW4gb3B0aW9uYWwgaWRlbnRpZmllciByZW1haW5zIHdyYXBwZWQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEV4cHJlc3Npb24obm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQgPSB7YmluZGluZ3M6IG5ldyBNYXAoKSwgY2xhc3NlczogbmV3IE1hcCgpLCBlcnJvcnM6IG5ldyBNYXAoKSwgZXJyb3JOYW1lczogbmV3IE1hcCgpLCBmdW5jdGlvbnM6IG5ldyBNYXAoKSwgcmVjb3JkTmFtZXM6IG5ldyBNYXAoKSwgcmVjb3JkczogbmV3IE1hcCgpLCB2YWx1ZVJlY29yZE5hbWVzOiBuZXcgTWFwKCl9LCBleHBlY3RlZFR5cGUsIHByZXNlcnZlT3B0aW9uYWwgPSBmYWxzZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiYgbm9kZS5uYW1lID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidW5kZWZpbmVkIGFic2VuY2UgdmFsdWVcIiwgbG9jYXRpb24pXG4gIH1cblxuICBpZiAoZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICBpZiAobm9kZS50eXBlID09IFwiTnVsbExpdGVyYWxcIikge1xuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsTm9uZVwiKSwgbG9jYXRpb259LCB7YWJzZW5jZTogbG9jYXRpb259KVxuICAgIH1cbiAgICBpZiAoa25vd25FeHByZXNzaW9uVHlwZShub2RlLCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSk/LmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgICAgcmV0dXJuIGNvbnZlcnRFeHByZXNzaW9uKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCB1bmRlZmluZWQsIHRydWUpXG4gICAgfVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsU29tZVwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgdmFsdWU6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBleHBlY3RlZFR5cGUudmFsdWVUeXBlKVxuICAgIH0sIHtzb21lOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiTnVsbExpdGVyYWxcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm51bGwgb3V0c2lkZSBhbiBleHBsaWNpdCBvcHRpb25hbCBjb250ZXh0XCIsIGxvY2F0aW9uKVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJUU05vbk51bGxFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gY29udmVydEV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcblxuICAgIGlmIChsYW5ndWFnZSAhPSBcInR5cGVzY3JpcHRcIiB8fCBleHByZXNzaW9uLmtpbmQgIT0gXCJNYXBMb29rdXBFeHByZXNzaW9uXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJub24tbnVsbCBhc3NlcnRpb24gb3RoZXIgdGhhbiBNYXAuZ2V0IHJlc3VsdFwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgZXhwcmVzc2lvbi5sb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgcmV0dXJuIGV4cHJlc3Npb25cbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksIGxvY2F0aW9uLCBuYW1lOiBub2RlLm5hbWV9LCB7XG4gICAgICBuYW1lOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuXG4gICAgaWYgKCFwcmVzZXJ2ZU9wdGlvbmFsICYmIGNvbnRleHQuYmluZGluZ3MuZ2V0KG5vZGUubmFtZSk/LmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsVW53cmFwXCIpLCBsb2NhdGlvbiwgb3BlcmFuZDogaWRlbnRpZmllcn0sIHt1bndyYXA6IGxvY2F0aW9ufSlcbiAgICB9XG5cbiAgICByZXR1cm4gaWRlbnRpZmllclxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIlRoaXNFeHByZXNzaW9uXCIpIHtcbiAgICBpZiAoIWNvbnRleHQuY3VycmVudENsYXNzKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwicmVjZWl2ZXIgb3V0c2lkZSBhIHJlZmVyZW5jZSBjbGFzc1wiLCBsb2NhdGlvbilcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtjbGFzc0lkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGNvbnRleHQuY3VycmVudENsYXNzLmlkKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sXG4gICAgICB7cmVjZWl2ZXI6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJOdW1lcmljTGl0ZXJhbFwiKSB7XG4gICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihub2RlLnZhbHVlKSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm5vbi1zYWZlIGludGVnZXIgbGl0ZXJhbFwiLCBsb2NhdGlvbilcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJbnRlZ2VyTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBub2RlLnZhbHVlfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJCb29sZWFuTGl0ZXJhbFwiKSB7XG4gICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlICE9IFwiYm9vbGVhblwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiaW52YWxpZCBib29sZWFuIGxpdGVyYWwgdmFsdWVcIiwgbG9jYXRpb24pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQm9vbGVhbkxpdGVyYWxcIiksIGxvY2F0aW9uLCB2YWx1ZTogbm9kZS52YWx1ZX0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiU3RyaW5nTGl0ZXJhbFwiKSB7XG4gICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlICE9IFwic3RyaW5nXCIgfHwgIWhhc09ubHlVbmljb2RlU2NhbGFycyhub2RlLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImludmFsaWQgVW5pY29kZSBzdHJpbmcgbGl0ZXJhbFwiLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiU3RyaW5nTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBub2RlLnZhbHVlfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJBcnJheUV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiTGlzdFR5cGVcIiA/IGV4cGVjdGVkVHlwZS5lbGVtZW50VHlwZSA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IGVsZW1lbnRzID0gbm9kZS5lbGVtZW50cy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoIWVsZW1lbnQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJzcGFyc2UgYXJyYXkgaG9sZVwiLCBhcnJheUhvbGVMb2NhdGlvbihub2RlLCBpbmRleCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBpZiAoZWxlbWVudC50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiYXJyYXkgc3ByZWFkXCIsIG5vZGVMb2NhdGlvbihlbGVtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcblxuICAgICAgcmV0dXJuIGNvbnZlcnRFeHByZXNzaW9uKGVsZW1lbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBlbGVtZW50VHlwZSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2VsZW1lbnRzLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJMaXN0TGl0ZXJhbFwiKSwgbG9jYXRpb259LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIk5ld0V4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiSWRlbnRpZmllclwiICYmIG5vZGUuY2FsbGVlLm5hbWUgPT0gXCJNYXBcIikge1xuICAgIGlmICghbmF0aXZlTWFwQXZhaWxhYmxlKGNvbnRleHQpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwic2hhZG93ZWQgTWFwIGNvbnN0cnVjdG9yXCIsIGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmNhbGxlZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGlmIChleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJNYXAgdXNlZCBhcyBhIHN0cnVjdHVyYWwgcmVjb3JkIHN1YnN0aXR1dGVcIiwgbG9jYXRpb24pXG4gICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cyB8fCBub2RlLnR5cGVQYXJhbWV0ZXJzIHx8IG5vZGUuYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJnZW5lcmljIG9yIGludmFsaWQgTWFwIGNvbnN0cnVjdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgaW5pdGlhbGl6ZXIgPSBub2RlLmFyZ3VtZW50c1swXVxuXG4gICAgaWYgKCFpbml0aWFsaXplcikgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZW50cmllczogW10sXG4gICAgICBraW5kOiBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiXG4gICAgICAgID8gLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3JkZXJlZE1hcExpdGVyYWxcIilcbiAgICAgICAgOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNYXBMaXRlcmFsXCIpLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICAgIGlmIChpbml0aWFsaXplci50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGluaXRpYWxpemVyLnR5cGUgPT0gXCJBcmd1bWVudFBsYWNlaG9sZGVyXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgaW5pdGlhbGl6ZXIudHlwZSwgbm9kZUxvY2F0aW9uKGluaXRpYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgaWYgKGluaXRpYWxpemVyLnR5cGUgIT0gXCJBcnJheUV4cHJlc3Npb25cIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIk1hcCBpbml0aWFsaXplciBvdGhlciB0aGFuIGFuIGVudHJ5IGFycmF5XCIsIG5vZGVMb2NhdGlvbihpbml0aWFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IHZhbHVlVHlwZSA9IGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIiB8fCBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiXG4gICAgICA/IGV4cGVjdGVkVHlwZS52YWx1ZVR5cGUgOiB1bmRlZmluZWRcbiAgICBjb25zdCBlbnRyaWVzID0gaW5pdGlhbGl6ZXIuZWxlbWVudHMubWFwKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKCFlbGVtZW50KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwic3BhcnNlIG1hcCBpbml0aWFsaXplclwiLCBhcnJheUhvbGVMb2NhdGlvbihpbml0aWFsaXplciwgaW5kZXgsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm1hcCBzcHJlYWRcIiwgbm9kZUxvY2F0aW9uKGVsZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgaWYgKGVsZW1lbnQudHlwZSAhPSBcIkFycmF5RXhwcmVzc2lvblwiIHx8IGVsZW1lbnQuZWxlbWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIk1hcCBlbnRyeSBvdGhlciB0aGFuIGEga2V5L3ZhbHVlIHBhaXJcIiwgbm9kZUxvY2F0aW9uKGVsZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gZWxlbWVudC5lbGVtZW50c1xuXG4gICAgICBpZiAoIWtleSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInNwYXJzZSBtYXAga2V5XCIsIGFycmF5SG9sZUxvY2F0aW9uKGVsZW1lbnQsIDAsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInNwYXJzZSBtYXAgdmFsdWVcIiwgYXJyYXlIb2xlTG9jYXRpb24oZWxlbWVudCwgMSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBpZiAoa2V5LnR5cGUgPT0gXCJTcHJlYWRFbGVtZW50XCIgfHwgdmFsdWUudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIikge1xuICAgICAgICBjb25zdCBzcHJlYWQgPSBrZXkudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIiA/IGtleSA6IHZhbHVlXG5cbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm1hcCBlbnRyeSBzcHJlYWRcIiwgbm9kZUxvY2F0aW9uKHNwcmVhZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBpZiAoa2V5LnR5cGUgIT0gXCJTdHJpbmdMaXRlcmFsXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm1hcCBrZXkgb3RoZXIgdGhhbiBhIHN0cmluZyBsaXRlcmFsXCIsIG5vZGVMb2NhdGlvbihrZXksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgY29uc3Qga2V5RXhwcmVzc2lvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RyaW5nTGl0ZXJhbH0gKi8gKFxuICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihrZXksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgICAgKVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGtleToga2V5RXhwcmVzc2lvbixcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwRW50cnlcIiksXG4gICAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oZWxlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIHZhbHVlOiBjb252ZXJ0RXhwcmVzc2lvbih2YWx1ZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHZhbHVlVHlwZSlcbiAgICAgIH0sIHtcbiAgICAgICAga2V5OiBrZXlFeHByZXNzaW9uLmxvY2F0aW9uLFxuICAgICAgICBvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihlbGVtZW50LCBcIixcIiwga2V5LmVuZCA/PyBlbGVtZW50LnN0YXJ0ID8/IDAsIHZhbHVlLnN0YXJ0ID8/IGVsZW1lbnQuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBlbnRyaWVzLFxuICAgICAga2luZDogZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIlxuICAgICAgICA/IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9yZGVyZWRNYXBMaXRlcmFsXCIpXG4gICAgICAgIDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwTGl0ZXJhbFwiKSxcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJOZXdFeHByZXNzaW9uXCIgJiYgbm9kZS5jYWxsZWUudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJiBjb250ZXh0LnZhbHVlUmVjb3JkTmFtZXMuaGFzKG5vZGUuY2FsbGVlLm5hbWUpKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gKi8gKGNvbnRleHQudmFsdWVSZWNvcmROYW1lcy5nZXQobm9kZS5jYWxsZWUubmFtZSkpXG4gICAgaWYgKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpIHtcbiAgICAgIGlmIChub2RlLnR5cGVBcmd1bWVudHMgfHwgbm9kZS50eXBlUGFyYW1ldGVycykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImdlbmVyaWMgcmVmZXJlbmNlIGNvbnN0cnVjdGlvblwiLCBsb2NhdGlvbilcbiAgICAgIGNvbnN0IGFyZ3VtZW50c18gPSBub2RlLmFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoYXJndW1lbnQudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIiB8fCBhcmd1bWVudC50eXBlID09IFwiQXJndW1lbnRQbGFjZWhvbGRlclwiKSB7XG4gICAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBhcmd1bWVudC50eXBlLCBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZGVjbGFyYXRpb24uY29uc3RydWN0b3IucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUpXG4gICAgICB9KVxuICAgICAgY29uc3QgY2xhc3NMb2NhdGlvbiA9IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmNhbGxlZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2FyZ3VtZW50czogYXJndW1lbnRzXywga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVmZXJlbmNlQ29uc3RydWN0aW9uXCIpLCBsb2NhdGlvbixcbiAgICAgICAgcmVmZXJlbmNlOiBkZWNsYXJhdGlvbi5vd25lcnNoaXA/LmtpbmQgPT0gXCJvd25lZFJlc291cmNlXCJcbiAgICAgICAgICA/IG93bmVkUmVmZXJlbmNlVHlwZSgvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgY2xhc3NMb2NhdGlvbilcbiAgICAgICAgICA6IHJlZmVyZW5jZVR5cGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGNsYXNzTG9jYXRpb24pfSwge2NsYXNzOiBjbGFzc0xvY2F0aW9ufSlcbiAgICB9XG4gICAgY29uc3Qgc291cmNlQXJndW1lbnRzID0gbm9kZS50eXBlQXJndW1lbnRzPy5wYXJhbXMgPz8gbm9kZS50eXBlUGFyYW1ldGVycz8ucGFyYW1zXG4gICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHNvdXJjZUFyZ3VtZW50cz8ubWFwKCgvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5UU1R5cGV9ICovIGFyZ3VtZW50KSA9PiBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUoXG4gICAgICBhcmd1bWVudCxcbiAgICAgIGBSZWNvcmQgJyR7ZGVjbGFyYXRpb24ubmFtZX0nIGFwcGxpY2F0aW9uYCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnNcbiAgICApKSA/PyAoZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiUmVjb3JkVHlwZVwiICYmIGV4cGVjdGVkVHlwZS5kZWNsYXJhdGlvbklkID09IGRlY2xhcmF0aW9uLmlkID8gZXhwZWN0ZWRUeXBlLmFyZ3VtZW50cyA6IHVuZGVmaW5lZClcbiAgICBjb25zdCBhcmd1bWVudHNfID0gbm9kZS5hcmd1bWVudHMubWFwKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChhcmd1bWVudC50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGFyZ3VtZW50LnR5cGUgPT0gXCJBcmd1bWVudFBsYWNlaG9sZGVyXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBhcmd1bWVudC50eXBlLCBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LFxuICAgICAgICBpbnN0YW50aWF0ZWRSZWNvcmRGaWVsZFR5cGUoZGVjbGFyYXRpb24sIHR5cGVBcmd1bWVudHMsIGluZGV4KSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgYXJndW1lbnRzOiBhcmd1bWVudHNfLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkQ29uc3RydWN0aW9uXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICByZWNvcmQ6IHJlY29yZFR5cGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmNhbGxlZSwgZmlsZW5hbWUsIHNvdXJjZSksIHR5cGVBcmd1bWVudHMpXG4gICAgfSwge3JlY29yZDogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuY2FsbGVlLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFub2RlLm9wdGlvbmFsICYmIG5vZGUub2JqZWN0LnR5cGUgIT0gXCJTdXBlclwiKSB7XG4gICAgaWYgKCFub2RlLmNvbXB1dGVkICYmIG5vZGUub2JqZWN0LnR5cGUgPT0gXCJUaGlzRXhwcmVzc2lvblwiICYmIGNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgICAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5JZGVudGlmaWVyIHwgdW5kZWZpbmVkfSAqL1xuICAgICAgbGV0IHByb3BlcnR5XG5cbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiAmJiBub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJQcml2YXRlTmFtZVwiKSBwcm9wZXJ0eSA9IG5vZGUucHJvcGVydHkuaWRcbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiAmJiBub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHByb3BlcnR5ID0gbm9kZS5wcm9wZXJ0eVxuICAgICAgaWYgKCFwcm9wZXJ0eSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm5vbmNhbm9uaWNhbCBwcml2YXRlIGluc3RhbmNlIGZpZWxkIGFjY2Vzc1wiLCBsb2NhdGlvbilcbiAgICAgIGNvbnN0IGZpZWxkID0gY29udGV4dC5jdXJyZW50Q2xhc3MuZmllbGRzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT0gcHJvcGVydHkubmFtZSlcblxuICAgICAgaWYgKCFmaWVsZCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBgdW5rbm93biBwcml2YXRlIGZpZWxkICcke3Byb3BlcnR5Lm5hbWV9J2AsIGlkZW50aWZpZXJMb2NhdGlvbihwcm9wZXJ0eSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7ZmllbGQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZmllbGQuaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQcml2YXRlRmllbGRSZWFkXCIpLCBsb2NhdGlvbixcbiAgICAgICAgcmVjZWl2ZXI6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjZWl2ZXJFeHByZXNzaW9ufSAqLyAoXG4gICAgICAgICAgY29udmVydEV4cHJlc3Npb24obm9kZS5vYmplY3QsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSl9LCB7bWVtYmVyOiBpZGVudGlmaWVyTG9jYXRpb24ocHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLm9iamVjdCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpPy5raW5kID09IFwiUmVmZXJlbmNlVHlwZVwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwicHJpdmF0ZSByZWZlcmVuY2UtY2xhc3MgZmllbGQgYWNjZXNzXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIW5vZGUuY29tcHV0ZWQgJiYgbm9kZS5vYmplY3QudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJiBub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAgIG5vZGUucHJvcGVydHkubmFtZSA9PSBcIm1lc3NhZ2VcIiAmJiBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlLm9iamVjdC5uYW1lKT8ua2luZCA9PSBcIkVycm9yVHlwZVwiKSB7XG4gICAgICBjb25zdCByZWNlaXZlckxvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKG5vZGUub2JqZWN0LCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yTWVzc2FnZVJlYWRcIiksXG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICByZWNlaXZlcjogd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksIGxvY2F0aW9uOiByZWNlaXZlckxvY2F0aW9uLCBuYW1lOiBub2RlLm9iamVjdC5uYW1lfSwge1xuICAgICAgICAgIG5hbWU6IHJlY2VpdmVyTG9jYXRpb25cbiAgICAgICAgfSlcbiAgICAgIH0sIHttZW1iZXI6IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLnByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICAgIGlmIChub2RlLmNvbXB1dGVkKSB7XG4gICAgICBpZiAoa25vd25WYWx1ZUV4cHJlc3Npb25UeXBlKG5vZGUub2JqZWN0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSk/LmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImNvbXB1dGVkIHJlY29yZCBtZW1iZXIgYWNjZXNzXCIsIG5vZGVMb2NhdGlvbihub2RlLnByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJQcml2YXRlTmFtZVwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIG5vZGUucHJvcGVydHkudHlwZSwgbG9jYXRpb24pXG5cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgY29sbGVjdGlvbjogY29udmVydEV4cHJlc3Npb24obm9kZS5vYmplY3QsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgICAgaW5kZXg6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucHJvcGVydHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTGlzdEluZGV4RXhwcmVzc2lvblwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHRvdGFsaXR5OiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJwcm92ZW5cIilcbiAgICAgIH0sIHtcbiAgICAgICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24obm9kZSwgXCJbXCIsIG5vZGUub2JqZWN0LmVuZCA/PyBub2RlLnN0YXJ0ID8/IDAsIG5vZGUucHJvcGVydHkuc3RhcnQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiYgW1wibGVuZ3RoXCIsIFwic2l6ZVwiXS5pbmNsdWRlcyhub2RlLnByb3BlcnR5Lm5hbWUpKSB7XG4gICAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5vYmplY3QsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICBpZiAocmVjZWl2ZXJUeXBlPy5raW5kID09IFwiUmVjb3JkVHlwZVwiKSB7XG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgICBmaWVsZDogbm9kZS5wcm9wZXJ0eS5uYW1lLFxuICAgICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1lbWJlclJlYWRcIiksXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgcmVjZWl2ZXI6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUub2JqZWN0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICAgICAgfSwge21lbWJlcjogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUucHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgY29sbGVjdGlvbjogY29udmVydEV4cHJlc3Npb24obm9kZS5vYmplY3QsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgICAgY29sbGVjdGlvbktpbmQ6IC8qKiBAdHlwZSB7XCJsaXN0XCIgfCBcIm1hcFwifSAqLyAobm9kZS5wcm9wZXJ0eS5uYW1lID09IFwibGVuZ3RoXCIgPyBcImxpc3RcIiA6IFwibWFwXCIpLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIiksXG4gICAgICAgIGxvY2F0aW9uXG4gICAgICB9LCB7b3BlcmF0b3I6IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLnByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICAgIGlmIChub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgZmllbGQ6IG5vZGUucHJvcGVydHkubmFtZSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWVtYmVyUmVhZFwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHJlY2VpdmVyOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLm9iamVjdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgICB9LCB7bWVtYmVyOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5wcm9wZXJ0eSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJUZW1wbGF0ZUxpdGVyYWxcIikge1xuICAgIGlmIChub2RlLmV4cHJlc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbltdfSAqL1xuICAgICAgY29uc3Qgb3JkZXJlZCA9IFtdXG5cbiAgICAgIG5vZGUucXVhc2lzLmZvckVhY2goKHF1YXNpLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHF1YXNpLnZhbHVlLmNvb2tlZCAhPSBcInN0cmluZ1wiIHx8ICFoYXNPbmx5VW5pY29kZVNjYWxhcnMocXVhc2kudmFsdWUuY29va2VkKSkge1xuICAgICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJpbnZhbGlkIFVuaWNvZGUgc3RyaW5nIGxpdGVyYWxcIiwgbm9kZUxvY2F0aW9uKHF1YXNpLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWFzaUxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHF1YXNpLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICAgIGlmIChxdWFzaS52YWx1ZS5jb29rZWQubGVuZ3RoID4gMCkgb3JkZXJlZC5wdXNoKHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlN0cmluZ0xpdGVyYWxcIiksIGxvY2F0aW9uOiBxdWFzaUxvY2F0aW9uLCB2YWx1ZTogcXVhc2kudmFsdWUuY29va2VkfSwge2xpdGVyYWw6IHF1YXNpTG9jYXRpb259KSlcbiAgICAgICAgaWYgKGluZGV4IDwgbm9kZS5leHByZXNzaW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICBvcmRlcmVkLnB1c2goY29udmVydEV4cHJlc3Npb24oLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRXhwcmVzc2lvbn0gKi8gKG5vZGUuZXhwcmVzc2lvbnNbaW5kZXhdKSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHNjYWxhclR5cGUoXCJzdHJpbmdcIikpKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKG9yZGVyZWQubGVuZ3RoID09IDApIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJpbnRlcnBvbGF0ZWQgc3RyaW5nXCIsIGxvY2F0aW9uKVxuXG4gICAgICBsZXQgbG93ZXJlZCA9IG9yZGVyZWRbMF1cblxuICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIG9yZGVyZWQuc2xpY2UoMSkpIHtcbiAgICAgICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih7XG4gICAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQmluYXJ5RXhwcmVzc2lvblwiKSxcbiAgICAgICAgICBsZWZ0OiBsb3dlcmVkLFxuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgIHJpZ2h0OiBwYXJ0XG4gICAgICAgIH0sIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCIpLkFkYXB0ZWRPcGVyYXRpb259ICovIChcIlN0cmluZ0NvbmNhdFwiKSlcblxuICAgICAgICBsb3dlcmVkID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbG93ZXJlZFxuICAgIH1cblxuICAgIGNvbnN0IHF1YXNpID0gbm9kZS5xdWFzaXNbMF1cblxuICAgIGlmICh0eXBlb2YgcXVhc2kudmFsdWUuY29va2VkICE9IFwic3RyaW5nXCIgfHwgIWhhc09ubHlVbmljb2RlU2NhbGFycyhxdWFzaS52YWx1ZS5jb29rZWQpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiaW52YWxpZCBVbmljb2RlIHN0cmluZyBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJTdHJpbmdMaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IHF1YXNpLnZhbHVlLmNvb2tlZH0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAod2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBhbHRlcm5hdGU6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUuYWx0ZXJuYXRlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBjb25kaXRpb246IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUudGVzdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgY29uc2VxdWVudDogY29udmVydEV4cHJlc3Npb24obm9kZS5jb25zZXF1ZW50LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDb25kaXRpb25hbEV4cHJlc3Npb25cIiksXG4gICAgICBsb2NhdGlvblxuICAgIH0sIHtcbiAgICAgIGFsdGVybmF0ZTogbm9kZUxvY2F0aW9uKG5vZGUuYWx0ZXJuYXRlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIGNvbG9uOiB0b2tlbkxvY2F0aW9uKG5vZGUsIFwiOlwiLCBub2RlLmNvbnNlcXVlbnQuZW5kID8/IG5vZGUudGVzdC5lbmQgPz8gbm9kZS5zdGFydCA/PyAwLCBub2RlLmFsdGVybmF0ZS5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIGNvbmRpdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUudGVzdCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBjb25zZXF1ZW50OiBub2RlTG9jYXRpb24obm9kZS5jb25zZXF1ZW50LCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKG5vZGUsIFwiP1wiLCBub2RlLnRlc3QuZW5kID8/IG5vZGUuc3RhcnQgPz8gMCwgbm9kZS5jb25zZXF1ZW50LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSkpKVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiICYmIFtcIiFcIiwgXCItXCJdLmluY2x1ZGVzKG5vZGUub3BlcmF0b3IpKSB7XG4gICAgY29uc3Qgb3BlcmFuZCA9IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUuYXJndW1lbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIlVuYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBvcGVyYW5kXG4gICAgfSwge1xuICAgICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24obm9kZSwgbm9kZS5vcGVyYXRvciwgbm9kZS5zdGFydCA/PyAwLCBub2RlLmFyZ3VtZW50LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSksIG5vZGUub3BlcmF0b3IgPT0gXCIhXCIgPyBcIk5vdFwiIDogXCJOZWdhdGVcIilcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChzZW1hbnRpYykpXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiTG9naWNhbEV4cHJlc3Npb25cIiAmJiBbXCImJlwiLCBcInx8XCJdLmluY2x1ZGVzKG5vZGUub3BlcmF0b3IpKSB7XG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IFwiQmluYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbGVmdDogY29udmVydEV4cHJlc3Npb24obm9kZS5sZWZ0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJpZ2h0OiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnJpZ2h0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9LCB7XG4gICAgICBvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihub2RlLCBub2RlLm9wZXJhdG9yLCBub2RlLmxlZnQuZW5kID8/IG5vZGUuc3RhcnQgPz8gMCwgbm9kZS5yaWdodC5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pLCBub2RlLm9wZXJhdG9yID09IFwiJiZcIiA/IFwiQW5kXCIgOiBcIk9yXCIpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIiAmJiBub2RlLm9wZXJhdG9yID09IFwiIT09XCIgJiYgbm9kZS5sZWZ0LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICBub2RlLnJpZ2h0LnR5cGUgPT0gXCJOdWxsTGl0ZXJhbFwiKSB7XG4gICAgY29uc3Qgb3BlcmFuZCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSWRlbnRpZmllckV4cHJlc3Npb259ICovIChcbiAgICAgIGNvbnZlcnRFeHByZXNzaW9uKG5vZGUubGVmdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHVuZGVmaW5lZCwgdHJ1ZSlcbiAgICApXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxJc1ByZXNlbnRcIiksIGxvY2F0aW9uLCBvcGVyYW5kfSwge1xuICAgICAgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24obm9kZSwgbm9kZS5vcGVyYXRvciwgbm9kZS5sZWZ0LmVuZCA/PyBub2RlLnN0YXJ0ID8/IDAsIG5vZGUucmlnaHQuc3RhcnQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIiAmJiBiYWJlbEJpbmFyeU9wZXJhdGlvbnMuaGFzKG5vZGUub3BlcmF0b3IpKSB7XG4gICAgaWYgKG5vZGUubGVmdC50eXBlID09IFwiUHJpdmF0ZU5hbWVcIikgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIG5vZGUubGVmdC50eXBlLCBsb2NhdGlvbilcblxuICAgIGNvbnN0IGxlZnQgPSBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmxlZnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIGNvbnN0IHJpZ2h0ID0gY29udmVydEV4cHJlc3Npb24obm9kZS5yaWdodCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG5cbiAgICBjb25zdCBzZW1hbnRpYyA9IHdpdGhBZGFwdGVkT3BlcmF0aW9uKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogXCJCaW5hcnlFeHByZXNzaW9uXCIsXG4gICAgICBsZWZ0LFxuICAgICAgbG9jYXRpb24sXG4gICAgICByaWdodFxuICAgIH0sIHtcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKG5vZGUsIG5vZGUub3BlcmF0b3IsIG5vZGUubGVmdC5lbmQgPz8gbm9kZS5zdGFydCA/PyAwLCBub2RlLnJpZ2h0LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSksIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCIpLkFkYXB0ZWRPcGVyYXRpb259ICovIChiYWJlbEJpbmFyeU9wZXJhdGlvbnMuZ2V0KG5vZGUub3BlcmF0b3IpKSlcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChzZW1hbnRpYykpXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiQmluYXJ5RXhwcmVzc2lvblwiICYmIFtcIj09XCIsIFwiIT1cIl0uaW5jbHVkZXMobm9kZS5vcGVyYXRvcikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGBjb2VyY2l2ZSBlcXVhbGl0eSAke25vZGUub3BlcmF0b3J9YCwgbG9jYXRpb24pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgaWYgKG5vZGUub3B0aW9uYWwgfHwgbm9kZS5jYWxsZWUub3B0aW9uYWwgfHwgbm9kZS50eXBlQXJndW1lbnRzIHx8IG5vZGUudHlwZVBhcmFtZXRlcnMpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJvcHRpb25hbCBvciBnZW5lcmljIGNhbGxcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNvbnRleHQuZnVuY3Rpb25zLmdldChub2RlLmNhbGxlZS5uYW1lKVxuICAgIGNvbnN0IGFyZ3VtZW50c18gPSBub2RlLmFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGFyZ3VtZW50LnR5cGUgPT0gXCJTcHJlYWRFbGVtZW50XCIgfHwgYXJndW1lbnQudHlwZSA9PSBcIkFyZ3VtZW50UGxhY2Vob2xkZXJcIikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGFyZ3VtZW50LnR5cGUsIG5vZGVMb2NhdGlvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHNpZ25hdHVyZT8ucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUsXG4gICAgICAgIHByZXNlcnZlc0dlbmVyaWNPcHRpb25hbEV2aWRlbmNlKHNpZ25hdHVyZSwgaW5kZXgpKVxuICAgIH0pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudHNfLCBjYWxsZWU6IG5vZGUuY2FsbGVlLm5hbWUsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhbGxFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sIHtcbiAgICAgIGNhbGxlZTogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuY2FsbGVlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiAhbm9kZS5vcHRpb25hbCAmJiAhbm9kZS50eXBlQXJndW1lbnRzICYmICFub2RlLnR5cGVQYXJhbWV0ZXJzICYmXG4gICAgbm9kZS5jYWxsZWUudHlwZSA9PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJiAhbm9kZS5jYWxsZWUuY29tcHV0ZWQgJiYgIW5vZGUuY2FsbGVlLm9wdGlvbmFsICYmXG4gICAgbm9kZS5jYWxsZWUub2JqZWN0LnR5cGUgIT0gXCJTdXBlclwiICYmIG5vZGUuY2FsbGVlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5jYWxsZWUub2JqZWN0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChyZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIgfHwgcmVjZWl2ZXJUeXBlPy5raW5kID09IFwiT3duZWRSZWZlcmVuY2VUeXBlXCIpIHtcbiAgICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gY29udGV4dC5jbGFzc2VzLmdldChyZWNlaXZlclR5cGUuZGVjbGFyYXRpb25JZClcbiAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBub2RlLmNhbGxlZS5wcm9wZXJ0eS5uYW1lXG4gICAgICBjb25zdCBtZXRob2QgPSBkZWNsYXJhdGlvbj8ubWV0aG9kcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5uYW1lID09IG1ldGhvZE5hbWUpXG4gICAgICBjb25zdCBhcmd1bWVudHNfID0gbm9kZS5hcmd1bWVudHMubWFwKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGFyZ3VtZW50LnR5cGUgPT0gXCJTcHJlYWRFbGVtZW50XCIgfHwgYXJndW1lbnQudHlwZSA9PSBcIkFyZ3VtZW50UGxhY2Vob2xkZXJcIikge1xuICAgICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYXJndW1lbnQudHlwZSwgbm9kZUxvY2F0aW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIG1ldGhvZD8ucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUpXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudHNfLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNZXRob2RDYWxsRXhwcmVzc2lvblwiKSwgbG9jYXRpb24sXG4gICAgICAgIG1ldGhvZDogbWV0aG9kPy5pZCA/PyBub2RlLmNhbGxlZS5wcm9wZXJ0eS5uYW1lLFxuICAgICAgICByZWNlaXZlcjogY29udmVydEV4cHJlc3Npb24obm9kZS5jYWxsZWUub2JqZWN0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCl9LFxuICAgICAge21lbWJlcjogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuY2FsbGVlLnByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICB9XG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkNhbGxFeHByZXNzaW9uXCIgJiYgIW5vZGUub3B0aW9uYWwgJiYgIW5vZGUudHlwZUFyZ3VtZW50cyAmJiAhbm9kZS50eXBlUGFyYW1ldGVycyAmJlxuICAgIG5vZGUuY2FsbGVlLnR5cGUgPT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiYgIW5vZGUuY2FsbGVlLmNvbXB1dGVkICYmICFub2RlLmNhbGxlZS5vcHRpb25hbCAmJlxuICAgIG5vZGUuY2FsbGVlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJiBub2RlLmNhbGxlZS5wcm9wZXJ0eS50eXBlID09IFwiSWRlbnRpZmllclwiICYmXG4gICAgbm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSA9PSBcImdldFwiKSB7XG4gICAgaWYgKG5vZGUuYXJndW1lbnRzLmxlbmd0aCAhPSAxKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiTWFwLmdldCBhcmd1bWVudCBjb3VudFwiLCBsb2NhdGlvbilcbiAgICBjb25zdCBrZXkgPSBub2RlLmFyZ3VtZW50c1swXVxuXG4gICAgaWYgKGtleS50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGtleS50eXBlID09IFwiQXJndW1lbnRQbGFjZWhvbGRlclwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGtleS50eXBlLCBub2RlTG9jYXRpb24oa2V5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBjb2xsZWN0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmNhbGxlZS5vYmplY3QsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGtleTogY29udmVydEV4cHJlc3Npb24oa2V5LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNYXBMb29rdXBFeHByZXNzaW9uXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICB0b3RhbGl0eTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwicHJvdmVuXCIpXG4gICAgfSwge29wZXJhdG9yOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5jYWxsZWUucHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgbm9kZS50eXBlLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBvbmx5IGV4cHJlc3Npb24gcmVzdWx0IHR5cGVzIGFscmVhZHkgZXN0YWJsaXNoZWQgYnkgZXhwbGljaXQgbW9kdWxlXG4gKiBzaWduYXR1cmVzIGFuZCBjb2xsZWN0aW9uIGJpbmRpbmdzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRXhwcmVzc2lvbn0gbm9kZSAtIFBhcnNlci1vd25lZCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JUeXBlIHwgdW5kZWZpbmVkfSBLbm93biByZXN1bHQgdHlwZS5cbiAqL1xuZnVuY3Rpb24ga25vd25FeHByZXNzaW9uVHlwZShub2RlLCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAobm9kZS50eXBlID09IFwiVFNOb25OdWxsRXhwcmVzc2lvblwiKSByZXR1cm4ga25vd25FeHByZXNzaW9uVHlwZShub2RlLmV4cHJlc3Npb24sIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKVxuICBpZiAobm9kZS50eXBlID09IFwiSWRlbnRpZmllclwiKSByZXR1cm4gY29udGV4dC5iaW5kaW5ncy5nZXQobm9kZS5uYW1lKVxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KG5vZGUuY2FsbGVlLm5hbWUpXG5cbiAgICBpZiAoc2lnbmF0dXJlKSByZXR1cm4ga25vd25DYWxsUmV0dXJuVHlwZShzaWduYXR1cmUsIG5vZGUuYXJndW1lbnRzLm1hcCgoYXJndW1lbnQpID0+XG4gICAgICBhcmd1bWVudC50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGFyZ3VtZW50LnR5cGUgPT0gXCJBcmd1bWVudFBsYWNlaG9sZGVyXCJcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiBrbm93bkV4cHJlc3Npb25UeXBlKGFyZ3VtZW50LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSkpKVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJOZXdFeHByZXNzaW9uXCIgJiYgbm9kZS5jYWxsZWUudHlwZSA9PSBcIklkZW50aWZpZXJcIikge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gY29udGV4dC52YWx1ZVJlY29yZE5hbWVzLmdldChub2RlLmNhbGxlZS5uYW1lKVxuXG4gICAgaWYgKGRlY2xhcmF0aW9uPy5pZCkge1xuICAgICAgaWYgKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpIHJldHVybiB7ZGVjbGFyYXRpb25JZDogZGVjbGFyYXRpb24uaWQsXG4gICAgICAgIGtpbmQ6IGRlY2xhcmF0aW9uLm93bmVyc2hpcD8ua2luZCA9PSBcIm93bmVkUmVzb3VyY2VcIiA/IFwiT3duZWRSZWZlcmVuY2VUeXBlXCIgOiBcIlJlZmVyZW5jZVR5cGVcIn1cbiAgICAgIGNvbnN0IHNvdXJjZUFyZ3VtZW50cyA9IG5vZGUudHlwZUFyZ3VtZW50cz8ucGFyYW1zID8/IG5vZGUudHlwZVBhcmFtZXRlcnM/LnBhcmFtc1xuICAgICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHNvdXJjZUFyZ3VtZW50cz8ubWFwKCgvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5UU1R5cGV9ICovIGFyZ3VtZW50KSA9PlxuICAgICAgICBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUoXG4gICAgICAgICAgYXJndW1lbnQsXG4gICAgICAgICAgYFJlY29yZCAnJHtkZWNsYXJhdGlvbi5uYW1lfScgYXBwbGljYXRpb25gLFxuICAgICAgICAgIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgY29udGV4dC5yZWNvcmROYW1lcyxcbiAgICAgICAgICBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzXG4gICAgICAgICkpXG5cbiAgICAgIHJldHVybiB7ZGVjbGFyYXRpb25JZDogZGVjbGFyYXRpb24uaWQsIGtpbmQ6IFwiUmVjb3JkVHlwZVwiLCAuLi4odHlwZUFyZ3VtZW50cyA/IHthcmd1bWVudHM6IHR5cGVBcmd1bWVudHN9IDoge30pfVxuICAgIH1cbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiVGhpc0V4cHJlc3Npb25cIiAmJiBjb250ZXh0LmN1cnJlbnRDbGFzcz8uaWQpIHtcbiAgICByZXR1cm4ge2RlY2xhcmF0aW9uSWQ6IGNvbnRleHQuY3VycmVudENsYXNzLmlkLCBraW5kOiBcIlJlZmVyZW5jZVR5cGVcIn1cbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFub2RlLmNhbGxlZS5jb21wdXRlZCAmJlxuICAgIG5vZGUuY2FsbGVlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJiBub2RlLmNhbGxlZS5wcm9wZXJ0eS50eXBlID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgY29uc3QgcmVjZWl2ZXIgPSBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5jYWxsZWUub2JqZWN0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChyZWNlaXZlcj8ua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIikge1xuICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IG5vZGUuY2FsbGVlLnByb3BlcnR5Lm5hbWVcblxuICAgICAgcmV0dXJuIGNvbnRleHQuY2xhc3Nlcy5nZXQocmVjZWl2ZXIuZGVjbGFyYXRpb25JZCk/Lm1ldGhvZHMuZmluZCgobWV0aG9kKSA9PiBtZXRob2QubmFtZSA9PSBtZXRob2ROYW1lKT8ucmV0dXJuVHlwZVxuICAgIH1cbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFub2RlLmNvbXB1dGVkICYmIG5vZGUub2JqZWN0LnR5cGUgPT0gXCJUaGlzRXhwcmVzc2lvblwiICYmIGNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgaWYgKGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiICYmIG5vZGUucHJvcGVydHkudHlwZSA9PSBcIlByaXZhdGVOYW1lXCIpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBub2RlLnByb3BlcnR5LmlkLm5hbWVcblxuICAgICAgcmV0dXJuIGNvbnRleHQuY3VycmVudENsYXNzLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQubmFtZSA9PSBuYW1lKT8udHlwZVxuICAgIH1cbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgJiYgbm9kZS5wcm9wZXJ0eS50eXBlID09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgICBjb25zdCBuYW1lID0gbm9kZS5wcm9wZXJ0eS5uYW1lXG5cbiAgICAgIHJldHVybiBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbmFtZSk/LnR5cGVcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJiAhbm9kZS5jb21wdXRlZCAmJiBub2RlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJiBub2RlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICBjb25zdCByZWNlaXZlciA9IGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLm9iamVjdCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAocmVjZWl2ZXI/LmtpbmQgIT0gXCJSZWNvcmRUeXBlXCIpIHJldHVybiB1bmRlZmluZWRcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGNvbnRleHQucmVjb3Jkcy5nZXQocmVjZWl2ZXIuZGVjbGFyYXRpb25JZClcbiAgICBjb25zdCBtZW1iZXJOYW1lID0gbm9kZS5wcm9wZXJ0eS5uYW1lXG4gICAgY29uc3QgaW5kZXggPSBkZWNsYXJhdGlvbj8uZmllbGRzLmZpbmRJbmRleCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbWVtYmVyTmFtZSkgPz8gLTFcblxuICAgIHJldHVybiBkZWNsYXJhdGlvbiA/IGluc3RhbnRpYXRlZFJlY29yZEZpZWxkVHlwZShkZWNsYXJhdGlvbiwgcmVjZWl2ZXIuYXJndW1lbnRzLCBpbmRleCkgOiB1bmRlZmluZWRcbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmIG5vZGUuY29tcHV0ZWQgJiYgbm9kZS5vYmplY3QudHlwZSAhPSBcIlN1cGVyXCIpIHtcbiAgICBjb25zdCBjb2xsZWN0aW9uVHlwZSA9IGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLm9iamVjdCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAoY29sbGVjdGlvblR5cGU/LmtpbmQgPT0gXCJMaXN0VHlwZVwiKSByZXR1cm4gY29sbGVjdGlvblR5cGUuZWxlbWVudFR5cGVcbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBub2RlLmNhbGxlZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmXG4gICAgIW5vZGUuY2FsbGVlLmNvbXB1dGVkICYmIG5vZGUuY2FsbGVlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJlxuICAgIG5vZGUuY2FsbGVlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiYgbm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSA9PSBcImdldFwiKSB7XG4gICAgY29uc3QgY29sbGVjdGlvblR5cGUgPSBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5jYWxsZWUub2JqZWN0LCBjb250ZXh0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIiB8fCBjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHJldHVybiBjb2xsZWN0aW9uVHlwZS52YWx1ZVR5cGVcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgdmFsdWUgdHlwZSBwcm9kdWNlZCBieSB0aGUgZnJvbnRlbmQncyBpbXBsaWNpdCBvcHRpb25hbC1iaW5kaW5nIHVud3JhcC5cbiAqIFNlbWFudGljIHZhbGlkYXRpb24gc2VwYXJhdGVseSBwcm92ZXMgdGhhdCB0aGUgdW53cmFwIG9jY3VycyBvbmx5IG9uIGEgcHJlc2VudCBwYXRoLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRXhwcmVzc2lvbn0gbm9kZSAtIFBhcnNlci1vd25lZCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JUeXBlIHwgdW5kZWZpbmVkfSBDb252ZXJ0ZWQgdmFsdWUgdHlwZS5cbiAqL1xuZnVuY3Rpb24ga25vd25WYWx1ZUV4cHJlc3Npb25UeXBlKG5vZGUsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IHR5cGUgPSBrbm93bkV4cHJlc3Npb25UeXBlKG5vZGUsIGNvbnRleHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIHJldHVybiBub2RlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiYgdHlwZT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiID8gdHlwZS52YWx1ZVR5cGUgOiB0eXBlXG59XG5cbi8qKlxuICogUmV0dXJucyBhIHN0YWJsZSBwYXJzZXItYm91bmRlZCBsb2NhdGlvbiBmb3Igb25lIGFic2VudCBhcnJheSBlbGVtZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQXJyYXlFeHByZXNzaW9ufSBub2RlIC0gQXJyYXkgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIE1pc3NpbmcgZWxlbWVudCBpbmRleC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEhvbGUgbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGFycmF5SG9sZUxvY2F0aW9uKG5vZGUsIGluZGV4LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IHByZXZpb3VzID0gbm9kZS5lbGVtZW50cy5zbGljZSgwLCBpbmRleCkuZmluZExhc3QoKGVsZW1lbnQpID0+IGVsZW1lbnQgIT0gbnVsbClcbiAgY29uc3QgbmV4dCA9IG5vZGUuZWxlbWVudHMuc2xpY2UoaW5kZXggKyAxKS5maW5kKChlbGVtZW50KSA9PiBlbGVtZW50ICE9IG51bGwpXG4gIGNvbnN0IHN0YXJ0ID0gcHJldmlvdXM/LmVuZCA/PyAobm9kZS5zdGFydCA/PyAwKSArIDFcbiAgY29uc3QgZW5kID0gbmV4dD8uc3RhcnQgPz8gTWF0aC5tYXgoc3RhcnQgKyAxLCAobm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCkgLSAxKVxuXG4gIHJldHVybiBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIHN0YXJ0LCBNYXRoLm1heChzdGFydCArIDEsIE1hdGgubWluKGVuZCwgc291cmNlLmxlbmd0aCkpKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3VwcG9ydGVkIHJldHVybiBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnR9IG5vZGUgLSBCYWJlbCBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZXR1cm5TdGF0ZW1lbnR9IFNlbWFudGljIHJldHVybi5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJldHVybihub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLnR5cGUgIT0gXCJSZXR1cm5TdGF0ZW1lbnRcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBub2RlLnR5cGUsIGxvY2F0aW9uKVxuXG4gIHJldHVybiB7XG4gICAgLi4uKG5vZGUuYXJndW1lbnQgPyB7ZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oXG4gICAgICBub2RlLmFyZ3VtZW50LFxuICAgICAgbGFuZ3VhZ2UsXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIHNvdXJjZSxcbiAgICAgIGNvbnRleHQsXG4gICAgICBjb250ZXh0LnJldHVyblR5cGU/LmtpbmQgPT0gXCJUeXBlUmVmZXJlbmNlXCIgJiYgY29udGV4dC5yZXR1cm5UeXBlLm5hbWUgPT0gXCJ2b2lkXCIgPyB1bmRlZmluZWQgOiBjb250ZXh0LnJldHVyblR5cGVcbiAgICApfSA6IHt9KSxcbiAgICBraW5kOiBcIlJldHVyblN0YXRlbWVudFwiLFxuICAgIGxvY2F0aW9uXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgc3VwcG9ydGVkIGxvY2FsIGRlY2xhcmF0aW9uIG9yIGFzc2lnbm1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnR9IG5vZGUgLSBCYWJlbCBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Mb2NhbFN0YXRlbWVudCB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50fSBTZW1hbnRpYyBsb2NhbCBvciBwcml2YXRlLWZpZWxkIHN0YXRlbWVudC5cbiAqL1xuZnVuY3Rpb24gY29udmVydExvY2FsU3RhdGVtZW50KG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIikge1xuICAgIGlmICghW1wibGV0XCIsIFwiY29uc3RcIl0uaW5jbHVkZXMobm9kZS5raW5kKSB8fCBub2RlLmRlY2xhcmF0aW9ucy5sZW5ndGggIT0gMSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBgJHtub2RlLmtpbmR9IGRlY2xhcmF0aW9uYCwgbG9jYXRpb24pXG4gICAgfVxuXG4gICAgY29uc3QgZGVjbGFyYXRvciA9IG5vZGUuZGVjbGFyYXRpb25zWzBdXG4gICAgY29uc3QgZGVjbGFyYXRvckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGRlY2xhcmF0b3IsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAoZGVjbGFyYXRvci5pZC50eXBlICE9IFwiSWRlbnRpZmllclwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGRlY2xhcmF0b3IuaWQudHlwZSwgZGVjbGFyYXRvckxvY2F0aW9uKVxuICAgIGlmICghZGVjbGFyYXRvci5pbml0KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidW5pbml0aWFsaXplZCBkZWNsYXJhdGlvblwiLCBkZWNsYXJhdG9yTG9jYXRpb24pXG5cbiAgICBsZXQgdHlwZSA9IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiXG4gICAgICA/IGNvbnZlcnRUeXBlU2NyaXB0VHlwZShkZWNsYXJhdG9yLmlkLnR5cGVBbm5vdGF0aW9uLCBgTG9jYWwgJyR7ZGVjbGFyYXRvci5pZC5uYW1lfSdgLCBkZWNsYXJhdG9yTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgICAgIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG4gICAgICA6IGxvY2FsSmF2YVNjcmlwdFR5cGUobm9kZSwgZGVjbGFyYXRvci5pZC5uYW1lLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuXG4gICAgaWYgKG5vZGUua2luZCA9PSBcImNvbnN0XCIgJiYgdHlwZS5raW5kID09IFwiTWFwVHlwZVwiICYmIGNvbnRleHQub3JkZXJlZE1hcERlY2xhcmF0aW9ucz8uaGFzKGRlY2xhcmF0b3IpICYmXG4gICAgICBkZWNsYXJhdG9yLmluaXQudHlwZSA9PSBcIk5ld0V4cHJlc3Npb25cIiAmJiBkZWNsYXJhdG9yLmluaXQuY2FsbGVlLnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAgIGRlY2xhcmF0b3IuaW5pdC5jYWxsZWUubmFtZSA9PSBcIk1hcFwiICYmIG5hdGl2ZU1hcEF2YWlsYWJsZShjb250ZXh0KSkge1xuICAgICAgdHlwZSA9IG9yZGVyZWRNYXBUeXBlRnJvbU1hcCh0eXBlLCBkZWNsYXJhdG9yTG9jYXRpb24pXG4gICAgfVxuXG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGluaXRpYWxpemVyOiBjb252ZXJ0RXhwcmVzc2lvbihkZWNsYXJhdG9yLmluaXQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCB0eXBlKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkxvY2FsRGVjbGFyYXRpb25cIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG11dGFibGU6IG5vZGUua2luZCA9PSBcImxldFwiLFxuICAgICAgbmFtZTogZGVjbGFyYXRvci5pZC5uYW1lLFxuICAgICAgdHlwZVxuICAgIH0sIHtcbiAgICAgIG5hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihkZWNsYXJhdG9yLmlkLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKGRlY2xhcmF0b3IsIFwiPVwiLCBkZWNsYXJhdG9yLmlkLmVuZCA/PyBkZWNsYXJhdG9yLnN0YXJ0ID8/IDAsIGRlY2xhcmF0b3IuaW5pdC5zdGFydCA/PyBkZWNsYXJhdG9yLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG5cbiAgICBjb250ZXh0LmJpbmRpbmdzLnNldChkZWNsYXJhdG9yLmlkLm5hbWUsIHR5cGUpXG4gICAgcmV0dXJuIHNlbWFudGljXG4gIH1cblxuICBpZiAobm9kZS50eXBlID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiICYmIG5vZGUuZXhwcmVzc2lvbi50eXBlID09IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBub2RlLmV4cHJlc3Npb25cbiAgICBjb25zdCB0YXJnZXRMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihhc3NpZ25tZW50LmxlZnQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAoYXNzaWdubWVudC5vcGVyYXRvciAhPSBcIj1cIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBgYXNzaWdubWVudCAke2Fzc2lnbm1lbnQub3BlcmF0b3J9YCwgbG9jYXRpb24pXG4gICAgaWYgKGFzc2lnbm1lbnQubGVmdC50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFhc3NpZ25tZW50LmxlZnQuY29tcHV0ZWQgJiZcbiAgICAgIGFzc2lnbm1lbnQubGVmdC5vYmplY3QudHlwZSA9PSBcIlRoaXNFeHByZXNzaW9uXCIgJiYgY29udGV4dC5jdXJyZW50Q2xhc3MpIHtcbiAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLklkZW50aWZpZXIgfCB1bmRlZmluZWR9ICovXG4gICAgICBsZXQgcHJvcGVydHlcblxuICAgICAgaWYgKGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiICYmIGFzc2lnbm1lbnQubGVmdC5wcm9wZXJ0eS50eXBlID09IFwiUHJpdmF0ZU5hbWVcIikgcHJvcGVydHkgPSBhc3NpZ25tZW50LmxlZnQucHJvcGVydHkuaWRcbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiAmJiBhc3NpZ25tZW50LmxlZnQucHJvcGVydHkudHlwZSA9PSBcIklkZW50aWZpZXJcIikgcHJvcGVydHkgPSBhc3NpZ25tZW50LmxlZnQucHJvcGVydHlcbiAgICAgIGlmICghcHJvcGVydHkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJub25jYW5vbmljYWwgcHJpdmF0ZSBpbnN0YW5jZSBmaWVsZCBhc3NpZ25tZW50XCIsIGxvY2F0aW9uKVxuICAgICAgY29uc3QgZmllbGQgPSBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBwcm9wZXJ0eS5uYW1lKVxuXG4gICAgICBpZiAoIWZpZWxkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGB1bmtub3duIHByaXZhdGUgZmllbGQgJyR7cHJvcGVydHkubmFtZX0nYCwgaWRlbnRpZmllckxvY2F0aW9uKHByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oYXNzaWdubWVudC5yaWdodCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGZpZWxkLnR5cGUpLFxuICAgICAgICBmaWVsZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChmaWVsZC5pZCksXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50XCIpLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgcmVjZWl2ZXI6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjZWl2ZXJFeHByZXNzaW9ufSAqLyAoXG4gICAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXNzaWdubWVudC5sZWZ0Lm9iamVjdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKVxuICAgICAgfSwge21lbWJlcjogaWRlbnRpZmllckxvY2F0aW9uKHByb3BlcnR5LCBmaWxlbmFtZSwgc291cmNlKSwgb3BlcmF0b3I6IHRva2VuTG9jYXRpb24oYXNzaWdubWVudCwgXCI9XCIsXG4gICAgICAgIGFzc2lnbm1lbnQubGVmdC5lbmQgPz8gYXNzaWdubWVudC5zdGFydCA/PyAwLCBhc3NpZ25tZW50LnJpZ2h0LnN0YXJ0ID8/IGFzc2lnbm1lbnQuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKGFzc2lnbm1lbnQubGVmdC50eXBlICE9IFwiSWRlbnRpZmllclwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGFzc2lnbm1lbnQubGVmdC50eXBlLCB0YXJnZXRMb2NhdGlvbilcblxuICAgIGNvbnN0IHRhcmdldCA9IHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbjogdGFyZ2V0TG9jYXRpb24sIG5hbWU6IGFzc2lnbm1lbnQubGVmdC5uYW1lfSwge1xuICAgICAgbmFtZTogaWRlbnRpZmllckxvY2F0aW9uKGFzc2lnbm1lbnQubGVmdCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuXG4gICAgY29uc3QgYmluZGluZ1R5cGUgPSBjb250ZXh0LmJpbmRpbmdzLmdldChhc3NpZ25tZW50LmxlZnQubmFtZSlcbiAgICBjb25zdCBzZW1hbnRpYyA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oYXNzaWdubWVudC5yaWdodCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsXG4gICAgICAgIGJpbmRpbmdUeXBlPy5raW5kID09IFwiRXJyb3JUeXBlXCIgPyB1bmRlZmluZWQgOiBiaW5kaW5nVHlwZSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJBc3NpZ25tZW50U3RhdGVtZW50XCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICB0YXJnZXRcbiAgICB9LCB7XG4gICAgICBvcGVyYXRvcjogdG9rZW5Mb2NhdGlvbihhc3NpZ25tZW50LCBcIj1cIiwgYXNzaWdubWVudC5sZWZ0LmVuZCA/PyBhc3NpZ25tZW50LnN0YXJ0ID8/IDAsIGFzc2lnbm1lbnQucmlnaHQuc3RhcnQgPz8gYXNzaWdubWVudC5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHNlbWFudGljXG4gIH1cblxuICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIG5vZGUudHlwZSwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogUmVhZHMgYW4gaW1tZWRpYXRlbHkgYXNzb2NpYXRlZCBKYXZhU2NyaXB0IGxvY2FsIGBAdHlwZWAgdGFnLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVmFyaWFibGVEZWNsYXJhdGlvbn0gbm9kZSAtIExvY2FsIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBMb2NhbCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXI+fSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IFNlbWFudGljIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGxvY2FsSmF2YVNjcmlwdFR5cGUobm9kZSwgbmFtZSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGNvbnN0IGNvbW1lbnQgPSBub2RlLmxlYWRpbmdDb21tZW50cz8uYXQoLTEpXG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKCFjb21tZW50IHx8IGNvbW1lbnQudHlwZSAhPSBcIkNvbW1lbnRCbG9ja1wiIHx8ICFjb21tZW50LnZhbHVlLnN0YXJ0c1dpdGgoXCIqXCIpKSB7XG4gICAgcmV0dXJuIG1pc3NpbmdUeXBlKFwiamF2YXNjcmlwdFwiLCBgTG9jYWwgJyR7bmFtZX0nYCwgbG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBnYXAgPSBzb3VyY2Uuc2xpY2UoY29tbWVudC5lbmQgPz8gMCwgbm9kZS5zdGFydCA/PyAwKVxuXG4gIGlmICghL15cXHMqJC91LnRlc3QoZ2FwKSB8fCAoZ2FwLm1hdGNoKC9cXG4vZ3UpPy5sZW5ndGggPz8gMCkgPiAxKSB7XG4gICAgcmV0dXJuIG1pc3NpbmdUeXBlKFwiamF2YXNjcmlwdFwiLCBgTG9jYWwgJyR7bmFtZX0nYCwgbG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBibG9jayA9IHBhcnNlQ29tbWVudChgLyoke2NvbW1lbnQudmFsdWV9Ki9gKVswXVxuICBjb25zdCB0YWdzID0gYmxvY2s/LnRhZ3MuZmlsdGVyKCh0YWcpID0+IHRhZy50YWcgPT0gXCJ0eXBlXCIpID8/IFtdXG5cbiAgY29uc3QgdGFnID0gdGFncy5sZW5ndGggPT0gMSA/IHRhZ3NbMF0gOiB1bmRlZmluZWRcblxuICByZXR1cm4gY29udmVydFR5cGUoXG4gICAgdGFnPy50eXBlLFxuICAgIFwiamF2YXNjcmlwdFwiLFxuICAgIGBMb2NhbCAnJHtuYW1lfSdgLFxuICAgIGxvY2F0aW9uLFxuICAgIHNvdXJjZSxcbiAgICB0YWcgPyBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudCwgdGFnLCBcInR5cGVcIiwgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvbixcbiAgICByZWNvcmROYW1lcyxcbiAgICB0eXBlUGFyYW1ldGVyc1xuICApXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4aGF1c3RpdmUgQmFiZWwgc3RhdGVtZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuU3RhdGVtZW50fSBub2RlIC0gQmFiZWwgc3RhdGVtZW50LlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2Fub25pY2FsWmVyb1JlcXVpcmVkIC0gV2hldGhlciBnZW5lcmF0ZWQgc2NhbGFyIG91dHB1dCBtYXkgY29udGFpbiBzaWduZWQgemVyby5cbiAqIEBwYXJhbSB7SmF2YVNjcmlwdENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RhdGVtZW50fSBTZW1hbnRpYyBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRTdGF0ZW1lbnQobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dCkge1xuICBpZiAobm9kZS50eXBlID09IFwiUmV0dXJuU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0UmV0dXJuKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAobm9kZS50eXBlID09IFwiSWZTdGF0ZW1lbnRcIikgcmV0dXJuIGNvbnZlcnRJZihub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KVxuICBpZiAobm9kZS50eXBlID09IFwiVGhyb3dTdGF0ZW1lbnRcIikgcmV0dXJuIGNvbnZlcnRUeXBlZFRocm93KG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAobm9kZS50eXBlID09IFwiVHJ5U3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0VHlwZWRUcnkobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dClcbiAgaWYgKG5vZGUudHlwZSA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0V2hpbGUobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dClcbiAgaWYgKG5vZGUudHlwZSA9PSBcIkZvck9mU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0Rm9yRWFjaChub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KVxuICBpZiAobm9kZS50eXBlID09IFwiQnJlYWtTdGF0ZW1lbnRcIiB8fCBub2RlLnR5cGUgPT0gXCJDb250aW51ZVN0YXRlbWVudFwiKSB7XG4gICAgaWYgKG5vZGUubGFiZWwpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYGxhYmVsZWQgJHtub2RlLnR5cGUgPT0gXCJCcmVha1N0YXRlbWVudFwiID8gXCJicmVha1wiIDogXCJjb250aW51ZVwifWAsXG4gICAgICBub2RlTG9jYXRpb24obm9kZS5sYWJlbCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3Qga2V5d29yZCA9IG5vZGUudHlwZSA9PSBcIkJyZWFrU3RhdGVtZW50XCIgPyBcImJyZWFrXCIgOiBcImNvbnRpbnVlXCJcbiAgICBjb25zdCBsb2NhdGlvbiA9IHRva2VuTG9jYXRpb24obm9kZSwga2V5d29yZCwgbm9kZS5zdGFydCA/PyAwLCBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IG5vZGUudHlwZSwgbG9jYXRpb259LCB7a2V5d29yZDogbG9jYXRpb259KVxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIgfHwgbm9kZS50eXBlID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiICYmIG5vZGUuZXhwcmVzc2lvbi50eXBlID09IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBjb252ZXJ0TG9jYWxTdGF0ZW1lbnQobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIikge1xuICAgIGlmIChub2RlLmV4cHJlc3Npb24udHlwZSA9PSBcIkNhbGxFeHByZXNzaW9uXCIgJiYgKG5vZGUuZXhwcmVzc2lvbi5jYWxsZWUudHlwZSA9PSBcIklkZW50aWZpZXJcIiB8fFxuICAgICAgbm9kZS5leHByZXNzaW9uLmNhbGxlZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFub2RlLmV4cHJlc3Npb24uY2FsbGVlLmNvbXB1dGVkICYmXG4gICAgICBub2RlLmV4cHJlc3Npb24uY2FsbGVlLm9iamVjdC50eXBlICE9IFwiU3VwZXJcIiAmJlxuICAgICAgW1wiUmVmZXJlbmNlVHlwZVwiLCBcIk93bmVkUmVmZXJlbmNlVHlwZVwiXS5pbmNsdWRlcyhTdHJpbmcoXG4gICAgICAgIGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLmV4cHJlc3Npb24uY2FsbGVlLm9iamVjdCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpPy5raW5kKSkpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBleHByZXNzaW9uOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNhbGxFeHByZXNzaW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTWV0aG9kQ2FsbEV4cHJlc3Npb259ICovIChcbiAgICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24sIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgICAgICApLFxuICAgICAgICBraW5kOiBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIixcbiAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0UHJpbnQobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dClcbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgbm9kZS50eXBlLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG59XG5cbi8qKlxuICogQ29udmVydHMgZXhhY3QgYHRocm93IG5ldyBEZWNsYXJlZEVycm9yKG1lc3NhZ2UpYC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlRocm93U3RhdGVtZW50fSBub2RlIC0gQmFiZWwgdGhyb3cgc3RhdGVtZW50LlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YVNjcmlwdENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJhaXNlU3RhdGVtZW50fSBTZW1hbnRpYyByYWlzZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGVkVGhyb3cobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYXJndW1lbnQgPSBub2RlLmFyZ3VtZW50XG5cbiAgaWYgKCFhcmd1bWVudCB8fCBhcmd1bWVudC50eXBlICE9IFwiTmV3RXhwcmVzc2lvblwiIHx8IGFyZ3VtZW50LmNhbGxlZS50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8XG4gICAgY29udGV4dC5iaW5kaW5ncy5oYXMoYXJndW1lbnQuY2FsbGVlLm5hbWUpIHx8ICFjb250ZXh0LmVycm9yTmFtZXMuaGFzKGFyZ3VtZW50LmNhbGxlZS5uYW1lKSB8fCBhcmd1bWVudC5hcmd1bWVudHMubGVuZ3RoICE9IDEgfHxcbiAgICBhcmd1bWVudC5hcmd1bWVudHNbMF0udHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIiB8fCBhcmd1bWVudC5hcmd1bWVudHNbMF0udHlwZSA9PSBcIkFyZ3VtZW50UGxhY2Vob2xkZXJcIiB8fFxuICAgIGFyZ3VtZW50LnR5cGVBcmd1bWVudHMgfHwgYXJndW1lbnQudHlwZVBhcmFtZXRlcnMpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidGhyb3cgb3RoZXIgdGhhbiBleGFjdCBkZWNsYXJlZCBlcnJvciBjb25zdHJ1Y3Rpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259ICovIChjb250ZXh0LmVycm9yTmFtZXMuZ2V0KGFyZ3VtZW50LmNhbGxlZS5uYW1lKSlcbiAgY29uc3QgdHlwZUxvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKGFyZ3VtZW50LmNhbGxlZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgZXJyb3I6IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZXJyb3I6IHdpdGhQYXJzZXJSYW5nZXMoe2RlY2xhcmF0aW9uSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvclR5cGVcIil9LCB7dHlwZTogdHlwZUxvY2F0aW9ufSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvckNvbnN0cnVjdGlvblwiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbWVzc2FnZTogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQuYXJndW1lbnRzWzBdLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9LCB7dHlwZTogdHlwZUxvY2F0aW9ufSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmFpc2VTdGF0ZW1lbnRcIiksXG4gICAgbG9jYXRpb25cbiAgfSwge2tleXdvcmQ6IHRva2VuTG9jYXRpb24obm9kZSwgXCJ0aHJvd1wiLCBub2RlLnN0YXJ0ID8/IDAsIGFyZ3VtZW50LnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgY2F0Y2ggd2l0aCB0aGUgY2Fub25pY2FsIGBpbnN0YW5jZW9mYCBndWFyZCBhbmQgZXhhY3QgcmV0aHJvdy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlRyeVN0YXRlbWVudH0gbm9kZSAtIEJhYmVsIHRyeSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBjYW5vbmljYWxaZXJvUmVxdWlyZWQgLSBXaGV0aGVyIHNjYWxhciBvdXRwdXQgY2Fub25pY2FsaXplcyB6ZXJvLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHJ5U3RhdGVtZW50fSBTZW1hbnRpYyBleGFjdCBoYW5kbGVyLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHlwZWRUcnkobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLmZpbmFsaXplciB8fCAhbm9kZS5oYW5kbGVyIHx8IG5vZGUuaGFuZGxlci5wYXJhbT8udHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBub2RlLmhhbmRsZXIuYm9keS5kaXJlY3RpdmVzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidHJ5IHdpdGhvdXQgb25lIGV4cGxpY2l0IGd1YXJkZWQgY2F0Y2hcIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgYmluZGluZyA9IG5vZGUuaGFuZGxlci5wYXJhbVxuICBjb25zdCBndWFyZCA9IG5vZGUuaGFuZGxlci5ib2R5LmJvZHlbMF1cblxuICBpZiAoIWd1YXJkIHx8IGd1YXJkLnR5cGUgIT0gXCJJZlN0YXRlbWVudFwiIHx8IGd1YXJkLmFsdGVybmF0ZSB8fCBndWFyZC50ZXN0LnR5cGUgIT0gXCJVbmFyeUV4cHJlc3Npb25cIiB8fFxuICAgIGd1YXJkLnRlc3Qub3BlcmF0b3IgIT0gXCIhXCIgfHwgZ3VhcmQudGVzdC5hcmd1bWVudC50eXBlICE9IFwiQmluYXJ5RXhwcmVzc2lvblwiIHx8IGd1YXJkLnRlc3QuYXJndW1lbnQub3BlcmF0b3IgIT0gXCJpbnN0YW5jZW9mXCIgfHxcbiAgICBndWFyZC50ZXN0LmFyZ3VtZW50LmxlZnQudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBndWFyZC50ZXN0LmFyZ3VtZW50LmxlZnQubmFtZSAhPSBiaW5kaW5nLm5hbWUgfHxcbiAgICBndWFyZC50ZXN0LmFyZ3VtZW50LnJpZ2h0LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgZ3VhcmQudGVzdC5hcmd1bWVudC5yaWdodC5uYW1lID09IGJpbmRpbmcubmFtZSB8fFxuICAgIGNvbnRleHQuYmluZGluZ3MuaGFzKGd1YXJkLnRlc3QuYXJndW1lbnQucmlnaHQubmFtZSkgfHwgIWNvbnRleHQuZXJyb3JOYW1lcy5oYXMoZ3VhcmQudGVzdC5hcmd1bWVudC5yaWdodC5uYW1lKSB8fFxuICAgIGd1YXJkLmNvbnNlcXVlbnQudHlwZSAhPSBcIkJsb2NrU3RhdGVtZW50XCIgfHwgZ3VhcmQuY29uc2VxdWVudC5ib2R5Lmxlbmd0aCAhPSAxIHx8IGd1YXJkLmNvbnNlcXVlbnQuZGlyZWN0aXZlcy5sZW5ndGggPiAwIHx8XG4gICAgZ3VhcmQuY29uc2VxdWVudC5ib2R5WzBdLnR5cGUgIT0gXCJUaHJvd1N0YXRlbWVudFwiIHx8IGd1YXJkLmNvbnNlcXVlbnQuYm9keVswXS5hcmd1bWVudD8udHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fFxuICAgIGd1YXJkLmNvbnNlcXVlbnQuYm9keVswXS5hcmd1bWVudC5uYW1lICE9IGJpbmRpbmcubmFtZSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJjYXRjaCB3aXRob3V0IGV4YWN0IGluc3RhbmNlb2YgZ3VhcmQgYW5kIHVubWF0Y2hlZCByZXRocm93XCIsIG5vZGVMb2NhdGlvbihndWFyZCA/PyBub2RlLmhhbmRsZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSAqLyAoY29udGV4dC5lcnJvck5hbWVzLmdldChndWFyZC50ZXN0LmFyZ3VtZW50LnJpZ2h0Lm5hbWUpKVxuICBjb25zdCBjYXVnaHRUeXBlTG9jYXRpb24gPSBpZGVudGlmaWVyTG9jYXRpb24oZ3VhcmQudGVzdC5hcmd1bWVudC5yaWdodCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY2F0Y2hUeXBlID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgZGVjbGFyYXRpb25JZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JUeXBlXCIpXG4gIH0sIHt0eXBlOiBjYXVnaHRUeXBlTG9jYXRpb259KVxuICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cbiAgY29uc3QgY2F0Y2hDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpfVxuXG4gIGNhdGNoQ29udGV4dC5iaW5kaW5ncy5zZXQoYmluZGluZy5uYW1lLCBjYXRjaFR5cGUpXG4gIGNvbnN0IGNhdGNoU3RhdGVtZW50cyA9IG5vZGUuaGFuZGxlci5ib2R5LmJvZHkuc2xpY2UoMSlcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKG5vZGUuYmxvY2ssIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGJvZHlDb250ZXh0KSxcbiAgICBjYXRjaEJpbmRpbmc6IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2F0Y2hCaW5kaW5nXCIpLFxuICAgICAgbG9jYXRpb246IGlkZW50aWZpZXJMb2NhdGlvbihiaW5kaW5nLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgICBuYW1lOiBiaW5kaW5nLm5hbWUsXG4gICAgICB0eXBlOiBjYXRjaFR5cGVcbiAgICB9LCB7bmFtZTogaWRlbnRpZmllckxvY2F0aW9uKGJpbmRpbmcsIGZpbGVuYW1lLCBzb3VyY2UpfSksXG4gICAgY2F0Y2hCb2R5OiBjb252ZXJ0QmxvY2soY2F0Y2hTdGF0ZW1lbnRzLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjYXRjaENvbnRleHQsXG4gICAgICBub2RlTG9jYXRpb24obm9kZS5oYW5kbGVyLmJvZHksIGZpbGVuYW1lLCBzb3VyY2UpKSxcbiAgICBjYXRjaFR5cGUsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHJ5U3RhdGVtZW50XCIpLFxuICAgIGxvY2F0aW9uXG4gIH0sIHtcbiAgICBjYXRjaDogdG9rZW5Mb2NhdGlvbihub2RlLmhhbmRsZXIsIFwiY2F0Y2hcIiwgbm9kZS5oYW5kbGVyLnN0YXJ0ID8/IDAsIGJpbmRpbmcuc3RhcnQgPz8gbm9kZS5oYW5kbGVyLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBndWFyZDogbm9kZUxvY2F0aW9uKGd1YXJkLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICB0cnk6IHRva2VuTG9jYXRpb24obm9kZSwgXCJ0cnlcIiwgbm9kZS5zdGFydCA/PyAwLCBub2RlLmJsb2NrLnN0YXJ0ID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIH0pXG59XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGV4YWN0IGJsb2NrLWJvZGllZCBgZm9yIChjb25zdCB2YWx1ZSBvZiBsaXN0KWAgcHJvZmlsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkZvck9mU3RhdGVtZW50fSBub2RlIC0gQmFiZWwgZm9yLW9mIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNhbm9uaWNhbFplcm9SZXF1aXJlZCAtIFdoZXRoZXIgc2NhbGFyIG91dHB1dCBjYW5vbmljYWxpemVzIHplcm8uXG4gKiBAcGFyYW0ge0phdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZvckVhY2hTdGF0ZW1lbnQgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoTWFwU3RhdGVtZW50fSBTZW1hbnRpYyBsb29wLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0Rm9yRWFjaChub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUuYXdhaXQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJhc3luYyBmb3Itb2ZcIiwgbG9jYXRpb24pXG4gIGlmIChub2RlLmxlZnQudHlwZSAhPSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImZvci1vZiBhc3NpZ25tZW50IGJpbmRpbmdcIiwgbm9kZUxvY2F0aW9uKG5vZGUubGVmdCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGlmIChub2RlLmxlZnQua2luZCAhPSBcImNvbnN0XCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGAke25vZGUubGVmdC5raW5kfSBpdGVyYXRpb24gYmluZGluZ2AsIHRva2VuTG9jYXRpb24oXG4gICAgICBub2RlLmxlZnQsXG4gICAgICBub2RlLmxlZnQua2luZCxcbiAgICAgIG5vZGUubGVmdC5zdGFydCA/PyBub2RlLnN0YXJ0ID8/IDAsXG4gICAgICBub2RlLmxlZnQuZW5kID8/IG5vZGUuZW5kID8/IHNvdXJjZS5sZW5ndGgsXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIHNvdXJjZVxuICAgICkpXG4gIH1cbiAgaWYgKG5vZGUubGVmdC5kZWNsYXJhdGlvbnMubGVuZ3RoICE9IDEpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJtdWx0aXBsZSBpdGVyYXRpb24gYmluZGluZ3NcIiwgbm9kZUxvY2F0aW9uKG5vZGUubGVmdCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGRlY2xhcmF0b3IgPSBub2RlLmxlZnQuZGVjbGFyYXRpb25zWzBdXG5cbiAgaWYgKGRlY2xhcmF0b3IuaWQudHlwZSA9PSBcIkFycmF5UGF0dGVyblwiKSB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gZGVjbGFyYXRvci5pZC5lbGVtZW50c1xuXG4gICAgaWYgKGRlY2xhcmF0b3IuaWQuZWxlbWVudHMubGVuZ3RoICE9IDIgfHwgIWtleSB8fCAhdmFsdWUgfHwga2V5LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgdmFsdWUudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fFxuICAgICAgZGVjbGFyYXRvci5pZC50eXBlQW5ub3RhdGlvbiB8fCBrZXkudHlwZUFubm90YXRpb24gfHwgdmFsdWUudHlwZUFubm90YXRpb24gfHwga2V5Lm9wdGlvbmFsIHx8IHZhbHVlLm9wdGlvbmFsKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibWFwIGl0ZXJhdGlvbiBiaW5kaW5nIHNoYXBlXCIsIG5vZGVMb2NhdGlvbihkZWNsYXJhdG9yLmlkLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgaWYgKGRlY2xhcmF0b3IuaW5pdCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImluaXRpYWxpemVkIGl0ZXJhdGlvbiBiaW5kaW5nXCIsIG5vZGVMb2NhdGlvbihkZWNsYXJhdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBpZiAobm9kZS5ib2R5LnR5cGUgIT0gXCJCbG9ja1N0YXRlbWVudFwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiZm9yLW9mIHdpdGhvdXQgYmxvY2sgYm9keVwiLCBub2RlTG9jYXRpb24obm9kZS5ib2R5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBjb25zdCBjb2xsZWN0aW9uVHlwZSA9IGl0ZXJhdGlvbk9wZXJhbmRUeXBlKGtub3duRXhwcmVzc2lvblR5cGUobm9kZS5yaWdodCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gICAgaWYgKGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiTWFwVHlwZVwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwidW5vcmRlcmVkIG1hcCBpdGVyYXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUucmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBpZiAoIWNvbGxlY3Rpb25UeXBlIHx8IGNvbGxlY3Rpb25UeXBlLmtpbmQgIT0gXCJPcmRlcmVkTWFwVHlwZVwiKSB7XG4gICAgICByZXR1cm4gbWlzc2luZ1R5cGUobGFuZ3VhZ2UsIFwiT3JkZXJlZCBtYXAgaXRlcmF0aW9uIGNvbGxlY3Rpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUucmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCBrZXlMb2NhdGlvbiA9IGlkZW50aWZpZXJMb2NhdGlvbihrZXksIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgdmFsdWVMb2NhdGlvbiA9IGlkZW50aWZpZXJMb2NhdGlvbih2YWx1ZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBrZXlUeXBlID0gaXRlcmF0aW9uQmluZGluZ1R5cGUoY29sbGVjdGlvblR5cGUua2V5VHlwZSwga2V5TG9jYXRpb24pXG4gICAgY29uc3QgdmFsdWVUeXBlID0gaXRlcmF0aW9uQmluZGluZ1R5cGUoY29sbGVjdGlvblR5cGUudmFsdWVUeXBlLCB2YWx1ZUxvY2F0aW9uKVxuICAgIGNvbnN0IGtleUJpbmRpbmcgPSB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlZhbHVlQmluZGluZ1wiKSwgbG9jYXRpb246IGtleUxvY2F0aW9uLCBtdXRhYmxlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpLFxuICAgICAgbmFtZToga2V5Lm5hbWUsIHR5cGU6IGtleVR5cGVcbiAgICB9LCB7bmFtZToga2V5TG9jYXRpb259KVxuICAgIGNvbnN0IHZhbHVlQmluZGluZyA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVmFsdWVCaW5kaW5nXCIpLCBsb2NhdGlvbjogdmFsdWVMb2NhdGlvbiwgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICAgIG5hbWU6IHZhbHVlLm5hbWUsIHR5cGU6IHZhbHVlVHlwZVxuICAgIH0sIHtuYW1lOiB2YWx1ZUxvY2F0aW9ufSlcbiAgICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cblxuICAgIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldChrZXkubmFtZSwga2V5VHlwZSlcbiAgICBib2R5Q29udGV4dC5iaW5kaW5ncy5zZXQodmFsdWUubmFtZSwgdmFsdWVUeXBlKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGJvZHk6IGNvbnZlcnRCbG9jayhub2RlLmJvZHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGJvZHlDb250ZXh0KSxcbiAgICAgIGtleUJpbmRpbmcsXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBtYXA6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmlnaHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIHZhbHVlQmluZGluZ1xuICAgIH0sIHtcbiAgICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKG5vZGUsIFwib2ZcIiwgbm9kZS5sZWZ0LmVuZCA/PyBub2RlLnN0YXJ0ID8/IDAsIG5vZGUucmlnaHQuc3RhcnQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCxcbiAgICAgICAgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuICB9XG4gIGlmIChkZWNsYXJhdG9yLmlkLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgZGVjbGFyYXRvci5pZC50eXBlLCBub2RlTG9jYXRpb24oZGVjbGFyYXRvci5pZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGlmIChkZWNsYXJhdG9yLmluaXQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJpbml0aWFsaXplZCBpdGVyYXRpb24gYmluZGluZ1wiLCBub2RlTG9jYXRpb24oZGVjbGFyYXRvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGlmIChub2RlLmJvZHkudHlwZSAhPSBcIkJsb2NrU3RhdGVtZW50XCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJmb3Itb2Ygd2l0aG91dCBibG9jayBib2R5XCIsIG5vZGVMb2NhdGlvbihub2RlLmJvZHksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCBjb2xsZWN0aW9uVHlwZSA9IGl0ZXJhdGlvbk9wZXJhbmRUeXBlKGtub3duRXhwcmVzc2lvblR5cGUobm9kZS5yaWdodCwgY29udGV4dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gIGlmIChjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIiB8fCBjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibWFwIGl0ZXJhdGlvbiB3aXRob3V0IGtleS92YWx1ZSBwYWlyIGJpbmRpbmdcIiwgbm9kZUxvY2F0aW9uKG5vZGUucmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGlmICghY29sbGVjdGlvblR5cGUgfHwgY29sbGVjdGlvblR5cGUua2luZCAhPSBcIkxpc3RUeXBlXCIpIHtcbiAgICByZXR1cm4gbWlzc2luZ1R5cGUobGFuZ3VhZ2UsIFwiSXRlcmF0aW9uIGNvbGxlY3Rpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUucmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGJpbmRpbmdMb2NhdGlvbiA9IGlkZW50aWZpZXJMb2NhdGlvbihkZWNsYXJhdG9yLmlkLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBpbmZlcnJlZFR5cGUgPSBjb2xsZWN0aW9uVHlwZS5lbGVtZW50VHlwZVxuICBjb25zdCBiaW5kaW5nVHlwZSA9IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiICYmIGRlY2xhcmF0b3IuaWQudHlwZUFubm90YXRpb25cbiAgICA/IGNvbnZlcnRUeXBlU2NyaXB0VHlwZShkZWNsYXJhdG9yLmlkLnR5cGVBbm5vdGF0aW9uLCBgSXRlcmF0aW9uIGJpbmRpbmcgJyR7ZGVjbGFyYXRvci5pZC5uYW1lfSdgLCBiaW5kaW5nTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgICBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuICAgIDogaXRlcmF0aW9uQmluZGluZ1R5cGUoaW5mZXJyZWRUeXBlLCBiaW5kaW5nTG9jYXRpb24pXG4gIGNvbnN0IHZhbHVlQmluZGluZyA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlZhbHVlQmluZGluZ1wiKSxcbiAgICBsb2NhdGlvbjogYmluZGluZ0xvY2F0aW9uLFxuICAgIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgbmFtZTogZGVjbGFyYXRvci5pZC5uYW1lLFxuICAgIHR5cGU6IGJpbmRpbmdUeXBlXG4gIH0sIHtuYW1lOiBiaW5kaW5nTG9jYXRpb259KVxuICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cblxuICBib2R5Q29udGV4dC5iaW5kaW5ncy5zZXQoZGVjbGFyYXRvci5pZC5uYW1lLCBiaW5kaW5nVHlwZSlcbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGJvZHk6IGNvbnZlcnRCbG9jayhub2RlLmJvZHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGJvZHlDb250ZXh0KSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJGb3JFYWNoU3RhdGVtZW50XCIpLFxuICAgIGxpc3Q6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmlnaHQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICBsb2NhdGlvbixcbiAgICB2YWx1ZUJpbmRpbmdcbiAgfSwge1xuICAgIG9wZXJhdG9yOiB0b2tlbkxvY2F0aW9uKG5vZGUsIFwib2ZcIiwgbm9kZS5sZWZ0LmVuZCA/PyBub2RlLnN0YXJ0ID8/IDAsIG5vZGUucmlnaHQuc3RhcnQgPz8gbm9kZS5lbmQgPz8gc291cmNlLmxlbmd0aCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgQmFiZWwgYmxvY2sgb3Igbm9ybWFsaXplZCBzaW5nbGUtc3RhdGVtZW50IGJvZHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5CbG9ja1N0YXRlbWVudCB8IGltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnRbXX0gaW5wdXQgLSBQYXJzZXIgYmxvY2sgb3Igc3RhdGVtZW50cy5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNhbm9uaWNhbFplcm9SZXF1aXJlZCAtIFdoZXRoZXIgZ2VuZXJhdGVkIHNjYWxhciBvdXRwdXQgbWF5IGNvbnRhaW4gc2lnbmVkIHplcm8uXG4gKiBAcGFyYW0ge0phdmFTY3JpcHRDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gW2xvY2F0aW9uXSAtIExvY2F0aW9uIGZvciBhIHN0YXRlbWVudC1hcnJheSBibG9jay5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gU2VtYW50aWMgYmxvY2suXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRCbG9jayhpbnB1dCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dCwgbG9jYXRpb24pIHtcbiAgY29uc3Qgc3RhdGVtZW50cyA9IEFycmF5LmlzQXJyYXkoaW5wdXQpID8gaW5wdXQgOiBpbnB1dC5ib2R5XG4gIGNvbnN0IGRpcmVjdGl2ZXMgPSBBcnJheS5pc0FycmF5KGlucHV0KSA/IFtdIDogaW5wdXQuZGlyZWN0aXZlc1xuICBjb25zdCBibG9ja0xvY2F0aW9uID0gbG9jYXRpb24gPz8gbm9kZUxvY2F0aW9uKC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkJsb2NrU3RhdGVtZW50fSAqLyAoaW5wdXQpLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBsZXhpY2FsVmFsdWVOYW1lcyA9IG5ldyBTZXQoY29udGV4dC5sZXhpY2FsVmFsdWVOYW1lcylcblxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgaWYgKHN0YXRlbWVudC50eXBlICE9IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiKSBjb250aW51ZVxuICAgIGZvciAoY29uc3QgZGVjbGFyYXRvciBvZiBzdGF0ZW1lbnQuZGVjbGFyYXRpb25zKSB7XG4gICAgICBpZiAoZGVjbGFyYXRvci5pZC50eXBlID09IFwiSWRlbnRpZmllclwiKSBsZXhpY2FsVmFsdWVOYW1lcy5hZGQoZGVjbGFyYXRvci5pZC5uYW1lKVxuICAgIH1cbiAgfVxuICBjb25zdCBibG9ja0NvbnRleHQgPSB7Li4uY29udGV4dCwgbGV4aWNhbFZhbHVlTmFtZXN9XG5cbiAgaWYgKGRpcmVjdGl2ZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJkaXJlY3RpdmVcIiwgbm9kZUxvY2F0aW9uKGRpcmVjdGl2ZXNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBraW5kOiBcIkJsb2NrXCIsXG4gICAgbG9jYXRpb246IGJsb2NrTG9jYXRpb24sXG4gICAgc3RhdGVtZW50czogc3RhdGVtZW50cy5tYXAoKHN0YXRlbWVudCkgPT4gY29udmVydFN0YXRlbWVudChzdGF0ZW1lbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGJsb2NrQ29udGV4dCkpXG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkcyBKYXZhU2NyaXB0IEpTRG9jIHR5cGVzIGZyb20gYSBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb259IG5vZGUgLSBCYWJlbCBmdW5jdGlvbiBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3duZXJJZF0gLSBTdGFibGUgZGVjbGFyYXRpb24gaWRlbnRpdHkgZm9yIHR5cGUtcGFyYW1ldGVyIElEcy5cbiAqIEByZXR1cm5zIHt7cGFyYW1ldGVyczogTWFwPHN0cmluZywge2xvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgc291cmNlVHlwZTogc3RyaW5nfT4sIHJldHVyblR5cGU6IHtsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNvdXJjZVR5cGU6IHN0cmluZ30gfCB1bmRlZmluZWQsIHR5cGVQYXJhbWV0ZXJzPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcltdfX0gUGFyc2VkIHR5cGVzLlxuICovXG5mdW5jdGlvbiBqc2RvY1R5cGVzKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIG93bmVySWQpIHtcbiAgY29uc3QgY29tbWVudCA9IG5vZGUubGVhZGluZ0NvbW1lbnRzPy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS50eXBlID09IFwiQ29tbWVudEJsb2NrXCIgJiYgY2FuZGlkYXRlLnZhbHVlLnN0YXJ0c1dpdGgoXCIqXCIpKVxuXG4gIGlmICghY29tbWVudCkgbWlzc2luZ1R5cGUoXCJqYXZhc2NyaXB0XCIsIGBGdW5jdGlvbiAnJHtub2RlLmlkPy5uYW1lID8/IFwiYW5vbnltb3VzXCJ9J2AsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcblxuICBjb25zdCBjb21tZW50QmxvY2sgPSAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Db21tZW50QmxvY2t9ICovIChjb21tZW50KVxuICBjb25zdCBibG9jayA9IHBhcnNlQ29tbWVudChgLyoke2NvbW1lbnRCbG9jay52YWx1ZX0qL2ApWzBdXG4gIGNvbnN0IHBhcmFtZXRlclRhZ3MgPSBibG9jay50YWdzLmZpbHRlcigodGFnKSA9PiB0YWcudGFnID09IFwicGFyYW1cIilcbiAgY29uc3QgcmV0dXJuVGFncyA9IGJsb2NrLnRhZ3MuZmlsdGVyKCh0YWcpID0+IHRhZy50YWcgPT0gXCJyZXR1cm5zXCIgfHwgdGFnLnRhZyA9PSBcInJldHVyblwiKVxuICBjb25zdCB0eXBlUGFyYW1ldGVycyA9IGpzZG9jVHlwZVBhcmFtZXRlcnMoY29tbWVudEJsb2NrLCBibG9jay50YWdzLCBvd25lcklkLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChuZXcgU2V0KHBhcmFtZXRlclRhZ3MubWFwKCh0YWcpID0+IHRhZy5uYW1lKSkuc2l6ZSAhPSBwYXJhbWV0ZXJUYWdzLmxlbmd0aCkge1xuICAgIGNvbnN0IGR1cGxpY2F0ZSA9IHBhcmFtZXRlclRhZ3MuZmluZCgodGFnLCBpbmRleCkgPT4gcGFyYW1ldGVyVGFncy5maW5kSW5kZXgoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT0gdGFnLm5hbWUpICE9IGluZGV4KVxuXG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcImR1cGxpY2F0ZSBAcGFyYW0gYW5ub3RhdGlvblwiLCBkdXBsaWNhdGVcbiAgICAgID8gY29tbWVudFRhZ0xvY2F0aW9uKGNvbW1lbnRCbG9jaywgZHVwbGljYXRlLCBcIm5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIDogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGlmIChyZXR1cm5UYWdzLmxlbmd0aCA+IDEpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwiZHVwbGljYXRlIEByZXR1cm4gYW5ub3RhdGlvblwiLFxuICAgICAgY29tbWVudFRhZ0xvY2F0aW9uKGNvbW1lbnRCbG9jaywgcmV0dXJuVGFnc1sxXSwgXCJ0eXBlXCIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBuZXcgTWFwKHBhcmFtZXRlclRhZ3MubWFwKCh0YWcpID0+IFt0YWcubmFtZSwge1xuICAgIGxvY2F0aW9uOiBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudEJsb2NrLCB0YWcsIFwidHlwZVwiLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBzb3VyY2VUeXBlOiB0YWcudHlwZVxuICB9XSkpXG4gIGNvbnN0IHJldHVyblRhZyA9IHJldHVyblRhZ3NbMF1cblxuICByZXR1cm4ge1xuICAgIHBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogcmV0dXJuVGFnID8ge2xvY2F0aW9uOiBjb21tZW50VGFnTG9jYXRpb24oY29tbWVudEJsb2NrLCByZXR1cm5UYWcsIFwidHlwZVwiLCBmaWxlbmFtZSwgc291cmNlKSwgc291cmNlVHlwZTogcmV0dXJuVGFnLnR5cGV9IDogdW5kZWZpbmVkLFxuICAgIC4uLih0eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgfVxufVxuXG4vKipcbiAqIFJlYWRzIGV4YWN0IHVuYm91bmRlZCBpbnZhcmlhbnQgYEB0ZW1wbGF0ZSBOYW1lYCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Db21tZW50QmxvY2t9IGNvbW1lbnQgLSBQYXJzZXItb3duZWQgSlNEb2MgYmxvY2suXG4gKiBAcGFyYW0ge2ltcG9ydChcImNvbW1lbnQtcGFyc2VyXCIpLlNwZWNbXX0gdGFncyAtIFBhcnNlZCB0YWdzLlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IG93bmVySWQgLSBTdGFibGUgZGVjbGFyYXRpb24gaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXJbXSB8IHVuZGVmaW5lZH0gT3JkZXJlZCBwYXJhbWV0ZXJzIHdoZW4gcHJlc2VudC5cbiAqL1xuZnVuY3Rpb24ganNkb2NUeXBlUGFyYW1ldGVycyhjb21tZW50LCB0YWdzLCBvd25lcklkLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IG1hbGZvcm1lZCA9IHRhZ3MuZmluZCgodGFnKSA9PiB0YWcudGFnLnN0YXJ0c1dpdGgoXCJ0ZW1wbGF0ZVwiKSAmJiB0YWcudGFnICE9IFwidGVtcGxhdGVcIilcblxuICBpZiAobWFsZm9ybWVkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwidW5zdXBwb3J0ZWQgdHlwZSBwYXJhbWV0ZXIgdmFyaWFuY2VcIiwgY29tbWVudFRhZ0xvY2F0aW9uKGNvbW1lbnQsIG1hbGZvcm1lZCwgXCJuYW1lXCIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCB0ZW1wbGF0ZVRhZ3MgPSB0YWdzLmZpbHRlcigodGFnKSA9PiB0YWcudGFnID09IFwidGVtcGxhdGVcIilcblxuICBpZiAodGVtcGxhdGVUYWdzLmxlbmd0aCA9PSAwKSByZXR1cm4gdW5kZWZpbmVkXG4gIGlmICghb3duZXJJZCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcInR5cGUgcGFyYW1ldGVyIG91dHNpZGUgYSBkZWNsYXJhdGlvblwiLFxuICAgIG5vZGVMb2NhdGlvbigvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlfSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoY29tbWVudCkpLCBmaWxlbmFtZSwgc291cmNlKSlcblxuICByZXR1cm4gdGVtcGxhdGVUYWdzLm1hcCgodGFnLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGxvY2F0aW9uID0gY29tbWVudFRhZ0xvY2F0aW9uKGNvbW1lbnQsIHRhZywgXCJuYW1lXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAoIS9eW0EtWmEtel8kXVtBLVphLXowLTlfJF0qJC91LnRlc3QodGFnLm5hbWUpIHx8IHRhZy50eXBlIHx8IHRhZy5kZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcImJvdW5kZWQsIGRlZmF1bHRlZCwgb3IgbWFsZm9ybWVkIHR5cGUgcGFyYW1ldGVyXCIsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtpZDogYCR7b3duZXJJZH06dHlwZToke2luZGV4fWAsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlR5cGVQYXJhbWV0ZXJcIiksIGxvY2F0aW9uLCBuYW1lOiB0YWcubmFtZX0sIHtuYW1lOiBsb2NhdGlvbn0pXG4gIH0pXG59XG5cbi8qKlxuICogUmVhZHMgYW4gb3B0aW9uYWwgY2xhc3MtbGV2ZWwgSlNEb2MgdGVtcGxhdGUgYmxvY2suXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBub2RlIC0gQ2xhc3MgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gb3duZXJJZCAtIFJlY29yZCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcltdIHwgdW5kZWZpbmVkfSBPcmRlcmVkIHBhcmFtZXRlcnMuXG4gKi9cbmZ1bmN0aW9uIGNsYXNzSnNkb2NUeXBlUGFyYW1ldGVycyhub2RlLCBvd25lcklkLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGNvbW1lbnQgPSAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Db21tZW50QmxvY2sgfCB1bmRlZmluZWR9ICovIChcbiAgICBub2RlLmxlYWRpbmdDb21tZW50cz8uZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUudHlwZSA9PSBcIkNvbW1lbnRCbG9ja1wiICYmIGNhbmRpZGF0ZS52YWx1ZS5zdGFydHNXaXRoKFwiKlwiKSkpXG5cbiAgaWYgKCFjb21tZW50KSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IGJsb2NrID0gcGFyc2VDb21tZW50KGAvKiR7Y29tbWVudC52YWx1ZX0qL2ApWzBdXG5cbiAgcmV0dXJuIGpzZG9jVHlwZVBhcmFtZXRlcnMoY29tbWVudCwgYmxvY2sudGFncywgb3duZXJJZCwgZmlsZW5hbWUsIHNvdXJjZSlcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhIHN1cHBvcnRlZCBKYXZhU2NyaXB0IEpTRG9jIHNjYWxhciB0eXBlIHNwZWxsaW5nLlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IHNvdXJjZVR5cGUgLSBTb3VyY2UtbGFuZ3VhZ2UgdHlwZS5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IFt0eXBlTG9jYXRpb25dIC0gRXhhY3QgdHlwZSB0b2tlbiBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gU2VtYW50aWMgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGUoc291cmNlVHlwZSwgbGFuZ3VhZ2UsIHN1YmplY3QsIGxvY2F0aW9uLCBzb3VyY2UsIHR5cGVMb2NhdGlvbiA9IGxvY2F0aW9uLCByZWNvcmROYW1lcyA9IG5ldyBNYXAoKSwgdHlwZVBhcmFtZXRlcnMgPSBuZXcgTWFwKCkpIHtcbiAgaWYgKGxhbmd1YWdlICE9IFwiamF2YXNjcmlwdFwiKSByZXR1cm4gcmVxdWlyZVNvdXJjZVNjYWxhclR5cGUobGFuZ3VhZ2UsIHNvdXJjZVR5cGUsIHN1YmplY3QsIGxvY2F0aW9uLCB0eXBlTG9jYXRpb24pXG5cbiAgcmV0dXJuIGRvY3VtZW50ZWRWYWx1ZVR5cGUoe2xhbmd1YWdlLCBsb2NhdGlvbjogdHlwZUxvY2F0aW9uLCBvd25lckxvY2F0aW9uOiBsb2NhdGlvbiwgcmVjb3JkczogcmVjb3JkTmFtZXMsIHNvdXJjZSwgc291cmNlVHlwZSwgc3ViamVjdCwgdHlwZVBhcmFtZXRlcnN9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBKYXZhU2NyaXB0IGZ1bmN0aW9uIHJldHVybiBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IHNvdXJjZVR5cGUgLSBKU0RvYyB0eXBlIHNwZWxsaW5nLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3QgLSBUeXBlZCBmdW5jdGlvbiByZXR1cm4uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIEZ1bmN0aW9uIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IFt0eXBlTG9jYXRpb25dIC0gRXhhY3QgYW5ub3RhdGlvbiBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZX0gU2VtYW50aWMgcmV0dXJuIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRSZXR1cm5UeXBlKHNvdXJjZVR5cGUsIGxhbmd1YWdlLCBzdWJqZWN0LCBsb2NhdGlvbiwgc291cmNlLCB0eXBlTG9jYXRpb24gPSBsb2NhdGlvbiwgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKCksIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGlmIChzb3VyY2VUeXBlID09IFwidm9pZFwiKSByZXR1cm4gcmVxdWlyZVNvdXJjZVJldHVyblR5cGUobGFuZ3VhZ2UsIHNvdXJjZVR5cGUsIHN1YmplY3QsIGxvY2F0aW9uLCB0eXBlTG9jYXRpb24pXG5cbiAgcmV0dXJuIGNvbnZlcnRUeXBlKHNvdXJjZVR5cGUsIGxhbmd1YWdlLCBzdWJqZWN0LCBsb2NhdGlvbiwgc291cmNlLCB0eXBlTG9jYXRpb24sIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycylcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgVHlwZVNjcmlwdCBzY2FsYXIga2V5d29yZCBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVHlwZUFubm90YXRpb24gfCBpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVFNUeXBlQW5ub3RhdGlvbiB8IGltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob29wIHwgbnVsbCB8IHVuZGVmaW5lZH0gYW5ub3RhdGlvbiAtIFR5cGUgYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IG93bmVyTG9jYXRpb24gLSBPd25pbmcgZGVjbGFyYXRpb24gbG9jYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gW3JlY29yZE5hbWVzXSAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyPn0gW3R5cGVQYXJhbWV0ZXJzXSAtIERlY2xhcmF0aW9uLXNjb3BlZCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVmFsdWVUeXBlfSBTZW1hbnRpYyB0eXBlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHlwZVNjcmlwdFR5cGUoYW5ub3RhdGlvbiwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKCksIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGlmICghYW5ub3RhdGlvbikgcmV0dXJuIG1pc3NpbmdUeXBlKFwidHlwZXNjcmlwdFwiLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uKVxuICBpZiAoYW5ub3RhdGlvbi50eXBlICE9IFwiVFNUeXBlQW5ub3RhdGlvblwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcInVuc3VwcG9ydGVkIHNjYWxhciB0eXBlXCIsIG5vZGVMb2NhdGlvbihhbm5vdGF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUoYW5ub3RhdGlvbi50eXBlQW5ub3RhdGlvbiwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBib3VuZGVkIHJlY3Vyc2l2ZSBUeXBlU2NyaXB0IHZhbHVlLXR5cGUgdHJlZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlRTVHlwZX0gdHlwZU5vZGUgLSBQYXJzZXItb3duZWQgdHlwZSBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3QgLSBUeXBlZCBzdWJqZWN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gb3duZXJMb2NhdGlvbiAtIE93bmluZyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSBbcmVjb3JkTmFtZXNdIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXI+fSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IFNlbWFudGljIHZhbHVlIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUeXBlU2NyaXB0VmFsdWVUeXBlTm9kZSh0eXBlTm9kZSwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKCksIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGNvbnN0IHNvdXJjZVR5cGUgPSB0eXBlTm9kZS50eXBlID09IFwiVFNOdW1iZXJLZXl3b3JkXCIgPyBcIm51bWJlclwiIDpcbiAgICB0eXBlTm9kZS50eXBlID09IFwiVFNCb29sZWFuS2V5d29yZFwiID8gXCJib29sZWFuXCIgOiB0eXBlTm9kZS50eXBlID09IFwiVFNTdHJpbmdLZXl3b3JkXCIgPyBcInN0cmluZ1wiIDogdW5kZWZpbmVkXG5cbiAgaWYgKHNvdXJjZVR5cGUpIHtcbiAgICByZXR1cm4gcmVxdWlyZVNvdXJjZVNjYWxhclR5cGUoXCJ0eXBlc2NyaXB0XCIsIHNvdXJjZVR5cGUsIHN1YmplY3QsIG93bmVyTG9jYXRpb24sIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgaWYgKHR5cGVOb2RlLnR5cGUgPT0gXCJUU1R5cGVSZWZlcmVuY2VcIiAmJiB0eXBlTm9kZS50eXBlTmFtZS50eXBlID09IFwiSWRlbnRpZmllclwiICYmICF0eXBlTm9kZS50eXBlUGFyYW1ldGVycyAmJlxuICAgIHR5cGVQYXJhbWV0ZXJzLmhhcyh0eXBlTm9kZS50eXBlTmFtZS5uYW1lKSkge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcn0gKi8gKHR5cGVQYXJhbWV0ZXJzLmdldCh0eXBlTm9kZS50eXBlTmFtZS5uYW1lKSlcblxuICAgIHJldHVybiB0eXBlVmFyaWFibGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChwYXJhbWV0ZXIuaWQpLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGlmICh0eXBlTm9kZS50eXBlID09IFwiVFNUeXBlUmVmZXJlbmNlXCIgJiYgdHlwZU5vZGUudHlwZU5hbWUudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJlxuICAgIHJlY29yZE5hbWVzLmhhcyh0eXBlTm9kZS50eXBlTmFtZS5uYW1lKSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9ufSAqLyAocmVjb3JkTmFtZXMuZ2V0KHR5cGVOb2RlLnR5cGVOYW1lLm5hbWUpKVxuXG4gICAgaWYgKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJFZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uXCIpIHtcbiAgICAgIGlmICh0eXBlTm9kZS50eXBlUGFyYW1ldGVycykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcImdlbmVyaWMgb3duZWQgcmVzb3VyY2UgdHlwZVwiLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgcmV0dXJuIG93bmVkUmVzb3VyY2VUeXBlKGRlY2xhcmF0aW9uLmlkLCBub2RlTG9jYXRpb24odHlwZU5vZGUudHlwZU5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBpZiAoZGVjbGFyYXRpb24ua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIikge1xuICAgICAgaWYgKHR5cGVOb2RlLnR5cGVQYXJhbWV0ZXJzKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJ0eXBlc2NyaXB0XCIsIFwiZ2VuZXJpYyByZWZlcmVuY2UgY2xhc3MgdHlwZVwiLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24odHlwZU5vZGUudHlwZU5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICByZXR1cm4gZGVjbGFyYXRpb24ub3duZXJzaGlwPy5raW5kID09IFwib3duZWRSZXNvdXJjZVwiXG4gICAgICAgID8gb3duZWRSZWZlcmVuY2VUeXBlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBsb2NhdGlvbilcbiAgICAgICAgOiByZWZlcmVuY2VUeXBlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgYXJndW1lbnRzXyA9IHR5cGVOb2RlLnR5cGVQYXJhbWV0ZXJzPy5wYXJhbXMubWFwKChwYXJhbWV0ZXIpID0+XG4gICAgICBjb252ZXJ0VHlwZVNjcmlwdFZhbHVlVHlwZU5vZGUocGFyYW1ldGVyLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpKVxuXG4gICAgcmV0dXJuIHJlY29yZFR5cGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIG5vZGVMb2NhdGlvbih0eXBlTm9kZS50eXBlTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSksIGFyZ3VtZW50c18pXG4gIH1cbiAgaWYgKHR5cGVOb2RlLnR5cGUgPT0gXCJUU1VuaW9uVHlwZVwiKSB7XG4gICAgaWYgKHR5cGVOb2RlLnR5cGVzLmxlbmd0aCAhPSAyIHx8IHR5cGVOb2RlLnR5cGVzWzFdLnR5cGUgIT0gXCJUU051bGxLZXl3b3JkXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcbiAgICAgICAgXCJ0eXBlc2NyaXB0XCIsXG4gICAgICAgIHR5cGVOb2RlLnR5cGVzLnNvbWUoKG1lbWJlcikgPT4gbWVtYmVyLnR5cGUgPT0gXCJUU051bGxLZXl3b3JkXCIpXG4gICAgICAgICAgPyBcImFyYml0cmFyeSB1bmlvbiB0eXBlXCJcbiAgICAgICAgICA6IFwidW5zdXBwb3J0ZWQgY29sbGVjdGlvbiBvciBzY2FsYXIgdHlwZVwiLFxuICAgICAgICBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICApXG4gICAgfVxuICAgIGNvbnN0IHZhbHVlTm9kZSA9IHR5cGVOb2RlLnR5cGVzWzBdXG5cbiAgICByZXR1cm4gb3B0aW9uYWxUeXBlKFxuICAgICAgY29udmVydFR5cGVTY3JpcHRWYWx1ZVR5cGVOb2RlKHZhbHVlTm9kZSwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKSxcbiAgICAgIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBub2RlTG9jYXRpb24odmFsdWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIClcbiAgfVxuICBpZiAodHlwZU5vZGUudHlwZSA9PSBcIlRTVHlwZU9wZXJhdG9yXCIgJiYgdHlwZU5vZGUub3BlcmF0b3IgPT0gXCJyZWFkb25seVwiICYmIHR5cGVOb2RlLnR5cGVBbm5vdGF0aW9uLnR5cGUgPT0gXCJUU0FycmF5VHlwZVwiKSB7XG4gICAgY29uc3QgZWxlbWVudE5vZGUgPSB0eXBlTm9kZS50eXBlQW5ub3RhdGlvbi5lbGVtZW50VHlwZVxuXG4gICAgcmV0dXJuIGxpc3RUeXBlKFxuICAgICAgY29udmVydFR5cGVTY3JpcHRWYWx1ZVR5cGVOb2RlKGVsZW1lbnROb2RlLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpLFxuICAgICAgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5vZGVMb2NhdGlvbihlbGVtZW50Tm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICApXG4gIH1cbiAgaWYgKHR5cGVOb2RlLnR5cGUgPT0gXCJUU1R5cGVSZWZlcmVuY2VcIiAmJiB0eXBlTm9kZS50eXBlTmFtZS50eXBlID09IFwiSWRlbnRpZmllclwiICYmXG4gICAgW1wiUmVhZG9ubHlBcnJheVwiLCBcIlJlYWRvbmx5TWFwXCJdLmluY2x1ZGVzKHR5cGVOb2RlLnR5cGVOYW1lLm5hbWUpKSB7XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHR5cGVOb2RlLnR5cGVQYXJhbWV0ZXJzPy5wYXJhbXMgPz8gW11cblxuICAgIGlmICh0eXBlTm9kZS50eXBlTmFtZS5uYW1lID09IFwiUmVhZG9ubHlBcnJheVwiICYmIHBhcmFtZXRlcnMubGVuZ3RoID09IDEpIHtcbiAgICAgIHJldHVybiBsaXN0VHlwZShcbiAgICAgICAgY29udmVydFR5cGVTY3JpcHRWYWx1ZVR5cGVOb2RlKHBhcmFtZXRlcnNbMF0sIHN1YmplY3QsIG93bmVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycyksXG4gICAgICAgIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIG5vZGVMb2NhdGlvbihwYXJhbWV0ZXJzWzBdLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgKVxuICAgIH1cbiAgICBpZiAodHlwZU5vZGUudHlwZU5hbWUubmFtZSA9PSBcIlJlYWRvbmx5TWFwXCIgJiYgcGFyYW1ldGVycy5sZW5ndGggPT0gMikge1xuICAgICAgY29uc3Qga2V5VHlwZSA9IGNvbnZlcnRUeXBlU2NyaXB0VmFsdWVUeXBlTm9kZShwYXJhbWV0ZXJzWzBdLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG5cbiAgICAgIGlmIChrZXlUeXBlLmtpbmQgIT0gXCJUeXBlUmVmZXJlbmNlXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcIm1hcCBrZXkgdHlwZSBvdGhlciB0aGFuIHN0cmluZ1wiLCBub2RlTG9jYXRpb24ocGFyYW1ldGVyc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwVHlwZShcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgY29udmVydFR5cGVTY3JpcHRWYWx1ZVR5cGVOb2RlKHBhcmFtZXRlcnNbMV0sIHN1YmplY3QsIG93bmVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycyksXG4gICAgICAgIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIG5vZGVMb2NhdGlvbihwYXJhbWV0ZXJzWzBdLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKHBhcmFtZXRlcnNbMV0sIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcInVuc3VwcG9ydGVkIGNvbGxlY3Rpb24gb3Igc2NhbGFyIHR5cGVcIiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgVHlwZVNjcmlwdCBmdW5jdGlvbiByZXR1cm4gYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlR5cGVBbm5vdGF0aW9uIHwgaW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlRTVHlwZUFubm90YXRpb24gfCBpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9vcCB8IG51bGwgfCB1bmRlZmluZWR9IGFubm90YXRpb24gLSBSZXR1cm4gYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgZnVuY3Rpb24gcmV0dXJuLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gb3duZXJMb2NhdGlvbiAtIEZ1bmN0aW9uIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZX0gU2VtYW50aWMgcmV0dXJuIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUeXBlU2NyaXB0UmV0dXJuVHlwZShhbm5vdGF0aW9uLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcyA9IG5ldyBNYXAoKSwgdHlwZVBhcmFtZXRlcnMgPSBuZXcgTWFwKCkpIHtcbiAgaWYgKCFhbm5vdGF0aW9uKSByZXR1cm4gcmVxdWlyZVNvdXJjZVJldHVyblR5cGUoXCJ0eXBlc2NyaXB0XCIsIHVuZGVmaW5lZCwgc3ViamVjdCwgb3duZXJMb2NhdGlvbilcbiAgaWYgKGFubm90YXRpb24udHlwZSAhPSBcIlRTVHlwZUFubm90YXRpb25cIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInR5cGVzY3JpcHRcIiwgXCJ1bnN1cHBvcnRlZCByZXR1cm4gdHlwZVwiLCBub2RlTG9jYXRpb24oYW5ub3RhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgdHlwZU5vZGUgPSBhbm5vdGF0aW9uLnR5cGVBbm5vdGF0aW9uXG5cbiAgaWYgKHR5cGVOb2RlLnR5cGUgPT0gXCJUU1ZvaWRLZXl3b3JkXCIpIHtcbiAgICByZXR1cm4gcmVxdWlyZVNvdXJjZVJldHVyblR5cGUoXCJ0eXBlc2NyaXB0XCIsIFwidm9pZFwiLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIGNvbnZlcnRUeXBlU2NyaXB0VmFsdWVUeXBlTm9kZSh0eXBlTm9kZSwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBuYXRpdmUgdW5ib3VuZGVkIGludmFyaWFudCBUeXBlU2NyaXB0IHBhcmFtZXRlciBsaXN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVFNUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSBkZWNsYXJhdGlvbiAtIFBhcnNlci1vd25lZCBsaXN0LlxuICogQHBhcmFtIHtzdHJpbmd9IG93bmVySWQgLSBTdGFibGUgb3duaW5nIGRlY2xhcmF0aW9uIGlkZW50aXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyW10gfCB1bmRlZmluZWR9IFNlbWFudGljIHBhcmFtZXRlcnMuXG4gKi9cbmZ1bmN0aW9uIHR5cGVTY3JpcHRUeXBlUGFyYW1ldGVycyhkZWNsYXJhdGlvbiwgb3duZXJJZCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAoIWRlY2xhcmF0aW9uKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgcmV0dXJuIGRlY2xhcmF0aW9uLnBhcmFtcy5tYXAoKHBhcmFtZXRlciwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAocGFyYW1ldGVyLmNvbnN0cmFpbnQgfHwgcGFyYW1ldGVyLmRlZmF1bHQgfHwgUmVmbGVjdC5nZXQocGFyYW1ldGVyLCBcImluXCIpIHx8IFJlZmxlY3QuZ2V0KHBhcmFtZXRlciwgXCJvdXRcIikgfHxcbiAgICAgIFJlZmxlY3QuZ2V0KHBhcmFtZXRlciwgXCJjb25zdFwiKSB8fCB0eXBlb2YgcGFyYW1ldGVyLm5hbWUgIT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcImJvdW5kZWQsIGRlZmF1bHRlZCwgdmFyaWFudCwgb3IgY29uc3QgdHlwZSBwYXJhbWV0ZXJcIiwgbG9jYXRpb24pXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2lkOiBgJHtvd25lcklkfTp0eXBlOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHlwZVBhcmFtZXRlclwiKSwgbG9jYXRpb24sIG5hbWU6IHBhcmFtZXRlci5uYW1lfSwge25hbWU6IGxvY2F0aW9ufSlcbiAgfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN1cHBvcnRlZCBmdW5jdGlvbiBzaWduYXR1cmUgYmVmb3JlIGFueSBib2R5IGV4cHJlc3Npb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gbm9kZSAtIEJhYmVsIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3duZXJJZCAtIFN0YWJsZSBmdW5jdGlvbiBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHtKYXZhU2NyaXB0RnVuY3Rpb25TaWduYXR1cmV9IFNlbWFudGljIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZ1bmN0aW9uU2lnbmF0dXJlKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgb3duZXJJZCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICghbm9kZS5pZCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImFub255bW91cyBmdW5jdGlvblwiLCBsb2NhdGlvbilcbiAgaWYgKG5vZGUuYXN5bmMpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJhc3luYyBmdW5jdGlvblwiLCBsb2NhdGlvbilcbiAgaWYgKG5vZGUuZ2VuZXJhdG9yKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiZ2VuZXJhdG9yIGZ1bmN0aW9uXCIsIGxvY2F0aW9uKVxuICBjb25zdCBuYXRpdmVUeXBlUGFyYW1ldGVycyA9IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiXG4gICAgPyB0eXBlU2NyaXB0VHlwZVBhcmFtZXRlcnMoLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuVFNUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSAqLyAobm9kZS50eXBlUGFyYW1ldGVycyksIG93bmVySWQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgOiBub2RlLnR5cGVQYXJhbWV0ZXJzID8gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibmF0aXZlIGdlbmVyaWMgZnVuY3Rpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUudHlwZVBhcmFtZXRlcnMsIGZpbGVuYW1lLCBzb3VyY2UpKSA6IHVuZGVmaW5lZFxuICBjb25zdCBkb2N1bWVudGVkVHlwZXMgPSBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiA/IGpzZG9jVHlwZXMobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgb3duZXJJZCkgOiB1bmRlZmluZWRcbiAgY29uc3QgdHlwZVBhcmFtZXRlcnNfID0gbmF0aXZlVHlwZVBhcmFtZXRlcnMgPz8gZG9jdW1lbnRlZFR5cGVzPy50eXBlUGFyYW1ldGVyc1xuICBjb25zdCB0eXBlUGFyYW1ldGVyTmFtZXMgPSBuZXcgTWFwKCh0eXBlUGFyYW1ldGVyc18gPz8gW10pLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlcl0pKVxuICBjb25zdCBwYXJhbWV0ZXJzID0gbm9kZS5wYXJhbXMubWFwKChwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAocGFyYW1ldGVyLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgcGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlckxvY2F0aW9uKVxuICAgIGlmIChwYXJhbWV0ZXIub3B0aW9uYWwpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJvcHRpb25hbCBwYXJhbWV0ZXJcIiwgcGFyYW1ldGVyTG9jYXRpb24pXG5cbiAgICBjb25zdCBkb2N1bWVudGVkVHlwZSA9IGRvY3VtZW50ZWRUeXBlcz8ucGFyYW1ldGVycy5nZXQocGFyYW1ldGVyLm5hbWUpXG4gICAgY29uc3QgdHlwZSA9IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiXG4gICAgICA/IGNvbnZlcnRUeXBlKGRvY3VtZW50ZWRUeXBlPy5zb3VyY2VUeXBlLCBsYW5ndWFnZSwgYFBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24sIHNvdXJjZSwgZG9jdW1lbnRlZFR5cGU/LmxvY2F0aW9uLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlck5hbWVzKVxuICAgICAgOiBjb252ZXJ0VHlwZVNjcmlwdFR5cGUocGFyYW1ldGVyLnR5cGVBbm5vdGF0aW9uLCBgUGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfSdgLCBwYXJhbWV0ZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlBhcmFtZXRlclwiKSxcbiAgICAgIGxvY2F0aW9uOiBwYXJhbWV0ZXJMb2NhdGlvbixcbiAgICAgIG5hbWU6IHBhcmFtZXRlci5uYW1lLFxuICAgICAgdHlwZVxuICAgIH0sIHtuYW1lOiBpZGVudGlmaWVyTG9jYXRpb24ocGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG4gIGNvbnN0IGV4dHJhRG9jdW1lbnRlZFBhcmFtZXRlciA9IGRvY3VtZW50ZWRUeXBlcyAmJiBbLi4uZG9jdW1lbnRlZFR5cGVzLnBhcmFtZXRlcnMua2V5cygpXVxuICAgIC5maW5kKChuYW1lKSA9PiAhbm9kZS5wYXJhbXMuc29tZSgocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIudHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJiBwYXJhbWV0ZXIubmFtZSA9PSBuYW1lKSlcblxuICBpZiAoZXh0cmFEb2N1bWVudGVkUGFyYW1ldGVyKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIGBhbm5vdGF0aW9uIGZvciB1bmtub3duIHBhcmFtZXRlciAnJHtleHRyYURvY3VtZW50ZWRQYXJhbWV0ZXJ9J2AsIGxvY2F0aW9uKVxuICBjb25zdCByZXR1cm5Bbm5vdGF0aW9uID0gbm9kZS5yZXR1cm5UeXBlXG4gIGNvbnN0IHJldHVyblR5cGUgPSBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIlxuICAgID8gY29udmVydFJldHVyblR5cGUoZG9jdW1lbnRlZFR5cGVzPy5yZXR1cm5UeXBlPy5zb3VyY2VUeXBlLCBsYW5ndWFnZSwgYEZ1bmN0aW9uICcke25vZGUuaWQubmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLCBzb3VyY2UsIGRvY3VtZW50ZWRUeXBlcz8ucmV0dXJuVHlwZT8ubG9jYXRpb24sIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpXG4gICAgOiBjb252ZXJ0VHlwZVNjcmlwdFJldHVyblR5cGUocmV0dXJuQW5ub3RhdGlvbiwgYEZ1bmN0aW9uICcke25vZGUuaWQubmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlck5hbWVzKVxuICByZXR1cm4ge1xuICAgIGxvY2F0aW9uLFxuICAgIG5hbWU6IG5vZGUuaWQubmFtZSxcbiAgICBuYW1lTG9jYXRpb246IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmlkLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBwYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGUsXG4gICAgLi4uKHR5cGVQYXJhbWV0ZXJzXyA/IHt0eXBlUGFyYW1ldGVyczogdHlwZVBhcmFtZXRlcnNffSA6IHt9KVxuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdXBwb3J0ZWQgZnVuY3Rpb24gYm9keSB1c2luZyBhbGwgYWxyZWFkeS1wcm92ZWQgc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb259IG5vZGUgLSBCYWJlbCBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7SmF2YVNjcmlwdEZ1bmN0aW9uU2lnbmF0dXJlfSBzaWduYXR1cmUgLSBDb252ZXJ0ZWQgc2lnbmF0dXJlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBKYXZhU2NyaXB0RnVuY3Rpb25TaWduYXR1cmU+fSBmdW5jdGlvbnMgLSBNb2R1bGUgc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn0gdmFsdWVSZWNvcmROYW1lcyAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGF2YWlsYWJsZSBpbiB2YWx1ZSBwb3NpdGlvbnMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZCBkZWNsYXJhdGlvbnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gUmVmZXJlbmNlIGNsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvck5hbWVzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2Fub25pY2FsWmVyb1JlcXVpcmVkIC0gV2hldGhlciBnZW5lcmF0ZWQgc2NhbGFyIG91dHB1dCBtYXkgY29udGFpbiBzaWduZWQgemVyby5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSBTZW1hbnRpYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZ1bmN0aW9uKG5vZGUsIHNpZ25hdHVyZSwgZnVuY3Rpb25zLCByZWNvcmROYW1lcywgdmFsdWVSZWNvcmROYW1lcywgcmVjb3JkcywgY2xhc3NlcywgZXJyb3JOYW1lcywgZXJyb3JzLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkKSB7XG4gIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgYmluZGluZ3M6IG5ldyBNYXAoc2lnbmF0dXJlLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyLnR5cGVdKSksXG4gICAgY2xhc3NlcyxcbiAgICBlcnJvck5hbWVzLFxuICAgIGVycm9ycyxcbiAgICBmdW5jdGlvbnMsXG4gICAgb3JkZXJlZE1hcERlY2xhcmF0aW9uczogb3JkZXJlZE1hcERlY2xhcmF0aW9uc0Zvcihub2RlLmJvZHkpLFxuICAgIHJlY29yZE5hbWVzLFxuICAgIHJlY29yZHMsXG4gICAgcmV0dXJuVHlwZTogc2lnbmF0dXJlLnJldHVyblR5cGUsXG4gICAgdHlwZVBhcmFtZXRlcnM6IG5ldyBNYXAoKHNpZ25hdHVyZS50eXBlUGFyYW1ldGVycyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyXSkpLFxuICAgIHZhbHVlUmVjb3JkTmFtZXNcbiAgfVxuICBjb25zdCBib2R5ID0gY29udmVydEJsb2NrKG5vZGUuYm9keSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dClcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keSxcbiAgICBraW5kOiBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIixcbiAgICBsb2NhdGlvbjogc2lnbmF0dXJlLmxvY2F0aW9uLFxuICAgIG5hbWU6IHNpZ25hdHVyZS5uYW1lLFxuICAgIHBhcmFtZXRlcnM6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGU6IHNpZ25hdHVyZS5yZXR1cm5UeXBlLFxuICAgIC4uLihzaWduYXR1cmUudHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IHNpZ25hdHVyZS50eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgfSwge25hbWU6IHNpZ25hdHVyZS5uYW1lTG9jYXRpb259KVxufVxuXG4vKipcbiAqIFJlc29sdmVzIHBhcnNlci1vd25lZCBwYWlyIGxvb3BzIHRvIGV4YWN0IGRlY2xhcmF0aW9ucyBpbnNpZGUgb25lIGxleGljYWwgb3duZXIuXG4gKiBBbWJpZ3VvdXMgc2FtZS1uYW1lIGRlY2xhcmF0aW9ucyBwcm9kdWNlIG5vIGV2aWRlbmNlIGFuZCBmYWlsIGR1cmluZyBsb29wIGNvbnZlcnNpb24uXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gRnVuY3Rpb24gYm9keSBvciBlbnRyeS1wb2ludCBzdWJ0cmVlLlxuICogQHJldHVybnMge1NldDxvYmplY3Q+fSBFeGFjdCBwYWlyLWl0ZXJhdGVkIHBhcnNlciBkZWNsYXJhdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIG9yZGVyZWRNYXBEZWNsYXJhdGlvbnNGb3IodmFsdWUpIHtcbiAgLyoqIEB0eXBlIHt7ZGVjbGFyYXRpb246IG9iamVjdCwgbmFtZTogc3RyaW5nLCBvZmZzZXQ6IG51bWJlcn1bXX0gKi9cbiAgY29uc3QgZGVjbGFyYXRpb25zID0gW11cbiAgLyoqIEB0eXBlIHt7bmFtZTogc3RyaW5nLCBvZmZzZXQ6IG51bWJlcn1bXX0gKi9cbiAgY29uc3QgcmVjZWl2ZXJzID0gW11cbiAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0KClcbiAgLyoqXG4gICAqIFZpc2l0cyBvbmUgcGFyc2VyIGNhbmRpZGF0ZS5cbiAgICogQHBhcmFtIHt1bmtub3dufSBjYW5kaWRhdGUgLSBQYXJzZXIgY2FuZGlkYXRlLlxuICAgKi9cbiAgY29uc3QgdmlzaXQgPSAoY2FuZGlkYXRlKSA9PiB7XG4gICAgaWYgKCFjYW5kaWRhdGUgfHwgdHlwZW9mIGNhbmRpZGF0ZSAhPSBcIm9iamVjdFwiIHx8IHNlZW4uaGFzKGNhbmRpZGF0ZSkpIHJldHVyblxuICAgIHNlZW4uYWRkKGNhbmRpZGF0ZSlcbiAgICBjb25zdCB0eXBlID0gUmVmbGVjdC5nZXQoY2FuZGlkYXRlLCBcInR5cGVcIilcblxuICAgIGlmICh0eXBlID09IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiIHx8IHR5cGUgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpIHJldHVyblxuICAgIGlmICh0eXBlID09IFwiVmFyaWFibGVEZWNsYXJhdG9yXCIpIHtcbiAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBSZWZsZWN0LmdldChjYW5kaWRhdGUsIFwiaWRcIilcblxuICAgICAgaWYgKFJlZmxlY3QuZ2V0KGlkZW50aWZpZXIsIFwidHlwZVwiKSA9PSBcIklkZW50aWZpZXJcIikgZGVjbGFyYXRpb25zLnB1c2goe1xuICAgICAgICBkZWNsYXJhdGlvbjogY2FuZGlkYXRlLFxuICAgICAgICBuYW1lOiBSZWZsZWN0LmdldChpZGVudGlmaWVyLCBcIm5hbWVcIiksXG4gICAgICAgIG9mZnNldDogUmVmbGVjdC5nZXQoY2FuZGlkYXRlLCBcInN0YXJ0XCIpXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIkZvck9mU3RhdGVtZW50XCIpIHtcbiAgICAgIGNvbnN0IGxlZnQgPSBSZWZsZWN0LmdldChjYW5kaWRhdGUsIFwibGVmdFwiKVxuICAgICAgY29uc3QgcmlnaHQgPSBSZWZsZWN0LmdldChjYW5kaWRhdGUsIFwicmlnaHRcIilcbiAgICAgIGNvbnN0IGxvb3BEZWNsYXJhdGlvbnMgPSBsZWZ0ICYmIHR5cGVvZiBsZWZ0ID09IFwib2JqZWN0XCIgPyBSZWZsZWN0LmdldChsZWZ0LCBcImRlY2xhcmF0aW9uc1wiKSA6IHVuZGVmaW5lZFxuICAgICAgY29uc3QgcGF0dGVybiA9IEFycmF5LmlzQXJyYXkobG9vcERlY2xhcmF0aW9ucykgJiYgbG9vcERlY2xhcmF0aW9ucy5sZW5ndGggPT0gMSA/IFJlZmxlY3QuZ2V0KGxvb3BEZWNsYXJhdGlvbnNbMF0sIFwiaWRcIikgOiB1bmRlZmluZWRcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gcGF0dGVybiAmJiB0eXBlb2YgcGF0dGVybiA9PSBcIm9iamVjdFwiID8gUmVmbGVjdC5nZXQocGF0dGVybiwgXCJlbGVtZW50c1wiKSA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAoUmVmbGVjdC5nZXQobGVmdCwgXCJraW5kXCIpID09IFwiY29uc3RcIiAmJiBSZWZsZWN0LmdldChwYXR0ZXJuLCBcInR5cGVcIikgPT0gXCJBcnJheVBhdHRlcm5cIiAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KGVsZW1lbnRzKSAmJiBlbGVtZW50cy5sZW5ndGggPT0gMiAmJiBlbGVtZW50cy5ldmVyeSgoZWxlbWVudCkgPT4gUmVmbGVjdC5nZXQoZWxlbWVudCwgXCJ0eXBlXCIpID09IFwiSWRlbnRpZmllclwiKSAmJlxuICAgICAgICBSZWZsZWN0LmdldChyaWdodCwgXCJ0eXBlXCIpID09IFwiSWRlbnRpZmllclwiKSByZWNlaXZlcnMucHVzaCh7XG4gICAgICAgIG5hbWU6IFJlZmxlY3QuZ2V0KHJpZ2h0LCBcIm5hbWVcIiksXG4gICAgICAgIG9mZnNldDogUmVmbGVjdC5nZXQoY2FuZGlkYXRlLCBcInN0YXJ0XCIpXG4gICAgICB9KVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrZXksIGNoaWxkXSBvZiBPYmplY3QuZW50cmllcyhjYW5kaWRhdGUpKSB7XG4gICAgICBpZiAoW1wiZXh0cmFcIiwgXCJpbm5lckNvbW1lbnRzXCIsIFwibGVhZGluZ0NvbW1lbnRzXCIsIFwibG9jXCIsIFwidHJhaWxpbmdDb21tZW50c1wiXS5pbmNsdWRlcyhrZXkpKSBjb250aW51ZVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjaGlsZCkgdmlzaXQoaXRlbSlcbiAgICAgIH0gZWxzZSB2aXNpdChjaGlsZClcbiAgICB9XG4gIH1cblxuICB2aXNpdCh2YWx1ZSlcbiAgY29uc3Qgc2VsZWN0ZWQgPSBuZXcgU2V0KClcbiAgZm9yIChjb25zdCByZWNlaXZlciBvZiByZWNlaXZlcnMpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gZGVjbGFyYXRpb25zLmZpbHRlcigoe25hbWUsIG9mZnNldH0pID0+IG5hbWUgPT0gcmVjZWl2ZXIubmFtZSAmJiBvZmZzZXQgPCByZWNlaXZlci5vZmZzZXQpXG5cbiAgICBpZiAobWF0Y2hlcy5sZW5ndGggPT0gMSkgc2VsZWN0ZWQuYWRkKG1hdGNoZXNbMF0uZGVjbGFyYXRpb24pXG4gIH1cblxuICByZXR1cm4gc2VsZWN0ZWRcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgZW1wdHkgbmF0aXZlIEVycm9yIHN1YmNsYXNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gbm9kZSAtIEJhYmVsIGNsYXNzIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIFByZWRlY2xhcmVkIHNlbWFudGljIGVycm9yLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSBTZW1hbnRpYyBlcnJvciBkZWNsYXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFTY3JpcHRFcnJvcihub2RlLCBkZWNsYXJhdGlvbiwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoIW5vZGUuaWQgfHwgbm9kZS5zdXBlckNsYXNzPy50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IG5vZGUuc3VwZXJDbGFzcy5uYW1lICE9IFwiRXJyb3JcIiB8fFxuICAgIG5vZGUuYm9keS5ib2R5Lmxlbmd0aCAhPSAwIHx8IG5vZGUuZGVjb3JhdG9ycz8ubGVuZ3RoIHx8IG5vZGUudHlwZVBhcmFtZXRlcnMgfHwgbm9kZS5zdXBlclR5cGVQYXJhbWV0ZXJzIHx8XG4gICAgUmVmbGVjdC5nZXQobm9kZSwgXCJhYnN0cmFjdFwiKSB8fCBSZWZsZWN0LmdldChub2RlLCBcImRlY2xhcmVcIikgfHwgUmVmbGVjdC5nZXQobm9kZSwgXCJpbXBsZW1lbnRzXCIpPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibm9uY2Fub25pY2FsIHR5cGVkIGVycm9yIGRlY2xhcmF0aW9uXCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoZGVjbGFyYXRpb24sIHtcbiAgICBuYW1lOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5pZCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgdHlwZTogaWRlbnRpZmllckxvY2F0aW9uKG5vZGUuc3VwZXJDbGFzcywgZmlsZW5hbWUsIHNvdXJjZSlcbiAgfSlcbn1cblxuLyoqXG4gKiBQcmVkZWNsYXJlcyB0aGUgYm91bmRlZCBuYXRpdmUgcHJpdmF0ZS1maWVsZCByZWZlcmVuY2UtY2xhc3MgcHJvZmlsZSBhbmQgYWxsIGNhbGxhYmxlIHNpZ25hdHVyZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBub2RlIC0gUGFyc2VyIGNsYXNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIFByZWRlY2xhcmVkIGNsYXNzIGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gbm9taW5hbE5hbWVzIC0gTm9taW5hbCB0eXBlcyBieSBuYW1lLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIFNvdXJjZSBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gU2VtYW50aWMgY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIHByZWRlY2xhcmVSZWZlcmVuY2VDbGFzcyhub2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICghbm9kZS5pZCB8fCBub2RlLnN1cGVyQ2xhc3MgfHwgbm9kZS5kZWNvcmF0b3JzPy5sZW5ndGggfHwgbm9kZS50eXBlUGFyYW1ldGVycyB8fCBub2RlLnN1cGVyVHlwZVBhcmFtZXRlcnMgfHxcbiAgICBSZWZsZWN0LmdldChub2RlLCBcImFic3RyYWN0XCIpIHx8IFJlZmxlY3QuZ2V0KG5vZGUsIFwiZGVjbGFyZVwiKSB8fCBSZWZsZWN0LmdldChub2RlLCBcImltcGxlbWVudHNcIik/Lmxlbmd0aCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJyZWZlcmVuY2UgY2xhc3MgaW5oZXJpdGFuY2UsIGdlbmVyaWNzLCBkZWNvcmF0aW9uLCBvciBtb2RpZmllclwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBjb25zdHJ1Y3Rvck5vZGVzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NNZXRob2RbXX0gKi8gKFxuICAgIG5vZGUuYm9keS5ib2R5LmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIudHlwZSA9PSBcIkNsYXNzTWV0aG9kXCIgJiYgbWVtYmVyLmtpbmQgPT0gXCJjb25zdHJ1Y3RvclwiKSlcbiAgY29uc3QgZmllbGROb2RlcyA9IG5vZGUuYm9keS5ib2R5LmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIudHlwZSA9PSBcIkNsYXNzUHJvcGVydHlcIiB8fCBtZW1iZXIudHlwZSA9PSBcIkNsYXNzUHJpdmF0ZVByb3BlcnR5XCIpXG4gIGNvbnN0IG1ldGhvZE5vZGVzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NNZXRob2RbXX0gKi8gKFxuICAgIG5vZGUuYm9keS5ib2R5LmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIudHlwZSA9PSBcIkNsYXNzTWV0aG9kXCIgJiYgbWVtYmVyLmtpbmQgPT0gXCJtZXRob2RcIikpXG5cbiAgaWYgKGNvbnN0cnVjdG9yTm9kZXMubGVuZ3RoICE9IDEgfHwgZmllbGROb2Rlcy5sZW5ndGggPT0gMCB8fFxuICAgIGZpZWxkTm9kZXMubGVuZ3RoICsgbWV0aG9kTm9kZXMubGVuZ3RoICsgY29uc3RydWN0b3JOb2Rlcy5sZW5ndGggIT0gbm9kZS5ib2R5LmJvZHkubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInJlZmVyZW5jZSBjbGFzcyByZXF1aXJlcyBwcml2YXRlIGZpZWxkcywgb25lIGNvbnN0cnVjdG9yLCBhbmQgb3JkaW5hcnkgbWV0aG9kc1wiLCBsb2NhdGlvbilcbiAgfVxuICBkZWNsYXJhdGlvbi5maWVsZHMgPSBmaWVsZE5vZGVzLm1hcCgobWVtYmVyLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGZpZWxkTG9jYXRpb24gPSBub2RlTG9jYXRpb24obWVtYmVyLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGxldCBuYW1lXG4gICAgbGV0IG5hbWVMb2NhdGlvblxuICAgIGxldCB0eXBlXG5cbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIpIHtcbiAgICAgIGlmIChtZW1iZXIudHlwZSAhPSBcIkNsYXNzUHJvcGVydHlcIiB8fCBtZW1iZXIua2V5LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgbWVtYmVyLmNvbXB1dGVkIHx8IG1lbWJlci5zdGF0aWMgfHxcbiAgICAgICAgbWVtYmVyLmFjY2Vzc2liaWxpdHkgIT0gXCJwcml2YXRlXCIgfHwgbWVtYmVyLnJlYWRvbmx5IHx8IG1lbWJlci52YWx1ZSB8fCBtZW1iZXIub3B0aW9uYWwgfHwgbWVtYmVyLmRlY29yYXRvcnM/Lmxlbmd0aCB8fFxuICAgICAgICBSZWZsZWN0LmdldChtZW1iZXIsIFwiYWJzdHJhY3RcIikgfHwgUmVmbGVjdC5nZXQobWVtYmVyLCBcImRlY2xhcmVcIikpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIm5vbmNhbm9uaWNhbCBwcml2YXRlIGluc3RhbmNlIGZpZWxkXCIsIGZpZWxkTG9jYXRpb24pXG4gICAgICB9XG4gICAgICBuYW1lID0gbWVtYmVyLmtleS5uYW1lXG4gICAgICBuYW1lTG9jYXRpb24gPSBpZGVudGlmaWVyTG9jYXRpb24obWVtYmVyLmtleSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIHR5cGUgPSBjb252ZXJ0VHlwZVNjcmlwdFR5cGUobWVtYmVyLnR5cGVBbm5vdGF0aW9uLCBgUHJpdmF0ZSBmaWVsZCAnJHtuYW1lfSdgLCBmaWVsZExvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCBub21pbmFsTmFtZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtZW1iZXIudHlwZSAhPSBcIkNsYXNzUHJpdmF0ZVByb3BlcnR5XCIgfHwgbWVtYmVyLmtleS50eXBlICE9IFwiUHJpdmF0ZU5hbWVcIiB8fCBtZW1iZXIuc3RhdGljIHx8IG1lbWJlci52YWx1ZSB8fFxuICAgICAgICBtZW1iZXIuZGVjb3JhdG9ycz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJub25jYW5vbmljYWwgcHJpdmF0ZSBpbnN0YW5jZSBmaWVsZFwiLCBmaWVsZExvY2F0aW9uKVxuICAgICAgfVxuICAgICAgbmFtZSA9IG1lbWJlci5rZXkuaWQubmFtZVxuICAgICAgbmFtZUxvY2F0aW9uID0gaWRlbnRpZmllckxvY2F0aW9uKG1lbWJlci5rZXkuaWQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICBjb25zdCBjb21tZW50ID0gbWVtYmVyLmxlYWRpbmdDb21tZW50cz8uYXQoLTEpXG4gICAgICBjb25zdCBnYXAgPSBjb21tZW50ID8gc291cmNlLnNsaWNlKGNvbW1lbnQuZW5kID8/IDAsIG1lbWJlci5zdGFydCA/PyAwKSA6IFwiXCJcbiAgICAgIGNvbnN0IGJsb2NrID0gY29tbWVudD8udHlwZSA9PSBcIkNvbW1lbnRCbG9ja1wiICYmIGNvbW1lbnQudmFsdWUuc3RhcnRzV2l0aChcIipcIikgJiYgL15cXHMqJC91LnRlc3QoZ2FwKVxuICAgICAgICA/IHBhcnNlQ29tbWVudChgLyoke2NvbW1lbnQudmFsdWV9Ki9gKVswXSA6IHVuZGVmaW5lZFxuICAgICAgY29uc3QgdGFncyA9IGJsb2NrPy50YWdzLmZpbHRlcigodGFnKSA9PiB0YWcudGFnID09IFwidHlwZVwiKSA/PyBbXVxuXG4gICAgICBpZiAoIWNvbW1lbnQgfHwgdGFncy5sZW5ndGggIT0gMSB8fCB0YWdzWzBdLm5hbWUgfHwgdGFnc1swXS5kZXNjcmlwdGlvbikge1xuICAgICAgICByZXR1cm4gbWlzc2luZ1R5cGUobGFuZ3VhZ2UsIGBQcml2YXRlIGZpZWxkICcke25hbWV9J2AsIGZpZWxkTG9jYXRpb24pXG4gICAgICB9XG4gICAgICB0eXBlID0gY29udmVydFR5cGUodGFnc1swXS50eXBlLCBsYW5ndWFnZSwgYFByaXZhdGUgZmllbGQgJyR7bmFtZX0nYCwgZmllbGRMb2NhdGlvbiwgc291cmNlLFxuICAgICAgICBjb21tZW50VGFnTG9jYXRpb24oLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ29tbWVudEJsb2NrfSAqLyAoY29tbWVudCksIHRhZ3NbMF0sIFwidHlwZVwiLCBmaWxlbmFtZSwgc291cmNlKSwgbm9taW5hbE5hbWVzKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmZpZWxkOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IGZpZWxkTG9jYXRpb24sIG5hbWUsIHR5cGV9LCB7bmFtZTogbmFtZUxvY2F0aW9ufSlcbiAgfSlcbiAgY29uc3Qgb3duZWRGaWVsZHMgPSBkZWNsYXJhdGlvbi5maWVsZHMuZmlsdGVyKCh7dHlwZX0pID0+IHR5cGUua2luZCA9PSBcIk93bmVkUmVzb3VyY2VUeXBlXCIpXG5cbiAgaWYgKG93bmVkRmllbGRzLmxlbmd0aCA9PSAxKSB7XG4gICAgY29uc3Qgb3duZWRGaWVsZCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUHJpdmF0ZUZpZWxkICYge3R5cGU6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLk93bmVkUmVzb3VyY2VUeXBlfX0gKi8gKG93bmVkRmllbGRzWzBdKVxuXG4gICAgZGVjbGFyYXRpb24ub3duZXJzaGlwID0ge2ZpZWxkSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAob3duZWRGaWVsZC5pZCksIGtpbmQ6IFwib3duZWRSZXNvdXJjZVwiLCByZXNvdXJjZUlkOiBvd25lZEZpZWxkLnR5cGUucmVzb3VyY2VJZH1cbiAgfVxuXG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzTWV0aG9kfSAqLyAoY29uc3RydWN0b3JOb2Rlc1swXSlcbiAgY29uc3QgY29uc3RydWN0b3JTaWduYXR1cmUgPSBjb252ZXJ0Q2xhc3NDYWxsYWJsZVNpZ25hdHVyZShjb25zdHJ1Y3Rvck5vZGUsIGRlY2xhcmF0aW9uLCBub21pbmFsTmFtZXMsIGxhbmd1YWdlLFxuICAgIGZpbGVuYW1lLCBzb3VyY2UsIHRydWUpXG4gIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yID0gd2l0aFBhcnNlclJhbmdlcyh7Ym9keTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gKi8gKHt9KSxcbiAgICBpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmNvbnN0cnVjdG9yYCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ29uc3RydWN0b3JEZWNsYXJhdGlvblwiKSwgbG9jYXRpb246IGNvbnN0cnVjdG9yU2lnbmF0dXJlLmxvY2F0aW9uLFxuICAgIHBhcmFtZXRlcnM6IGNvbnN0cnVjdG9yU2lnbmF0dXJlLnBhcmFtZXRlcnN9LCB7Y29uc3RydWN0b3I6IGNvbnN0cnVjdG9yU2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pXG4gIGRlY2xhcmF0aW9uLm1ldGhvZHMgPSBtZXRob2ROb2Rlcy5tYXAoKG1ldGhvZE5vZGUsIGluZGV4KSA9PiB7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY29udmVydENsYXNzQ2FsbGFibGVTaWduYXR1cmUobWV0aG9kTm9kZSwgZGVjbGFyYXRpb24sIG5vbWluYWxOYW1lcywgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGZhbHNlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2JvZHk6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9ICovICh7fSksIGlkOiBgJHtkZWNsYXJhdGlvbi5pZH06bWV0aG9kOiR7aW5kZXh9YCxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1ldGhvZERlY2xhcmF0aW9uXCIpLCBsb2NhdGlvbjogc2lnbmF0dXJlLmxvY2F0aW9uLCBuYW1lOiBzaWduYXR1cmUubmFtZSxcbiAgICAgIHBhcmFtZXRlcnM6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzLCByZXR1cm5UeXBlOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlfSAqLyAoc2lnbmF0dXJlLnJldHVyblR5cGUpfSxcbiAgICB7bmFtZTogc2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pXG4gIH0pXG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoZGVjbGFyYXRpb24sIHtuYW1lOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5pZCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSByZWZlcmVuY2UgY2xhc3MgYm9keSBhZnRlciBldmVyeSBjbGFzcyBzaWduYXR1cmUgaXMgY29tcGxldGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBub2RlIC0gUGFyc2VyIGNsYXNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIENvbXBsZXRlIHByZWRlY2xhcmVkIGNsYXNzIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IG5vbWluYWxOYW1lcyAtIE5vbWluYWwgdHlwZXMgYnkgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn0gdmFsdWVOYW1lcyAtIE5vbWluYWwgY29uc3RydWN0b3JzIGJ5IG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZHMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gQ2xhc3NlcyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgSmF2YVNjcmlwdEZ1bmN0aW9uU2lnbmF0dXJlPn0gZnVuY3Rpb25zIC0gVG9wLWxldmVsIHNpZ25hdHVyZXMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvck5hbWVzIC0gRXJyb3JzIGJ5IG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvcnMgLSBFcnJvcnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gU291cmNlIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2Fub25pY2FsWmVyb1JlcXVpcmVkIC0gV2hldGhlciBzY2FsYXIgb3V0cHV0IGNhbm9uaWNhbGl6ZXMgemVyby5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBDb21wbGV0ZWQgc2VtYW50aWMgY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRSZWZlcmVuY2VDbGFzc0JvZGllcyhub2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCB2YWx1ZU5hbWVzLCByZWNvcmRzLCBjbGFzc2VzLCBmdW5jdGlvbnMsIGVycm9yTmFtZXMsXG4gIGVycm9ycywgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCkge1xuICBjb25zdCBjb25zdHJ1Y3Rvck5vZGUgPSAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc01ldGhvZH0gKi8gKFxuICAgIG5vZGUuYm9keS5ib2R5LmZpbmQoKG1lbWJlcikgPT4gbWVtYmVyLnR5cGUgPT0gXCJDbGFzc01ldGhvZFwiICYmIG1lbWJlci5raW5kID09IFwiY29uc3RydWN0b3JcIikpXG4gIGNvbnN0IG1ldGhvZE5vZGVzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2xhc3NNZXRob2RbXX0gKi8gKFxuICAgIG5vZGUuYm9keS5ib2R5LmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIudHlwZSA9PSBcIkNsYXNzTWV0aG9kXCIgJiYgbWVtYmVyLmtpbmQgPT0gXCJtZXRob2RcIikpXG4gIGNvbnN0IGJhc2VDb250ZXh0ID0ge2JpbmRpbmdzOiBuZXcgTWFwKCksIGNsYXNzZXMsIGN1cnJlbnRDbGFzczogZGVjbGFyYXRpb24sIGVycm9yTmFtZXMsIGVycm9ycywgZnVuY3Rpb25zLFxuICAgIHJlY29yZE5hbWVzOiBub21pbmFsTmFtZXMsIHJlY29yZHMsIHZhbHVlUmVjb3JkTmFtZXM6IHZhbHVlTmFtZXN9XG4gIGNvbnN0IGNvbnN0cnVjdG9yQ29udGV4dCA9IHsuLi5iYXNlQ29udGV4dCxcbiAgICBiaW5kaW5nczogbmV3IE1hcChkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLFxuICAgIHJldHVyblR5cGU6IHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJUeXBlUmVmZXJlbmNlXCIpLCBuYW1lOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJ2b2lkXCIpfX1cblxuICBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5ib2R5ID0gY29udmVydEJsb2NrKGNvbnN0cnVjdG9yTm9kZS5ib2R5LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLFxuICAgIGNvbnN0cnVjdG9yQ29udGV4dClcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1ldGhvZE5vZGVzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IG1ldGhvZCA9IGRlY2xhcmF0aW9uLm1ldGhvZHNbaW5kZXhdXG4gICAgY29uc3QgY29udGV4dCA9IHsuLi5iYXNlQ29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAobWV0aG9kLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyLnR5cGVdKSksXG4gICAgICByZXR1cm5UeXBlOiBtZXRob2QucmV0dXJuVHlwZX1cblxuICAgIG1ldGhvZC5ib2R5ID0gY29udmVydEJsb2NrKG1ldGhvZE5vZGVzW2luZGV4XS5ib2R5LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KVxuICB9XG5cbiAgcmV0dXJuIGRlY2xhcmF0aW9uXG59XG5cbi8qKlxuICogUmVhZHMgb25lIGNvbnN0cnVjdG9yIG9yIG1ldGhvZCBzaWduYXR1cmUgd2l0aG91dCBhZG1pdHRpbmcgb3ZlcmxvYWRzIG9yIG1vZGlmaWVycy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzTWV0aG9kfSBub2RlIC0gUGFyc2VyIG1ldGhvZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBEZWNsYXJpbmcgY2xhc3MuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSBub21pbmFsTmFtZXMgLSBOb21pbmFsIHR5cGVzLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIFNvdXJjZSBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNvbnN0cnVjdG9yIC0gV2hldGhlciB0aGlzIGlzIHRoZSBjb25zdHJ1Y3Rvci5cbiAqIEByZXR1cm5zIHt7bG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYW1lOiBzdHJpbmcsIG5hbWVMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHBhcmFtZXRlcnM6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdLCByZXR1cm5UeXBlPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9fSBTaWduYXR1cmUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRDbGFzc0NhbGxhYmxlU2lnbmF0dXJlKG5vZGUsIGRlY2xhcmF0aW9uLCBub21pbmFsTmFtZXMsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb25zdHJ1Y3Rvcikge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLmNvbXB1dGVkIHx8IG5vZGUuc3RhdGljIHx8IG5vZGUuYXN5bmMgfHwgbm9kZS5nZW5lcmF0b3IgfHwgbm9kZS5kZWNvcmF0b3JzPy5sZW5ndGggfHwgbm9kZS50eXBlUGFyYW1ldGVycyB8fFxuICAgIG5vZGUua2V5LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgY29uc3RydWN0b3IgIT0gKG5vZGUua2luZCA9PSBcImNvbnN0cnVjdG9yXCIpIHx8XG4gICAgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgJiYgbm9kZS5hY2Nlc3NpYmlsaXR5ICE9IG51bGwpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibm9uY2Fub25pY2FsIHJlZmVyZW5jZSBjbGFzcyBjYWxsYWJsZVwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBkb2N1bWVudGVkID0gbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCJcbiAgICA/IGpzZG9jVHlwZXMoLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKG5vZGUpKSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICA6IHVuZGVmaW5lZFxuICBpZiAoY29uc3RydWN0b3IgJiYgKG5vZGUucmV0dXJuVHlwZSB8fCBkb2N1bWVudGVkPy5yZXR1cm5UeXBlKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJjb25zdHJ1Y3RvciByZXR1cm4gYW5ub3RhdGlvblwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBwYXJhbWV0ZXJzID0gbm9kZS5wYXJhbXMubWFwKChwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAocGFyYW1ldGVyLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgcGFyYW1ldGVyLm9wdGlvbmFsIHx8IHBhcmFtZXRlci5kZWNvcmF0b3JzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJub25jYW5vbmljYWwgbWV0aG9kIHBhcmFtZXRlclwiLCBwYXJhbWV0ZXJMb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgZG9jdW1lbnRlZFR5cGUgPSBkb2N1bWVudGVkPy5wYXJhbWV0ZXJzLmdldChwYXJhbWV0ZXIubmFtZSlcbiAgICBjb25zdCB0eXBlID0gbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCJcbiAgICAgID8gY29udmVydFR5cGVTY3JpcHRUeXBlKHBhcmFtZXRlci50eXBlQW5ub3RhdGlvbiwgYFBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIG5vbWluYWxOYW1lcylcbiAgICAgIDogY29udmVydFR5cGUoZG9jdW1lbnRlZFR5cGU/LnNvdXJjZVR5cGUsIGxhbmd1YWdlLCBgUGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfSdgLCBwYXJhbWV0ZXJMb2NhdGlvbiwgc291cmNlLFxuICAgICAgICBkb2N1bWVudGVkVHlwZT8ubG9jYXRpb24sIG5vbWluYWxOYW1lcylcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQYXJhbWV0ZXJcIiksIGxvY2F0aW9uOiBwYXJhbWV0ZXJMb2NhdGlvbiwgbmFtZTogcGFyYW1ldGVyLm5hbWUsIHR5cGV9LFxuICAgICAge25hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfSlcbiAgaWYgKGRvY3VtZW50ZWQgJiYgZG9jdW1lbnRlZC5wYXJhbWV0ZXJzLnNpemUgIT0gcGFyYW1ldGVycy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibWV0aG9kIEpTRG9jIHBhcmFtZXRlciBtaXNtYXRjaFwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBuYW1lID0gY29uc3RydWN0b3IgPyBcImNvbnN0cnVjdG9yXCIgOiBub2RlLmtleS5uYW1lXG4gIGNvbnN0IG5hbWVMb2NhdGlvbiA9IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmtleSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoIWNvbnN0cnVjdG9yICYmIHJlZmVyZW5jZU1ldGhvZEhvb2tzLmhhcyhuYW1lKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgYHJlc2VydmVkIHJlZmVyZW5jZSBtZXRob2QgJyR7bmFtZX0nYCwgbmFtZUxvY2F0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHtsb2NhdGlvbiwgbmFtZSwgbmFtZUxvY2F0aW9uLCBwYXJhbWV0ZXJzLCAuLi4oY29uc3RydWN0b3IgPyB7fSA6IHtyZXR1cm5UeXBlOiBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIlxuICAgID8gY29udmVydFR5cGVTY3JpcHRSZXR1cm5UeXBlKG5vZGUucmV0dXJuVHlwZSwgYE1ldGhvZCAnJHtuYW1lfScgcmV0dXJuYCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIG5vbWluYWxOYW1lcylcbiAgICA6IGNvbnZlcnRSZXR1cm5UeXBlKGRvY3VtZW50ZWQ/LnJldHVyblR5cGU/LnNvdXJjZVR5cGUsIGxhbmd1YWdlLCBgTWV0aG9kICcke25hbWV9JyByZXR1cm5gLCBsb2NhdGlvbiwgc291cmNlLFxuICAgICAgZG9jdW1lbnRlZD8ucmV0dXJuVHlwZT8ubG9jYXRpb24sIG5vbWluYWxOYW1lcyl9KX1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgVHlwZVNjcmlwdCByZWFkb25seSBjb25zdHJ1Y3Rvci1wYXJhbWV0ZXIgcmVjb3JkIHByb2ZpbGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBub2RlIC0gQ2xhc3MgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIFByZWRlY2xhcmVkIG5vbWluYWwgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIEFsbCBub21pbmFsIGRlY2xhcmF0aW9ucyBieSBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbn0gU2VtYW50aWMgcmVjb3JkIGRlY2xhcmF0aW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHlwZVNjcmlwdFJlY29yZChub2RlLCBkZWNsYXJhdGlvbiwgcmVjb3JkTmFtZXMsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgaW1wbGVtZW50c18gPSBSZWZsZWN0LmdldChub2RlLCBcImltcGxlbWVudHNcIilcbiAgY29uc3QgbWl4aW5zID0gUmVmbGVjdC5nZXQobm9kZSwgXCJtaXhpbnNcIilcblxuICBpZiAoIW5vZGUuaWQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInR5cGVzY3JpcHRcIiwgXCJhbm9ueW1vdXMgcmVjb3JkIGNsYXNzXCIsIGxvY2F0aW9uKVxuICBpZiAobm9kZS5zdXBlckNsYXNzIHx8IChBcnJheS5pc0FycmF5KGltcGxlbWVudHNfKSAmJiBpbXBsZW1lbnRzXy5sZW5ndGgpIHx8IG5vZGUuZGVjb3JhdG9ycz8ubGVuZ3RoIHx8IG5vZGUuc3VwZXJUeXBlUGFyYW1ldGVycyB8fFxuICAgIFJlZmxlY3QuZ2V0KG5vZGUsIFwiYWJzdHJhY3RcIikgfHwgUmVmbGVjdC5nZXQobm9kZSwgXCJkZWNsYXJlXCIpIHx8IChBcnJheS5pc0FycmF5KG1peGlucykgJiYgbWl4aW5zLmxlbmd0aCkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJ0eXBlc2NyaXB0XCIsIFwicmVjb3JkIGluaGVyaXRhbmNlLCBkZWNvcmF0aW9uLCBvciBtb2RpZmllclwiLCBsb2NhdGlvbilcbiAgfVxuICBpZiAobm9kZS5ib2R5LmJvZHkubGVuZ3RoICE9IDEgfHwgbm9kZS5ib2R5LmJvZHlbMF0udHlwZSAhPSBcIkNsYXNzTWV0aG9kXCIpIHtcbiAgICBjb25zdCBleHRyYSA9IG5vZGUuYm9keS5ib2R5WzFdID8/IG5vZGUuYm9keS5ib2R5WzBdID8/IG5vZGUuYm9keVxuXG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwidHlwZXNjcmlwdFwiLCBcInJlY29yZCBjbGFzcyBib2R5IG91dHNpZGUgb25lIGNvbnN0cnVjdG9yXCIsIG5vZGVMb2NhdGlvbihleHRyYSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgY29uc3RydWN0b3IgPSBub2RlLmJvZHkuYm9keVswXVxuICBjb25zdCB0eXBlUGFyYW1ldGVyTmFtZXMgPSBuZXcgTWFwKChkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyXSkpXG5cbiAgaWYgKGNvbnN0cnVjdG9yLmtpbmQgIT0gXCJjb25zdHJ1Y3RvclwiIHx8IGNvbnN0cnVjdG9yLmNvbXB1dGVkIHx8IGNvbnN0cnVjdG9yLnN0YXRpYyB8fCBjb25zdHJ1Y3Rvci5hc3luYyB8fCBjb25zdHJ1Y3Rvci5nZW5lcmF0b3IgfHxcbiAgICBjb25zdHJ1Y3Rvci5rZXkudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBjb25zdHJ1Y3Rvci5rZXkubmFtZSAhPSBcImNvbnN0cnVjdG9yXCIgfHwgY29uc3RydWN0b3IuZGVjb3JhdG9ycz8ubGVuZ3RoIHx8XG4gICAgY29uc3RydWN0b3IucmV0dXJuVHlwZSB8fCBjb25zdHJ1Y3Rvci50eXBlUGFyYW1ldGVycyB8fCBSZWZsZWN0LmdldChjb25zdHJ1Y3RvciwgXCJhY2Nlc3NpYmlsaXR5XCIpIHx8XG4gICAgY29uc3RydWN0b3IuYm9keS5ib2R5Lmxlbmd0aCAhPSAwIHx8IGNvbnN0cnVjdG9yLmJvZHkuZGlyZWN0aXZlcy5sZW5ndGggIT0gMCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInR5cGVzY3JpcHRcIiwgXCJub25jYW5vbmljYWwgcmVjb3JkIGNvbnN0cnVjdG9yXCIsIG5vZGVMb2NhdGlvbihjb25zdHJ1Y3RvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgZGVjbGFyYXRpb24uZmllbGRzID0gY29uc3RydWN0b3IucGFyYW1zLm1hcCgocGFyYW1ldGVyKSA9PiB7XG4gICAgY29uc3QgZmllbGRMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAocGFyYW1ldGVyLnR5cGUgIT0gXCJUU1BhcmFtZXRlclByb3BlcnR5XCIgfHwgcGFyYW1ldGVyLnJlYWRvbmx5ICE9PSB0cnVlIHx8IHBhcmFtZXRlci5hY2Nlc3NpYmlsaXR5IHx8IHBhcmFtZXRlci5vdmVycmlkZSB8fFxuICAgICAgcGFyYW1ldGVyLnBhcmFtZXRlci50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IHBhcmFtZXRlci5wYXJhbWV0ZXIub3B0aW9uYWwgfHwgcGFyYW1ldGVyLnBhcmFtZXRlci5kZWNvcmF0b3JzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInR5cGVzY3JpcHRcIiwgXCJyZWNvcmQgZmllbGQgb3V0c2lkZSByZWFkb25seSBwYXJhbWV0ZXItcHJvcGVydHkgcHJvZmlsZVwiLCBmaWVsZExvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBpZGVudGlmaWVyID0gcGFyYW1ldGVyLnBhcmFtZXRlclxuICAgIGNvbnN0IGZpZWxkID0ge1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkRmllbGRcIiksXG4gICAgICBsb2NhdGlvbjogZmllbGRMb2NhdGlvbixcbiAgICAgIG5hbWU6IGlkZW50aWZpZXIubmFtZSxcbiAgICAgIHR5cGU6IGNvbnZlcnRUeXBlU2NyaXB0VHlwZShpZGVudGlmaWVyLnR5cGVBbm5vdGF0aW9uLCBgUmVjb3JkIGZpZWxkICcke2lkZW50aWZpZXIubmFtZX0nYCwgZmllbGRMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgICAgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhmaWVsZCwge25hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihpZGVudGlmaWVyLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoZGVjbGFyYXRpb24sIHtuYW1lOiBpZGVudGlmaWVyTG9jYXRpb24obm9kZS5pZCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBKU0RvYyBjb25zdHJ1Y3Rvci9yZWFkb25seS1hc3NpZ25tZW50L2ZyZWV6ZSByZWNvcmQgcHJvZmlsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzRGVjbGFyYXRpb259IG5vZGUgLSBDbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgbm9taW5hbCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IFNlbWFudGljIHJlY29yZCBkZWNsYXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFTY3JpcHRSZWNvcmQobm9kZSwgZGVjbGFyYXRpb24sIHJlY29yZE5hbWVzLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGltcGxlbWVudHNfID0gUmVmbGVjdC5nZXQobm9kZSwgXCJpbXBsZW1lbnRzXCIpXG4gIGNvbnN0IG1peGlucyA9IFJlZmxlY3QuZ2V0KG5vZGUsIFwibWl4aW5zXCIpXG5cbiAgaWYgKCFub2RlLmlkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwiYW5vbnltb3VzIHJlY29yZCBjbGFzc1wiLCBsb2NhdGlvbilcbiAgaWYgKG5vZGUuc3VwZXJDbGFzcyB8fCBub2RlLmRlY29yYXRvcnM/Lmxlbmd0aCB8fCBub2RlLnR5cGVQYXJhbWV0ZXJzIHx8IG5vZGUuc3VwZXJUeXBlUGFyYW1ldGVycyB8fFxuICAgIChBcnJheS5pc0FycmF5KGltcGxlbWVudHNfKSAmJiBpbXBsZW1lbnRzXy5sZW5ndGgpIHx8IChBcnJheS5pc0FycmF5KG1peGlucykgJiYgbWl4aW5zLmxlbmd0aCkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhc2NyaXB0XCIsIFwicmVjb3JkIGluaGVyaXRhbmNlIG9yIGRlY29yYXRpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgaWYgKG5vZGUuYm9keS5ib2R5Lmxlbmd0aCAhPSAxIHx8IG5vZGUuYm9keS5ib2R5WzBdLnR5cGUgIT0gXCJDbGFzc01ldGhvZFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcInJlY29yZCBjbGFzcyBib2R5IG91dHNpZGUgb25lIGNvbnN0cnVjdG9yXCIsIG5vZGVMb2NhdGlvbihub2RlLmJvZHkuYm9keVsxXSA/PyBub2RlLmJvZHkuYm9keVswXSA/PyBub2RlLmJvZHksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gbm9kZS5ib2R5LmJvZHlbMF1cbiAgY29uc3QgdHlwZVBhcmFtZXRlck5hbWVzID0gbmV3IE1hcCgoZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPz8gW10pLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlcl0pKVxuXG4gIGlmIChjb25zdHJ1Y3Rvci5raW5kICE9IFwiY29uc3RydWN0b3JcIiB8fCBjb25zdHJ1Y3Rvci5jb21wdXRlZCB8fCBjb25zdHJ1Y3Rvci5zdGF0aWMgfHwgY29uc3RydWN0b3IuYXN5bmMgfHwgY29uc3RydWN0b3IuZ2VuZXJhdG9yIHx8XG4gICAgY29uc3RydWN0b3Iua2V5LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgY29uc3RydWN0b3Iua2V5Lm5hbWUgIT0gXCJjb25zdHJ1Y3RvclwiIHx8IGNvbnN0cnVjdG9yLmRlY29yYXRvcnM/Lmxlbmd0aCB8fFxuICAgIGNvbnN0cnVjdG9yLnJldHVyblR5cGUgfHwgY29uc3RydWN0b3IudHlwZVBhcmFtZXRlcnMgfHwgY29uc3RydWN0b3IuYm9keS5kaXJlY3RpdmVzLmxlbmd0aCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJub25jYW5vbmljYWwgcmVjb3JkIGNvbnN0cnVjdG9yXCIsIG5vZGVMb2NhdGlvbihjb25zdHJ1Y3RvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgcGFyYW1ldGVycyA9IGNvbnN0cnVjdG9yLnBhcmFtc1xuXG4gIGlmIChwYXJhbWV0ZXJzLnNvbWUoKHBhcmFtZXRlcikgPT4gcGFyYW1ldGVyLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgcGFyYW1ldGVyLm9wdGlvbmFsIHx8IHBhcmFtZXRlci5kZWNvcmF0b3JzPy5sZW5ndGgpKSB7XG4gICAgY29uc3QgaW52YWxpZCA9IHBhcmFtZXRlcnMuZmluZCgocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBwYXJhbWV0ZXIub3B0aW9uYWwgfHwgcGFyYW1ldGVyLmRlY29yYXRvcnM/Lmxlbmd0aClcblxuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJub25jYW5vbmljYWwgcmVjb3JkIGNvbnN0cnVjdG9yIHBhcmFtZXRlclwiLCBub2RlTG9jYXRpb24oaW52YWxpZCA/PyBjb25zdHJ1Y3RvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgZG9jdW1lbnRlZCA9IGpzZG9jVHlwZXMoLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKGNvbnN0cnVjdG9yKSksIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKGRvY3VtZW50ZWQucmV0dXJuVHlwZSB8fCBkb2N1bWVudGVkLnBhcmFtZXRlcnMuc2l6ZSAhPSBwYXJhbWV0ZXJzLmxlbmd0aCB8fCBjb25zdHJ1Y3Rvci5ib2R5LmJvZHkubGVuZ3RoICE9IHBhcmFtZXRlcnMubGVuZ3RoICsgMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJpbmNvbXBsZXRlIHJlY29yZCBjb25zdHJ1Y3RvciBwcm9maWxlXCIsIG5vZGVMb2NhdGlvbihjb25zdHJ1Y3RvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgZGVjbGFyYXRpb24uZmllbGRzID0gcGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlciwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuSWRlbnRpZmllcn0gKi8gKHBhcmFtZXRlcilcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBjb25zdHJ1Y3Rvci5ib2R5LmJvZHlbaW5kZXhdXG4gICAgY29uc3QgZG9jdW1lbnRlZFR5cGUgPSBkb2N1bWVudGVkLnBhcmFtZXRlcnMuZ2V0KGlkZW50aWZpZXIubmFtZSlcblxuICAgIGlmICghZG9jdW1lbnRlZFR5cGUgfHwgc3RhdGVtZW50LnR5cGUgIT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmV4cHJlc3Npb24udHlwZSAhPSBcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIgfHxcbiAgICAgIHN0YXRlbWVudC5leHByZXNzaW9uLm9wZXJhdG9yICE9IFwiPVwiIHx8IHN0YXRlbWVudC5leHByZXNzaW9uLmxlZnQudHlwZSAhPSBcIk1lbWJlckV4cHJlc3Npb25cIiB8fCBzdGF0ZW1lbnQuZXhwcmVzc2lvbi5sZWZ0LmNvbXB1dGVkIHx8XG4gICAgICBzdGF0ZW1lbnQuZXhwcmVzc2lvbi5sZWZ0Lm9iamVjdC50eXBlICE9IFwiVGhpc0V4cHJlc3Npb25cIiB8fCBzdGF0ZW1lbnQuZXhwcmVzc2lvbi5sZWZ0LnByb3BlcnR5LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHxcbiAgICAgIHN0YXRlbWVudC5leHByZXNzaW9uLmxlZnQucHJvcGVydHkubmFtZSAhPSBpZGVudGlmaWVyLm5hbWUgfHwgc3RhdGVtZW50LmV4cHJlc3Npb24ucmlnaHQudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fFxuICAgICAgc3RhdGVtZW50LmV4cHJlc3Npb24ucmlnaHQubmFtZSAhPSBpZGVudGlmaWVyLm5hbWUpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJyZWNvcmQgZmllbGQgbm90IGluaXRpYWxpemVkIGV4YWN0bHkgb25jZVwiLCBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgcmVhZG9ubHlDb21tZW50ID0gc3RhdGVtZW50LmxlYWRpbmdDb21tZW50cz8uYXQoLTEpXG4gICAgY29uc3QgZ2FwID0gcmVhZG9ubHlDb21tZW50ID8gc291cmNlLnNsaWNlKHJlYWRvbmx5Q29tbWVudC5lbmQgPz8gMCwgc3RhdGVtZW50LnN0YXJ0ID8/IDApIDogXCJcIlxuICAgIGNvbnN0IHRhZ3MgPSByZWFkb25seUNvbW1lbnQ/LnR5cGUgPT0gXCJDb21tZW50QmxvY2tcIiAmJiByZWFkb25seUNvbW1lbnQudmFsdWUuc3RhcnRzV2l0aChcIipcIilcbiAgICAgID8gcGFyc2VDb21tZW50KGAvKiR7cmVhZG9ubHlDb21tZW50LnZhbHVlfSovYClbMF0/LnRhZ3MgPz8gW11cbiAgICAgIDogW11cblxuICAgIGlmICghcmVhZG9ubHlDb21tZW50IHx8ICEvXlxccyokL3UudGVzdChnYXApIHx8IHRhZ3MubGVuZ3RoICE9IDEgfHwgdGFnc1swXS50YWcgIT0gXCJyZWFkb25seVwiIHx8XG4gICAgICB0YWdzWzBdLm5hbWUgfHwgdGFnc1swXS50eXBlIHx8IHRhZ3NbMF0uZGVzY3JpcHRpb24pIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFzY3JpcHRcIiwgXCJyZWNvcmQgZmllbGQgd2l0aG91dCBleGFjdCBAcmVhZG9ubHkgYW5ub3RhdGlvblwiLCBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgZmllbGQgPSB7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWNvcmRGaWVsZFwiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5hbWU6IGlkZW50aWZpZXIubmFtZSxcbiAgICAgIHR5cGU6IGNvbnZlcnRUeXBlKGRvY3VtZW50ZWRUeXBlLnNvdXJjZVR5cGUsIFwiamF2YXNjcmlwdFwiLCBgUmVjb3JkIGZpZWxkICcke2lkZW50aWZpZXIubmFtZX0nYCxcbiAgICAgICAgbm9kZUxvY2F0aW9uKGlkZW50aWZpZXIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UsIGRvY3VtZW50ZWRUeXBlLmxvY2F0aW9uLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlck5hbWVzKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGZpZWxkLCB7bmFtZTogaWRlbnRpZmllckxvY2F0aW9uKHN0YXRlbWVudC5leHByZXNzaW9uLmxlZnQucHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfSlcbiAgY29uc3QgZnJlZXplID0gY29uc3RydWN0b3IuYm9keS5ib2R5LmF0KC0xKVxuXG4gIGlmICghZnJlZXplIHx8IGZyZWV6ZS50eXBlICE9IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIHx8IGZyZWV6ZS5leHByZXNzaW9uLnR5cGUgIT0gXCJDYWxsRXhwcmVzc2lvblwiIHx8IGZyZWV6ZS5leHByZXNzaW9uLm9wdGlvbmFsIHx8XG4gICAgZnJlZXplLmV4cHJlc3Npb24uYXJndW1lbnRzLmxlbmd0aCAhPSAxIHx8IGZyZWV6ZS5leHByZXNzaW9uLmFyZ3VtZW50c1swXS50eXBlICE9IFwiVGhpc0V4cHJlc3Npb25cIiB8fFxuICAgICFpc0phdmFTY3JpcHRSZWNvcmRGcmVlemUoZnJlZXplLmV4cHJlc3Npb24pKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YXNjcmlwdFwiLCBcInJlY29yZCBjb25zdHJ1Y3RvciB3aXRob3V0IGZpbmFsIE9iamVjdC5mcmVlemUodGhpcylcIiwgbm9kZUxvY2F0aW9uKGZyZWV6ZSA/PyBjb25zdHJ1Y3RvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge25hbWU6IGlkZW50aWZpZXJMb2NhdGlvbihub2RlLmlkLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogUmVjb2duaXplcyB0aGUgY2Fub25pY2FsIHNvdXJjZSBmcmVlemUgb3IgdGhlIGdlbmVyYXRlZCBpZGVudGlmaWVyLWZyZWUgaW50cmluc2ljIG93bmVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuQ2FsbEV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBGaW5hbCBjb25zdHJ1Y3RvciBjYWxsLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGNhbGwgb3ducyB0aGUgbmF0aXZlIHJlY29yZC1mcmVlemUgb3BlcmF0aW9uLlxuICovXG5mdW5jdGlvbiBpc0phdmFTY3JpcHRSZWNvcmRGcmVlemUoZXhwcmVzc2lvbikge1xuICBjb25zdCBjYWxsZWUgPSBleHByZXNzaW9uLmNhbGxlZVxuXG4gIGlmIChjYWxsZWUudHlwZSAhPSBcIk1lbWJlckV4cHJlc3Npb25cIiB8fCBjYWxsZWUuY29tcHV0ZWQgfHwgY2FsbGVlLm9wdGlvbmFsIHx8XG4gICAgY2FsbGVlLnByb3BlcnR5LnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgfHwgY2FsbGVlLnByb3BlcnR5Lm5hbWUgIT0gXCJmcmVlemVcIikgcmV0dXJuIGZhbHNlXG4gIGlmIChjYWxsZWUub2JqZWN0LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIpIHJldHVybiBjYWxsZWUub2JqZWN0Lm5hbWUgPT0gXCJPYmplY3RcIlxuICBpZiAoY2FsbGVlLm9iamVjdC50eXBlICE9IFwiTWVtYmVyRXhwcmVzc2lvblwiIHx8IGNhbGxlZS5vYmplY3QuY29tcHV0ZWQgfHwgY2FsbGVlLm9iamVjdC5vcHRpb25hbCB8fFxuICAgIGNhbGxlZS5vYmplY3QucHJvcGVydHkudHlwZSAhPSBcIklkZW50aWZpZXJcIiB8fCBjYWxsZWUub2JqZWN0LnByb3BlcnR5Lm5hbWUgIT0gXCJjb25zdHJ1Y3RvclwiKSByZXR1cm4gZmFsc2VcblxuICByZXR1cm4gY2FsbGVlLm9iamVjdC5vYmplY3QudHlwZSA9PSBcIk9iamVjdEV4cHJlc3Npb25cIiAmJiBjYWxsZWUub2JqZWN0Lm9iamVjdC5wcm9wZXJ0aWVzLmxlbmd0aCA9PSAwICYmXG4gICAgY2FsbGVlLm9iamVjdC5vYmplY3QuZXh0cmE/LnBhcmVudGhlc2l6ZWQgPT09IHRydWVcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZXhpc3RpbmcgZXhhY3QgaWYvZWxzZSB0ZXJtaW5hbCBzaGFwZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLklmU3RhdGVtZW50fSBub2RlIC0gQmFiZWwgaWYgc3RhdGVtZW50LlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2Fub25pY2FsWmVyb1JlcXVpcmVkIC0gV2hldGhlciBnZW5lcmF0ZWQgc2NhbGFyIG91dHB1dCBtYXkgY29udGFpbiBzaWduZWQgemVyby5cbiAqIEBwYXJhbSB7SmF2YVNjcmlwdENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSWZTdGF0ZW1lbnR9IFNlbWFudGljIGJyYW5jaC5cbiAqL1xuZnVuY3Rpb24gY29udmVydElmKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY29uZGl0aW9uID0gY29udmVydEV4cHJlc3Npb24obm9kZS50ZXN0LCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgY29uc3QgY29uc2VxdWVudENvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyl9XG4gIGNvbnN0IGFsdGVybmF0ZUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyl9XG4gIGNvbnN0IGNvbnNlcXVlbnQgPSBub2RlLmNvbnNlcXVlbnQudHlwZSA9PSBcIkJsb2NrU3RhdGVtZW50XCJcbiAgICA/IGNvbnZlcnRCbG9jayhub2RlLmNvbnNlcXVlbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGNvbnNlcXVlbnRDb250ZXh0KVxuICAgIDogY29udmVydEJsb2NrKFtub2RlLmNvbnNlcXVlbnRdLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb25zZXF1ZW50Q29udGV4dCwgbm9kZUxvY2F0aW9uKG5vZGUuY29uc2VxdWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGFsdGVybmF0ZSA9IG5vZGUuYWx0ZXJuYXRlXG4gICAgPyBub2RlLmFsdGVybmF0ZS50eXBlID09IFwiQmxvY2tTdGF0ZW1lbnRcIlxuICAgICAgPyBjb252ZXJ0QmxvY2sobm9kZS5hbHRlcm5hdGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGFsdGVybmF0ZUNvbnRleHQpXG4gICAgICA6IGNvbnZlcnRCbG9jayhbbm9kZS5hbHRlcm5hdGVdLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBhbHRlcm5hdGVDb250ZXh0LCBub2RlTG9jYXRpb24obm9kZS5hbHRlcm5hdGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIDogdW5kZWZpbmVkXG5cbiAgcmV0dXJuIHtcbiAgICAuLi4oYWx0ZXJuYXRlID8ge2FsdGVybmF0ZX0gOiB7fSksXG4gICAgY29uZGl0aW9uLFxuICAgIGNvbnNlcXVlbnQsXG4gICAga2luZDogXCJJZlN0YXRlbWVudFwiLFxuICAgIGxvY2F0aW9uXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgYmxvY2stYm9kaWVkIHByZS1jb25kaXRpb24gbG9vcC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLldoaWxlU3RhdGVtZW50fSBub2RlIC0gQmFiZWwgd2hpbGUgc3RhdGVtZW50LlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2Fub25pY2FsWmVyb1JlcXVpcmVkIC0gV2hldGhlciBnZW5lcmF0ZWQgc2NhbGFyIG91dHB1dCBtYXkgY29udGFpbiBzaWduZWQgemVyby5cbiAqIEBwYXJhbSB7SmF2YVNjcmlwdENvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuV2hpbGVTdGF0ZW1lbnR9IFNlbWFudGljIGxvb3AuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRXaGlsZShub2RlLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2Fub25pY2FsWmVyb1JlcXVpcmVkLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUuYm9keS50eXBlICE9IFwiQmxvY2tTdGF0ZW1lbnRcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJ3aGlsZSB3aXRob3V0IGJsb2NrIGJvZHlcIiwgbm9kZUxvY2F0aW9uKG5vZGUuYm9keSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgYm9keUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyl9XG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGJvZHk6IGNvbnZlcnRCbG9jayhub2RlLmJvZHksIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQsIGJvZHlDb250ZXh0KSxcbiAgICBjb25kaXRpb246IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUudGVzdCwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHVuZGVmaW5lZCwgdHJ1ZSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiV2hpbGVTdGF0ZW1lbnRcIiksXG4gICAgbG9jYXRpb25cbiAgfSwge2tleXdvcmQ6IHRva2VuTG9jYXRpb24obm9kZSwgXCJ3aGlsZVwiLCBub2RlLnN0YXJ0ID8/IDAsIG5vZGUudGVzdC5zdGFydCA/PyBub2RlLmVuZCA/PyBzb3VyY2UubGVuZ3RoLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIEJhYmVsIHBhcnNlZCBhbiBvcGVyYXRpb24gdGhhdCBtYWtlcyBnZW5lcmF0ZWQgSmF2YVNjcmlwdC1mYW1pbHkgc2NhbGFyIG91dHB1dCByZXF1aXJlIHplcm8gY2Fub25pY2FsaXphdGlvbi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBCYWJlbCBwYXJzZXIgc3VidHJlZS5cbiAqIEBwYXJhbSB7V2Vha1NldDxvYmplY3Q+fSBbdmlzaXRlZF0gLSBDeWNsZSBwcm90ZWN0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHN1YnRyZWUgY29udGFpbnMgaW50ZWdlciBuZWdhdGlvbiBvciBtdWx0aXBsaWNhdGlvbiBzeW50YXguXG4gKi9cbmZ1bmN0aW9uIHBhcnNlclRyZWVSZXF1aXJlc0Nhbm9uaWNhbFplcm8odmFsdWUsIHZpc2l0ZWQgPSBuZXcgV2Vha1NldCgpKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZVxuICBpZiAodmlzaXRlZC5oYXModmFsdWUpKSByZXR1cm4gZmFsc2VcblxuICB2aXNpdGVkLmFkZCh2YWx1ZSlcbiAgaWYgKFJlZmxlY3QuZ2V0KHZhbHVlLCBcInR5cGVcIikgPT0gXCJVbmFyeUV4cHJlc3Npb25cIiAmJiBSZWZsZWN0LmdldCh2YWx1ZSwgXCJvcGVyYXRvclwiKSA9PSBcIi1cIikgcmV0dXJuIHRydWVcbiAgaWYgKFJlZmxlY3QuZ2V0KHZhbHVlLCBcInR5cGVcIikgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIgJiYgUmVmbGVjdC5nZXQodmFsdWUsIFwib3BlcmF0b3JcIikgPT0gXCIqXCIpIHJldHVybiB0cnVlXG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHZhbHVlKS5zb21lKChba2V5LCBjaGlsZF0pID0+XG4gICAgIVtcImV4dHJhXCIsIFwiaW5uZXJDb21tZW50c1wiLCBcImxlYWRpbmdDb21tZW50c1wiLCBcImxvY1wiLCBcInRyYWlsaW5nQ29tbWVudHNcIl0uaW5jbHVkZXMoa2V5KSAmJlxuICAgIChBcnJheS5pc0FycmF5KGNoaWxkKVxuICAgICAgPyBjaGlsZC5zb21lKChpdGVtKSA9PiBwYXJzZXJUcmVlUmVxdWlyZXNDYW5vbmljYWxaZXJvKGl0ZW0sIHZpc2l0ZWQpKVxuICAgICAgOiBwYXJzZXJUcmVlUmVxdWlyZXNDYW5vbmljYWxaZXJvKGNoaWxkLCB2aXNpdGVkKSkpXG59XG5cbi8qKlxuICogUmVjb2duaXplcyB0aGUgcGFyc2VyLW93bmVkIHJlY2VpdmVyIHBhcmVudGhlc2VzIGVtaXR0ZWQgb25seSBmb3IgY2Fub25pY2FsIGludGVnZXIgb3V0cHV0LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRXhwcmVzc2lvbiB8IGltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdXBlcn0gcmVjZWl2ZXIgLSBRdWFsaWZpZWQtY2FsbCByZWNlaXZlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNhbGxFeHByZXNzaW9ufSBjYWxsIC0gT3V0ZXIgYHRvU3RyaW5nYCBjYWxsLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHJlY2VpdmVyIGhhcyB0aGUgZ2VuZXJhdGVkIHdyYXBwZXIgc2hhcGUuXG4gKi9cbmZ1bmN0aW9uIGhhc0Nhbm9uaWNhbFplcm9SZWNlaXZlcldyYXBwZXIocmVjZWl2ZXIsIGNhbGwpIHtcbiAgY29uc3QgZXh0cmEgPSBSZWZsZWN0LmdldChyZWNlaXZlciwgXCJleHRyYVwiKVxuICBjb25zdCBleHByZXNzaW9uUGFyZW50aGVzZXMgPSBbXCJCaW5hcnlFeHByZXNzaW9uXCIsIFwiTG9naWNhbEV4cHJlc3Npb25cIiwgXCJVbmFyeUV4cHJlc3Npb25cIl0uaW5jbHVkZXMocmVjZWl2ZXIudHlwZSkgPyAxIDogMFxuICBjb25zdCB3cmFwcGVyUGFyZW50aGVzZXMgPSBleHByZXNzaW9uUGFyZW50aGVzZXMgKyAxXG4gIGNvbnN0IHByb3BlcnR5ID0gY2FsbC5jYWxsZWUudHlwZSA9PSBcIk1lbWJlckV4cHJlc3Npb25cIiA/IGNhbGwuY2FsbGVlLnByb3BlcnR5IDogdW5kZWZpbmVkXG5cbiAgcmV0dXJuIEJvb2xlYW4oZXh0cmEpICYmIHR5cGVvZiBleHRyYSA9PSBcIm9iamVjdFwiICYmIFJlZmxlY3QuZ2V0KGV4dHJhLCBcInBhcmVudGhlc2l6ZWRcIikgPT09IHRydWUgJiZcbiAgICBSZWZsZWN0LmdldChleHRyYSwgXCJwYXJlblN0YXJ0XCIpID09PSBjYWxsLnN0YXJ0ICYmIHR5cGVvZiBjYWxsLnN0YXJ0ID09IFwibnVtYmVyXCIgJiYgdHlwZW9mIGNhbGwuZW5kID09IFwibnVtYmVyXCIgJiZcbiAgICB0eXBlb2YgcmVjZWl2ZXIuc3RhcnQgPT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgcmVjZWl2ZXIuZW5kID09IFwibnVtYmVyXCIgJiYgcHJvcGVydHk/LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICB0eXBlb2YgcHJvcGVydHkuc3RhcnQgPT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgcHJvcGVydHkuZW5kID09IFwibnVtYmVyXCIgJiYgY2FsbC5jYWxsZWUuc3RhcnQgPT09IGNhbGwuc3RhcnQgJiZcbiAgICByZWNlaXZlci5zdGFydCA9PSBjYWxsLnN0YXJ0ICsgd3JhcHBlclBhcmVudGhlc2VzICYmIHByb3BlcnR5LnN0YXJ0ID09IHJlY2VpdmVyLmVuZCArIHdyYXBwZXJQYXJlbnRoZXNlcyArIDEgJiZcbiAgICBwcm9wZXJ0eS5lbmQgPT0gcHJvcGVydHkuc3RhcnQgKyBcInRvU3RyaW5nXCIubGVuZ3RoICYmIGNhbGwuZW5kID09IHByb3BlcnR5LmVuZCArIDJcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGNvbnNvbGUubG9nIGVudHJ5LXBvaW50IGNhbGwuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnR9IG5vZGUgLSBCYWJlbCBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBjYW5vbmljYWxaZXJvUmVxdWlyZWQgLSBXaGV0aGVyIHRoaXMgcGFyc2VkIG1vZHVsZSBjb250YWlucyBhIHNpZ24tcHJvZHVjaW5nIGludGVnZXIgb3BlcmF0aW9uLlxuICogQHBhcmFtIHtKYXZhU2NyaXB0Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QcmludFN0YXRlbWVudH0gUHJpbnQgc3RhdGVtZW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UHJpbnQobm9kZSwgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UsIGNhbm9uaWNhbFplcm9SZXF1aXJlZCwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLnR5cGUgIT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHwgbm9kZS5leHByZXNzaW9uLnR5cGUgIT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBub2RlLnR5cGUsIGxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgY2FsbCA9IG5vZGUuZXhwcmVzc2lvblxuICBjb25zdCBjYWxsZWUgPSBjYWxsLmNhbGxlZVxuXG4gIGlmIChjYWxsZWUudHlwZSAhPSBcIk1lbWJlckV4cHJlc3Npb25cIiB8fCBjYWxsZWUuY29tcHV0ZWQgfHwgY2FsbGVlLm9iamVjdC50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8XG4gICAgY2FsbGVlLm9iamVjdC5uYW1lICE9IFwiY29uc29sZVwiIHx8IGNhbGxlZS5wcm9wZXJ0eS50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IGNhbGxlZS5wcm9wZXJ0eS5uYW1lICE9IFwibG9nXCIgfHxcbiAgICBjYWxsLmFyZ3VtZW50cy5sZW5ndGggIT0gMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJlbnRyeS1wb2ludCBleHByZXNzaW9uXCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgbGV0IGFyZ3VtZW50ID0gY2FsbC5hcmd1bWVudHNbMF1cblxuICBpZiAoYXJndW1lbnQudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIiB8fCBhcmd1bWVudC50eXBlID09IFwiQXJndW1lbnRQbGFjZWhvbGRlclwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBhcmd1bWVudC50eXBlLCBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgaWYgKGFyZ3VtZW50LnR5cGUgPT0gXCJDYWxsRXhwcmVzc2lvblwiICYmIGFyZ3VtZW50LmNhbGxlZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmICFhcmd1bWVudC5jYWxsZWUuY29tcHV0ZWQgJiZcbiAgICAhYXJndW1lbnQuY2FsbGVlLm9wdGlvbmFsICYmIGFyZ3VtZW50LmNhbGxlZS5vYmplY3QudHlwZSAhPSBcIlN1cGVyXCIgJiYgYXJndW1lbnQuY2FsbGVlLnByb3BlcnR5LnR5cGUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICBhcmd1bWVudC5jYWxsZWUucHJvcGVydHkubmFtZSA9PSBcInRvU3RyaW5nXCIgJiYgIWFyZ3VtZW50Lm9wdGlvbmFsICYmICFhcmd1bWVudC50eXBlQXJndW1lbnRzICYmXG4gICAgIWFyZ3VtZW50LnR5cGVQYXJhbWV0ZXJzICYmIGFyZ3VtZW50LmFyZ3VtZW50cy5sZW5ndGggPT0gMCkge1xuICAgIGlmICghY2Fub25pY2FsWmVyb1JlcXVpcmVkIHx8ICFoYXNDYW5vbmljYWxaZXJvUmVjZWl2ZXJXcmFwcGVyKGFyZ3VtZW50LmNhbGxlZS5vYmplY3QsIGFyZ3VtZW50KSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImVudHJ5LXBvaW50IHF1YWxpZmllZCBjYWxsXCIsIG5vZGVMb2NhdGlvbihhcmd1bWVudC5jYWxsZWUucHJvcGVydHksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBhcmd1bWVudCA9IGFyZ3VtZW50LmNhbGxlZS5vYmplY3RcbiAgfVxuXG4gIHJldHVybiB7ZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSwga2luZDogXCJQcmludFN0YXRlbWVudFwiLCBsb2NhdGlvbn1cbn1cblxuLyoqXG4gKiBQYXJzZXMgSmF2YVNjcmlwdCBvciBUeXBlU2NyaXB0IGludG8gdGhlIHNoYXJlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBQYXJzZXIgaW5wdXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGlucHV0Lmxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuc291cmNlIC0gU291cmNlIHRleHQuXG4gKiBAcGFyYW0ge3JlYWRvbmx5IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdENhcGFiaWxpdHlEZWNsYXJhdGlvbltdfSBbaW5wdXQuY2FwYWJpbGl0aWVzXSAtIENvbXBpbGVyLWF1dGhvcml6ZWQgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHt7aXNFbnRyeTogYm9vbGVhbiwgZnVuY3Rpb25zOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uPiwgcmVjb3JkczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+LCBlcnJvcnM/OiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPiwgdmFsdWVSZWNvcmRzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fX0gW2lucHV0LnByb2dyYW1dIC0gUmVzb2x2ZWQgcHJvZ3JhbSBpbXBvcnRzIGFuZCBlbnRyeSByb2xlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBTZW1hbnRpYyBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUphdmFTY3JpcHRUeXBlU2NyaXB0KHtjYXBhYmlsaXRpZXMgPSBbXSwgZmlsZW5hbWUsIGxhbmd1YWdlLCBzb3VyY2UsIHByb2dyYW19KSB7XG4gIGNvbnN0IGZpbGUgPSBwYXJzZUJhYmVsU291cmNlKHtmaWxlbmFtZSwgbGFuZ3VhZ2UsIHNvdXJjZSwgc291cmNlVHlwZTogcHJvZ3JhbSA/IFwibW9kdWxlXCIgOiBcInNjcmlwdFwifSlcbiAgY29uc3QgdG9rZW5zID0gZmlsZS50b2tlbnMgPz8gW11cbiAgY29uc3QgdG9rZW5JbmRleCA9IHtieVN0YXJ0OiBuZXcgTWFwKHRva2Vucy5tYXAoKHRva2VuKSA9PiBbdG9rZW4uc3RhcnQsIHRva2VuXSkpLCB0b2tlbnN9XG4gIGNvbnN0IGNhbm9uaWNhbFplcm9SZXF1aXJlZCA9IHBhcnNlclRyZWVSZXF1aXJlc0Nhbm9uaWNhbFplcm8oZmlsZS5wcm9ncmFtKVxuXG4gIHJlbWVtYmVyVG9rZW5zKGZpbGUsIHRva2VuSW5kZXgpXG4gIGNvbnN0IG51bGxDaGVja09wdE91dCA9IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiXG4gICAgPyBmaWxlLmNvbW1lbnRzPy5maW5kKChjb21tZW50KSA9PiBjb21tZW50LnZhbHVlLnRyaW0oKSA9PSBcIkB0cy1ub2NoZWNrXCIpXG4gICAgOiB1bmRlZmluZWRcblxuICBpZiAobnVsbENoZWNrT3B0T3V0KSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImRpc2FibGVkIFR5cGVTY3JpcHQgY2hlY2tpbmcgZGlyZWN0aXZlXCIsIGxvY2F0aW9uRnJvbU9mZnNldHMoXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIHNvdXJjZSxcbiAgICAgIG51bGxDaGVja09wdE91dC5zdGFydCA/PyAwLFxuICAgICAgbnVsbENoZWNrT3B0T3V0LmVuZCA/PyBzb3VyY2UubGVuZ3RoXG4gICAgKSlcbiAgfVxuICBpZiAoZmlsZS5wcm9ncmFtLmRpcmVjdGl2ZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJ0b3AtbGV2ZWwgZGlyZWN0aXZlXCIsIG5vZGVMb2NhdGlvbihmaWxlLnByb2dyYW0uZGlyZWN0aXZlc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuU3RhdGVtZW50W119ICovXG4gIGxldCBzZW1hbnRpY05vZGVzID0gW11cblxuICBmb3IgKGNvbnN0IG5vZGUgb2YgZmlsZS5wcm9ncmFtLmJvZHkpIHtcbiAgICBpZiAobm9kZS50eXBlID09IFwiSW1wb3J0RGVjbGFyYXRpb25cIikge1xuICAgICAgaWYgKCFwcm9ncmFtKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiaW1wb3J0IGRlY2xhcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChub2RlLnR5cGUgPT0gXCJFeHBvcnROYW1lZERlY2xhcmF0aW9uXCIpIHtcbiAgICAgIGlmICghcHJvZ3JhbSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImV4cG9ydCBkZWNsYXJhdGlvblwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBpZiAobm9kZS5zb3VyY2UgfHwgbm9kZS5kZWNsYXJhdGlvbiAmJiAhW1wiQ2xhc3NEZWNsYXJhdGlvblwiLCBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIl0uaW5jbHVkZXMobm9kZS5kZWNsYXJhdGlvbi50eXBlKSkge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwicmUtZXhwb3J0IG9yIHVuc3VwcG9ydGVkIGV4cG9ydGVkIGRlY2xhcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmRlY2xhcmF0aW9uKSB7XG4gICAgICAgIGlmICghbm9kZS5kZWNsYXJhdGlvbi5sZWFkaW5nQ29tbWVudHMgJiYgbm9kZS5sZWFkaW5nQ29tbWVudHMpIG5vZGUuZGVjbGFyYXRpb24ubGVhZGluZ0NvbW1lbnRzID0gbm9kZS5sZWFkaW5nQ29tbWVudHNcbiAgICAgICAgc2VtYW50aWNOb2Rlcy5wdXNoKC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gKi8gKG5vZGUuZGVjbGFyYXRpb24pKVxuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKG5vZGUudHlwZSA9PSBcIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvblwiIHx8IG5vZGUudHlwZSA9PSBcIkV4cG9ydEFsbERlY2xhcmF0aW9uXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgbm9kZS50eXBlLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIHNlbWFudGljTm9kZXMucHVzaChub2RlKVxuICB9XG4gIHNlbWFudGljTm9kZXMgPSB0YXNrMDM0SmF2YVNjcmlwdE5vZGVzKHNlbWFudGljTm9kZXMsIGNhcGFiaWxpdGllcywgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNsYXNzTm9kZXMgPSBzZW1hbnRpY05vZGVzLmZpbHRlcigobm9kZSkgPT4gbm9kZS50eXBlID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKVxuICBjb25zdCBlcnJvck5vZGVzID0gY2xhc3NOb2Rlcy5maWx0ZXIoKG5vZGUpID0+IG5vZGUuc3VwZXJDbGFzcz8udHlwZSA9PSBcIklkZW50aWZpZXJcIiAmJiBub2RlLnN1cGVyQ2xhc3MubmFtZSA9PSBcIkVycm9yXCIpXG4gIGNvbnN0IHJlZmVyZW5jZUNsYXNzTm9kZXMgPSBjbGFzc05vZGVzLmZpbHRlcigobm9kZSkgPT4gIWVycm9yTm9kZXMuaW5jbHVkZXMobm9kZSkgJiZcbiAgICBub2RlLmJvZHkuYm9keS5zb21lKChtZW1iZXIpID0+IG1lbWJlci50eXBlID09IFwiQ2xhc3NQcm9wZXJ0eVwiIHx8IG1lbWJlci50eXBlID09IFwiQ2xhc3NQcml2YXRlUHJvcGVydHlcIikpXG4gIGNvbnN0IHJlY29yZE5vZGVzID0gY2xhc3NOb2Rlcy5maWx0ZXIoKG5vZGUpID0+ICFlcnJvck5vZGVzLmluY2x1ZGVzKG5vZGUpICYmICFyZWZlcmVuY2VDbGFzc05vZGVzLmluY2x1ZGVzKG5vZGUpKVxuICBjb25zdCBlcnJvckRlY2xhcmF0aW9ucyA9IGVycm9yTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT4gKHtcbiAgICBpZDogYGVycm9yOiR7aW5kZXh9YCxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvckRlY2xhcmF0aW9uXCIpLFxuICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgbmFtZTogbm9kZS5pZD8ubmFtZSA/PyBcIlwiXG4gIH0pKVxuICBjb25zdCByZWNvcmREZWNsYXJhdGlvbnMgPSByZWNvcmROb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgaWQgPSBgcmVjb3JkOiR7aW5kZXh9YFxuICAgIGNvbnN0IHR5cGVQYXJhbWV0ZXJzID0gbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCJcbiAgICAgID8gdHlwZVNjcmlwdFR5cGVQYXJhbWV0ZXJzKC8qKiBAdHlwZSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlRTVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gKi8gKG5vZGUudHlwZVBhcmFtZXRlcnMpLCBpZCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIDogY2xhc3NKc2RvY1R5cGVQYXJhbWV0ZXJzKG5vZGUsIGlkLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZpZWxkczogW10sXG4gICAgICBpZCxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY29yZERlY2xhcmF0aW9uXCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5hbWU6IG5vZGUuaWQ/Lm5hbWUgPz8gXCJcIixcbiAgICAgIC4uLih0eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgICB9XG4gIH0pXG4gIGNvbnN0IGNsYXNzRGVjbGFyYXRpb25zID0gcmVmZXJlbmNlQ2xhc3NOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiAoe1xuICAgIGNvbnN0cnVjdG9yOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNvbnN0cnVjdG9yRGVjbGFyYXRpb259ICovICh7fSksXG4gICAgZmllbGRzOiBbXSwgaWQ6IGBjbGFzczoke2luZGV4fWAsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNsYXNzRGVjbGFyYXRpb25cIiksXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSwgbWV0aG9kczogW10sIG5hbWU6IG5vZGUuaWQ/Lm5hbWUgPz8gXCJcIlxuICB9KSlcbiAgY29uc3QgcmVjb3JkTmFtZXMgPSAvKiogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSAqLyAoXG4gICAgbmV3IE1hcChwcm9ncmFtPy5yZWNvcmRzID8/IFtdKSlcbiAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBjYXBhYmlsaXRpZXMuZmxhdE1hcCgoe3Jlc291cmNlc30pID0+IHJlc291cmNlcykpIHJlY29yZE5hbWVzLnNldChyZXNvdXJjZS5uYW1lLCByZXNvdXJjZSlcbiAgY29uc3QgdmFsdWVSZWNvcmROYW1lcyA9IC8qKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn0gKi8gKFxuICAgIG5ldyBNYXAocHJvZ3JhbT8udmFsdWVSZWNvcmRzID8/IHByb2dyYW0/LnJlY29yZHMgPz8gW10pKVxuICBjb25zdCBlcnJvck5hbWVzID0gbmV3IE1hcChwcm9ncmFtPy5lcnJvcnMgPz8gW10pXG4gIGZvciAoY29uc3QgZmFpbHVyZSBvZiBjYXBhYmlsaXRpZXMuZmxhdE1hcCgoe2ZhaWx1cmVzfSkgPT4gZmFpbHVyZXMpKSB7XG4gICAgZXJyb3JOYW1lcy5zZXQoZmFpbHVyZS5uYW1lLCAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChmYWlsdXJlKSkpXG4gIH1cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBlcnJvckRlY2xhcmF0aW9ucykgZXJyb3JOYW1lcy5zZXQoZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyYXRpb24pXG4gIGNvbnN0IGVycm9yc0J5SWQgPSBuZXcgTWFwKFsuLi5lcnJvck5hbWVzLnZhbHVlcygpXS5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGVycm9ycyA9IGVycm9yTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT4gY29udmVydEphdmFTY3JpcHRFcnJvcihub2RlLCBlcnJvckRlY2xhcmF0aW9uc1tpbmRleF0sIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiByZWNvcmREZWNsYXJhdGlvbnMpIHJlY29yZE5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiByZWNvcmREZWNsYXJhdGlvbnMpIHZhbHVlUmVjb3JkTmFtZXMuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGNsYXNzRGVjbGFyYXRpb25zKSByZWNvcmROYW1lcy5zZXQoZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyYXRpb24pXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgY2xhc3NEZWNsYXJhdGlvbnMpIHZhbHVlUmVjb3JkTmFtZXMuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uKVxuICBjb25zdCB2YWx1ZVJlY29yZHNCeUlkID0gbmV3IE1hcChyZWNvcmREZWNsYXJhdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBkZWNsYXJhdGlvbl0pKVxuICBjb25zdCBjbGFzc2VzQnlJZCA9IG5ldyBNYXAoY2xhc3NEZWNsYXJhdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBkZWNsYXJhdGlvbl0pKVxuICBjb25zdCBjbGFzc2VzID0gcmVmZXJlbmNlQ2xhc3NOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiBwcmVkZWNsYXJlUmVmZXJlbmNlQ2xhc3MoXG4gICAgbm9kZSwgY2xhc3NEZWNsYXJhdGlvbnNbaW5kZXhdLCByZWNvcmROYW1lcywgbGFuZ3VhZ2UsIGZpbGVuYW1lLCBzb3VyY2VcbiAgKSlcbiAgY29uc3QgZnVuY3Rpb25Ob2RlcyA9IHNlbWFudGljTm9kZXMuZmlsdGVyKChub2RlKSA9PiBub2RlLnR5cGUgPT0gXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IHNpZ25hdHVyZXMgPSBmdW5jdGlvbk5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+XG4gICAgY29udmVydEZ1bmN0aW9uU2lnbmF0dXJlKG5vZGUsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgYGZ1bmN0aW9uOiR7aW5kZXh9YCkpXG4gIGNvbnN0IGZ1bmN0aW9uU2lnbmF0dXJlcyA9IG5ldyBNYXAoWy4uLnByb2dyYW0/LmZ1bmN0aW9ucyA/PyBbXV0ubWFwKChbbG9jYWxOYW1lLCBkZWNsYXJhdGlvbl0pID0+IFtsb2NhbE5hbWUsIHtcbiAgICBsb2NhdGlvbjogZGVjbGFyYXRpb24ubG9jYXRpb24sXG4gICAgbmFtZTogbG9jYWxOYW1lLFxuICAgIG5hbWVMb2NhdGlvbjogZGVjbGFyYXRpb24ubG9jYXRpb24sXG4gICAgcGFyYW1ldGVyczogZGVjbGFyYXRpb24ucGFyYW1ldGVycyxcbiAgICByZXR1cm5UeXBlOiBkZWNsYXJhdGlvbi5yZXR1cm5UeXBlLFxuICAgIC4uLihkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyczogZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnN9IDoge30pXG4gIH1dKSlcbiAgZm9yIChjb25zdCBvcGVyYXRpb24gb2YgY2FwYWJpbGl0aWVzLmZsYXRNYXAoKHtvcGVyYXRpb25zfSkgPT4gb3BlcmF0aW9ucykpIHtcbiAgICBpZiAoIWZ1bmN0aW9uU2lnbmF0dXJlcy5oYXMob3BlcmF0aW9uLm5hbWUpKSBmdW5jdGlvblNpZ25hdHVyZXMuc2V0KG9wZXJhdGlvbi5uYW1lLCB7XG4gICAgICBsb2NhdGlvbjogbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBuYW1lOiBvcGVyYXRpb24ubmFtZSxcbiAgICAgIG5hbWVMb2NhdGlvbjogbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBwYXJhbWV0ZXJzOiBvcGVyYXRpb24ucGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4gKHsuLi5wYXJhbWV0ZXIsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlBhcmFtZXRlclwiKSwgbG9jYXRpb246IG1vZHVsZUxvY2F0aW9uKGZpbGVuYW1lLCBzb3VyY2UpfSkpLFxuICAgICAgcmV0dXJuVHlwZTogb3BlcmF0aW9uLnJldHVyblR5cGVcbiAgICB9KVxuICB9XG4gIGZvciAoY29uc3Qgc2lnbmF0dXJlIG9mIHNpZ25hdHVyZXMpIGZ1bmN0aW9uU2lnbmF0dXJlcy5zZXQoc2lnbmF0dXJlLm5hbWUsIHNpZ25hdHVyZSlcbiAgY29uc3QgcmVjb3JkcyA9IHJlY29yZE5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiXG4gICAgPyBjb252ZXJ0VHlwZVNjcmlwdFJlY29yZChub2RlLCByZWNvcmREZWNsYXJhdGlvbnNbaW5kZXhdLCByZWNvcmROYW1lcywgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICA6IGNvbnZlcnRKYXZhU2NyaXB0UmVjb3JkKG5vZGUsIHJlY29yZERlY2xhcmF0aW9uc1tpbmRleF0sIHJlY29yZE5hbWVzLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHJlZmVyZW5jZUNsYXNzTm9kZXMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29udmVydFJlZmVyZW5jZUNsYXNzQm9kaWVzKHJlZmVyZW5jZUNsYXNzTm9kZXNbaW5kZXhdLCBjbGFzc2VzW2luZGV4XSwgcmVjb3JkTmFtZXMsIHZhbHVlUmVjb3JkTmFtZXMsXG4gICAgICB2YWx1ZVJlY29yZHNCeUlkLCBjbGFzc2VzQnlJZCwgZnVuY3Rpb25TaWduYXR1cmVzLCBlcnJvck5hbWVzLCBlcnJvcnNCeUlkLCBsYW5ndWFnZSwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgIGNhbm9uaWNhbFplcm9SZXF1aXJlZClcbiAgfVxuICBjb25zdCBmdW5jdGlvbnMgPSBmdW5jdGlvbk5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+XG4gICAgY29udmVydEZ1bmN0aW9uKG5vZGUsIHNpZ25hdHVyZXNbaW5kZXhdLCBmdW5jdGlvblNpZ25hdHVyZXMsIHJlY29yZE5hbWVzLCB2YWx1ZVJlY29yZE5hbWVzLCB2YWx1ZVJlY29yZHNCeUlkLCBjbGFzc2VzQnlJZCxcbiAgICAgIGVycm9yTmFtZXMsIGVycm9yc0J5SWQsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlLCBjYW5vbmljYWxaZXJvUmVxdWlyZWQpKVxuICBjb25zdCBlbnRyeU5vZGVzID0gc2VtYW50aWNOb2Rlcy5maWx0ZXIoKG5vZGUpID0+IG5vZGUudHlwZSAhPSBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiAmJiBub2RlLnR5cGUgIT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IGxvY2F0aW9uID0gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAocHJvZ3JhbSAmJiAhcHJvZ3JhbS5pc0VudHJ5ICYmIGVudHJ5Tm9kZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJ0b3AtbGV2ZWwgc2lkZSBlZmZlY3Qgb3V0c2lkZSB0aGUgc2VsZWN0ZWQgZW50cnkgbW9kdWxlXCIsIG5vZGVMb2NhdGlvbihlbnRyeU5vZGVzWzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBlbnRyeUxvY2F0aW9uID0gZW50cnlOb2Rlcy5sZW5ndGggPT0gMCA/IGxvY2F0aW9uIDogbG9jYXRpb25Gcm9tT2Zmc2V0cyhcbiAgICBmaWxlbmFtZSxcbiAgICBzb3VyY2UsXG4gICAgZW50cnlOb2Rlc1swXS5zdGFydCA/PyAwLFxuICAgIGVudHJ5Tm9kZXMuYXQoLTEpPy5lbmQgPz8gc291cmNlLmxlbmd0aFxuICApXG4gIGNvbnN0IGVudHJ5QmxvY2sgPSBjb252ZXJ0QmxvY2soXG4gICAgZW50cnlOb2RlcyxcbiAgICBsYW5ndWFnZSxcbiAgICBmaWxlbmFtZSxcbiAgICBzb3VyY2UsXG4gICAgY2Fub25pY2FsWmVyb1JlcXVpcmVkLFxuICAgIHtiaW5kaW5nczogbmV3IE1hcCgpLCBjbGFzc2VzOiBjbGFzc2VzQnlJZCwgZXJyb3JOYW1lcywgZXJyb3JzOiBlcnJvcnNCeUlkLCBmdW5jdGlvbnM6IGZ1bmN0aW9uU2lnbmF0dXJlcyxcbiAgICAgIG9yZGVyZWRNYXBEZWNsYXJhdGlvbnM6IG9yZGVyZWRNYXBEZWNsYXJhdGlvbnNGb3IoZW50cnlOb2RlcyksIHJlY29yZE5hbWVzLCByZWNvcmRzOiB2YWx1ZVJlY29yZHNCeUlkLCB2YWx1ZVJlY29yZE5hbWVzfSxcbiAgICBlbnRyeUxvY2F0aW9uXG4gIClcblxuICBpZiAoIXByb2dyYW0gJiYgZnVuY3Rpb25zLmxlbmd0aCA9PSAwICYmIGNhcGFiaWxpdGllcy5sZW5ndGggPT0gMCAmJiAhYmxvY2tSZWZlcmVuY2VzUHJvdGVjdGVkRW50cnkoZW50cnlCbG9jaykpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwibW9kdWxlIHdpdGhvdXQgYSBmdW5jdGlvblwiLCBsb2NhdGlvbilcbiAgfVxuICByZXR1cm4ge1xuICAgIGVudHJ5UG9pbnQ6IHtcbiAgICAgIGJvZHk6IGVudHJ5QmxvY2ssXG4gICAgICBraW5kOiBcIkVudHJ5UG9pbnRcIixcbiAgICAgIGxvY2F0aW9uOiBlbnRyeUxvY2F0aW9uXG4gICAgfSxcbiAgICBmdW5jdGlvbnMsXG4gICAga2luZDogXCJNb2R1bGVcIixcbiAgICBsb2NhdGlvbixcbiAgICAuLi4oZXJyb3JzLmxlbmd0aCA+IDAgPyB7ZXJyb3JzfSA6IHt9KSxcbiAgICAuLi4oY2xhc3Nlcy5sZW5ndGggPiAwID8ge2NsYXNzZXN9IDoge30pLFxuICAgIC4uLihyZWNvcmRzLmxlbmd0aCA+IDAgPyB7cmVjb3Jkc30gOiB7fSlcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZXMgZXhhY3QgcHJvdGVjdGVkIE5vZGUgcHJvYmUgc3VwcG9ydCBiZWZvcmUgcG9ydGFibGUgY29udmVyc2lvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlN0YXRlbWVudFtdfSBub2RlcyAtIFBhcnNlZCB0b3AtbGV2ZWwgc3RhdGVtZW50cy5cbiAqIEBwYXJhbSB7cmVhZG9ubHkgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0Q2FwYWJpbGl0eURlY2xhcmF0aW9uW119IGNhcGFiaWxpdGllcyAtIEF1dGhvcml6ZWQgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBsYW5ndWFnZSAtIFNvdXJjZSBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLlN0YXRlbWVudFtdfSBQb3J0YWJsZSBzdGF0ZW1lbnRzLlxuICovXG5mdW5jdGlvbiB0YXNrMDM0SmF2YVNjcmlwdE5vZGVzKG5vZGVzLCBjYXBhYmlsaXRpZXMsIGxhbmd1YWdlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICghaXNUYXNrMDM0UmVzb3VyY2VQcm9iZShjYXBhYmlsaXRpZXMpKSByZXR1cm4gbm9kZXNcbiAgY29uc3QgZmlyc3QgPSBub2Rlc1swXVxuICBjb25zdCBtYXJrZXIgPSBmaXJzdD8ubGVhZGluZ0NvbW1lbnRzPy5zb21lKChjb21tZW50KSA9PiBjb21tZW50LnR5cGUgPT0gXCJDb21tZW50QmxvY2tcIiAmJlxuICAgIGNvbW1lbnQudmFsdWUudHJpbSgpID09IFwic2VtYW50aWZvbGQtdGFzazAzNC1zdXBwb3J0XCIpXG5cbiAgaWYgKCFtYXJrZXIpIHJldHVybiBub2Rlc1xuICBpZiAoIWhhc0V4YWN0RWZmZWN0U3VwcG9ydChzb3VyY2UsIGxhbmd1YWdlKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJtYWxmb3JtZWQgcHJvdGVjdGVkIFRhc2sgMDM0IHN1cHBvcnRcIiwgbm9kZUxvY2F0aW9uKGZpcnN0LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBleHBlY3RlZCA9IFtcbiAgICBbXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIsIFwiX19zZW1hbnRpZm9sZFRhc2swMzRGc1wiXSwgW1wiQ2xhc3NEZWNsYXJhdGlvblwiLCBcIlByb2JlT3BlcmF0aW9uRmFpbHVyZVwiXSxcbiAgICBbXCJDbGFzc0RlY2xhcmF0aW9uXCIsIFwiUHJvYmVBY3F1aXJlRmFpbHVyZVwiXSwgW1wiQ2xhc3NEZWNsYXJhdGlvblwiLCBcIlByb2JlUmVhZEZhaWx1cmVcIl0sXG4gICAgW1wiQ2xhc3NEZWNsYXJhdGlvblwiLCBcIlByb2JlQ2xvc2VGYWlsdXJlXCJdLCBbXCJDbGFzc0RlY2xhcmF0aW9uXCIsIFwiUHJvYmVSZXNvdXJjZUNsb3NlZFwiXSxcbiAgICBbXCJDbGFzc0RlY2xhcmF0aW9uXCIsIFwiUHJvYmVSZXNvdXJjZVwiXSwgW1wiVmFyaWFibGVEZWNsYXJhdGlvblwiLCBcIl9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2VcIl0sXG4gICAgW1wiRnVuY3Rpb25EZWNsYXJhdGlvblwiLCBcInByb2JlRWZmZWN0XCJdLCBbXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIsIFwicHJvYmVBY3F1aXJlXCJdLFxuICAgIFtcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiwgXCJwcm9iZVJlYWRcIl0sIFtcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiwgXCJwcm9iZUNsb3NlXCJdLCBbXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIsIFwicHJvYmVUcmFjZVwiXVxuICBdXG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgZGVjbGFyYXRpb24gbmFtZSB1c2VkIHRvIHZlcmlmeSBvbmUgcHJvdGVjdGVkIHN1cHBvcnQgc3RhdGVtZW50LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5TdGF0ZW1lbnQgfCB1bmRlZmluZWR9IG5vZGUgLSBDYW5kaWRhdGUgc3RhdGVtZW50LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBEZWNsYXJlZCBuYW1lLlxuICAgKi9cbiAgY29uc3Qgbm9kZU5hbWUgPSAobm9kZSkgPT4ge1xuICAgIGlmICghbm9kZSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmIChub2RlLnR5cGUgPT0gXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIgJiYgbm9kZS5kZWNsYXJhdGlvbnMubGVuZ3RoID09IDEgJiYgbm9kZS5kZWNsYXJhdGlvbnNbMF0uaWQudHlwZSA9PSBcIklkZW50aWZpZXJcIikge1xuICAgICAgcmV0dXJuIG5vZGUuZGVjbGFyYXRpb25zWzBdLmlkLm5hbWVcbiAgICB9XG4gICAgY29uc3QgaWQgPSBSZWZsZWN0LmdldChub2RlLCBcImlkXCIpXG4gICAgcmV0dXJuIGlkICYmIHR5cGVvZiBpZCA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmdldChpZCwgXCJuYW1lXCIpID09IFwic3RyaW5nXCIgPyBSZWZsZWN0LmdldChpZCwgXCJuYW1lXCIpIDogdW5kZWZpbmVkXG4gIH1cbiAgY29uc3QgbWF0Y2hlcyA9IGV4cGVjdGVkLmV2ZXJ5KChbdHlwZSwgbmFtZV0sIGluZGV4KSA9PiBub2Rlc1tpbmRleF0/LnR5cGUgPT0gdHlwZSAmJiBub2RlTmFtZShub2Rlc1tpbmRleF0pID09IG5hbWUpXG4gIGNvbnN0IG5leHQgPSBub2Rlc1tleHBlY3RlZC5sZW5ndGhdXG4gIGNvbnN0IGVuZGVkID0gbmV4dD8ubGVhZGluZ0NvbW1lbnRzPy5zb21lKChjb21tZW50KSA9PiBjb21tZW50LnR5cGUgPT0gXCJDb21tZW50QmxvY2tcIiAmJlxuICAgIGNvbW1lbnQudmFsdWUudHJpbSgpID09IFwic2VtYW50aWZvbGQtdGFzazAzNC1zdXBwb3J0LWVuZFwiKVxuXG4gIGlmICghbWF0Y2hlcyB8fCBuZXh0ICYmICFlbmRlZCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJtYWxmb3JtZWQgcHJvdGVjdGVkIFRhc2sgMDM0IHN1cHBvcnRcIiwgbm9kZUxvY2F0aW9uKGZpcnN0LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICByZXR1cm4gbm9kZXMuc2xpY2UoZXhwZWN0ZWQubGVuZ3RoKVxufVxuXG4vKipcbiAqIEludm9rZXMgQmFiZWwgYW5kIG5vcm1hbGl6ZXMgc3ludGF4IGZhaWx1cmVzLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gUGFyc2VyIGlucHV0LlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LmZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwifSBpbnB1dC5sYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LnNvdXJjZSAtIFNvdXJjZSB0ZXh0LlxuICogQHBhcmFtIHtcIm1vZHVsZVwiIHwgXCJzY3JpcHRcIn0gaW5wdXQuc291cmNlVHlwZSAtIEV4cGxpY2l0IHBhcnNlciBnb2FsLlxuICogQHJldHVybnMge2ltcG9ydChcIkBiYWJlbC9wYXJzZXJcIikuUGFyc2VSZXN1bHQ8aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLkZpbGU+fSBCYWJlbCBmaWxlLlxuICovXG5mdW5jdGlvbiBwYXJzZUJhYmVsU291cmNlKHtmaWxlbmFtZSwgbGFuZ3VhZ2UsIHNvdXJjZSwgc291cmNlVHlwZX0pIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGFyc2VCYWJlbChzb3VyY2UsIHtcbiAgICAgIGFsbG93QXdhaXRPdXRzaWRlRnVuY3Rpb246IHRydWUsXG4gICAgICBwbHVnaW5zOiBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiA/IFtcImRlY29yYXRvcnMtbGVnYWN5XCIsIFwidHlwZXNjcmlwdFwiXSA6IFtcImRlY29yYXRvcnMtbGVnYWN5XCJdLFxuICAgICAgc291cmNlRmlsZW5hbWU6IGZpbGVuYW1lLFxuICAgICAgc291cmNlVHlwZSxcbiAgICAgIHRva2VuczogdHJ1ZVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHBhcnNlRmFpbHVyZShsYW5ndWFnZSwgZXJyb3IsIGJhYmVsUGFyc2VyRmFpbHVyZUxvY2F0aW9uKGVycm9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxufVxuXG4vKipcbiAqIFJlYWRzIG9ubHkgcGFyc2VyLW93bmVkIEVTTSBpbXBvcnQvZXhwb3J0IGRlY2xhcmF0aW9ucyBmb3IgcHJvZ3JhbSBhc3NlbWJseS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5maWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7XCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gaW5wdXQubGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5zb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHt7aW1wb3J0czoge2RlY2xhcmF0aW9uTG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBpbXBvcnRlZE5hbWU6IHN0cmluZywgaW1wb3J0ZWROYW1lTG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBsb2NhbE5hbWU6IHN0cmluZywgbG9jYWxOYW1lTG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHBhdGhMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNwZWNpZmllcjogc3RyaW5nLCBzdGRsaWJDYW5kaWRhdGU/OiB0cnVlLCB0eXBlT25seTogYm9vbGVhbn1bXSwgZXhwb3J0czoge2RlY2xhcmF0aW9uTG9jYXRpb24/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgZXhwb3J0ZWROYW1lOiBzdHJpbmcsIGV4cG9ydGVkTmFtZUxvY2F0aW9uPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIGxvY2FsTmFtZTogc3RyaW5nLCBsb2NhbE5hbWVMb2NhdGlvbj86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHR5cGVPbmx5OiBib29sZWFufVtdfX0gUGFyc2VyLW93bmVkIEVTTSBtb2R1bGUgaGVhZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zcGVjdEphdmFTY3JpcHRUeXBlU2NyaXB0TW9kdWxlKHtmaWxlbmFtZSwgbGFuZ3VhZ2UsIHNvdXJjZX0pIHtcbiAgY29uc3QgZmlsZSA9IHBhcnNlQmFiZWxTb3VyY2Uoe2ZpbGVuYW1lLCBsYW5ndWFnZSwgc291cmNlLCBzb3VyY2VUeXBlOiBcIm1vZHVsZVwifSlcbiAgY29uc3QgdG9rZW5zID0gZmlsZS50b2tlbnMgPz8gW11cblxuICByZW1lbWJlclRva2VucyhmaWxlLCB7YnlTdGFydDogbmV3IE1hcCh0b2tlbnMubWFwKCh0b2tlbikgPT4gW3Rva2VuLnN0YXJ0LCB0b2tlbl0pKSwgdG9rZW5zfSlcbiAgY29uc3QgY29tbW9uSnMgPSBmaW5kQ29tbW9uSnNOb2RlKGZpbGUucHJvZ3JhbSlcblxuICBpZiAoY29tbW9uSnMpIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcIkNvbW1vbkpTIHJlcXVpcmUvbW9kdWxlIGV4cG9ydHNcIiwgbm9kZUxvY2F0aW9uKGNvbW1vbkpzLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgaW1wb3J0cyA9IFtdXG4gIGNvbnN0IGV4cG9ydHMgPSBbXVxuXG4gIGZvciAoY29uc3Qgbm9kZSBvZiBmaWxlLnByb2dyYW0uYm9keSkge1xuICAgIGlmIChub2RlLnR5cGUgPT0gXCJJbXBvcnREZWNsYXJhdGlvblwiKSB7XG4gICAgICBjb25zdCByZWxhdGl2ZSA9IG5vZGUuc291cmNlLnZhbHVlLnN0YXJ0c1dpdGgoXCIuL1wiKSB8fCBub2RlLnNvdXJjZS52YWx1ZS5zdGFydHNXaXRoKFwiLi4vXCIpXG4gICAgICBjb25zdCBzdGRsaWJDYW5kaWRhdGUgPSBub2RlLnNvdXJjZS52YWx1ZS5zdGFydHNXaXRoKFwic2VtYW50aWZvbGQ6XCIpIHx8IG5vZGUuc291cmNlLnZhbHVlLnN0YXJ0c1dpdGgoXCJub2RlOlwiKVxuXG4gICAgICBpZiAoIXJlbGF0aXZlICYmICFzdGRsaWJDYW5kaWRhdGUpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwiYmFyZSBwYWNrYWdlIGltcG9ydFwiLCBub2RlTG9jYXRpb24obm9kZS5zb3VyY2UsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgaWYgKG5vZGUuc3BlY2lmaWVycy5sZW5ndGggPT0gMCkgdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIFwic2lkZS1lZmZlY3Qtb25seSBpbXBvcnRcIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgaWYgKChub2RlLmF0dHJpYnV0ZXM/Lmxlbmd0aCA/PyAwKSA+IDAgfHwgKG5vZGUuYXNzZXJ0aW9ucz8ubGVuZ3RoID8/IDApID4gMCB8fCBSZWZsZWN0LmdldChub2RlLCBcInBoYXNlXCIpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImltcG9ydCBhdHRyaWJ1dGVzIG9yIHBoYXNlXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qgc3BlY2lmaWVyIG9mIG5vZGUuc3BlY2lmaWVycykge1xuICAgICAgICBpZiAoc3BlY2lmaWVyLnR5cGUgIT0gXCJJbXBvcnRTcGVjaWZpZXJcIiB8fCBzcGVjaWZpZXIuaW1wb3J0ZWQudHlwZSAhPSBcIklkZW50aWZpZXJcIikge1xuICAgICAgICAgIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBzcGVjaWZpZXIudHlwZSwgbm9kZUxvY2F0aW9uKHNwZWNpZmllciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICAgIH1cbiAgICAgICAgaW1wb3J0cy5wdXNoKHtcbiAgICAgICAgICBkZWNsYXJhdGlvbkxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgICAgaW1wb3J0ZWROYW1lOiBzcGVjaWZpZXIuaW1wb3J0ZWQubmFtZSxcbiAgICAgICAgICBpbXBvcnRlZE5hbWVMb2NhdGlvbjogaWRlbnRpZmllckxvY2F0aW9uKHNwZWNpZmllci5pbXBvcnRlZCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgICAgbG9jYWxOYW1lOiBzcGVjaWZpZXIubG9jYWwubmFtZSxcbiAgICAgICAgICBsb2NhbE5hbWVMb2NhdGlvbjogaWRlbnRpZmllckxvY2F0aW9uKHNwZWNpZmllci5sb2NhbCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihzcGVjaWZpZXIsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICAgIHBhdGhMb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUuc291cmNlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBzcGVjaWZpZXI6IG5vZGUuc291cmNlLnZhbHVlLFxuICAgICAgICAgIC4uLighcmVsYXRpdmUgPyB7c3RkbGliQ2FuZGlkYXRlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAodHJ1ZSl9IDoge30pLFxuICAgICAgICAgIHR5cGVPbmx5OiBub2RlLmltcG9ydEtpbmQgPT0gXCJ0eXBlXCIgfHwgc3BlY2lmaWVyLmltcG9ydEtpbmQgPT0gXCJ0eXBlXCJcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChub2RlLnR5cGUgPT0gXCJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb25cIiB8fCBub2RlLnR5cGUgPT0gXCJFeHBvcnRBbGxEZWNsYXJhdGlvblwiKSB7XG4gICAgICB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgbm9kZS50eXBlLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGlmIChub2RlLnR5cGUgIT0gXCJFeHBvcnROYW1lZERlY2xhcmF0aW9uXCIpIGNvbnRpbnVlXG4gICAgaWYgKG5vZGUuc291cmNlKSB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJyZS1leHBvcnRcIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGlmIChub2RlLmV4cG9ydEtpbmQgPT0gXCJ0eXBlXCIpIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInR5cGUtb25seSBleHBvcnRcIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGlmIChub2RlLmRlY2xhcmF0aW9uKSB7XG4gICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbi50eXBlICE9IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiICYmIG5vZGUuZGVjbGFyYXRpb24udHlwZSAhPSBcIkNsYXNzRGVjbGFyYXRpb25cIikge1xuICAgICAgICB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgXCJ1bnN1cHBvcnRlZCBleHBvcnRlZCBkZWNsYXJhdGlvblwiLCBub2RlTG9jYXRpb24obm9kZS5kZWNsYXJhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBpZGVudGlmaWVyID0gbm9kZS5kZWNsYXJhdGlvbi5pZFxuXG4gICAgICBpZiAoIWlkZW50aWZpZXIpIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcImFub255bW91cyBleHBvcnRlZCBkZWNsYXJhdGlvblwiLCBub2RlTG9jYXRpb24obm9kZS5kZWNsYXJhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBleHBvcnRzLnB1c2goe1xuICAgICAgICBkZWNsYXJhdGlvbkxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIGV4cG9ydGVkTmFtZTogaWRlbnRpZmllci5uYW1lLFxuICAgICAgICBleHBvcnRlZE5hbWVMb2NhdGlvbjogaWRlbnRpZmllckxvY2F0aW9uKGlkZW50aWZpZXIsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBsb2NhbE5hbWU6IGlkZW50aWZpZXIubmFtZSxcbiAgICAgICAgbG9jYWxOYW1lTG9jYXRpb246IGlkZW50aWZpZXJMb2NhdGlvbihpZGVudGlmaWVyLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbG9jYXRpb246IGlkZW50aWZpZXJMb2NhdGlvbihpZGVudGlmaWVyLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgdHlwZU9ubHk6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSlcbiAgICAgIH0pXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHNwZWNpZmllciBvZiBub2RlLnNwZWNpZmllcnMpIHtcbiAgICAgIGlmIChzcGVjaWZpZXIudHlwZSAhPSBcIkV4cG9ydFNwZWNpZmllclwiIHx8IHNwZWNpZmllci5sb2NhbC50eXBlICE9IFwiSWRlbnRpZmllclwiIHx8IHNwZWNpZmllci5leHBvcnRlZC50eXBlICE9IFwiSWRlbnRpZmllclwiKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBzcGVjaWZpZXIudHlwZSwgbm9kZUxvY2F0aW9uKHNwZWNpZmllciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBpZiAoc3BlY2lmaWVyLmV4cG9ydEtpbmQgPT0gXCJ0eXBlXCIpIHVuc3VwcG9ydGVkU3ludGF4KGxhbmd1YWdlLCBcInR5cGUtb25seSBleHBvcnRcIiwgbm9kZUxvY2F0aW9uKHNwZWNpZmllciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICBleHBvcnRzLnB1c2goe1xuICAgICAgICBkZWNsYXJhdGlvbkxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIGV4cG9ydGVkTmFtZTogc3BlY2lmaWVyLmV4cG9ydGVkLm5hbWUsXG4gICAgICAgIGV4cG9ydGVkTmFtZUxvY2F0aW9uOiBpZGVudGlmaWVyTG9jYXRpb24oc3BlY2lmaWVyLmV4cG9ydGVkLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbG9jYWxOYW1lOiBzcGVjaWZpZXIubG9jYWwubmFtZSxcbiAgICAgICAgbG9jYWxOYW1lTG9jYXRpb246IGlkZW50aWZpZXJMb2NhdGlvbihzcGVjaWZpZXIubG9jYWwsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKHNwZWNpZmllciwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIHR5cGVPbmx5OiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGR5bmFtaWMgPSBmaW5kRmFjYWRlVW5zYWZlSmF2YVNjcmlwdE5vZGUoZmlsZS5wcm9ncmFtLCBcImR5bmFtaWNcIiwgbmV3IFNldCgpKVxuXG4gIGlmIChkeW5hbWljKSBmYWNhZGVGcm9udGVuZEZhaWx1cmUobGFuZ3VhZ2UsIFwiU1RETElCX0ZBQ0FERV9EWU5BTUlDX1JFRkVSRU5DRVwiLFxuICAgIFwiRHluYW1pYyBpbXBvcnQgY2Fubm90IHByb3ZlIGEgc3RhbmRhcmQtbGlicmFyeSBmYWNhZGUgaWRlbnRpdHkuXCIsIG5vZGVMb2NhdGlvbihkeW5hbWljLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3Qgc3RkbGliQmluZGluZ3MgPSBuZXcgU2V0KGltcG9ydHMuZmlsdGVyKCh7c3RkbGliQ2FuZGlkYXRlfSkgPT4gc3RkbGliQ2FuZGlkYXRlKS5tYXAoKHtsb2NhbE5hbWV9KSA9PiBsb2NhbE5hbWUpKVxuXG4gIGlmIChzdGRsaWJCaW5kaW5ncy5zaXplID4gMCkge1xuICAgIGNvbnN0IG11dGF0aW9uID0gZmluZEZhY2FkZVVuc2FmZUphdmFTY3JpcHROb2RlKGZpbGUucHJvZ3JhbSwgXCJtdXRhdGlvblwiLCBzdGRsaWJCaW5kaW5ncylcblxuICAgIGlmIChtdXRhdGlvbikgZmFjYWRlRnJvbnRlbmRGYWlsdXJlKGxhbmd1YWdlLCBcIlNURExJQl9GQUNBREVfU0hBRE9XRURcIixcbiAgICAgIFwiQSBwYXJzZXItcHJvdmVkIHN0YW5kYXJkLWxpYnJhcnkgZmFjYWRlIGJpbmRpbmcgY2Fubm90IGJlIHJlYXNzaWduZWQgb3Igc2hhZG93ZWQuXCIsIG5vZGVMb2NhdGlvbihtdXRhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3QgcmVmbGVjdGlvbiA9IGZpbmRGYWNhZGVVbnNhZmVKYXZhU2NyaXB0Tm9kZShmaWxlLnByb2dyYW0sIFwicmVmbGVjdGlvblwiLCBzdGRsaWJCaW5kaW5ncylcblxuICAgIGlmIChyZWZsZWN0aW9uKSBmYWNhZGVGcm9udGVuZEZhaWx1cmUobGFuZ3VhZ2UsIFwiU1RETElCX0ZBQ0FERV9SRUZMRUNUSU9OX1VOU1VQUE9SVEVEXCIsXG4gICAgICBcIlJlZmxlY3RpdmUgbG9va3VwIGNhbm5vdCBwcmVzZXJ2ZSBhIHByb3ZlZCBzdGFuZGFyZC1saWJyYXJ5IGZhY2FkZSBzeW1ib2wgaWRlbnRpdHkuXCIsIG5vZGVMb2NhdGlvbihyZWZsZWN0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiB7ZXhwb3J0cywgaW1wb3J0c31cbn1cblxuLyoqXG4gKiBGaW5kcyBwYXJzZXItb3duZWQgZHluYW1pYywgbXV0YXRpbmcsIG9yIHJlZmxlY3RpdmUgY29uc3RydWN0cyByZWxldmFudCB0byBmYWNhZGUgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQmFiZWwgc3VidHJlZS5cbiAqIEBwYXJhbSB7XCJkeW5hbWljXCIgfCBcIm11dGF0aW9uXCIgfCBcInJlZmxlY3Rpb25cIn0gbW9kZSAtIFJlamVjdGVkIGNvbnN0cnVjdCBjbGFzcy5cbiAqIEBwYXJhbSB7U2V0PHN0cmluZz59IGJpbmRpbmdzIC0gUGFyc2VyLXByb3ZlZCBuYXRpdmUgZmFjYWRlIGJpbmRpbmdzLlxuICogQHBhcmFtIHtXZWFrU2V0PG9iamVjdD59IFtzZWVuXSAtIEN5Y2xlIGd1YXJkLlxuICogQHJldHVybnMge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlIHwgdW5kZWZpbmVkfSBGaXJzdCByZWplY3RlZCBwYXJzZXIgbm9kZS5cbiAqL1xuZnVuY3Rpb24gZmluZEZhY2FkZVVuc2FmZUphdmFTY3JpcHROb2RlKHZhbHVlLCBtb2RlLCBiaW5kaW5ncywgc2VlbiA9IG5ldyBXZWFrU2V0KCkpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT0gXCJvYmplY3RcIiB8fCBzZWVuLmhhcyh2YWx1ZSkpIHJldHVybiB1bmRlZmluZWRcbiAgc2Vlbi5hZGQodmFsdWUpXG4gIGNvbnN0IG5vZGUgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAodmFsdWUpXG5cbiAgaWYgKG1vZGUgPT0gXCJkeW5hbWljXCIgJiYgbm9kZS50eXBlID09IFwiSW1wb3J0RXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3Qgc291cmNlTm9kZSA9IG5vZGUuc291cmNlXG5cbiAgICBpZiAoaXNGYWNhZGVNb2R1bGVTdHJpbmdOb2RlKHNvdXJjZU5vZGUpKSByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9kZX0gKi8gKHZhbHVlKVxuICB9XG4gIGlmIChtb2RlID09IFwiZHluYW1pY1wiICYmIG5vZGUudHlwZSA9PSBcIkNhbGxFeHByZXNzaW9uXCIgJiYgbm9kZS5jYWxsZWUgJiYgdHlwZW9mIG5vZGUuY2FsbGVlID09IFwib2JqZWN0XCIgJiZcbiAgICBSZWZsZWN0LmdldChub2RlLmNhbGxlZSwgXCJ0eXBlXCIpID09IFwiSW1wb3J0XCIpIHtcbiAgICBjb25zdCBhcmd1bWVudHNfID0gQXJyYXkuaXNBcnJheShub2RlLmFyZ3VtZW50cykgPyBub2RlLmFyZ3VtZW50cyA6IFtdXG5cbiAgICBpZiAoaXNGYWNhZGVNb2R1bGVTdHJpbmdOb2RlKGFyZ3VtZW50c19bMF0pKSByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9kZX0gKi8gKHZhbHVlKVxuICB9XG4gIGlmIChtb2RlID09IFwicmVmbGVjdGlvblwiICYmIG5vZGUudHlwZSA9PSBcIkNhbGxFeHByZXNzaW9uXCIgJiYgbm9kZS5jYWxsZWUgJiYgdHlwZW9mIG5vZGUuY2FsbGVlID09IFwib2JqZWN0XCIgJiZcbiAgICBSZWZsZWN0LmdldChub2RlLmNhbGxlZSwgXCJ0eXBlXCIpID09IFwiSWRlbnRpZmllclwiICYmIFJlZmxlY3QuZ2V0KG5vZGUuY2FsbGVlLCBcIm5hbWVcIikgPT0gXCJldmFsXCIpIHtcbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9kZX0gKi8gKHZhbHVlKVxuICB9XG4gIGlmIChtb2RlID09IFwibXV0YXRpb25cIiAmJiAobm9kZS50eXBlID09IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIiB8fCBub2RlLnR5cGUgPT0gXCJVcGRhdGVFeHByZXNzaW9uXCIpKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gbm9kZS50eXBlID09IFwiQXNzaWdubWVudEV4cHJlc3Npb25cIiA/IG5vZGUubGVmdCA6IG5vZGUuYXJndW1lbnRcblxuICAgIGlmICh0YXJnZXQgJiYgdHlwZW9mIHRhcmdldCA9PSBcIm9iamVjdFwiICYmIFJlZmxlY3QuZ2V0KHRhcmdldCwgXCJ0eXBlXCIpID09IFwiSWRlbnRpZmllclwiICYmXG4gICAgICBiaW5kaW5ncy5oYXMoU3RyaW5nKFJlZmxlY3QuZ2V0KHRhcmdldCwgXCJuYW1lXCIpKSkpIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIkBiYWJlbC90eXBlc1wiKS5Ob2RlfSAqLyAodmFsdWUpXG4gIH1cbiAgZm9yIChjb25zdCBba2V5LCBjaGlsZF0gb2YgT2JqZWN0LmVudHJpZXMobm9kZSkpIHtcbiAgICBpZiAoW1wiZXh0cmFcIiwgXCJpbm5lckNvbW1lbnRzXCIsIFwibGVhZGluZ0NvbW1lbnRzXCIsIFwibG9jXCIsIFwidHJhaWxpbmdDb21tZW50c1wiXS5pbmNsdWRlcyhrZXkpKSBjb250aW51ZVxuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGNoaWxkKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gZmluZEZhY2FkZVVuc2FmZUphdmFTY3JpcHROb2RlKGl0ZW0sIG1vZGUsIGJpbmRpbmdzLCBzZWVuKVxuXG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZvdW5kID0gZmluZEZhY2FkZVVuc2FmZUphdmFTY3JpcHROb2RlKGNoaWxkLCBtb2RlLCBiaW5kaW5ncywgc2VlbilcblxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIENoZWNrcyBhIEJhYmVsIHN0cmluZyBsaXRlcmFsIGZvciBvbmUgY2F0YWxvZy1zdHlsZSBzdGRsaWIgbW9kdWxlIGlkZW50aXR5LlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIEJhYmVsIGltcG9ydCBhcmd1bWVudC9zb3VyY2Ugbm9kZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBleGFjdCBsaXRlcmFsIGlzIGEgZmFjYWRlIG1vZHVsZSBjYW5kaWRhdGUuXG4gKi9cbmZ1bmN0aW9uIGlzRmFjYWRlTW9kdWxlU3RyaW5nTm9kZSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2VcbiAgY29uc3Qgbm9kZSA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovICh2YWx1ZSlcbiAgY29uc3QgbGl0ZXJhbCA9IG5vZGUudmFsdWVcblxuICByZXR1cm4gbm9kZS50eXBlID09IFwiU3RyaW5nTGl0ZXJhbFwiICYmIHR5cGVvZiBsaXRlcmFsID09IFwic3RyaW5nXCIgJiZcbiAgICAobGl0ZXJhbC5zdGFydHNXaXRoKFwic2VtYW50aWZvbGQ6XCIpIHx8IGxpdGVyYWwuc3RhcnRzV2l0aChcIm5vZGU6XCIpKVxufVxuXG4vKipcbiAqIFRocm93cyBvbmUgc3RhYmxlIGxvY2F0ZWQgZmFjYWRlIGZyb250ZW5kIGRpYWdub3N0aWMuXG4gKiBAcGFyYW0ge1wiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCJ9IGxhbmd1YWdlIC0gU291cmNlIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgLSBTdGFibGUgZGlhZ25vc3RpYyBjb2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBEaWFnbm9zdGljIGRldGFpbC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gUGFyc2VyLW93bmVkIGxvY2F0aW9uLlxuICogQHJldHVybnMge25ldmVyfSBBbHdheXMgdGhyb3dzLlxuICovXG5mdW5jdGlvbiBmYWNhZGVGcm9udGVuZEZhaWx1cmUobGFuZ3VhZ2UsIGNvZGUsIG1lc3NhZ2UsIGxvY2F0aW9uKSB7XG4gIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe2NvZGUsIGxhbmd1YWdlLCBsb2NhdGlvbiwgbWVzc2FnZX0pXG59XG5cbi8qKlxuICogRmluZHMgQ29tbW9uSlMgY29uc3RydWN0cyB0aHJvdWdoIEJhYmVsIG5vZGVzIHJhdGhlciB0aGFuIHNvdXJjZS10ZXh0IG1hdGNoaW5nLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIEJhYmVsIHN1YnRyZWUuXG4gKiBAcGFyYW0ge1dlYWtTZXQ8b2JqZWN0Pn0gW3NlZW5dIC0gQ3ljbGUgZ3VhcmQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGJhYmVsL3R5cGVzXCIpLk5vZGUgfCB1bmRlZmluZWR9IFVuc3VwcG9ydGVkIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGZpbmRDb21tb25Kc05vZGUodmFsdWUsIHNlZW4gPSBuZXcgV2Vha1NldCgpKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9IFwib2JqZWN0XCIgfHwgc2Vlbi5oYXModmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkXG4gIHNlZW4uYWRkKHZhbHVlKVxuICBjb25zdCBub2RlID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKHZhbHVlKVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgY2FsbGVlID0gbm9kZS5jYWxsZWVcblxuICAgIGlmIChjYWxsZWUgJiYgdHlwZW9mIGNhbGxlZSA9PSBcIm9iamVjdFwiICYmIFJlZmxlY3QuZ2V0KGNhbGxlZSwgXCJ0eXBlXCIpID09IFwiSWRlbnRpZmllclwiICYmIFJlZmxlY3QuZ2V0KGNhbGxlZSwgXCJuYW1lXCIpID09IFwicmVxdWlyZVwiKSB7XG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9kZX0gKi8gKHZhbHVlKVxuICAgIH1cbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiTWVtYmVyRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3Qgb2JqZWN0ID0gbm9kZS5vYmplY3RcblxuICAgIGlmIChvYmplY3QgJiYgdHlwZW9mIG9iamVjdCA9PSBcIm9iamVjdFwiICYmIFJlZmxlY3QuZ2V0KG9iamVjdCwgXCJ0eXBlXCIpID09IFwiSWRlbnRpZmllclwiICYmXG4gICAgICBbXCJleHBvcnRzXCIsIFwibW9kdWxlXCJdLmluY2x1ZGVzKFN0cmluZyhSZWZsZWN0LmdldChvYmplY3QsIFwibmFtZVwiKSkpKSB7XG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCJAYmFiZWwvdHlwZXNcIikuTm9kZX0gKi8gKHZhbHVlKVxuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IFtrZXksIGNoaWxkXSBvZiBPYmplY3QuZW50cmllcyhub2RlKSkge1xuICAgIGlmIChbXCJleHRyYVwiLCBcImlubmVyQ29tbWVudHNcIiwgXCJsZWFkaW5nQ29tbWVudHNcIiwgXCJsb2NcIiwgXCJ0cmFpbGluZ0NvbW1lbnRzXCJdLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGQpKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2hpbGQpIHtcbiAgICAgICAgY29uc3QgZm91bmQgPSBmaW5kQ29tbW9uSnNOb2RlKGl0ZW0sIHNlZW4pXG5cbiAgICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmRcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZm91bmQgPSBmaW5kQ29tbW9uSnNOb2RlKGNoaWxkLCBzZWVuKVxuXG4gICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIEJhYmVsJ3MgemVyby1iYXNlZCBVVEYtMTYgZmFpbHVyZSBvZmZzZXQgd2hlbiBhdmFpbGFibGUuXG4gKiBAcGFyYW0ge3Vua25vd259IGVycm9yIC0gTmF0aXZlIEJhYmVsIHBhcnNlciBlcnJvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFJlcXVlc3RlZCBzb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBGYWlsdXJlIHJhbmdlLlxuICovXG5mdW5jdGlvbiBiYWJlbFBhcnNlckZhaWx1cmVMb2NhdGlvbihlcnJvciwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAoIWVycm9yIHx8IHR5cGVvZiBlcnJvciAhPSBcIm9iamVjdFwiKSByZXR1cm4gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgZGlyZWN0ID0gUmVmbGVjdC5nZXQoZXJyb3IsIFwicG9zXCIpXG4gIGNvbnN0IHBhcnNlckxvY2F0aW9uID0gUmVmbGVjdC5nZXQoZXJyb3IsIFwibG9jXCIpXG4gIGNvbnN0IGxvY2F0ZWQgPSBwYXJzZXJMb2NhdGlvbiAmJiB0eXBlb2YgcGFyc2VyTG9jYXRpb24gPT0gXCJvYmplY3RcIiA/IFJlZmxlY3QuZ2V0KHBhcnNlckxvY2F0aW9uLCBcImluZGV4XCIpIDogdW5kZWZpbmVkXG4gIGNvbnN0IG9mZnNldCA9IE51bWJlci5pc1NhZmVJbnRlZ2VyKGRpcmVjdCkgPyBkaXJlY3QgOiBsb2NhdGVkXG5cbiAgaWYgKHR5cGVvZiBvZmZzZXQgIT0gXCJudW1iZXJcIiB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIob2Zmc2V0KSB8fCBvZmZzZXQgPCAwIHx8IG9mZnNldCA+IHNvdXJjZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcbiAgfVxuXG4gIHJldHVybiBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIG9mZnNldCwgTWF0aC5taW4ob2Zmc2V0ICsgMSwgc291cmNlLmxlbmd0aCkpXG59XG5cbi8qKlxuICogQXNzb2NpYXRlcyBCYWJlbCBub2RlcyB3aXRoIHRoZWlyIHBhcnNlciB0b2tlbiBzdHJlYW0gd2l0aG91dCBsZWFraW5nIGl0IGludG8gc2VtYW50aWMgdmFsdWVzLlxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlIC0gQ3VycmVudCBwYXJzZXIgdmFsdWUuXG4gKiBAcGFyYW0ge0JhYmVsVG9rZW5JbmRleH0gdG9rZW5zIC0gSW5kZXhlZCBwYXJzZXIgdG9rZW5zLlxuICogQHBhcmFtIHtXZWFrU2V0PG9iamVjdD59IFt2aXNpdGVkXSAtIEN5Y2xlIHByb3RlY3Rpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVtZW1iZXJUb2tlbnModmFsdWUsIHRva2VucywgdmlzaXRlZCA9IG5ldyBXZWFrU2V0KCkpIHtcbiAgaWYgKHZpc2l0ZWQuaGFzKHZhbHVlKSkgcmV0dXJuXG5cbiAgdmlzaXRlZC5hZGQodmFsdWUpXG4gIG5vZGVUb2tlbnMuc2V0KHZhbHVlLCB0b2tlbnMpXG5cbiAgZm9yIChjb25zdCBjaGlsZCBvZiBPYmplY3QudmFsdWVzKHZhbHVlKSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGNoaWxkKSBpZiAoaXRlbSAmJiB0eXBlb2YgaXRlbSA9PSBcIm9iamVjdFwiKSByZW1lbWJlclRva2VucyhpdGVtLCB0b2tlbnMsIHZpc2l0ZWQpXG4gICAgfSBlbHNlIGlmIChjaGlsZCAmJiB0eXBlb2YgY2hpbGQgPT0gXCJvYmplY3RcIikgcmVtZW1iZXJUb2tlbnMoY2hpbGQsIHRva2VucywgdmlzaXRlZClcbiAgfVxufVxuIl19
|