semantifold 0.3.0 → 0.4.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 +58 -15
- package/build/index.d.ts +48 -2
- package/build/index.d.ts.map +1 -1
- package/build/index.js +57 -8
- package/build/src/artifact-path.d.ts +23 -1
- package/build/src/artifact-path.d.ts.map +1 -1
- package/build/src/artifact-path.js +45 -3
- package/build/src/artifacts.d.ts.map +1 -1
- package/build/src/artifacts.js +66 -1
- package/build/src/backends/c-validation.d.ts.map +1 -1
- package/build/src/backends/c-validation.js +7 -3
- package/build/src/backends/cpp-validation.d.ts.map +1 -1
- package/build/src/backends/cpp-validation.js +7 -3
- package/build/src/backends/csharp.js +7 -1
- package/build/src/backends/dart-runtime.d.ts +2 -0
- package/build/src/backends/dart-runtime.d.ts.map +1 -0
- package/build/src/backends/dart-runtime.js +41 -0
- package/build/src/backends/dart.d.ts +20 -0
- package/build/src/backends/dart.d.ts.map +1 -0
- package/build/src/backends/dart.js +321 -0
- package/build/src/backends/effects.d.ts +60 -0
- package/build/src/backends/effects.d.ts.map +1 -0
- package/build/src/backends/effects.js +746 -0
- package/build/src/backends/go.js +18 -4
- package/build/src/backends/identifiers.d.ts +36 -4
- package/build/src/backends/identifiers.d.ts.map +1 -1
- package/build/src/backends/identifiers.js +154 -10
- package/build/src/backends/index.d.ts.map +1 -1
- package/build/src/backends/index.js +27 -4
- package/build/src/backends/ios.d.ts +68 -0
- package/build/src/backends/ios.d.ts.map +1 -0
- package/build/src/backends/ios.js +1503 -0
- package/build/src/backends/java.d.ts.map +1 -1
- package/build/src/backends/java.js +429 -36
- package/build/src/backends/javascript.d.ts +6 -0
- package/build/src/backends/javascript.d.ts.map +1 -1
- package/build/src/backends/javascript.js +380 -24
- package/build/src/backends/kotlin-runtime.d.ts +3 -0
- package/build/src/backends/kotlin-runtime.d.ts.map +1 -0
- package/build/src/backends/kotlin-runtime.js +29 -0
- package/build/src/backends/kotlin.d.ts +23 -0
- package/build/src/backends/kotlin.d.ts.map +1 -0
- package/build/src/backends/kotlin.js +136 -0
- package/build/src/backends/native-validation.d.ts +2 -2
- package/build/src/backends/native-validation.d.ts.map +1 -1
- package/build/src/backends/native-validation.js +2 -2
- package/build/src/backends/ordered-expressions.d.ts.map +1 -1
- package/build/src/backends/ordered-expressions.js +39 -7
- package/build/src/backends/php-stdlib-support.d.ts +19 -0
- package/build/src/backends/php-stdlib-support.d.ts.map +1 -0
- package/build/src/backends/php-stdlib-support.js +227 -0
- package/build/src/backends/php.d.ts.map +1 -1
- package/build/src/backends/php.js +448 -33
- package/build/src/backends/program.d.ts +81 -0
- package/build/src/backends/program.d.ts.map +1 -0
- package/build/src/backends/program.js +1308 -0
- package/build/src/backends/python.js +7 -1
- package/build/src/backends/ruby.d.ts.map +1 -1
- package/build/src/backends/ruby.js +310 -24
- package/build/src/backends/rust-runtime.d.ts +7 -0
- package/build/src/backends/rust-runtime.d.ts.map +1 -0
- package/build/src/backends/rust-runtime.js +32 -0
- package/build/src/backends/rust-validation.d.ts +9 -0
- package/build/src/backends/rust-validation.d.ts.map +1 -0
- package/build/src/backends/rust-validation.js +78 -0
- package/build/src/backends/rust.d.ts +24 -0
- package/build/src/backends/rust.d.ts.map +1 -0
- package/build/src/backends/rust.js +344 -0
- package/build/src/backends/scalars.d.ts +14 -6
- package/build/src/backends/scalars.d.ts.map +1 -1
- package/build/src/backends/scalars.js +167 -17
- package/build/src/backends/shared.d.ts +23 -4
- package/build/src/backends/shared.d.ts.map +1 -1
- package/build/src/backends/shared.js +2158 -62
- package/build/src/backends/stdlib-support.d.ts +14 -0
- package/build/src/backends/stdlib-support.d.ts.map +1 -0
- package/build/src/backends/stdlib-support.js +237 -0
- package/build/src/backends/swift-runtime.d.ts +3 -0
- package/build/src/backends/swift-runtime.d.ts.map +1 -0
- package/build/src/backends/swift-runtime.js +14 -0
- package/build/src/backends/swift.d.ts +8 -0
- package/build/src/backends/swift.d.ts.map +1 -0
- package/build/src/backends/swift.js +127 -0
- package/build/src/backends/typescript.d.ts.map +1 -1
- package/build/src/backends/typescript.js +344 -24
- package/build/src/backends/wasm.d.ts +43 -0
- package/build/src/backends/wasm.d.ts.map +1 -0
- package/build/src/backends/wasm.js +2164 -0
- package/build/src/backends/writer.d.ts +235 -4
- package/build/src/backends/writer.d.ts.map +1 -1
- package/build/src/backends/writer.js +468 -3
- package/build/src/diagnostic.d.ts +4 -3
- package/build/src/diagnostic.d.ts.map +1 -1
- package/build/src/diagnostic.js +5 -3
- package/build/src/frontends/c.d.ts.map +1 -1
- package/build/src/frontends/c.js +5 -3
- package/build/src/frontends/cpp.d.ts.map +1 -1
- package/build/src/frontends/cpp.js +5 -3
- package/build/src/frontends/csharp.d.ts.map +1 -1
- package/build/src/frontends/csharp.js +7 -3
- package/build/src/frontends/dart.d.ts +10 -0
- package/build/src/frontends/dart.d.ts.map +1 -0
- package/build/src/frontends/dart.js +913 -0
- package/build/src/frontends/index.d.ts +3 -1
- package/build/src/frontends/index.d.ts.map +1 -1
- package/build/src/frontends/index.js +15 -5
- package/build/src/frontends/java.d.ts +110 -1
- package/build/src/frontends/java.d.ts.map +1 -1
- package/build/src/frontends/java.js +1725 -70
- package/build/src/frontends/javascript-typescript.d.ts +69 -1
- package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
- package/build/src/frontends/javascript-typescript.js +1825 -93
- package/build/src/frontends/kotlin.d.ts +10 -0
- package/build/src/frontends/kotlin.d.ts.map +1 -0
- package/build/src/frontends/kotlin.js +685 -0
- package/build/src/frontends/php.d.ts +118 -1
- package/build/src/frontends/php.d.ts.map +1 -1
- package/build/src/frontends/php.js +1583 -76
- package/build/src/frontends/program.d.ts +74 -0
- package/build/src/frontends/program.d.ts.map +1 -0
- package/build/src/frontends/program.js +989 -0
- package/build/src/frontends/ruby.d.ts +68 -1
- package/build/src/frontends/ruby.d.ts.map +1 -1
- package/build/src/frontends/ruby.js +1446 -101
- package/build/src/frontends/rust-parser.d.ts +11 -0
- package/build/src/frontends/rust-parser.d.ts.map +1 -0
- package/build/src/frontends/rust-parser.js +15 -0
- package/build/src/frontends/rust.d.ts +14 -0
- package/build/src/frontends/rust.d.ts.map +1 -0
- package/build/src/frontends/rust.js +715 -0
- package/build/src/frontends/scalars.d.ts +10 -0
- package/build/src/frontends/scalars.d.ts.map +1 -1
- package/build/src/frontends/scalars.js +28 -2
- package/build/src/frontends/swift.d.ts +10 -0
- package/build/src/frontends/swift.d.ts.map +1 -0
- package/build/src/frontends/swift.js +860 -0
- package/build/src/frontends/types.d.ts +186 -0
- package/build/src/frontends/types.d.ts.map +1 -0
- package/build/src/frontends/types.js +634 -0
- package/build/src/language-registry.d.ts +46 -4
- package/build/src/language-registry.d.ts.map +1 -1
- package/build/src/language-registry.js +167 -13
- package/build/src/mapping.d.ts +2 -2
- package/build/src/mapping.d.ts.map +1 -1
- package/build/src/mapping.js +31 -10
- package/build/src/semantic/capabilities.d.ts +66 -0
- package/build/src/semantic/capabilities.d.ts.map +1 -0
- package/build/src/semantic/capabilities.js +649 -0
- package/build/src/semantic/effects.d.ts +26 -0
- package/build/src/semantic/effects.d.ts.map +1 -0
- package/build/src/semantic/effects.js +764 -0
- package/build/src/semantic/generics.d.ts +23 -0
- package/build/src/semantic/generics.d.ts.map +1 -0
- package/build/src/semantic/generics.js +61 -0
- package/build/src/semantic/lifetime.d.ts +37 -0
- package/build/src/semantic/lifetime.d.ts.map +1 -0
- package/build/src/semantic/lifetime.js +527 -0
- package/build/src/semantic/provenance.d.ts +9 -2
- package/build/src/semantic/provenance.d.ts.map +1 -1
- package/build/src/semantic/provenance.js +462 -20
- package/build/src/semantic/scalars.d.ts +11 -0
- package/build/src/semantic/scalars.d.ts.map +1 -1
- package/build/src/semantic/scalars.js +16 -1
- package/build/src/semantic/stdlib.d.ts +254 -0
- package/build/src/semantic/stdlib.d.ts.map +1 -0
- package/build/src/semantic/stdlib.js +880 -0
- package/build/src/semantic/types.d.ts +2952 -202
- package/build/src/semantic/types.d.ts.map +1 -1
- package/build/src/semantic/types.js +688 -15
- package/build/src/semantic/validate.d.ts +85 -5
- package/build/src/semantic/validate.d.ts.map +1 -1
- package/build/src/semantic/validate.js +2576 -98
- package/build/src/stdlib-facades.d.ts +304 -0
- package/build/src/stdlib-facades.d.ts.map +1 -0
- package/build/src/stdlib-facades.js +1167 -0
- package/build/src/stdlib-negotiation.d.ts +69 -0
- package/build/src/stdlib-negotiation.d.ts.map +1 -0
- package/build/src/stdlib-negotiation.js +403 -0
- package/build/src/stdlib-providers.d.ts +72 -0
- package/build/src/stdlib-providers.d.ts.map +1 -0
- package/build/src/stdlib-providers.js +339 -0
- package/build/src/toolchains.d.ts +55 -1
- package/build/src/toolchains.d.ts.map +1 -1
- package/build/src/toolchains.js +15 -4
- package/docs/architecture.md +45 -13
- package/docs/dart.md +60 -0
- package/docs/goals.md +3 -3
- package/docs/ios.md +121 -0
- package/docs/kotlin.md +42 -0
- package/docs/language-support.md +231 -26
- package/docs/multi-file-modules.md +52 -0
- package/docs/parser-qualification.md +121 -8
- package/docs/plans/2026-09-05-standard-library-portability.md +10 -10
- package/docs/rust.md +88 -0
- package/docs/source-maps.md +15 -7
- package/docs/standard-library-portability.md +39 -8
- package/docs/swift.md +44 -0
- package/docs/testing.md +366 -4
- package/docs/webassembly.md +52 -0
- package/index.js +63 -8
- package/node_modules/semantifold-tree-sitter-legacy-internal/README.md +2 -2
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/LICENSE +21 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/README.md +45 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/binding.gyp +30 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/binding.cc +20 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/binding_test.js +9 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/index.d.ts +28 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/index.js +11 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/grammar.js +1630 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/package.json +64 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/darwin-arm64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/darwin-x64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/linux-arm64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/linux-x64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/win32-arm64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/win32-x64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/highlights.scm +159 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/injections.scm +9 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/tags.scm +60 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/grammar.json +9405 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/node-types.json +5399 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/parser.c +192569 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/scanner.c +393 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/alloc.h +54 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/array.h +290 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/parser.h +266 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/tree-sitter-rust.wasm +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/tree-sitter.json +53 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/package.json +3 -2
- package/node_modules/semantifold-tree-sitter-legacy-internal/src/c.js +5 -4
- package/package.json +5 -2
- package/src/artifact-path.js +47 -2
- package/src/artifacts.js +67 -0
- package/src/backends/c-validation.js +6 -1
- package/src/backends/cpp-validation.js +6 -1
- package/src/backends/csharp.js +3 -0
- package/src/backends/dart-runtime.js +41 -0
- package/src/backends/dart.js +326 -0
- package/src/backends/effects.js +705 -0
- package/src/backends/go.js +14 -2
- package/src/backends/identifiers.js +160 -9
- package/src/backends/index.js +27 -2
- package/src/backends/ios.js +1612 -0
- package/src/backends/java.js +454 -36
- package/src/backends/javascript.js +389 -23
- package/src/backends/kotlin-runtime.js +29 -0
- package/src/backends/kotlin.js +141 -0
- package/src/backends/native-validation.js +1 -1
- package/src/backends/ordered-expressions.js +40 -6
- package/src/backends/php-stdlib-support.js +239 -0
- package/src/backends/php.js +469 -32
- package/src/backends/program.js +1407 -0
- package/src/backends/python.js +3 -0
- package/src/backends/ruby.js +326 -23
- package/src/backends/rust-runtime.js +34 -0
- package/src/backends/rust-validation.js +75 -0
- package/src/backends/rust.js +335 -0
- package/src/backends/scalars.js +141 -16
- package/src/backends/shared.js +2304 -124
- package/src/backends/stdlib-support.js +234 -0
- package/src/backends/swift-runtime.js +14 -0
- package/src/backends/swift.js +132 -0
- package/src/backends/typescript.js +349 -23
- package/src/backends/wasm.js +2208 -0
- package/src/backends/writer.js +520 -2
- package/src/diagnostic.js +4 -2
- package/src/frontends/c.js +4 -2
- package/src/frontends/cpp.js +4 -2
- package/src/frontends/csharp.js +4 -2
- package/src/frontends/dart.js +963 -0
- package/src/frontends/index.js +14 -4
- package/src/frontends/java.js +1977 -69
- package/src/frontends/javascript-typescript.js +2046 -102
- package/src/frontends/kotlin.js +713 -0
- package/src/frontends/php.js +1725 -79
- package/src/frontends/program.js +1062 -0
- package/src/frontends/ruby.js +1624 -98
- package/src/frontends/rust-parser.js +18 -0
- package/src/frontends/rust.js +714 -0
- package/src/frontends/scalars.js +31 -1
- package/src/frontends/swift.js +893 -0
- package/src/frontends/types.js +750 -0
- package/src/language-registry.js +172 -12
- package/src/mapping.js +33 -9
- package/src/semantic/capabilities.js +671 -0
- package/src/semantic/effects.js +737 -0
- package/src/semantic/generics.js +58 -0
- package/src/semantic/lifetime.js +517 -0
- package/src/semantic/provenance.js +412 -19
- package/src/semantic/scalars.js +17 -0
- package/src/semantic/stdlib.js +921 -0
- package/src/semantic/types.js +765 -14
- package/src/semantic/validate.js +2934 -209
- package/src/stdlib-facades.js +1211 -0
- package/src/stdlib-negotiation.js +446 -0
- package/src/stdlib-providers.js +377 -0
- package/src/toolchains.js +16 -3
package/build/src/frontends/c.js
CHANGED
|
@@ -525,7 +525,8 @@ export class CReader {
|
|
|
525
525
|
const bindings = new Map(inherited);
|
|
526
526
|
for (const statement of block.statements) {
|
|
527
527
|
if (statement.kind == "LocalDeclaration")
|
|
528
|
-
bindings.set(statement.name,
|
|
528
|
+
bindings.set(statement.name,
|
|
529
|
+
/** @type {import("../semantic/types.js").TypeReference} */ (statement.type).name);
|
|
529
530
|
if (statement.kind == "PrintStatement") {
|
|
530
531
|
const expected = this.printTypes.get(statement);
|
|
531
532
|
if (!expected)
|
|
@@ -541,7 +542,8 @@ export class CReader {
|
|
|
541
542
|
}
|
|
542
543
|
};
|
|
543
544
|
for (const declaration of module.functions)
|
|
544
|
-
visit(declaration.body, new Map(declaration.parameters.map((parameter) => [parameter.name,
|
|
545
|
+
visit(declaration.body, new Map(declaration.parameters.map((parameter) => [parameter.name,
|
|
546
|
+
/** @type {import("../semantic/types.js").TypeReference} */ (parameter.type).name])));
|
|
545
547
|
visit(module.entryPoint.body, new Map());
|
|
546
548
|
}
|
|
547
549
|
/**
|
|
@@ -747,4 +749,4 @@ export function parseC({ filename, source }) {
|
|
|
747
749
|
throw error;
|
|
748
750
|
}
|
|
749
751
|
}
|
|
750
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZHMvYy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDakQsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sb0NBQW9DLENBQUE7QUFDM0UsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sNkJBQTZCLENBQUE7QUFDaEUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sa0NBQWtDLENBQUE7QUFDcEUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDRCQUE0QixDQUFBO0FBQ3hELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUE7QUFDdEMsT0FBTyxFQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUNwRyxPQUFPLEVBQUMscUJBQXFCLEVBQUUsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUE7QUFDN0UsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUE7QUFDN0QsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMkJBQTJCLENBQUE7QUFDMUQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sd0JBQXdCLENBQUE7QUFDNUQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0seUJBQXlCLENBQUE7QUFDNUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sY0FBYyxDQUFBO0FBRTdDLHlEQUF5RDtBQUN6RCxzRUFBc0U7QUFDdEUsb0VBQW9FO0FBRXBFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDL0IsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxD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QUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsa0NBQWtDLENBQUMsQ0FBQTtZQUMxSSxPQUFPLGdCQUFnQixDQUFDLEVBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQTtRQUMzRyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDckMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7WUFDckMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUE7WUFDN0MsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUVsRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQTtZQUN6QyxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLDZCQUE2QixDQUFDLENBQUE7WUFDdEUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFD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Q0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBRTVDLElBQUksQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDckMsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksS0FBSyxZQUFZLHFCQUFxQixJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksR0FBRztZQUNyRixLQUFLLENBQUMsSUFBSSxJQUFJLGFBQWEsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLG9CQUFvQixFQUFFLENBQUM7WUFDcEUsT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsdUNBQXVDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDdEksQ0FBQztRQUNELE1BQU0sS0FBSyxDQUFBO0lBQ2IsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtnZW5lcmF0ZUNQcm9ncmFtfSBmcm9tIFwiLi4vYmFja2VuZHMvYy5qc1wiXG5pbXBvcnQge09yZGVyZWRFeHByZXNzaW9uUGxhbm5lcn0gZnJvbSBcIi4uL2JhY2tlbmRzL29yZGVyZWQtZXhwcmVzc2lvbnMuanNcIlxuaW1wb3J0IHttYXhpbXVtQ1NvdXJjZUxlbmd0aH0gZnJvbSBcIi4uL2JhY2tlbmRzL2MtdmFsaWRhdGlvbi5qc1wiXG5pbXBvcnQge3ZhbGlkYXRlTmF0aXZlR3JhcGh9IGZyb20gXCIuLi9iYWNrZW5kcy9uYXRpdmUtdmFsaWRhdGlvbi5qc1wiXG5pbXBvcnQge2lzQ0lkZW50aWZpZXJ9IGZyb20gXCIuLi9iYWNrZW5kcy9pZGVudGlmaWVycy5qc1wiXG5pbXBvcnQge3BhcnNlQ3N0fSBmcm9tIFwiLi9jLXBhcnNlci5qc1wiXG5pbXBvcnQge21pc3NpbmdUeXBlLCBwYXJzZUZhaWx1cmUsIFNlbWFudGlmb2xkRGlhZ25vc3RpYywgdW5zdXBwb3J0ZWRTeW50YXh9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7Y3JlYXRlQ29vcmRpbmF0ZUluZGV4LCBpbmRleGVkUG9pbnRBdH0gZnJvbSBcIi4uL3NlbWFudGljL2xvY2F0aW9uLmpzXCJcbmltcG9ydCB7d2l0aEFkYXB0ZWRPcGVyYXRpb259IGZyb20gXCIuLi9zZW1hbnRpYy9vcGVyYXRvcnMuanNcIlxuaW1wb3J0IHt3aXRoUGFyc2VyUmFuZ2VzfSBmcm9tIFwiLi4vc2VtYW50aWMvcHJvdmVuYW5jZS5qc1wiXG5pbXBvcnQge2hhc09ubHlVbmljb2RlU2NhbGFyc30gZnJvbSBcIi4uL3NlbWFudGljL3NjYWxhcnMuanNcIlxuaW1wb3J0IHt2YWxpZGF0ZVBhcnNlZE1vZHVsZX0gZnJvbSBcIi4uL3NlbWFudGljL3ZhbGlkYXRlLmpzXCJcbmltcG9ydCB7c291cmNlU2NhbGFyVHlwZX0gZnJvbSBcIi4vc2NhbGFycy5qc1wiXG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi9jLXBhcnNlci5qc1wiKS5Dc3ROb2RlfSBDc3ROb2RlICovXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IEV4cHJlc3Npb24gKi9cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RhdGVtZW50fSBTdGF0ZW1lbnQgKi9cblxuY29uc3QgYmluYXJ5T3BlcmF0aW9ucyA9IG5ldyBNYXAoW1xuICBbXCIrXCIsIFwiUGhwQWRkXCJdLCBbXCItXCIsIFwiU3VidHJhY3RcIl0sIFtcIipcIiwgXCJNdWx0aXBseVwiXSwgW1wiPT1cIiwgXCJKYXZhRXF1YWxcIl0sIFtcIiE9XCIsIFwiSmF2YU5vdEVxdWFsXCJdLFxuICBbXCI8XCIsIFwiTGVzc1RoYW5cIl0sIFtcIjw9XCIsIFwiTGVzc1RoYW5PckVxdWFsXCJdLCBbXCI+XCIsIFwiR3JlYXRlclRoYW5cIl0sIFtcIj49XCIsIFwiR3JlYXRlclRoYW5PckVxdWFsXCJdLFxuICBbXCImJlwiLCBcIkFuZFwiXSwgW1wifHxcIiwgXCJPclwiXVxuXSlcbmNvbnN0IGhlbHBlcnMgPSBuZXcgTWFwKFtcbiAgW1wic2VtYW50aWZvbGRfaW50ZWdlcl9hZGRcIiwgXCJQaHBBZGRcIl0sIFtcInNlbWFudGlmb2xkX2ludGVnZXJfc3VidHJhY3RcIiwgXCJTdWJ0cmFjdFwiXSxcbiAgW1wic2VtYW50aWZvbGRfaW50ZWdlcl9tdWx0aXBseVwiLCBcIk11bHRpcGx5XCJdLCBbXCJzZW1hbnRpZm9sZF9zdHJpbmdfY29uY2F0XCIsIFwiU3RyaW5nQ29uY2F0XCJdLFxuICBbXCJzZW1hbnRpZm9sZF9zdHJpbmdfZXF1YWxcIiwgXCJTdHJpbmdFcXVhbFwiXSwgW1wic2VtYW50aWZvbGRfc3RyaW5nX25vdF9lcXVhbFwiLCBcIlN0cmluZ05vdEVxdWFsXCJdXG5dKVxuXG4vKiogU3RyaWN0IGZpZWxkLWFuZC10b2tlbiBjb25zdW1lciBmb3IgdGhlIHByaXZhdGUgZnJvemVuIEMgQ1NULiAqL1xuZXhwb3J0IGNsYXNzIENSZWFkZXIge1xuICAvKipcbiAgICogT3ducyBzb3VyY2UgY29udGVudCBhbmQgaXRzIGNvb3JkaW5hdGUgaW5kZXgsIG5ldmVyIG5hdGl2ZSBwYXJzZXIgaGFuZGxlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gT3JpZ2luYWwgZmlsZW5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBFeGFjdCBvcmlnaW5hbCBzb3VyY2UuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihmaWxlbmFtZSwgc291cmNlKSB7XG4gICAgdGhpcy5maWxlbmFtZSA9IGZpbGVuYW1lXG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2VcbiAgICB0aGlzLmNvb3JkaW5hdGVzID0gY3JlYXRlQ29vcmRpbmF0ZUluZGV4KHNvdXJjZSlcbiAgICB0aGlzLmdlbmVyYXRlZCA9IGZhbHNlXG4gICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBFeHByZXNzaW9uPiB8IHVuZGVmaW5lZH0gKi9cbiAgICB0aGlzLnRlbXBvcmFyeUV4cHJlc3Npb25zID0gdW5kZWZpbmVkXG4gICAgLyoqIEB0eXBlIHtTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZH0gKi9cbiAgICB0aGlzLnRlbXBvcmFyeU5hbWVzID0gdW5kZWZpbmVkXG4gICAgLyoqIEB0eXBlIHtNYXA8U3RhdGVtZW50LCB7bm9kZTogQ3N0Tm9kZSwgdHlwZTogc3RyaW5nfT59ICovXG4gICAgdGhpcy5wcmludFR5cGVzID0gbmV3IE1hcCgpXG4gICAgLyoqIEB0eXBlIHtTZXQ8c3RyaW5nPn0gKi9cbiAgICB0aGlzLmRlY2xhcmVkRnVuY3Rpb25zID0gbmV3IFNldCgpXG4gIH1cblxuICAvKipcbiAgICogTG9jYXRlcyBvbmUgcGFyc2VyLW93bmVkIHJhbmdlIGluIFVURi0xNiBjb29yZGluYXRlcy5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBub2RlIC0gUGFyc2VyIG5vZGUuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gVmVyaWZpZWQgbG9jYXRpb24uXG4gICAqL1xuICBsb2NhdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIHtmaWxlbmFtZTogdGhpcy5maWxlbmFtZSwgc3RhcnQ6IGluZGV4ZWRQb2ludEF0KHRoaXMuY29vcmRpbmF0ZXMsIG5vZGUuc3RhcnRJbmRleCksIGVuZDogaW5kZXhlZFBvaW50QXQodGhpcy5jb29yZGluYXRlcywgbm9kZS5lbmRJbmRleCl9XG4gIH1cblxuICAvKipcbiAgICogUmVhZHMgb25seSB0aGUgc3BlbGxpbmcgb2YgYW4gYWxyZWFkeSByZWNvZ25pemVkIHBhcnNlciBub2RlLlxuICAgKiBAcGFyYW0ge0NzdE5vZGV9IG5vZGUgLSBQYXJzZXIgbm9kZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gRXhhY3QgdG9rZW4gc3BlbGxpbmcuXG4gICAqL1xuICB0ZXh0KG5vZGUpIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2Uuc2xpY2Uobm9kZS5zdGFydEluZGV4LCBub2RlLmVuZEluZGV4KVxuICB9XG5cbiAgLyoqXG4gICAqIFJlamVjdHMgYSBsb2NhdGVkIHNvdXJjZS1wcm9maWxlIHZpb2xhdGlvbi5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBub2RlIC0gUmVqZWN0ZWQgbm9kZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXRhaWxdIC0gUHJvZmlsZSB2aW9sYXRpb24uXG4gICAqIEByZXR1cm5zIHtuZXZlcn0gQWx3YXlzIHRocm93cy5cbiAgICovXG4gIGZhaWwobm9kZSwgZGV0YWlsID0gbm9kZS50eXBlKSB7XG4gICAgdW5zdXBwb3J0ZWRTeW50YXgoXCJjXCIsIGRldGFpbCwgdGhpcy5sb2NhdGlvbihub2RlKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmF2ZXJzZXMgYWxsIGVkZ2VzIGJlZm9yZSBpbnRlcnByZXRpbmcgYW55IHNvdXJjZSBtZWFuaW5nLlxuICAgKiBAcGFyYW0ge0NzdE5vZGV9IG5vZGUgLSBDdXJyZW50IHBhcnNlciBub2RlLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHZhbGlkYXRlVHJlZShub2RlKSB7XG4gICAgZm9yIChjb25zdCB7bm9kZTogY2hpbGR9IG9mIG5vZGUuY2hpbGRyZW4pIHRoaXMudmFsaWRhdGVUcmVlKGNoaWxkKVxuICAgIGlmIChub2RlLmVycm9yIHx8IG5vZGUubWlzc2luZyB8fCBub2RlLmhhc0Vycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtjb2RlOiBcIlBBUlNFX0VSUk9SXCIsIGxhbmd1YWdlOiBcImNcIiwgbG9jYXRpb246IHRoaXMubG9jYXRpb24obm9kZSksIG1lc3NhZ2U6IGBDIHBhcnNlciByZWNvdmVyeSBhdCAnJHtub2RlLnR5cGV9Jy5gfSlcbiAgICB9XG4gICAgaWYgKG5vZGUuZXh0cmEgJiYgbm9kZS50eXBlICE9IFwiY29tbWVudFwiKSB0aGlzLmZhaWwobm9kZSwgXCJ1bmV4cGVjdGVkIGV4dHJhIHBhcnNlciBjaGlsZFwiKVxuICAgIGlmICgobm9kZS50eXBlID09IFwiY29tbWVudFwiIHx8IG5vZGUudHlwZSA9PSBcInN0cmluZ19jb250ZW50XCIpICYmIC9cXD9cXD9bPS8nKCkhPD4tXS91LnRlc3QodGhpcy50ZXh0KG5vZGUpKSkge1xuICAgICAgdGhpcy5mYWlsKG5vZGUsIFwidHJpZ3JhcGggcHJlcHJvY2Vzc2luZ1wiKVxuICAgIH1cbiAgICBpZiAobm9kZS50eXBlID09IFwiY29tbWVudFwiKSB7XG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy50ZXh0KG5vZGUpXG5cbiAgICAgIC8vIEEgdGVybWluYWwgQ1IgYmVsb25ncyB0byBvcmRpbmFyeSBDUkxGOyBjb250ZW50IGFmdGVyIGEgYmFyZSBDUiBpcyBub3QgYSBDIGxpbmUgY29tbWVudC5cbiAgICAgIGlmICgvXFxcXCg/Olxcclxcbj98XFxuKS91LnRlc3QodGV4dCkgfHwgdGV4dC5zdGFydHNXaXRoKFwiLy9cIikgJiYgL1xccig/IVxcbnwkKS91LnRlc3QodGV4dCkpIHtcbiAgICAgICAgdGhpcy5mYWlsKG5vZGUsIFwicHJlcHJvY2Vzc2luZy1zZW5zaXRpdmUgY29tbWVudFwiKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXBhcmF0ZXMgaGFybWxlc3MgY29tbWVudHMgYWZ0ZXIgZXZlcnkgY2hpbGQgaGFzIGJlZW4gdmFsaWRhdGVkLlxuICAgKiBAcGFyYW0ge0NzdE5vZGV9IG5vZGUgLSBQYXJlbnQgbm9kZS5cbiAgICogQHJldHVybnMge0NzdE5vZGVbXX0gT3JkZXJlZCBzdHJ1Y3R1cmFsIGNoaWxkcmVuLlxuICAgKi9cbiAgcGFydHMobm9kZSkge1xuICAgIHJldHVybiBub2RlLmNoaWxkcmVuLm1hcCgoe25vZGU6IGNoaWxkfSkgPT4gY2hpbGQpLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLnR5cGUgIT0gXCJjb21tZW50XCIpXG4gIH1cblxuICAvKipcbiAgICogUmVxdWlyZXMgb25lIGV4YWN0IGZpZWxkIHJhdGhlciB0aGFuIHNlYXJjaGluZyBkZXNjZW5kYW50cy5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBub2RlIC0gRmllbGQgb3duZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gRmllbGQgbmFtZS5cbiAgICogQHJldHVybnMge0NzdE5vZGV9IFNvbGUgZmllbGQgY2hpbGQuXG4gICAqL1xuICBmaWVsZChub2RlLCBuYW1lKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IG5vZGUuY2hpbGRyZW4uZmlsdGVyKCh7ZmllbGR9KSA9PiBmaWVsZCA9PSBuYW1lKVxuXG4gICAgaWYgKG1hdGNoZXMubGVuZ3RoICE9IDEpIHJldHVybiB0aGlzLmZhaWwobm9kZSwgYGV4cGVjdGVkIG9uZSAnJHtuYW1lfScgZmllbGRgKVxuICAgIHJldHVybiBtYXRjaGVzWzBdLm5vZGVcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdW1lcyBldmVyeSBzdHJ1Y3R1cmFsIGNoaWxkLCBpbmNsdWRpbmcgcHVuY3R1YXRpb24uXG4gICAqIEBwYXJhbSB7Q3N0Tm9kZX0gbm9kZSAtIFNoYXBlIG93bmVyLlxuICAgKiBAcGFyYW0geyhDc3ROb2RlIHwgc3RyaW5nKVtdfSBleHBlY3RlZCAtIE9yZGVyZWQgbm9kZXMgb3IgdG9rZW4ga2luZHMuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc2hhcGUobm9kZSwgZXhwZWN0ZWQpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMucGFydHMobm9kZSlcblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggIT0gZXhwZWN0ZWQubGVuZ3RoIHx8IGNoaWxkcmVuLnNvbWUoKGNoaWxkLCBpbmRleCkgPT5cbiAgICAgIHR5cGVvZiBleHBlY3RlZFtpbmRleF0gPT0gXCJzdHJpbmdcIiA/IGNoaWxkLnR5cGUgIT0gZXhwZWN0ZWRbaW5kZXhdIDogY2hpbGQgIT09IGV4cGVjdGVkW2luZGV4XSkpIHRoaXMuZmFpbChub2RlLCBgJHtub2RlLnR5cGV9IGNoaWxkIHNoYXBlYClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1aXJlcyBhbiBvcmRpbmFyeSBjYWxsZXIgaWRlbnRpZmllciBvdXRzaWRlIHRoZSBwcm90ZWN0ZWQgbmFtZXNwYWNlLlxuICAgKiBAcGFyYW0ge0NzdE5vZGV9IG5vZGUgLSBJZGVudGlmaWVyIHRva2VuLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBBY2NlcHRlZCBzcGVsbGluZy5cbiAgICovXG4gIGlkZW50aWZpZXIobm9kZSkge1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLnRleHQobm9kZSlcblxuICAgIGlmIChub2RlLnR5cGUgIT0gXCJpZGVudGlmaWVyXCIgfHwgIWlzQ0lkZW50aWZpZXIobmFtZSkpIHRoaXMuZmFpbChub2RlLCBcInJlc2VydmVkIG9yIHVuc3VwcG9ydGVkIGlkZW50aWZpZXJcIilcbiAgICByZXR1cm4gbmFtZVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIG9ubHkgdGhlIGNhbm9uaWNhbCBzY2FsYXIgdHlwZSBzcGVsbGluZ3MuXG4gICAqIEBwYXJhbSB7Q3N0Tm9kZX0gbm9kZSAtIFR5cGUgdG9rZW4uXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUmVmZXJlbmNlfSBTZW1hbnRpYyBzY2FsYXIuXG4gICAqL1xuICB0eXBlKG5vZGUpIHtcbiAgICBpZiAoIVtcInByaW1pdGl2ZV90eXBlXCIsIFwidHlwZV9pZGVudGlmaWVyXCJdLmluY2x1ZGVzKG5vZGUudHlwZSkpIHRoaXMuZmFpbChub2RlLCBcInNjYWxhciB0eXBlIHNoYXBlXCIpXG4gICAgY29uc3QgdHlwZSA9IHNvdXJjZVNjYWxhclR5cGUoXCJjXCIsIHRoaXMudGV4dChub2RlKSwgdGhpcy5sb2NhdGlvbihub2RlKSlcblxuICAgIGlmICghdHlwZSkgcmV0dXJuIHRoaXMuZmFpbChub2RlLCBcInVuc3VwcG9ydGVkIHNjYWxhciB0eXBlXCIpXG4gICAgcmV0dXJuIHR5cGVcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIGRpcmVjdCBmdW5jdGlvbiBjYWxsJ3MgZXhhY3QgYXJndW1lbnQgbGlzdC5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBub2RlIC0gQ2FsbCBub2RlLlxuICAgKiBAcmV0dXJucyB7e25hbWU6IENzdE5vZGUsIGFyZ3VtZW50czogQ3N0Tm9kZVtdfX0gUGFyc2VkIGNhbGwgc2hhcGUuXG4gICAqL1xuICBjYWxsKG5vZGUpIHtcbiAgICBpZiAobm9kZS50eXBlICE9IFwiY2FsbF9leHByZXNzaW9uXCIpIHJldHVybiB0aGlzLmZhaWwobm9kZSwgXCJkaXJlY3QgY2FsbCByZXF1aXJlZFwiKVxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmZpZWxkKG5vZGUsIFwiZnVuY3Rpb25cIilcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5maWVsZChub2RlLCBcImFyZ3VtZW50c1wiKVxuXG4gICAgdGhpcy5zaGFwZShub2RlLCBbbmFtZSwgbGlzdF0pXG4gICAgaWYgKG5hbWUudHlwZSAhPSBcImlkZW50aWZpZXJcIiB8fCBsaXN0LnR5cGUgIT0gXCJhcmd1bWVudF9saXN0XCIpIHRoaXMuZmFpbChub2RlLCBcImRpcmVjdCBjYWxsIHNoYXBlXCIpXG4gICAgY29uc3QgcGFydHMgPSB0aGlzLnBhcnRzKGxpc3QpXG4gICAgY29uc3QgYXJncyA9IHBhcnRzLnNsaWNlKDEsIC0xKS5maWx0ZXIoKF9wYXJ0LCBpbmRleCkgPT4gaW5kZXggJSAyID09IDApXG5cbiAgICB0aGlzLnNoYXBlKGxpc3QsIFtcIihcIiwgLi4uYXJncy5mbGF0TWFwKChhcmcsIGluZGV4KSA9PiBpbmRleCA9PSAwID8gW2FyZ10gOiBbXCIsXCIsIGFyZ10pLCBcIilcIl0pXG4gICAgcmV0dXJuIHthcmd1bWVudHM6IGFyZ3MsIG5hbWV9XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlcyBhIHBhcnNlci1iYWNrZWQgb3JkaW5hcnkgQyBzdHJpbmcgdG9rZW4gYXMgVVRGLTggYnl0ZXMuXG4gICAqIEBwYXJhbSB7Q3N0Tm9kZX0gbm9kZSAtIFN0cmluZyBsaXRlcmFsLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBDb21wbGV0ZSBVbmljb2RlIHNjYWxhciB2YWx1ZS5cbiAgICovXG4gIHN0cmluZyhub2RlKSB7XG4gICAgaWYgKG5vZGUudHlwZSAhPSBcInN0cmluZ19saXRlcmFsXCIpIHJldHVybiB0aGlzLmZhaWwobm9kZSwgXCJvcmRpbmFyeSBzdHJpbmcgbGl0ZXJhbCByZXF1aXJlZFwiKVxuICAgIGNvbnN0IHBhcnRzID0gdGhpcy5wYXJ0cyhub2RlKVxuXG4gICAgaWYgKHBhcnRzWzBdPy50eXBlICE9ICdcIicgfHwgcGFydHMuYXQoLTEpPy50eXBlICE9ICdcIicpIHRoaXMuZmFpbChub2RlLCBcInByZWZpeGVkIHN0cmluZyBsaXRlcmFsXCIpXG4gICAgY29uc3QgYnl0ZXMgPSBbXVxuXG4gICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IHBhcnRzLmxlbmd0aCAtIDE7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gcGFydHNbaW5kZXhdXG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy50ZXh0KGNoaWxkKVxuXG4gICAgICBpZiAoY2hpbGQudHlwZSA9PSBcInN0cmluZ19jb250ZW50XCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBieXRlIG9mIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0ZXh0KSkgYnl0ZXMucHVzaChieXRlKVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoY2hpbGQudHlwZSA9PSBcImVzY2FwZV9zZXF1ZW5jZVwiKSB7XG4gICAgICAgIGNvbnN0IHNpbXBsZSA9IG5ldyBNYXAoW1tcImFcIiwgN10sIFtcImJcIiwgOF0sIFtcImZcIiwgMTJdLCBbXCJuXCIsIDEwXSwgW1wiclwiLCAxM10sIFtcInRcIiwgOV0sIFtcInZcIiwgMTFdLCBbXCJcXFxcXCIsIDkyXSwgWydcIicsIDM0XSwgW1wiJ1wiLCAzOV0sIFtcIj9cIiwgNjNdXSlcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0ZXh0LnNsaWNlKDEpXG5cbiAgICAgICAgaWYgKHRleHRbMF0gIT0gXCJcXFxcXCIpIHRoaXMuZmFpbChjaGlsZCwgXCJpbnZhbGlkIGVzY2FwZVwiKVxuICAgICAgICBpZiAoc2ltcGxlLmhhcyh2YWx1ZSkpIGJ5dGVzLnB1c2goLyoqIEB0eXBlIHtudW1iZXJ9ICovIChzaW1wbGUuZ2V0KHZhbHVlKSkpXG4gICAgICAgIGVsc2UgaWYgKC9eWzAtN117MSwzfSQvdS50ZXN0KHZhbHVlKSB8fCAvXnhbMC05YS1mQS1GXSskL3UudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBuZXh0ID0gcGFydHNbaW5kZXggKyAxXVxuXG4gICAgICAgICAgLy8gQyBjb25zdW1lcyBldmVyeSBhZGphY2VudCBoZXggZGlnaXQ7IHRoZSBmcm96ZW4gZ3JhbW1hciBjYXBzIGVhY2ggZXNjYXBlIG5vZGUgYXQgZm91ci5cbiAgICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcInhcIikgJiYgbmV4dC50eXBlID09IFwic3RyaW5nX2NvbnRlbnRcIiAmJiBuZXh0LnN0YXJ0SW5kZXggPT0gY2hpbGQuZW5kSW5kZXggJiYgL15bMC05YS1mQS1GXS91LnRlc3QodGhpcy50ZXh0KG5leHQpKSkge1xuICAgICAgICAgICAgdGhpcy5mYWlsKGNoaWxkLCBcImhleGFkZWNpbWFsIGVzY2FwZSBzcGxpdCBieSBwYXJzZXIgYm91bmRhcnlcIilcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgbnVtYmVyID0gTnVtYmVyLnBhcnNlSW50KHZhbHVlWzBdID09IFwieFwiID8gdmFsdWUuc2xpY2UoMSkgOiB2YWx1ZSwgdmFsdWVbMF0gPT0gXCJ4XCIgPyAxNiA6IDgpXG5cbiAgICAgICAgICBpZiAobnVtYmVyID4gMjU1KSB0aGlzLmZhaWwoY2hpbGQsIFwiZXNjYXBlIG91dHNpZGUgYnl0ZSByYW5nZVwiKVxuICAgICAgICAgIGJ5dGVzLnB1c2gobnVtYmVyKVxuICAgICAgICB9IGVsc2UgdGhpcy5mYWlsKGNoaWxkLCBcInVuc3VwcG9ydGVkIGVzY2FwZVwiKVxuICAgICAgfSBlbHNlIHRoaXMuZmFpbChjaGlsZCwgXCJzdHJpbmcgY2hpbGRcIilcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoXCJ1dGYtOFwiLCB7ZmF0YWw6IHRydWUsIGlnbm9yZUJPTTogdHJ1ZX0pLmRlY29kZShuZXcgVWludDhBcnJheShieXRlcykpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcikgcmV0dXJuIHRoaXMuZmFpbChub2RlLCBcImludmFsaWQgVVRGLTggbGl0ZXJhbCBieXRlc1wiKVxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgc3VwcG9ydGVkIGV4cHJlc3Npb25zIHdpdGhvdXQgYXNzdW1pbmcgQyBhcmd1bWVudCBldmFsdWF0aW9uIG9yZGVyLlxuICAgKiBAcGFyYW0ge0NzdE5vZGV9IG5vZGUgLSBFeHByZXNzaW9uIG5vZGUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW25lc3RlZF0gLSBXaGV0aGVyIGEgc2VtYW50aWMgY2FsbCB3b3VsZCBoYXZlIHVuc3BlY2lmaWVkIG9yZGVyLlxuICAgKiBAcmV0dXJucyB7RXhwcmVzc2lvbn0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAgICovXG4gIGV4cHJlc3Npb24obm9kZSwgbmVzdGVkID0gZmFsc2UpIHtcbiAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMubG9jYXRpb24obm9kZSlcblxuICAgIGlmIChub2RlLnR5cGUgPT0gXCJwYXJlbnRoZXNpemVkX2V4cHJlc3Npb25cIikge1xuICAgICAgY29uc3QgcGFydHMgPSB0aGlzLnBhcnRzKG5vZGUpXG5cbiAgICAgIHRoaXMuc2hhcGUobm9kZSwgW1wiKFwiLCBwYXJ0c1sxXSwgXCIpXCJdKVxuICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbihwYXJ0c1sxXSwgbmVzdGVkKVxuICAgIH1cbiAgICBpZiAobm9kZS50eXBlID09IFwiaWRlbnRpZmllclwiKSB7XG4gICAgICBjb25zdCB0ZW1wb3JhcnkgPSB0aGlzLnRlbXBvcmFyeUV4cHJlc3Npb25zPy5nZXQodGhpcy50ZXh0KG5vZGUpKVxuXG4gICAgICBpZiAodGVtcG9yYXJ5KSB7XG4gICAgICAgIHRoaXMudGVtcG9yYXJ5RXhwcmVzc2lvbnM/LmRlbGV0ZSh0aGlzLnRleHQobm9kZSkpXG4gICAgICAgIHJldHVybiB0ZW1wb3JhcnlcbiAgICAgIH1cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIsIGxvY2F0aW9uLCBuYW1lOiB0aGlzLmlkZW50aWZpZXIobm9kZSl9LCB7bmFtZTogbG9jYXRpb259KVxuICAgIH1cbiAgICBpZiAobm9kZS50eXBlID09IFwidHJ1ZVwiIHx8IG5vZGUudHlwZSA9PSBcImZhbHNlXCIpIHtcbiAgICAgIGlmICh0aGlzLnRleHQobm9kZSkgIT0gbm9kZS50eXBlKSB0aGlzLmZhaWwobm9kZSwgXCJub25jYW5vbmljYWwgQm9vbGVhbiBsaXRlcmFsIHNwZWxsaW5nXCIpXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogXCJCb29sZWFuTGl0ZXJhbFwiLCBsb2NhdGlvbiwgdmFsdWU6IG5vZGUudHlwZSA9PSBcInRydWVcIn0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gICAgfVxuICAgIGlmIChub2RlLnR5cGUgPT0gXCJudW1iZXJfbGl0ZXJhbFwiKSB7XG4gICAgICBjb25zdCBzcGVsbGluZyA9IHRoaXMudGV4dChub2RlKVxuXG4gICAgICBpZiAoIS9eKD86MHxbMS05XVswLTldKikkL3UudGVzdChzcGVsbGluZykgfHwgIU51bWJlci5pc1NhZmVJbnRlZ2VyKE51bWJlcihzcGVsbGluZykpKSB0aGlzLmZhaWwobm9kZSwgXCJub24tc2FmZSBvciBub25jYW5vbmljYWwgaW50ZWdlclwiKVxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IFwiSW50ZWdlckxpdGVyYWxcIiwgbG9jYXRpb24sIHZhbHVlOiBOdW1iZXIoc3BlbGxpbmcpfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgICB9XG4gICAgaWYgKG5vZGUudHlwZSA9PSBcImJpbmFyeV9leHByZXNzaW9uXCIpIHtcbiAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmZpZWxkKG5vZGUsIFwibGVmdFwiKVxuICAgICAgY29uc3QgcmlnaHQgPSB0aGlzLmZpZWxkKG5vZGUsIFwicmlnaHRcIilcbiAgICAgIGNvbnN0IG9wZXJhdG9yID0gdGhpcy5maWVsZChub2RlLCBcIm9wZXJhdG9yXCIpXG4gICAgICBjb25zdCBpbnRlbnQgPSBiaW5hcnlPcGVyYXRpb25zLmdldChvcGVyYXRvci50eXBlKVxuXG4gICAgICB0aGlzLnNoYXBlKG5vZGUsIFtsZWZ0LCBvcGVyYXRvciwgcmlnaHRdKVxuICAgICAgaWYgKCFpbnRlbnQpIHJldHVybiB0aGlzLmZhaWwob3BlcmF0b3IsIFwidW5zdXBwb3J0ZWQgYmluYXJ5IG9wZXJhdG9yXCIpXG4gICAgICByZXR1cm4gdGhpcy5iaW5hcnkobm9kZSwgaW50ZW50LCB0aGlzLmV4cHJlc3Npb24obGVmdCwgdHJ1ZSksIHRoaXMuZXhwcmVzc2lvbihyaWdodCwgdHJ1ZSksIG9wZXJhdG9yKVxuICAgIH1cbiAgICBpZiAobm9kZS50eXBlID09IFwidW5hcnlfZXhwcmVzc2lvblwiKSB7XG4gICAgICBjb25zdCBvcGVyYXRvciA9IHRoaXMuZmllbGQobm9kZSwgXCJvcGVyYXRvclwiKVxuICAgICAgY29uc3QgYXJndW1lbnQgPSB0aGlzLmZpZWxkKG5vZGUsIFwiYXJndW1lbnRcIilcblxuICAgICAgdGhpcy5zaGFwZShub2RlLCBbb3BlcmF0b3IsIGFyZ3VtZW50XSlcbiAgICAgIGlmICghW1wiLVwiLCBcIiFcIl0uaW5jbHVkZXMob3BlcmF0b3IudHlwZSkpIHRoaXMuZmFpbChvcGVyYXRvciwgXCJ1bnN1cHBvcnRlZCB1bmFyeSBvcGVyYXRvclwiKVxuICAgICAgcmV0dXJuIHRoaXMudW5hcnkobm9kZSwgb3BlcmF0b3IudHlwZSA9PSBcIi1cIiA/IFwiTmVnYXRlXCIgOiBcIk5vdFwiLCB0aGlzLmV4cHJlc3Npb24oYXJndW1lbnQsIHRydWUpLCBvcGVyYXRvcilcbiAgICB9XG4gICAgaWYgKG5vZGUudHlwZSA9PSBcImNhbGxfZXhwcmVzc2lvblwiKSB7XG4gICAgICBjb25zdCBjYWxsID0gdGhpcy5jYWxsKG5vZGUpXG4gICAgICBjb25zdCBuYW1lID0gdGhpcy50ZXh0KGNhbGwubmFtZSlcblxuICAgICAgaWYgKG5hbWUgPT0gXCJJTlQ2NF9DXCIgfHwgbmFtZSA9PSBcIlNFTUFOVElGT0xEX1NUUklOR1wiKSB7XG4gICAgICAgIGlmIChjYWxsLmFyZ3VtZW50cy5sZW5ndGggIT0gMSkgdGhpcy5mYWlsKG5vZGUsIFwibGl0ZXJhbCBtYWNybyBhcml0eVwiKVxuICAgICAgICBpZiAobmFtZSA9PSBcIlNFTUFOVElGT0xEX1NUUklOR1wiKSByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogXCJTdHJpbmdMaXRlcmFsXCIsIGxvY2F0aW9uLCB2YWx1ZTogdGhpcy5zdHJpbmcoY2FsbC5hcmd1bWVudHNbMF0pfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgICAgICAgaWYgKGNhbGwuYXJndW1lbnRzWzBdLnR5cGUgIT0gXCJudW1iZXJfbGl0ZXJhbFwiKSB0aGlzLmZhaWwobm9kZSwgXCJpbnRlZ2VyIGxpdGVyYWwgbWFjcm8gb3BlcmFuZFwiKVxuICAgICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7Li4udGhpcy5leHByZXNzaW9uKGNhbGwuYXJndW1lbnRzWzBdKSwgbG9jYXRpb259LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICAgICAgfVxuICAgICAgLy8gR2VuZXJhdGVkIG9wZXJhdGlvbnMgYXJlIHNlcGFyYXRlIHRlbXBvcmFyeSBpbml0aWFsaXplcnM7IG9ubHkgbGl0ZXJhbCBtYWNyb3MgbWF5IG5lc3QgYXMgY2FsbHMuXG4gICAgICBpZiAobmVzdGVkKSB0aGlzLmZhaWwobm9kZSwgXCJjYWxsZXIgY2FsbCBpbiB1bnNwZWNpZmllZC1vcmRlciBleHByZXNzaW9uXCIpXG4gICAgICBpZiAobmFtZSA9PSBcInNlbWFudGlmb2xkX2ludGVnZXJfbmVnYXRlXCIpIHtcbiAgICAgICAgaWYgKGNhbGwuYXJndW1lbnRzLmxlbmd0aCAhPSAxKSB0aGlzLmZhaWwobm9kZSwgXCJuZWdhdGlvbiBoZWxwZXIgYXJpdHlcIilcbiAgICAgICAgcmV0dXJuIHRoaXMudW5hcnkobm9kZSwgXCJOZWdhdGVcIiwgdGhpcy5leHByZXNzaW9uKGNhbGwuYXJndW1lbnRzWzBdLCB0cnVlKSwgY2FsbC5uYW1lKVxuICAgICAgfVxuICAgICAgY29uc3QgaW50ZW50ID0gaGVscGVycy5nZXQobmFtZSlcblxuICAgICAgaWYgKGludGVudCkge1xuICAgICAgICBpZiAoY2FsbC5hcmd1bWVudHMubGVuZ3RoICE9IDIpIHRoaXMuZmFpbChub2RlLCBcInNjYWxhciBoZWxwZXIgYXJpdHlcIilcbiAgICAgICAgcmV0dXJuIHRoaXMuYmluYXJ5KG5vZGUsIGludGVudCwgdGhpcy5leHByZXNzaW9uKGNhbGwuYXJndW1lbnRzWzBdLCB0cnVlKSwgdGhpcy5leHByZXNzaW9uKGNhbGwuYXJndW1lbnRzWzFdLCB0cnVlKSwgY2FsbC5uYW1lKVxuICAgICAgfVxuICAgICAgaWYgKGNhbGwuYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB0aGlzLmZhaWwobm9kZSwgXCJzZW1hbnRpYyBjYWxsIGFyaXR5XCIpXG4gICAgICBjb25zdCBjYWxsZWUgPSB0aGlzLmlkZW50aWZpZXIoY2FsbC5uYW1lKVxuXG4gICAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkICYmICF0aGlzLmRlY2xhcmVkRnVuY3Rpb25zLmhhcyhjYWxsZWUpKSB0aGlzLmZhaWwoY2FsbC5uYW1lLCBcImltcGxpY2l0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uXCIpXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogXCJDYWxsRXhwcmVzc2lvblwiLCBsb2NhdGlvbiwgY2FsbGVlLFxuICAgICAgICBhcmd1bWVudHM6IGNhbGwuYXJndW1lbnRzLm1hcCgoYXJndW1lbnQpID0+IHRoaXMuZXhwcmVzc2lvbihhcmd1bWVudCwgdHJ1ZSkpfSwge2NhbGxlZTogdGhpcy5sb2NhdGlvbihjYWxsLm5hbWUpfSlcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmFpbChub2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZHMgcGFyc2VyIGludGVudCBiZWZvcmUgc2hhcmVkIHR5cGUgcmVzb2x1dGlvbi5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBub2RlIC0gT3duaW5nIGV4cHJlc3Npb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbnRlbnQgLSBBZGFwdGVkIG9wZXJhdGlvbi5cbiAgICogQHBhcmFtIHtFeHByZXNzaW9ufSBsZWZ0IC0gTGVmdCBvcGVyYW5kLlxuICAgKiBAcGFyYW0ge0V4cHJlc3Npb259IHJpZ2h0IC0gUmlnaHQgb3BlcmFuZC5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBvcGVyYXRvciAtIE9wZXJhdG9yIHRva2VuLlxuICAgKiBAcmV0dXJucyB7RXhwcmVzc2lvbn0gUGVuZGluZyBiaW5hcnkgZXhwcmVzc2lvbi5cbiAgICovXG4gIGJpbmFyeShub2RlLCBpbnRlbnQsIGxlZnQsIHJpZ2h0LCBvcGVyYXRvcikge1xuICAgIHJldHVybiAvKiogQHR5cGUge0V4cHJlc3Npb259ICovICh3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiBcIkJpbmFyeUV4cHJlc3Npb25cIiwgbG9jYXRpb246IHRoaXMubG9jYXRpb24obm9kZSksIGxlZnQsIHJpZ2h0fSxcbiAgICAgIHtvcGVyYXRvcjogdGhpcy5sb2NhdGlvbihvcGVyYXRvcil9KSwgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy9vcGVyYXRvcnMuanNcIikuQWRhcHRlZE9wZXJhdGlvbn0gKi8gKGludGVudCkpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZHMgcGFyc2VyIGludGVudCBmb3IgYSB1bmFyeSBvcGVyYXRpb24uXG4gICAqIEBwYXJhbSB7Q3N0Tm9kZX0gbm9kZSAtIE93bmluZyBleHByZXNzaW9uLlxuICAgKiBAcGFyYW0ge1wiTmVnYXRlXCIgfCBcIk5vdFwifSBpbnRlbnQgLSBBZGFwdGVkIG9wZXJhdGlvbi5cbiAgICogQHBhcmFtIHtFeHByZXNzaW9ufSBvcGVyYW5kIC0gT3BlcmFuZC5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBvcGVyYXRvciAtIE9wZXJhdG9yIHRva2VuLlxuICAgKiBAcmV0dXJucyB7RXhwcmVzc2lvbn0gUGVuZGluZyB1bmFyeSBleHByZXNzaW9uLlxuICAgKi9cbiAgdW5hcnkobm9kZSwgaW50ZW50LCBvcGVyYW5kLCBvcGVyYXRvcikge1xuICAgIHJldHVybiAvKiogQHR5cGUge0V4cHJlc3Npb259ICovICh3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiBcIlVuYXJ5RXhwcmVzc2lvblwiLCBsb2NhdGlvbjogdGhpcy5sb2NhdGlvbihub2RlKSwgb3BlcmFuZH0sXG4gICAgICB7b3BlcmF0b3I6IHRoaXMubG9jYXRpb24ob3BlcmF0b3IpfSksIGludGVudCkpXG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgb25lIGluaXRpYWxpemVkIGRlY2xhcmF0aW9uIG9yIGV4ZWN1dGFibGUgc3RhdGVtZW50LlxuICAgKiBAcGFyYW0ge0NzdE5vZGV9IG5vZGUgLSBTdGF0ZW1lbnQgbm9kZS5cbiAgICogQHJldHVybnMge1N0YXRlbWVudH0gU2VtYW50aWMgc3RhdGVtZW50LlxuICAgKi9cbiAgc3RhdGVtZW50KG5vZGUpIHtcbiAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMubG9jYXRpb24obm9kZSlcblxuICAgIGlmIChub2RlLnR5cGUgPT0gXCJkZWNsYXJhdGlvblwiKSB7XG4gICAgICBjb25zdCB0eXBlTm9kZSA9IG5vZGUuY2hpbGRyZW4uZmluZCgoe2ZpZWxkfSkgPT4gZmllbGQgPT0gXCJ0eXBlXCIpPy5ub2RlXG5cbiAgICAgIGlmICghdHlwZU5vZGUpIHJldHVybiBtaXNzaW5nVHlwZShcImNcIiwgXCJsb2NhbFwiLCBsb2NhdGlvbilcbiAgICAgIGNvbnN0IGRlY2xhcmF0b3IgPSB0aGlzLmZpZWxkKG5vZGUsIFwiZGVjbGFyYXRvclwiKVxuICAgICAgY29uc3QgcGFydHMgPSB0aGlzLnBhcnRzKG5vZGUpXG4gICAgICBjb25zdCBpbW11dGFibGUgPSBwYXJ0c1swXS50eXBlID09IFwidHlwZV9xdWFsaWZpZXJcIlxuXG4gICAgICB0aGlzLnNoYXBlKG5vZGUsIFsuLi4oaW1tdXRhYmxlID8gW3BhcnRzWzBdXSA6IFtdKSwgdHlwZU5vZGUsIGRlY2xhcmF0b3IsIFwiO1wiXSlcbiAgICAgIGlmIChpbW11dGFibGUgJiYgdGhpcy50ZXh0KHBhcnRzWzBdKSAhPSBcImNvbnN0XCIpIHRoaXMuZmFpbChwYXJ0c1swXSwgXCJsb2NhbCBxdWFsaWZpZXJcIilcbiAgICAgIGlmIChkZWNsYXJhdG9yLnR5cGUgIT0gXCJpbml0X2RlY2xhcmF0b3JcIikgdGhpcy5mYWlsKGRlY2xhcmF0b3IsIFwiaW5pdGlhbGl6ZWQgc2ltcGxlIGxvY2FsIHJlcXVpcmVkXCIpXG4gICAgICBjb25zdCBuYW1lID0gdGhpcy5maWVsZChkZWNsYXJhdG9yLCBcImRlY2xhcmF0b3JcIilcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5maWVsZChkZWNsYXJhdG9yLCBcInZhbHVlXCIpXG5cbiAgICAgIHRoaXMuc2hhcGUoZGVjbGFyYXRvciwgW25hbWUsIFwiPVwiLCB2YWx1ZV0pXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogXCJMb2NhbERlY2xhcmF0aW9uXCIsIGxvY2F0aW9uLCBuYW1lOiB0aGlzLmlkZW50aWZpZXIobmFtZSksIHR5cGU6IHRoaXMudHlwZSh0eXBlTm9kZSksIG11dGFibGU6ICFpbW11dGFibGUsXG4gICAgICAgIGluaXRpYWxpemVyOiB0aGlzLmV4cHJlc3Npb24odmFsdWUpfSwge25hbWU6IHRoaXMubG9jYXRpb24obmFtZSksIG9wZXJhdG9yOiB0aGlzLmxvY2F0aW9uKHRoaXMucGFydHMoZGVjbGFyYXRvcilbMV0pfSlcbiAgICB9XG4gICAgaWYgKG5vZGUudHlwZSA9PSBcInJldHVybl9zdGF0ZW1lbnRcIikge1xuICAgICAgY29uc3QgcGFydHMgPSB0aGlzLnBhcnRzKG5vZGUpXG5cbiAgICAgIHRoaXMuc2hhcGUobm9kZSwgW1wicmV0dXJuXCIsIHBhcnRzWzFdLCBcIjtcIl0pXG4gICAgICByZXR1cm4ge2tpbmQ6IFwiUmV0dXJuU3RhdGVtZW50XCIsIGxvY2F0aW9uLCBleHByZXNzaW9uOiB0aGlzLmV4cHJlc3Npb24ocGFydHNbMV0pfVxuICAgIH1cbiAgICBpZiAobm9kZS50eXBlID09IFwiaWZfc3RhdGVtZW50XCIpIHtcbiAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IHRoaXMuZmllbGQobm9kZSwgXCJjb25kaXRpb25cIilcbiAgICAgIGNvbnN0IGNvbnNlcXVlbmNlID0gdGhpcy5maWVsZChub2RlLCBcImNvbnNlcXVlbmNlXCIpXG4gICAgICBjb25zdCBhbHRlcm5hdGl2ZSA9IG5vZGUuY2hpbGRyZW4uZmluZCgoe2ZpZWxkfSkgPT4gZmllbGQgPT0gXCJhbHRlcm5hdGl2ZVwiKT8ubm9kZVxuXG4gICAgICB0aGlzLnNoYXBlKG5vZGUsIFtcImlmXCIsIGNvbmRpdGlvbiwgY29uc2VxdWVuY2UsIC4uLihhbHRlcm5hdGl2ZSA/IFthbHRlcm5hdGl2ZV0gOiBbXSldKVxuICAgICAgY29uc3Qgc3RhdGVtZW50ID0ge2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklmU3RhdGVtZW50XCIpLCBsb2NhdGlvbiwgY29uZGl0aW9uOiB0aGlzLmV4cHJlc3Npb24oY29uZGl0aW9uKSwgY29uc2VxdWVudDogdGhpcy5ibG9jayhjb25zZXF1ZW5jZSl9XG5cbiAgICAgIGlmICghYWx0ZXJuYXRpdmUpIHJldHVybiBzdGF0ZW1lbnRcbiAgICAgIGNvbnN0IGJyYW5jaCA9IHRoaXMucGFydHMoYWx0ZXJuYXRpdmUpWzFdXG5cbiAgICAgIHRoaXMuc2hhcGUoYWx0ZXJuYXRpdmUsIFtcImVsc2VcIiwgYnJhbmNoXSlcbiAgICAgIHJldHVybiB7Li4uc3RhdGVtZW50LCBhbHRlcm5hdGU6IGJyYW5jaC50eXBlID09IFwiaWZfc3RhdGVtZW50XCJcbiAgICAgICAgPyB7a2luZDogXCJCbG9ja1wiLCBsb2NhdGlvbjogdGhpcy5sb2NhdGlvbihicmFuY2gpLCBzdGF0ZW1lbnRzOiBbdGhpcy5zdGF0ZW1lbnQoYnJhbmNoKV19IDogdGhpcy5ibG9jayhicmFuY2gpfVxuICAgIH1cbiAgICBpZiAobm9kZS50eXBlID09IFwiZXhwcmVzc2lvbl9zdGF0ZW1lbnRcIikge1xuICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IHRoaXMucGFydHMobm9kZSlbMF1cblxuICAgICAgdGhpcy5zaGFwZShub2RlLCBbZXhwcmVzc2lvbiwgXCI7XCJdKVxuICAgICAgaWYgKGV4cHJlc3Npb24udHlwZSA9PSBcImFzc2lnbm1lbnRfZXhwcmVzc2lvblwiKSB7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmZpZWxkKGV4cHJlc3Npb24sIFwibGVmdFwiKVxuICAgICAgICBjb25zdCByaWdodCA9IHRoaXMuZmllbGQoZXhwcmVzc2lvbiwgXCJyaWdodFwiKVxuICAgICAgICBjb25zdCBvcGVyYXRvciA9IHRoaXMuZmllbGQoZXhwcmVzc2lvbiwgXCJvcGVyYXRvclwiKVxuXG4gICAgICAgIHRoaXMuc2hhcGUoZXhwcmVzc2lvbiwgW2xlZnQsIFwiPVwiLCByaWdodF0pXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpLCBuYW1lOiB0aGlzLmlkZW50aWZpZXIobGVmdCksIGxvY2F0aW9uOiB0aGlzLmxvY2F0aW9uKGxlZnQpfSwge25hbWU6IHRoaXMubG9jYXRpb24obGVmdCl9KVxuXG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIiwgbG9jYXRpb24sIHRhcmdldCwgZXhwcmVzc2lvbjogdGhpcy5leHByZXNzaW9uKHJpZ2h0KX0sIHtvcGVyYXRvcjogdGhpcy5sb2NhdGlvbihvcGVyYXRvcil9KVxuICAgICAgfVxuICAgICAgY29uc3QgY2FsbCA9IHRoaXMuY2FsbChleHByZXNzaW9uKVxuXG4gICAgICBpZiAoIS9ec2VtYW50aWZvbGRfcHJpbnRfKD86aW50ZWdlcnxib29sZWFufHN0cmluZykkL3UudGVzdCh0aGlzLnRleHQoY2FsbC5uYW1lKSkgfHwgY2FsbC5hcmd1bWVudHMubGVuZ3RoICE9IDEpIHRoaXMuZmFpbChub2RlLCBcInByaW50IHNjYWZmb2xkXCIpXG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZXhwcmVzc2lvbihjYWxsLmFyZ3VtZW50c1swXSlcblxuICAgICAgY29uc3Qgc3RhdGVtZW50ID0ge2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlByaW50U3RhdGVtZW50XCIpLCBsb2NhdGlvbiwgZXhwcmVzc2lvbjogdmFsdWV9XG5cbiAgICAgIHRoaXMucHJpbnRUeXBlcy5zZXQoc3RhdGVtZW50LCB7bm9kZTogY2FsbC5uYW1lLCB0eXBlOiB0aGlzLnRleHQoY2FsbC5uYW1lKS5zbGljZShcInNlbWFudGlmb2xkX3ByaW50X1wiLmxlbmd0aCl9KVxuICAgICAgcmV0dXJuIHN0YXRlbWVudFxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mYWlsKG5vZGUpXG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgb25lIGxleGljYWwgYnJhY2VkIGJsb2NrIGluIHNvdXJjZSBvcmRlci5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBub2RlIC0gQmxvY2sgbm9kZS5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBTZW1hbnRpYyBibG9jay5cbiAgICovXG4gIGJsb2NrKG5vZGUpIHtcbiAgICBpZiAobm9kZS50eXBlICE9IFwiY29tcG91bmRfc3RhdGVtZW50XCIpIHRoaXMuZmFpbChub2RlLCBcImJyYWNlZCBibG9jayByZXF1aXJlZFwiKVxuICAgIGNvbnN0IHBhcnRzID0gdGhpcy5wYXJ0cyhub2RlKVxuXG4gICAgdGhpcy5zaGFwZShub2RlLCBbXCJ7XCIsIC4uLnBhcnRzLnNsaWNlKDEsIC0xKSwgXCJ9XCJdKVxuICAgIHJldHVybiB7a2luZDogXCJCbG9ja1wiLCBsb2NhdGlvbjogdGhpcy5sb2NhdGlvbihub2RlKSwgc3RhdGVtZW50czogdGhpcy5nZW5lcmF0ZWRcbiAgICAgID8gdGhpcy5nZW5lcmF0ZWRTdGF0ZW1lbnRzKG5vZGUuY2hpbGRyZW4ubWFwKCh7bm9kZTogY2hpbGR9KSA9PiBjaGlsZCkuc2xpY2UoMSwgLTEpKVxuICAgICAgOiBwYXJ0cy5zbGljZSgxLCAtMSkubWFwKChjaGlsZCkgPT4gdGhpcy5zdGF0ZW1lbnQoY2hpbGQpKX1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBvbmUgZmlsZS1sb2NhbCBzZW1hbnRpYyBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBub2RlIC0gRnVuY3Rpb24gZGVmaW5pdGlvbi5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb259IFNlbWFudGljIGZ1bmN0aW9uLlxuICAgKi9cbiAgZnVuY3Rpb24obm9kZSkge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZpZWxkKG5vZGUsIFwidHlwZVwiKVxuICAgIGNvbnN0IGRlY2xhcmF0b3IgPSB0aGlzLmZpZWxkKG5vZGUsIFwiZGVjbGFyYXRvclwiKVxuICAgIGNvbnN0IGJvZHkgPSB0aGlzLmZpZWxkKG5vZGUsIFwiYm9keVwiKVxuXG4gICAgdGhpcy5zaGFwZShub2RlLCBbXCJzdG9yYWdlX2NsYXNzX3NwZWNpZmllclwiLCB0eXBlLCBkZWNsYXJhdG9yLCBib2R5XSlcbiAgICBpZiAodGhpcy50ZXh0KHRoaXMucGFydHMobm9kZSlbMF0pICE9IFwic3RhdGljXCIgfHwgZGVjbGFyYXRvci50eXBlICE9IFwiZnVuY3Rpb25fZGVjbGFyYXRvclwiKSB0aGlzLmZhaWwobm9kZSwgXCJmaWxlLWxvY2FsIGZ1bmN0aW9uIHJlcXVpcmVkXCIpXG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZmllbGQoZGVjbGFyYXRvciwgXCJkZWNsYXJhdG9yXCIpXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHRoaXMuZmllbGQoZGVjbGFyYXRvciwgXCJwYXJhbWV0ZXJzXCIpXG5cbiAgICB0aGlzLnNoYXBlKGRlY2xhcmF0b3IsIFtuYW1lLCBwYXJhbWV0ZXJzXSlcbiAgICBjb25zdCBwYXJ0cyA9IHRoaXMucGFydHMocGFyYW1ldGVycylcblxuICAgIHRoaXMuc2hhcGUocGFyYW1ldGVycywgW1wiKFwiLCBcInBhcmFtZXRlcl9kZWNsYXJhdGlvblwiLCBcIixcIiwgXCJwYXJhbWV0ZXJfZGVjbGFyYXRpb25cIiwgXCIpXCJdKVxuICAgIGNvbnN0IGNvbnZlcnRlZCA9IFtwYXJ0c1sxXSwgcGFydHNbM11dLm1hcCgocGFyYW1ldGVyKSA9PiB7XG4gICAgICBjb25zdCB0eXBlTm9kZSA9IHRoaXMuZmllbGQocGFyYW1ldGVyLCBcInR5cGVcIilcbiAgICAgIGNvbnN0IG5hbWVOb2RlID0gdGhpcy5maWVsZChwYXJhbWV0ZXIsIFwiZGVjbGFyYXRvclwiKVxuXG4gICAgICB0aGlzLnNoYXBlKHBhcmFtZXRlciwgW3R5cGVOb2RlLCBuYW1lTm9kZV0pXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUGFyYW1ldGVyXCIpLCBsb2NhdGlvbjogdGhpcy5sb2NhdGlvbihwYXJhbWV0ZXIpLCBuYW1lOiB0aGlzLmlkZW50aWZpZXIobmFtZU5vZGUpLCB0eXBlOiB0aGlzLnR5cGUodHlwZU5vZGUpfSwge25hbWU6IHRoaXMubG9jYXRpb24obmFtZU5vZGUpfSlcbiAgICB9KVxuXG4gICAgdGhpcy5kZWNsYXJlZEZ1bmN0aW9ucy5hZGQodGhpcy5pZGVudGlmaWVyKG5hbWUpKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiwgbG9jYXRpb246IHRoaXMubG9jYXRpb24obm9kZSksIG5hbWU6IHRoaXMuaWRlbnRpZmllcihuYW1lKSwgcGFyYW1ldGVyczogY29udmVydGVkLFxuICAgICAgcmV0dXJuVHlwZTogdGhpcy50eXBlKHR5cGUpLCBib2R5OiB0aGlzLmJsb2NrKGJvZHkpfSwge25hbWU6IHRoaXMubG9jYXRpb24obmFtZSl9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgb25seSB0aGUgZXhhY3QgbWFpbiBjbGVhbnVwIGFuZCBzdGF0dXMgc2NhZmZvbGRpbmcuXG4gICAqIEBwYXJhbSB7Q3N0Tm9kZX0gbm9kZSAtIEVudHJ5IGRlZmluaXRpb24uXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FbnRyeVBvaW50fSBTZW1hbnRpYyBlbnRyeS5cbiAgICovXG4gIG1haW4obm9kZSkge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZpZWxkKG5vZGUsIFwidHlwZVwiKVxuICAgIGNvbnN0IGRlY2xhcmF0b3IgPSB0aGlzLmZpZWxkKG5vZGUsIFwiZGVjbGFyYXRvclwiKVxuICAgIGNvbnN0IGJvZHkgPSB0aGlzLmZpZWxkKG5vZGUsIFwiYm9keVwiKVxuXG4gICAgdGhpcy5zaGFwZShub2RlLCBbdHlwZSwgZGVjbGFyYXRvciwgYm9keV0pXG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZmllbGQoZGVjbGFyYXRvciwgXCJkZWNsYXJhdG9yXCIpXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHRoaXMuZmllbGQoZGVjbGFyYXRvciwgXCJwYXJhbWV0ZXJzXCIpXG5cbiAgICB0aGlzLnNoYXBlKGRlY2xhcmF0b3IsIFtuYW1lLCBwYXJhbWV0ZXJzXSlcbiAgICBpZiAodGhpcy50ZXh0KHR5cGUpICE9IFwiaW50XCIgfHwgdGhpcy50ZXh0KG5hbWUpICE9IFwibWFpblwiKSB0aGlzLmZhaWwobm9kZSwgXCJtYWluIHNpZ25hdHVyZVwiKVxuICAgIHRoaXMuc2hhcGUocGFyYW1ldGVycywgW1wiKFwiLCBcInBhcmFtZXRlcl9kZWNsYXJhdGlvblwiLCBcIilcIl0pXG4gICAgY29uc3Qgdm9pZFBhcmFtZXRlciA9IHRoaXMucGFydHMocGFyYW1ldGVycylbMV1cblxuICAgIHRoaXMuc2hhcGUodm9pZFBhcmFtZXRlciwgW1wicHJpbWl0aXZlX3R5cGVcIl0pXG4gICAgaWYgKHRoaXMudGV4dCh0aGlzLnBhcnRzKHZvaWRQYXJhbWV0ZXIpWzBdKSAhPSBcInZvaWRcIikgdGhpcy5mYWlsKHZvaWRQYXJhbWV0ZXIsIFwibWFpbiBwYXJhbWV0ZXJzXCIpXG4gICAgY29uc3QgcGFydHMgPSB0aGlzLnBhcnRzKGJvZHkpXG4gICAgY29uc3QgY2xlYW51cCA9IHBhcnRzLmF0KC0zKVxuICAgIGNvbnN0IHN0YXR1cyA9IHBhcnRzLmF0KC0yKVxuXG4gICAgaWYgKCFjbGVhbnVwIHx8ICFzdGF0dXMgfHwgYm9keS50eXBlICE9IFwiY29tcG91bmRfc3RhdGVtZW50XCIpIHRoaXMuZmFpbChib2R5LCBcIm1haW4gY2xlYW51cFwiKVxuICAgIHRoaXMuc2hhcGUoYm9keSwgW1wie1wiLCAuLi5wYXJ0cy5zbGljZSgxLCAtMSksIFwifVwiXSlcbiAgICB0aGlzLnNoYXBlKGNsZWFudXAsIFtcImNhbGxfZXhwcmVzc2lvblwiLCBcIjtcIl0pXG4gICAgY29uc3QgY2FsbCA9IHRoaXMuY2FsbCh0aGlzLnBhcnRzKGNsZWFudXApWzBdKVxuXG4gICAgaWYgKHRoaXMudGV4dChjYWxsLm5hbWUpICE9IFwic2VtYW50aWZvbGRfY2xlYW51cFwiIHx8IGNhbGwuYXJndW1lbnRzLmxlbmd0aCAhPSAwKSB0aGlzLmZhaWwoY2xlYW51cCwgXCJlbnRyeSBjbGVhbnVwXCIpXG4gICAgdGhpcy5zaGFwZShzdGF0dXMsIFtcInJldHVyblwiLCBcIm51bWJlcl9saXRlcmFsXCIsIFwiO1wiXSlcbiAgICBpZiAodGhpcy50ZXh0KHRoaXMucGFydHMoc3RhdHVzKVsxXSkgIT0gXCIwXCIpIHRoaXMuZmFpbChzdGF0dXMsIFwiZW50cnkgc3RhdHVzXCIpXG4gICAgcmV0dXJuIHtraW5kOiBcIkVudHJ5UG9pbnRcIiwgbG9jYXRpb246IHRoaXMubG9jYXRpb24obm9kZSksIGJvZHk6IHtraW5kOiBcIkJsb2NrXCIsIGxvY2F0aW9uOiB0aGlzLmxvY2F0aW9uKGJvZHkpLFxuICAgICAgc3RhdGVtZW50czogdGhpcy5nZW5lcmF0ZWQgPyB0aGlzLmdlbmVyYXRlZFN0YXRlbWVudHMoYm9keS5jaGlsZHJlbi5tYXAoKHtub2RlOiBjaGlsZH0pID0+IGNoaWxkKS5maWx0ZXIoKGNoaWxkKSA9PlxuICAgICAgICBjaGlsZC5zdGFydEluZGV4ID4gYm9keS5zdGFydEluZGV4ICYmIGNoaWxkLmVuZEluZGV4IDw9IGNsZWFudXAuc3RhcnRJbmRleCkpXG4gICAgICAgIDogcGFydHMuc2xpY2UoMSwgLTMpLm1hcCgoY2hpbGQpID0+IHRoaXMuc3RhdGVtZW50KGNoaWxkKSl9fVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIG9uZSBjb21wbGV0ZSB0cmFuc2xhdGlvbiB1bml0IGFmdGVyIGV4aGF1c3RpdmUgcmVjb3ZlcnkgcmVqZWN0aW9uLlxuICAgKiBAcGFyYW0ge0NzdE5vZGV9IHJvb3QgLSBGcm96ZW4gdHJhbnNsYXRpb24gdW5pdC5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBWYWxpZGF0ZWQgc2VtYW50aWMgbW9kdWxlLlxuICAgKi9cbiAgbW9kdWxlKHJvb3QpIHtcbiAgICB0aGlzLnZhbGlkYXRlVHJlZShyb290KVxuICAgIHRoaXMuZ2VuZXJhdGVkID0gcm9vdC5jaGlsZHJlbi5zb21lKCh7bm9kZX0pID0+IG5vZGUudHlwZSA9PSBcImNvbW1lbnRcIiAmJiB0aGlzLnRleHQobm9kZSkgPT0gXCIvKiBzZW1hbnRpZm9sZDpwcm9ncmFtOmM6djEgKi9cIilcbiAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkKSB0aGlzLnJlamVjdFNjYWZmb2xkQ29tbWVudHMocm9vdClcbiAgICBpZiAocm9vdC50eXBlICE9IFwidHJhbnNsYXRpb25fdW5pdFwiKSB0aGlzLmZhaWwocm9vdCwgXCJ0cmFuc2xhdGlvbiB1bml0IHJlcXVpcmVkXCIpXG4gICAgY29uc3QgcGFydHMgPSB0aGlzLnBhcnRzKHJvb3QpXG4gICAgY29uc3QgZGVmaW5pdGlvbnMgPSBwYXJ0cy5zbGljZSgxKS5maWx0ZXIoKG5vZGUpID0+ICF0aGlzLmdlbmVyYXRlZCB8fCBub2RlLnR5cGUgIT0gXCJkZWNsYXJhdGlvblwiKVxuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA8IDMgfHwgcGFydHNbMF0udHlwZSAhPSBcInByZXByb2NfaW5jbHVkZVwiIHx8IGRlZmluaXRpb25zLnNvbWUoKG5vZGUpID0+IG5vZGUudHlwZSAhPSBcImZ1bmN0aW9uX2RlZmluaXRpb25cIikpIHRoaXMuZmFpbChyb290LCBcInRyYW5zbGF0aW9uIHVuaXQgbWVtYmVyc1wiKVxuICAgIGNvbnN0IGluY2x1ZGUgPSBwYXJ0c1swXVxuICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuZmllbGQoaW5jbHVkZSwgXCJwYXRoXCIpXG5cbiAgICB0aGlzLnNoYXBlKGluY2x1ZGUsIFtcIiNpbmNsdWRlXCIsIGhlYWRlcl0pXG4gICAgaWYgKGhlYWRlci50eXBlICE9IFwic3RyaW5nX2xpdGVyYWxcIiB8fCB0aGlzLnRleHQoaGVhZGVyKSAhPSAnXCJzZW1hbnRpZm9sZF9ydW50aW1lLmhcIicpIHRoaXMuZmFpbChpbmNsdWRlLCBcInN1cHBvcnQgaGVhZGVyIGluY2x1ZGVcIilcbiAgICBpZiAoZGVmaW5pdGlvbnMubGVuZ3RoIDwgMikgdGhpcy5mYWlsKHJvb3QsIFwic2VtYW50aWMgZnVuY3Rpb24gYW5kIG1haW4gcmVxdWlyZWRcIilcbiAgICBjb25zdCBtb2R1bGUgPSB7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTW9kdWxlXCIpLCBsb2NhdGlvbjogdGhpcy5sb2NhdGlvbihyb290KSwgZnVuY3Rpb25zOiBkZWZpbml0aW9ucy5zbGljZSgwLCAtMSkubWFwKChub2RlKSA9PiB0aGlzLmZ1bmN0aW9uKG5vZGUpKSxcbiAgICAgIGVudHJ5UG9pbnQ6IHRoaXMubWFpbihkZWZpbml0aW9uc1tkZWZpbml0aW9ucy5sZW5ndGggLSAxXSl9XG5cbiAgICBpZiAodGhpcy5nZW5lcmF0ZWQpIHZhbGlkYXRlTmF0aXZlR3JhcGgobW9kdWxlKVxuICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlUGFyc2VkTW9kdWxlKG1vZHVsZSwgXCJjXCIpXG5cbiAgICB0aGlzLnZhbGlkYXRlUHJpbnRUeXBlcyh2YWxpZGF0ZWQpXG4gICAgaWYgKHRoaXMuZ2VuZXJhdGVkKSB7XG4gICAgICBjb25zdCBjYW5vbmljYWwgPSBnZW5lcmF0ZUNQcm9ncmFtKHttb2R1bGU6IHZhbGlkYXRlZH0pLmFydGlmYWN0c1swXS5jb250ZW50XG5cbiAgICAgIGlmICh0eXBlb2YgY2Fub25pY2FsICE9IFwic3RyaW5nXCIpIHRocm93IG5ldyBFcnJvcihcIkMgYmFja2VuZCByZXR1cm5lZCBhIG5vbnRleHQgZW50cnkgYXJ0aWZhY3QuXCIpXG4gICAgICB0aGlzLmNvbXBhcmVUcmVlKHJvb3QsIHBhcnNlQ3N0KGNhbm9uaWNhbCkucm9vdCwgbmV3IENSZWFkZXIodGhpcy5maWxlbmFtZSwgY2Fub25pY2FsKSlcbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRlZFxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBuYXRpdmUgcHJpbnQgaGVscGVyIHNlbGVjdGlvbiBhZnRlciBzZW1hbnRpYyBzY2FsYXIgcmVzb2x1dGlvbi5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gUmVzb2x2ZWQgbW9kdWxlLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHZhbGlkYXRlUHJpbnRUeXBlcyhtb2R1bGUpIHtcbiAgICBjb25zdCBwbGFubmVyID0gbmV3IE9yZGVyZWRFeHByZXNzaW9uUGxhbm5lcihtb2R1bGUpXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIG9uZSBsZXhpY2FsIGJsb2NrIHdpdGggaXRzIHZpc2libGUgc2NhbGFyIGJpbmRpbmdzLlxuICAgICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IGJsb2NrIC0gU2VtYW50aWMgYmxvY2suXG4gICAgICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1R5cGVOYW1lPn0gaW5oZXJpdGVkIC0gVmlzaWJsZSBiaW5kaW5ncy5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBjb25zdCB2aXNpdCA9IChibG9jaywgaW5oZXJpdGVkKSA9PiB7XG4gICAgICBjb25zdCBiaW5kaW5ncyA9IG5ldyBNYXAoaW5oZXJpdGVkKVxuXG4gICAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBibG9jay5zdGF0ZW1lbnRzKSB7XG4gICAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIikgYmluZGluZ3Muc2V0KHN0YXRlbWVudC5uYW1lLCBzdGF0ZW1lbnQudHlwZS5uYW1lKVxuICAgICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiKSB7XG4gICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSB0aGlzLnByaW50VHlwZXMuZ2V0KHN0YXRlbWVudClcblxuICAgICAgICAgIGlmICghZXhwZWN0ZWQpIHRocm93IG5ldyBFcnJvcihcIkMgcHJpbnQgc3RhdGVtZW50IGxvc3QgaXRzIHBhcnNlciBoZWxwZXIgaWRlbnRpdHkuXCIpXG4gICAgICAgICAgaWYgKHBsYW5uZXIudHlwZShzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgYmluZGluZ3MpICE9IGV4cGVjdGVkLnR5cGUpIHRoaXMuZmFpbChleHBlY3RlZC5ub2RlLCBcInByaW50IGhlbHBlciBzY2FsYXIgbWlzbWF0Y2hcIilcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICAgICAgdmlzaXQoc3RhdGVtZW50LmNvbnNlcXVlbnQsIGJpbmRpbmdzKVxuICAgICAgICAgIGlmIChzdGF0ZW1lbnQuYWx0ZXJuYXRlKSB2aXNpdChzdGF0ZW1lbnQuYWx0ZXJuYXRlLCBiaW5kaW5ncylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykgdmlzaXQoZGVjbGFyYXRpb24uYm9keSwgbmV3IE1hcChkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlLm5hbWVdKSkpXG4gICAgdmlzaXQobW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgbmV3IE1hcCgpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlamVjdHMgcHJvZmlsZS1sb29raW5nIGNvbW1lbnRzIG91dHNpZGUgYSBjb21wbGV0ZSBjYW5vbmljYWwgZ2VuZXJhdGVkIHByb2dyYW0uXG4gICAqIEBwYXJhbSB7Q3N0Tm9kZX0gbm9kZSAtIEN1cnJlbnQgbm9kZS5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICByZWplY3RTY2FmZm9sZENvbW1lbnRzKG5vZGUpIHtcbiAgICBpZiAobm9kZS50eXBlID09IFwiY29tbWVudFwiICYmIC9zZW1hbnRpZm9sZDp8QHNlbWFudGlmb2xkL3UudGVzdCh0aGlzLnRleHQobm9kZSkpKSB0aGlzLmZhaWwobm9kZSwgXCJ1bnJlY29nbml6ZWQgc2NhZmZvbGQgY29tbWVudFwiKVxuICAgIGZvciAoY29uc3Qge25vZGU6IGNoaWxkfSBvZiBub2RlLmNoaWxkcmVuKSB0aGlzLnJlamVjdFNjYWZmb2xkQ29tbWVudHMoY2hpbGQpXG4gIH1cblxuICAvKipcbiAgICogUmV0YWlucyBldmVyeSBzY2FmZm9sZCBjb21tZW50IGFuZCBzdHJ1Y3R1cmFsIGVkZ2UsIGlnbm9yaW5nIG9ubHkgb3JkaW5hcnkgY29tbWVudHMuXG4gICAqIEBwYXJhbSB7Q3N0Tm9kZX0gbm9kZSAtIENTVCBwYXJlbnQuXG4gICAqIEByZXR1cm5zIHtDc3ROb2RlW119IENvbXBsZXRlIHNpZ25pZmljYW50IGNoaWxkIGxpc3QuXG4gICAqL1xuICBzaWduaWZpY2FudChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4ubWFwKCh7bm9kZTogY2hpbGR9KSA9PiBjaGlsZCkuZmlsdGVyKChjaGlsZCkgPT5cbiAgICAgIGNoaWxkLnR5cGUgIT0gXCJjb21tZW50XCIgfHwgL3NlbWFudGlmb2xkOnxAc2VtYW50aWZvbGQvdS50ZXN0KHRoaXMudGV4dChjaGlsZCkpKVxuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGV2ZXJ5IHRva2VuLCBmaWVsZCwgdHlwZSwgdXNlLCBvcmRlcmluZyBlZGdlIGFuZCBjb25zdW1lciBhZ2FpbnN0IHRoZSBjYW5vbmljYWwgcGxhbi5cbiAgICogVGhpcyBjaGVja3MgdGhlIG9yaWdpbmFsIENTVDsgaXQgbmV2ZXIgcmVjb3ZlcnMgbWVhbmluZyBmcm9tIGdlbmVyYXRlZCBzb3VyY2UgdGV4dC5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBhY3R1YWwgLSBPcmlnaW5hbCB0cmVlIG5vZGUuXG4gICAqIEBwYXJhbSB7Q3N0Tm9kZX0gZXhwZWN0ZWQgLSBDYW5vbmljYWwgdHJlZSBub2RlIGZvciB0aGUgcmVjb25zdHJ1Y3RlZCBzZW1hbnRpY3MuXG4gICAqIEBwYXJhbSB7Q1JlYWRlcn0gY2Fub25pY2FsIC0gQ2Fub25pY2FsIHRva2VuIHJlYWRlci5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjb21wYXJlVHJlZShhY3R1YWwsIGV4cGVjdGVkLCBjYW5vbmljYWwpIHtcbiAgICBpZiAoYWN0dWFsLnR5cGUgIT0gZXhwZWN0ZWQudHlwZSB8fCBhY3R1YWwubmFtZWQgIT0gZXhwZWN0ZWQubmFtZWQgfHwgYWN0dWFsLmV4dHJhICE9IGV4cGVjdGVkLmV4dHJhKSB0aGlzLmZhaWwoYWN0dWFsLCBcImdlbmVyYXRlZCBzY2FmZm9sZCBub2RlIHNoYXBlXCIpXG4gICAgY29uc3QgbGVmdCA9IHRoaXMuc2lnbmlmaWNhbnQoYWN0dWFsKVxuICAgIGNvbnN0IHJpZ2h0ID0gY2Fub25pY2FsLnNpZ25pZmljYW50KGV4cGVjdGVkKVxuXG4gICAgaWYgKGxlZnQubGVuZ3RoICE9IHJpZ2h0Lmxlbmd0aCkgdGhpcy5mYWlsKGFjdHVhbCwgXCJnZW5lcmF0ZWQgc2NhZmZvbGQgY2hpbGQgY291bnRcIilcbiAgICBpZiAoIWxlZnQubGVuZ3RoICYmIHRoaXMudGV4dChhY3R1YWwpICE9IGNhbm9uaWNhbC50ZXh0KGV4cGVjdGVkKSkgdGhpcy5mYWlsKGFjdHVhbCwgXCJnZW5lcmF0ZWQgc2NhZmZvbGQgdG9rZW4sIHR5cGUsIG9yZGVyIG9yIGNvbnN1bWVyXCIpXG4gICAgbGVmdC5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChhY3R1YWwuY2hpbGRyZW4uZmluZCgoZWRnZSkgPT4gZWRnZS5ub2RlID09PSBjaGlsZCk/LmZpZWxkICE9IGV4cGVjdGVkLmNoaWxkcmVuLmZpbmQoKGVkZ2UpID0+IGVkZ2Uubm9kZSA9PT0gcmlnaHRbaW5kZXhdKT8uZmllbGQpIHRoaXMuZmFpbChjaGlsZCwgXCJnZW5lcmF0ZWQgc2NhZmZvbGQgZmllbGRcIilcbiAgICAgIHRoaXMuY29tcGFyZVRyZWUoY2hpbGQsIHJpZ2h0W2luZGV4XSwgY2Fub25pY2FsKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmVjb2duaXplcyB0aGUgc2hhcGUgb2YgYW4gaW5lcnQgZ2VuZXJhdGVkIHVudXNlZC1iaW5kaW5nIGNhc3Q7IGNhbm9uaWNhbCBjb21wYXJpc29uIGNoZWNrcyBpdHMgZXhhY3QgdGFyZ2V0IGFuZCBwbGFjZW1lbnQuXG4gICAqIEBwYXJhbSB7Q3N0Tm9kZX0gbm9kZSAtIENhbmRpZGF0ZSBzdGF0ZW1lbnQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoaXMgaXMgYSBkaXNjYXJkLXNoYXBlZCBjYW5kaWRhdGUuXG4gICAqL1xuICBkaXNjYXJkKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50eXBlID09IFwiZXhwcmVzc2lvbl9zdGF0ZW1lbnRcIiAmJiB0aGlzLnBhcnRzKG5vZGUpWzBdPy50eXBlID09IFwiY2FzdF9leHByZXNzaW9uXCJcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvbnN0cnVjdHMgcGFpcmVkIHN0YXRlbWVudCByZWdpb25zIGJlZm9yZSBtYW5kYXRvcnkgd2hvbGUtQ1NUIGNhbm9uaWNhbCB2ZXJpZmljYXRpb24uXG4gICAqIEBwYXJhbSB7Q3N0Tm9kZVtdfSBjaGlsZHJlbiAtIE9yZGVyZWQgYmxvY2sgY2hpbGRyZW4gd2l0aG91dCBicmFjZXMgb3IgbWFpbiBjbGVhbnVwLlxuICAgKiBAcmV0dXJucyB7U3RhdGVtZW50W119IENhbmRpZGF0ZSBzZW1hbnRpYyBzdGF0ZW1lbnRzLlxuICAgKi9cbiAgZ2VuZXJhdGVkU3RhdGVtZW50cyhjaGlsZHJlbikge1xuICAgIGNvbnN0IG5vZGVzID0gY2hpbGRyZW4uZmlsdGVyKChub2RlKSA9PiBub2RlLnR5cGUgIT0gXCJjb21tZW50XCIgfHwgL3NlbWFudGlmb2xkOnxAc2VtYW50aWZvbGQvdS50ZXN0KHRoaXMudGV4dChub2RlKSkpXG4gICAgLyoqIEB0eXBlIHtTdGF0ZW1lbnRbXX0gKi9cbiAgICBjb25zdCBzdGF0ZW1lbnRzID0gW11cbiAgICBsZXQgY3Vyc29yID0gMFxuXG4gICAgd2hpbGUgKGN1cnNvciA8IG5vZGVzLmxlbmd0aCAmJiB0aGlzLmRpc2NhcmQobm9kZXNbY3Vyc29yXSkpIGN1cnNvcisrXG4gICAgd2hpbGUgKGN1cnNvciA8IG5vZGVzLmxlbmd0aCkge1xuICAgICAgY29uc3QgYmVnaW4gPSBub2Rlc1tjdXJzb3IrK11cbiAgICAgIGNvbnN0IG1hdGNoID0gYmVnaW4udHlwZSA9PSBcImNvbW1lbnRcIiAmJiAvXlxcL1xcKiBzZW1hbnRpZm9sZDpvcmRlcmVkLWV4cHJlc3Npb246Yzp2MSBiZWdpbiAoWzAtOV17Nn0pIChbMC05YS1mXXs2NH0pIFxcKlxcLyQvdS5leGVjKHRoaXMudGV4dChiZWdpbikpXG5cbiAgICAgIGlmICghbWF0Y2gpIHRoaXMuZmFpbChiZWdpbiwgXCJjb21wbGV0ZSBvcmRlcmVkIHN0YXRlbWVudCByZWdpb24gcmVxdWlyZWRcIilcbiAgICAgIGNvbnN0IG91dGVyID0gdGhpcy50ZW1wb3JhcnlFeHByZXNzaW9uc1xuICAgICAgY29uc3Qgb3V0ZXJOYW1lcyA9IHRoaXMudGVtcG9yYXJ5TmFtZXNcblxuICAgICAgdGhpcy50ZW1wb3JhcnlFeHByZXNzaW9ucyA9IG5ldyBNYXAoKVxuICAgICAgdGhpcy50ZW1wb3JhcnlOYW1lcyA9IG5ldyBTZXQoKVxuICAgICAgd2hpbGUgKGN1cnNvciA8IG5vZGVzLmxlbmd0aCAmJiB0aGlzLnRlbXBvcmFyeURlY2xhcmF0aW9uKG5vZGVzW2N1cnNvcl0pKSBjdXJzb3IgPSB0aGlzLnJlYWRUZW1wb3Jhcnkobm9kZXMsIGN1cnNvcilcbiAgICAgIGNvbnN0IGNvbnN1bWVyID0gbm9kZXNbY3Vyc29yKytdXG5cbiAgICAgIGlmICghY29uc3VtZXIpIHRoaXMuZmFpbChiZWdpbiwgXCJtaXNzaW5nIG9yZGVyZWQgY29uc3VtZXJcIilcbiAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuc3RhdGVtZW50KGNvbnN1bWVyKVxuXG4gICAgICBpZiAodGhpcy50ZW1wb3JhcnlFeHByZXNzaW9ucy5zaXplICE9IDApIHRoaXMuZmFpbChjb25zdW1lciwgXCJ1bmNvbnN1bWVkIG9yZGVyZWQgdGVtcG9yYXJ5XCIpXG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIgJiYgbm9kZXNbY3Vyc29yXSAmJiB0aGlzLmRpc2NhcmQobm9kZXNbY3Vyc29yXSkpIGN1cnNvcisrXG4gICAgICBjb25zdCBlbmQgPSBub2Rlc1tjdXJzb3IrK11cblxuICAgICAgaWYgKCFlbmQgfHwgZW5kLnR5cGUgIT0gXCJjb21tZW50XCIgfHwgdGhpcy50ZXh0KGVuZCkgIT0gYC8qIHNlbWFudGlmb2xkOm9yZGVyZWQtZXhwcmVzc2lvbjpjOnYxIGVuZCAke21hdGNoWzFdfSAke21hdGNoWzJdfSAqL2ApIHRoaXMuZmFpbChlbmQgPz8gYmVnaW4sIFwib3JkZXJlZCBtYXJrZXIgcGFpclwiKVxuICAgICAgdGhpcy50ZW1wb3JhcnlFeHByZXNzaW9ucyA9IG91dGVyXG4gICAgICB0aGlzLnRlbXBvcmFyeU5hbWVzID0gb3V0ZXJOYW1lc1xuICAgICAgc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudClcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlbWVudHNcbiAgfVxuXG4gIC8qKlxuICAgKiBJZGVudGlmaWVzIG9ubHkgYSBkZWNsYXJhdGlvbiBhdCB0aGUgY3VycmVudCByZWdpb24gbGV2ZWwsIHdpdGhvdXQgZGVzY2VuZGFudCBzZWFyY2hpbmcuXG4gICAqIEBwYXJhbSB7Q3N0Tm9kZX0gbm9kZSAtIENhbmRpZGF0ZSBub2RlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgZGlyZWN0IGluaXRpYWxpemVkIG5hbWUgdXNlcyB0aGUgcmVzZXJ2ZWQgcHJlZml4LlxuICAgKi9cbiAgdGVtcG9yYXJ5RGVjbGFyYXRpb24obm9kZSkge1xuICAgIGlmIChub2RlLnR5cGUgIT0gXCJkZWNsYXJhdGlvblwiKSByZXR1cm4gZmFsc2VcbiAgICBjb25zdCBkZWNsYXJhdG9yID0gbm9kZS5jaGlsZHJlbi5maW5kKCh7ZmllbGR9KSA9PiBmaWVsZCA9PSBcImRlY2xhcmF0b3JcIik/Lm5vZGVcbiAgICBjb25zdCBuYW1lID0gZGVjbGFyYXRvcj8uY2hpbGRyZW4uZmluZCgoe2ZpZWxkfSkgPT4gZmllbGQgPT0gXCJkZWNsYXJhdG9yXCIpPy5ub2RlXG5cbiAgICByZXR1cm4gbmFtZT8udHlwZSA9PSBcImlkZW50aWZpZXJcIiAmJiB0aGlzLnRleHQobmFtZSkuc3RhcnRzV2l0aChcInNlbWFudGlmb2xkX29yZGVyZWRfXCIpXG4gIH1cblxuICAvKipcbiAgICogRXhwYW5kcyBvbmUgY2FuZGlkYXRlIHRlbXBvcmFyeSwgaW5jbHVkaW5nIGl0cyBjb25kaXRpb25hbCBSSFMsIHJldGFpbmluZyBvcmlnaW5hbCBvcGVyYXRpb24gdG9rZW5zLlxuICAgKiBAcGFyYW0ge0NzdE5vZGVbXX0gbm9kZXMgLSBDdXJyZW50IGxleGljYWwgc2VxdWVuY2UuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJzb3IgLSBEZWNsYXJhdGlvbiBwb3NpdGlvbi5cbiAgICogQHJldHVybnMge251bWJlcn0gTmV4dCB1bmNvbnN1bWVkIHBvc2l0aW9uLlxuICAgKi9cbiAgcmVhZFRlbXBvcmFyeShub2RlcywgY3Vyc29yKSB7XG4gICAgY29uc3Qgbm9kZSA9IG5vZGVzW2N1cnNvcisrXVxuICAgIGNvbnN0IGRlY2xhcmF0b3IgPSB0aGlzLmZpZWxkKG5vZGUsIFwiZGVjbGFyYXRvclwiKVxuICAgIGNvbnN0IG5hbWVOb2RlID0gdGhpcy5maWVsZChkZWNsYXJhdG9yLCBcImRlY2xhcmF0b3JcIilcbiAgICBjb25zdCBuYW1lID0gdGhpcy50ZXh0KG5hbWVOb2RlKVxuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZpZWxkKG5vZGUsIFwidHlwZVwiKVxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5maWVsZChkZWNsYXJhdG9yLCBcInZhbHVlXCIpXG5cbiAgICB0aGlzLnNoYXBlKG5vZGUsIFt0eXBlLCBkZWNsYXJhdG9yLCBcIjtcIl0pXG4gICAgdGhpcy5zaGFwZShkZWNsYXJhdG9yLCBbbmFtZU5vZGUsIFwiPVwiLCB2YWx1ZV0pXG4gICAgdGhpcy50eXBlKHR5cGUpXG4gICAgaWYgKCEvXnNlbWFudGlmb2xkX29yZGVyZWRfWzAtOV17Nn0kL3UudGVzdChuYW1lKSB8fCB0aGlzLnRlbXBvcmFyeU5hbWVzPy5oYXMobmFtZSkpIHRoaXMuZmFpbChuYW1lTm9kZSwgXCJvcmRlcmVkIHRlbXBvcmFyeSBkZWNsYXJhdGlvblwiKVxuICAgIHRoaXMudGVtcG9yYXJ5TmFtZXM/LmFkZChuYW1lKVxuICAgIGxldCBleHByZXNzaW9uID0gdGhpcy5leHByZXNzaW9uKHZhbHVlKVxuICAgIGNvbnN0IGJyYW5jaCA9IG5vZGVzW2N1cnNvcl1cblxuICAgIGlmIChicmFuY2g/LnR5cGUgPT0gXCJpZl9zdGF0ZW1lbnRcIiAmJiBbXCJpZGVudGlmaWVyXCIsIFwidHJ1ZVwiLCBcImZhbHNlXCJdLmluY2x1ZGVzKHZhbHVlLnR5cGUpKSB7XG4gICAgICBjb25zdCBjb25kaXRpb24gPSB0aGlzLmZpZWxkKGJyYW5jaCwgXCJjb25kaXRpb25cIilcbiAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmZpZWxkKGJyYW5jaCwgXCJjb25zZXF1ZW5jZVwiKVxuXG4gICAgICB0aGlzLnNoYXBlKGJyYW5jaCwgW1wiaWZcIiwgY29uZGl0aW9uLCBib2R5XSlcbiAgICAgIHRoaXMuc2hhcGUoY29uZGl0aW9uLCBbXCIoXCIsIHRoaXMucGFydHMoY29uZGl0aW9uKVsxXSwgXCIpXCJdKVxuICAgICAgY29uc3QgdGVzdCA9IHRoaXMucGFydHMoY29uZGl0aW9uKVsxXVxuICAgICAgY29uc3QgaXNPciA9IHRlc3QudHlwZSA9PSBcInVuYXJ5X2V4cHJlc3Npb25cIlxuICAgICAgY29uc3QgdGFyZ2V0ID0gaXNPciA/IHRoaXMuZmllbGQodGVzdCwgXCJhcmd1bWVudFwiKSA6IHRlc3RcblxuICAgICAgaWYgKHRhcmdldC50eXBlICE9IFwiaWRlbnRpZmllclwiIHx8IHRoaXMudGV4dCh0YXJnZXQpICE9IG5hbWUpIHRoaXMuZmFpbCh0YXJnZXQsIFwic2hvcnQtY2lyY3VpdCB0ZW1wb3JhcnkgdGVzdFwiKVxuICAgICAgaWYgKGlzT3IpIHRoaXMuc2hhcGUodGVzdCwgW1wiIVwiLCB0YXJnZXRdKVxuICAgICAgaWYgKGJvZHkudHlwZSAhPSBcImNvbXBvdW5kX3N0YXRlbWVudFwiKSB0aGlzLmZhaWwoYm9keSwgXCJzaG9ydC1jaXJjdWl0IGJsb2NrXCIpXG4gICAgICBjb25zdCBpbnNpZGUgPSB0aGlzLnNpZ25pZmljYW50KGJvZHkpLnNsaWNlKDEsIC0xKVxuICAgICAgbGV0IG9mZnNldCA9IDBcblxuICAgICAgd2hpbGUgKG9mZnNldCA8IGluc2lkZS5sZW5ndGggJiYgdGhpcy50ZW1wb3JhcnlEZWNsYXJhdGlvbihpbnNpZGVbb2Zmc2V0XSkpIG9mZnNldCA9IHRoaXMucmVhZFRlbXBvcmFyeShpbnNpZGUsIG9mZnNldClcbiAgICAgIGlmIChvZmZzZXQgIT0gaW5zaWRlLmxlbmd0aCAtIDEpIHRoaXMuZmFpbChib2R5LCBcInNob3J0LWNpcmN1aXQgZmluYWwgd3JpdGVcIilcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBpbnNpZGVbb2Zmc2V0XVxuXG4gICAgICB0aGlzLnNoYXBlKGFzc2lnbm1lbnQsIFtcImFzc2lnbm1lbnRfZXhwcmVzc2lvblwiLCBcIjtcIl0pXG4gICAgICBjb25zdCBhc3NpZ25lZCA9IHRoaXMucGFydHMoYXNzaWdubWVudClbMF1cbiAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmZpZWxkKGFzc2lnbmVkLCBcImxlZnRcIilcbiAgICAgIGNvbnN0IHJpZ2h0ID0gdGhpcy5maWVsZChhc3NpZ25lZCwgXCJyaWdodFwiKVxuXG4gICAgICB0aGlzLnNoYXBlKGFzc2lnbmVkLCBbbGVmdCwgXCI9XCIsIHJpZ2h0XSlcbiAgICAgIGlmIChsZWZ0LnR5cGUgIT0gXCJpZGVudGlmaWVyXCIgfHwgdGhpcy50ZXh0KGxlZnQpICE9IG5hbWUpIHRoaXMuZmFpbChsZWZ0LCBcInNob3J0LWNpcmN1aXQgcmVzdWx0IHdyaXRlXCIpXG4gICAgICB0aGlzLnNoYXBlKHJpZ2h0LCBbXCIoXCIsIFwiYmluYXJ5X2V4cHJlc3Npb25cIiwgXCIpXCJdKVxuICAgICAgY29uc3QgYmluYXJ5ID0gdGhpcy5wYXJ0cyhyaWdodClbMV1cbiAgICAgIGNvbnN0IHJlcGVhdGVkID0gdGhpcy5maWVsZChiaW5hcnksIFwibGVmdFwiKVxuICAgICAgY29uc3Qgb3BlcmFuZCA9IHRoaXMuZmllbGQoYmluYXJ5LCBcInJpZ2h0XCIpXG4gICAgICBjb25zdCBvcGVyYXRvciA9IHRoaXMuZmllbGQoYmluYXJ5LCBcIm9wZXJhdG9yXCIpXG5cbiAgICAgIHRoaXMuc2hhcGUoYmluYXJ5LCBbcmVwZWF0ZWQsIGlzT3IgPyBcInx8XCIgOiBcIiYmXCIsIG9wZXJhbmRdKVxuICAgICAgaWYgKHJlcGVhdGVkLnR5cGUgIT0gXCJpZGVudGlmaWVyXCIgfHwgdGhpcy50ZXh0KHJlcGVhdGVkKSAhPSBuYW1lKSB0aGlzLmZhaWwocmVwZWF0ZWQsIFwic2hvcnQtY2lyY3VpdCBjb25zdW1lZCB2YWx1ZVwiKVxuICAgICAgZXhwcmVzc2lvbiA9IHRoaXMuYmluYXJ5KG5vZGUsIGlzT3IgPyBcIk9yXCIgOiBcIkFuZFwiLCBleHByZXNzaW9uLCB0aGlzLmV4cHJlc3Npb24ob3BlcmFuZCksIG9wZXJhdG9yKVxuICAgICAgY3Vyc29yKytcbiAgICB9XG4gICAgdGhpcy50ZW1wb3JhcnlFeHByZXNzaW9ucz8uc2V0KG5hbWUsIGV4cHJlc3Npb24pXG4gICAgcmV0dXJuIGN1cnNvclxuICB9XG59XG5cbi8qKlxuICogUGFyc2VzIG9ubHkgdGhlIGZyb3plbiBsZWdhY3kgQ1NULCB3aXRoIG5vIHNvdXJjZS10ZXh0IHJlY292ZXJ5IHBhdGguXG4gKiBAcGFyYW0ge3tmaWxlbmFtZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZ319IGlucHV0IC0gRXhhY3QgY2FsbGVyIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gUGFyc2VkIEMgc2VtYW50aWNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDKHtmaWxlbmFtZSwgc291cmNlfSkge1xuICBpZiAoIWhhc09ubHlVbmljb2RlU2NhbGFycyhzb3VyY2UpKSB7XG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSBjcmVhdGVDb29yZGluYXRlSW5kZXgoc291cmNlKVxuICAgIGNvbnN0IG9mZnNldCA9IHNvdXJjZS5zZWFyY2goL1tcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/PCFbXFx1RDgwMC1cXHVEQkZGXSlbXFx1REMwMC1cXHVERkZGXS91KVxuXG4gICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7Y29kZTogXCJQQVJTRV9FUlJPUlwiLCBsYW5ndWFnZTogXCJjXCIsIG1lc3NhZ2U6IFwiQyBzb3VyY2UgY29udGFpbnMgYSBsb25lIFVURi0xNiBzdXJyb2dhdGUuXCIsXG4gICAgICBsb2NhdGlvbjoge2ZpbGVuYW1lLCBzdGFydDogaW5kZXhlZFBvaW50QXQoY29vcmRpbmF0ZXMsIG9mZnNldCksIGVuZDogaW5kZXhlZFBvaW50QXQoY29vcmRpbmF0ZXMsIG9mZnNldCArIDEpfX0pXG4gIH1cbiAgaWYgKHNvdXJjZS5sZW5ndGggPiBtYXhpbXVtQ1NvdXJjZUxlbmd0aCkge1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gY3JlYXRlQ29vcmRpbmF0ZUluZGV4KHNvdXJjZSlcblxuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNcIiwgXCJzb3VyY2UgZXhjZWVkcyB0aGUgZnJvemVuIEMgcGFyc2VyJ3MgMzI3NjcgVVRGLTE2IGlucHV0IGxpbWl0XCIsIHtcbiAgICAgIGZpbGVuYW1lLCBzdGFydDogaW5kZXhlZFBvaW50QXQoY29vcmRpbmF0ZXMsIDApLCBlbmQ6IGluZGV4ZWRQb2ludEF0KGNvb3JkaW5hdGVzLCBzb3VyY2UubGVuZ3RoKVxuICAgIH0pXG4gIH1cbiAgbGV0IHNuYXBzaG90XG5cbiAgdHJ5IHtcbiAgICBzbmFwc2hvdCA9IHBhcnNlQ3N0KHNvdXJjZSlcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gcGFyc2VGYWlsdXJlKFwiY1wiLCBlcnJvcilcbiAgfVxuICBjb25zdCByZWFkZXIgPSBuZXcgQ1JlYWRlcihmaWxlbmFtZSwgc291cmNlKVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIHJlYWRlci5tb2R1bGUoc25hcHNob3Qucm9vdClcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAocmVhZGVyLmdlbmVyYXRlZCAmJiBlcnJvciBpbnN0YW5jZW9mIFNlbWFudGlmb2xkRGlhZ25vc3RpYyAmJiBlcnJvci5sYW5ndWFnZSA9PSBcImNcIiAmJlxuICAgICAgZXJyb3IuY29kZSAhPSBcIlBBUlNFX0VSUk9SXCIgJiYgZXJyb3IuY29kZSAhPSBcIlVOU1VQUE9SVEVEX1NZTlRBWFwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjXCIsIGBpbnZhbGlkIGdlbmVyYXRlZCBvcmRlcmVkIHNjYWZmb2xkOiAke2Vycm9yLmNvZGV9YCwgZXJyb3IubG9jYXRpb24gPz8gcmVhZGVyLmxvY2F0aW9uKHNuYXBzaG90LnJvb3QpKVxuICAgIH1cbiAgICB0aHJvdyBlcnJvclxuICB9XG59XG4iXX0=
|
|
752
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZHMvYy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDakQsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sb0NBQW9DLENBQUE7QUFDM0UsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sNkJBQTZCLENBQUE7QUFDaEUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sa0NBQWtDLENBQUE7QUFDcEUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDRCQUE0QixDQUFBO0FBQ3hELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUE7QUFDdEMsT0FBTyxFQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUNwRyxPQUFPLEVBQUMscUJBQXFCLEVBQUUsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUE7QUFDN0UsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUE7QUFDN0QsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMkJBQTJCLENBQUE7QUFDMUQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sd0JBQXdCLENBQUE7QUFDNUQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0seUJBQXlCLENBQUE7QUFDNUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sY0FBYyxDQUFBO0FBRTdDLHlEQUF5RDtBQUN6RCxzRUFBc0U7QUFDdEUsb0VBQW9FO0FBRXBFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDL0IsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxD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QUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsa0NBQWtDLENBQUMsQ0FBQTtZQUMxSSxPQUFPLGdCQUFnQixDQUFDLEVBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQTtRQUMzRyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDckMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7WUFDckMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUE7WUFDN0MsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUVsRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQTtZQUN6QyxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLDZCQUE2QixDQUFDLENBQUE7WUFDdEUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFD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WUFBWSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUNqQyxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBRTVDLElBQUksQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDckMsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksS0FBSyxZQUFZLHFCQUFxQixJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksR0FBRztZQUNyRixLQUFLLENBQUMsSUFBSSxJQUFJLGFBQWEsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLG9CQUFvQixFQUFFLENBQUM7WUFDcEUsT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsdUNBQXVDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDdEksQ0FBQztRQUNELE1BQU0sS0FBSyxDQUFBO0lBQ2IsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtnZW5lcmF0ZUNQcm9ncmFtfSBmcm9tIFwiLi4vYmFja2VuZHMvYy5qc1wiXG5pbXBvcnQge09yZGVyZWRFeHByZXNzaW9uUGxhbm5lcn0gZnJvbSBcIi4uL2JhY2tlbmRzL29yZGVyZWQtZXhwcmVzc2lvbnMuanNcIlxuaW1wb3J0IHttYXhpbXVtQ1NvdXJjZUxlbmd0aH0gZnJvbSBcIi4uL2JhY2tlbmRzL2MtdmFsaWRhdGlvbi5qc1wiXG5pbXBvcnQge3ZhbGlkYXRlTmF0aXZlR3JhcGh9IGZyb20gXCIuLi9iYWNrZW5kcy9uYXRpdmUtdmFsaWRhdGlvbi5qc1wiXG5pbXBvcnQge2lzQ0lkZW50aWZpZXJ9IGZyb20gXCIuLi9iYWNrZW5kcy9pZGVudGlmaWVycy5qc1wiXG5pbXBvcnQge3BhcnNlQ3N0fSBmcm9tIFwiLi9jLXBhcnNlci5qc1wiXG5pbXBvcnQge21pc3NpbmdUeXBlLCBwYXJzZUZhaWx1cmUsIFNlbWFudGlmb2xkRGlhZ25vc3RpYywgdW5zdXBwb3J0ZWRTeW50YXh9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7Y3JlYXRlQ29vcmRpbmF0ZUluZGV4LCBpbmRleGVkUG9pbnRBdH0gZnJvbSBcIi4uL3NlbWFudGljL2xvY2F0aW9uLmpzXCJcbmltcG9ydCB7d2l0aEFkYXB0ZWRPcGVyYXRpb259IGZyb20gXCIuLi9zZW1hbnRpYy9vcGVyYXRvcnMuanNcIlxuaW1wb3J0IHt3aXRoUGFyc2VyUmFuZ2VzfSBmcm9tIFwiLi4vc2VtYW50aWMvcHJvdmVuYW5jZS5qc1wiXG5pbXBvcnQge2hhc09ubHlVbmljb2RlU2NhbGFyc30gZnJvbSBcIi4uL3NlbWFudGljL3NjYWxhcnMuanNcIlxuaW1wb3J0IHt2YWxpZGF0ZVBhcnNlZE1vZHVsZX0gZnJvbSBcIi4uL3NlbWFudGljL3ZhbGlkYXRlLmpzXCJcbmltcG9ydCB7c291cmNlU2NhbGFyVHlwZX0gZnJvbSBcIi4vc2NhbGFycy5qc1wiXG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi9jLXBhcnNlci5qc1wiKS5Dc3ROb2RlfSBDc3ROb2RlICovXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IEV4cHJlc3Npb24gKi9cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RhdGVtZW50fSBTdGF0ZW1lbnQgKi9cblxuY29uc3QgYmluYXJ5T3BlcmF0aW9ucyA9IG5ldyBNYXAoW1xuICBbXCIrXCIsIFwiUGhwQWRkXCJdLCBbXCItXCIsIFwiU3VidHJhY3RcIl0sIFtcIipcIiwgXCJNdWx0aXBseVwiXSwgW1wiPT1cIiwgXCJKYXZhRXF1YWxcIl0sIFtcIiE9XCIsIFwiSmF2YU5vdEVxdWFsXCJdLFxuICBbXCI8XCIsIFwiTGVzc1RoYW5cIl0sIFtcIjw9XCIsIFwiTGVzc1RoYW5PckVxdWFsXCJdLCBbXCI+XCIsIFwiR3JlYXRlclRoYW5cIl0sIFtcIj49XCIsIFwiR3JlYXRlclRoYW5PckVxdWFsXCJdLFxuICBbXCImJlwiLCBcIkFuZFwiXSwgW1wifHxcIiwgXCJPclwiXVxuXSlcbmNvbnN0IGhlbHBlcnMgPSBuZXcgTWFwKFtcbiAgW1wic2VtYW50aWZvbGRfaW50ZWdlcl9hZGRcIiwgXCJQaHBBZGRcIl0sIFtcInNlbWFudGlmb2xkX2ludGVnZXJfc3VidHJhY3RcIiwgXCJTdWJ0cmFjdFwiXSxcbiAgW1wic2VtYW50aWZvbGRfaW50ZWdlcl9tdWx0aXBseVwiLCBcIk11bHRpcGx5XCJdLCBbXCJzZW1hbnRpZm9sZF9zdHJpbmdfY29uY2F0XCIsIFwiU3RyaW5nQ29uY2F0XCJdLFxuICBbXCJzZW1hbnRpZm9sZF9zdHJpbmdfZXF1YWxcIiwgXCJTdHJpbmdFcXVhbFwiXSwgW1wic2VtYW50aWZvbGRfc3RyaW5nX25vdF9lcXVhbFwiLCBcIlN0cmluZ05vdEVxdWFsXCJdXG5dKVxuXG4vKiogU3RyaWN0IGZpZWxkLWFuZC10b2tlbiBjb25zdW1lciBmb3IgdGhlIHByaXZhdGUgZnJvemVuIEMgQ1NULiAqL1xuZXhwb3J0IGNsYXNzIENSZWFkZXIge1xuICAvKipcbiAgICogT3ducyBzb3VyY2UgY29udGVudCBhbmQgaXRzIGNvb3JkaW5hdGUgaW5kZXgsIG5ldmVyIG5hdGl2ZSBwYXJzZXIgaGFuZGxlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gT3JpZ2luYWwgZmlsZW5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBFeGFjdCBvcmlnaW5hbCBzb3VyY2UuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihmaWxlbmFtZSwgc291cmNlKSB7XG4gICAgdGhpcy5maWxlbmFtZSA9IGZpbGVuYW1lXG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2VcbiAgICB0aGlzLmNvb3JkaW5hdGVzID0gY3JlYXRlQ29vcmRpbmF0ZUluZGV4KHNvdXJjZSlcbiAgICB0aGlzLmdlbmVyYXRlZCA9IGZhbHNlXG4gICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBFeHByZXNzaW9uPiB8IHVuZGVmaW5lZH0gKi9cbiAgICB0aGlzLnRlbXBvcmFyeUV4cHJlc3Npb25zID0gdW5kZWZpbmVkXG4gICAgLyoqIEB0eXBlIHtTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZH0gKi9cbiAgICB0aGlzLnRlbXBvcmFyeU5hbWVzID0gdW5kZWZpbmVkXG4gICAgLyoqIEB0eXBlIHtNYXA8U3RhdGVtZW50LCB7bm9kZTogQ3N0Tm9kZSwgdHlwZTogc3RyaW5nfT59ICovXG4gICAgdGhpcy5wcmludFR5cGVzID0gbmV3IE1hcCgpXG4gICAgLyoqIEB0eXBlIHtTZXQ8c3RyaW5nPn0gKi9cbiAgICB0aGlzLmRlY2xhcmVkRnVuY3Rpb25zID0gbmV3IFNldCgpXG4gIH1cblxuICAvKipcbiAgICogTG9jYXRlcyBvbmUgcGFyc2VyLW93bmVkIHJhbmdlIGluIFVURi0xNiBjb29yZGluYXRlcy5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBub2RlIC0gUGFyc2VyIG5vZGUuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gVmVyaWZpZWQgbG9jYXRpb24uXG4gICAqL1xuICBsb2NhdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIHtmaWxlbmFtZTogdGhpcy5maWxlbmFtZSwgc3RhcnQ6IGluZGV4ZWRQb2ludEF0KHRoaXMuY29vcmRpbmF0ZXMsIG5vZGUuc3RhcnRJbmRleCksIGVuZDogaW5kZXhlZFBvaW50QXQodGhpcy5jb29yZGluYXRlcywgbm9kZS5lbmRJbmRleCl9XG4gIH1cblxuICAvKipcbiAgICogUmVhZHMgb25seSB0aGUgc3BlbGxpbmcgb2YgYW4gYWxyZWFkeSByZWNvZ25pemVkIHBhcnNlciBub2RlLlxuICAgKiBAcGFyYW0ge0NzdE5vZGV9IG5vZGUgLSBQYXJzZXIgbm9kZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gRXhhY3QgdG9rZW4gc3BlbGxpbmcuXG4gICAqL1xuICB0ZXh0KG5vZGUpIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2Uuc2xpY2Uobm9kZS5zdGFydEluZGV4LCBub2RlLmVuZEluZGV4KVxuICB9XG5cbiAgLyoqXG4gICAqIFJlamVjdHMgYSBsb2NhdGVkIHNvdXJjZS1wcm9maWxlIHZpb2xhdGlvbi5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBub2RlIC0gUmVqZWN0ZWQgbm9kZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXRhaWxdIC0gUHJvZmlsZSB2aW9sYXRpb24uXG4gICAqIEByZXR1cm5zIHtuZXZlcn0gQWx3YXlzIHRocm93cy5cbiAgICovXG4gIGZhaWwobm9kZSwgZGV0YWlsID0gbm9kZS50eXBlKSB7XG4gICAgdW5zdXBwb3J0ZWRTeW50YXgoXCJjXCIsIGRldGFpbCwgdGhpcy5sb2NhdGlvbihub2RlKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmF2ZXJzZXMgYWxsIGVkZ2VzIGJlZm9yZSBpbnRlcnByZXRpbmcgYW55IHNvdXJjZSBtZWFuaW5nLlxuICAgKiBAcGFyYW0ge0NzdE5vZGV9IG5vZGUgLSBDdXJyZW50IHBhcnNlciBub2RlLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHZhbGlkYXRlVHJlZShub2RlKSB7XG4gICAgZm9yIChjb25zdCB7bm9kZTogY2hpbGR9IG9mIG5vZGUuY2hpbGRyZW4pIHRoaXMudmFsaWRhdGVUcmVlKGNoaWxkKVxuICAgIGlmIChub2RlLmVycm9yIHx8IG5vZGUubWlzc2luZyB8fCBub2RlLmhhc0Vycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtjb2RlOiBcIlBBUlNFX0VSUk9SXCIsIGxhbmd1YWdlOiBcImNcIiwgbG9jYXRpb246IHRoaXMubG9jYXRpb24obm9kZSksIG1lc3NhZ2U6IGBDIHBhcnNlciByZWNvdmVyeSBhdCAnJHtub2RlLnR5cGV9Jy5gfSlcbiAgICB9XG4gICAgaWYgKG5vZGUuZXh0cmEgJiYgbm9kZS50eXBlICE9IFwiY29tbWVudFwiKSB0aGlzLmZhaWwobm9kZSwgXCJ1bmV4cGVjdGVkIGV4dHJhIHBhcnNlciBjaGlsZFwiKVxuICAgIGlmICgobm9kZS50eXBlID09IFwiY29tbWVudFwiIHx8IG5vZGUudHlwZSA9PSBcInN0cmluZ19jb250ZW50XCIpICYmIC9cXD9cXD9bPS8nKCkhPD4tXS91LnRlc3QodGhpcy50ZXh0KG5vZGUpKSkge1xuICAgICAgdGhpcy5mYWlsKG5vZGUsIFwidHJpZ3JhcGggcHJlcHJvY2Vzc2luZ1wiKVxuICAgIH1cbiAgICBpZiAobm9kZS50eXBlID09IFwiY29tbWVudFwiKSB7XG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy50ZXh0KG5vZGUpXG5cbiAgICAgIC8vIEEgdGVybWluYWwgQ1IgYmVsb25ncyB0byBvcmRpbmFyeSBDUkxGOyBjb250ZW50IGFmdGVyIGEgYmFyZSBDUiBpcyBub3QgYSBDIGxpbmUgY29tbWVudC5cbiAgICAgIGlmICgvXFxcXCg/Olxcclxcbj98XFxuKS91LnRlc3QodGV4dCkgfHwgdGV4dC5zdGFydHNXaXRoKFwiLy9cIikgJiYgL1xccig/IVxcbnwkKS91LnRlc3QodGV4dCkpIHtcbiAgICAgICAgdGhpcy5mYWlsKG5vZGUsIFwicHJlcHJvY2Vzc2luZy1zZW5zaXRpdmUgY29tbWVudFwiKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXBhcmF0ZXMgaGFybWxlc3MgY29tbWVudHMgYWZ0ZXIgZXZlcnkgY2hpbGQgaGFzIGJlZW4gdmFsaWRhdGVkLlxuICAgKiBAcGFyYW0ge0NzdE5vZGV9IG5vZGUgLSBQYXJlbnQgbm9kZS5cbiAgICogQHJldHVybnMge0NzdE5vZGVbXX0gT3JkZXJlZCBzdHJ1Y3R1cmFsIGNoaWxkcmVuLlxuICAgKi9cbiAgcGFydHMobm9kZSkge1xuICAgIHJldHVybiBub2RlLmNoaWxkcmVuLm1hcCgoe25vZGU6IGNoaWxkfSkgPT4gY2hpbGQpLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLnR5cGUgIT0gXCJjb21tZW50XCIpXG4gIH1cblxuICAvKipcbiAgICogUmVxdWlyZXMgb25lIGV4YWN0IGZpZWxkIHJhdGhlciB0aGFuIHNlYXJjaGluZyBkZXNjZW5kYW50cy5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBub2RlIC0gRmllbGQgb3duZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gRmllbGQgbmFtZS5cbiAgICogQHJldHVybnMge0NzdE5vZGV9IFNvbGUgZmllbGQgY2hpbGQuXG4gICAqL1xuICBmaWVsZChub2RlLCBuYW1lKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IG5vZGUuY2hpbGRyZW4uZmlsdGVyKCh7ZmllbGR9KSA9PiBmaWVsZCA9PSBuYW1lKVxuXG4gICAgaWYgKG1hdGNoZXMubGVuZ3RoICE9IDEpIHJldHVybiB0aGlzLmZhaWwobm9kZSwgYGV4cGVjdGVkIG9uZSAnJHtuYW1lfScgZmllbGRgKVxuICAgIHJldHVybiBtYXRjaGVzWzBdLm5vZGVcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdW1lcyBldmVyeSBzdHJ1Y3R1cmFsIGNoaWxkLCBpbmNsdWRpbmcgcHVuY3R1YXRpb24uXG4gICAqIEBwYXJhbSB7Q3N0Tm9kZX0gbm9kZSAtIFNoYXBlIG93bmVyLlxuICAgKiBAcGFyYW0geyhDc3ROb2RlIHwgc3RyaW5nKVtdfSBleHBlY3RlZCAtIE9yZGVyZWQgbm9kZXMgb3IgdG9rZW4ga2luZHMuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc2hhcGUobm9kZSwgZXhwZWN0ZWQpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMucGFydHMobm9kZSlcblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggIT0gZXhwZWN0ZWQubGVuZ3RoIHx8IGNoaWxkcmVuLnNvbWUoKGNoaWxkLCBpbmRleCkgPT5cbiAgICAgIHR5cGVvZiBleHBlY3RlZFtpbmRleF0gPT0gXCJzdHJpbmdcIiA/IGNoaWxkLnR5cGUgIT0gZXhwZWN0ZWRbaW5kZXhdIDogY2hpbGQgIT09IGV4cGVjdGVkW2luZGV4XSkpIHRoaXMuZmFpbChub2RlLCBgJHtub2RlLnR5cGV9IGNoaWxkIHNoYXBlYClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1aXJlcyBhbiBvcmRpbmFyeSBjYWxsZXIgaWRlbnRpZmllciBvdXRzaWRlIHRoZSBwcm90ZWN0ZWQgbmFtZXNwYWNlLlxuICAgKiBAcGFyYW0ge0NzdE5vZGV9IG5vZGUgLSBJZGVudGlmaWVyIHRva2VuLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBBY2NlcHRlZCBzcGVsbGluZy5cbiAgICovXG4gIGlkZW50aWZpZXIobm9kZSkge1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLnRleHQobm9kZSlcblxuICAgIGlmIChub2RlLnR5cGUgIT0gXCJpZGVudGlmaWVyXCIgfHwgIWlzQ0lkZW50aWZpZXIobmFtZSkpIHRoaXMuZmFpbChub2RlLCBcInJlc2VydmVkIG9yIHVuc3VwcG9ydGVkIGlkZW50aWZpZXJcIilcbiAgICByZXR1cm4gbmFtZVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIG9ubHkgdGhlIGNhbm9uaWNhbCBzY2FsYXIgdHlwZSBzcGVsbGluZ3MuXG4gICAqIEBwYXJhbSB7Q3N0Tm9kZX0gbm9kZSAtIFR5cGUgdG9rZW4uXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUmVmZXJlbmNlfSBTZW1hbnRpYyBzY2FsYXIuXG4gICAqL1xuICB0eXBlKG5vZGUpIHtcbiAgICBpZiAoIVtcInByaW1pdGl2ZV90eXBlXCIsIFwidHlwZV9pZGVudGlmaWVyXCJdLmluY2x1ZGVzKG5vZGUudHlwZSkpIHRoaXMuZmFpbChub2RlLCBcInNjYWxhciB0eXBlIHNoYXBlXCIpXG4gICAgY29uc3QgdHlwZSA9IHNvdXJjZVNjYWxhclR5cGUoXCJjXCIsIHRoaXMudGV4dChub2RlKSwgdGhpcy5sb2NhdGlvbihub2RlKSlcblxuICAgIGlmICghdHlwZSkgcmV0dXJuIHRoaXMuZmFpbChub2RlLCBcInVuc3VwcG9ydGVkIHNjYWxhciB0eXBlXCIpXG4gICAgcmV0dXJuIHR5cGVcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIGRpcmVjdCBmdW5jdGlvbiBjYWxsJ3MgZXhhY3QgYXJndW1lbnQgbGlzdC5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBub2RlIC0gQ2FsbCBub2RlLlxuICAgKiBAcmV0dXJucyB7e25hbWU6IENzdE5vZGUsIGFyZ3VtZW50czogQ3N0Tm9kZVtdfX0gUGFyc2VkIGNhbGwgc2hhcGUuXG4gICAqL1xuICBjYWxsKG5vZGUpIHtcbiAgICBpZiAobm9kZS50eXBlICE9IFwiY2FsbF9leHByZXNzaW9uXCIpIHJldHVybiB0aGlzLmZhaWwobm9kZSwgXCJkaXJlY3QgY2FsbCByZXF1aXJlZFwiKVxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmZpZWxkKG5vZGUsIFwiZnVuY3Rpb25cIilcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5maWVsZChub2RlLCBcImFyZ3VtZW50c1wiKVxuXG4gICAgdGhpcy5zaGFwZShub2RlLCBbbmFtZSwgbGlzdF0pXG4gICAgaWYgKG5hbWUudHlwZSAhPSBcImlkZW50aWZpZXJcIiB8fCBsaXN0LnR5cGUgIT0gXCJhcmd1bWVudF9saXN0XCIpIHRoaXMuZmFpbChub2RlLCBcImRpcmVjdCBjYWxsIHNoYXBlXCIpXG4gICAgY29uc3QgcGFydHMgPSB0aGlzLnBhcnRzKGxpc3QpXG4gICAgY29uc3QgYXJncyA9IHBhcnRzLnNsaWNlKDEsIC0xKS5maWx0ZXIoKF9wYXJ0LCBpbmRleCkgPT4gaW5kZXggJSAyID09IDApXG5cbiAgICB0aGlzLnNoYXBlKGxpc3QsIFtcIihcIiwgLi4uYXJncy5mbGF0TWFwKChhcmcsIGluZGV4KSA9PiBpbmRleCA9PSAwID8gW2FyZ10gOiBbXCIsXCIsIGFyZ10pLCBcIilcIl0pXG4gICAgcmV0dXJuIHthcmd1bWVudHM6IGFyZ3MsIG5hbWV9XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlcyBhIHBhcnNlci1iYWNrZWQgb3JkaW5hcnkgQyBzdHJpbmcgdG9rZW4gYXMgVVRGLTggYnl0ZXMuXG4gICAqIEBwYXJhbSB7Q3N0Tm9kZX0gbm9kZSAtIFN0cmluZyBsaXRlcmFsLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBDb21wbGV0ZSBVbmljb2RlIHNjYWxhciB2YWx1ZS5cbiAgICovXG4gIHN0cmluZyhub2RlKSB7XG4gICAgaWYgKG5vZGUudHlwZSAhPSBcInN0cmluZ19saXRlcmFsXCIpIHJldHVybiB0aGlzLmZhaWwobm9kZSwgXCJvcmRpbmFyeSBzdHJpbmcgbGl0ZXJhbCByZXF1aXJlZFwiKVxuICAgIGNvbnN0IHBhcnRzID0gdGhpcy5wYXJ0cyhub2RlKVxuXG4gICAgaWYgKHBhcnRzWzBdPy50eXBlICE9ICdcIicgfHwgcGFydHMuYXQoLTEpPy50eXBlICE9ICdcIicpIHRoaXMuZmFpbChub2RlLCBcInByZWZpeGVkIHN0cmluZyBsaXRlcmFsXCIpXG4gICAgY29uc3QgYnl0ZXMgPSBbXVxuXG4gICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IHBhcnRzLmxlbmd0aCAtIDE7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gcGFydHNbaW5kZXhdXG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy50ZXh0KGNoaWxkKVxuXG4gICAgICBpZiAoY2hpbGQudHlwZSA9PSBcInN0cmluZ19jb250ZW50XCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBieXRlIG9mIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0ZXh0KSkgYnl0ZXMucHVzaChieXRlKVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoY2hpbGQudHlwZSA9PSBcImVzY2FwZV9zZXF1ZW5jZVwiKSB7XG4gICAgICAgIGNvbnN0IHNpbXBsZSA9IG5ldyBNYXAoW1tcImFcIiwgN10sIFtcImJcIiwgOF0sIFtcImZcIiwgMTJdLCBbXCJuXCIsIDEwXSwgW1wiclwiLCAxM10sIFtcInRcIiwgOV0sIFtcInZcIiwgMTFdLCBbXCJcXFxcXCIsIDkyXSwgWydcIicsIDM0XSwgW1wiJ1wiLCAzOV0sIFtcIj9cIiwgNjNdXSlcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0ZXh0LnNsaWNlKDEpXG5cbiAgICAgICAgaWYgKHRleHRbMF0gIT0gXCJcXFxcXCIpIHRoaXMuZmFpbChjaGlsZCwgXCJpbnZhbGlkIGVzY2FwZVwiKVxuICAgICAgICBpZiAoc2ltcGxlLmhhcyh2YWx1ZSkpIGJ5dGVzLnB1c2goLyoqIEB0eXBlIHtudW1iZXJ9ICovIChzaW1wbGUuZ2V0KHZhbHVlKSkpXG4gICAgICAgIGVsc2UgaWYgKC9eWzAtN117MSwzfSQvdS50ZXN0KHZhbHVlKSB8fCAvXnhbMC05YS1mQS1GXSskL3UudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBuZXh0ID0gcGFydHNbaW5kZXggKyAxXVxuXG4gICAgICAgICAgLy8gQyBjb25zdW1lcyBldmVyeSBhZGphY2VudCBoZXggZGlnaXQ7IHRoZSBmcm96ZW4gZ3JhbW1hciBjYXBzIGVhY2ggZXNjYXBlIG5vZGUgYXQgZm91ci5cbiAgICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcInhcIikgJiYgbmV4dC50eXBlID09IFwic3RyaW5nX2NvbnRlbnRcIiAmJiBuZXh0LnN0YXJ0SW5kZXggPT0gY2hpbGQuZW5kSW5kZXggJiYgL15bMC05YS1mQS1GXS91LnRlc3QodGhpcy50ZXh0KG5leHQpKSkge1xuICAgICAgICAgICAgdGhpcy5mYWlsKGNoaWxkLCBcImhleGFkZWNpbWFsIGVzY2FwZSBzcGxpdCBieSBwYXJzZXIgYm91bmRhcnlcIilcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgbnVtYmVyID0gTnVtYmVyLnBhcnNlSW50KHZhbHVlWzBdID09IFwieFwiID8gdmFsdWUuc2xpY2UoMSkgOiB2YWx1ZSwgdmFsdWVbMF0gPT0gXCJ4XCIgPyAxNiA6IDgpXG5cbiAgICAgICAgICBpZiAobnVtYmVyID4gMjU1KSB0aGlzLmZhaWwoY2hpbGQsIFwiZXNjYXBlIG91dHNpZGUgYnl0ZSByYW5nZVwiKVxuICAgICAgICAgIGJ5dGVzLnB1c2gobnVtYmVyKVxuICAgICAgICB9IGVsc2UgdGhpcy5mYWlsKGNoaWxkLCBcInVuc3VwcG9ydGVkIGVzY2FwZVwiKVxuICAgICAgfSBlbHNlIHRoaXMuZmFpbChjaGlsZCwgXCJzdHJpbmcgY2hpbGRcIilcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoXCJ1dGYtOFwiLCB7ZmF0YWw6IHRydWUsIGlnbm9yZUJPTTogdHJ1ZX0pLmRlY29kZShuZXcgVWludDhBcnJheShieXRlcykpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcikgcmV0dXJuIHRoaXMuZmFpbChub2RlLCBcImludmFsaWQgVVRGLTggbGl0ZXJhbCBieXRlc1wiKVxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgc3VwcG9ydGVkIGV4cHJlc3Npb25zIHdpdGhvdXQgYXNzdW1pbmcgQyBhcmd1bWVudCBldmFsdWF0aW9uIG9yZGVyLlxuICAgKiBAcGFyYW0ge0NzdE5vZGV9IG5vZGUgLSBFeHByZXNzaW9uIG5vZGUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW25lc3RlZF0gLSBXaGV0aGVyIGEgc2VtYW50aWMgY2FsbCB3b3VsZCBoYXZlIHVuc3BlY2lmaWVkIG9yZGVyLlxuICAgKiBAcmV0dXJucyB7RXhwcmVzc2lvbn0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAgICovXG4gIGV4cHJlc3Npb24obm9kZSwgbmVzdGVkID0gZmFsc2UpIHtcbiAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMubG9jYXRpb24obm9kZSlcblxuICAgIGlmIChub2RlLnR5cGUgPT0gXCJwYXJlbnRoZXNpemVkX2V4cHJlc3Npb25cIikge1xuICAgICAgY29uc3QgcGFydHMgPSB0aGlzLnBhcnRzKG5vZGUpXG5cbiAgICAgIHRoaXMuc2hhcGUobm9kZSwgW1wiKFwiLCBwYXJ0c1sxXSwgXCIpXCJdKVxuICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbihwYXJ0c1sxXSwgbmVzdGVkKVxuICAgIH1cbiAgICBpZiAobm9kZS50eXBlID09IFwiaWRlbnRpZmllclwiKSB7XG4gICAgICBjb25zdCB0ZW1wb3JhcnkgPSB0aGlzLnRlbXBvcmFyeUV4cHJlc3Npb25zPy5nZXQodGhpcy50ZXh0KG5vZGUpKVxuXG4gICAgICBpZiAodGVtcG9yYXJ5KSB7XG4gICAgICAgIHRoaXMudGVtcG9yYXJ5RXhwcmVzc2lvbnM/LmRlbGV0ZSh0aGlzLnRleHQobm9kZSkpXG4gICAgICAgIHJldHVybiB0ZW1wb3JhcnlcbiAgICAgIH1cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIsIGxvY2F0aW9uLCBuYW1lOiB0aGlzLmlkZW50aWZpZXIobm9kZSl9LCB7bmFtZTogbG9jYXRpb259KVxuICAgIH1cbiAgICBpZiAobm9kZS50eXBlID09IFwidHJ1ZVwiIHx8IG5vZGUudHlwZSA9PSBcImZhbHNlXCIpIHtcbiAgICAgIGlmICh0aGlzLnRleHQobm9kZSkgIT0gbm9kZS50eXBlKSB0aGlzLmZhaWwobm9kZSwgXCJub25jYW5vbmljYWwgQm9vbGVhbiBsaXRlcmFsIHNwZWxsaW5nXCIpXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogXCJCb29sZWFuTGl0ZXJhbFwiLCBsb2NhdGlvbiwgdmFsdWU6IG5vZGUudHlwZSA9PSBcInRydWVcIn0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gICAgfVxuICAgIGlmIChub2RlLnR5cGUgPT0gXCJudW1iZXJfbGl0ZXJhbFwiKSB7XG4gICAgICBjb25zdCBzcGVsbGluZyA9IHRoaXMudGV4dChub2RlKVxuXG4gICAgICBpZiAoIS9eKD86MHxbMS05XVswLTldKikkL3UudGVzdChzcGVsbGluZykgfHwgIU51bWJlci5pc1NhZmVJbnRlZ2VyKE51bWJlcihzcGVsbGluZykpKSB0aGlzLmZhaWwobm9kZSwgXCJub24tc2FmZSBvciBub25jYW5vbmljYWwgaW50ZWdlclwiKVxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IFwiSW50ZWdlckxpdGVyYWxcIiwgbG9jYXRpb24sIHZhbHVlOiBOdW1iZXIoc3BlbGxpbmcpfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgICB9XG4gICAgaWYgKG5vZGUudHlwZSA9PSBcImJpbmFyeV9leHByZXNzaW9uXCIpIHtcbiAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmZpZWxkKG5vZGUsIFwibGVmdFwiKVxuICAgICAgY29uc3QgcmlnaHQgPSB0aGlzLmZpZWxkKG5vZGUsIFwicmlnaHRcIilcbiAgICAgIGNvbnN0IG9wZXJhdG9yID0gdGhpcy5maWVsZChub2RlLCBcIm9wZXJhdG9yXCIpXG4gICAgICBjb25zdCBpbnRlbnQgPSBiaW5hcnlPcGVyYXRpb25zLmdldChvcGVyYXRvci50eXBlKVxuXG4gICAgICB0aGlzLnNoYXBlKG5vZGUsIFtsZWZ0LCBvcGVyYXRvciwgcmlnaHRdKVxuICAgICAgaWYgKCFpbnRlbnQpIHJldHVybiB0aGlzLmZhaWwob3BlcmF0b3IsIFwidW5zdXBwb3J0ZWQgYmluYXJ5IG9wZXJhdG9yXCIpXG4gICAgICByZXR1cm4gdGhpcy5iaW5hcnkobm9kZSwgaW50ZW50LCB0aGlzLmV4cHJlc3Npb24obGVmdCwgdHJ1ZSksIHRoaXMuZXhwcmVzc2lvbihyaWdodCwgdHJ1ZSksIG9wZXJhdG9yKVxuICAgIH1cbiAgICBpZiAobm9kZS50eXBlID09IFwidW5hcnlfZXhwcmVzc2lvblwiKSB7XG4gICAgICBjb25zdCBvcGVyYXRvciA9IHRoaXMuZmllbGQobm9kZSwgXCJvcGVyYXRvclwiKVxuICAgICAgY29uc3QgYXJndW1lbnQgPSB0aGlzLmZpZWxkKG5vZGUsIFwiYXJndW1lbnRcIilcblxuICAgICAgdGhpcy5zaGFwZShub2RlLCBbb3BlcmF0b3IsIGFyZ3VtZW50XSlcbiAgICAgIGlmICghW1wiLVwiLCBcIiFcIl0uaW5jbHVkZXMob3BlcmF0b3IudHlwZSkpIHRoaXMuZmFpbChvcGVyYXRvciwgXCJ1bnN1cHBvcnRlZCB1bmFyeSBvcGVyYXRvclwiKVxuICAgICAgcmV0dXJuIHRoaXMudW5hcnkobm9kZSwgb3BlcmF0b3IudHlwZSA9PSBcIi1cIiA/IFwiTmVnYXRlXCIgOiBcIk5vdFwiLCB0aGlzLmV4cHJlc3Npb24oYXJndW1lbnQsIHRydWUpLCBvcGVyYXRvcilcbiAgICB9XG4gICAgaWYgKG5vZGUudHlwZSA9PSBcImNhbGxfZXhwcmVzc2lvblwiKSB7XG4gICAgICBjb25zdCBjYWxsID0gdGhpcy5jYWxsKG5vZGUpXG4gICAgICBjb25zdCBuYW1lID0gdGhpcy50ZXh0KGNhbGwubmFtZSlcblxuICAgICAgaWYgKG5hbWUgPT0gXCJJTlQ2NF9DXCIgfHwgbmFtZSA9PSBcIlNFTUFOVElGT0xEX1NUUklOR1wiKSB7XG4gICAgICAgIGlmIChjYWxsLmFyZ3VtZW50cy5sZW5ndGggIT0gMSkgdGhpcy5mYWlsKG5vZGUsIFwibGl0ZXJhbCBtYWNybyBhcml0eVwiKVxuICAgICAgICBpZiAobmFtZSA9PSBcIlNFTUFOVElGT0xEX1NUUklOR1wiKSByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogXCJTdHJpbmdMaXRlcmFsXCIsIGxvY2F0aW9uLCB2YWx1ZTogdGhpcy5zdHJpbmcoY2FsbC5hcmd1bWVudHNbMF0pfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgICAgICAgaWYgKGNhbGwuYXJndW1lbnRzWzBdLnR5cGUgIT0gXCJudW1iZXJfbGl0ZXJhbFwiKSB0aGlzLmZhaWwobm9kZSwgXCJpbnRlZ2VyIGxpdGVyYWwgbWFjcm8gb3BlcmFuZFwiKVxuICAgICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7Li4udGhpcy5leHByZXNzaW9uKGNhbGwuYXJndW1lbnRzWzBdKSwgbG9jYXRpb259LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICAgICAgfVxuICAgICAgLy8gR2VuZXJhdGVkIG9wZXJhdGlvbnMgYXJlIHNlcGFyYXRlIHRlbXBvcmFyeSBpbml0aWFsaXplcnM7IG9ubHkgbGl0ZXJhbCBtYWNyb3MgbWF5IG5lc3QgYXMgY2FsbHMuXG4gICAgICBpZiAobmVzdGVkKSB0aGlzLmZhaWwobm9kZSwgXCJjYWxsZXIgY2FsbCBpbiB1bnNwZWNpZmllZC1vcmRlciBleHByZXNzaW9uXCIpXG4gICAgICBpZiAobmFtZSA9PSBcInNlbWFudGlmb2xkX2ludGVnZXJfbmVnYXRlXCIpIHtcbiAgICAgICAgaWYgKGNhbGwuYXJndW1lbnRzLmxlbmd0aCAhPSAxKSB0aGlzLmZhaWwobm9kZSwgXCJuZWdhdGlvbiBoZWxwZXIgYXJpdHlcIilcbiAgICAgICAgcmV0dXJuIHRoaXMudW5hcnkobm9kZSwgXCJOZWdhdGVcIiwgdGhpcy5leHByZXNzaW9uKGNhbGwuYXJndW1lbnRzWzBdLCB0cnVlKSwgY2FsbC5uYW1lKVxuICAgICAgfVxuICAgICAgY29uc3QgaW50ZW50ID0gaGVscGVycy5nZXQobmFtZSlcblxuICAgICAgaWYgKGludGVudCkge1xuICAgICAgICBpZiAoY2FsbC5hcmd1bWVudHMubGVuZ3RoICE9IDIpIHRoaXMuZmFpbChub2RlLCBcInNjYWxhciBoZWxwZXIgYXJpdHlcIilcbiAgICAgICAgcmV0dXJuIHRoaXMuYmluYXJ5KG5vZGUsIGludGVudCwgdGhpcy5leHByZXNzaW9uKGNhbGwuYXJndW1lbnRzWzBdLCB0cnVlKSwgdGhpcy5leHByZXNzaW9uKGNhbGwuYXJndW1lbnRzWzFdLCB0cnVlKSwgY2FsbC5uYW1lKVxuICAgICAgfVxuICAgICAgaWYgKGNhbGwuYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB0aGlzLmZhaWwobm9kZSwgXCJzZW1hbnRpYyBjYWxsIGFyaXR5XCIpXG4gICAgICBjb25zdCBjYWxsZWUgPSB0aGlzLmlkZW50aWZpZXIoY2FsbC5uYW1lKVxuXG4gICAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkICYmICF0aGlzLmRlY2xhcmVkRnVuY3Rpb25zLmhhcyhjYWxsZWUpKSB0aGlzLmZhaWwoY2FsbC5uYW1lLCBcImltcGxpY2l0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uXCIpXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogXCJDYWxsRXhwcmVzc2lvblwiLCBsb2NhdGlvbiwgY2FsbGVlLFxuICAgICAgICBhcmd1bWVudHM6IGNhbGwuYXJndW1lbnRzLm1hcCgoYXJndW1lbnQpID0+IHRoaXMuZXhwcmVzc2lvbihhcmd1bWVudCwgdHJ1ZSkpfSwge2NhbGxlZTogdGhpcy5sb2NhdGlvbihjYWxsLm5hbWUpfSlcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmFpbChub2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZHMgcGFyc2VyIGludGVudCBiZWZvcmUgc2hhcmVkIHR5cGUgcmVzb2x1dGlvbi5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBub2RlIC0gT3duaW5nIGV4cHJlc3Npb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbnRlbnQgLSBBZGFwdGVkIG9wZXJhdGlvbi5cbiAgICogQHBhcmFtIHtFeHByZXNzaW9ufSBsZWZ0IC0gTGVmdCBvcGVyYW5kLlxuICAgKiBAcGFyYW0ge0V4cHJlc3Npb259IHJpZ2h0IC0gUmlnaHQgb3BlcmFuZC5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBvcGVyYXRvciAtIE9wZXJhdG9yIHRva2VuLlxuICAgKiBAcmV0dXJucyB7RXhwcmVzc2lvbn0gUGVuZGluZyBiaW5hcnkgZXhwcmVzc2lvbi5cbiAgICovXG4gIGJpbmFyeShub2RlLCBpbnRlbnQsIGxlZnQsIHJpZ2h0LCBvcGVyYXRvcikge1xuICAgIHJldHVybiAvKiogQHR5cGUge0V4cHJlc3Npb259ICovICh3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiBcIkJpbmFyeUV4cHJlc3Npb25cIiwgbG9jYXRpb246IHRoaXMubG9jYXRpb24obm9kZSksIGxlZnQsIHJpZ2h0fSxcbiAgICAgIHtvcGVyYXRvcjogdGhpcy5sb2NhdGlvbihvcGVyYXRvcil9KSwgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy9vcGVyYXRvcnMuanNcIikuQWRhcHRlZE9wZXJhdGlvbn0gKi8gKGludGVudCkpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZHMgcGFyc2VyIGludGVudCBmb3IgYSB1bmFyeSBvcGVyYXRpb24uXG4gICAqIEBwYXJhbSB7Q3N0Tm9kZX0gbm9kZSAtIE93bmluZyBleHByZXNzaW9uLlxuICAgKiBAcGFyYW0ge1wiTmVnYXRlXCIgfCBcIk5vdFwifSBpbnRlbnQgLSBBZGFwdGVkIG9wZXJhdGlvbi5cbiAgICogQHBhcmFtIHtFeHByZXNzaW9ufSBvcGVyYW5kIC0gT3BlcmFuZC5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBvcGVyYXRvciAtIE9wZXJhdG9yIHRva2VuLlxuICAgKiBAcmV0dXJucyB7RXhwcmVzc2lvbn0gUGVuZGluZyB1bmFyeSBleHByZXNzaW9uLlxuICAgKi9cbiAgdW5hcnkobm9kZSwgaW50ZW50LCBvcGVyYW5kLCBvcGVyYXRvcikge1xuICAgIHJldHVybiAvKiogQHR5cGUge0V4cHJlc3Npb259ICovICh3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiBcIlVuYXJ5RXhwcmVzc2lvblwiLCBsb2NhdGlvbjogdGhpcy5sb2NhdGlvbihub2RlKSwgb3BlcmFuZH0sXG4gICAgICB7b3BlcmF0b3I6IHRoaXMubG9jYXRpb24ob3BlcmF0b3IpfSksIGludGVudCkpXG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgb25lIGluaXRpYWxpemVkIGRlY2xhcmF0aW9uIG9yIGV4ZWN1dGFibGUgc3RhdGVtZW50LlxuICAgKiBAcGFyYW0ge0NzdE5vZGV9IG5vZGUgLSBTdGF0ZW1lbnQgbm9kZS5cbiAgICogQHJldHVybnMge1N0YXRlbWVudH0gU2VtYW50aWMgc3RhdGVtZW50LlxuICAgKi9cbiAgc3RhdGVtZW50KG5vZGUpIHtcbiAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMubG9jYXRpb24obm9kZSlcblxuICAgIGlmIChub2RlLnR5cGUgPT0gXCJkZWNsYXJhdGlvblwiKSB7XG4gICAgICBjb25zdCB0eXBlTm9kZSA9IG5vZGUuY2hpbGRyZW4uZmluZCgoe2ZpZWxkfSkgPT4gZmllbGQgPT0gXCJ0eXBlXCIpPy5ub2RlXG5cbiAgICAgIGlmICghdHlwZU5vZGUpIHJldHVybiBtaXNzaW5nVHlwZShcImNcIiwgXCJsb2NhbFwiLCBsb2NhdGlvbilcbiAgICAgIGNvbnN0IGRlY2xhcmF0b3IgPSB0aGlzLmZpZWxkKG5vZGUsIFwiZGVjbGFyYXRvclwiKVxuICAgICAgY29uc3QgcGFydHMgPSB0aGlzLnBhcnRzKG5vZGUpXG4gICAgICBjb25zdCBpbW11dGFibGUgPSBwYXJ0c1swXS50eXBlID09IFwidHlwZV9xdWFsaWZpZXJcIlxuXG4gICAgICB0aGlzLnNoYXBlKG5vZGUsIFsuLi4oaW1tdXRhYmxlID8gW3BhcnRzWzBdXSA6IFtdKSwgdHlwZU5vZGUsIGRlY2xhcmF0b3IsIFwiO1wiXSlcbiAgICAgIGlmIChpbW11dGFibGUgJiYgdGhpcy50ZXh0KHBhcnRzWzBdKSAhPSBcImNvbnN0XCIpIHRoaXMuZmFpbChwYXJ0c1swXSwgXCJsb2NhbCBxdWFsaWZpZXJcIilcbiAgICAgIGlmIChkZWNsYXJhdG9yLnR5cGUgIT0gXCJpbml0X2RlY2xhcmF0b3JcIikgdGhpcy5mYWlsKGRlY2xhcmF0b3IsIFwiaW5pdGlhbGl6ZWQgc2ltcGxlIGxvY2FsIHJlcXVpcmVkXCIpXG4gICAgICBjb25zdCBuYW1lID0gdGhpcy5maWVsZChkZWNsYXJhdG9yLCBcImRlY2xhcmF0b3JcIilcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5maWVsZChkZWNsYXJhdG9yLCBcInZhbHVlXCIpXG5cbiAgICAgIHRoaXMuc2hhcGUoZGVjbGFyYXRvciwgW25hbWUsIFwiPVwiLCB2YWx1ZV0pXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogXCJMb2NhbERlY2xhcmF0aW9uXCIsIGxvY2F0aW9uLCBuYW1lOiB0aGlzLmlkZW50aWZpZXIobmFtZSksIHR5cGU6IHRoaXMudHlwZSh0eXBlTm9kZSksIG11dGFibGU6ICFpbW11dGFibGUsXG4gICAgICAgIGluaXRpYWxpemVyOiB0aGlzLmV4cHJlc3Npb24odmFsdWUpfSwge25hbWU6IHRoaXMubG9jYXRpb24obmFtZSksIG9wZXJhdG9yOiB0aGlzLmxvY2F0aW9uKHRoaXMucGFydHMoZGVjbGFyYXRvcilbMV0pfSlcbiAgICB9XG4gICAgaWYgKG5vZGUudHlwZSA9PSBcInJldHVybl9zdGF0ZW1lbnRcIikge1xuICAgICAgY29uc3QgcGFydHMgPSB0aGlzLnBhcnRzKG5vZGUpXG5cbiAgICAgIHRoaXMuc2hhcGUobm9kZSwgW1wicmV0dXJuXCIsIHBhcnRzWzFdLCBcIjtcIl0pXG4gICAgICByZXR1cm4ge2tpbmQ6IFwiUmV0dXJuU3RhdGVtZW50XCIsIGxvY2F0aW9uLCBleHByZXNzaW9uOiB0aGlzLmV4cHJlc3Npb24ocGFydHNbMV0pfVxuICAgIH1cbiAgICBpZiAobm9kZS50eXBlID09IFwiaWZfc3RhdGVtZW50XCIpIHtcbiAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IHRoaXMuZmllbGQobm9kZSwgXCJjb25kaXRpb25cIilcbiAgICAgIGNvbnN0IGNvbnNlcXVlbmNlID0gdGhpcy5maWVsZChub2RlLCBcImNvbnNlcXVlbmNlXCIpXG4gICAgICBjb25zdCBhbHRlcm5hdGl2ZSA9IG5vZGUuY2hpbGRyZW4uZmluZCgoe2ZpZWxkfSkgPT4gZmllbGQgPT0gXCJhbHRlcm5hdGl2ZVwiKT8ubm9kZVxuXG4gICAgICB0aGlzLnNoYXBlKG5vZGUsIFtcImlmXCIsIGNvbmRpdGlvbiwgY29uc2VxdWVuY2UsIC4uLihhbHRlcm5hdGl2ZSA/IFthbHRlcm5hdGl2ZV0gOiBbXSldKVxuICAgICAgY29uc3Qgc3RhdGVtZW50ID0ge2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklmU3RhdGVtZW50XCIpLCBsb2NhdGlvbiwgY29uZGl0aW9uOiB0aGlzLmV4cHJlc3Npb24oY29uZGl0aW9uKSwgY29uc2VxdWVudDogdGhpcy5ibG9jayhjb25zZXF1ZW5jZSl9XG5cbiAgICAgIGlmICghYWx0ZXJuYXRpdmUpIHJldHVybiBzdGF0ZW1lbnRcbiAgICAgIGNvbnN0IGJyYW5jaCA9IHRoaXMucGFydHMoYWx0ZXJuYXRpdmUpWzFdXG5cbiAgICAgIHRoaXMuc2hhcGUoYWx0ZXJuYXRpdmUsIFtcImVsc2VcIiwgYnJhbmNoXSlcbiAgICAgIHJldHVybiB7Li4uc3RhdGVtZW50LCBhbHRlcm5hdGU6IGJyYW5jaC50eXBlID09IFwiaWZfc3RhdGVtZW50XCJcbiAgICAgICAgPyB7a2luZDogXCJCbG9ja1wiLCBsb2NhdGlvbjogdGhpcy5sb2NhdGlvbihicmFuY2gpLCBzdGF0ZW1lbnRzOiBbdGhpcy5zdGF0ZW1lbnQoYnJhbmNoKV19IDogdGhpcy5ibG9jayhicmFuY2gpfVxuICAgIH1cbiAgICBpZiAobm9kZS50eXBlID09IFwiZXhwcmVzc2lvbl9zdGF0ZW1lbnRcIikge1xuICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IHRoaXMucGFydHMobm9kZSlbMF1cblxuICAgICAgdGhpcy5zaGFwZShub2RlLCBbZXhwcmVzc2lvbiwgXCI7XCJdKVxuICAgICAgaWYgKGV4cHJlc3Npb24udHlwZSA9PSBcImFzc2lnbm1lbnRfZXhwcmVzc2lvblwiKSB7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmZpZWxkKGV4cHJlc3Npb24sIFwibGVmdFwiKVxuICAgICAgICBjb25zdCByaWdodCA9IHRoaXMuZmllbGQoZXhwcmVzc2lvbiwgXCJyaWdodFwiKVxuICAgICAgICBjb25zdCBvcGVyYXRvciA9IHRoaXMuZmllbGQoZXhwcmVzc2lvbiwgXCJvcGVyYXRvclwiKVxuXG4gICAgICAgIHRoaXMuc2hhcGUoZXhwcmVzc2lvbiwgW2xlZnQsIFwiPVwiLCByaWdodF0pXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpLCBuYW1lOiB0aGlzLmlkZW50aWZpZXIobGVmdCksIGxvY2F0aW9uOiB0aGlzLmxvY2F0aW9uKGxlZnQpfSwge25hbWU6IHRoaXMubG9jYXRpb24obGVmdCl9KVxuXG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIiwgbG9jYXRpb24sIHRhcmdldCwgZXhwcmVzc2lvbjogdGhpcy5leHByZXNzaW9uKHJpZ2h0KX0sIHtvcGVyYXRvcjogdGhpcy5sb2NhdGlvbihvcGVyYXRvcil9KVxuICAgICAgfVxuICAgICAgY29uc3QgY2FsbCA9IHRoaXMuY2FsbChleHByZXNzaW9uKVxuXG4gICAgICBpZiAoIS9ec2VtYW50aWZvbGRfcHJpbnRfKD86aW50ZWdlcnxib29sZWFufHN0cmluZykkL3UudGVzdCh0aGlzLnRleHQoY2FsbC5uYW1lKSkgfHwgY2FsbC5hcmd1bWVudHMubGVuZ3RoICE9IDEpIHRoaXMuZmFpbChub2RlLCBcInByaW50IHNjYWZmb2xkXCIpXG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZXhwcmVzc2lvbihjYWxsLmFyZ3VtZW50c1swXSlcblxuICAgICAgY29uc3Qgc3RhdGVtZW50ID0ge2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlByaW50U3RhdGVtZW50XCIpLCBsb2NhdGlvbiwgZXhwcmVzc2lvbjogdmFsdWV9XG5cbiAgICAgIHRoaXMucHJpbnRUeXBlcy5zZXQoc3RhdGVtZW50LCB7bm9kZTogY2FsbC5uYW1lLCB0eXBlOiB0aGlzLnRleHQoY2FsbC5uYW1lKS5zbGljZShcInNlbWFudGlmb2xkX3ByaW50X1wiLmxlbmd0aCl9KVxuICAgICAgcmV0dXJuIHN0YXRlbWVudFxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mYWlsKG5vZGUpXG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgb25lIGxleGljYWwgYnJhY2VkIGJsb2NrIGluIHNvdXJjZSBvcmRlci5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBub2RlIC0gQmxvY2sgbm9kZS5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBTZW1hbnRpYyBibG9jay5cbiAgICovXG4gIGJsb2NrKG5vZGUpIHtcbiAgICBpZiAobm9kZS50eXBlICE9IFwiY29tcG91bmRfc3RhdGVtZW50XCIpIHRoaXMuZmFpbChub2RlLCBcImJyYWNlZCBibG9jayByZXF1aXJlZFwiKVxuICAgIGNvbnN0IHBhcnRzID0gdGhpcy5wYXJ0cyhub2RlKVxuXG4gICAgdGhpcy5zaGFwZShub2RlLCBbXCJ7XCIsIC4uLnBhcnRzLnNsaWNlKDEsIC0xKSwgXCJ9XCJdKVxuICAgIHJldHVybiB7a2luZDogXCJCbG9ja1wiLCBsb2NhdGlvbjogdGhpcy5sb2NhdGlvbihub2RlKSwgc3RhdGVtZW50czogdGhpcy5nZW5lcmF0ZWRcbiAgICAgID8gdGhpcy5nZW5lcmF0ZWRTdGF0ZW1lbnRzKG5vZGUuY2hpbGRyZW4ubWFwKCh7bm9kZTogY2hpbGR9KSA9PiBjaGlsZCkuc2xpY2UoMSwgLTEpKVxuICAgICAgOiBwYXJ0cy5zbGljZSgxLCAtMSkubWFwKChjaGlsZCkgPT4gdGhpcy5zdGF0ZW1lbnQoY2hpbGQpKX1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBvbmUgZmlsZS1sb2NhbCBzZW1hbnRpYyBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBub2RlIC0gRnVuY3Rpb24gZGVmaW5pdGlvbi5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb259IFNlbWFudGljIGZ1bmN0aW9uLlxuICAgKi9cbiAgZnVuY3Rpb24obm9kZSkge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZpZWxkKG5vZGUsIFwidHlwZVwiKVxuICAgIGNvbnN0IGRlY2xhcmF0b3IgPSB0aGlzLmZpZWxkKG5vZGUsIFwiZGVjbGFyYXRvclwiKVxuICAgIGNvbnN0IGJvZHkgPSB0aGlzLmZpZWxkKG5vZGUsIFwiYm9keVwiKVxuXG4gICAgdGhpcy5zaGFwZShub2RlLCBbXCJzdG9yYWdlX2NsYXNzX3NwZWNpZmllclwiLCB0eXBlLCBkZWNsYXJhdG9yLCBib2R5XSlcbiAgICBpZiAodGhpcy50ZXh0KHRoaXMucGFydHMobm9kZSlbMF0pICE9IFwic3RhdGljXCIgfHwgZGVjbGFyYXRvci50eXBlICE9IFwiZnVuY3Rpb25fZGVjbGFyYXRvclwiKSB0aGlzLmZhaWwobm9kZSwgXCJmaWxlLWxvY2FsIGZ1bmN0aW9uIHJlcXVpcmVkXCIpXG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZmllbGQoZGVjbGFyYXRvciwgXCJkZWNsYXJhdG9yXCIpXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHRoaXMuZmllbGQoZGVjbGFyYXRvciwgXCJwYXJhbWV0ZXJzXCIpXG5cbiAgICB0aGlzLnNoYXBlKGRlY2xhcmF0b3IsIFtuYW1lLCBwYXJhbWV0ZXJzXSlcbiAgICBjb25zdCBwYXJ0cyA9IHRoaXMucGFydHMocGFyYW1ldGVycylcblxuICAgIHRoaXMuc2hhcGUocGFyYW1ldGVycywgW1wiKFwiLCBcInBhcmFtZXRlcl9kZWNsYXJhdGlvblwiLCBcIixcIiwgXCJwYXJhbWV0ZXJfZGVjbGFyYXRpb25cIiwgXCIpXCJdKVxuICAgIGNvbnN0IGNvbnZlcnRlZCA9IFtwYXJ0c1sxXSwgcGFydHNbM11dLm1hcCgocGFyYW1ldGVyKSA9PiB7XG4gICAgICBjb25zdCB0eXBlTm9kZSA9IHRoaXMuZmllbGQocGFyYW1ldGVyLCBcInR5cGVcIilcbiAgICAgIGNvbnN0IG5hbWVOb2RlID0gdGhpcy5maWVsZChwYXJhbWV0ZXIsIFwiZGVjbGFyYXRvclwiKVxuXG4gICAgICB0aGlzLnNoYXBlKHBhcmFtZXRlciwgW3R5cGVOb2RlLCBuYW1lTm9kZV0pXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUGFyYW1ldGVyXCIpLCBsb2NhdGlvbjogdGhpcy5sb2NhdGlvbihwYXJhbWV0ZXIpLCBuYW1lOiB0aGlzLmlkZW50aWZpZXIobmFtZU5vZGUpLCB0eXBlOiB0aGlzLnR5cGUodHlwZU5vZGUpfSwge25hbWU6IHRoaXMubG9jYXRpb24obmFtZU5vZGUpfSlcbiAgICB9KVxuXG4gICAgdGhpcy5kZWNsYXJlZEZ1bmN0aW9ucy5hZGQodGhpcy5pZGVudGlmaWVyKG5hbWUpKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiwgbG9jYXRpb246IHRoaXMubG9jYXRpb24obm9kZSksIG5hbWU6IHRoaXMuaWRlbnRpZmllcihuYW1lKSwgcGFyYW1ldGVyczogY29udmVydGVkLFxuICAgICAgcmV0dXJuVHlwZTogdGhpcy50eXBlKHR5cGUpLCBib2R5OiB0aGlzLmJsb2NrKGJvZHkpfSwge25hbWU6IHRoaXMubG9jYXRpb24obmFtZSl9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgb25seSB0aGUgZXhhY3QgbWFpbiBjbGVhbnVwIGFuZCBzdGF0dXMgc2NhZmZvbGRpbmcuXG4gICAqIEBwYXJhbSB7Q3N0Tm9kZX0gbm9kZSAtIEVudHJ5IGRlZmluaXRpb24uXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FbnRyeVBvaW50fSBTZW1hbnRpYyBlbnRyeS5cbiAgICovXG4gIG1haW4obm9kZSkge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZpZWxkKG5vZGUsIFwidHlwZVwiKVxuICAgIGNvbnN0IGRlY2xhcmF0b3IgPSB0aGlzLmZpZWxkKG5vZGUsIFwiZGVjbGFyYXRvclwiKVxuICAgIGNvbnN0IGJvZHkgPSB0aGlzLmZpZWxkKG5vZGUsIFwiYm9keVwiKVxuXG4gICAgdGhpcy5zaGFwZShub2RlLCBbdHlwZSwgZGVjbGFyYXRvciwgYm9keV0pXG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZmllbGQoZGVjbGFyYXRvciwgXCJkZWNsYXJhdG9yXCIpXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHRoaXMuZmllbGQoZGVjbGFyYXRvciwgXCJwYXJhbWV0ZXJzXCIpXG5cbiAgICB0aGlzLnNoYXBlKGRlY2xhcmF0b3IsIFtuYW1lLCBwYXJhbWV0ZXJzXSlcbiAgICBpZiAodGhpcy50ZXh0KHR5cGUpICE9IFwiaW50XCIgfHwgdGhpcy50ZXh0KG5hbWUpICE9IFwibWFpblwiKSB0aGlzLmZhaWwobm9kZSwgXCJtYWluIHNpZ25hdHVyZVwiKVxuICAgIHRoaXMuc2hhcGUocGFyYW1ldGVycywgW1wiKFwiLCBcInBhcmFtZXRlcl9kZWNsYXJhdGlvblwiLCBcIilcIl0pXG4gICAgY29uc3Qgdm9pZFBhcmFtZXRlciA9IHRoaXMucGFydHMocGFyYW1ldGVycylbMV1cblxuICAgIHRoaXMuc2hhcGUodm9pZFBhcmFtZXRlciwgW1wicHJpbWl0aXZlX3R5cGVcIl0pXG4gICAgaWYgKHRoaXMudGV4dCh0aGlzLnBhcnRzKHZvaWRQYXJhbWV0ZXIpWzBdKSAhPSBcInZvaWRcIikgdGhpcy5mYWlsKHZvaWRQYXJhbWV0ZXIsIFwibWFpbiBwYXJhbWV0ZXJzXCIpXG4gICAgY29uc3QgcGFydHMgPSB0aGlzLnBhcnRzKGJvZHkpXG4gICAgY29uc3QgY2xlYW51cCA9IHBhcnRzLmF0KC0zKVxuICAgIGNvbnN0IHN0YXR1cyA9IHBhcnRzLmF0KC0yKVxuXG4gICAgaWYgKCFjbGVhbnVwIHx8ICFzdGF0dXMgfHwgYm9keS50eXBlICE9IFwiY29tcG91bmRfc3RhdGVtZW50XCIpIHRoaXMuZmFpbChib2R5LCBcIm1haW4gY2xlYW51cFwiKVxuICAgIHRoaXMuc2hhcGUoYm9keSwgW1wie1wiLCAuLi5wYXJ0cy5zbGljZSgxLCAtMSksIFwifVwiXSlcbiAgICB0aGlzLnNoYXBlKGNsZWFudXAsIFtcImNhbGxfZXhwcmVzc2lvblwiLCBcIjtcIl0pXG4gICAgY29uc3QgY2FsbCA9IHRoaXMuY2FsbCh0aGlzLnBhcnRzKGNsZWFudXApWzBdKVxuXG4gICAgaWYgKHRoaXMudGV4dChjYWxsLm5hbWUpICE9IFwic2VtYW50aWZvbGRfY2xlYW51cFwiIHx8IGNhbGwuYXJndW1lbnRzLmxlbmd0aCAhPSAwKSB0aGlzLmZhaWwoY2xlYW51cCwgXCJlbnRyeSBjbGVhbnVwXCIpXG4gICAgdGhpcy5zaGFwZShzdGF0dXMsIFtcInJldHVyblwiLCBcIm51bWJlcl9saXRlcmFsXCIsIFwiO1wiXSlcbiAgICBpZiAodGhpcy50ZXh0KHRoaXMucGFydHMoc3RhdHVzKVsxXSkgIT0gXCIwXCIpIHRoaXMuZmFpbChzdGF0dXMsIFwiZW50cnkgc3RhdHVzXCIpXG4gICAgcmV0dXJuIHtraW5kOiBcIkVudHJ5UG9pbnRcIiwgbG9jYXRpb246IHRoaXMubG9jYXRpb24obm9kZSksIGJvZHk6IHtraW5kOiBcIkJsb2NrXCIsIGxvY2F0aW9uOiB0aGlzLmxvY2F0aW9uKGJvZHkpLFxuICAgICAgc3RhdGVtZW50czogdGhpcy5nZW5lcmF0ZWQgPyB0aGlzLmdlbmVyYXRlZFN0YXRlbWVudHMoYm9keS5jaGlsZHJlbi5tYXAoKHtub2RlOiBjaGlsZH0pID0+IGNoaWxkKS5maWx0ZXIoKGNoaWxkKSA9PlxuICAgICAgICBjaGlsZC5zdGFydEluZGV4ID4gYm9keS5zdGFydEluZGV4ICYmIGNoaWxkLmVuZEluZGV4IDw9IGNsZWFudXAuc3RhcnRJbmRleCkpXG4gICAgICAgIDogcGFydHMuc2xpY2UoMSwgLTMpLm1hcCgoY2hpbGQpID0+IHRoaXMuc3RhdGVtZW50KGNoaWxkKSl9fVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIG9uZSBjb21wbGV0ZSB0cmFuc2xhdGlvbiB1bml0IGFmdGVyIGV4aGF1c3RpdmUgcmVjb3ZlcnkgcmVqZWN0aW9uLlxuICAgKiBAcGFyYW0ge0NzdE5vZGV9IHJvb3QgLSBGcm96ZW4gdHJhbnNsYXRpb24gdW5pdC5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBWYWxpZGF0ZWQgc2VtYW50aWMgbW9kdWxlLlxuICAgKi9cbiAgbW9kdWxlKHJvb3QpIHtcbiAgICB0aGlzLnZhbGlkYXRlVHJlZShyb290KVxuICAgIHRoaXMuZ2VuZXJhdGVkID0gcm9vdC5jaGlsZHJlbi5zb21lKCh7bm9kZX0pID0+IG5vZGUudHlwZSA9PSBcImNvbW1lbnRcIiAmJiB0aGlzLnRleHQobm9kZSkgPT0gXCIvKiBzZW1hbnRpZm9sZDpwcm9ncmFtOmM6djEgKi9cIilcbiAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkKSB0aGlzLnJlamVjdFNjYWZmb2xkQ29tbWVudHMocm9vdClcbiAgICBpZiAocm9vdC50eXBlICE9IFwidHJhbnNsYXRpb25fdW5pdFwiKSB0aGlzLmZhaWwocm9vdCwgXCJ0cmFuc2xhdGlvbiB1bml0IHJlcXVpcmVkXCIpXG4gICAgY29uc3QgcGFydHMgPSB0aGlzLnBhcnRzKHJvb3QpXG4gICAgY29uc3QgZGVmaW5pdGlvbnMgPSBwYXJ0cy5zbGljZSgxKS5maWx0ZXIoKG5vZGUpID0+ICF0aGlzLmdlbmVyYXRlZCB8fCBub2RlLnR5cGUgIT0gXCJkZWNsYXJhdGlvblwiKVxuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA8IDMgfHwgcGFydHNbMF0udHlwZSAhPSBcInByZXByb2NfaW5jbHVkZVwiIHx8IGRlZmluaXRpb25zLnNvbWUoKG5vZGUpID0+IG5vZGUudHlwZSAhPSBcImZ1bmN0aW9uX2RlZmluaXRpb25cIikpIHRoaXMuZmFpbChyb290LCBcInRyYW5zbGF0aW9uIHVuaXQgbWVtYmVyc1wiKVxuICAgIGNvbnN0IGluY2x1ZGUgPSBwYXJ0c1swXVxuICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuZmllbGQoaW5jbHVkZSwgXCJwYXRoXCIpXG5cbiAgICB0aGlzLnNoYXBlKGluY2x1ZGUsIFtcIiNpbmNsdWRlXCIsIGhlYWRlcl0pXG4gICAgaWYgKGhlYWRlci50eXBlICE9IFwic3RyaW5nX2xpdGVyYWxcIiB8fCB0aGlzLnRleHQoaGVhZGVyKSAhPSAnXCJzZW1hbnRpZm9sZF9ydW50aW1lLmhcIicpIHRoaXMuZmFpbChpbmNsdWRlLCBcInN1cHBvcnQgaGVhZGVyIGluY2x1ZGVcIilcbiAgICBpZiAoZGVmaW5pdGlvbnMubGVuZ3RoIDwgMikgdGhpcy5mYWlsKHJvb3QsIFwic2VtYW50aWMgZnVuY3Rpb24gYW5kIG1haW4gcmVxdWlyZWRcIilcbiAgICBjb25zdCBtb2R1bGUgPSB7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTW9kdWxlXCIpLCBsb2NhdGlvbjogdGhpcy5sb2NhdGlvbihyb290KSwgZnVuY3Rpb25zOiBkZWZpbml0aW9ucy5zbGljZSgwLCAtMSkubWFwKChub2RlKSA9PiB0aGlzLmZ1bmN0aW9uKG5vZGUpKSxcbiAgICAgIGVudHJ5UG9pbnQ6IHRoaXMubWFpbihkZWZpbml0aW9uc1tkZWZpbml0aW9ucy5sZW5ndGggLSAxXSl9XG5cbiAgICBpZiAodGhpcy5nZW5lcmF0ZWQpIHZhbGlkYXRlTmF0aXZlR3JhcGgobW9kdWxlKVxuICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlUGFyc2VkTW9kdWxlKG1vZHVsZSwgXCJjXCIpXG5cbiAgICB0aGlzLnZhbGlkYXRlUHJpbnRUeXBlcyh2YWxpZGF0ZWQpXG4gICAgaWYgKHRoaXMuZ2VuZXJhdGVkKSB7XG4gICAgICBjb25zdCBjYW5vbmljYWwgPSBnZW5lcmF0ZUNQcm9ncmFtKHttb2R1bGU6IHZhbGlkYXRlZH0pLmFydGlmYWN0c1swXS5jb250ZW50XG5cbiAgICAgIGlmICh0eXBlb2YgY2Fub25pY2FsICE9IFwic3RyaW5nXCIpIHRocm93IG5ldyBFcnJvcihcIkMgYmFja2VuZCByZXR1cm5lZCBhIG5vbnRleHQgZW50cnkgYXJ0aWZhY3QuXCIpXG4gICAgICB0aGlzLmNvbXBhcmVUcmVlKHJvb3QsIHBhcnNlQ3N0KGNhbm9uaWNhbCkucm9vdCwgbmV3IENSZWFkZXIodGhpcy5maWxlbmFtZSwgY2Fub25pY2FsKSlcbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRlZFxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBuYXRpdmUgcHJpbnQgaGVscGVyIHNlbGVjdGlvbiBhZnRlciBzZW1hbnRpYyBzY2FsYXIgcmVzb2x1dGlvbi5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gUmVzb2x2ZWQgbW9kdWxlLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHZhbGlkYXRlUHJpbnRUeXBlcyhtb2R1bGUpIHtcbiAgICBjb25zdCBwbGFubmVyID0gbmV3IE9yZGVyZWRFeHByZXNzaW9uUGxhbm5lcihtb2R1bGUpXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIG9uZSBsZXhpY2FsIGJsb2NrIHdpdGggaXRzIHZpc2libGUgc2NhbGFyIGJpbmRpbmdzLlxuICAgICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IGJsb2NrIC0gU2VtYW50aWMgYmxvY2suXG4gICAgICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1R5cGVOYW1lPn0gaW5oZXJpdGVkIC0gVmlzaWJsZSBiaW5kaW5ncy5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBjb25zdCB2aXNpdCA9IChibG9jaywgaW5oZXJpdGVkKSA9PiB7XG4gICAgICBjb25zdCBiaW5kaW5ncyA9IG5ldyBNYXAoaW5oZXJpdGVkKVxuXG4gICAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBibG9jay5zdGF0ZW1lbnRzKSB7XG4gICAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIikgYmluZGluZ3Muc2V0KHN0YXRlbWVudC5uYW1lLFxuICAgICAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVJlZmVyZW5jZX0gKi8gKHN0YXRlbWVudC50eXBlKS5uYW1lKVxuICAgICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiKSB7XG4gICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSB0aGlzLnByaW50VHlwZXMuZ2V0KHN0YXRlbWVudClcblxuICAgICAgICAgIGlmICghZXhwZWN0ZWQpIHRocm93IG5ldyBFcnJvcihcIkMgcHJpbnQgc3RhdGVtZW50IGxvc3QgaXRzIHBhcnNlciBoZWxwZXIgaWRlbnRpdHkuXCIpXG4gICAgICAgICAgaWYgKHBsYW5uZXIudHlwZShzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgYmluZGluZ3MpICE9IGV4cGVjdGVkLnR5cGUpIHRoaXMuZmFpbChleHBlY3RlZC5ub2RlLCBcInByaW50IGhlbHBlciBzY2FsYXIgbWlzbWF0Y2hcIilcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICAgICAgdmlzaXQoc3RhdGVtZW50LmNvbnNlcXVlbnQsIGJpbmRpbmdzKVxuICAgICAgICAgIGlmIChzdGF0ZW1lbnQuYWx0ZXJuYXRlKSB2aXNpdChzdGF0ZW1lbnQuYWx0ZXJuYXRlLCBiaW5kaW5ncylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykgdmlzaXQoZGVjbGFyYXRpb24uYm9keSwgbmV3IE1hcChkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsXG4gICAgICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVSZWZlcmVuY2V9ICovIChwYXJhbWV0ZXIudHlwZSkubmFtZV0pKSlcbiAgICB2aXNpdChtb2R1bGUuZW50cnlQb2ludC5ib2R5LCBuZXcgTWFwKCkpXG4gIH1cblxuICAvKipcbiAgICogUmVqZWN0cyBwcm9maWxlLWxvb2tpbmcgY29tbWVudHMgb3V0c2lkZSBhIGNvbXBsZXRlIGNhbm9uaWNhbCBnZW5lcmF0ZWQgcHJvZ3JhbS5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBub2RlIC0gQ3VycmVudCBub2RlLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHJlamVjdFNjYWZmb2xkQ29tbWVudHMobm9kZSkge1xuICAgIGlmIChub2RlLnR5cGUgPT0gXCJjb21tZW50XCIgJiYgL3NlbWFudGlmb2xkOnxAc2VtYW50aWZvbGQvdS50ZXN0KHRoaXMudGV4dChub2RlKSkpIHRoaXMuZmFpbChub2RlLCBcInVucmVjb2duaXplZCBzY2FmZm9sZCBjb21tZW50XCIpXG4gICAgZm9yIChjb25zdCB7bm9kZTogY2hpbGR9IG9mIG5vZGUuY2hpbGRyZW4pIHRoaXMucmVqZWN0U2NhZmZvbGRDb21tZW50cyhjaGlsZClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRhaW5zIGV2ZXJ5IHNjYWZmb2xkIGNvbW1lbnQgYW5kIHN0cnVjdHVyYWwgZWRnZSwgaWdub3Jpbmcgb25seSBvcmRpbmFyeSBjb21tZW50cy5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBub2RlIC0gQ1NUIHBhcmVudC5cbiAgICogQHJldHVybnMge0NzdE5vZGVbXX0gQ29tcGxldGUgc2lnbmlmaWNhbnQgY2hpbGQgbGlzdC5cbiAgICovXG4gIHNpZ25pZmljYW50KG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5jaGlsZHJlbi5tYXAoKHtub2RlOiBjaGlsZH0pID0+IGNoaWxkKS5maWx0ZXIoKGNoaWxkKSA9PlxuICAgICAgY2hpbGQudHlwZSAhPSBcImNvbW1lbnRcIiB8fCAvc2VtYW50aWZvbGQ6fEBzZW1hbnRpZm9sZC91LnRlc3QodGhpcy50ZXh0KGNoaWxkKSkpXG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgZXZlcnkgdG9rZW4sIGZpZWxkLCB0eXBlLCB1c2UsIG9yZGVyaW5nIGVkZ2UgYW5kIGNvbnN1bWVyIGFnYWluc3QgdGhlIGNhbm9uaWNhbCBwbGFuLlxuICAgKiBUaGlzIGNoZWNrcyB0aGUgb3JpZ2luYWwgQ1NUOyBpdCBuZXZlciByZWNvdmVycyBtZWFuaW5nIGZyb20gZ2VuZXJhdGVkIHNvdXJjZSB0ZXh0LlxuICAgKiBAcGFyYW0ge0NzdE5vZGV9IGFjdHVhbCAtIE9yaWdpbmFsIHRyZWUgbm9kZS5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBleHBlY3RlZCAtIENhbm9uaWNhbCB0cmVlIG5vZGUgZm9yIHRoZSByZWNvbnN0cnVjdGVkIHNlbWFudGljcy5cbiAgICogQHBhcmFtIHtDUmVhZGVyfSBjYW5vbmljYWwgLSBDYW5vbmljYWwgdG9rZW4gcmVhZGVyLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNvbXBhcmVUcmVlKGFjdHVhbCwgZXhwZWN0ZWQsIGNhbm9uaWNhbCkge1xuICAgIGlmIChhY3R1YWwudHlwZSAhPSBleHBlY3RlZC50eXBlIHx8IGFjdHVhbC5uYW1lZCAhPSBleHBlY3RlZC5uYW1lZCB8fCBhY3R1YWwuZXh0cmEgIT0gZXhwZWN0ZWQuZXh0cmEpIHRoaXMuZmFpbChhY3R1YWwsIFwiZ2VuZXJhdGVkIHNjYWZmb2xkIG5vZGUgc2hhcGVcIilcbiAgICBjb25zdCBsZWZ0ID0gdGhpcy5zaWduaWZpY2FudChhY3R1YWwpXG4gICAgY29uc3QgcmlnaHQgPSBjYW5vbmljYWwuc2lnbmlmaWNhbnQoZXhwZWN0ZWQpXG5cbiAgICBpZiAobGVmdC5sZW5ndGggIT0gcmlnaHQubGVuZ3RoKSB0aGlzLmZhaWwoYWN0dWFsLCBcImdlbmVyYXRlZCBzY2FmZm9sZCBjaGlsZCBjb3VudFwiKVxuICAgIGlmICghbGVmdC5sZW5ndGggJiYgdGhpcy50ZXh0KGFjdHVhbCkgIT0gY2Fub25pY2FsLnRleHQoZXhwZWN0ZWQpKSB0aGlzLmZhaWwoYWN0dWFsLCBcImdlbmVyYXRlZCBzY2FmZm9sZCB0b2tlbiwgdHlwZSwgb3JkZXIgb3IgY29uc3VtZXJcIilcbiAgICBsZWZ0LmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGFjdHVhbC5jaGlsZHJlbi5maW5kKChlZGdlKSA9PiBlZGdlLm5vZGUgPT09IGNoaWxkKT8uZmllbGQgIT0gZXhwZWN0ZWQuY2hpbGRyZW4uZmluZCgoZWRnZSkgPT4gZWRnZS5ub2RlID09PSByaWdodFtpbmRleF0pPy5maWVsZCkgdGhpcy5mYWlsKGNoaWxkLCBcImdlbmVyYXRlZCBzY2FmZm9sZCBmaWVsZFwiKVxuICAgICAgdGhpcy5jb21wYXJlVHJlZShjaGlsZCwgcmlnaHRbaW5kZXhdLCBjYW5vbmljYWwpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvZ25pemVzIHRoZSBzaGFwZSBvZiBhbiBpbmVydCBnZW5lcmF0ZWQgdW51c2VkLWJpbmRpbmcgY2FzdDsgY2Fub25pY2FsIGNvbXBhcmlzb24gY2hlY2tzIGl0cyBleGFjdCB0YXJnZXQgYW5kIHBsYWNlbWVudC5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBub2RlIC0gQ2FuZGlkYXRlIHN0YXRlbWVudC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBpcyBhIGRpc2NhcmQtc2hhcGVkIGNhbmRpZGF0ZS5cbiAgICovXG4gIGRpc2NhcmQobm9kZSkge1xuICAgIHJldHVybiBub2RlLnR5cGUgPT0gXCJleHByZXNzaW9uX3N0YXRlbWVudFwiICYmIHRoaXMucGFydHMobm9kZSlbMF0/LnR5cGUgPT0gXCJjYXN0X2V4cHJlc3Npb25cIlxuICB9XG5cbiAgLyoqXG4gICAqIFJlY29uc3RydWN0cyBwYWlyZWQgc3RhdGVtZW50IHJlZ2lvbnMgYmVmb3JlIG1hbmRhdG9yeSB3aG9sZS1DU1QgY2Fub25pY2FsIHZlcmlmaWNhdGlvbi5cbiAgICogQHBhcmFtIHtDc3ROb2RlW119IGNoaWxkcmVuIC0gT3JkZXJlZCBibG9jayBjaGlsZHJlbiB3aXRob3V0IGJyYWNlcyBvciBtYWluIGNsZWFudXAuXG4gICAqIEByZXR1cm5zIHtTdGF0ZW1lbnRbXX0gQ2FuZGlkYXRlIHNlbWFudGljIHN0YXRlbWVudHMuXG4gICAqL1xuICBnZW5lcmF0ZWRTdGF0ZW1lbnRzKGNoaWxkcmVuKSB7XG4gICAgY29uc3Qgbm9kZXMgPSBjaGlsZHJlbi5maWx0ZXIoKG5vZGUpID0+IG5vZGUudHlwZSAhPSBcImNvbW1lbnRcIiB8fCAvc2VtYW50aWZvbGQ6fEBzZW1hbnRpZm9sZC91LnRlc3QodGhpcy50ZXh0KG5vZGUpKSlcbiAgICAvKiogQHR5cGUge1N0YXRlbWVudFtdfSAqL1xuICAgIGNvbnN0IHN0YXRlbWVudHMgPSBbXVxuICAgIGxldCBjdXJzb3IgPSAwXG5cbiAgICB3aGlsZSAoY3Vyc29yIDwgbm9kZXMubGVuZ3RoICYmIHRoaXMuZGlzY2FyZChub2Rlc1tjdXJzb3JdKSkgY3Vyc29yKytcbiAgICB3aGlsZSAoY3Vyc29yIDwgbm9kZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBiZWdpbiA9IG5vZGVzW2N1cnNvcisrXVxuICAgICAgY29uc3QgbWF0Y2ggPSBiZWdpbi50eXBlID09IFwiY29tbWVudFwiICYmIC9eXFwvXFwqIHNlbWFudGlmb2xkOm9yZGVyZWQtZXhwcmVzc2lvbjpjOnYxIGJlZ2luIChbMC05XXs2fSkgKFswLTlhLWZdezY0fSkgXFwqXFwvJC91LmV4ZWModGhpcy50ZXh0KGJlZ2luKSlcblxuICAgICAgaWYgKCFtYXRjaCkgdGhpcy5mYWlsKGJlZ2luLCBcImNvbXBsZXRlIG9yZGVyZWQgc3RhdGVtZW50IHJlZ2lvbiByZXF1aXJlZFwiKVxuICAgICAgY29uc3Qgb3V0ZXIgPSB0aGlzLnRlbXBvcmFyeUV4cHJlc3Npb25zXG4gICAgICBjb25zdCBvdXRlck5hbWVzID0gdGhpcy50ZW1wb3JhcnlOYW1lc1xuXG4gICAgICB0aGlzLnRlbXBvcmFyeUV4cHJlc3Npb25zID0gbmV3IE1hcCgpXG4gICAgICB0aGlzLnRlbXBvcmFyeU5hbWVzID0gbmV3IFNldCgpXG4gICAgICB3aGlsZSAoY3Vyc29yIDwgbm9kZXMubGVuZ3RoICYmIHRoaXMudGVtcG9yYXJ5RGVjbGFyYXRpb24obm9kZXNbY3Vyc29yXSkpIGN1cnNvciA9IHRoaXMucmVhZFRlbXBvcmFyeShub2RlcywgY3Vyc29yKVxuICAgICAgY29uc3QgY29uc3VtZXIgPSBub2Rlc1tjdXJzb3IrK11cblxuICAgICAgaWYgKCFjb25zdW1lcikgdGhpcy5mYWlsKGJlZ2luLCBcIm1pc3Npbmcgb3JkZXJlZCBjb25zdW1lclwiKVxuICAgICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5zdGF0ZW1lbnQoY29uc3VtZXIpXG5cbiAgICAgIGlmICh0aGlzLnRlbXBvcmFyeUV4cHJlc3Npb25zLnNpemUgIT0gMCkgdGhpcy5mYWlsKGNvbnN1bWVyLCBcInVuY29uc3VtZWQgb3JkZXJlZCB0ZW1wb3JhcnlcIilcbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiAmJiBub2Rlc1tjdXJzb3JdICYmIHRoaXMuZGlzY2FyZChub2Rlc1tjdXJzb3JdKSkgY3Vyc29yKytcbiAgICAgIGNvbnN0IGVuZCA9IG5vZGVzW2N1cnNvcisrXVxuXG4gICAgICBpZiAoIWVuZCB8fCBlbmQudHlwZSAhPSBcImNvbW1lbnRcIiB8fCB0aGlzLnRleHQoZW5kKSAhPSBgLyogc2VtYW50aWZvbGQ6b3JkZXJlZC1leHByZXNzaW9uOmM6djEgZW5kICR7bWF0Y2hbMV19ICR7bWF0Y2hbMl19ICovYCkgdGhpcy5mYWlsKGVuZCA/PyBiZWdpbiwgXCJvcmRlcmVkIG1hcmtlciBwYWlyXCIpXG4gICAgICB0aGlzLnRlbXBvcmFyeUV4cHJlc3Npb25zID0gb3V0ZXJcbiAgICAgIHRoaXMudGVtcG9yYXJ5TmFtZXMgPSBvdXRlck5hbWVzXG4gICAgICBzdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KVxuICAgIH1cbiAgICByZXR1cm4gc3RhdGVtZW50c1xuICB9XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXMgb25seSBhIGRlY2xhcmF0aW9uIGF0IHRoZSBjdXJyZW50IHJlZ2lvbiBsZXZlbCwgd2l0aG91dCBkZXNjZW5kYW50IHNlYXJjaGluZy5cbiAgICogQHBhcmFtIHtDc3ROb2RlfSBub2RlIC0gQ2FuZGlkYXRlIG5vZGUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBkaXJlY3QgaW5pdGlhbGl6ZWQgbmFtZSB1c2VzIHRoZSByZXNlcnZlZCBwcmVmaXguXG4gICAqL1xuICB0ZW1wb3JhcnlEZWNsYXJhdGlvbihub2RlKSB7XG4gICAgaWYgKG5vZGUudHlwZSAhPSBcImRlY2xhcmF0aW9uXCIpIHJldHVybiBmYWxzZVxuICAgIGNvbnN0IGRlY2xhcmF0b3IgPSBub2RlLmNoaWxkcmVuLmZpbmQoKHtmaWVsZH0pID0+IGZpZWxkID09IFwiZGVjbGFyYXRvclwiKT8ubm9kZVxuICAgIGNvbnN0IG5hbWUgPSBkZWNsYXJhdG9yPy5jaGlsZHJlbi5maW5kKCh7ZmllbGR9KSA9PiBmaWVsZCA9PSBcImRlY2xhcmF0b3JcIik/Lm5vZGVcblxuICAgIHJldHVybiBuYW1lPy50eXBlID09IFwiaWRlbnRpZmllclwiICYmIHRoaXMudGV4dChuYW1lKS5zdGFydHNXaXRoKFwic2VtYW50aWZvbGRfb3JkZXJlZF9cIilcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBhbmRzIG9uZSBjYW5kaWRhdGUgdGVtcG9yYXJ5LCBpbmNsdWRpbmcgaXRzIGNvbmRpdGlvbmFsIFJIUywgcmV0YWluaW5nIG9yaWdpbmFsIG9wZXJhdGlvbiB0b2tlbnMuXG4gICAqIEBwYXJhbSB7Q3N0Tm9kZVtdfSBub2RlcyAtIEN1cnJlbnQgbGV4aWNhbCBzZXF1ZW5jZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnNvciAtIERlY2xhcmF0aW9uIHBvc2l0aW9uLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBOZXh0IHVuY29uc3VtZWQgcG9zaXRpb24uXG4gICAqL1xuICByZWFkVGVtcG9yYXJ5KG5vZGVzLCBjdXJzb3IpIHtcbiAgICBjb25zdCBub2RlID0gbm9kZXNbY3Vyc29yKytdXG4gICAgY29uc3QgZGVjbGFyYXRvciA9IHRoaXMuZmllbGQobm9kZSwgXCJkZWNsYXJhdG9yXCIpXG4gICAgY29uc3QgbmFtZU5vZGUgPSB0aGlzLmZpZWxkKGRlY2xhcmF0b3IsIFwiZGVjbGFyYXRvclwiKVxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLnRleHQobmFtZU5vZGUpXG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZmllbGQobm9kZSwgXCJ0eXBlXCIpXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmZpZWxkKGRlY2xhcmF0b3IsIFwidmFsdWVcIilcblxuICAgIHRoaXMuc2hhcGUobm9kZSwgW3R5cGUsIGRlY2xhcmF0b3IsIFwiO1wiXSlcbiAgICB0aGlzLnNoYXBlKGRlY2xhcmF0b3IsIFtuYW1lTm9kZSwgXCI9XCIsIHZhbHVlXSlcbiAgICB0aGlzLnR5cGUodHlwZSlcbiAgICBpZiAoIS9ec2VtYW50aWZvbGRfb3JkZXJlZF9bMC05XXs2fSQvdS50ZXN0KG5hbWUpIHx8IHRoaXMudGVtcG9yYXJ5TmFtZXM/LmhhcyhuYW1lKSkgdGhpcy5mYWlsKG5hbWVOb2RlLCBcIm9yZGVyZWQgdGVtcG9yYXJ5IGRlY2xhcmF0aW9uXCIpXG4gICAgdGhpcy50ZW1wb3JhcnlOYW1lcz8uYWRkKG5hbWUpXG4gICAgbGV0IGV4cHJlc3Npb24gPSB0aGlzLmV4cHJlc3Npb24odmFsdWUpXG4gICAgY29uc3QgYnJhbmNoID0gbm9kZXNbY3Vyc29yXVxuXG4gICAgaWYgKGJyYW5jaD8udHlwZSA9PSBcImlmX3N0YXRlbWVudFwiICYmIFtcImlkZW50aWZpZXJcIiwgXCJ0cnVlXCIsIFwiZmFsc2VcIl0uaW5jbHVkZXModmFsdWUudHlwZSkpIHtcbiAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IHRoaXMuZmllbGQoYnJhbmNoLCBcImNvbmRpdGlvblwiKVxuICAgICAgY29uc3QgYm9keSA9IHRoaXMuZmllbGQoYnJhbmNoLCBcImNvbnNlcXVlbmNlXCIpXG5cbiAgICAgIHRoaXMuc2hhcGUoYnJhbmNoLCBbXCJpZlwiLCBjb25kaXRpb24sIGJvZHldKVxuICAgICAgdGhpcy5zaGFwZShjb25kaXRpb24sIFtcIihcIiwgdGhpcy5wYXJ0cyhjb25kaXRpb24pWzFdLCBcIilcIl0pXG4gICAgICBjb25zdCB0ZXN0ID0gdGhpcy5wYXJ0cyhjb25kaXRpb24pWzFdXG4gICAgICBjb25zdCBpc09yID0gdGVzdC50eXBlID09IFwidW5hcnlfZXhwcmVzc2lvblwiXG4gICAgICBjb25zdCB0YXJnZXQgPSBpc09yID8gdGhpcy5maWVsZCh0ZXN0LCBcImFyZ3VtZW50XCIpIDogdGVzdFxuXG4gICAgICBpZiAodGFyZ2V0LnR5cGUgIT0gXCJpZGVudGlmaWVyXCIgfHwgdGhpcy50ZXh0KHRhcmdldCkgIT0gbmFtZSkgdGhpcy5mYWlsKHRhcmdldCwgXCJzaG9ydC1jaXJjdWl0IHRlbXBvcmFyeSB0ZXN0XCIpXG4gICAgICBpZiAoaXNPcikgdGhpcy5zaGFwZSh0ZXN0LCBbXCIhXCIsIHRhcmdldF0pXG4gICAgICBpZiAoYm9keS50eXBlICE9IFwiY29tcG91bmRfc3RhdGVtZW50XCIpIHRoaXMuZmFpbChib2R5LCBcInNob3J0LWNpcmN1aXQgYmxvY2tcIilcbiAgICAgIGNvbnN0IGluc2lkZSA9IHRoaXMuc2lnbmlmaWNhbnQoYm9keSkuc2xpY2UoMSwgLTEpXG4gICAgICBsZXQgb2Zmc2V0ID0gMFxuXG4gICAgICB3aGlsZSAob2Zmc2V0IDwgaW5zaWRlLmxlbmd0aCAmJiB0aGlzLnRlbXBvcmFyeURlY2xhcmF0aW9uKGluc2lkZVtvZmZzZXRdKSkgb2Zmc2V0ID0gdGhpcy5yZWFkVGVtcG9yYXJ5KGluc2lkZSwgb2Zmc2V0KVxuICAgICAgaWYgKG9mZnNldCAhPSBpbnNpZGUubGVuZ3RoIC0gMSkgdGhpcy5mYWlsKGJvZHksIFwic2hvcnQtY2lyY3VpdCBmaW5hbCB3cml0ZVwiKVxuICAgICAgY29uc3QgYXNzaWdubWVudCA9IGluc2lkZVtvZmZzZXRdXG5cbiAgICAgIHRoaXMuc2hhcGUoYXNzaWdubWVudCwgW1wiYXNzaWdubWVudF9leHByZXNzaW9uXCIsIFwiO1wiXSlcbiAgICAgIGNvbnN0IGFzc2lnbmVkID0gdGhpcy5wYXJ0cyhhc3NpZ25tZW50KVswXVxuICAgICAgY29uc3QgbGVmdCA9IHRoaXMuZmllbGQoYXNzaWduZWQsIFwibGVmdFwiKVxuICAgICAgY29uc3QgcmlnaHQgPSB0aGlzLmZpZWxkKGFzc2lnbmVkLCBcInJpZ2h0XCIpXG5cbiAgICAgIHRoaXMuc2hhcGUoYXNzaWduZWQsIFtsZWZ0LCBcIj1cIiwgcmlnaHRdKVxuICAgICAgaWYgKGxlZnQudHlwZSAhPSBcImlkZW50aWZpZXJcIiB8fCB0aGlzLnRleHQobGVmdCkgIT0gbmFtZSkgdGhpcy5mYWlsKGxlZnQsIFwic2hvcnQtY2lyY3VpdCByZXN1bHQgd3JpdGVcIilcbiAgICAgIHRoaXMuc2hhcGUocmlnaHQsIFtcIihcIiwgXCJiaW5hcnlfZXhwcmVzc2lvblwiLCBcIilcIl0pXG4gICAgICBjb25zdCBiaW5hcnkgPSB0aGlzLnBhcnRzKHJpZ2h0KVsxXVxuICAgICAgY29uc3QgcmVwZWF0ZWQgPSB0aGlzLmZpZWxkKGJpbmFyeSwgXCJsZWZ0XCIpXG4gICAgICBjb25zdCBvcGVyYW5kID0gdGhpcy5maWVsZChiaW5hcnksIFwicmlnaHRcIilcbiAgICAgIGNvbnN0IG9wZXJhdG9yID0gdGhpcy5maWVsZChiaW5hcnksIFwib3BlcmF0b3JcIilcblxuICAgICAgdGhpcy5zaGFwZShiaW5hcnksIFtyZXBlYXRlZCwgaXNPciA/IFwifHxcIiA6IFwiJiZcIiwgb3BlcmFuZF0pXG4gICAgICBpZiAocmVwZWF0ZWQudHlwZSAhPSBcImlkZW50aWZpZXJcIiB8fCB0aGlzLnRleHQocmVwZWF0ZWQpICE9IG5hbWUpIHRoaXMuZmFpbChyZXBlYXRlZCwgXCJzaG9ydC1jaXJjdWl0IGNvbnN1bWVkIHZhbHVlXCIpXG4gICAgICBleHByZXNzaW9uID0gdGhpcy5iaW5hcnkobm9kZSwgaXNPciA/IFwiT3JcIiA6IFwiQW5kXCIsIGV4cHJlc3Npb24sIHRoaXMuZXhwcmVzc2lvbihvcGVyYW5kKSwgb3BlcmF0b3IpXG4gICAgICBjdXJzb3IrK1xuICAgIH1cbiAgICB0aGlzLnRlbXBvcmFyeUV4cHJlc3Npb25zPy5zZXQobmFtZSwgZXhwcmVzc2lvbilcbiAgICByZXR1cm4gY3Vyc29yXG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZXMgb25seSB0aGUgZnJvemVuIGxlZ2FjeSBDU1QsIHdpdGggbm8gc291cmNlLXRleHQgcmVjb3ZlcnkgcGF0aC5cbiAqIEBwYXJhbSB7e2ZpbGVuYW1lOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nfX0gaW5wdXQgLSBFeGFjdCBjYWxsZXIgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBQYXJzZWQgQyBzZW1hbnRpY3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUMoe2ZpbGVuYW1lLCBzb3VyY2V9KSB7XG4gIGlmICghaGFzT25seVVuaWNvZGVTY2FsYXJzKHNvdXJjZSkpIHtcbiAgICBjb25zdCBjb29yZGluYXRlcyA9IGNyZWF0ZUNvb3JkaW5hdGVJbmRleChzb3VyY2UpXG4gICAgY29uc3Qgb2Zmc2V0ID0gc291cmNlLnNlYXJjaCgvW1xcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD88IVtcXHVEODAwLVxcdURCRkZdKVtcXHVEQzAwLVxcdURGRkZdL3UpXG5cbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtjb2RlOiBcIlBBUlNFX0VSUk9SXCIsIGxhbmd1YWdlOiBcImNcIiwgbWVzc2FnZTogXCJDIHNvdXJjZSBjb250YWlucyBhIGxvbmUgVVRGLTE2IHN1cnJvZ2F0ZS5cIixcbiAgICAgIGxvY2F0aW9uOiB7ZmlsZW5hbWUsIHN0YXJ0OiBpbmRleGVkUG9pbnRBdChjb29yZGluYXRlcywgb2Zmc2V0KSwgZW5kOiBpbmRleGVkUG9pbnRBdChjb29yZGluYXRlcywgb2Zmc2V0ICsgMSl9fSlcbiAgfVxuICBpZiAoc291cmNlLmxlbmd0aCA+IG1heGltdW1DU291cmNlTGVuZ3RoKSB7XG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSBjcmVhdGVDb29yZGluYXRlSW5kZXgoc291cmNlKVxuXG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY1wiLCBcInNvdXJjZSBleGNlZWRzIHRoZSBmcm96ZW4gQyBwYXJzZXIncyAzMjc2NyBVVEYtMTYgaW5wdXQgbGltaXRcIiwge1xuICAgICAgZmlsZW5hbWUsIHN0YXJ0OiBpbmRleGVkUG9pbnRBdChjb29yZGluYXRlcywgMCksIGVuZDogaW5kZXhlZFBvaW50QXQoY29vcmRpbmF0ZXMsIHNvdXJjZS5sZW5ndGgpXG4gICAgfSlcbiAgfVxuICBsZXQgc25hcHNob3RcblxuICB0cnkge1xuICAgIHNuYXBzaG90ID0gcGFyc2VDc3Qoc291cmNlKVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBwYXJzZUZhaWx1cmUoXCJjXCIsIGVycm9yKVxuICB9XG4gIGNvbnN0IHJlYWRlciA9IG5ldyBDUmVhZGVyKGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVhZGVyLm1vZHVsZShzbmFwc2hvdC5yb290KVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChyZWFkZXIuZ2VuZXJhdGVkICYmIGVycm9yIGluc3RhbmNlb2YgU2VtYW50aWZvbGREaWFnbm9zdGljICYmIGVycm9yLmxhbmd1YWdlID09IFwiY1wiICYmXG4gICAgICBlcnJvci5jb2RlICE9IFwiUEFSU0VfRVJST1JcIiAmJiBlcnJvci5jb2RlICE9IFwiVU5TVVBQT1JURURfU1lOVEFYXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNcIiwgYGludmFsaWQgZ2VuZXJhdGVkIG9yZGVyZWQgc2NhZmZvbGQ6ICR7ZXJyb3IuY29kZX1gLCBlcnJvci5sb2NhdGlvbiA/PyByZWFkZXIubG9jYXRpb24oc25hcHNob3Qucm9vdCkpXG4gICAgfVxuICAgIHRocm93IGVycm9yXG4gIH1cbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cpp.d.ts","sourceRoot":"","sources":["../../../src/frontends/cpp.js"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cpp.d.ts","sourceRoot":"","sources":["../../../src/frontends/cpp.js"],"names":[],"mappings":"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"}
|