semantifold 0.4.0 → 0.5.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 +5 -2
- package/build/index.d.ts +12 -8
- package/build/index.d.ts.map +1 -1
- package/build/index.js +10 -7
- package/build/src/backends/android.d.ts +49 -0
- package/build/src/backends/android.d.ts.map +1 -0
- package/build/src/backends/android.js +1274 -0
- package/build/src/backends/identifiers.d.ts.map +1 -1
- package/build/src/backends/identifiers.js +7 -1
- package/build/src/backends/kotlin.d.ts +10 -0
- package/build/src/backends/kotlin.d.ts.map +1 -1
- package/build/src/backends/kotlin.js +11 -9
- package/build/src/backends/program.d.ts +6 -4
- package/build/src/backends/program.d.ts.map +1 -1
- package/build/src/backends/program.js +5 -4
- package/build/src/backends/shared.d.ts.map +1 -1
- package/build/src/backends/shared.js +17 -1
- package/build/src/backends/writer.d.ts +21 -1
- package/build/src/backends/writer.d.ts.map +1 -1
- package/build/src/backends/writer.js +25 -2
- package/build/src/language-registry.d.ts.map +1 -1
- package/build/src/language-registry.js +11 -1
- package/build/src/semantic/types.d.ts +182 -2
- package/build/src/semantic/types.d.ts.map +1 -1
- package/build/src/semantic/types.js +44 -2
- package/docs/android.md +79 -0
- package/docs/architecture.md +2 -0
- package/docs/ios.md +1 -1
- package/docs/language-support.md +8 -1
- package/docs/source-maps.md +2 -0
- package/docs/specification.md +5 -0
- package/docs/testing.md +15 -0
- package/index.js +9 -6
- package/package.json +1 -1
- package/src/backends/android.js +1370 -0
- package/src/backends/identifiers.js +6 -0
- package/src/backends/kotlin.js +11 -8
- package/src/backends/program.js +4 -3
- package/src/backends/shared.js +19 -0
- package/src/backends/writer.js +27 -2
- package/src/language-registry.js +10 -0
- package/src/semantic/types.js +46 -1
|
@@ -14,6 +14,9 @@ export declare class SourceWriter {
|
|
|
14
14
|
module: import("../semantic/types.js").SemanticModule;
|
|
15
15
|
program: import("../semantic/types.js").SemanticProgram | undefined;
|
|
16
16
|
programPaths: Map<string, string> | undefined;
|
|
17
|
+
callArgumentSuffix: string | undefined;
|
|
18
|
+
callNameResolver: ((expression: import("../semantic/types.js").CallExpression) => string) | undefined;
|
|
19
|
+
methodStringEquality: boolean;
|
|
17
20
|
index: {
|
|
18
21
|
provenance: import("../semantic/types.js").SemanticProvenance;
|
|
19
22
|
recordFor: (node: import("../semantic/types.js").SemanticNode, path?: string) => import("../semantic/types.js").SemanticNodeProvenance;
|
|
@@ -67,8 +70,11 @@ export declare class SourceWriter {
|
|
|
67
70
|
* @param {string[]} [options.stdlibProviderImports] - Ordered provider names this module must import.
|
|
68
71
|
* @param {string} [options.stdlibProviderOwnerModule] - Java owner module identity hosting the shared support block and shims.
|
|
69
72
|
* @param {string[]} [options.stdlibProviderShims] - Java owner program-wide used operations exposed as public static shims.
|
|
73
|
+
* @param {(expression: import("../semantic/types.js").CallExpression) => string} [options.callNameResolver] - Target-container call spelling override.
|
|
74
|
+
* @param {string} [options.callArgumentSuffix] - Synthetic trailing argument for every semantic function call.
|
|
75
|
+
* @param {boolean} [options.methodStringEquality] - Emit string equality through the platform String method.
|
|
70
76
|
*/
|
|
71
|
-
constructor({ filename, language, module, program, programPaths, sources, stdlibProviderEntries, stdlibProviderPath, stdlibProviderPaths, stdlibProviderImports, stdlibProviderOwnerModule, stdlibProviderShims }: {
|
|
77
|
+
constructor({ callArgumentSuffix, callNameResolver, filename, language, methodStringEquality, module, program, programPaths, sources, stdlibProviderEntries, stdlibProviderPath, stdlibProviderPaths, stdlibProviderImports, stdlibProviderOwnerModule, stdlibProviderShims }: {
|
|
72
78
|
filename: string;
|
|
73
79
|
language: import("../semantic/types.js").GeneratedTextLanguage;
|
|
74
80
|
module: import("../semantic/types.js").SemanticModule;
|
|
@@ -85,6 +91,9 @@ export declare class SourceWriter {
|
|
|
85
91
|
stdlibProviderImports?: string[];
|
|
86
92
|
stdlibProviderOwnerModule?: string;
|
|
87
93
|
stdlibProviderShims?: string[];
|
|
94
|
+
callNameResolver?: (expression: import("../semantic/types.js").CallExpression) => string;
|
|
95
|
+
callArgumentSuffix?: string;
|
|
96
|
+
methodStringEquality?: boolean;
|
|
88
97
|
});
|
|
89
98
|
/**
|
|
90
99
|
* Installs the effect expressions lowered immediately before the current statement.
|
|
@@ -203,6 +212,17 @@ export declare class SourceWriter {
|
|
|
203
212
|
* @returns {string} Target call name.
|
|
204
213
|
*/
|
|
205
214
|
callNameFor(expression: import("../semantic/types.js").CallExpression): string;
|
|
215
|
+
/**
|
|
216
|
+
* Returns a target-container trailing argument for a semantic call.
|
|
217
|
+
* @param {import("../semantic/types.js").CallExpression} _expression - Resolved semantic call.
|
|
218
|
+
* @returns {string | undefined} Synthetic argument spelling, when configured.
|
|
219
|
+
*/
|
|
220
|
+
callArgumentSuffixFor(_expression: import("../semantic/types.js").CallExpression): string | undefined;
|
|
221
|
+
/**
|
|
222
|
+
* Reports whether string equality must avoid a target runtime helper.
|
|
223
|
+
* @returns {boolean} Whether to emit the platform String method.
|
|
224
|
+
*/
|
|
225
|
+
usesMethodStringEquality(): boolean;
|
|
206
226
|
/** Marks emission as occurring inside one top-level reference class. */
|
|
207
227
|
beginReferenceClassEmission(): void;
|
|
208
228
|
/** Ends one balanced top-level reference-class emission scope. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../../src/backends/writer.js"],"names":[],"mappings":"AAkDA;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAL9B,OAAO,sBAAsB,EAAE,eAKD,EAAE,MAAM,EAJtC,OAAO,sBAAsB,EAAE,qBAIO,EAAE,QAAQ,EAHhD,OAAO,sBAAsB,EAAE,cAGiB,GAF9C,MAAM,CAQlB;AAED,2DAA2D;AAC3D,qBAAa,YAAY;;
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../../src/backends/writer.js"],"names":[],"mappings":"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"}
|
|
@@ -74,14 +74,20 @@ export class SourceWriter {
|
|
|
74
74
|
* @param {string[]} [options.stdlibProviderImports] - Ordered provider names this module must import.
|
|
75
75
|
* @param {string} [options.stdlibProviderOwnerModule] - Java owner module identity hosting the shared support block and shims.
|
|
76
76
|
* @param {string[]} [options.stdlibProviderShims] - Java owner program-wide used operations exposed as public static shims.
|
|
77
|
+
* @param {(expression: import("../semantic/types.js").CallExpression) => string} [options.callNameResolver] - Target-container call spelling override.
|
|
78
|
+
* @param {string} [options.callArgumentSuffix] - Synthetic trailing argument for every semantic function call.
|
|
79
|
+
* @param {boolean} [options.methodStringEquality] - Emit string equality through the platform String method.
|
|
77
80
|
*/
|
|
78
|
-
constructor({ filename, language, module, program, programPaths, sources, stdlibProviderEntries, stdlibProviderPath, stdlibProviderPaths, stdlibProviderImports, stdlibProviderOwnerModule, stdlibProviderShims }) {
|
|
81
|
+
constructor({ callArgumentSuffix, callNameResolver, filename, language, methodStringEquality, module, program, programPaths, sources, stdlibProviderEntries, stdlibProviderPath, stdlibProviderPaths, stdlibProviderImports, stdlibProviderOwnerModule, stdlibProviderShims }) {
|
|
79
82
|
const index = createGenerationIndex(module, sources);
|
|
80
83
|
this.filename = filename;
|
|
81
84
|
this.language = language;
|
|
82
85
|
this.module = module;
|
|
83
86
|
this.program = program;
|
|
84
87
|
this.programPaths = programPaths;
|
|
88
|
+
this.callArgumentSuffix = callArgumentSuffix;
|
|
89
|
+
this.callNameResolver = callNameResolver;
|
|
90
|
+
this.methodStringEquality = methodStringEquality ?? false;
|
|
85
91
|
this.index = index;
|
|
86
92
|
this.stdlibProviderEntries = stdlibProviderEntries;
|
|
87
93
|
this.stdlibProviderPath = stdlibProviderPath;
|
|
@@ -348,6 +354,8 @@ export class SourceWriter {
|
|
|
348
354
|
* @returns {string} Target call name.
|
|
349
355
|
*/
|
|
350
356
|
callNameFor(expression) {
|
|
357
|
+
if (this.callNameResolver)
|
|
358
|
+
return this.callNameResolver(expression);
|
|
351
359
|
const declarationId = expression.resolution?.declarationId;
|
|
352
360
|
const owner = declarationId ? this.declarationModules.get(declarationId) : undefined;
|
|
353
361
|
const imported = declarationId ? this.#programModule()?.imports.find((item) => item.declarationId == declarationId) : undefined;
|
|
@@ -361,6 +369,21 @@ export class SourceWriter {
|
|
|
361
369
|
return this.importNameFor(imported);
|
|
362
370
|
return declarationName(owner, declarationId);
|
|
363
371
|
}
|
|
372
|
+
/**
|
|
373
|
+
* Returns a target-container trailing argument for a semantic call.
|
|
374
|
+
* @param {import("../semantic/types.js").CallExpression} _expression - Resolved semantic call.
|
|
375
|
+
* @returns {string | undefined} Synthetic argument spelling, when configured.
|
|
376
|
+
*/
|
|
377
|
+
callArgumentSuffixFor(_expression) {
|
|
378
|
+
return this.callArgumentSuffix;
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Reports whether string equality must avoid a target runtime helper.
|
|
382
|
+
* @returns {boolean} Whether to emit the platform String method.
|
|
383
|
+
*/
|
|
384
|
+
usesMethodStringEquality() {
|
|
385
|
+
return this.methodStringEquality;
|
|
386
|
+
}
|
|
364
387
|
/** Marks emission as occurring inside one top-level reference class. */
|
|
365
388
|
beginReferenceClassEmission() {
|
|
366
389
|
this.referenceClassEmissionDepth += 1;
|
|
@@ -669,4 +692,4 @@ function relatedOriginKey(origin) {
|
|
|
669
692
|
origin.role ?? null
|
|
670
693
|
]);
|
|
671
694
|
}
|
|
672
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmRzL3dyaXRlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sMkJBQTJCLENBQUE7QUFFL0Q7Ozs7R0FJRztBQUNILFNBQVMsbUJBQW1CLENBQUMsSUFBSTtJQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQ3ZCLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDdEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUV0QixPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDMUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQzNCLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQUUsU0FBUTtRQUNuRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxRQUFRO1lBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQ2pILEtBQUssTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEUsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFL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LFFBQVE7UUFDZixNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVE7UUFDeEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTTtRQUM1QixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNO1FBQzFCLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSTtRQUNyQixNQUFNLENBQUMsUUFBUSxJQUFJLElBQUk7UUFDdkIsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJO0tBQ3BCLENBQUMsQ0FBQTtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtjcmVhdGVHZW5lcmF0aW9uSW5kZXh9IGZyb20gXCIuLi9zZW1hbnRpYy9wcm92ZW5hbmNlLmpzXCJcblxuLyoqXG4gKiBDb2xsZWN0cyBldmVyeSBjYWxsZXItY29udHJvbGxlZCBiaW5kaW5nIHNwZWxsaW5nIGJlZm9yZSBzeW50aGV0aWMgbmFtZXMgYXJlIGNob3Nlbi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gcm9vdCAtIFNlbWFudGljIGdyYXBoLlxuICogQHJldHVybnMge1NldDxzdHJpbmc+fSBVc2VkIHNvdXJjZSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gY29sbGVjdEJpbmRpbmdOYW1lcyhyb290KSB7XG4gIGNvbnN0IG5hbWVzID0gbmV3IFNldCgpXG4gIGNvbnN0IHBlbmRpbmcgPSBbcm9vdF1cbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQoKVxuXG4gIHdoaWxlIChwZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBlbmRpbmcucG9wKClcbiAgICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiIHx8IHNlZW4uaGFzKHZhbHVlKSkgY29udGludWVcbiAgICBzZWVuLmFkZCh2YWx1ZSlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIHR5cGVvZiBSZWZsZWN0LmdldCh2YWx1ZSwgXCJuYW1lXCIpID09IFwic3RyaW5nXCIpIG5hbWVzLmFkZChSZWZsZWN0LmdldCh2YWx1ZSwgXCJuYW1lXCIpKVxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IE9iamVjdC52YWx1ZXModmFsdWUpKSB7XG4gICAgICBpZiAoY2hpbGQgJiYgdHlwZW9mIGNoaWxkID09IFwib2JqZWN0XCIpIHBlbmRpbmcucHVzaChjaGlsZClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5hbWVzXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBsb2dpY2FsIG1vZHVsZSBpZGVudGl0eSB0byBpdHMgY2Fub25pY2FsIHRhcmdldCB0eXBlIHNlZ21lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBMb2dpY2FsIG1vZHVsZSBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFBvcnRhYmxlIHRhcmdldCBjbGFzcy9tb2R1bGUgbmFtZS5cbiAqL1xuZnVuY3Rpb24gbW9kdWxlQ2xhc3NOYW1lKGlkKSB7XG4gIHJldHVybiBpZC5zcGxpdCgvWy5fLV0rL3UpLm1hcCgocGFydCkgPT4gYCR7cGFydFswXS50b1VwcGVyQ2FzZSgpfSR7cGFydC5zbGljZSgxKX1gKS5qb2luKFwiXCIpXG59XG5cbi8qKlxuICogTG9va3MgdXAgb25lIGRlY2xhcmF0aW9uIG5hbWUgaW4gaXRzIG93bmluZyBwcm9ncmFtIG1vZHVsZS5cbiAqIEBwYXJhbSB7UGFydGlhbDxpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb2dyYW1Nb2R1bGU+fSBtb2R1bGUgLSBPd25pbmcgbW9kdWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IGRlY2xhcmF0aW9uSWQgLSBTdGFibGUgZGVjbGFyYXRpb24gaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBEZWNsYXJhdGlvbiBuYW1lLlxuICovXG5mdW5jdGlvbiBkZWNsYXJhdGlvbk5hbWUobW9kdWxlLCBkZWNsYXJhdGlvbklkKSB7XG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gWy4uLm1vZHVsZS5mdW5jdGlvbnMgPz8gW10sIC4uLm1vZHVsZS5yZWNvcmRzID8/IFtdLCAuLi5tb2R1bGUuY2xhc3NlcyA/PyBbXSwgLi4ubW9kdWxlLmVycm9ycyA/PyBbXV1cbiAgICAuZmluZCgoe2lkfSkgPT4gaWQgPT0gZGVjbGFyYXRpb25JZClcblxuICBpZiAoIWRlY2xhcmF0aW9uKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVW5rbm93biBwcm9ncmFtIGRlY2xhcmF0aW9uICcke2RlY2xhcmF0aW9uSWR9Jy5gKVxuXG4gIHJldHVybiBkZWNsYXJhdGlvbi5uYW1lXG59XG5cbi8qKlxuICogQ2hvb3NlcyBhbiB1bnF1YWxpZmllZCB0YXJnZXQgYmluZGluZyB3aXRob3V0IHRyZWF0aW5nIGEgc291cmNlLXByb2ZpbGUgcXVhbGlmaWVyIGFzIHNlbWFudGljIGlkZW50aXR5LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb2dyYW19IHByb2dyYW0gLSBPd25pbmcgcHJvZ3JhbS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNQcm9ncmFtTW9kdWxlfSBtb2R1bGUgLSBJbXBvcnRpbmcgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0ltcG9ydH0gaW1wb3J0ZWQgLSBSZXNvbHZlZCBpbXBvcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUYXJnZXQtbG9jYWwgYmluZGluZyBzcGVsbGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2dyYW1JbXBvcnROYW1lKHByb2dyYW0sIG1vZHVsZSwgaW1wb3J0ZWQpIHtcbiAgY29uc3Qgc291cmNlID0gcHJvZ3JhbS5zb3VyY2VzLmZpbmQoKHtmaWxlbmFtZX0pID0+IGZpbGVuYW1lID09IG1vZHVsZS5zb3VyY2VGaWxlbmFtZSlcblxuICBpZiAoIXNvdXJjZSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFByb2dyYW0gbW9kdWxlICcke21vZHVsZS5pZH0nIGhhcyBubyByZWdpc3RlcmVkIHNvdXJjZS5gKVxuXG4gIHJldHVybiBzb3VyY2UubGFuZ3VhZ2UgPT0gXCJydWJ5XCIgfHwgc291cmNlLmxhbmd1YWdlID09IFwiamF2YVwiID8gaW1wb3J0ZWQuaW1wb3J0ZWROYW1lIDogaW1wb3J0ZWQubG9jYWxOYW1lXG59XG5cbi8qKiBTb3VyY2UtYXdhcmUgZGV0ZXJtaW5pc3RpYyBnZW5lcmF0ZWQtb3V0cHV0IGJ1aWxkZXIuICovXG5leHBvcnQgY2xhc3MgU291cmNlV3JpdGVyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzb3VyY2UtYXdhcmUgd3JpdGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIFdyaXRlciBvcHRpb25zLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5maWxlbmFtZSAtIE91dHB1dCBmaWxlbmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5HZW5lcmF0ZWRUZXh0TGFuZ3VhZ2V9IG9wdGlvbnMubGFuZ3VhZ2UgLSBPdXRwdXQgdGV4dCBsYW5ndWFnZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gb3B0aW9ucy5tb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNQcm9ncmFtfSBbb3B0aW9ucy5wcm9ncmFtXSAtIE93bmluZyBtdWx0aS1maWxlIHByb2dyYW0uXG4gICAqIEBwYXJhbSB7TWFwPHN0cmluZywgc3RyaW5nPn0gW29wdGlvbnMucHJvZ3JhbVBhdGhzXSAtIFBsYW5uZWQgYXJ0aWZhY3QgcGF0aCBieSBtb2R1bGUgaWRlbnRpdHkuXG4gICAqIEBwYXJhbSB7e2ZpbGVuYW1lOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgbGFuZ3VhZ2U/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfVtdfSBbb3B0aW9ucy5zb3VyY2VzXSAtIENhbGxlci1wcm92aWRlZCBzb3VyY2VzLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IFtvcHRpb25zLnN0ZGxpYlByb3ZpZGVyRW50cmllc10gLSBVc2VkIG9wZXJhdGlvbiB0byBwcm90ZWN0ZWQgbmF0aXZlIGVudHJ5IGZvciBhIGxpbmtlZCBzdGRsaWIgcHJvdmlkZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zdGRsaWJQcm92aWRlclBhdGhdIC0gUGxhbm5lZCBzdGRsaWIgcHJvdmlkZXIgYXJ0aWZhY3QgcGF0aC5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW29wdGlvbnMuc3RkbGliUHJvdmlkZXJQYXRoc10gLSBQbGFubmVkIHN0ZGxpYiBwcm92aWRlciBhcnRpZmFjdCBwYXRocy5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW29wdGlvbnMuc3RkbGliUHJvdmlkZXJJbXBvcnRzXSAtIE9yZGVyZWQgcHJvdmlkZXIgbmFtZXMgdGhpcyBtb2R1bGUgbXVzdCBpbXBvcnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zdGRsaWJQcm92aWRlck93bmVyTW9kdWxlXSAtIEphdmEgb3duZXIgbW9kdWxlIGlkZW50aXR5IGhvc3RpbmcgdGhlIHNoYXJlZCBzdXBwb3J0IGJsb2NrIGFuZCBzaGltcy5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW29wdGlvbnMuc3RkbGliUHJvdmlkZXJTaGltc10gLSBKYXZhIG93bmVyIHByb2dyYW0td2lkZSB1c2VkIG9wZXJhdGlvbnMgZXhwb3NlZCBhcyBwdWJsaWMgc3RhdGljIHNoaW1zLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2ZpbGVuYW1lLCBsYW5ndWFnZSwgbW9kdWxlLCBwcm9ncmFtLCBwcm9ncmFtUGF0aHMsIHNvdXJjZXMsIHN0ZGxpYlByb3ZpZGVyRW50cmllcywgc3RkbGliUHJvdmlkZXJQYXRoLFxuICAgIHN0ZGxpYlByb3ZpZGVyUGF0aHMsIHN0ZGxpYlByb3ZpZGVySW1wb3J0cywgc3RkbGliUHJvdmlkZXJPd25lck1vZHVsZSwgc3RkbGliUHJvdmlkZXJTaGltc30pIHtcbiAgICBjb25zdCBpbmRleCA9IGNyZWF0ZUdlbmVyYXRpb25JbmRleChtb2R1bGUsIHNvdXJjZXMpXG5cbiAgICB0aGlzLmZpbGVuYW1lID0gZmlsZW5hbWVcbiAgICB0aGlzLmxhbmd1YWdlID0gbGFuZ3VhZ2VcbiAgICB0aGlzLm1vZHVsZSA9IG1vZHVsZVxuICAgIHRoaXMucHJvZ3JhbSA9IHByb2dyYW1cbiAgICB0aGlzLnByb2dyYW1QYXRocyA9IHByb2dyYW1QYXRoc1xuICAgIHRoaXMuaW5kZXggPSBpbmRleFxuICAgIHRoaXMuc3RkbGliUHJvdmlkZXJFbnRyaWVzID0gc3RkbGliUHJvdmlkZXJFbnRyaWVzXG4gICAgdGhpcy5zdGRsaWJQcm92aWRlclBhdGggPSBzdGRsaWJQcm92aWRlclBhdGhcbiAgICB0aGlzLnN0ZGxpYlByb3ZpZGVyUGF0aHMgPSBzdGRsaWJQcm92aWRlclBhdGhzID8/IChzdGRsaWJQcm92aWRlclBhdGggPyBbc3RkbGliUHJvdmlkZXJQYXRoXSA6IHVuZGVmaW5lZClcbiAgICB0aGlzLnN0ZGxpYlByb3ZpZGVySW1wb3J0cyA9IHN0ZGxpYlByb3ZpZGVySW1wb3J0c1xuICAgIHRoaXMuc3RkbGliUHJvdmlkZXJPd25lck1vZHVsZSA9IHN0ZGxpYlByb3ZpZGVyT3duZXJNb2R1bGVcbiAgICB0aGlzLnN0ZGxpYlByb3ZpZGVyU2hpbXMgPSBzdGRsaWJQcm92aWRlclNoaW1zXG4gICAgY29uc3QgcHJvZ3JhbVJlY29yZHMgPSBwcm9ncmFtPy5tb2R1bGVzLmZsYXRNYXAoKHByb2dyYW1Nb2R1bGUpID0+IHByb2dyYW1Nb2R1bGUucmVjb3JkcyA/PyBbXSkgPz8gbW9kdWxlLnJlY29yZHMgPz8gW11cbiAgICBjb25zdCBwcm9ncmFtQ2xhc3NlcyA9IHByb2dyYW0/Lm1vZHVsZXMuZmxhdE1hcCgocHJvZ3JhbU1vZHVsZSkgPT4gcHJvZ3JhbU1vZHVsZS5jbGFzc2VzID8/IFtdKSA/PyBtb2R1bGUuY2xhc3NlcyA/PyBbXVxuICAgIGNvbnN0IGNhcGFiaWxpdHlGYWlsdXJlcyA9IG1vZHVsZS5jYXBhYmlsaXRpZXM/LmZsYXRNYXAoKHtmYWlsdXJlc30pID0+IGZhaWx1cmVzKSA/PyBbXVxuICAgIGNvbnN0IHByb2dyYW1FcnJvcnMgPSBwcm9ncmFtPy5tb2R1bGVzLmZsYXRNYXAoKHByb2dyYW1Nb2R1bGUpID0+IFtcbiAgICAgIC4uLihwcm9ncmFtTW9kdWxlLmVycm9ycyA/PyBbXSksXG4gICAgICAuLi4ocHJvZ3JhbU1vZHVsZS5jYXBhYmlsaXRpZXM/LmZsYXRNYXAoKHtmYWlsdXJlc30pID0+IGZhaWx1cmVzKSA/PyBbXSlcbiAgICBdKSA/PyBbLi4ubW9kdWxlLmVycm9ycyA/PyBbXSwgLi4uY2FwYWJpbGl0eUZhaWx1cmVzXVxuICAgIGNvbnN0IHByb2dyYW1GdW5jdGlvbnMgPSBwcm9ncmFtPy5tb2R1bGVzLmZsYXRNYXAoKHByb2dyYW1Nb2R1bGUpID0+IHByb2dyYW1Nb2R1bGUuZnVuY3Rpb25zKSA/PyBtb2R1bGUuZnVuY3Rpb25zXG5cbiAgICB0aGlzLnJlY29yZHMgPSBuZXcgTWFwKHByb2dyYW1SZWNvcmRzLm1hcCgocmVjb3JkKSA9PiBbcmVjb3JkLmlkLCByZWNvcmRdKSlcbiAgICB0aGlzLmNsYXNzZXMgPSBuZXcgTWFwKHByb2dyYW1DbGFzc2VzLm1hcCgoZGVjbGFyYXRpb24pID0+IFtkZWNsYXJhdGlvbi5pZCwgZGVjbGFyYXRpb25dKSlcbiAgICB0aGlzLmVycm9ycyA9IG5ldyBNYXAocHJvZ3JhbUVycm9ycy5tYXAoKGVycm9yKSA9PiBbZXJyb3IuaWQsIGVycm9yXSkpXG4gICAgdGhpcy5yZXNvdXJjZXMgPSBuZXcgTWFwKChtb2R1bGUuY2FwYWJpbGl0aWVzPy5mbGF0TWFwKCh7cmVzb3VyY2VzfSkgPT4gcmVzb3VyY2VzKSA/PyBbXSkubWFwKChyZXNvdXJjZSkgPT4gW3Jlc291cmNlLmlkLCByZXNvdXJjZV0pKVxuICAgIHRoaXMuZWZmZWN0T3BlcmF0aW9ucyA9IG5ldyBNYXAoKG1vZHVsZS5jYXBhYmlsaXRpZXM/LmZsYXRNYXAoKHtvcGVyYXRpb25zfSkgPT4gb3BlcmF0aW9ucykgPz8gW10pLm1hcCgob3BlcmF0aW9uKSA9PiBbb3BlcmF0aW9uLmlkLCBvcGVyYXRpb25dKSlcbiAgICB0aGlzLmVmZmVjdE9wZXJhdGlvbk1vZHVsZXMgPSBuZXcgTWFwKChtb2R1bGUuY2FwYWJpbGl0aWVzPy5mbGF0TWFwKChjYXBhYmlsaXR5KSA9PlxuICAgICAgY2FwYWJpbGl0eS5vcGVyYXRpb25zLm1hcCgob3BlcmF0aW9uKSA9PiBbb3BlcmF0aW9uLmlkLCBjYXBhYmlsaXR5LmF1dGhvcml0eUlkXSkpID8/IFtdKSlcbiAgICB0aGlzLmZpZWxkcyA9IG5ldyBNYXAocHJvZ3JhbVJlY29yZHMuZmxhdE1hcCgocmVjb3JkKSA9PiByZWNvcmQuZmllbGRzLm1hcCgoZmllbGQpID0+IFtmaWVsZC5pZCwgZmllbGRdKSkpXG4gICAgdGhpcy5maWVsZFJlY29yZHMgPSBuZXcgTWFwKHByb2dyYW1SZWNvcmRzLmZsYXRNYXAoKHJlY29yZCkgPT4gcmVjb3JkLmZpZWxkcy5tYXAoKGZpZWxkKSA9PiBbZmllbGQuaWQsIHJlY29yZF0pKSlcbiAgICB0aGlzLnByaXZhdGVGaWVsZHMgPSBuZXcgTWFwKHByb2dyYW1DbGFzc2VzLmZsYXRNYXAoKGRlY2xhcmF0aW9uKSA9PiBkZWNsYXJhdGlvbi5maWVsZHMubWFwKChmaWVsZCkgPT4gW2ZpZWxkLmlkLCBmaWVsZF0pKSlcbiAgICB0aGlzLm1ldGhvZHMgPSBuZXcgTWFwKHByb2dyYW1DbGFzc2VzLmZsYXRNYXAoKGRlY2xhcmF0aW9uKSA9PiBkZWNsYXJhdGlvbi5tZXRob2RzLm1hcCgobWV0aG9kKSA9PiBbbWV0aG9kLmlkLCBtZXRob2RdKSkpXG4gICAgdGhpcy50eXBlUGFyYW1ldGVycyA9IG5ldyBNYXAoWy4uLnByb2dyYW1SZWNvcmRzLCAuLi5wcm9ncmFtRnVuY3Rpb25zXS5mbGF0TWFwKChkZWNsYXJhdGlvbikgPT5cbiAgICAgIChkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIuaWQsIHBhcmFtZXRlcl0pKSlcbiAgICB0aGlzLnJlZmVyZW5jZUNsYXNzRW1pc3Npb25EZXB0aCA9IDBcbiAgICAvKiogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljUHJvZ3JhbU1vZHVsZT59ICovXG4gICAgdGhpcy5kZWNsYXJhdGlvbk1vZHVsZXMgPSBuZXcgTWFwKHByb2dyYW0/Lm1vZHVsZXMuZmxhdE1hcCgocHJvZ3JhbU1vZHVsZSkgPT4gW1xuICAgICAgLi4uKHByb2dyYW1Nb2R1bGUucmVjb3JkcyA/PyBbXSkubWFwKChkZWNsYXJhdGlvbikgPT4gLyoqIEB0eXBlIHtjb25zdH0gKi8gKFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgcHJvZ3JhbU1vZHVsZV0pKSxcbiAgICAgIC4uLihwcm9ncmFtTW9kdWxlLmNsYXNzZXMgPz8gW10pLm1hcCgoZGVjbGFyYXRpb24pID0+IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIHByb2dyYW1Nb2R1bGVdKSksXG4gICAgICAuLi4ocHJvZ3JhbU1vZHVsZS5lcnJvcnMgPz8gW10pLm1hcCgoZGVjbGFyYXRpb24pID0+IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIHByb2dyYW1Nb2R1bGVdKSksXG4gICAgICAuLi5wcm9ncmFtTW9kdWxlLmZ1bmN0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PiAvKiogQHR5cGUge2NvbnN0fSAqLyAoWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBwcm9ncmFtTW9kdWxlXSkpXG4gICAgXSkgPz8gW10pXG4gICAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgICB0aGlzLnBhcnRzID0gW11cbiAgICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGlmb2xkTWFwcGluZ1NwYW5bXX0gKi9cbiAgICB0aGlzLnNwYW5zID0gW11cbiAgICB0aGlzLm9mZnNldCA9IDBcbiAgICB0aGlzLmxpbmUgPSAxXG4gICAgdGhpcy5jb2x1bW4gPSAxXG4gICAgLyoqIEB0eXBlIHtNYXA8aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbiwgc3RyaW5nPn0gKi9cbiAgICB0aGlzLmVmZmVjdFRlbXBvcmFyeU5hbWVzID0gbmV3IE1hcCgpXG4gICAgLyoqIEB0eXBlIHtNYXA8aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbiwgc3RyaW5nPn0gKi9cbiAgICB0aGlzLmVmZmVjdFJlcGxhY2VtZW50TmFtZXMgPSBuZXcgTWFwKClcbiAgICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb24gfCB1bmRlZmluZWR9ICovXG4gICAgdGhpcy5lZmZlY3REZWZpbml0aW9uID0gdW5kZWZpbmVkXG4gICAgdGhpcy51c2VkQmluZGluZ05hbWVzID0gY29sbGVjdEJpbmRpbmdOYW1lcyhtb2R1bGUpXG4gIH1cblxuICAvKipcbiAgICogSW5zdGFsbHMgdGhlIGVmZmVjdCBleHByZXNzaW9ucyBsb3dlcmVkIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgY3VycmVudCBzdGF0ZW1lbnQuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbltdfSBleHByZXNzaW9ucyAtIE9yZGVyZWQgZXhwcmVzc2lvbnMuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgcGxhbkVmZmVjdFJlcGxhY2VtZW50cyhleHByZXNzaW9ucykge1xuICAgIHRoaXMuZWZmZWN0UmVwbGFjZW1lbnROYW1lcyA9IG5ldyBNYXAoZXhwcmVzc2lvbnMubWFwKChleHByZXNzaW9uKSA9PiBbZXhwcmVzc2lvbiwgdGhpcy5lZmZlY3RUZW1wb3JhcnlOYW1lKGV4cHJlc3Npb24pXSkpXG4gIH1cblxuICAvKipcbiAgICogQWxsb2NhdGVzIGEgY29sbGlzaW9uLXNhZmUgbmFtZSBmb3Igb25lIGRldGVybWluaXN0aWMgZWZmZWN0IHNpdGUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIEVmZmVjdGZ1bCBleHByZXNzaW9uLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBTdGFibGUgdGVtcG9yYXJ5IG5hbWUuXG4gICAqL1xuICBlZmZlY3RUZW1wb3JhcnlOYW1lKGV4cHJlc3Npb24pIHtcbiAgICBjb25zdCBrbm93biA9IHRoaXMuZWZmZWN0VGVtcG9yYXJ5TmFtZXMuZ2V0KGV4cHJlc3Npb24pXG4gICAgaWYgKGtub3duKSByZXR1cm4ga25vd25cbiAgICBjb25zdCBzaXRlID0gdHlwZW9mIFJlZmxlY3QuZ2V0KGV4cHJlc3Npb24sIFwiZWZmZWN0U2l0ZUlkXCIpID09IFwic3RyaW5nXCJcbiAgICAgID8gUmVmbGVjdC5nZXQoZXhwcmVzc2lvbiwgXCJlZmZlY3RTaXRlSWRcIikuc2xpY2UoXCJlZmZlY3Q6XCIubGVuZ3RoKSA6IFN0cmluZyh0aGlzLmVmZmVjdFRlbXBvcmFyeU5hbWVzLnNpemUpXG4gICAgbGV0IG5hbWUgPSBgX19zZW1hbnRpZm9sZF9lZmZlY3RfJHtzaXRlfWBcblxuICAgIHdoaWxlICh0aGlzLnVzZWRCaW5kaW5nTmFtZXMuaGFzKG5hbWUpKSBuYW1lID0gYCR7bmFtZX1fYFxuICAgIHRoaXMudXNlZEJpbmRpbmdOYW1lcy5hZGQobmFtZSlcbiAgICB0aGlzLmVmZmVjdFRlbXBvcmFyeU5hbWVzLnNldChleHByZXNzaW9uLCBuYW1lKVxuICAgIHJldHVybiBuYW1lXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcGxhbm5lZCB0ZW1wb3JhcnkgcmVwbGFjZW1lbnQgb3V0c2lkZSBpdHMgb3duIGRlZmluaXRpb24uXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIENhbmRpZGF0ZSBleHByZXNzaW9uLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBUZW1wb3JhcnkgbmFtZS5cbiAgICovXG4gIGVmZmVjdFJlcGxhY2VtZW50TmFtZShleHByZXNzaW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuZWZmZWN0RGVmaW5pdGlvbiA9PT0gZXhwcmVzc2lvbiA/IHVuZGVmaW5lZCA6IHRoaXMuZWZmZWN0UmVwbGFjZW1lbnROYW1lcy5nZXQoZXhwcmVzc2lvbilcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyBvbmUgZWZmZWN0IGRlZmluaXRpb24gd2l0aG91dCByZWN1cnNpdmVseSByZXBsYWNpbmcgaXRzZWxmLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBEZWZpbmVkIGV4cHJlc3Npb24uXG4gICAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gZW1pdCAtIFRhcmdldCBleHByZXNzaW9uIGVtaXR0ZXIuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZW1pdEVmZmVjdERlZmluaXRpb24oZXhwcmVzc2lvbiwgZW1pdCkge1xuICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5lZmZlY3REZWZpbml0aW9uXG4gICAgdGhpcy5lZmZlY3REZWZpbml0aW9uID0gZXhwcmVzc2lvblxuICAgIHRyeSB7XG4gICAgICBlbWl0KClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5lZmZlY3REZWZpbml0aW9uID0gcHJldmlvdXNcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBnZW5lcmF0ZWQgY29udGVudCBzbyBmYXIuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IEdlbmVyYXRlZCBjb250ZW50LlxuICAgKi9cbiAgZ2V0IGNvZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydHMuam9pbihcIlwiKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgSlNPTiBQb2ludGVyIGZvciBvbmUgdW5hbWJpZ3VvdXMgc2VtYW50aWMgb2NjdXJyZW5jZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGV9IG5vZGUgLSBTZW1hbnRpYyBub2RlIG9jY3VycmVuY2UuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IEN1cnJlbnQgb2NjdXJyZW5jZSBwYXRoLlxuICAgKi9cbiAgb2NjdXJyZW5jZVBhdGgobm9kZSkge1xuICAgIHJldHVybiB0aGlzLmluZGV4LnJlY29yZEZvcihub2RlKS5wYXRoXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYSB2YWxpZGF0ZWQgbm9taW5hbCBkZWNsYXJhdGlvbiBpZGVudGl0eSBmb3IgdGFyZ2V0IGVtaXNzaW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGVjbGFyYXRpb25JZCAtIFNlbWFudGljIHJlY29yZCBpZGVudGl0eS5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9ufSBSZWNvcmQgZGVjbGFyYXRpb24uXG4gICAqL1xuICByZWNvcmRGb3JJZChkZWNsYXJhdGlvbklkKSB7XG4gICAgY29uc3QgcmVjb3JkID0gdGhpcy5yZWNvcmRzLmdldChkZWNsYXJhdGlvbklkKVxuXG4gICAgaWYgKCFyZWNvcmQpIHRocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIHZhbGlkYXRlZCByZWNvcmQgaWRlbnRpdHkgJyR7ZGVjbGFyYXRpb25JZH0nLmApXG5cbiAgICByZXR1cm4gcmVjb3JkXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGFyZ2V0IHNwZWxsaW5nIGZvciBhIG5vbWluYWwgcmVjb3JkIGlkZW50aXR5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGVjbGFyYXRpb25JZCAtIFN0YWJsZSByZWNvcmQgZGVjbGFyYXRpb24gaWRlbnRpdHkuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ZhbHVlUG9zaXRpb25dIC0gV2hldGhlciB0aGUgYmluZGluZyBtdXN0IGV4aXN0IGF0IHJ1bnRpbWUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRhcmdldCByZWNvcmQgc3BlbGxpbmcuXG4gICAqL1xuICByZWNvcmROYW1lRm9ySWQoZGVjbGFyYXRpb25JZCwgdmFsdWVQb3NpdGlvbiA9IGZhbHNlKSB7XG4gICAgY29uc3QgcmVjb3JkID0gdGhpcy5yZWNvcmRGb3JJZChkZWNsYXJhdGlvbklkKVxuICAgIGNvbnN0IG93bmVyID0gdGhpcy5kZWNsYXJhdGlvbk1vZHVsZXMuZ2V0KGRlY2xhcmF0aW9uSWQpXG4gICAgY29uc3QgaW1wb3J0ZWQgPSB0aGlzLiNwcm9ncmFtTW9kdWxlKCk/LmltcG9ydHMuZmluZCgoaXRlbSkgPT5cbiAgICAgIGl0ZW0uZGVjbGFyYXRpb25JZCA9PSBkZWNsYXJhdGlvbklkICYmICghdmFsdWVQb3NpdGlvbiB8fCAhaXRlbS50eXBlT25seSkpXG5cbiAgICBpZiAodGhpcy5wcm9ncmFtICYmIG93bmVyICYmIG93bmVyLmlkICE9IFJlZmxlY3QuZ2V0KHRoaXMubW9kdWxlLCBcImlkXCIpICYmIHRoaXMubGFuZ3VhZ2UgPT0gXCJydWJ5XCIpIHtcbiAgICAgIHJldHVybiBgJHttb2R1bGVDbGFzc05hbWUob3duZXIuaWQpfTo6JHtyZWNvcmQubmFtZX1gXG4gICAgfVxuICAgIGlmIChpbXBvcnRlZCAmJiAodGhpcy5sYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCB0aGlzLmxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiIHx8IHRoaXMubGFuZ3VhZ2UgPT0gXCJwaHBcIikpIHtcbiAgICAgIHJldHVybiB0aGlzLmltcG9ydE5hbWVGb3IoaW1wb3J0ZWQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY29yZC5uYW1lXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgb25lIHZhbGlkYXRlZCByZWZlcmVuY2UgY2xhc3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkZWNsYXJhdGlvbklkIC0gU3RhYmxlIGNsYXNzIGlkZW50aXR5LlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gQ2xhc3MgZGVjbGFyYXRpb24uXG4gICAqL1xuICBjbGFzc0ZvcklkKGRlY2xhcmF0aW9uSWQpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMuY2xhc3Nlcy5nZXQoZGVjbGFyYXRpb25JZClcblxuICAgIGlmICghZGVjbGFyYXRpb24pIHRocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIHZhbGlkYXRlZCByZWZlcmVuY2UgY2xhc3MgaWRlbnRpdHkgJyR7ZGVjbGFyYXRpb25JZH0nLmApXG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb25cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0YXJnZXQgc3BlbGxpbmcgb2Ygb25lIHJlZmVyZW5jZSBjbGFzcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRlY2xhcmF0aW9uSWQgLSBTdGFibGUgY2xhc3MgaWRlbnRpdHkuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRhcmdldCBzcGVsbGluZy5cbiAgICovXG4gIGNsYXNzTmFtZUZvcklkKGRlY2xhcmF0aW9uSWQpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMuY2xhc3NGb3JJZChkZWNsYXJhdGlvbklkKVxuICAgIGNvbnN0IGltcG9ydGVkID0gdGhpcy4jcHJvZ3JhbU1vZHVsZSgpPy5pbXBvcnRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZGVjbGFyYXRpb25JZCA9PSBkZWNsYXJhdGlvbklkKVxuXG4gICAgaWYgKGltcG9ydGVkICYmICh0aGlzLmxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IHRoaXMubGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgfHwgdGhpcy5sYW5ndWFnZSA9PSBcInBocFwiKSkge1xuICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0TmFtZUZvcihpbXBvcnRlZClcbiAgICB9XG4gICAgcmV0dXJuIGRlY2xhcmF0aW9uLm5hbWVcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBvbmUgdmFsaWRhdGVkIG93bmVkLXJlc291cmNlIGRlY2xhcmF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVzb3VyY2VJZCAtIFN0YWJsZSByZXNvdXJjZSBpZGVudGl0eS5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb259IFJlc291cmNlIGRlY2xhcmF0aW9uLlxuICAgKi9cbiAgcmVzb3VyY2VGb3JJZChyZXNvdXJjZUlkKSB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlcy5nZXQocmVzb3VyY2VJZClcbiAgICBpZiAoIXJlc291cmNlKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVW5rbm93biB2YWxpZGF0ZWQgcmVzb3VyY2UgaWRlbnRpdHkgJyR7cmVzb3VyY2VJZH0nLmApXG4gICAgcmV0dXJuIHJlc291cmNlXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgb25lIHZhbGlkYXRlZCBjYXBhYmlsaXR5IG9wZXJhdGlvbiBkZWNsYXJhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wZXJhdGlvbklkIC0gU3RhYmxlIG9wZXJhdGlvbiBpZGVudGl0eS5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdE9wZXJhdGlvbkRlY2xhcmF0aW9ufSBPcGVyYXRpb24gZGVjbGFyYXRpb24uXG4gICAqL1xuICBlZmZlY3RPcGVyYXRpb25Gb3JJZChvcGVyYXRpb25JZCkge1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHRoaXMuZWZmZWN0T3BlcmF0aW9ucy5nZXQob3BlcmF0aW9uSWQpXG4gICAgaWYgKCFvcGVyYXRpb24pIHRocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIHZhbGlkYXRlZCBlZmZlY3Qgb3BlcmF0aW9uIGlkZW50aXR5ICcke29wZXJhdGlvbklkfScuYClcbiAgICByZXR1cm4gb3BlcmF0aW9uXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgb25lIHZhbGlkYXRlZCBwcml2YXRlIGZpZWxkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGRJZCAtIFN0YWJsZSBwcml2YXRlLWZpZWxkIGlkZW50aXR5LlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUHJpdmF0ZUZpZWxkfSBGaWVsZCBkZWNsYXJhdGlvbi5cbiAgICovXG4gIHByaXZhdGVGaWVsZEZvcklkKGZpZWxkSWQpIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucHJpdmF0ZUZpZWxkcy5nZXQoZmllbGRJZClcblxuICAgIGlmICghZmllbGQpIHRocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIHZhbGlkYXRlZCBwcml2YXRlIGZpZWxkIGlkZW50aXR5ICcke2ZpZWxkSWR9Jy5gKVxuXG4gICAgcmV0dXJuIGZpZWxkXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgb25lIHZhbGlkYXRlZCByZWNlaXZlciBtZXRob2QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RJZCAtIFN0YWJsZSBtZXRob2QgaWRlbnRpdHkuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5NZXRob2REZWNsYXJhdGlvbn0gTWV0aG9kIGRlY2xhcmF0aW9uLlxuICAgKi9cbiAgbWV0aG9kRm9ySWQobWV0aG9kSWQpIHtcbiAgICBjb25zdCBtZXRob2QgPSB0aGlzLm1ldGhvZHMuZ2V0KG1ldGhvZElkKVxuXG4gICAgaWYgKCFtZXRob2QpIHRocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIHZhbGlkYXRlZCBtZXRob2QgaWRlbnRpdHkgJyR7bWV0aG9kSWR9Jy5gKVxuXG4gICAgcmV0dXJuIG1ldGhvZFxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIG9uZSB2YWxpZGF0ZWQgZGVjbGFyYXRpb24tc2NvcGVkIHR5cGUgcGFyYW1ldGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1ldGVySWQgLSBTdGFibGUgdHlwZS1wYXJhbWV0ZXIgaWRlbnRpdHkuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyfSBUeXBlIHBhcmFtZXRlci5cbiAgICovXG4gIHR5cGVQYXJhbWV0ZXJGb3JJZChwYXJhbWV0ZXJJZCkge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IHRoaXMudHlwZVBhcmFtZXRlcnMuZ2V0KHBhcmFtZXRlcklkKVxuXG4gICAgaWYgKCFwYXJhbWV0ZXIpIHRocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIHZhbGlkYXRlZCB0eXBlIHBhcmFtZXRlciBpZGVudGl0eSAnJHtwYXJhbWV0ZXJJZH0nLmApXG5cbiAgICByZXR1cm4gcGFyYW1ldGVyXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdmFsaWRhdGVkIG5vbWluYWwgZXJyb3IgZGVjbGFyYXRpb24gZm9yIGFuIGlkZW50aXR5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGVjbGFyYXRpb25JZCAtIFN0YWJsZSBlcnJvciBpZGVudGl0eS5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RGYWlsdXJlRGVjbGFyYXRpb259IEVycm9yIGRlY2xhcmF0aW9uLlxuICAgKi9cbiAgZXJyb3JGb3JJZChkZWNsYXJhdGlvbklkKSB7XG4gICAgY29uc3QgZXJyb3IgPSB0aGlzLmVycm9ycy5nZXQoZGVjbGFyYXRpb25JZClcblxuICAgIGlmICghZXJyb3IpIHRocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIHZhbGlkYXRlZCBlcnJvciBpZGVudGl0eSAnJHtkZWNsYXJhdGlvbklkfScuYClcblxuICAgIHJldHVybiBlcnJvclxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRhcmdldC12aXNpYmxlIHNwZWxsaW5nIGZvciBvbmUgbm9taW5hbCBlcnJvciBpZGVudGl0eS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRlY2xhcmF0aW9uSWQgLSBTdGFibGUgZXJyb3IgaWRlbnRpdHkuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRhcmdldC12aXNpYmxlIG5hbWUuXG4gICAqL1xuICBlcnJvck5hbWVGb3JJZChkZWNsYXJhdGlvbklkKSB7XG4gICAgY29uc3QgZXJyb3IgPSB0aGlzLmVycm9yRm9ySWQoZGVjbGFyYXRpb25JZClcbiAgICBjb25zdCBvd25lciA9IHRoaXMuZGVjbGFyYXRpb25Nb2R1bGVzLmdldChkZWNsYXJhdGlvbklkKVxuICAgIGNvbnN0IGltcG9ydGVkID0gdGhpcy4jcHJvZ3JhbU1vZHVsZSgpPy5pbXBvcnRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZGVjbGFyYXRpb25JZCA9PSBkZWNsYXJhdGlvbklkKVxuXG4gICAgaWYgKHRoaXMucHJvZ3JhbSAmJiBvd25lciAmJiBvd25lci5pZCAhPSBSZWZsZWN0LmdldCh0aGlzLm1vZHVsZSwgXCJpZFwiKSAmJiB0aGlzLmxhbmd1YWdlID09IFwicnVieVwiKSB7XG4gICAgICByZXR1cm4gYCR7bW9kdWxlQ2xhc3NOYW1lKG93bmVyLmlkKX06OiR7ZXJyb3IubmFtZX1gXG4gICAgfVxuICAgIGlmIChpbXBvcnRlZCAmJiAodGhpcy5sYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCB0aGlzLmxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiIHx8IHRoaXMubGFuZ3VhZ2UgPT0gXCJwaHBcIikpIHtcbiAgICAgIHJldHVybiB0aGlzLmltcG9ydE5hbWVGb3IoaW1wb3J0ZWQpXG4gICAgfVxuXG4gICAgcmV0dXJuIG93bmVyID8gZXJyb3IubmFtZSA6IHRoaXMuY2FwYWJpbGl0eU5vbWluYWxOYW1lKGVycm9yLm5hbWUpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGFyZ2V0IHNwZWxsaW5nIGZvciBhIG5vbWluYWwgbmFtZSBvd25lZCBieSBhIGNvbXBpbGVyLWF1dGhvcml6ZWQgY2FwYWJpbGl0eS5cbiAgICogUEhQIHByb2dyYW0gZW50cmllcyBsaXZlIGluIGEgZ2VuZXJhdGVkIG5hbWVzcGFjZSB3aGlsZSBzdGRsaWIgcHJvdmlkZXIgY2xhc3NlcyByZW1haW5cbiAgICogZ2xvYmFsLCBzbyBQSFAgcHJvZ3JhbSBtb2RlIGZ1bGx5IHF1YWxpZmllcyBjYXBhYmlsaXR5IG5hbWVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIERlY2xhcmVkIG5vbWluYWwgbmFtZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGFyZ2V0IHNwZWxsaW5nLlxuICAgKi9cbiAgY2FwYWJpbGl0eU5vbWluYWxOYW1lKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtICYmIHRoaXMubGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IGBcXFxcJHtuYW1lfWAgOiBuYW1lXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGFyZ2V0IHNwZWxsaW5nIGZvciBhIHJlc29sdmVkIGZ1bmN0aW9uIGNhbGwuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2FsbEV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBSZXNvbHZlZCBjYWxsLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUYXJnZXQgY2FsbCBuYW1lLlxuICAgKi9cbiAgY2FsbE5hbWVGb3IoZXhwcmVzc2lvbikge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uSWQgPSBleHByZXNzaW9uLnJlc29sdXRpb24/LmRlY2xhcmF0aW9uSWRcbiAgICBjb25zdCBvd25lciA9IGRlY2xhcmF0aW9uSWQgPyB0aGlzLmRlY2xhcmF0aW9uTW9kdWxlcy5nZXQoZGVjbGFyYXRpb25JZCkgOiB1bmRlZmluZWRcbiAgICBjb25zdCBpbXBvcnRlZCA9IGRlY2xhcmF0aW9uSWQgPyB0aGlzLiNwcm9ncmFtTW9kdWxlKCk/LmltcG9ydHMuZmluZCgoaXRlbSkgPT4gaXRlbS5kZWNsYXJhdGlvbklkID09IGRlY2xhcmF0aW9uSWQpIDogdW5kZWZpbmVkXG5cbiAgICBpZiAodGhpcy5sYW5ndWFnZSA9PSBcImphdmFcIiAmJiAhdGhpcy5wcm9ncmFtICYmIHRoaXMucmVmZXJlbmNlQ2xhc3NFbWlzc2lvbkRlcHRoID4gMCkgcmV0dXJuIGBNYWluLiR7ZXhwcmVzc2lvbi5jYWxsZWV9YFxuICAgIGlmICghZGVjbGFyYXRpb25JZCB8fCAhdGhpcy5wcm9ncmFtIHx8ICFvd25lciB8fCBvd25lci5pZCA9PSBSZWZsZWN0LmdldCh0aGlzLm1vZHVsZSwgXCJpZFwiKSkgcmV0dXJuIGV4cHJlc3Npb24uY2FsbGVlXG4gICAgaWYgKHRoaXMubGFuZ3VhZ2UgPT0gXCJydWJ5XCIgfHwgdGhpcy5sYW5ndWFnZSA9PSBcImphdmFcIikgcmV0dXJuIGAke21vZHVsZUNsYXNzTmFtZShvd25lci5pZCl9LiR7ZGVjbGFyYXRpb25OYW1lKG93bmVyLCBkZWNsYXJhdGlvbklkKX1gXG4gICAgaWYgKGltcG9ydGVkKSByZXR1cm4gdGhpcy5pbXBvcnROYW1lRm9yKGltcG9ydGVkKVxuXG4gICAgcmV0dXJuIGRlY2xhcmF0aW9uTmFtZShvd25lciwgZGVjbGFyYXRpb25JZClcbiAgfVxuXG4gIC8qKiBNYXJrcyBlbWlzc2lvbiBhcyBvY2N1cnJpbmcgaW5zaWRlIG9uZSB0b3AtbGV2ZWwgcmVmZXJlbmNlIGNsYXNzLiAqL1xuICBiZWdpblJlZmVyZW5jZUNsYXNzRW1pc3Npb24oKSB7XG4gICAgdGhpcy5yZWZlcmVuY2VDbGFzc0VtaXNzaW9uRGVwdGggKz0gMVxuICB9XG5cbiAgLyoqIEVuZHMgb25lIGJhbGFuY2VkIHRvcC1sZXZlbCByZWZlcmVuY2UtY2xhc3MgZW1pc3Npb24gc2NvcGUuICovXG4gIGVuZFJlZmVyZW5jZUNsYXNzRW1pc3Npb24oKSB7XG4gICAgaWYgKHRoaXMucmVmZXJlbmNlQ2xhc3NFbWlzc2lvbkRlcHRoID09IDApIHRocm93IG5ldyBSYW5nZUVycm9yKFwiUmVmZXJlbmNlLWNsYXNzIGVtaXNzaW9uIHNjb3BlIGlzIG5vdCBhY3RpdmUuXCIpXG4gICAgdGhpcy5yZWZlcmVuY2VDbGFzc0VtaXNzaW9uRGVwdGggLT0gMVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRhcmdldC1sb2NhbCBiaW5kaW5nIGZvciBvbmUgcmVzb2x2ZWQgaW1wb3J0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljSW1wb3J0fSBpbXBvcnRlZCAtIFJlc29sdmVkIGltcG9ydC5cbiAgICogQHJldHVybnMge3N0cmluZ30gRW1pdHRlZCBpbXBvcnQgbmFtZS5cbiAgICovXG4gIGltcG9ydE5hbWVGb3IoaW1wb3J0ZWQpIHtcbiAgICBjb25zdCBtb2R1bGUgPSB0aGlzLiNwcm9ncmFtTW9kdWxlKClcblxuICAgIGlmICghdGhpcy5wcm9ncmFtIHx8ICFtb2R1bGUpIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW1wb3J0IG5hbWVzIHJlcXVpcmUgYSB2YWxpZGF0ZWQgc2VtYW50aWMgcHJvZ3JhbS5cIilcblxuICAgIHJldHVybiBwcm9ncmFtSW1wb3J0TmFtZSh0aGlzLnByb2dyYW0sIG1vZHVsZSwgaW1wb3J0ZWQpXG4gIH1cblxuICAvKipcbiAgICogUmVwb3J0cyB3aGV0aGVyIG9uZSBsb2NhbCBkZWNsYXJhdGlvbiBpcyBleHBvcnRlZCBieSB0aGUgY3VycmVudCBwcm9ncmFtIG1vZHVsZS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IGRlY2xhcmF0aW9uSWQgLSBEZWNsYXJhdGlvbiBpZGVudGl0eS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgaXQgaGFzIGEgc2FtZS1uYW1lIHByb2dyYW0gZXhwb3J0LlxuICAgKi9cbiAgaXNEaXJlY3RseUV4cG9ydGVkKGRlY2xhcmF0aW9uSWQpIHtcbiAgICBjb25zdCBtb2R1bGUgPSAvKiogQHR5cGUge1BhcnRpYWw8aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNQcm9ncmFtTW9kdWxlPn0gKi8gKHRoaXMubW9kdWxlKVxuXG4gICAgcmV0dXJuIHR5cGVvZiBkZWNsYXJhdGlvbklkID09IFwic3RyaW5nXCIgJiYgQm9vbGVhbihtb2R1bGUuZXhwb3J0cz8uc29tZSgoaXRlbSkgPT5cbiAgICAgIGl0ZW0uZGVjbGFyYXRpb25JZCA9PSBkZWNsYXJhdGlvbklkICYmIGl0ZW0uZXhwb3J0ZWROYW1lID09IGRlY2xhcmF0aW9uTmFtZShtb2R1bGUsIGRlY2xhcmF0aW9uSWQpKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBvcnRzIHdoZXRoZXIgb25lIGV4cG9ydCBlZGdlIHVzZXMgaXRzIGRlY2xhcmF0aW9uJ3MgZW1pdHRlZCBuYW1lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRXhwb3J0fSBleHBvcnRlZCAtIEN1cnJlbnQgZXhwb3J0IGVkZ2UuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoaXMgZWRnZSBpcyByZXByZXNlbnRlZCBieSB0aGUgZGVjbGFyYXRpb24gcHJlZml4LlxuICAgKi9cbiAgaXNEaXJlY3RFeHBvcnQoZXhwb3J0ZWQpIHtcbiAgICByZXR1cm4gZXhwb3J0ZWQuZXhwb3J0ZWROYW1lID09IGRlY2xhcmF0aW9uTmFtZSh0aGlzLm1vZHVsZSwgZXhwb3J0ZWQuZGVjbGFyYXRpb25JZClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBvcnRzIHdoZXRoZXIgb25lIGxvY2FsIGRlY2xhcmF0aW9uIGhhcyBhbnkgcHVibGljIHByb2dyYW0gZXhwb3J0LlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gZGVjbGFyYXRpb25JZCAtIERlY2xhcmF0aW9uIGlkZW50aXR5LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgZGVjbGFyYXRpb24gaXMgZXhwb3J0ZWQuXG4gICAqL1xuICBpc0V4cG9ydGVkKGRlY2xhcmF0aW9uSWQpIHtcbiAgICBjb25zdCBtb2R1bGUgPSAvKiogQHR5cGUge1BhcnRpYWw8aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNQcm9ncmFtTW9kdWxlPn0gKi8gKHRoaXMubW9kdWxlKVxuXG4gICAgcmV0dXJuIHR5cGVvZiBkZWNsYXJhdGlvbklkID09IFwic3RyaW5nXCIgJiYgQm9vbGVhbihtb2R1bGUuZXhwb3J0cz8uc29tZSgoaXRlbSkgPT4gaXRlbS5kZWNsYXJhdGlvbklkID09IGRlY2xhcmF0aW9uSWQpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGlzIGlzIHRoZSBzZWxlY3RlZCBwcm9ncmFtIGVudHJ5IG1vZHVsZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyB3cml0ZXIgb3ducyB0aGUgc2VsZWN0ZWQgZW50cnkuXG4gICAqL1xuICBpc1Byb2dyYW1FbnRyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtPy5lbnRyeU1vZHVsZSA9PSBSZWZsZWN0LmdldCh0aGlzLm1vZHVsZSwgXCJpZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNhbm9uaWNhbCBjbGFzcy9tb2R1bGUgc2VnbWVudCBmb3IgYSBsb2dpY2FsIG1vZHVsZSBpZGVudGl0eS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZUlkIC0gTG9naWNhbCBtb2R1bGUgaWRlbnRpdHkuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRhcmdldCBjbGFzcy9tb2R1bGUgbmFtZS5cbiAgICovXG4gIHByb2dyYW1Nb2R1bGVOYW1lKG1vZHVsZUlkKSB7XG4gICAgaWYgKCF0aGlzLnByb2dyYW0/Lm1vZHVsZXMuc29tZSgoe2lkfSkgPT4gaWQgPT0gbW9kdWxlSWQpKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVW5rbm93biBwcm9ncmFtIG1vZHVsZSAnJHttb2R1bGVJZH0nLmApXG5cbiAgICByZXR1cm4gbW9kdWxlQ2xhc3NOYW1lKG1vZHVsZUlkKVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBjdXJyZW50IG1vZHVsZSBpbiB0aGUgY29tcGxldGUgcHJvZ3JhbS5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljUHJvZ3JhbU1vZHVsZSB8IHVuZGVmaW5lZH0gQ3VycmVudCBwcm9ncmFtIG1vZHVsZS5cbiAgICovXG4gICNwcm9ncmFtTW9kdWxlKCkge1xuICAgIGlmICghdGhpcy5wcm9ncmFtKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtLm1vZHVsZXMuZmluZCgoe2lkfSkgPT4gaWQgPT0gUmVmbGVjdC5nZXQodGhpcy5tb2R1bGUsIFwiaWRcIikpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHJlbGF0aXZlIEVTTS9yZXF1aXJlIHNwZWNpZmllciBmb3IgYSBwbGFubmVkIGRlcGVuZGVuY3kgYXJ0aWZhY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVJZCAtIERlcGVuZGVuY3kgbW9kdWxlIGlkZW50aXR5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4dGVuc2lvbl0gLSBPcHRpb25hbCByZXBsYWNlbWVudCBleHRlbnNpb24uXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJlbGF0aXZlIFBPU0lYIHNwZWNpZmllci5cbiAgICovXG4gIHJlbGF0aXZlTW9kdWxlU3BlY2lmaWVyKG1vZHVsZUlkLCBleHRlbnNpb24pIHtcbiAgICBjb25zdCB0YXJnZXRQYXRoID0gdGhpcy5wcm9ncmFtUGF0aHM/LmdldChtb2R1bGVJZClcblxuICAgIGlmICghdGFyZ2V0UGF0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFVua25vd24gcGxhbm5lZCBtb2R1bGUgcGF0aCAnJHttb2R1bGVJZH0nLmApXG4gICAgY29uc3QgYWRqdXN0ZWRUYXJnZXQgPSBleHRlbnNpb24gPyB0YXJnZXRQYXRoLnJlcGxhY2UoL1xcLlteLi9dKyQvdSwgZXh0ZW5zaW9uKSA6IHRhcmdldFBhdGhcbiAgICBjb25zdCBmcm9tID0gdGhpcy5maWxlbmFtZS5zcGxpdChcIi9cIikuc2xpY2UoMCwgLTEpXG4gICAgY29uc3QgdG8gPSBhZGp1c3RlZFRhcmdldC5zcGxpdChcIi9cIilcbiAgICBsZXQgY29tbW9uID0gMFxuXG4gICAgd2hpbGUgKGNvbW1vbiA8IGZyb20ubGVuZ3RoICYmIGNvbW1vbiA8IHRvLmxlbmd0aCAmJiBmcm9tW2NvbW1vbl0gPT0gdG9bY29tbW9uXSkgY29tbW9uKytcbiAgICBjb25zdCByZWxhdGl2ZSA9IFsuLi5mcm9tLnNsaWNlKGNvbW1vbikubWFwKCgpID0+IFwiLi5cIiksIC4uLnRvLnNsaWNlKGNvbW1vbildLmpvaW4oXCIvXCIpXG5cbiAgICByZXR1cm4gcmVsYXRpdmUuc3RhcnRzV2l0aChcIi5cIikgPyByZWxhdGl2ZSA6IGAuLyR7cmVsYXRpdmV9YFxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHByb3RlY3RlZCBuYXRpdmUgZW50cnkgZm9yIG9uZSB1c2VkIHN0ZGxpYiBwcm92aWRlciBvcGVyYXRpb24uXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0T3BlcmF0aW9uRGVjbGFyYXRpb259IG9wZXJhdGlvbiAtIENhbm9uaWNhbCBvcGVyYXRpb24gZGVjbGFyYXRpb24uXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IExpbmtlZCBwcm90ZWN0ZWQgZW50cnksIG9yIHVuZGVmaW5lZCB3aGVuIHRoZSBvcGVyYXRpb24gc3RheXMgaW5saW5lZC5cbiAgICovXG4gIHN0ZGxpYlByb3ZpZGVyRW50cnlGb3Iob3BlcmF0aW9uKSB7XG4gICAgY29uc3QgbW9kdWxlID0gdGhpcy5lZmZlY3RPcGVyYXRpb25Nb2R1bGVzLmdldChvcGVyYXRpb24uaWQpXG5cbiAgICByZXR1cm4gbW9kdWxlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0aGlzLnN0ZGxpYlByb3ZpZGVyRW50cmllcz8uW2Ake21vZHVsZX1cXHUwMDAwJHtvcGVyYXRpb24ubmFtZX1gXVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWxhdGl2ZSBzcGVjaWZpZXIgZm9yIHRoZSBwbGFubmVkIHN0ZGxpYiBwcm92aWRlciBhcnRpZmFjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHRlbnNpb25dIC0gT3B0aW9uYWwgcmVwbGFjZW1lbnQgZXh0ZW5zaW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3Byb3ZpZGVyUGF0aF0gLSBPbmUgc2VsZWN0ZWQgcHJvdmlkZXIgYXJ0aWZhY3QgcGF0aC5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmVsYXRpdmUgUE9TSVggc3BlY2lmaWVyLlxuICAgKi9cbiAgc3RkbGliUHJvdmlkZXJTcGVjaWZpZXIoZXh0ZW5zaW9uLCBwcm92aWRlclBhdGgpIHtcbiAgICBjb25zdCB0YXJnZXRQYXRoID0gcHJvdmlkZXJQYXRoID8/IHRoaXMuc3RkbGliUHJvdmlkZXJQYXRoID8/IHRoaXMuc3RkbGliUHJvdmlkZXJQYXRocz8uWzBdXG5cbiAgICBpZiAoIXRhcmdldFBhdGgpIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQSBzdGRsaWIgcHJvdmlkZXIgc3BlY2lmaWVyIHJlcXVpcmVzIGEgcGxhbm5lZCBwcm92aWRlciBwYXRoLlwiKVxuICAgIGNvbnN0IGFkanVzdGVkVGFyZ2V0ID0gZXh0ZW5zaW9uID8gdGFyZ2V0UGF0aC5yZXBsYWNlKC9cXC5bXi4vXSskL3UsIGV4dGVuc2lvbikgOiB0YXJnZXRQYXRoXG4gICAgY29uc3QgZnJvbSA9IHRoaXMuZmlsZW5hbWUuc3BsaXQoXCIvXCIpLnNsaWNlKDAsIC0xKVxuICAgIGNvbnN0IHRvID0gYWRqdXN0ZWRUYXJnZXQuc3BsaXQoXCIvXCIpXG4gICAgbGV0IGNvbW1vbiA9IDBcblxuICAgIHdoaWxlIChjb21tb24gPCBmcm9tLmxlbmd0aCAmJiBjb21tb24gPCB0by5sZW5ndGggJiYgZnJvbVtjb21tb25dID09IHRvW2NvbW1vbl0pIGNvbW1vbisrXG4gICAgY29uc3QgcmVsYXRpdmUgPSBbLi4uZnJvbS5zbGljZShjb21tb24pLm1hcCgoKSA9PiBcIi4uXCIpLCAuLi50by5zbGljZShjb21tb24pXS5qb2luKFwiL1wiKVxuXG4gICAgcmV0dXJuIHJlbGF0aXZlLnN0YXJ0c1dpdGgoXCIuXCIpID8gcmVsYXRpdmUgOiBgLi8ke3JlbGF0aXZlfWBcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhIHZhbGlkYXRlZCBmaWVsZCBpZGVudGl0eSBmb3IgdGFyZ2V0IGVtaXNzaW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGRJZCAtIFNlbWFudGljIGZpZWxkIGlkZW50aXR5LlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRmllbGR9IFJlY29yZCBmaWVsZC5cbiAgICovXG4gIGZpZWxkRm9ySWQoZmllbGRJZCkge1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHMuZ2V0KGZpZWxkSWQpXG5cbiAgICBpZiAoIWZpZWxkKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVW5rbm93biB2YWxpZGF0ZWQgZmllbGQgaWRlbnRpdHkgJyR7ZmllbGRJZH0nLmApXG5cbiAgICByZXR1cm4gZmllbGRcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgcmVjb3JkIGRlY2xhcmF0aW9uIHRoYXQgb3ducyBhIHZhbGlkYXRlZCBmaWVsZCBpZGVudGl0eS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkSWQgLSBTZW1hbnRpYyBmaWVsZCBpZGVudGl0eS5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9ufSBPd25pbmcgcmVjb3JkLlxuICAgKi9cbiAgcmVjb3JkRm9yRmllbGRJZChmaWVsZElkKSB7XG4gICAgY29uc3QgcmVjb3JkID0gdGhpcy5maWVsZFJlY29yZHMuZ2V0KGZpZWxkSWQpXG5cbiAgICBpZiAoIXJlY29yZCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFVua25vd24gdmFsaWRhdGVkIGZpZWxkIGlkZW50aXR5ICcke2ZpZWxkSWR9Jy5gKVxuXG4gICAgcmV0dXJuIHJlY29yZFxuICB9XG5cbiAgLyoqXG4gICAqIFJlcG9ydHMgd2hldGhlciBhbiBleGFjdCBwYXJzZXItb3duZWQgcm9sZSByYW5nZSBpcyBhdmFpbGFibGUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNOb2RlfSBub2RlIC0gU2VtYW50aWMgbm9kZSBvY2N1cnJlbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEpTT04gUG9pbnRlciBmb3IgYSBzaGFyZWQgbm9kZSBvY2N1cnJlbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcm9sZSAtIFNlbWFudGljIHRva2VuIHJvbGUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSByb2xlIGhhcyBhbiBleGFjdCBzb3VyY2UgcmFuZ2UuXG4gICAqL1xuICBoYXNSYW5nZShub2RlLCBwYXRoLCByb2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXgucmVjb3JkRm9yKG5vZGUsIHBhdGgpLnJhbmdlc1tyb2xlXSAhPT0gdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIHRleHQgbWFwcGVkIHRvIGEgc2VtYW50aWMgbm9kZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBHZW5lcmF0ZWQgdGV4dC5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFubm90YXRpb24gLSBNYXBwaW5nIGFubm90YXRpb24uXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNOb2RlfSBhbm5vdGF0aW9uLm5vZGUgLSBTZW1hbnRpYyBub2RlLlxuICAgKiBAcGFyYW0ge1wiZXhhY3RcIiB8IFwiYW5jaG9yXCJ9IGFubm90YXRpb24ubWFwcGluZ0tpbmQgLSBNYXBwaW5nIHByZWNpc2lvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthbm5vdGF0aW9uLnJvbGVdIC0gU2VtYW50aWMgdG9rZW4gcm9sZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthbm5vdGF0aW9uLm5hbWVdIC0gU291cmNlIE1hcCBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Fubm90YXRpb24ucGF0aF0gLSBKU09OIFBvaW50ZXIgZm9yIGEgc2hhcmVkIG5vZGUgb2NjdXJyZW5jZS5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBtYXBwZWQodGV4dCwge21hcHBpbmdLaW5kLCBuYW1lLCBub2RlLCBwYXRoLCByb2xlfSkge1xuICAgIGlmICh0ZXh0Lmxlbmd0aCA9PSAwKSByZXR1cm5cblxuICAgIGNvbnN0IHJlY29yZCA9IHRoaXMuaW5kZXgucmVjb3JkRm9yKG5vZGUsIHBhdGgpXG4gICAgY29uc3Qgcm9sZUxvY2F0aW9uID0gcm9sZSA/IHJlY29yZC5yYW5nZXNbcm9sZV0gOiB1bmRlZmluZWRcbiAgICBjb25zdCBvcmlnaW4gPSByb2xlTG9jYXRpb24gPyB0aGlzLiNzb3VyY2VPcmlnaW4ocm9sZUxvY2F0aW9uLCByZWNvcmQub3JpZ2luKSA6IHJlY29yZC5vcmlnaW5cbiAgICBjb25zdCBwcmVjaXNpb24gPSBtYXBwaW5nS2luZCA9PSBcImV4YWN0XCIgJiYgcm9sZSAmJiAhcm9sZUxvY2F0aW9uID8gXCJhbmNob3JcIiA6IG1hcHBpbmdLaW5kXG4gICAgY29uc3Qgc3ltYm9sID0gcmVjb3JkLnN5bWJvbElkXG4gICAgICA/IHRoaXMuaW5kZXgucHJvdmVuYW5jZS5zeW1ib2xzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmlkID09IHJlY29yZC5zeW1ib2xJZClcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICB0aGlzLiNhcHBlbmQodGV4dCwge1xuICAgICAgbWFwcGluZ0tpbmQ6IHByZWNpc2lvbixcbiAgICAgIG5hbWU6IG5hbWUgPz8gc3ltYm9sPy5uYW1lLFxuICAgICAgbm9kZUlkOiByZWNvcmQuaWQsXG4gICAgICBvcmlnaW4sXG4gICAgICByb2xlLFxuICAgICAgc3ltYm9sSWQ6IHJlY29yZC5zeW1ib2xJZFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIHNvdXJjZS1mcmVlIHNjYWZmb2xkaW5nIHdpdGggb3B0aW9uYWwgc2VtYW50aWMgY29udGV4dC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBHZW5lcmF0ZWQgdGV4dC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiAtIFN0YWJsZSByZWFzb24uXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNOb2RlW119IFtyZWxhdGVkTm9kZXNdIC0gUmVsYXRlZCBub2Rlcy5cbiAgICogQHBhcmFtIHsoc3RyaW5nIHwgdW5kZWZpbmVkKVtdfSBbcmVsYXRlZFBhdGhzXSAtIE9jY3VycmVuY2UgcGF0aHMgZm9yIHNoYXJlZCByZWxhdGVkIG5vZGVzLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN5bnRoZXRpYyh0ZXh0LCByZWFzb24sIHJlbGF0ZWROb2RlcyA9IFtdLCByZWxhdGVkUGF0aHMgPSBbXSkge1xuICAgIGlmICh0ZXh0Lmxlbmd0aCA9PSAwKSByZXR1cm5cblxuICAgIC8qKiBAdHlwZSB7U2V0PHN0cmluZz59ICovXG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQoKVxuICAgIGNvbnN0IHJlbGF0ZWRPcmlnaW5zID0gcmVsYXRlZE5vZGVzLmZsYXRNYXAoKG5vZGUsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCByZWNvcmQgPSB0aGlzLmluZGV4LnJlY29yZEZvcihub2RlLCByZWxhdGVkUGF0aHNbaW5kZXhdKVxuXG4gICAgICByZXR1cm4gcmVsYXRlZE9yaWdpbnNGb3IocmVjb3JkLm9yaWdpbikuZmxhdE1hcCgocmVsYXRlZCkgPT4ge1xuICAgICAgICBjb25zdCBjb250ZXh0dWFsID0ge1xuICAgICAgICAgIC4uLnJlbGF0ZWQsXG4gICAgICAgICAgbm9kZUlkOiByZWxhdGVkLm5vZGVJZCA/PyByZWNvcmQuaWQsXG4gICAgICAgICAgcm9sZTogcmVsYXRlZC5yb2xlID8/IFwiY29udGV4dFwiXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5ID0gcmVsYXRlZE9yaWdpbktleShjb250ZXh0dWFsKVxuXG4gICAgICAgIGlmIChzZWVuLmhhcyhrZXkpKSByZXR1cm4gW11cbiAgICAgICAgc2Vlbi5hZGQoa2V5KVxuXG4gICAgICAgIHJldHVybiBbY29udGV4dHVhbF1cbiAgICAgIH0pXG4gICAgfSlcblxuICAgIHRoaXMuI2FwcGVuZCh0ZXh0LCB7bWFwcGluZ0tpbmQ6IFwic3ludGhldGljXCIsIG9yaWdpbjoge2tpbmQ6IFwic3ludGhldGljXCIsIHJlYXNvbiwgcmVsYXRlZE9yaWdpbnN9fSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhdXRob3JpdGF0aXZlIHJpY2ggbWFwIGZvciB0aGUgY3VycmVudCBjb250ZW50LlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWZvbGRNYXBwaW5nfSBNYXBwaW5nLlxuICAgKi9cbiAgZmluaXNoKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb29yZGluYXRlU3lzdGVtOiBcInV0ZjE2XCIsXG4gICAgICBnZW5lcmF0ZWQ6IHtjb250ZW50OiB0aGlzLmNvZGUsIGZpbGVuYW1lOiB0aGlzLmZpbGVuYW1lLCBsYW5ndWFnZTogdGhpcy5sYW5ndWFnZX0sXG4gICAgICBub2RlczogWy4uLnRoaXMuaW5kZXgucHJvdmVuYW5jZS5ub2Rlc10sXG4gICAgICBzY2hlbWE6IFwiU2VtYW50aWZvbGRNYXBwaW5nXCIsXG4gICAgICBzb3VyY2VzOiBbLi4udGhpcy5pbmRleC5wcm92ZW5hbmNlLnNvdXJjZXNdLFxuICAgICAgc3BhbnM6IFsuLi50aGlzLnNwYW5zXSxcbiAgICAgIHN5bWJvbHM6IFsuLi50aGlzLmluZGV4LnByb3ZlbmFuY2Uuc3ltYm9sc10sXG4gICAgICB2ZXJzaW9uOiAxXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGVuZHMgb25lIG1hcHBlZCBzcGFuLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIEdlbmVyYXRlZCB0ZXh0LlxuICAgKiBAcGFyYW0ge09taXQ8aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWZvbGRNYXBwaW5nU3BhbiwgXCJnZW5lcmF0ZWRcIj59IGFubm90YXRpb24gLSBTcGFuIGFubm90YXRpb24uXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgI2FwcGVuZCh0ZXh0LCBhbm5vdGF0aW9uKSB7XG4gICAgaWYgKHRleHQuaW5jbHVkZXMoXCJcXHJcIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0ZWQgb3V0cHV0IG11c3QgdXNlIGRldGVybWluaXN0aWMgTEYgbGluZSBlbmRpbmdzLlwiKVxuXG4gICAgY29uc3Qgc3RhcnQgPSB7Y29sdW1uOiB0aGlzLmNvbHVtbiwgbGluZTogdGhpcy5saW5lLCBvZmZzZXQ6IHRoaXMub2Zmc2V0fVxuXG4gICAgdGhpcy5wYXJ0cy5wdXNoKHRleHQpXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRleHQubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLm9mZnNldCsrXG4gICAgICBpZiAodGV4dFtpbmRleF0gPT0gXCJcXG5cIikge1xuICAgICAgICB0aGlzLmxpbmUrK1xuICAgICAgICB0aGlzLmNvbHVtbiA9IDFcbiAgICAgIH0gZWxzZSB0aGlzLmNvbHVtbisrXG4gICAgfVxuICAgIGNvbnN0IGNvbXBhY3QgPSAvKiogQHR5cGUge09taXQ8aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWZvbGRNYXBwaW5nU3BhbiwgXCJnZW5lcmF0ZWRcIj59ICovIChcbiAgICAgIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhbm5vdGF0aW9uKS5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCkpXG4gICAgKVxuXG4gICAgdGhpcy5zcGFucy5wdXNoKHtcbiAgICAgIC4uLmNvbXBhY3QsXG4gICAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgICAgZW5kOiB7Y29sdW1uOiB0aGlzLmNvbHVtbiwgbGluZTogdGhpcy5saW5lLCBvZmZzZXQ6IHRoaXMub2Zmc2V0fSxcbiAgICAgICAgZmlsZW5hbWU6IHRoaXMuZmlsZW5hbWUsXG4gICAgICAgIHN0YXJ0XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZGlyZWN0IHJvbGUgb3JpZ2luIHVzaW5nIGNhbm9uaWNhbCBzb3VyY2UgaWRlbnRpdGllcy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBFeGFjdCByb2xlIHJhbmdlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljT3JpZ2lufSBmYWxsYmFjayAtIE93bmluZyBvcmlnaW4uXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY09yaWdpbn0gUm9sZSBvcmlnaW4uXG4gICAqL1xuICAjc291cmNlT3JpZ2luKGxvY2F0aW9uLCBmYWxsYmFjaykge1xuICAgIC8qKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfSAqL1xuICAgIGxldCBmYWxsYmFja1NvdXJjZUlkXG5cbiAgICBpZiAoZmFsbGJhY2sua2luZCA9PSBcInNvdXJjZVwiICYmIGZhbGxiYWNrLmxvY2F0aW9uLmZpbGVuYW1lID09IGxvY2F0aW9uLmZpbGVuYW1lKSBmYWxsYmFja1NvdXJjZUlkID0gZmFsbGJhY2suc291cmNlSWRcbiAgICBlbHNlIGlmIChmYWxsYmFjay5raW5kID09IFwiZGVyaXZlZFwiKSB7XG4gICAgICBmYWxsYmFja1NvdXJjZUlkID0gZmFsbGJhY2sub3JpZ2lucy5maW5kKChvcmlnaW4pID0+IG9yaWdpbi5sb2NhdGlvbi5maWxlbmFtZSA9PSBsb2NhdGlvbi5maWxlbmFtZSk/LnNvdXJjZUlkXG4gICAgfSBlbHNlIGlmIChmYWxsYmFjay5raW5kID09IFwic3ludGhldGljXCIpIHtcbiAgICAgIGZhbGxiYWNrU291cmNlSWQgPSBmYWxsYmFjay5yZWxhdGVkT3JpZ2lucy5maW5kKChvcmlnaW4pID0+IG9yaWdpbi5sb2NhdGlvbi5maWxlbmFtZSA9PSBsb2NhdGlvbi5maWxlbmFtZSk/LnNvdXJjZUlkXG4gICAgfVxuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuaW5kZXgucHJvdmVuYW5jZS5zb3VyY2VzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmlkID09IGZhbGxiYWNrU291cmNlSWQpID8/XG4gICAgICB0aGlzLmluZGV4LnByb3ZlbmFuY2Uuc291cmNlcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5maWxlbmFtZSA9PSBsb2NhdGlvbi5maWxlbmFtZSlcblxuICAgIHJldHVybiBzb3VyY2UgPyB7a2luZDogXCJzb3VyY2VcIiwgbG9jYXRpb24sIHNvdXJjZUlkOiBzb3VyY2UuaWR9IDogZmFsbGJhY2tcbiAgfVxufVxuXG4vKipcbiAqIEV4cGFuZHMgZXZlcnkgY2xvc2VkIHByb3ZlbmFuY2UgcmFuZ2UgaW4gc2VtYW50aWMgb3JkZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljT3JpZ2lufSBvcmlnaW4gLSBDbG9zZWQgcHJvdmVuYW5jZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWxhdGVkT3JpZ2luW119IFJlbGF0ZWQgcmFuZ2VzLlxuICovXG5mdW5jdGlvbiByZWxhdGVkT3JpZ2luc0ZvcihvcmlnaW4pIHtcbiAgaWYgKG9yaWdpbi5raW5kID09IFwic291cmNlXCIpIHJldHVybiBbe2xvY2F0aW9uOiBvcmlnaW4ubG9jYXRpb24sIHNvdXJjZUlkOiBvcmlnaW4uc291cmNlSWR9XVxuICBpZiAob3JpZ2luLmtpbmQgPT0gXCJkZXJpdmVkXCIpIHJldHVybiBvcmlnaW4ub3JpZ2luc1xuXG4gIHJldHVybiBvcmlnaW4ucmVsYXRlZE9yaWdpbnNcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBkZXRlcm1pbmlzdGljIGlkZW50aXR5IGZvciBvbmUgY29udGV4dHVhbCByZWxhdGVkIG9yaWdpbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVsYXRlZE9yaWdpbn0gb3JpZ2luIC0gUmVsYXRlZCBvcmlnaW4uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBTdGFibGUgaWRlbnRpdHkuXG4gKi9cbmZ1bmN0aW9uIHJlbGF0ZWRPcmlnaW5LZXkob3JpZ2luKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShbXG4gICAgb3JpZ2luLnNvdXJjZUlkLFxuICAgIG9yaWdpbi5sb2NhdGlvbi5maWxlbmFtZSxcbiAgICBvcmlnaW4ubG9jYXRpb24uc3RhcnQub2Zmc2V0LFxuICAgIG9yaWdpbi5sb2NhdGlvbi5lbmQub2Zmc2V0LFxuICAgIG9yaWdpbi5ub2RlSWQgPz8gbnVsbCxcbiAgICBvcmlnaW4uc3ltYm9sSWQgPz8gbnVsbCxcbiAgICBvcmlnaW4ucm9sZSA/PyBudWxsXG4gIF0pXG59XG4iXX0=
|
|
695
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmRzL3dyaXRlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sMkJBQTJCLENBQUE7QUFFL0Q7Ozs7R0FJRztBQUNILFNBQVMsbUJBQW1CLENBQUMsSUFBSTtJQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQ3ZCLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDdEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUV0QixPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDMUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQzNCLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQUUsU0FBUTtRQUNuRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxRQUFRO1lBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQ2pILEtBQUssTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEUsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFL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QyxDQUFDLFFBQVEsQ0FBQTtJQUM1RSxDQUFDO0NBQ0Y7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxNQUFNO0lBQy9CLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxRQUFRO1FBQUUsT0FBTyxDQUFDLEVBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUMsQ0FBQyxDQUFBO0lBQzVGLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxTQUFTO1FBQUUsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFBO0lBRW5ELE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQTtBQUM5QixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsTUFBTTtJQUM5QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDcEIsTUFBTSxDQUFDLFFBQVE7UUFDZixNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVE7UUFDeEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTTtRQUM1QixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNO1FBQzFCLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSTtRQUNyQixNQUFNLENBQUMsUUFBUSxJQUFJLElBQUk7UUFDdkIsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJO0tBQ3BCLENBQUMsQ0FBQTtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtjcmVhdGVHZW5lcmF0aW9uSW5kZXh9IGZyb20gXCIuLi9zZW1hbnRpYy9wcm92ZW5hbmNlLmpzXCJcblxuLyoqXG4gKiBDb2xsZWN0cyBldmVyeSBjYWxsZXItY29udHJvbGxlZCBiaW5kaW5nIHNwZWxsaW5nIGJlZm9yZSBzeW50aGV0aWMgbmFtZXMgYXJlIGNob3Nlbi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gcm9vdCAtIFNlbWFudGljIGdyYXBoLlxuICogQHJldHVybnMge1NldDxzdHJpbmc+fSBVc2VkIHNvdXJjZSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gY29sbGVjdEJpbmRpbmdOYW1lcyhyb290KSB7XG4gIGNvbnN0IG5hbWVzID0gbmV3IFNldCgpXG4gIGNvbnN0IHBlbmRpbmcgPSBbcm9vdF1cbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQoKVxuXG4gIHdoaWxlIChwZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBlbmRpbmcucG9wKClcbiAgICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiIHx8IHNlZW4uaGFzKHZhbHVlKSkgY29udGludWVcbiAgICBzZWVuLmFkZCh2YWx1ZSlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIHR5cGVvZiBSZWZsZWN0LmdldCh2YWx1ZSwgXCJuYW1lXCIpID09IFwic3RyaW5nXCIpIG5hbWVzLmFkZChSZWZsZWN0LmdldCh2YWx1ZSwgXCJuYW1lXCIpKVxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IE9iamVjdC52YWx1ZXModmFsdWUpKSB7XG4gICAgICBpZiAoY2hpbGQgJiYgdHlwZW9mIGNoaWxkID09IFwib2JqZWN0XCIpIHBlbmRpbmcucHVzaChjaGlsZClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5hbWVzXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBsb2dpY2FsIG1vZHVsZSBpZGVudGl0eSB0byBpdHMgY2Fub25pY2FsIHRhcmdldCB0eXBlIHNlZ21lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBMb2dpY2FsIG1vZHVsZSBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFBvcnRhYmxlIHRhcmdldCBjbGFzcy9tb2R1bGUgbmFtZS5cbiAqL1xuZnVuY3Rpb24gbW9kdWxlQ2xhc3NOYW1lKGlkKSB7XG4gIHJldHVybiBpZC5zcGxpdCgvWy5fLV0rL3UpLm1hcCgocGFydCkgPT4gYCR7cGFydFswXS50b1VwcGVyQ2FzZSgpfSR7cGFydC5zbGljZSgxKX1gKS5qb2luKFwiXCIpXG59XG5cbi8qKlxuICogTG9va3MgdXAgb25lIGRlY2xhcmF0aW9uIG5hbWUgaW4gaXRzIG93bmluZyBwcm9ncmFtIG1vZHVsZS5cbiAqIEBwYXJhbSB7UGFydGlhbDxpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb2dyYW1Nb2R1bGU+fSBtb2R1bGUgLSBPd25pbmcgbW9kdWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IGRlY2xhcmF0aW9uSWQgLSBTdGFibGUgZGVjbGFyYXRpb24gaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBEZWNsYXJhdGlvbiBuYW1lLlxuICovXG5mdW5jdGlvbiBkZWNsYXJhdGlvbk5hbWUobW9kdWxlLCBkZWNsYXJhdGlvbklkKSB7XG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gWy4uLm1vZHVsZS5mdW5jdGlvbnMgPz8gW10sIC4uLm1vZHVsZS5yZWNvcmRzID8/IFtdLCAuLi5tb2R1bGUuY2xhc3NlcyA/PyBbXSwgLi4ubW9kdWxlLmVycm9ycyA/PyBbXV1cbiAgICAuZmluZCgoe2lkfSkgPT4gaWQgPT0gZGVjbGFyYXRpb25JZClcblxuICBpZiAoIWRlY2xhcmF0aW9uKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVW5rbm93biBwcm9ncmFtIGRlY2xhcmF0aW9uICcke2RlY2xhcmF0aW9uSWR9Jy5gKVxuXG4gIHJldHVybiBkZWNsYXJhdGlvbi5uYW1lXG59XG5cbi8qKlxuICogQ2hvb3NlcyBhbiB1bnF1YWxpZmllZCB0YXJnZXQgYmluZGluZyB3aXRob3V0IHRyZWF0aW5nIGEgc291cmNlLXByb2ZpbGUgcXVhbGlmaWVyIGFzIHNlbWFudGljIGlkZW50aXR5LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb2dyYW19IHByb2dyYW0gLSBPd25pbmcgcHJvZ3JhbS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNQcm9ncmFtTW9kdWxlfSBtb2R1bGUgLSBJbXBvcnRpbmcgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0ltcG9ydH0gaW1wb3J0ZWQgLSBSZXNvbHZlZCBpbXBvcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUYXJnZXQtbG9jYWwgYmluZGluZyBzcGVsbGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2dyYW1JbXBvcnROYW1lKHByb2dyYW0sIG1vZHVsZSwgaW1wb3J0ZWQpIHtcbiAgY29uc3Qgc291cmNlID0gcHJvZ3JhbS5zb3VyY2VzLmZpbmQoKHtmaWxlbmFtZX0pID0+IGZpbGVuYW1lID09IG1vZHVsZS5zb3VyY2VGaWxlbmFtZSlcblxuICBpZiAoIXNvdXJjZSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFByb2dyYW0gbW9kdWxlICcke21vZHVsZS5pZH0nIGhhcyBubyByZWdpc3RlcmVkIHNvdXJjZS5gKVxuXG4gIHJldHVybiBzb3VyY2UubGFuZ3VhZ2UgPT0gXCJydWJ5XCIgfHwgc291cmNlLmxhbmd1YWdlID09IFwiamF2YVwiID8gaW1wb3J0ZWQuaW1wb3J0ZWROYW1lIDogaW1wb3J0ZWQubG9jYWxOYW1lXG59XG5cbi8qKiBTb3VyY2UtYXdhcmUgZGV0ZXJtaW5pc3RpYyBnZW5lcmF0ZWQtb3V0cHV0IGJ1aWxkZXIuICovXG5leHBvcnQgY2xhc3MgU291cmNlV3JpdGVyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzb3VyY2UtYXdhcmUgd3JpdGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIFdyaXRlciBvcHRpb25zLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5maWxlbmFtZSAtIE91dHB1dCBmaWxlbmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5HZW5lcmF0ZWRUZXh0TGFuZ3VhZ2V9IG9wdGlvbnMubGFuZ3VhZ2UgLSBPdXRwdXQgdGV4dCBsYW5ndWFnZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gb3B0aW9ucy5tb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNQcm9ncmFtfSBbb3B0aW9ucy5wcm9ncmFtXSAtIE93bmluZyBtdWx0aS1maWxlIHByb2dyYW0uXG4gICAqIEBwYXJhbSB7TWFwPHN0cmluZywgc3RyaW5nPn0gW29wdGlvbnMucHJvZ3JhbVBhdGhzXSAtIFBsYW5uZWQgYXJ0aWZhY3QgcGF0aCBieSBtb2R1bGUgaWRlbnRpdHkuXG4gICAqIEBwYXJhbSB7e2ZpbGVuYW1lOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgbGFuZ3VhZ2U/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfVtdfSBbb3B0aW9ucy5zb3VyY2VzXSAtIENhbGxlci1wcm92aWRlZCBzb3VyY2VzLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IFtvcHRpb25zLnN0ZGxpYlByb3ZpZGVyRW50cmllc10gLSBVc2VkIG9wZXJhdGlvbiB0byBwcm90ZWN0ZWQgbmF0aXZlIGVudHJ5IGZvciBhIGxpbmtlZCBzdGRsaWIgcHJvdmlkZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zdGRsaWJQcm92aWRlclBhdGhdIC0gUGxhbm5lZCBzdGRsaWIgcHJvdmlkZXIgYXJ0aWZhY3QgcGF0aC5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW29wdGlvbnMuc3RkbGliUHJvdmlkZXJQYXRoc10gLSBQbGFubmVkIHN0ZGxpYiBwcm92aWRlciBhcnRpZmFjdCBwYXRocy5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW29wdGlvbnMuc3RkbGliUHJvdmlkZXJJbXBvcnRzXSAtIE9yZGVyZWQgcHJvdmlkZXIgbmFtZXMgdGhpcyBtb2R1bGUgbXVzdCBpbXBvcnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zdGRsaWJQcm92aWRlck93bmVyTW9kdWxlXSAtIEphdmEgb3duZXIgbW9kdWxlIGlkZW50aXR5IGhvc3RpbmcgdGhlIHNoYXJlZCBzdXBwb3J0IGJsb2NrIGFuZCBzaGltcy5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW29wdGlvbnMuc3RkbGliUHJvdmlkZXJTaGltc10gLSBKYXZhIG93bmVyIHByb2dyYW0td2lkZSB1c2VkIG9wZXJhdGlvbnMgZXhwb3NlZCBhcyBwdWJsaWMgc3RhdGljIHNoaW1zLlxuICAgKiBAcGFyYW0geyhleHByZXNzaW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DYWxsRXhwcmVzc2lvbikgPT4gc3RyaW5nfSBbb3B0aW9ucy5jYWxsTmFtZVJlc29sdmVyXSAtIFRhcmdldC1jb250YWluZXIgY2FsbCBzcGVsbGluZyBvdmVycmlkZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNhbGxBcmd1bWVudFN1ZmZpeF0gLSBTeW50aGV0aWMgdHJhaWxpbmcgYXJndW1lbnQgZm9yIGV2ZXJ5IHNlbWFudGljIGZ1bmN0aW9uIGNhbGwuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubWV0aG9kU3RyaW5nRXF1YWxpdHldIC0gRW1pdCBzdHJpbmcgZXF1YWxpdHkgdGhyb3VnaCB0aGUgcGxhdGZvcm0gU3RyaW5nIG1ldGhvZC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjYWxsQXJndW1lbnRTdWZmaXgsIGNhbGxOYW1lUmVzb2x2ZXIsIGZpbGVuYW1lLCBsYW5ndWFnZSwgbWV0aG9kU3RyaW5nRXF1YWxpdHksIG1vZHVsZSwgcHJvZ3JhbSwgcHJvZ3JhbVBhdGhzLCBzb3VyY2VzLFxuICAgIHN0ZGxpYlByb3ZpZGVyRW50cmllcywgc3RkbGliUHJvdmlkZXJQYXRoLCBzdGRsaWJQcm92aWRlclBhdGhzLCBzdGRsaWJQcm92aWRlckltcG9ydHMsIHN0ZGxpYlByb3ZpZGVyT3duZXJNb2R1bGUsXG4gICAgc3RkbGliUHJvdmlkZXJTaGltc30pIHtcbiAgICBjb25zdCBpbmRleCA9IGNyZWF0ZUdlbmVyYXRpb25JbmRleChtb2R1bGUsIHNvdXJjZXMpXG5cbiAgICB0aGlzLmZpbGVuYW1lID0gZmlsZW5hbWVcbiAgICB0aGlzLmxhbmd1YWdlID0gbGFuZ3VhZ2VcbiAgICB0aGlzLm1vZHVsZSA9IG1vZHVsZVxuICAgIHRoaXMucHJvZ3JhbSA9IHByb2dyYW1cbiAgICB0aGlzLnByb2dyYW1QYXRocyA9IHByb2dyYW1QYXRoc1xuICAgIHRoaXMuY2FsbEFyZ3VtZW50U3VmZml4ID0gY2FsbEFyZ3VtZW50U3VmZml4XG4gICAgdGhpcy5jYWxsTmFtZVJlc29sdmVyID0gY2FsbE5hbWVSZXNvbHZlclxuICAgIHRoaXMubWV0aG9kU3RyaW5nRXF1YWxpdHkgPSBtZXRob2RTdHJpbmdFcXVhbGl0eSA/PyBmYWxzZVxuICAgIHRoaXMuaW5kZXggPSBpbmRleFxuICAgIHRoaXMuc3RkbGliUHJvdmlkZXJFbnRyaWVzID0gc3RkbGliUHJvdmlkZXJFbnRyaWVzXG4gICAgdGhpcy5zdGRsaWJQcm92aWRlclBhdGggPSBzdGRsaWJQcm92aWRlclBhdGhcbiAgICB0aGlzLnN0ZGxpYlByb3ZpZGVyUGF0aHMgPSBzdGRsaWJQcm92aWRlclBhdGhzID8/IChzdGRsaWJQcm92aWRlclBhdGggPyBbc3RkbGliUHJvdmlkZXJQYXRoXSA6IHVuZGVmaW5lZClcbiAgICB0aGlzLnN0ZGxpYlByb3ZpZGVySW1wb3J0cyA9IHN0ZGxpYlByb3ZpZGVySW1wb3J0c1xuICAgIHRoaXMuc3RkbGliUHJvdmlkZXJPd25lck1vZHVsZSA9IHN0ZGxpYlByb3ZpZGVyT3duZXJNb2R1bGVcbiAgICB0aGlzLnN0ZGxpYlByb3ZpZGVyU2hpbXMgPSBzdGRsaWJQcm92aWRlclNoaW1zXG4gICAgY29uc3QgcHJvZ3JhbVJlY29yZHMgPSBwcm9ncmFtPy5tb2R1bGVzLmZsYXRNYXAoKHByb2dyYW1Nb2R1bGUpID0+IHByb2dyYW1Nb2R1bGUucmVjb3JkcyA/PyBbXSkgPz8gbW9kdWxlLnJlY29yZHMgPz8gW11cbiAgICBjb25zdCBwcm9ncmFtQ2xhc3NlcyA9IHByb2dyYW0/Lm1vZHVsZXMuZmxhdE1hcCgocHJvZ3JhbU1vZHVsZSkgPT4gcHJvZ3JhbU1vZHVsZS5jbGFzc2VzID8/IFtdKSA/PyBtb2R1bGUuY2xhc3NlcyA/PyBbXVxuICAgIGNvbnN0IGNhcGFiaWxpdHlGYWlsdXJlcyA9IG1vZHVsZS5jYXBhYmlsaXRpZXM/LmZsYXRNYXAoKHtmYWlsdXJlc30pID0+IGZhaWx1cmVzKSA/PyBbXVxuICAgIGNvbnN0IHByb2dyYW1FcnJvcnMgPSBwcm9ncmFtPy5tb2R1bGVzLmZsYXRNYXAoKHByb2dyYW1Nb2R1bGUpID0+IFtcbiAgICAgIC4uLihwcm9ncmFtTW9kdWxlLmVycm9ycyA/PyBbXSksXG4gICAgICAuLi4ocHJvZ3JhbU1vZHVsZS5jYXBhYmlsaXRpZXM/LmZsYXRNYXAoKHtmYWlsdXJlc30pID0+IGZhaWx1cmVzKSA/PyBbXSlcbiAgICBdKSA/PyBbLi4ubW9kdWxlLmVycm9ycyA/PyBbXSwgLi4uY2FwYWJpbGl0eUZhaWx1cmVzXVxuICAgIGNvbnN0IHByb2dyYW1GdW5jdGlvbnMgPSBwcm9ncmFtPy5tb2R1bGVzLmZsYXRNYXAoKHByb2dyYW1Nb2R1bGUpID0+IHByb2dyYW1Nb2R1bGUuZnVuY3Rpb25zKSA/PyBtb2R1bGUuZnVuY3Rpb25zXG5cbiAgICB0aGlzLnJlY29yZHMgPSBuZXcgTWFwKHByb2dyYW1SZWNvcmRzLm1hcCgocmVjb3JkKSA9PiBbcmVjb3JkLmlkLCByZWNvcmRdKSlcbiAgICB0aGlzLmNsYXNzZXMgPSBuZXcgTWFwKHByb2dyYW1DbGFzc2VzLm1hcCgoZGVjbGFyYXRpb24pID0+IFtkZWNsYXJhdGlvbi5pZCwgZGVjbGFyYXRpb25dKSlcbiAgICB0aGlzLmVycm9ycyA9IG5ldyBNYXAocHJvZ3JhbUVycm9ycy5tYXAoKGVycm9yKSA9PiBbZXJyb3IuaWQsIGVycm9yXSkpXG4gICAgdGhpcy5yZXNvdXJjZXMgPSBuZXcgTWFwKChtb2R1bGUuY2FwYWJpbGl0aWVzPy5mbGF0TWFwKCh7cmVzb3VyY2VzfSkgPT4gcmVzb3VyY2VzKSA/PyBbXSkubWFwKChyZXNvdXJjZSkgPT4gW3Jlc291cmNlLmlkLCByZXNvdXJjZV0pKVxuICAgIHRoaXMuZWZmZWN0T3BlcmF0aW9ucyA9IG5ldyBNYXAoKG1vZHVsZS5jYXBhYmlsaXRpZXM/LmZsYXRNYXAoKHtvcGVyYXRpb25zfSkgPT4gb3BlcmF0aW9ucykgPz8gW10pLm1hcCgob3BlcmF0aW9uKSA9PiBbb3BlcmF0aW9uLmlkLCBvcGVyYXRpb25dKSlcbiAgICB0aGlzLmVmZmVjdE9wZXJhdGlvbk1vZHVsZXMgPSBuZXcgTWFwKChtb2R1bGUuY2FwYWJpbGl0aWVzPy5mbGF0TWFwKChjYXBhYmlsaXR5KSA9PlxuICAgICAgY2FwYWJpbGl0eS5vcGVyYXRpb25zLm1hcCgob3BlcmF0aW9uKSA9PiBbb3BlcmF0aW9uLmlkLCBjYXBhYmlsaXR5LmF1dGhvcml0eUlkXSkpID8/IFtdKSlcbiAgICB0aGlzLmZpZWxkcyA9IG5ldyBNYXAocHJvZ3JhbVJlY29yZHMuZmxhdE1hcCgocmVjb3JkKSA9PiByZWNvcmQuZmllbGRzLm1hcCgoZmllbGQpID0+IFtmaWVsZC5pZCwgZmllbGRdKSkpXG4gICAgdGhpcy5maWVsZFJlY29yZHMgPSBuZXcgTWFwKHByb2dyYW1SZWNvcmRzLmZsYXRNYXAoKHJlY29yZCkgPT4gcmVjb3JkLmZpZWxkcy5tYXAoKGZpZWxkKSA9PiBbZmllbGQuaWQsIHJlY29yZF0pKSlcbiAgICB0aGlzLnByaXZhdGVGaWVsZHMgPSBuZXcgTWFwKHByb2dyYW1DbGFzc2VzLmZsYXRNYXAoKGRlY2xhcmF0aW9uKSA9PiBkZWNsYXJhdGlvbi5maWVsZHMubWFwKChmaWVsZCkgPT4gW2ZpZWxkLmlkLCBmaWVsZF0pKSlcbiAgICB0aGlzLm1ldGhvZHMgPSBuZXcgTWFwKHByb2dyYW1DbGFzc2VzLmZsYXRNYXAoKGRlY2xhcmF0aW9uKSA9PiBkZWNsYXJhdGlvbi5tZXRob2RzLm1hcCgobWV0aG9kKSA9PiBbbWV0aG9kLmlkLCBtZXRob2RdKSkpXG4gICAgdGhpcy50eXBlUGFyYW1ldGVycyA9IG5ldyBNYXAoWy4uLnByb2dyYW1SZWNvcmRzLCAuLi5wcm9ncmFtRnVuY3Rpb25zXS5mbGF0TWFwKChkZWNsYXJhdGlvbikgPT5cbiAgICAgIChkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIuaWQsIHBhcmFtZXRlcl0pKSlcbiAgICB0aGlzLnJlZmVyZW5jZUNsYXNzRW1pc3Npb25EZXB0aCA9IDBcbiAgICAvKiogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljUHJvZ3JhbU1vZHVsZT59ICovXG4gICAgdGhpcy5kZWNsYXJhdGlvbk1vZHVsZXMgPSBuZXcgTWFwKHByb2dyYW0/Lm1vZHVsZXMuZmxhdE1hcCgocHJvZ3JhbU1vZHVsZSkgPT4gW1xuICAgICAgLi4uKHByb2dyYW1Nb2R1bGUucmVjb3JkcyA/PyBbXSkubWFwKChkZWNsYXJhdGlvbikgPT4gLyoqIEB0eXBlIHtjb25zdH0gKi8gKFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgcHJvZ3JhbU1vZHVsZV0pKSxcbiAgICAgIC4uLihwcm9ncmFtTW9kdWxlLmNsYXNzZXMgPz8gW10pLm1hcCgoZGVjbGFyYXRpb24pID0+IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIHByb2dyYW1Nb2R1bGVdKSksXG4gICAgICAuLi4ocHJvZ3JhbU1vZHVsZS5lcnJvcnMgPz8gW10pLm1hcCgoZGVjbGFyYXRpb24pID0+IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIHByb2dyYW1Nb2R1bGVdKSksXG4gICAgICAuLi5wcm9ncmFtTW9kdWxlLmZ1bmN0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PiAvKiogQHR5cGUge2NvbnN0fSAqLyAoWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBwcm9ncmFtTW9kdWxlXSkpXG4gICAgXSkgPz8gW10pXG4gICAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgICB0aGlzLnBhcnRzID0gW11cbiAgICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGlmb2xkTWFwcGluZ1NwYW5bXX0gKi9cbiAgICB0aGlzLnNwYW5zID0gW11cbiAgICB0aGlzLm9mZnNldCA9IDBcbiAgICB0aGlzLmxpbmUgPSAxXG4gICAgdGhpcy5jb2x1bW4gPSAxXG4gICAgLyoqIEB0eXBlIHtNYXA8aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbiwgc3RyaW5nPn0gKi9cbiAgICB0aGlzLmVmZmVjdFRlbXBvcmFyeU5hbWVzID0gbmV3IE1hcCgpXG4gICAgLyoqIEB0eXBlIHtNYXA8aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbiwgc3RyaW5nPn0gKi9cbiAgICB0aGlzLmVmZmVjdFJlcGxhY2VtZW50TmFtZXMgPSBuZXcgTWFwKClcbiAgICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb24gfCB1bmRlZmluZWR9ICovXG4gICAgdGhpcy5lZmZlY3REZWZpbml0aW9uID0gdW5kZWZpbmVkXG4gICAgdGhpcy51c2VkQmluZGluZ05hbWVzID0gY29sbGVjdEJpbmRpbmdOYW1lcyhtb2R1bGUpXG4gIH1cblxuICAvKipcbiAgICogSW5zdGFsbHMgdGhlIGVmZmVjdCBleHByZXNzaW9ucyBsb3dlcmVkIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgY3VycmVudCBzdGF0ZW1lbnQuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbltdfSBleHByZXNzaW9ucyAtIE9yZGVyZWQgZXhwcmVzc2lvbnMuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgcGxhbkVmZmVjdFJlcGxhY2VtZW50cyhleHByZXNzaW9ucykge1xuICAgIHRoaXMuZWZmZWN0UmVwbGFjZW1lbnROYW1lcyA9IG5ldyBNYXAoZXhwcmVzc2lvbnMubWFwKChleHByZXNzaW9uKSA9PiBbZXhwcmVzc2lvbiwgdGhpcy5lZmZlY3RUZW1wb3JhcnlOYW1lKGV4cHJlc3Npb24pXSkpXG4gIH1cblxuICAvKipcbiAgICogQWxsb2NhdGVzIGEgY29sbGlzaW9uLXNhZmUgbmFtZSBmb3Igb25lIGRldGVybWluaXN0aWMgZWZmZWN0IHNpdGUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIEVmZmVjdGZ1bCBleHByZXNzaW9uLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBTdGFibGUgdGVtcG9yYXJ5IG5hbWUuXG4gICAqL1xuICBlZmZlY3RUZW1wb3JhcnlOYW1lKGV4cHJlc3Npb24pIHtcbiAgICBjb25zdCBrbm93biA9IHRoaXMuZWZmZWN0VGVtcG9yYXJ5TmFtZXMuZ2V0KGV4cHJlc3Npb24pXG4gICAgaWYgKGtub3duKSByZXR1cm4ga25vd25cbiAgICBjb25zdCBzaXRlID0gdHlwZW9mIFJlZmxlY3QuZ2V0KGV4cHJlc3Npb24sIFwiZWZmZWN0U2l0ZUlkXCIpID09IFwic3RyaW5nXCJcbiAgICAgID8gUmVmbGVjdC5nZXQoZXhwcmVzc2lvbiwgXCJlZmZlY3RTaXRlSWRcIikuc2xpY2UoXCJlZmZlY3Q6XCIubGVuZ3RoKSA6IFN0cmluZyh0aGlzLmVmZmVjdFRlbXBvcmFyeU5hbWVzLnNpemUpXG4gICAgbGV0IG5hbWUgPSBgX19zZW1hbnRpZm9sZF9lZmZlY3RfJHtzaXRlfWBcblxuICAgIHdoaWxlICh0aGlzLnVzZWRCaW5kaW5nTmFtZXMuaGFzKG5hbWUpKSBuYW1lID0gYCR7bmFtZX1fYFxuICAgIHRoaXMudXNlZEJpbmRpbmdOYW1lcy5hZGQobmFtZSlcbiAgICB0aGlzLmVmZmVjdFRlbXBvcmFyeU5hbWVzLnNldChleHByZXNzaW9uLCBuYW1lKVxuICAgIHJldHVybiBuYW1lXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcGxhbm5lZCB0ZW1wb3JhcnkgcmVwbGFjZW1lbnQgb3V0c2lkZSBpdHMgb3duIGRlZmluaXRpb24uXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIENhbmRpZGF0ZSBleHByZXNzaW9uLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBUZW1wb3JhcnkgbmFtZS5cbiAgICovXG4gIGVmZmVjdFJlcGxhY2VtZW50TmFtZShleHByZXNzaW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuZWZmZWN0RGVmaW5pdGlvbiA9PT0gZXhwcmVzc2lvbiA/IHVuZGVmaW5lZCA6IHRoaXMuZWZmZWN0UmVwbGFjZW1lbnROYW1lcy5nZXQoZXhwcmVzc2lvbilcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyBvbmUgZWZmZWN0IGRlZmluaXRpb24gd2l0aG91dCByZWN1cnNpdmVseSByZXBsYWNpbmcgaXRzZWxmLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBEZWZpbmVkIGV4cHJlc3Npb24uXG4gICAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gZW1pdCAtIFRhcmdldCBleHByZXNzaW9uIGVtaXR0ZXIuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZW1pdEVmZmVjdERlZmluaXRpb24oZXhwcmVzc2lvbiwgZW1pdCkge1xuICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5lZmZlY3REZWZpbml0aW9uXG4gICAgdGhpcy5lZmZlY3REZWZpbml0aW9uID0gZXhwcmVzc2lvblxuICAgIHRyeSB7XG4gICAgICBlbWl0KClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5lZmZlY3REZWZpbml0aW9uID0gcHJldmlvdXNcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBnZW5lcmF0ZWQgY29udGVudCBzbyBmYXIuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IEdlbmVyYXRlZCBjb250ZW50LlxuICAgKi9cbiAgZ2V0IGNvZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydHMuam9pbihcIlwiKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgSlNPTiBQb2ludGVyIGZvciBvbmUgdW5hbWJpZ3VvdXMgc2VtYW50aWMgb2NjdXJyZW5jZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGV9IG5vZGUgLSBTZW1hbnRpYyBub2RlIG9jY3VycmVuY2UuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IEN1cnJlbnQgb2NjdXJyZW5jZSBwYXRoLlxuICAgKi9cbiAgb2NjdXJyZW5jZVBhdGgobm9kZSkge1xuICAgIHJldHVybiB0aGlzLmluZGV4LnJlY29yZEZvcihub2RlKS5wYXRoXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYSB2YWxpZGF0ZWQgbm9taW5hbCBkZWNsYXJhdGlvbiBpZGVudGl0eSBmb3IgdGFyZ2V0IGVtaXNzaW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGVjbGFyYXRpb25JZCAtIFNlbWFudGljIHJlY29yZCBpZGVudGl0eS5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9ufSBSZWNvcmQgZGVjbGFyYXRpb24uXG4gICAqL1xuICByZWNvcmRGb3JJZChkZWNsYXJhdGlvbklkKSB7XG4gICAgY29uc3QgcmVjb3JkID0gdGhpcy5yZWNvcmRzLmdldChkZWNsYXJhdGlvbklkKVxuXG4gICAgaWYgKCFyZWNvcmQpIHRocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIHZhbGlkYXRlZCByZWNvcmQgaWRlbnRpdHkgJyR7ZGVjbGFyYXRpb25JZH0nLmApXG5cbiAgICByZXR1cm4gcmVjb3JkXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGFyZ2V0IHNwZWxsaW5nIGZvciBhIG5vbWluYWwgcmVjb3JkIGlkZW50aXR5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGVjbGFyYXRpb25JZCAtIFN0YWJsZSByZWNvcmQgZGVjbGFyYXRpb24gaWRlbnRpdHkuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ZhbHVlUG9zaXRpb25dIC0gV2hldGhlciB0aGUgYmluZGluZyBtdXN0IGV4aXN0IGF0IHJ1bnRpbWUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRhcmdldCByZWNvcmQgc3BlbGxpbmcuXG4gICAqL1xuICByZWNvcmROYW1lRm9ySWQoZGVjbGFyYXRpb25JZCwgdmFsdWVQb3NpdGlvbiA9IGZhbHNlKSB7XG4gICAgY29uc3QgcmVjb3JkID0gdGhpcy5yZWNvcmRGb3JJZChkZWNsYXJhdGlvbklkKVxuICAgIGNvbnN0IG93bmVyID0gdGhpcy5kZWNsYXJhdGlvbk1vZHVsZXMuZ2V0KGRlY2xhcmF0aW9uSWQpXG4gICAgY29uc3QgaW1wb3J0ZWQgPSB0aGlzLiNwcm9ncmFtTW9kdWxlKCk/LmltcG9ydHMuZmluZCgoaXRlbSkgPT5cbiAgICAgIGl0ZW0uZGVjbGFyYXRpb25JZCA9PSBkZWNsYXJhdGlvbklkICYmICghdmFsdWVQb3NpdGlvbiB8fCAhaXRlbS50eXBlT25seSkpXG5cbiAgICBpZiAodGhpcy5wcm9ncmFtICYmIG93bmVyICYmIG93bmVyLmlkICE9IFJlZmxlY3QuZ2V0KHRoaXMubW9kdWxlLCBcImlkXCIpICYmIHRoaXMubGFuZ3VhZ2UgPT0gXCJydWJ5XCIpIHtcbiAgICAgIHJldHVybiBgJHttb2R1bGVDbGFzc05hbWUob3duZXIuaWQpfTo6JHtyZWNvcmQubmFtZX1gXG4gICAgfVxuICAgIGlmIChpbXBvcnRlZCAmJiAodGhpcy5sYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCB0aGlzLmxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiIHx8IHRoaXMubGFuZ3VhZ2UgPT0gXCJwaHBcIikpIHtcbiAgICAgIHJldHVybiB0aGlzLmltcG9ydE5hbWVGb3IoaW1wb3J0ZWQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY29yZC5uYW1lXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgb25lIHZhbGlkYXRlZCByZWZlcmVuY2UgY2xhc3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkZWNsYXJhdGlvbklkIC0gU3RhYmxlIGNsYXNzIGlkZW50aXR5LlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gQ2xhc3MgZGVjbGFyYXRpb24uXG4gICAqL1xuICBjbGFzc0ZvcklkKGRlY2xhcmF0aW9uSWQpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMuY2xhc3Nlcy5nZXQoZGVjbGFyYXRpb25JZClcblxuICAgIGlmICghZGVjbGFyYXRpb24pIHRocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIHZhbGlkYXRlZCByZWZlcmVuY2UgY2xhc3MgaWRlbnRpdHkgJyR7ZGVjbGFyYXRpb25JZH0nLmApXG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb25cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0YXJnZXQgc3BlbGxpbmcgb2Ygb25lIHJlZmVyZW5jZSBjbGFzcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRlY2xhcmF0aW9uSWQgLSBTdGFibGUgY2xhc3MgaWRlbnRpdHkuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRhcmdldCBzcGVsbGluZy5cbiAgICovXG4gIGNsYXNzTmFtZUZvcklkKGRlY2xhcmF0aW9uSWQpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMuY2xhc3NGb3JJZChkZWNsYXJhdGlvbklkKVxuICAgIGNvbnN0IGltcG9ydGVkID0gdGhpcy4jcHJvZ3JhbU1vZHVsZSgpPy5pbXBvcnRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZGVjbGFyYXRpb25JZCA9PSBkZWNsYXJhdGlvbklkKVxuXG4gICAgaWYgKGltcG9ydGVkICYmICh0aGlzLmxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IHRoaXMubGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgfHwgdGhpcy5sYW5ndWFnZSA9PSBcInBocFwiKSkge1xuICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0TmFtZUZvcihpbXBvcnRlZClcbiAgICB9XG4gICAgcmV0dXJuIGRlY2xhcmF0aW9uLm5hbWVcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBvbmUgdmFsaWRhdGVkIG93bmVkLXJlc291cmNlIGRlY2xhcmF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVzb3VyY2VJZCAtIFN0YWJsZSByZXNvdXJjZSBpZGVudGl0eS5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb259IFJlc291cmNlIGRlY2xhcmF0aW9uLlxuICAgKi9cbiAgcmVzb3VyY2VGb3JJZChyZXNvdXJjZUlkKSB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlcy5nZXQocmVzb3VyY2VJZClcbiAgICBpZiAoIXJlc291cmNlKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVW5rbm93biB2YWxpZGF0ZWQgcmVzb3VyY2UgaWRlbnRpdHkgJyR7cmVzb3VyY2VJZH0nLmApXG4gICAgcmV0dXJuIHJlc291cmNlXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgb25lIHZhbGlkYXRlZCBjYXBhYmlsaXR5IG9wZXJhdGlvbiBkZWNsYXJhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wZXJhdGlvbklkIC0gU3RhYmxlIG9wZXJhdGlvbiBpZGVudGl0eS5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdE9wZXJhdGlvbkRlY2xhcmF0aW9ufSBPcGVyYXRpb24gZGVjbGFyYXRpb24uXG4gICAqL1xuICBlZmZlY3RPcGVyYXRpb25Gb3JJZChvcGVyYXRpb25JZCkge1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHRoaXMuZWZmZWN0T3BlcmF0aW9ucy5nZXQob3BlcmF0aW9uSWQpXG4gICAgaWYgKCFvcGVyYXRpb24pIHRocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIHZhbGlkYXRlZCBlZmZlY3Qgb3BlcmF0aW9uIGlkZW50aXR5ICcke29wZXJhdGlvbklkfScuYClcbiAgICByZXR1cm4gb3BlcmF0aW9uXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgb25lIHZhbGlkYXRlZCBwcml2YXRlIGZpZWxkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGRJZCAtIFN0YWJsZSBwcml2YXRlLWZpZWxkIGlkZW50aXR5LlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUHJpdmF0ZUZpZWxkfSBGaWVsZCBkZWNsYXJhdGlvbi5cbiAgICovXG4gIHByaXZhdGVGaWVsZEZvcklkKGZpZWxkSWQpIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucHJpdmF0ZUZpZWxkcy5nZXQoZmllbGRJZClcblxuICAgIGlmICghZmllbGQpIHRocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIHZhbGlkYXRlZCBwcml2YXRlIGZpZWxkIGlkZW50aXR5ICcke2ZpZWxkSWR9Jy5gKVxuXG4gICAgcmV0dXJuIGZpZWxkXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgb25lIHZhbGlkYXRlZCByZWNlaXZlciBtZXRob2QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RJZCAtIFN0YWJsZSBtZXRob2QgaWRlbnRpdHkuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5NZXRob2REZWNsYXJhdGlvbn0gTWV0aG9kIGRlY2xhcmF0aW9uLlxuICAgKi9cbiAgbWV0aG9kRm9ySWQobWV0aG9kSWQpIHtcbiAgICBjb25zdCBtZXRob2QgPSB0aGlzLm1ldGhvZHMuZ2V0KG1ldGhvZElkKVxuXG4gICAgaWYgKCFtZXRob2QpIHRocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIHZhbGlkYXRlZCBtZXRob2QgaWRlbnRpdHkgJyR7bWV0aG9kSWR9Jy5gKVxuXG4gICAgcmV0dXJuIG1ldGhvZFxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIG9uZSB2YWxpZGF0ZWQgZGVjbGFyYXRpb24tc2NvcGVkIHR5cGUgcGFyYW1ldGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1ldGVySWQgLSBTdGFibGUgdHlwZS1wYXJhbWV0ZXIgaWRlbnRpdHkuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyfSBUeXBlIHBhcmFtZXRlci5cbiAgICovXG4gIHR5cGVQYXJhbWV0ZXJGb3JJZChwYXJhbWV0ZXJJZCkge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IHRoaXMudHlwZVBhcmFtZXRlcnMuZ2V0KHBhcmFtZXRlcklkKVxuXG4gICAgaWYgKCFwYXJhbWV0ZXIpIHRocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIHZhbGlkYXRlZCB0eXBlIHBhcmFtZXRlciBpZGVudGl0eSAnJHtwYXJhbWV0ZXJJZH0nLmApXG5cbiAgICByZXR1cm4gcGFyYW1ldGVyXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdmFsaWRhdGVkIG5vbWluYWwgZXJyb3IgZGVjbGFyYXRpb24gZm9yIGFuIGlkZW50aXR5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGVjbGFyYXRpb25JZCAtIFN0YWJsZSBlcnJvciBpZGVudGl0eS5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RGYWlsdXJlRGVjbGFyYXRpb259IEVycm9yIGRlY2xhcmF0aW9uLlxuICAgKi9cbiAgZXJyb3JGb3JJZChkZWNsYXJhdGlvbklkKSB7XG4gICAgY29uc3QgZXJyb3IgPSB0aGlzLmVycm9ycy5nZXQoZGVjbGFyYXRpb25JZClcblxuICAgIGlmICghZXJyb3IpIHRocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIHZhbGlkYXRlZCBlcnJvciBpZGVudGl0eSAnJHtkZWNsYXJhdGlvbklkfScuYClcblxuICAgIHJldHVybiBlcnJvclxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRhcmdldC12aXNpYmxlIHNwZWxsaW5nIGZvciBvbmUgbm9taW5hbCBlcnJvciBpZGVudGl0eS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRlY2xhcmF0aW9uSWQgLSBTdGFibGUgZXJyb3IgaWRlbnRpdHkuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRhcmdldC12aXNpYmxlIG5hbWUuXG4gICAqL1xuICBlcnJvck5hbWVGb3JJZChkZWNsYXJhdGlvbklkKSB7XG4gICAgY29uc3QgZXJyb3IgPSB0aGlzLmVycm9yRm9ySWQoZGVjbGFyYXRpb25JZClcbiAgICBjb25zdCBvd25lciA9IHRoaXMuZGVjbGFyYXRpb25Nb2R1bGVzLmdldChkZWNsYXJhdGlvbklkKVxuICAgIGNvbnN0IGltcG9ydGVkID0gdGhpcy4jcHJvZ3JhbU1vZHVsZSgpPy5pbXBvcnRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZGVjbGFyYXRpb25JZCA9PSBkZWNsYXJhdGlvbklkKVxuXG4gICAgaWYgKHRoaXMucHJvZ3JhbSAmJiBvd25lciAmJiBvd25lci5pZCAhPSBSZWZsZWN0LmdldCh0aGlzLm1vZHVsZSwgXCJpZFwiKSAmJiB0aGlzLmxhbmd1YWdlID09IFwicnVieVwiKSB7XG4gICAgICByZXR1cm4gYCR7bW9kdWxlQ2xhc3NOYW1lKG93bmVyLmlkKX06OiR7ZXJyb3IubmFtZX1gXG4gICAgfVxuICAgIGlmIChpbXBvcnRlZCAmJiAodGhpcy5sYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCB0aGlzLmxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiIHx8IHRoaXMubGFuZ3VhZ2UgPT0gXCJwaHBcIikpIHtcbiAgICAgIHJldHVybiB0aGlzLmltcG9ydE5hbWVGb3IoaW1wb3J0ZWQpXG4gICAgfVxuXG4gICAgcmV0dXJuIG93bmVyID8gZXJyb3IubmFtZSA6IHRoaXMuY2FwYWJpbGl0eU5vbWluYWxOYW1lKGVycm9yLm5hbWUpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGFyZ2V0IHNwZWxsaW5nIGZvciBhIG5vbWluYWwgbmFtZSBvd25lZCBieSBhIGNvbXBpbGVyLWF1dGhvcml6ZWQgY2FwYWJpbGl0eS5cbiAgICogUEhQIHByb2dyYW0gZW50cmllcyBsaXZlIGluIGEgZ2VuZXJhdGVkIG5hbWVzcGFjZSB3aGlsZSBzdGRsaWIgcHJvdmlkZXIgY2xhc3NlcyByZW1haW5cbiAgICogZ2xvYmFsLCBzbyBQSFAgcHJvZ3JhbSBtb2RlIGZ1bGx5IHF1YWxpZmllcyBjYXBhYmlsaXR5IG5hbWVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIERlY2xhcmVkIG5vbWluYWwgbmFtZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGFyZ2V0IHNwZWxsaW5nLlxuICAgKi9cbiAgY2FwYWJpbGl0eU5vbWluYWxOYW1lKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtICYmIHRoaXMubGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IGBcXFxcJHtuYW1lfWAgOiBuYW1lXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGFyZ2V0IHNwZWxsaW5nIGZvciBhIHJlc29sdmVkIGZ1bmN0aW9uIGNhbGwuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2FsbEV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBSZXNvbHZlZCBjYWxsLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUYXJnZXQgY2FsbCBuYW1lLlxuICAgKi9cbiAgY2FsbE5hbWVGb3IoZXhwcmVzc2lvbikge1xuICAgIGlmICh0aGlzLmNhbGxOYW1lUmVzb2x2ZXIpIHJldHVybiB0aGlzLmNhbGxOYW1lUmVzb2x2ZXIoZXhwcmVzc2lvbilcbiAgICBjb25zdCBkZWNsYXJhdGlvbklkID0gZXhwcmVzc2lvbi5yZXNvbHV0aW9uPy5kZWNsYXJhdGlvbklkXG4gICAgY29uc3Qgb3duZXIgPSBkZWNsYXJhdGlvbklkID8gdGhpcy5kZWNsYXJhdGlvbk1vZHVsZXMuZ2V0KGRlY2xhcmF0aW9uSWQpIDogdW5kZWZpbmVkXG4gICAgY29uc3QgaW1wb3J0ZWQgPSBkZWNsYXJhdGlvbklkID8gdGhpcy4jcHJvZ3JhbU1vZHVsZSgpPy5pbXBvcnRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZGVjbGFyYXRpb25JZCA9PSBkZWNsYXJhdGlvbklkKSA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKHRoaXMubGFuZ3VhZ2UgPT0gXCJqYXZhXCIgJiYgIXRoaXMucHJvZ3JhbSAmJiB0aGlzLnJlZmVyZW5jZUNsYXNzRW1pc3Npb25EZXB0aCA+IDApIHJldHVybiBgTWFpbi4ke2V4cHJlc3Npb24uY2FsbGVlfWBcbiAgICBpZiAoIWRlY2xhcmF0aW9uSWQgfHwgIXRoaXMucHJvZ3JhbSB8fCAhb3duZXIgfHwgb3duZXIuaWQgPT0gUmVmbGVjdC5nZXQodGhpcy5tb2R1bGUsIFwiaWRcIikpIHJldHVybiBleHByZXNzaW9uLmNhbGxlZVxuICAgIGlmICh0aGlzLmxhbmd1YWdlID09IFwicnVieVwiIHx8IHRoaXMubGFuZ3VhZ2UgPT0gXCJqYXZhXCIpIHJldHVybiBgJHttb2R1bGVDbGFzc05hbWUob3duZXIuaWQpfS4ke2RlY2xhcmF0aW9uTmFtZShvd25lciwgZGVjbGFyYXRpb25JZCl9YFxuICAgIGlmIChpbXBvcnRlZCkgcmV0dXJuIHRoaXMuaW1wb3J0TmFtZUZvcihpbXBvcnRlZClcblxuICAgIHJldHVybiBkZWNsYXJhdGlvbk5hbWUob3duZXIsIGRlY2xhcmF0aW9uSWQpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHRhcmdldC1jb250YWluZXIgdHJhaWxpbmcgYXJndW1lbnQgZm9yIGEgc2VtYW50aWMgY2FsbC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DYWxsRXhwcmVzc2lvbn0gX2V4cHJlc3Npb24gLSBSZXNvbHZlZCBzZW1hbnRpYyBjYWxsLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBTeW50aGV0aWMgYXJndW1lbnQgc3BlbGxpbmcsIHdoZW4gY29uZmlndXJlZC5cbiAgICovXG4gIGNhbGxBcmd1bWVudFN1ZmZpeEZvcihfZXhwcmVzc2lvbikge1xuICAgIHJldHVybiB0aGlzLmNhbGxBcmd1bWVudFN1ZmZpeFxuICB9XG5cbiAgLyoqXG4gICAqIFJlcG9ydHMgd2hldGhlciBzdHJpbmcgZXF1YWxpdHkgbXVzdCBhdm9pZCBhIHRhcmdldCBydW50aW1lIGhlbHBlci5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdG8gZW1pdCB0aGUgcGxhdGZvcm0gU3RyaW5nIG1ldGhvZC5cbiAgICovXG4gIHVzZXNNZXRob2RTdHJpbmdFcXVhbGl0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRob2RTdHJpbmdFcXVhbGl0eVxuICB9XG5cbiAgLyoqIE1hcmtzIGVtaXNzaW9uIGFzIG9jY3VycmluZyBpbnNpZGUgb25lIHRvcC1sZXZlbCByZWZlcmVuY2UgY2xhc3MuICovXG4gIGJlZ2luUmVmZXJlbmNlQ2xhc3NFbWlzc2lvbigpIHtcbiAgICB0aGlzLnJlZmVyZW5jZUNsYXNzRW1pc3Npb25EZXB0aCArPSAxXG4gIH1cblxuICAvKiogRW5kcyBvbmUgYmFsYW5jZWQgdG9wLWxldmVsIHJlZmVyZW5jZS1jbGFzcyBlbWlzc2lvbiBzY29wZS4gKi9cbiAgZW5kUmVmZXJlbmNlQ2xhc3NFbWlzc2lvbigpIHtcbiAgICBpZiAodGhpcy5yZWZlcmVuY2VDbGFzc0VtaXNzaW9uRGVwdGggPT0gMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJSZWZlcmVuY2UtY2xhc3MgZW1pc3Npb24gc2NvcGUgaXMgbm90IGFjdGl2ZS5cIilcbiAgICB0aGlzLnJlZmVyZW5jZUNsYXNzRW1pc3Npb25EZXB0aCAtPSAxXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGFyZ2V0LWxvY2FsIGJpbmRpbmcgZm9yIG9uZSByZXNvbHZlZCBpbXBvcnQuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNJbXBvcnR9IGltcG9ydGVkIC0gUmVzb2x2ZWQgaW1wb3J0LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBFbWl0dGVkIGltcG9ydCBuYW1lLlxuICAgKi9cbiAgaW1wb3J0TmFtZUZvcihpbXBvcnRlZCkge1xuICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMuI3Byb2dyYW1Nb2R1bGUoKVxuXG4gICAgaWYgKCF0aGlzLnByb2dyYW0gfHwgIW1vZHVsZSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbXBvcnQgbmFtZXMgcmVxdWlyZSBhIHZhbGlkYXRlZCBzZW1hbnRpYyBwcm9ncmFtLlwiKVxuXG4gICAgcmV0dXJuIHByb2dyYW1JbXBvcnROYW1lKHRoaXMucHJvZ3JhbSwgbW9kdWxlLCBpbXBvcnRlZClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBvcnRzIHdoZXRoZXIgb25lIGxvY2FsIGRlY2xhcmF0aW9uIGlzIGV4cG9ydGVkIGJ5IHRoZSBjdXJyZW50IHByb2dyYW0gbW9kdWxlLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gZGVjbGFyYXRpb25JZCAtIERlY2xhcmF0aW9uIGlkZW50aXR5LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBpdCBoYXMgYSBzYW1lLW5hbWUgcHJvZ3JhbSBleHBvcnQuXG4gICAqL1xuICBpc0RpcmVjdGx5RXhwb3J0ZWQoZGVjbGFyYXRpb25JZCkge1xuICAgIGNvbnN0IG1vZHVsZSA9IC8qKiBAdHlwZSB7UGFydGlhbDxpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb2dyYW1Nb2R1bGU+fSAqLyAodGhpcy5tb2R1bGUpXG5cbiAgICByZXR1cm4gdHlwZW9mIGRlY2xhcmF0aW9uSWQgPT0gXCJzdHJpbmdcIiAmJiBCb29sZWFuKG1vZHVsZS5leHBvcnRzPy5zb21lKChpdGVtKSA9PlxuICAgICAgaXRlbS5kZWNsYXJhdGlvbklkID09IGRlY2xhcmF0aW9uSWQgJiYgaXRlbS5leHBvcnRlZE5hbWUgPT0gZGVjbGFyYXRpb25OYW1lKG1vZHVsZSwgZGVjbGFyYXRpb25JZCkpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlcG9ydHMgd2hldGhlciBvbmUgZXhwb3J0IGVkZ2UgdXNlcyBpdHMgZGVjbGFyYXRpb24ncyBlbWl0dGVkIG5hbWUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNFeHBvcnR9IGV4cG9ydGVkIC0gQ3VycmVudCBleHBvcnQgZWRnZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBlZGdlIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBkZWNsYXJhdGlvbiBwcmVmaXguXG4gICAqL1xuICBpc0RpcmVjdEV4cG9ydChleHBvcnRlZCkge1xuICAgIHJldHVybiBleHBvcnRlZC5leHBvcnRlZE5hbWUgPT0gZGVjbGFyYXRpb25OYW1lKHRoaXMubW9kdWxlLCBleHBvcnRlZC5kZWNsYXJhdGlvbklkKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlcG9ydHMgd2hldGhlciBvbmUgbG9jYWwgZGVjbGFyYXRpb24gaGFzIGFueSBwdWJsaWMgcHJvZ3JhbSBleHBvcnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBkZWNsYXJhdGlvbklkIC0gRGVjbGFyYXRpb24gaWRlbnRpdHkuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBkZWNsYXJhdGlvbiBpcyBleHBvcnRlZC5cbiAgICovXG4gIGlzRXhwb3J0ZWQoZGVjbGFyYXRpb25JZCkge1xuICAgIGNvbnN0IG1vZHVsZSA9IC8qKiBAdHlwZSB7UGFydGlhbDxpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb2dyYW1Nb2R1bGU+fSAqLyAodGhpcy5tb2R1bGUpXG5cbiAgICByZXR1cm4gdHlwZW9mIGRlY2xhcmF0aW9uSWQgPT0gXCJzdHJpbmdcIiAmJiBCb29sZWFuKG1vZHVsZS5leHBvcnRzPy5zb21lKChpdGVtKSA9PiBpdGVtLmRlY2xhcmF0aW9uSWQgPT0gZGVjbGFyYXRpb25JZCkpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgaXMgdGhlIHNlbGVjdGVkIHByb2dyYW0gZW50cnkgbW9kdWxlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGlzIHdyaXRlciBvd25zIHRoZSBzZWxlY3RlZCBlbnRyeS5cbiAgICovXG4gIGlzUHJvZ3JhbUVudHJ5KCkge1xuICAgIHJldHVybiB0aGlzLnByb2dyYW0/LmVudHJ5TW9kdWxlID09IFJlZmxlY3QuZ2V0KHRoaXMubW9kdWxlLCBcImlkXCIpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY2Fub25pY2FsIGNsYXNzL21vZHVsZSBzZWdtZW50IGZvciBhIGxvZ2ljYWwgbW9kdWxlIGlkZW50aXR5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlSWQgLSBMb2dpY2FsIG1vZHVsZSBpZGVudGl0eS5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGFyZ2V0IGNsYXNzL21vZHVsZSBuYW1lLlxuICAgKi9cbiAgcHJvZ3JhbU1vZHVsZU5hbWUobW9kdWxlSWQpIHtcbiAgICBpZiAoIXRoaXMucHJvZ3JhbT8ubW9kdWxlcy5zb21lKCh7aWR9KSA9PiBpZCA9PSBtb2R1bGVJZCkpIHRocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIHByb2dyYW0gbW9kdWxlICcke21vZHVsZUlkfScuYClcblxuICAgIHJldHVybiBtb2R1bGVDbGFzc05hbWUobW9kdWxlSWQpXG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIGN1cnJlbnQgbW9kdWxlIGluIHRoZSBjb21wbGV0ZSBwcm9ncmFtLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNQcm9ncmFtTW9kdWxlIHwgdW5kZWZpbmVkfSBDdXJyZW50IHByb2dyYW0gbW9kdWxlLlxuICAgKi9cbiAgI3Byb2dyYW1Nb2R1bGUoKSB7XG4gICAgaWYgKCF0aGlzLnByb2dyYW0pIHJldHVybiB1bmRlZmluZWRcblxuICAgIHJldHVybiB0aGlzLnByb2dyYW0ubW9kdWxlcy5maW5kKCh7aWR9KSA9PiBpZCA9PSBSZWZsZWN0LmdldCh0aGlzLm1vZHVsZSwgXCJpZFwiKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVsYXRpdmUgRVNNL3JlcXVpcmUgc3BlY2lmaWVyIGZvciBhIHBsYW5uZWQgZGVwZW5kZW5jeSBhcnRpZmFjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZUlkIC0gRGVwZW5kZW5jeSBtb2R1bGUgaWRlbnRpdHkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0ZW5zaW9uXSAtIE9wdGlvbmFsIHJlcGxhY2VtZW50IGV4dGVuc2lvbi5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmVsYXRpdmUgUE9TSVggc3BlY2lmaWVyLlxuICAgKi9cbiAgcmVsYXRpdmVNb2R1bGVTcGVjaWZpZXIobW9kdWxlSWQsIGV4dGVuc2lvbikge1xuICAgIGNvbnN0IHRhcmdldFBhdGggPSB0aGlzLnByb2dyYW1QYXRocz8uZ2V0KG1vZHVsZUlkKVxuXG4gICAgaWYgKCF0YXJnZXRQYXRoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVW5rbm93biBwbGFubmVkIG1vZHVsZSBwYXRoICcke21vZHVsZUlkfScuYClcbiAgICBjb25zdCBhZGp1c3RlZFRhcmdldCA9IGV4dGVuc2lvbiA/IHRhcmdldFBhdGgucmVwbGFjZSgvXFwuW14uL10rJC91LCBleHRlbnNpb24pIDogdGFyZ2V0UGF0aFxuICAgIGNvbnN0IGZyb20gPSB0aGlzLmZpbGVuYW1lLnNwbGl0KFwiL1wiKS5zbGljZSgwLCAtMSlcbiAgICBjb25zdCB0byA9IGFkanVzdGVkVGFyZ2V0LnNwbGl0KFwiL1wiKVxuICAgIGxldCBjb21tb24gPSAwXG5cbiAgICB3aGlsZSAoY29tbW9uIDwgZnJvbS5sZW5ndGggJiYgY29tbW9uIDwgdG8ubGVuZ3RoICYmIGZyb21bY29tbW9uXSA9PSB0b1tjb21tb25dKSBjb21tb24rK1xuICAgIGNvbnN0IHJlbGF0aXZlID0gWy4uLmZyb20uc2xpY2UoY29tbW9uKS5tYXAoKCkgPT4gXCIuLlwiKSwgLi4udG8uc2xpY2UoY29tbW9uKV0uam9pbihcIi9cIilcblxuICAgIHJldHVybiByZWxhdGl2ZS5zdGFydHNXaXRoKFwiLlwiKSA/IHJlbGF0aXZlIDogYC4vJHtyZWxhdGl2ZX1gXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcHJvdGVjdGVkIG5hdGl2ZSBlbnRyeSBmb3Igb25lIHVzZWQgc3RkbGliIHByb3ZpZGVyIG9wZXJhdGlvbi5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RPcGVyYXRpb25EZWNsYXJhdGlvbn0gb3BlcmF0aW9uIC0gQ2Fub25pY2FsIG9wZXJhdGlvbiBkZWNsYXJhdGlvbi5cbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gTGlua2VkIHByb3RlY3RlZCBlbnRyeSwgb3IgdW5kZWZpbmVkIHdoZW4gdGhlIG9wZXJhdGlvbiBzdGF5cyBpbmxpbmVkLlxuICAgKi9cbiAgc3RkbGliUHJvdmlkZXJFbnRyeUZvcihvcGVyYXRpb24pIHtcbiAgICBjb25zdCBtb2R1bGUgPSB0aGlzLmVmZmVjdE9wZXJhdGlvbk1vZHVsZXMuZ2V0KG9wZXJhdGlvbi5pZClcblxuICAgIHJldHVybiBtb2R1bGUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHRoaXMuc3RkbGliUHJvdmlkZXJFbnRyaWVzPy5bYCR7bW9kdWxlfVxcdTAwMDAke29wZXJhdGlvbi5uYW1lfWBdXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHJlbGF0aXZlIHNwZWNpZmllciBmb3IgdGhlIHBsYW5uZWQgc3RkbGliIHByb3ZpZGVyIGFydGlmYWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4dGVuc2lvbl0gLSBPcHRpb25hbCByZXBsYWNlbWVudCBleHRlbnNpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcHJvdmlkZXJQYXRoXSAtIE9uZSBzZWxlY3RlZCBwcm92aWRlciBhcnRpZmFjdCBwYXRoLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZWxhdGl2ZSBQT1NJWCBzcGVjaWZpZXIuXG4gICAqL1xuICBzdGRsaWJQcm92aWRlclNwZWNpZmllcihleHRlbnNpb24sIHByb3ZpZGVyUGF0aCkge1xuICAgIGNvbnN0IHRhcmdldFBhdGggPSBwcm92aWRlclBhdGggPz8gdGhpcy5zdGRsaWJQcm92aWRlclBhdGggPz8gdGhpcy5zdGRsaWJQcm92aWRlclBhdGhzPy5bMF1cblxuICAgIGlmICghdGFyZ2V0UGF0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJBIHN0ZGxpYiBwcm92aWRlciBzcGVjaWZpZXIgcmVxdWlyZXMgYSBwbGFubmVkIHByb3ZpZGVyIHBhdGguXCIpXG4gICAgY29uc3QgYWRqdXN0ZWRUYXJnZXQgPSBleHRlbnNpb24gPyB0YXJnZXRQYXRoLnJlcGxhY2UoL1xcLlteLi9dKyQvdSwgZXh0ZW5zaW9uKSA6IHRhcmdldFBhdGhcbiAgICBjb25zdCBmcm9tID0gdGhpcy5maWxlbmFtZS5zcGxpdChcIi9cIikuc2xpY2UoMCwgLTEpXG4gICAgY29uc3QgdG8gPSBhZGp1c3RlZFRhcmdldC5zcGxpdChcIi9cIilcbiAgICBsZXQgY29tbW9uID0gMFxuXG4gICAgd2hpbGUgKGNvbW1vbiA8IGZyb20ubGVuZ3RoICYmIGNvbW1vbiA8IHRvLmxlbmd0aCAmJiBmcm9tW2NvbW1vbl0gPT0gdG9bY29tbW9uXSkgY29tbW9uKytcbiAgICBjb25zdCByZWxhdGl2ZSA9IFsuLi5mcm9tLnNsaWNlKGNvbW1vbikubWFwKCgpID0+IFwiLi5cIiksIC4uLnRvLnNsaWNlKGNvbW1vbildLmpvaW4oXCIvXCIpXG5cbiAgICByZXR1cm4gcmVsYXRpdmUuc3RhcnRzV2l0aChcIi5cIikgPyByZWxhdGl2ZSA6IGAuLyR7cmVsYXRpdmV9YFxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGEgdmFsaWRhdGVkIGZpZWxkIGlkZW50aXR5IGZvciB0YXJnZXQgZW1pc3Npb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZElkIC0gU2VtYW50aWMgZmllbGQgaWRlbnRpdHkuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmRGaWVsZH0gUmVjb3JkIGZpZWxkLlxuICAgKi9cbiAgZmllbGRGb3JJZChmaWVsZElkKSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5nZXQoZmllbGRJZClcblxuICAgIGlmICghZmllbGQpIHRocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIHZhbGlkYXRlZCBmaWVsZCBpZGVudGl0eSAnJHtmaWVsZElkfScuYClcblxuICAgIHJldHVybiBmaWVsZFxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSByZWNvcmQgZGVjbGFyYXRpb24gdGhhdCBvd25zIGEgdmFsaWRhdGVkIGZpZWxkIGlkZW50aXR5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGRJZCAtIFNlbWFudGljIGZpZWxkIGlkZW50aXR5LlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IE93bmluZyByZWNvcmQuXG4gICAqL1xuICByZWNvcmRGb3JGaWVsZElkKGZpZWxkSWQpIHtcbiAgICBjb25zdCByZWNvcmQgPSB0aGlzLmZpZWxkUmVjb3Jkcy5nZXQoZmllbGRJZClcblxuICAgIGlmICghcmVjb3JkKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVW5rbm93biB2YWxpZGF0ZWQgZmllbGQgaWRlbnRpdHkgJyR7ZmllbGRJZH0nLmApXG5cbiAgICByZXR1cm4gcmVjb3JkXG4gIH1cblxuICAvKipcbiAgICogUmVwb3J0cyB3aGV0aGVyIGFuIGV4YWN0IHBhcnNlci1vd25lZCByb2xlIHJhbmdlIGlzIGF2YWlsYWJsZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGV9IG5vZGUgLSBTZW1hbnRpYyBub2RlIG9jY3VycmVuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gSlNPTiBQb2ludGVyIGZvciBhIHNoYXJlZCBub2RlIG9jY3VycmVuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb2xlIC0gU2VtYW50aWMgdG9rZW4gcm9sZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHJvbGUgaGFzIGFuIGV4YWN0IHNvdXJjZSByYW5nZS5cbiAgICovXG4gIGhhc1JhbmdlKG5vZGUsIHBhdGgsIHJvbGUpIHtcbiAgICByZXR1cm4gdGhpcy5pbmRleC5yZWNvcmRGb3Iobm9kZSwgcGF0aCkucmFuZ2VzW3JvbGVdICE9PSB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZXMgdGV4dCBtYXBwZWQgdG8gYSBzZW1hbnRpYyBub2RlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIEdlbmVyYXRlZCB0ZXh0LlxuICAgKiBAcGFyYW0ge29iamVjdH0gYW5ub3RhdGlvbiAtIE1hcHBpbmcgYW5ub3RhdGlvbi5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGV9IGFubm90YXRpb24ubm9kZSAtIFNlbWFudGljIG5vZGUuXG4gICAqIEBwYXJhbSB7XCJleGFjdFwiIHwgXCJhbmNob3JcIn0gYW5ub3RhdGlvbi5tYXBwaW5nS2luZCAtIE1hcHBpbmcgcHJlY2lzaW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Fubm90YXRpb24ucm9sZV0gLSBTZW1hbnRpYyB0b2tlbiByb2xlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Fubm90YXRpb24ubmFtZV0gLSBTb3VyY2UgTWFwIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYW5ub3RhdGlvbi5wYXRoXSAtIEpTT04gUG9pbnRlciBmb3IgYSBzaGFyZWQgbm9kZSBvY2N1cnJlbmNlLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG1hcHBlZCh0ZXh0LCB7bWFwcGluZ0tpbmQsIG5hbWUsIG5vZGUsIHBhdGgsIHJvbGV9KSB7XG4gICAgaWYgKHRleHQubGVuZ3RoID09IDApIHJldHVyblxuXG4gICAgY29uc3QgcmVjb3JkID0gdGhpcy5pbmRleC5yZWNvcmRGb3Iobm9kZSwgcGF0aClcbiAgICBjb25zdCByb2xlTG9jYXRpb24gPSByb2xlID8gcmVjb3JkLnJhbmdlc1tyb2xlXSA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IG9yaWdpbiA9IHJvbGVMb2NhdGlvbiA/IHRoaXMuI3NvdXJjZU9yaWdpbihyb2xlTG9jYXRpb24sIHJlY29yZC5vcmlnaW4pIDogcmVjb3JkLm9yaWdpblxuICAgIGNvbnN0IHByZWNpc2lvbiA9IG1hcHBpbmdLaW5kID09IFwiZXhhY3RcIiAmJiByb2xlICYmICFyb2xlTG9jYXRpb24gPyBcImFuY2hvclwiIDogbWFwcGluZ0tpbmRcbiAgICBjb25zdCBzeW1ib2wgPSByZWNvcmQuc3ltYm9sSWRcbiAgICAgID8gdGhpcy5pbmRleC5wcm92ZW5hbmNlLnN5bWJvbHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuaWQgPT0gcmVjb3JkLnN5bWJvbElkKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIHRoaXMuI2FwcGVuZCh0ZXh0LCB7XG4gICAgICBtYXBwaW5nS2luZDogcHJlY2lzaW9uLFxuICAgICAgbmFtZTogbmFtZSA/PyBzeW1ib2w/Lm5hbWUsXG4gICAgICBub2RlSWQ6IHJlY29yZC5pZCxcbiAgICAgIG9yaWdpbixcbiAgICAgIHJvbGUsXG4gICAgICBzeW1ib2xJZDogcmVjb3JkLnN5bWJvbElkXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZXMgc291cmNlLWZyZWUgc2NhZmZvbGRpbmcgd2l0aCBvcHRpb25hbCBzZW1hbnRpYyBjb250ZXh0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIEdlbmVyYXRlZCB0ZXh0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIC0gU3RhYmxlIHJlYXNvbi5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGVbXX0gW3JlbGF0ZWROb2Rlc10gLSBSZWxhdGVkIG5vZGVzLlxuICAgKiBAcGFyYW0geyhzdHJpbmcgfCB1bmRlZmluZWQpW119IFtyZWxhdGVkUGF0aHNdIC0gT2NjdXJyZW5jZSBwYXRocyBmb3Igc2hhcmVkIHJlbGF0ZWQgbm9kZXMuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc3ludGhldGljKHRleHQsIHJlYXNvbiwgcmVsYXRlZE5vZGVzID0gW10sIHJlbGF0ZWRQYXRocyA9IFtdKSB7XG4gICAgaWYgKHRleHQubGVuZ3RoID09IDApIHJldHVyblxuXG4gICAgLyoqIEB0eXBlIHtTZXQ8c3RyaW5nPn0gKi9cbiAgICBjb25zdCBzZWVuID0gbmV3IFNldCgpXG4gICAgY29uc3QgcmVsYXRlZE9yaWdpbnMgPSByZWxhdGVkTm9kZXMuZmxhdE1hcCgobm9kZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHJlY29yZCA9IHRoaXMuaW5kZXgucmVjb3JkRm9yKG5vZGUsIHJlbGF0ZWRQYXRoc1tpbmRleF0pXG5cbiAgICAgIHJldHVybiByZWxhdGVkT3JpZ2luc0ZvcihyZWNvcmQub3JpZ2luKS5mbGF0TWFwKChyZWxhdGVkKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRleHR1YWwgPSB7XG4gICAgICAgICAgLi4ucmVsYXRlZCxcbiAgICAgICAgICBub2RlSWQ6IHJlbGF0ZWQubm9kZUlkID8/IHJlY29yZC5pZCxcbiAgICAgICAgICByb2xlOiByZWxhdGVkLnJvbGUgPz8gXCJjb250ZXh0XCJcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXkgPSByZWxhdGVkT3JpZ2luS2V5KGNvbnRleHR1YWwpXG5cbiAgICAgICAgaWYgKHNlZW4uaGFzKGtleSkpIHJldHVybiBbXVxuICAgICAgICBzZWVuLmFkZChrZXkpXG5cbiAgICAgICAgcmV0dXJuIFtjb250ZXh0dWFsXVxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgdGhpcy4jYXBwZW5kKHRleHQsIHttYXBwaW5nS2luZDogXCJzeW50aGV0aWNcIiwgb3JpZ2luOiB7a2luZDogXCJzeW50aGV0aWNcIiwgcmVhc29uLCByZWxhdGVkT3JpZ2luc319KVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGF1dGhvcml0YXRpdmUgcmljaCBtYXAgZm9yIHRoZSBjdXJyZW50IGNvbnRlbnQuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpZm9sZE1hcHBpbmd9IE1hcHBpbmcuXG4gICAqL1xuICBmaW5pc2goKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvb3JkaW5hdGVTeXN0ZW06IFwidXRmMTZcIixcbiAgICAgIGdlbmVyYXRlZDoge2NvbnRlbnQ6IHRoaXMuY29kZSwgZmlsZW5hbWU6IHRoaXMuZmlsZW5hbWUsIGxhbmd1YWdlOiB0aGlzLmxhbmd1YWdlfSxcbiAgICAgIG5vZGVzOiBbLi4udGhpcy5pbmRleC5wcm92ZW5hbmNlLm5vZGVzXSxcbiAgICAgIHNjaGVtYTogXCJTZW1hbnRpZm9sZE1hcHBpbmdcIixcbiAgICAgIHNvdXJjZXM6IFsuLi50aGlzLmluZGV4LnByb3ZlbmFuY2Uuc291cmNlc10sXG4gICAgICBzcGFuczogWy4uLnRoaXMuc3BhbnNdLFxuICAgICAgc3ltYm9sczogWy4uLnRoaXMuaW5kZXgucHJvdmVuYW5jZS5zeW1ib2xzXSxcbiAgICAgIHZlcnNpb246IDFcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kcyBvbmUgbWFwcGVkIHNwYW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gR2VuZXJhdGVkIHRleHQuXG4gICAqIEBwYXJhbSB7T21pdDxpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpZm9sZE1hcHBpbmdTcGFuLCBcImdlbmVyYXRlZFwiPn0gYW5ub3RhdGlvbiAtIFNwYW4gYW5ub3RhdGlvbi5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICAjYXBwZW5kKHRleHQsIGFubm90YXRpb24pIHtcbiAgICBpZiAodGV4dC5pbmNsdWRlcyhcIlxcclwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRlZCBvdXRwdXQgbXVzdCB1c2UgZGV0ZXJtaW5pc3RpYyBMRiBsaW5lIGVuZGluZ3MuXCIpXG5cbiAgICBjb25zdCBzdGFydCA9IHtjb2x1bW46IHRoaXMuY29sdW1uLCBsaW5lOiB0aGlzLmxpbmUsIG9mZnNldDogdGhpcy5vZmZzZXR9XG5cbiAgICB0aGlzLnBhcnRzLnB1c2godGV4dClcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGV4dC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMub2Zmc2V0KytcbiAgICAgIGlmICh0ZXh0W2luZGV4XSA9PSBcIlxcblwiKSB7XG4gICAgICAgIHRoaXMubGluZSsrXG4gICAgICAgIHRoaXMuY29sdW1uID0gMVxuICAgICAgfSBlbHNlIHRoaXMuY29sdW1uKytcbiAgICB9XG4gICAgY29uc3QgY29tcGFjdCA9IC8qKiBAdHlwZSB7T21pdDxpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpZm9sZE1hcHBpbmdTcGFuLCBcImdlbmVyYXRlZFwiPn0gKi8gKFxuICAgICAgT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGFubm90YXRpb24pLmZpbHRlcigoWywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSlcbiAgICApXG5cbiAgICB0aGlzLnNwYW5zLnB1c2goe1xuICAgICAgLi4uY29tcGFjdCxcbiAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICBlbmQ6IHtjb2x1bW46IHRoaXMuY29sdW1uLCBsaW5lOiB0aGlzLmxpbmUsIG9mZnNldDogdGhpcy5vZmZzZXR9LFxuICAgICAgICBmaWxlbmFtZTogdGhpcy5maWxlbmFtZSxcbiAgICAgICAgc3RhcnRcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBkaXJlY3Qgcm9sZSBvcmlnaW4gdXNpbmcgY2Fub25pY2FsIHNvdXJjZSBpZGVudGl0aWVzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIEV4YWN0IHJvbGUgcmFuZ2UuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNPcmlnaW59IGZhbGxiYWNrIC0gT3duaW5nIG9yaWdpbi5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljT3JpZ2lufSBSb2xlIG9yaWdpbi5cbiAgICovXG4gICNzb3VyY2VPcmlnaW4obG9jYXRpb24sIGZhbGxiYWNrKSB7XG4gICAgLyoqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9ICovXG4gICAgbGV0IGZhbGxiYWNrU291cmNlSWRcblxuICAgIGlmIChmYWxsYmFjay5raW5kID09IFwic291cmNlXCIgJiYgZmFsbGJhY2subG9jYXRpb24uZmlsZW5hbWUgPT0gbG9jYXRpb24uZmlsZW5hbWUpIGZhbGxiYWNrU291cmNlSWQgPSBmYWxsYmFjay5zb3VyY2VJZFxuICAgIGVsc2UgaWYgKGZhbGxiYWNrLmtpbmQgPT0gXCJkZXJpdmVkXCIpIHtcbiAgICAgIGZhbGxiYWNrU291cmNlSWQgPSBmYWxsYmFjay5vcmlnaW5zLmZpbmQoKG9yaWdpbikgPT4gb3JpZ2luLmxvY2F0aW9uLmZpbGVuYW1lID09IGxvY2F0aW9uLmZpbGVuYW1lKT8uc291cmNlSWRcbiAgICB9IGVsc2UgaWYgKGZhbGxiYWNrLmtpbmQgPT0gXCJzeW50aGV0aWNcIikge1xuICAgICAgZmFsbGJhY2tTb3VyY2VJZCA9IGZhbGxiYWNrLnJlbGF0ZWRPcmlnaW5zLmZpbmQoKG9yaWdpbikgPT4gb3JpZ2luLmxvY2F0aW9uLmZpbGVuYW1lID09IGxvY2F0aW9uLmZpbGVuYW1lKT8uc291cmNlSWRcbiAgICB9XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5pbmRleC5wcm92ZW5hbmNlLnNvdXJjZXMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuaWQgPT0gZmFsbGJhY2tTb3VyY2VJZCkgPz9cbiAgICAgIHRoaXMuaW5kZXgucHJvdmVuYW5jZS5zb3VyY2VzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmZpbGVuYW1lID09IGxvY2F0aW9uLmZpbGVuYW1lKVxuXG4gICAgcmV0dXJuIHNvdXJjZSA/IHtraW5kOiBcInNvdXJjZVwiLCBsb2NhdGlvbiwgc291cmNlSWQ6IHNvdXJjZS5pZH0gOiBmYWxsYmFja1xuICB9XG59XG5cbi8qKlxuICogRXhwYW5kcyBldmVyeSBjbG9zZWQgcHJvdmVuYW5jZSByYW5nZSBpbiBzZW1hbnRpYyBvcmRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNPcmlnaW59IG9yaWdpbiAtIENsb3NlZCBwcm92ZW5hbmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlbGF0ZWRPcmlnaW5bXX0gUmVsYXRlZCByYW5nZXMuXG4gKi9cbmZ1bmN0aW9uIHJlbGF0ZWRPcmlnaW5zRm9yKG9yaWdpbikge1xuICBpZiAob3JpZ2luLmtpbmQgPT0gXCJzb3VyY2VcIikgcmV0dXJuIFt7bG9jYXRpb246IG9yaWdpbi5sb2NhdGlvbiwgc291cmNlSWQ6IG9yaWdpbi5zb3VyY2VJZH1dXG4gIGlmIChvcmlnaW4ua2luZCA9PSBcImRlcml2ZWRcIikgcmV0dXJuIG9yaWdpbi5vcmlnaW5zXG5cbiAgcmV0dXJuIG9yaWdpbi5yZWxhdGVkT3JpZ2luc1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIGRldGVybWluaXN0aWMgaWRlbnRpdHkgZm9yIG9uZSBjb250ZXh0dWFsIHJlbGF0ZWQgb3JpZ2luLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWxhdGVkT3JpZ2lufSBvcmlnaW4gLSBSZWxhdGVkIG9yaWdpbi5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFN0YWJsZSBpZGVudGl0eS5cbiAqL1xuZnVuY3Rpb24gcmVsYXRlZE9yaWdpbktleShvcmlnaW4pIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFtcbiAgICBvcmlnaW4uc291cmNlSWQsXG4gICAgb3JpZ2luLmxvY2F0aW9uLmZpbGVuYW1lLFxuICAgIG9yaWdpbi5sb2NhdGlvbi5zdGFydC5vZmZzZXQsXG4gICAgb3JpZ2luLmxvY2F0aW9uLmVuZC5vZmZzZXQsXG4gICAgb3JpZ2luLm5vZGVJZCA/PyBudWxsLFxuICAgIG9yaWdpbi5zeW1ib2xJZCA/PyBudWxsLFxuICAgIG9yaWdpbi5yb2xlID8/IG51bGxcbiAgXSlcbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"language-registry.d.ts","sourceRoot":"","sources":["../../src/language-registry.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"language-registry.d.ts","sourceRoot":"","sources":["../../src/language-registry.js"],"names":[],"mappings":"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"}
|