semantifold 0.13.0 → 0.14.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.
Files changed (59) hide show
  1. package/README.md +1 -0
  2. package/build/src/backends/effects.js +3 -1
  3. package/build/src/backends/php.d.ts.map +1 -1
  4. package/build/src/backends/php.js +56 -3
  5. package/build/src/backends/scalars.js +2 -2
  6. package/build/src/backends/shared.d.ts +2 -1
  7. package/build/src/backends/shared.d.ts.map +1 -1
  8. package/build/src/backends/shared.js +209 -7
  9. package/build/src/backends/writer.d.ts +18 -4
  10. package/build/src/backends/writer.d.ts.map +1 -1
  11. package/build/src/backends/writer.js +40 -4
  12. package/build/src/frontends/java.d.ts +1 -1
  13. package/build/src/frontends/java.d.ts.map +1 -1
  14. package/build/src/frontends/java.js +14 -11
  15. package/build/src/frontends/javascript-typescript.d.ts +1 -1
  16. package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
  17. package/build/src/frontends/javascript-typescript.js +17 -17
  18. package/build/src/frontends/php.d.ts +5 -1
  19. package/build/src/frontends/php.d.ts.map +1 -1
  20. package/build/src/frontends/php.js +159 -31
  21. package/build/src/frontends/ruby.d.ts +1 -1
  22. package/build/src/frontends/ruby.d.ts.map +1 -1
  23. package/build/src/frontends/ruby.js +12 -9
  24. package/build/src/frontends/types.d.ts +9 -2
  25. package/build/src/frontends/types.d.ts.map +1 -1
  26. package/build/src/frontends/types.js +26 -9
  27. package/build/src/language-registry.d.ts.map +1 -1
  28. package/build/src/language-registry.js +14 -6
  29. package/build/src/mapping.d.ts.map +1 -1
  30. package/build/src/mapping.js +4 -2
  31. package/build/src/semantic/effects.d.ts.map +1 -1
  32. package/build/src/semantic/effects.js +3 -1
  33. package/build/src/semantic/provenance.d.ts.map +1 -1
  34. package/build/src/semantic/provenance.js +37 -4
  35. package/build/src/semantic/types.d.ts +140 -9
  36. package/build/src/semantic/types.d.ts.map +1 -1
  37. package/build/src/semantic/types.js +37 -6
  38. package/build/src/semantic/validate.d.ts +31 -2
  39. package/build/src/semantic/validate.d.ts.map +1 -1
  40. package/build/src/semantic/validate.js +346 -27
  41. package/docs/adr-bounded-subtyping.md +180 -0
  42. package/docs/language-support.md +1 -1
  43. package/package.json +1 -1
  44. package/src/backends/effects.js +1 -0
  45. package/src/backends/php.js +56 -2
  46. package/src/backends/scalars.js +1 -1
  47. package/src/backends/shared.js +210 -6
  48. package/src/backends/writer.js +41 -3
  49. package/src/frontends/java.js +13 -10
  50. package/src/frontends/javascript-typescript.js +16 -16
  51. package/src/frontends/php.js +175 -31
  52. package/src/frontends/ruby.js +11 -8
  53. package/src/frontends/types.js +26 -8
  54. package/src/language-registry.js +13 -5
  55. package/src/mapping.js +3 -1
  56. package/src/semantic/effects.js +1 -0
  57. package/src/semantic/provenance.js +34 -3
  58. package/src/semantic/types.js +39 -5
  59. package/src/semantic/validate.js +377 -26
@@ -16,7 +16,7 @@ const referenceMethodHooks = new Set([
16
16
  "respond_to_missing?", "send", "singleton_class", "size"
17
17
  ]);
18
18
  /** @typedef {{name: string, nameLocation: import("../semantic/types.js").SourceLocation, parameters: import("../semantic/types.js").Parameter[], returnType: import("../semantic/types.js").SemanticFunctionReturnType, typeParameters?: import("../semantic/types.js").TypeParameter[], location: import("../semantic/types.js").SourceLocation}} RubyFunctionSignature */
19
- /** @typedef {{bindings: Map<string, import("../semantic/types.js").SemanticBindingType>, catchBindingNames?: Set<string>, classes: Map<string, import("../semantic/types.js").ClassDeclaration>, catchBindingNodes?: Map<string, import("../semantic/types.js").CatchBinding>, currentCatchBindingNode?: import("../semantic/types.js").CatchBinding, currentClass?: import("../semantic/types.js").ClassDeclaration, errorNames: Map<string, import("../semantic/types.js").ErrorDeclaration>, errors: Map<string, import("../semantic/types.js").ErrorDeclaration>, functions: Map<string, RubyFunctionSignature>, orderedMapDeclarations?: Set<object>, records: Map<string, import("../semantic/types.js").RecordDeclaration>, recordNames: Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>, loopDepth?: number, returnType?: import("../semantic/types.js").SemanticFunctionReturnType, typeParameters?: Map<string, import("../semantic/types.js").TypeParameter>}} RubyConversionContext */
19
+ /** @typedef {{bindings: Map<string, import("../semantic/types.js").SemanticBindingType>, catchBindingNames?: Set<string>, classes: Map<string, import("../semantic/types.js").ClassDeclaration>, catchBindingNodes?: Map<string, import("../semantic/types.js").CatchBinding>, currentCatchBindingNode?: import("../semantic/types.js").CatchBinding, currentClass?: import("../semantic/types.js").ClassDeclaration, errorNames: Map<string, import("../semantic/types.js").ErrorDeclaration>, errors: Map<string, import("../semantic/types.js").ErrorDeclaration>, functions: Map<string, RubyFunctionSignature>, orderedMapDeclarations?: Set<object>, records: Map<string, import("../semantic/types.js").RecordDeclaration>, recordNames: Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>, loopDepth?: number, returnType?: import("../semantic/types.js").SemanticFunctionReturnType, typeParameters?: Map<string, import("../semantic/types.js").TypeParameter>}} RubyConversionContext */
20
20
  const rubyBinaryOperations = new Map([
21
21
  ["+", "Add"],
22
22
  ["-", "Subtract"],
@@ -258,6 +258,9 @@ function convertExpression(node, filename, source, context, expectedType, preser
258
258
  kind: /** @type {const} */ ("ReferenceConstruction"), location,
259
259
  reference: referenceType(/** @type {string} */ (declaration.id), nodeLocation(node.receiver, filename, source)) }, { class: nodeLocation(node.receiver, filename, source) });
260
260
  }
261
+ if (declaration.kind == "InterfaceDeclaration") {
262
+ return unsupportedSyntax("ruby", "construction of an interface", nodeLocation(node.receiver, filename, source));
263
+ }
261
264
  if (declaration.kind == "EffectResourceDeclaration") {
262
265
  return unsupportedSyntax("ruby", "owned resource construction", nodeLocation(node.receiver, filename, source));
263
266
  }
@@ -656,7 +659,7 @@ function associatedComments(comments, node, source) {
656
659
  * @param {LocalVariableWriteNode} node - Local write.
657
660
  * @param {string} filename - Source filename.
658
661
  * @param {string} source - Complete source.
659
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} recordNames - Nominal declarations by source name.
662
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} recordNames - Nominal declarations by source name.
660
663
  * @param {Map<string, import("../semantic/types.js").TypeParameter>} [typeParameters] - Declaration-scoped parameters.
661
664
  * @returns {{immutable: boolean, type: import("../semantic/types.js").SemanticValueType} | undefined} Metadata when present.
662
665
  */
@@ -1099,7 +1102,7 @@ function isImmediateCommentGap(gap) {
1099
1102
  * @param {import("../semantic/types.js").SourceLocation} location - Source location.
1100
1103
  * @param {string} source - Complete parser input.
1101
1104
  * @param {import("../semantic/types.js").SourceLocation} [typeLocation] - Exact type comment token location.
1102
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} [recordNames] - Nominal declarations by source name.
1105
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} [recordNames] - Nominal declarations by source name.
1103
1106
  * @param {Map<string, import("../semantic/types.js").TypeParameter>} [typeParameters] - Declaration-scoped parameters.
1104
1107
  * @returns {import("../semantic/types.js").SemanticValueType} Semantic type.
1105
1108
  */
@@ -1112,7 +1115,7 @@ function convertType(sourceType, subject, location, source, typeLocation = locat
1112
1115
  * @param {import("@ruby/prism/src/deserialize.js").Comment[]} comments - Prism comments.
1113
1116
  * @param {string} filename - Source filename.
1114
1117
  * @param {string} source - Complete source.
1115
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} recordNames - Nominal declarations by source name.
1118
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} recordNames - Nominal declarations by source name.
1116
1119
  * @param {string} ownerId - Stable function identity.
1117
1120
  * @param {boolean} [allowBuiltinOutput] - Whether compiler authority admits the exact output facade function.
1118
1121
  * @returns {RubyFunctionSignature} Semantic signature.
@@ -1168,7 +1171,7 @@ function convertFunctionSignature(node, comments, filename, source, recordNames,
1168
1171
  * @param {DefNode} node - Prism definition.
1169
1172
  * @param {RubyFunctionSignature} signature - Converted signature.
1170
1173
  * @param {Map<string, RubyFunctionSignature>} functions - Module signatures.
1171
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} recordNames - Nominal declarations by source name.
1174
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} recordNames - Nominal declarations by source name.
1172
1175
  * @param {Map<string, import("../semantic/types.js").RecordDeclaration>} records - Record declarations by identity.
1173
1176
  * @param {Map<string, import("../semantic/types.js").ClassDeclaration>} classes - Reference classes by identity.
1174
1177
  * @param {Map<string, import("../semantic/types.js").ErrorDeclaration>} errorNames - Error declarations by source name.
@@ -1269,7 +1272,7 @@ function convertRubyError(node, declaration, filename, source) {
1269
1272
  * Converts the bounded Ruby reference-class profile.
1270
1273
  * @param {ClassNode} node - Prism class declaration.
1271
1274
  * @param {import("../semantic/types.js").ClassDeclaration} declaration - Predeclared class identity.
1272
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} nominalNames - Visible nominal declarations.
1275
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} nominalNames - Visible nominal declarations.
1273
1276
  * @param {Map<string, import("../semantic/types.js").RecordDeclaration>} records - Records by identity.
1274
1277
  * @param {Map<string, import("../semantic/types.js").ClassDeclaration>} classes - Classes by identity.
1275
1278
  * @param {Map<string, RubyFunctionSignature>} functions - Top-level signatures.
@@ -1368,7 +1371,7 @@ function convertRubyReferenceClass(node, declaration, nominalNames, records, cla
1368
1371
  * Converts one exact typed-reader/initializer/freeze Ruby record profile.
1369
1372
  * @param {ClassNode} node - Prism class declaration.
1370
1373
  * @param {import("../semantic/types.js").RecordDeclaration} declaration - Predeclared nominal identity.
1371
- * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} recordNames - Nominal declarations by name.
1374
+ * @param {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} recordNames - Nominal declarations by name.
1372
1375
  * @param {import("@ruby/prism/src/deserialize.js").Comment[]} comments - Parser-owned comments.
1373
1376
  * @param {string} filename - Source filename.
1374
1377
  * @param {string} source - Complete source.
@@ -1619,7 +1622,7 @@ export function parseRuby({ capabilities = [], filename, source, program }) {
1619
1622
  const reopened = classDeclarations.find((declaration, index) => classDeclarations.findIndex((candidate) => candidate.name == declaration.name) != index);
1620
1623
  if (reopened)
1621
1624
  return unsupportedSyntax("ruby", `reference class reopening '${reopened.name}'`, reopened.location);
1622
- const recordNames = /** @type {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration>} */ (new Map(program?.records ?? []));
1625
+ const recordNames = /** @type {Map<string, import("../semantic/types.js").RecordDeclaration | import("../semantic/types.js").ClassDeclaration | import("../semantic/types.js").EffectResourceDeclaration | import("../semantic/types.js").InterfaceDeclaration>} */ (new Map(program?.records ?? []));
1623
1626
  for (const [name, declaration] of program?.classes ?? [])
1624
1627
  recordNames.set(name, declaration);
1625
1628
  for (const resource of capabilities.flatMap(({ resources }) => resources))
@@ -1980,4 +1983,4 @@ function constantPathName(node) {
1980
1983
  }
1981
1984
  return `${constantPathName(node.parent)}::${node.name}`;
1982
1985
  }
1983
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVieS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZHMvcnVieS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUNMLE9BQU8sRUFDUCxTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxtQkFBbUIsRUFDbkIsU0FBUyxFQUNULFNBQVMsRUFDVCxRQUFRLEVBQ1IsU0FBUyxFQUNULGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLFFBQVEsRUFDUixzQkFBc0IsRUFDdEIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sV0FBVyxFQUNYLHlCQUF5QixFQUN6Qix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDdkIsc0JBQXNCLEVBQ3RCLFVBQVUsRUFDVixRQUFRLEVBQ1IsT0FBTyxFQUNQLE1BQU0sRUFDTixlQUFlLEVBQ2YsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixRQUFRLEVBQ1IsVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsUUFBUSxFQUNSLGNBQWMsRUFDZCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFFBQVEsRUFDUixVQUFVLEVBQ1YsU0FBUyxFQUNULFNBQVMsRUFDVixNQUFNLGFBQWEsQ0FBQTtBQUNwQixPQUFPLEVBQUMsV0FBVyxFQUFFLHFCQUFxQixFQUFFLGlCQUFpQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDdEYsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sd0JBQXdCLENBQUE7QUFDcEUsT0FBTyxFQUFDLG1CQUFtQixFQUFFLGNBQWMsRUFBRSwyQkFBMkIsRUFBQyxNQUFNLHlCQUF5QixDQUFBO0FBQ3hHLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQzdELE9BQU8sRUFBQyxlQUFlLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQTtBQUMz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Q0FBQTtJQUVySCxPQUFPO1FBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksc0JBQXNCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUTtRQUNqRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUs7S0FDcEQsQ0FBQTtBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFJO0lBQzVCLElBQUksSUFBSSxZQUFZLGdCQUFnQjtRQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQTtJQUN0RCxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxRQUFRO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFBO0lBQ25HLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQTtJQUNsQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxZQUFZLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLFlBQVksZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1FBQzdGLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQTtJQUN4RSxDQUFDO0lBRUQsT0FBTyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7QUFDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge1xuICBBbmROb2RlLFxuICBBcnJheU5vZGUsXG4gIEFzc29jTm9kZSxcbiAgQmxvY2tOb2RlLFxuICBCbG9ja1BhcmFtZXRlcnNOb2RlLFxuICBCZWdpbk5vZGUsXG4gIEJyZWFrTm9kZSxcbiAgQ2FsbE5vZGUsXG4gIENsYXNzTm9kZSxcbiAgQ29uc3RhbnRQYXRoTm9kZSxcbiAgQ29uc3RhbnRSZWFkTm9kZSxcbiAgRGVmTm9kZSxcbiAgRWxzZU5vZGUsXG4gIEVtYmVkZGVkU3RhdGVtZW50c05vZGUsXG4gIEZhbHNlTm9kZSxcbiAgSGFzaE5vZGUsXG4gIElmTm9kZSxcbiAgSW50ZWdlck5vZGUsXG4gIEluc3RhbmNlVmFyaWFibGVXcml0ZU5vZGUsXG4gIEluc3RhbmNlVmFyaWFibGVSZWFkTm9kZSxcbiAgSW50ZXJwb2xhdGVkU3RyaW5nTm9kZSxcbiAgTG9jYWxWYXJpYWJsZVJlYWROb2RlLFxuICBMb2NhbFZhcmlhYmxlVGFyZ2V0Tm9kZSxcbiAgTG9jYWxWYXJpYWJsZVdyaXRlTm9kZSxcbiAgTW9kdWxlTm9kZSxcbiAgTmV4dE5vZGUsXG4gIE5pbE5vZGUsXG4gIE9yTm9kZSxcbiAgUGFyZW50aGVzZXNOb2RlLFxuICBQcm9ncmFtTm9kZSxcbiAgUmVxdWlyZWRQYXJhbWV0ZXJOb2RlLFxuICBSZWRvTm9kZSxcbiAgUmVzY3VlTm9kZSxcbiAgUmV0dXJuTm9kZSxcbiAgUmV0cnlOb2RlLFxuICBTZWxmTm9kZSxcbiAgU3RhdGVtZW50c05vZGUsXG4gIFN0cmluZ05vZGUsXG4gIFN5bWJvbE5vZGUsXG4gIFRydWVOb2RlLFxuICBVbmxlc3NOb2RlLFxuICBXaGlsZU5vZGUsXG4gIGxvYWRQcmlzbVxufSBmcm9tIFwiQHJ1YnkvcHJpc21cIlxuaW1wb3J0IHttaXNzaW5nVHlwZSwgU2VtYW50aWZvbGREaWFnbm9zdGljLCB1bnN1cHBvcnRlZFN5bnRheH0gZnJvbSBcIi4uL2RpYWdub3N0aWMuanNcIlxuaW1wb3J0IHtibG9ja1JlZmVyZW5jZXNQcm90ZWN0ZWRFbnRyeX0gZnJvbSBcIi4uL3NlbWFudGljL2VmZmVjdHMuanNcIlxuaW1wb3J0IHtsb2NhdGlvbkZyb21PZmZzZXRzLCBtb2R1bGVMb2NhdGlvbiwgdXRmOEJ5dGVPZmZzZXRUb1V0ZjE2T2Zmc2V0fSBmcm9tIFwiLi4vc2VtYW50aWMvbG9jYXRpb24uanNcIlxuaW1wb3J0IHt3aXRoQWRhcHRlZE9wZXJhdGlvbn0gZnJvbSBcIi4uL3NlbWFudGljL29wZXJhdG9ycy5qc1wiXG5pbXBvcnQge3NldFBhcnNlclJhbmdlcywgd2l0aFBhcnNlclJhbmdlc30gZnJvbSBcIi4uL3NlbWFudGljL3Byb3ZlbmFuY2UuanNcIlxuaW1wb3J0IHtoYXNPbmx5VW5pY29kZVNjYWxhcnMsIHNjYWxhclR5cGV9IGZyb20gXCIuLi9zZW1hbnRpYy9zY2FsYXJzLmpzXCJcbmltcG9ydCB7aXNUYXNrMDM0UmVzb3VyY2VQcm9iZX0gZnJvbSBcIi4uL3NlbWFudGljL2NhcGFiaWxpdGllcy5qc1wiXG5pbXBvcnQge2hhc0V4YWN0RWZmZWN0U3VwcG9ydH0gZnJvbSBcIi4uL2JhY2tlbmRzL2VmZmVjdHMuanNcIlxuaW1wb3J0IHtyZXF1aXJlU291cmNlUmV0dXJuVHlwZX0gZnJvbSBcIi4vc2NhbGFycy5qc1wiXG5pbXBvcnQge2NhcGFiaWxpdHlGdW5jdGlvblNpZ25hdHVyZXMsIGRvY3VtZW50ZWRWYWx1ZVR5cGUsIGluc3RhbnRpYXRlZFJlY29yZEZpZWxkVHlwZSwgaXRlcmF0aW9uQmluZGluZ1R5cGUsIGl0ZXJhdGlvbk9wZXJhbmRUeXBlLCBrbm93bkNhbGxSZXR1cm5UeXBlLCBvcmRlcmVkTWFwVHlwZUZyb21NYXAsIHByZXNlcnZlc0dlbmVyaWNPcHRpb25hbEV2aWRlbmNlLCByZWNvcmRUeXBlLCByZWZlcmVuY2VUeXBlLCBzYW1lVmFsdWVUeXBlfSBmcm9tIFwiLi90eXBlcy5qc1wiXG5jb25zdCBwYXJzZVByaXNtID0gYXdhaXQgbG9hZFByaXNtKClcbmNvbnN0IHJlZmVyZW5jZU1ldGhvZEhvb2tzID0gbmV3IFNldChbXG4gIFwiX19zZW5kX19cIiwgXCJleHRlbmRcIiwgXCJmZXRjaFwiLCBcImluc3RhbmNlX2V2YWxcIiwgXCJpbnN0YW5jZV9leGVjXCIsIFwibWV0aG9kXCIsIFwibWV0aG9kX21pc3NpbmdcIiwgXCJwdWJsaWNfc2VuZFwiLFxuICBcInJlc3BvbmRfdG9fbWlzc2luZz9cIiwgXCJzZW5kXCIsIFwic2luZ2xldG9uX2NsYXNzXCIsIFwic2l6ZVwiXG5dKVxuLyoqIEB0eXBlZGVmIHt7bmFtZTogc3RyaW5nLCBuYW1lTG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBwYXJhbWV0ZXJzOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QYXJhbWV0ZXJbXSwgcmV0dXJuVHlwZTogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGUsIHR5cGVQYXJhbWV0ZXJzPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcltdLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259fSBSdWJ5RnVuY3Rpb25TaWduYXR1cmUgKi9cbi8qKiBAdHlwZWRlZiB7e2JpbmRpbmdzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0JpbmRpbmdUeXBlPiwgY2F0Y2hCaW5kaW5nTmFtZXM/OiBTZXQ8c3RyaW5nPiwgY2xhc3NlczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj4sIGNhdGNoQmluZGluZ05vZGVzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2F0Y2hCaW5kaW5nPiwgY3VycmVudENhdGNoQmluZGluZ05vZGU/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DYXRjaEJpbmRpbmcsIGN1cnJlbnRDbGFzcz86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24sIGVycm9yTmFtZXM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+LCBlcnJvcnM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+LCBmdW5jdGlvbnM6IE1hcDxzdHJpbmcsIFJ1YnlGdW5jdGlvblNpZ25hdHVyZT4sIG9yZGVyZWRNYXBEZWNsYXJhdGlvbnM/OiBTZXQ8b2JqZWN0PiwgcmVjb3JkczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+LCByZWNvcmROYW1lczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj4sIGxvb3BEZXB0aD86IG51bWJlciwgcmV0dXJuVHlwZT86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlLCB0eXBlUGFyYW1ldGVycz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXI+fX0gUnVieUNvbnZlcnNpb25Db250ZXh0ICovXG5jb25zdCBydWJ5QmluYXJ5T3BlcmF0aW9ucyA9IG5ldyBNYXAoW1xuICBbXCIrXCIsIFwiQWRkXCJdLFxuICBbXCItXCIsIFwiU3VidHJhY3RcIl0sXG4gIFtcIipcIiwgXCJNdWx0aXBseVwiXSxcbiAgW1wiPT1cIiwgXCJFcXVhbFwiXSxcbiAgW1wiIT1cIiwgXCJOb3RFcXVhbFwiXSxcbiAgW1wiPFwiLCBcIkxlc3NUaGFuXCJdLFxuICBbXCI8PVwiLCBcIkxlc3NUaGFuT3JFcXVhbFwiXSxcbiAgW1wiPlwiLCBcIkdyZWF0ZXJUaGFuXCJdLFxuICBbXCI+PVwiLCBcIkdyZWF0ZXJUaGFuT3JFcXVhbFwiXVxuXSlcblxuLyoqXG4gKiBSZXR1cm5zIGEgbm9ybWFsaXplZCBQcmlzbSBub2RlIGxvY2F0aW9uLlxuICogQHBhcmFtIHt7bG9jYXRpb246IGltcG9ydChcIkBydWJ5L3ByaXNtXCIpLkxvY2F0aW9ufX0gbm9kZSAtIFByaXNtIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBTb3VyY2UgbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIHJldHVybiBwcmlzbUxvY2F0aW9uKG5vZGUubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBQcmlzbSBsb2NhdGlvbiBpbnRvIGEgbm9ybWFsaXplZCBzb3VyY2UgbG9jYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLkxvY2F0aW9ufSBsb2NhdGlvbiAtIFByaXNtIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gU291cmNlIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBwcmlzbUxvY2F0aW9uKGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIHJldHVybiBsb2NhdGlvbkZyb21PZmZzZXRzKFxuICAgIGZpbGVuYW1lLFxuICAgIHNvdXJjZSxcbiAgICB1dGY4Qnl0ZU9mZnNldFRvVXRmMTZPZmZzZXQoc291cmNlLCBsb2NhdGlvbi5zdGFydE9mZnNldCksXG4gICAgdXRmOEJ5dGVPZmZzZXRUb1V0ZjE2T2Zmc2V0KHNvdXJjZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQgKyBsb2NhdGlvbi5sZW5ndGgpXG4gIClcbn1cblxuLyoqXG4gKiBTbGljZXMgSmF2YVNjcmlwdCBzb3VyY2UgdXNpbmcgUHJpc20ncyBVVEYtOCBieXRlIG9mZnNldHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0T2Zmc2V0IC0gSW5jbHVzaXZlIFByaXNtIGJ5dGUgb2Zmc2V0LlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZE9mZnNldCAtIEV4Y2x1c2l2ZSBQcmlzbSBieXRlIG9mZnNldC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFNvdXJjZSB0ZXh0IGluIHRoZSBieXRlIHJhbmdlLlxuICovXG5mdW5jdGlvbiBzbGljZVByaXNtU291cmNlKHNvdXJjZSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkge1xuICByZXR1cm4gc291cmNlLnNsaWNlKFxuICAgIHV0ZjhCeXRlT2Zmc2V0VG9VdGYxNk9mZnNldChzb3VyY2UsIHN0YXJ0T2Zmc2V0KSxcbiAgICB1dGY4Qnl0ZU9mZnNldFRvVXRmMTZPZmZzZXQoc291cmNlLCBlbmRPZmZzZXQpXG4gIClcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN1cHBvcnRlZCBQcmlzbSBleHByZXNzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gUHJpc20gbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge1J1YnlDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gW2V4cGVjdGVkVHlwZV0gLSBFeHBsaWNpdCBjb250ZXh0dWFsIHZhbHVlIHR5cGUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVzZXJ2ZU9wdGlvbmFsXSAtIFdoZXRoZXIgYW4gb3B0aW9uYWwgaWRlbnRpZmllciByZW1haW5zIHdyYXBwZWQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEV4cHJlc3Npb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZXhwZWN0ZWRUeXBlLCBwcmVzZXJ2ZU9wdGlvbmFsID0gZmFsc2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIE5pbE5vZGUpIHtcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcHRpb25hbE5vbmVcIiksIGxvY2F0aW9ufSwge2Fic2VuY2U6IGxvY2F0aW9ufSlcbiAgICB9XG4gICAgaWYgKGtub3duRXhwcmVzc2lvblR5cGUobm9kZSwgY29udGV4dCk/LmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgICAgcmV0dXJuIGNvbnZlcnRFeHByZXNzaW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHVuZGVmaW5lZCwgdHJ1ZSlcbiAgICB9XG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxTb21lXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICB2YWx1ZTogY29udmVydEV4cHJlc3Npb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZXhwZWN0ZWRUeXBlLnZhbHVlVHlwZSlcbiAgICB9LCB7c29tZTogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBOaWxOb2RlKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibmlsIG91dHNpZGUgYW4gZXhwbGljaXQgb3B0aW9uYWwgY29udGV4dFwiLCBsb2NhdGlvbilcblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUuYmxvY2spIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiY2FsbCBibG9ja1wiLCBub2RlTG9jYXRpb24obm9kZS5ibG9jaywgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUuY2FsbE9wZXJhdG9yTG9jICYmIHNsaWNlUHJpc21Tb3VyY2UoXG4gICAgc291cmNlLFxuICAgIG5vZGUuY2FsbE9wZXJhdG9yTG9jLnN0YXJ0T2Zmc2V0LFxuICAgIG5vZGUuY2FsbE9wZXJhdG9yTG9jLnN0YXJ0T2Zmc2V0ICsgbm9kZS5jYWxsT3BlcmF0b3JMb2MubGVuZ3RoXG4gICkgPT0gXCImLlwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBub2RlLmNvbnN0cnVjdG9yLm5hbWUsIGxvY2F0aW9uKVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBQYXJlbnRoZXNlc05vZGUgJiYgbm9kZS5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgJiYgbm9kZS5ib2R5LmJvZHkubGVuZ3RoID09IDEpIHtcbiAgICByZXR1cm4gY29udmVydEV4cHJlc3Npb24obm9kZS5ib2R5LmJvZHlbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGV4cGVjdGVkVHlwZSwgcHJlc2VydmVPcHRpb25hbClcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgTG9jYWxWYXJpYWJsZVJlYWROb2RlKSB7XG4gICAgY29uc3QgaWRlbnRpZmllciA9IHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbiwgbmFtZTogbm9kZS5uYW1lfSwge25hbWU6IGxvY2F0aW9ufSlcblxuICAgIGlmICghcHJlc2VydmVPcHRpb25hbCAmJiBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlLm5hbWUpPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcHRpb25hbFVud3JhcFwiKSwgbG9jYXRpb24sIG9wZXJhbmQ6IGlkZW50aWZpZXJ9LCB7dW53cmFwOiBsb2NhdGlvbn0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGlkZW50aWZpZXJcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgU2VsZk5vZGUpIHtcbiAgICBpZiAoIWNvbnRleHQuY3VycmVudENsYXNzKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwic2VsZiBvdXRzaWRlIGEgcmVmZXJlbmNlIGNsYXNzXCIsIGxvY2F0aW9uKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtjbGFzc0lkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGNvbnRleHQuY3VycmVudENsYXNzLmlkKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIpLFxuICAgICAgbG9jYXRpb259LCB7cmVjZWl2ZXI6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgSW5zdGFuY2VWYXJpYWJsZVJlYWROb2RlKSB7XG4gICAgY29uc3QgZmllbGQgPSBjb250ZXh0LmN1cnJlbnRDbGFzcz8uZmllbGRzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gYEAke2NhbmRpZGF0ZS5uYW1lfWAgPT0gbm9kZS5uYW1lKVxuXG4gICAgaWYgKCFmaWVsZCB8fCAhY29udGV4dC5jdXJyZW50Q2xhc3MpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJwcml2YXRlIGluc3RhbmNlIGZpZWxkIG91dHNpZGUgaXRzIGRlY2xhcmluZyBjbGFzc1wiLCBsb2NhdGlvbilcbiAgICBjb25zdCByZWNlaXZlciA9IHdpdGhQYXJzZXJSYW5nZXMoe2NsYXNzSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoY29udGV4dC5jdXJyZW50Q2xhc3MuaWQpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sIHtyZWNlaXZlcjogbG9jYXRpb259KVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2ZpZWxkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGZpZWxkLmlkKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkUmVhZFwiKSxcbiAgICAgIGxvY2F0aW9uLCByZWNlaXZlcn0sIHttZW1iZXI6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgSW50ZWdlck5vZGUpIHtcbiAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKG5vZGUudmFsdWUpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibm9uLXNhZmUgaW50ZWdlciBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkludGVnZXJMaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IG5vZGUudmFsdWV9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBUcnVlTm9kZSB8fCBub2RlIGluc3RhbmNlb2YgRmFsc2VOb2RlKSB7XG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkJvb2xlYW5MaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IG5vZGUgaW5zdGFuY2VvZiBUcnVlTm9kZX0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIFN0cmluZ05vZGUpIHtcbiAgICBjb25zdCBkZWNvZGVkID0gbm9kZS51bmVzY2FwZWRcblxuICAgIGlmICghZGVjb2RlZC52YWxpZEVuY29kaW5nIHx8IGRlY29kZWQuZW5jb2RpbmcgIT0gXCJ1dGYtOFwiIHx8IG5vZGUuaXNGb3JjZWRCaW5hcnlFbmNvZGluZygpIHx8XG4gICAgICAhaGFzT25seVVuaWNvZGVTY2FsYXJzKGRlY29kZWQudmFsdWUpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiaW52YWxpZCBVbmljb2RlIHN0cmluZyBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJTdHJpbmdMaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IGRlY29kZWQudmFsdWV9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBJbnRlcnBvbGF0ZWRTdHJpbmdOb2RlKSB7XG4gICAgaWYgKG5vZGUub3BlbmluZ0xvYyAmJiBzbGljZVByaXNtU291cmNlKHNvdXJjZSwgbm9kZS5vcGVuaW5nTG9jLnN0YXJ0T2Zmc2V0LCBub2RlLm9wZW5pbmdMb2Muc3RhcnRPZmZzZXQgKyBub2RlLm9wZW5pbmdMb2MubGVuZ3RoKS5zdGFydHNXaXRoKFwiPDxcIikpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJoZXJlZG9jIHN0cmluZ1wiLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0cyA9IG5vZGUucGFydHMubWFwKChwYXJ0KSA9PiB7XG4gICAgICBpZiAocGFydCBpbnN0YW5jZW9mIFN0cmluZ05vZGUpIHJldHVybiBjb252ZXJ0RXhwcmVzc2lvbihwYXJ0LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBzY2FsYXJUeXBlKFwic3RyaW5nXCIpKVxuICAgICAgaWYgKHBhcnQgaW5zdGFuY2VvZiBFbWJlZGRlZFN0YXRlbWVudHNOb2RlKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudHMgPSBwYXJ0LnN0YXRlbWVudHNcblxuICAgICAgICBpZiAoIXN0YXRlbWVudHMgfHwgc3RhdGVtZW50cy5ib2R5Lmxlbmd0aCAhPSAxKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiaW50ZXJwb2xhdGVkIHN0YXRlbWVudFwiLCBub2RlTG9jYXRpb24ocGFydCwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgICAgICAgcmV0dXJuIGNvbnZlcnRFeHByZXNzaW9uKHN0YXRlbWVudHMuYm9keVswXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgc2NhbGFyVHlwZShcInN0cmluZ1wiKSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBwYXJ0LmNvbnN0cnVjdG9yLm5hbWUsIG5vZGVMb2NhdGlvbihwYXJ0LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9KVxuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PSAwKSByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiU3RyaW5nTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBcIlwifSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcblxuICAgIGxldCBsb3dlcmVkID0gcGFydHNbMF1cblxuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cy5zbGljZSgxKSkge1xuICAgICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih7XG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkJpbmFyeUV4cHJlc3Npb25cIiksXG4gICAgICAgIGxlZnQ6IGxvd2VyZWQsXG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICByaWdodDogcGFydFxuICAgICAgfSwgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy9vcGVyYXRvcnMuanNcIikuQWRhcHRlZE9wZXJhdGlvbn0gKi8gKFwiU3RyaW5nQ29uY2F0XCIpKVxuXG4gICAgICBsb3dlcmVkID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGxvd2VyZWQsIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIElmTm9kZSAmJiAhbm9kZS5pZktleXdvcmRMb2MpIHtcbiAgICBjb25zdCBlbHNlQ2xhdXNlID0gbm9kZS5zdWJzZXF1ZW50XG4gICAgY29uc3QgY29uc2VxdWVudFN0YXRlbWVudHMgPSBub2RlLnN0YXRlbWVudHNcbiAgICBjb25zdCBjb25zZXF1ZW50QXJtID0gY29uc2VxdWVudFN0YXRlbWVudHMgJiYgY29uc2VxdWVudFN0YXRlbWVudHMuYm9keS5sZW5ndGggPT0gMSA/IGNvbnNlcXVlbnRTdGF0ZW1lbnRzLmJvZHlbMF0gOiB1bmRlZmluZWRcblxuICAgIGlmICghKGVsc2VDbGF1c2UgaW5zdGFuY2VvZiBFbHNlTm9kZSkgfHwgIWVsc2VDbGF1c2Uuc3RhdGVtZW50cyB8fCBlbHNlQ2xhdXNlLnN0YXRlbWVudHMuYm9keS5sZW5ndGggIT0gMSB8fCAhY29uc2VxdWVudEFybSB8fCAhbm9kZS50aGVuS2V5d29yZExvYykge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInRlcm5hcnkgd2l0aG91dCBhbHRlcm5hdGVcIiwgbG9jYXRpb24pXG4gICAgfVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgYWx0ZXJuYXRlOiBjb252ZXJ0RXhwcmVzc2lvbihlbHNlQ2xhdXNlLnN0YXRlbWVudHMuYm9keVswXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBjb25kaXRpb246IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucHJlZGljYXRlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGNvbnNlcXVlbnQ6IGNvbnZlcnRFeHByZXNzaW9uKGNvbnNlcXVlbnRBcm0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIpLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7XG4gICAgICBhbHRlcm5hdGU6IG5vZGVMb2NhdGlvbihlbHNlQ2xhdXNlLnN0YXRlbWVudHMuYm9keVswXSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBjb2xvbjogcHJpc21Mb2NhdGlvbihlbHNlQ2xhdXNlLmVsc2VLZXl3b3JkTG9jID8/IGVsc2VDbGF1c2UubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgY29uZGl0aW9uOiBub2RlTG9jYXRpb24obm9kZS5wcmVkaWNhdGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgY29uc2VxdWVudDogbm9kZUxvY2F0aW9uKGNvbnNlcXVlbnRBcm0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgb3BlcmF0b3I6IHByaXNtTG9jYXRpb24obm9kZS50aGVuS2V5d29yZExvYywgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KSkpXG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIE9yTm9kZSAmJiBub2RlLmxlZnQgaW5zdGFuY2VvZiBMb2NhbFZhcmlhYmxlUmVhZE5vZGUgJiZcbiAgICBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlLmxlZnQubmFtZSk/LmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJvcHRpb25hbCBkZWZhdWx0IHdpdGggfHxcIiwgcHJpc21Mb2NhdGlvbihub2RlLm9wZXJhdG9yTG9jLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIGlmIChleGFjdE5pbFRlc3Qobm9kZSwgc291cmNlKSkge1xuICAgIGNvbnN0IGNhbGwgPSAvKiogQHR5cGUge0NhbGxOb2RlfSAqLyAobm9kZSlcbiAgICBjb25zdCByZWNlaXZlciA9IC8qKiBAdHlwZSB7TG9jYWxWYXJpYWJsZVJlYWROb2RlfSAqLyAoY2FsbC5yZWNlaXZlcilcbiAgICBjb25zdCBvcGVyYW5kID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZGVudGlmaWVyRXhwcmVzc2lvbn0gKi8gKFxuICAgICAgY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHVuZGVmaW5lZCwgdHJ1ZSlcbiAgICApXG4gICAgY29uc3QgcHJlc2VudCA9IHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsSXNQcmVzZW50XCIpLCBsb2NhdGlvbiwgb3BlcmFuZH0sIHtcbiAgICAgIG9wZXJhdG9yOiBwcmlzbUxvY2F0aW9uKGNhbGwubWVzc2FnZUxvYyA/PyBjYWxsLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IFwiVW5hcnlFeHByZXNzaW9uXCIsXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG9wZXJhbmQ6IHByZXNlbnRcbiAgICB9LCB7b3BlcmF0b3I6IHByaXNtTG9jYXRpb24oY2FsbC5tZXNzYWdlTG9jID8/IGNhbGwubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpfSksIFwiTm90XCIpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBBcnJheU5vZGUpIHtcbiAgICBpZiAoIW5vZGUub3BlbmluZ0xvYyB8fCAhbm9kZS5jbG9zaW5nTG9jKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwic3BlY2lhbCBhcnJheSBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuICAgIGlmIChub2RlLmlzQ29udGFpbnNTcGxhdCgpKSB7XG4gICAgICBjb25zdCBzcGxhdCA9IG5vZGUuZWxlbWVudHMuZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5jb25zdHJ1Y3Rvci5uYW1lID09IFwiU3BsYXROb2RlXCIpXG5cbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJhcnJheSBzcGxhdFwiLCBzcGxhdCA/IG5vZGVMb2NhdGlvbihzcGxhdCwgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvbilcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50VHlwZSA9IGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIkxpc3RUeXBlXCIgPyBleHBlY3RlZFR5cGUuZWxlbWVudFR5cGUgOiB1bmRlZmluZWRcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGVsZW1lbnRzOiBub2RlLmVsZW1lbnRzLm1hcCgoZWxlbWVudCkgPT4gY29udmVydEV4cHJlc3Npb24oZWxlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZWxlbWVudFR5cGUpKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkxpc3RMaXRlcmFsXCIpLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7XG4gICAgICBjbG9zZTogcHJpc21Mb2NhdGlvbihub2RlLmNsb3NpbmdMb2MsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgb3BlbjogcHJpc21Mb2NhdGlvbihub2RlLm9wZW5pbmdMb2MsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgSGFzaE5vZGUpIHtcbiAgICBjb25zdCB2YWx1ZVR5cGUgPSBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJNYXBUeXBlXCIgfHwgZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIlxuICAgICAgPyBleHBlY3RlZFR5cGUudmFsdWVUeXBlIDogdW5kZWZpbmVkXG4gICAgY29uc3QgZW50cmllcyA9IG5vZGUuZWxlbWVudHMubWFwKChlbGVtZW50KSA9PiB7XG4gICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgQXNzb2NOb2RlKSB8fCAhZWxlbWVudC5vcGVyYXRvckxvYyB8fFxuICAgICAgICBzbGljZVByaXNtU291cmNlKHNvdXJjZSwgZWxlbWVudC5vcGVyYXRvckxvYy5zdGFydE9mZnNldCwgZWxlbWVudC5vcGVyYXRvckxvYy5zdGFydE9mZnNldCArIGVsZW1lbnQub3BlcmF0b3JMb2MubGVuZ3RoKSAhPSBcIj0+XCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImhhc2ggZW50cnlcIiwgbm9kZUxvY2F0aW9uKGVsZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgaWYgKCEoZWxlbWVudC5rZXkgaW5zdGFuY2VvZiBTdHJpbmdOb2RlKSkge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibWFwIGtleSBvdGhlciB0aGFuIGEgc3RyaW5nIGxpdGVyYWxcIiwgbm9kZUxvY2F0aW9uKGVsZW1lbnQua2V5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleSA9IGNvbnZlcnRFeHByZXNzaW9uKGVsZW1lbnQua2V5LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGtleTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdHJpbmdMaXRlcmFsfSAqLyAoa2V5KSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwRW50cnlcIiksXG4gICAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oZWxlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIHZhbHVlOiBjb252ZXJ0RXhwcmVzc2lvbihlbGVtZW50LnZhbHVlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCB2YWx1ZVR5cGUpXG4gICAgICB9LCB7b3BlcmF0b3I6IHByaXNtTG9jYXRpb24oZWxlbWVudC5vcGVyYXRvckxvYywgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBlbnRyaWVzLFxuICAgICAga2luZDogZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIlxuICAgICAgICA/IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9yZGVyZWRNYXBMaXRlcmFsXCIpXG4gICAgICAgIDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwTGl0ZXJhbFwiKSxcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge1xuICAgICAgY2xvc2U6IHByaXNtTG9jYXRpb24obm9kZS5jbG9zaW5nTG9jLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG9wZW46IHByaXNtTG9jYXRpb24obm9kZS5vcGVuaW5nTG9jLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIChub2RlLnJlY2VpdmVyIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSB8fCBub2RlLnJlY2VpdmVyIGluc3RhbmNlb2YgQ29uc3RhbnRQYXRoTm9kZSkgJiYgbm9kZS5uYW1lID09IFwibmV3XCIgJiZcbiAgICBub2RlLmNhbGxPcGVyYXRvckxvYyAmJiAhbm9kZS5ibG9jaykge1xuICAgIGNvbnN0IHJlY29yZE5hbWUgPSBjb25zdGFudFBhdGhOYW1lKG5vZGUucmVjZWl2ZXIpXG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBjb250ZXh0LnJlY29yZE5hbWVzLmdldChyZWNvcmROYW1lKVxuXG4gICAgaWYgKCFkZWNsYXJhdGlvbikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImNvbnN0cnVjdGlvbiBvZiBhIG5vbi1yZWNvcmQgY2xhc3NcIiwgbm9kZUxvY2F0aW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGlmIChkZWNsYXJhdGlvbi5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKSB7XG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiAobm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfID8/IFtdKS5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT5cbiAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLnBhcmFtZXRlcnNbaW5kZXhdPy50eXBlKSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWZlcmVuY2VDb25zdHJ1Y3Rpb25cIiksIGxvY2F0aW9uLFxuICAgICAgcmVmZXJlbmNlOiByZWZlcmVuY2VUeXBlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBub2RlTG9jYXRpb24obm9kZS5yZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSkpfSxcbiAgICAgIHtjbGFzczogbm9kZUxvY2F0aW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJFZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJvd25lZCByZXNvdXJjZSBjb25zdHJ1Y3Rpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCB0eXBlQXJndW1lbnRzID0gZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiUmVjb3JkVHlwZVwiICYmIGV4cGVjdGVkVHlwZS5kZWNsYXJhdGlvbklkID09IGRlY2xhcmF0aW9uLmlkXG4gICAgICA/IGV4cGVjdGVkVHlwZS5hcmd1bWVudHNcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBhcmd1bWVudHM6IChub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18gPz8gW10pLm1hcCgoYXJndW1lbnQsIGluZGV4KSA9PlxuICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCxcbiAgICAgICAgICBpbnN0YW50aWF0ZWRSZWNvcmRGaWVsZFR5cGUoZGVjbGFyYXRpb24sIHR5cGVBcmd1bWVudHMsIGluZGV4KSkpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkQ29uc3RydWN0aW9uXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICByZWNvcmQ6IHJlY29yZFR5cGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIG5vZGVMb2NhdGlvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgdHlwZUFyZ3VtZW50cylcbiAgICB9LCB7cmVjb3JkOiBub2RlTG9jYXRpb24obm9kZS5yZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyICYmIG5vZGUubmFtZSA9PSBcIiFcIikge1xuICAgIGNvbnN0IG9wZXJhdG9yTG9jYXRpb24gPSBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgaWYgKG5vZGUuY2FsbE9wZXJhdG9yTG9jKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwicXVhbGlmaWVkIGJvb2xlYW4gbm90XCIsIG9wZXJhdG9yTG9jYXRpb24pXG4gICAgaWYgKG5vZGUubWVzc2FnZUxvYz8ubGVuZ3RoICE9IDEpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJwcmVjZWRlbmNlLXNlbnNpdGl2ZSBib29sZWFuIG5vdFwiLCBvcGVyYXRvckxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAobm9kZS5hcmd1bWVudHNfKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiYm9vbGVhbiBub3QgYXJndW1lbnQgbGlzdFwiLCBvcGVyYXRvckxvY2F0aW9uKVxuXG4gICAgY29uc3Qgb3BlcmFuZCA9IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG5cbiAgICBpZiAob3BlcmFuZC5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIgJiYgb3BlcmFuZC5vcGVyYW5kLmtpbmQgPT0gXCJPcHRpb25hbElzUHJlc2VudFwiKSB7XG4gICAgICByZXR1cm4gb3BlcmFuZC5vcGVyYW5kXG4gICAgfVxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIlVuYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBvcGVyYW5kXG4gICAgfSwge29wZXJhdG9yOiBvcGVyYXRvckxvY2F0aW9ufSksIFwiTm90XCIpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyICYmIG5vZGUubmFtZSA9PSBcIi1AXCIpIHtcbiAgICBjb25zdCBvcGVyYXRvckxvY2F0aW9uID0gcHJpc21Mb2NhdGlvbihub2RlLm1lc3NhZ2VMb2MgPz8gbm9kZS5sb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChub2RlLmNhbGxPcGVyYXRvckxvYykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInF1YWxpZmllZCBpbnRlZ2VyIG5lZ2F0aW9uXCIsIG9wZXJhdG9yTG9jYXRpb24pXG4gICAgaWYgKG5vZGUuYXJndW1lbnRzXykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImludGVnZXIgbmVnYXRpb24gYXJndW1lbnQgbGlzdFwiLCBvcGVyYXRvckxvY2F0aW9uKVxuXG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IFwiVW5hcnlFeHByZXNzaW9uXCIsXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG9wZXJhbmQ6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgfSwge29wZXJhdG9yOiBvcGVyYXRvckxvY2F0aW9ufSksIFwiTmVnYXRlXCIpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBBbmROb2RlIHx8IG5vZGUgaW5zdGFuY2VvZiBPck5vZGUpIHtcbiAgICBjb25zdCBvcGVyYXRvckxvY2F0aW9uID0gcHJpc21Mb2NhdGlvbihub2RlLm9wZXJhdG9yTG9jLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHNvdXJjZU9wZXJhdG9yID0gc291cmNlLnNsaWNlKG9wZXJhdG9yTG9jYXRpb24uc3RhcnQub2Zmc2V0LCBvcGVyYXRvckxvY2F0aW9uLmVuZC5vZmZzZXQpXG5cbiAgICBpZiAoc291cmNlT3BlcmF0b3IgIT0gXCImJlwiICYmIHNvdXJjZU9wZXJhdG9yICE9IFwifHxcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBgcHJlY2VkZW5jZS1zZW5zaXRpdmUgYm9vbGVhbiAke3NvdXJjZU9wZXJhdG9yfWAsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIkJpbmFyeUV4cHJlc3Npb25cIixcbiAgICAgIGxlZnQ6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUubGVmdCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJpZ2h0OiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnJpZ2h0LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH0sIHtvcGVyYXRvcjogb3BlcmF0b3JMb2NhdGlvbn0pLCBub2RlIGluc3RhbmNlb2YgQW5kTm9kZSA/IFwiQW5kXCIgOiBcIk9yXCIpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyICYmIHJ1YnlCaW5hcnlPcGVyYXRpb25zLmhhcyhub2RlLm5hbWUpICYmIG5vZGUuY2FsbE9wZXJhdG9yTG9jICYmXG4gICAgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCA9PSAxKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFxuICAgICAgXCJydWJ5XCIsXG4gICAgICBgcXVhbGlmaWVkIGJpbmFyeSBvcGVyYXRvciAke25vZGUubmFtZX1gLFxuICAgICAgcHJpc21Mb2NhdGlvbihub2RlLm1lc3NhZ2VMb2MgPz8gbm9kZS5sb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICApXG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUucmVjZWl2ZXIgJiYgcnVieUJpbmFyeU9wZXJhdGlvbnMuaGFzKG5vZGUubmFtZSkgJiYgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCA9PSAxKSB7XG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IFwiQmluYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbGVmdDogY29udmVydEV4cHJlc3Npb24obm9kZS5yZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJpZ2h0OiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9LCB7b3BlcmF0b3I6IHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jID8/IG5vZGUubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpfSksIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCIpLkFkYXB0ZWRPcGVyYXRpb259ICovIChydWJ5QmluYXJ5T3BlcmF0aW9ucy5nZXQobm9kZS5uYW1lKSkpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyICYmIG5vZGUubmFtZSA9PSBcIltdXCIgJiYgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCA9PSAxICYmXG4gICAgIW5vZGUuY2FsbE9wZXJhdG9yTG9jICYmICFub2RlLmJsb2NrKSB7XG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgY29sbGVjdGlvbjogY29udmVydEV4cHJlc3Npb24obm9kZS5yZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBpbmRleDogY29udmVydEV4cHJlc3Npb24obm9kZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTGlzdEluZGV4RXhwcmVzc2lvblwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgdG90YWxpdHk6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcInByb3ZlblwiKVxuICAgIH0sIHtvcGVyYXRvcjogcHJpc21Mb2NhdGlvbihub2RlLm9wZW5pbmdMb2MgPz8gbm9kZS5tZXNzYWdlTG9jID8/IG5vZGUubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUucmVjZWl2ZXIgJiYgbm9kZS5uYW1lID09IFwiZmV0Y2hcIiAmJiBub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoID09IDEgJiZcbiAgICBub2RlLmNhbGxPcGVyYXRvckxvYyAmJiAhbm9kZS5ibG9jaykge1xuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGNvbGxlY3Rpb246IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAga2V5OiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNYXBMb29rdXBFeHByZXNzaW9uXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICB0b3RhbGl0eTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiZmFpbC1vbi1hYnNlbmNlXCIpXG4gICAgfSwge29wZXJhdG9yOiBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSAmJiBub2RlLmNhbGxPcGVyYXRvckxvYyAmJiAhbm9kZS5ibG9jaykge1xuICAgIGNvbnN0IGNhbGxlZSA9IGAke25vZGUucmVjZWl2ZXIubmFtZX0uJHtub2RlLm5hbWV9YFxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNvbnRleHQuZnVuY3Rpb25zLmdldChjYWxsZWUpXG5cbiAgICBpZiAoc2lnbmF0dXJlKSB7XG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGFyZ3VtZW50czogKG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXyA/PyBbXSkubWFwKChhcmd1bWVudCwgaW5kZXgpID0+XG4gICAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHNpZ25hdHVyZS5wYXJhbWV0ZXJzW2luZGV4XT8udHlwZSxcbiAgICAgICAgICAgIHByZXNlcnZlc0dlbmVyaWNPcHRpb25hbEV2aWRlbmNlKHNpZ25hdHVyZSwgaW5kZXgpKSksXG4gICAgICAgIGNhbGxlZSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2FsbEV4cHJlc3Npb25cIiksXG4gICAgICAgIGxvY2F0aW9uXG4gICAgICB9LCB7Y2FsbGVlOiBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICB9XG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgbm9kZS5yZWNlaXZlciAmJiBub2RlLm5hbWUgPT0gXCJzaXplXCIgJiYgIW5vZGUuYXJndW1lbnRzXyAmJiBub2RlLmNhbGxPcGVyYXRvckxvYyAmJiAhbm9kZS5ibG9jaykge1xuICAgIGNvbnN0IHJlY2VpdmVyVHlwZSA9IGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLnJlY2VpdmVyLCBjb250ZXh0KVxuXG4gICAgaWYgKHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIlJlY29yZFR5cGVcIikge1xuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBmaWVsZDogbm9kZS5uYW1lLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNZW1iZXJSZWFkXCIpLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgcmVjZWl2ZXI6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgICB9LCB7bWVtYmVyOiBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGNvbGxlY3Rpb246IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ29sbGVjdGlvblNpemVFeHByZXNzaW9uXCIpLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7b3BlcmF0b3I6IHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jID8/IG5vZGUubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBMb2NhbFZhcmlhYmxlUmVhZE5vZGUgJiYgbm9kZS5uYW1lID09IFwibWVzc2FnZVwiICYmXG4gICAgIW5vZGUuYXJndW1lbnRzXyAmJiBub2RlLmNhbGxPcGVyYXRvckxvYyAmJiAhbm9kZS5ibG9jayAmJiBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlLnJlY2VpdmVyLm5hbWUpPy5raW5kID09IFwiRXJyb3JUeXBlXCIpIHtcbiAgICBjb25zdCByZWNlaXZlckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvck1lc3NhZ2VSZWFkXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICByZWNlaXZlcjogd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksIGxvY2F0aW9uOiByZWNlaXZlckxvY2F0aW9uLCBuYW1lOiBub2RlLnJlY2VpdmVyLm5hbWV9LCB7XG4gICAgICAgIG5hbWU6IHJlY2VpdmVyTG9jYXRpb25cbiAgICAgIH0pXG4gICAgfSwge21lbWJlcjogcHJpc21Mb2NhdGlvbihub2RlLm1lc3NhZ2VMb2MgPz8gbm9kZS5sb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgbm9kZS5yZWNlaXZlciAmJiBub2RlLmNhbGxPcGVyYXRvckxvYyAmJiAhbm9kZS5ibG9jayAmJlxuICAgIGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLnJlY2VpdmVyLCBjb250ZXh0KT8ua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIikge1xuICAgIGNvbnN0IHJlY2VpdmVyVHlwZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVmZXJlbmNlVHlwZX0gKi8gKGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLnJlY2VpdmVyLCBjb250ZXh0KSlcbiAgICBjb25zdCBtZXRob2QgPSBjb250ZXh0LmNsYXNzZXMuZ2V0KHJlY2VpdmVyVHlwZS5kZWNsYXJhdGlvbklkKT8ubWV0aG9kcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5uYW1lID09IG5vZGUubmFtZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHthcmd1bWVudHM6IChub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18gPz8gW10pLm1hcCgoYXJndW1lbnQsIGluZGV4KSA9PlxuICAgICAgY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIG1ldGhvZD8ucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUpKSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNZXRob2RDYWxsRXhwcmVzc2lvblwiKSwgbG9jYXRpb24sIG1ldGhvZDogbWV0aG9kPy5pZCA/PyBub2RlLm5hbWUsXG4gICAgcmVjZWl2ZXI6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpfSxcbiAgICB7bWVtYmVyOiBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyICYmIG5vZGUuY2FsbE9wZXJhdG9yTG9jICYmICFub2RlLmFyZ3VtZW50c18gJiYgIW5vZGUuYmxvY2spIHtcbiAgICBpZiAoW1wic2VuZFwiLCBcInB1YmxpY19zZW5kXCIsIFwiX19zZW5kX19cIiwgXCJpbnN0YW5jZV92YXJpYWJsZV9nZXRcIiwgXCJtZXRob2RcIl0uaW5jbHVkZXMobm9kZS5uYW1lKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImR5bmFtaWMgb3IgcmVmbGVjdGl2ZSBtZW1iZXIgYWNjZXNzXCIsIHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jID8/IG5vZGUubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBmaWVsZDogbm9kZS5uYW1lLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWVtYmVyUmVhZFwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmVjZWl2ZXI6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgfSwge21lbWJlcjogcHJpc21Mb2NhdGlvbihub2RlLm1lc3NhZ2VMb2MgPz8gbm9kZS5sb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiAhbm9kZS5yZWNlaXZlcikge1xuICAgIGlmIChbXCJzZW5kXCIsIFwicHVibGljX3NlbmRcIiwgXCJfX3NlbmRfX1wiXS5pbmNsdWRlcyhub2RlLm5hbWUpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiZHluYW1pYyBjYWxsXCIsIHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jID8/IG5vZGUubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCBzaWduYXR1cmUgPSBjb250ZXh0LmZ1bmN0aW9ucy5nZXQobm9kZS5uYW1lKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgYXJndW1lbnRzOiAobm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfID8/IFtdKS5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT5cbiAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHNpZ25hdHVyZT8ucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUsXG4gICAgICAgICAgcHJlc2VydmVzR2VuZXJpY09wdGlvbmFsRXZpZGVuY2Uoc2lnbmF0dXJlLCBpbmRleCkpKSxcbiAgICAgIGNhbGxlZTogbm9kZS5uYW1lLFxuICAgICAga2luZDogXCJDYWxsRXhwcmVzc2lvblwiLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7Y2FsbGVlOiBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyKSB7XG4gICAgY29uc3QgdW5zdXBwb3J0ZWRMb2NhdGlvbiA9ICFub2RlLmNhbGxPcGVyYXRvckxvYyAmJiBub2RlLm1lc3NhZ2VMb2MgJiYgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCA9PSAxXG4gICAgICA/IHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgOiBub2RlTG9jYXRpb24obm9kZS5yZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgbm9kZS5jb25zdHJ1Y3Rvci5uYW1lLCB1bnN1cHBvcnRlZExvY2F0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBub2RlLmNvbnN0cnVjdG9yLm5hbWUsIGxvY2F0aW9uKVxufVxuXG4vKipcbiAqIFJlc29sdmVzIG9ubHkgcmVzdWx0IHR5cGVzIGVzdGFibGlzaGVkIGJ5IGV4cGxpY2l0IHNpZ25hdHVyZXMgYW5kIGJpbmRpbmdzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gUGFyc2VyLW93bmVkIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge1J1YnlDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZSB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yVHlwZSB8IHVuZGVmaW5lZH0gS25vd24gcmVzdWx0IHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGtub3duRXhwcmVzc2lvblR5cGUobm9kZSwgY29udGV4dCkge1xuICBpZiAobm9kZSBpbnN0YW5jZW9mIFBhcmVudGhlc2VzTm9kZSAmJiBub2RlLmJvZHkgaW5zdGFuY2VvZiBTdGF0ZW1lbnRzTm9kZSAmJiBub2RlLmJvZHkuYm9keS5sZW5ndGggPT0gMSkge1xuICAgIHJldHVybiBrbm93bkV4cHJlc3Npb25UeXBlKG5vZGUuYm9keS5ib2R5WzBdLCBjb250ZXh0KVxuICB9XG4gIGlmIChub2RlIGluc3RhbmNlb2YgTG9jYWxWYXJpYWJsZVJlYWROb2RlKSByZXR1cm4gY29udGV4dC5iaW5kaW5ncy5nZXQobm9kZS5uYW1lKVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmICFub2RlLnJlY2VpdmVyKSB7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KG5vZGUubmFtZSlcblxuICAgIGlmIChzaWduYXR1cmUpIHJldHVybiBrbm93bkNhbGxSZXR1cm5UeXBlKHNpZ25hdHVyZSwgKG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXyA/PyBbXSkubWFwKChhcmd1bWVudCkgPT5cbiAgICAgIGtub3duRXhwcmVzc2lvblR5cGUoYXJndW1lbnQsIGNvbnRleHQpKSlcbiAgfVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBDb25zdGFudFJlYWROb2RlKSB7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KGAke25vZGUucmVjZWl2ZXIubmFtZX0uJHtub2RlLm5hbWV9YClcblxuICAgIGlmIChzaWduYXR1cmUpIHJldHVybiBrbm93bkNhbGxSZXR1cm5UeXBlKHNpZ25hdHVyZSwgKG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXyA/PyBbXSkubWFwKChhcmd1bWVudCkgPT5cbiAgICAgIGtub3duRXhwcmVzc2lvblR5cGUoYXJndW1lbnQsIGNvbnRleHQpKSlcbiAgfVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUucmVjZWl2ZXIgJiYgbm9kZS5uYW1lID09IFwiW11cIikge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25UeXBlID0ga25vd25WYWx1ZUV4cHJlc3Npb25UeXBlKG5vZGUucmVjZWl2ZXIsIGNvbnRleHQpXG5cbiAgICBpZiAoY29sbGVjdGlvblR5cGU/LmtpbmQgPT0gXCJMaXN0VHlwZVwiKSByZXR1cm4gY29sbGVjdGlvblR5cGUuZWxlbWVudFR5cGVcbiAgfVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUucmVjZWl2ZXIgJiYgbm9kZS5uYW1lID09IFwiZmV0Y2hcIikge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25UeXBlID0ga25vd25WYWx1ZUV4cHJlc3Npb25UeXBlKG5vZGUucmVjZWl2ZXIsIGNvbnRleHQpXG5cbiAgICBpZiAoY29sbGVjdGlvblR5cGU/LmtpbmQgPT0gXCJNYXBUeXBlXCIgfHwgY29sbGVjdGlvblR5cGU/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiKSByZXR1cm4gY29sbGVjdGlvblR5cGUudmFsdWVUeXBlXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiAobm9kZS5yZWNlaXZlciBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUgfHwgbm9kZS5yZWNlaXZlciBpbnN0YW5jZW9mIENvbnN0YW50UGF0aE5vZGUpICYmIG5vZGUubmFtZSA9PSBcIm5ld1wiKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBjb250ZXh0LnJlY29yZE5hbWVzLmdldChjb25zdGFudFBhdGhOYW1lKG5vZGUucmVjZWl2ZXIpKVxuXG4gICAgaWYgKGRlY2xhcmF0aW9uPy5pZCkgcmV0dXJuIGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCJcbiAgICAgID8ge2RlY2xhcmF0aW9uSWQ6IGRlY2xhcmF0aW9uLmlkLCBraW5kOiBcIlJlZmVyZW5jZVR5cGVcIn1cbiAgICAgIDoge2RlY2xhcmF0aW9uSWQ6IGRlY2xhcmF0aW9uLmlkLCBraW5kOiBcIlJlY29yZFR5cGVcIn1cbiAgfVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIFNlbGZOb2RlICYmIGNvbnRleHQuY3VycmVudENsYXNzPy5pZCkgcmV0dXJuIHtkZWNsYXJhdGlvbklkOiBjb250ZXh0LmN1cnJlbnRDbGFzcy5pZCwga2luZDogXCJSZWZlcmVuY2VUeXBlXCJ9XG4gIGlmIChub2RlIGluc3RhbmNlb2YgSW5zdGFuY2VWYXJpYWJsZVJlYWROb2RlICYmIGNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgcmV0dXJuIGNvbnRleHQuY3VycmVudENsYXNzLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gYEAke2ZpZWxkLm5hbWV9YCA9PSBub2RlLm5hbWUpPy50eXBlXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyICYmIG5vZGUuY2FsbE9wZXJhdG9yTG9jKSB7XG4gICAgY29uc3QgcmVjZWl2ZXIgPSBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5yZWNlaXZlciwgY29udGV4dClcblxuICAgIGlmIChyZWNlaXZlcj8ua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIikge1xuICAgICAgcmV0dXJuIGNvbnRleHQuY2xhc3Nlcy5nZXQocmVjZWl2ZXIuZGVjbGFyYXRpb25JZCk/Lm1ldGhvZHMuZmluZCgobWV0aG9kKSA9PiBtZXRob2QubmFtZSA9PSBub2RlLm5hbWUpPy5yZXR1cm5UeXBlXG4gICAgfVxuICAgIGlmIChub2RlLmFyZ3VtZW50c18pIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAocmVjZWl2ZXI/LmtpbmQgIT0gXCJSZWNvcmRUeXBlXCIpIHJldHVybiB1bmRlZmluZWRcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGNvbnRleHQucmVjb3Jkcy5nZXQocmVjZWl2ZXIuZGVjbGFyYXRpb25JZClcbiAgICBjb25zdCBpbmRleCA9IGRlY2xhcmF0aW9uPy5maWVsZHMuZmluZEluZGV4KChmaWVsZCkgPT4gZmllbGQubmFtZSA9PSBub2RlLm5hbWUpID8/IC0xXG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb24gPyBpbnN0YW50aWF0ZWRSZWNvcmRGaWVsZFR5cGUoZGVjbGFyYXRpb24sIHJlY2VpdmVyLmFyZ3VtZW50cywgaW5kZXgpIDogdW5kZWZpbmVkXG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIHZhbHVlIHR5cGUgcHJvZHVjZWQgYnkgdGhlIGZyb250ZW5kJ3MgaW1wbGljaXQgb3B0aW9uYWwtYmluZGluZyB1bndyYXAuXG4gKiBTZW1hbnRpYyB2YWxpZGF0aW9uIHNlcGFyYXRlbHkgcHJvdmVzIHRoYXQgdGhlIHVud3JhcCBvY2N1cnMgb25seSBvbiBhIHByZXNlbnQgcGF0aC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZX0gbm9kZSAtIFBhcnNlci1vd25lZCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGUgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvclR5cGUgfCB1bmRlZmluZWR9IENvbnZlcnRlZCB2YWx1ZSB0eXBlLlxuICovXG5mdW5jdGlvbiBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZSwgY29udGV4dCkge1xuICBpZiAobm9kZSBpbnN0YW5jZW9mIFBhcmVudGhlc2VzTm9kZSAmJiBub2RlLmJvZHkgaW5zdGFuY2VvZiBTdGF0ZW1lbnRzTm9kZSAmJiBub2RlLmJvZHkuYm9keS5sZW5ndGggPT0gMSkge1xuICAgIHJldHVybiBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5ib2R5LmJvZHlbMF0sIGNvbnRleHQpXG4gIH1cbiAgY29uc3QgdHlwZSA9IGtub3duRXhwcmVzc2lvblR5cGUobm9kZSwgY29udGV4dClcblxuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVSZWFkTm9kZSAmJiB0eXBlPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIgPyB0eXBlLnZhbHVlVHlwZSA6IHR5cGVcbn1cblxuLyoqXG4gKiBSZWNvZ25pemVzIG9ubHkgdGhlIHBhcnNlci1iYWNrZWQgYGlkZW50aWZpZXIubmlsP2Agc3BlbGxpbmcgdXNlZCBieSBUYXNrIDAwNy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZX0gbm9kZSAtIENhbmRpZGF0ZSBQcmlzbSBleHByZXNzaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoaXMgaXMgb25lIGV4YWN0IG5pbCB0ZXN0LlxuICovXG5mdW5jdGlvbiBleGFjdE5pbFRlc3Qobm9kZSwgc291cmNlKSB7XG4gIGlmICghKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSkgfHwgIShub2RlLnJlY2VpdmVyIGluc3RhbmNlb2YgTG9jYWxWYXJpYWJsZVJlYWROb2RlKSB8fFxuICAgIG5vZGUubmFtZSAhPSBcIm5pbD9cIiB8fCAhbm9kZS5jYWxsT3BlcmF0b3JMb2MgfHwgbm9kZS5hcmd1bWVudHNfIHx8IG5vZGUuYmxvY2spIHJldHVybiBmYWxzZVxuXG4gIHJldHVybiBzbGljZVByaXNtU291cmNlKFxuICAgIHNvdXJjZSxcbiAgICBub2RlLmNhbGxPcGVyYXRvckxvYy5zdGFydE9mZnNldCxcbiAgICBub2RlLmNhbGxPcGVyYXRvckxvYy5zdGFydE9mZnNldCArIG5vZGUuY2FsbE9wZXJhdG9yTG9jLmxlbmd0aFxuICApID09IFwiLlwiXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4cGxpY2l0IFJ1YnkgcmV0dXJuLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gUHJpc20gbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge1J1YnlDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJldHVyblN0YXRlbWVudH0gU2VtYW50aWMgcmV0dXJuLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UmV0dXJuKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoIShub2RlIGluc3RhbmNlb2YgUmV0dXJuTm9kZSkgfHwgKG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggPz8gMCkgPiAxKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBub2RlLmNvbnN0cnVjdG9yLm5hbWUsIGxvY2F0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi4obm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfWzBdID8ge2V4cHJlc3Npb246IGNvbnZlcnRFeHByZXNzaW9uKFxuICAgICAgbm9kZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0sXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIHNvdXJjZSxcbiAgICAgIGNvbnRleHQsXG4gICAgICBjb250ZXh0LnJldHVyblR5cGU/LmtpbmQgPT0gXCJUeXBlUmVmZXJlbmNlXCIgJiYgY29udGV4dC5yZXR1cm5UeXBlLm5hbWUgPT0gXCJ2b2lkXCIgPyB1bmRlZmluZWQgOiBjb250ZXh0LnJldHVyblR5cGVcbiAgICApfSA6IHt9KSxcbiAgICBraW5kOiBcIlJldHVyblN0YXRlbWVudFwiLFxuICAgIGxvY2F0aW9uXG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkcyBQcmlzbS1vd25lZCBSQlMtc3R5bGUgdHlwZSBjb21tZW50cyBkaXJlY3RseSBwcmVjZWRpbmcgYSBkZWZpbml0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFByaXNtIGNvbW1lbnRzLlxuICogQHBhcmFtIHt7bG9jYXRpb246IGltcG9ydChcIkBydWJ5L3ByaXNtXCIpLkxvY2F0aW9ufX0gbm9kZSAtIENvbW1lbnQgb3duZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvd25lcklkXSAtIFN0YWJsZSBkZWNsYXJhdGlvbiBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHt7cGFyYW1ldGVyczogTWFwPHN0cmluZywge2xvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgc291cmNlVHlwZTogc3RyaW5nfT4sIHJldHVyblR5cGU6IHtsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNvdXJjZVR5cGU6IHN0cmluZ30gfCB1bmRlZmluZWQsIHR5cGVQYXJhbWV0ZXJzPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcltdfX0gRGVjbGFyZWQgdHlwZXMuXG4gKi9cbmZ1bmN0aW9uIHR5cGVDb21tZW50cyhjb21tZW50cywgbm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgb3duZXJJZCkge1xuICBjb25zdCBwcmVjZWRpbmcgPSBhc3NvY2lhdGVkQ29tbWVudHMoY29tbWVudHMsIG5vZGUsIHNvdXJjZSlcbiAgY29uc3QgcGFyYW1ldGVyVHlwZXMgPSBuZXcgTWFwKClcbiAgLyoqIEB0eXBlIHt7bG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBzb3VyY2VUeXBlOiBzdHJpbmd9IHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgcmV0dXJuVHlwZVxuICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXJbXX0gKi9cbiAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSBbXVxuXG4gIGZvciAoY29uc3QgY29tbWVudCBvZiBwcmVjZWRpbmcpIHtcbiAgICBjb25zdCB3b3JkcyA9IGNvbW1lbnRUb2tlbnMoY29tbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmICh3b3Jkc1swXT8udGV4dCA9PSBcIkBwYXJhbVwiICYmIHdvcmRzLmxlbmd0aCA+PSAzKSB7XG4gICAgICBpZiAocGFyYW1ldGVyVHlwZXMuaGFzKHdvcmRzWzFdLnRleHQpKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJkdXBsaWNhdGUgcGFyYW1ldGVyIGFubm90YXRpb25cIiwgd29yZHNbMV0ubG9jYXRpb24pXG4gICAgICB9XG4gICAgICBwYXJhbWV0ZXJUeXBlcy5zZXQod29yZHNbMV0udGV4dCwgam9pbmVkQ29tbWVudFRva2VuKHdvcmRzLCAyLCBzb3VyY2UpKVxuICAgIH0gZWxzZSBpZiAod29yZHNbMF0/LnRleHQgPT0gXCJAcmV0dXJuXCIgJiYgd29yZHMubGVuZ3RoID49IDIpIHtcbiAgICAgIGlmIChyZXR1cm5UeXBlKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiZHVwbGljYXRlIHJldHVybiBhbm5vdGF0aW9uXCIsIHdvcmRzWzFdLmxvY2F0aW9uKVxuICAgICAgcmV0dXJuVHlwZSA9IGpvaW5lZENvbW1lbnRUb2tlbih3b3JkcywgMSwgc291cmNlKVxuICAgIH0gZWxzZSBpZiAod29yZHNbMF0/LnRleHQgPT0gXCJAdGVtcGxhdGVcIiAmJiB3b3Jkcy5sZW5ndGggPT0gMiAmJiBvd25lcklkICYmXG4gICAgICAvXltBLVphLXpfXVtBLVphLXowLTlfXSokL3UudGVzdCh3b3Jkc1sxXS50ZXh0KSkge1xuICAgICAgdHlwZVBhcmFtZXRlcnMucHVzaCh3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgaWQ6IGAke293bmVySWR9OnR5cGU6JHt0eXBlUGFyYW1ldGVycy5sZW5ndGh9YCxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHlwZVBhcmFtZXRlclwiKSxcbiAgICAgICAgbG9jYXRpb246IHdvcmRzWzFdLmxvY2F0aW9uLFxuICAgICAgICBuYW1lOiB3b3Jkc1sxXS50ZXh0XG4gICAgICB9LCB7bmFtZTogd29yZHNbMV0ubG9jYXRpb259KSlcbiAgICB9IGVsc2UgaWYgKHdvcmRzWzBdPy50ZXh0Py5zdGFydHNXaXRoKFwiQHRlbXBsYXRlXCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiYm91bmRlZCwgZGVmYXVsdGVkLCB2YXJpYW50LCBvciBtYWxmb3JtZWQgdHlwZSBwYXJhbWV0ZXJcIiwgd29yZHNbMV0/LmxvY2F0aW9uID8/IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9IGVsc2UgaWYgKHdvcmRzWzBdPy50ZXh0Py5zdGFydHNXaXRoKFwiQHBhcmFtXCIpIHx8IHdvcmRzWzBdPy50ZXh0Py5zdGFydHNXaXRoKFwiQHJldHVyblwiKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm1hbGZvcm1lZCBmdW5jdGlvbiB0eXBlIGFubm90YXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7cGFyYW1ldGVyczogcGFyYW1ldGVyVHlwZXMsIHJldHVyblR5cGUsIC4uLih0eXBlUGFyYW1ldGVycy5sZW5ndGggPiAwID8ge3R5cGVQYXJhbWV0ZXJzfSA6IHt9KX1cbn1cblxuLyoqXG4gKiBSZWpvaW5zIGEgYm91bmRlZCBtZXRhZGF0YSBzdWZmaXggd2hpbGUgcmV0YWluaW5nIGl0cyBwYXJzZXItb3duZWQgcmFuZ2UuXG4gKiBAcGFyYW0ge3tsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHRleHQ6IHN0cmluZ31bXX0gdG9rZW5zIC0gQ29tbWVudCB0b2tlbnMuXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgLSBGaXJzdCBzdWZmaXggdG9rZW4uXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge3tsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNvdXJjZVR5cGU6IHN0cmluZ319IEpvaW5lZCB0b2tlbi5cbiAqL1xuZnVuY3Rpb24gam9pbmVkQ29tbWVudFRva2VuKHRva2Vucywgc3RhcnQsIHNvdXJjZSkge1xuICBjb25zdCBmaXJzdCA9IHRva2Vuc1tzdGFydF1cbiAgY29uc3QgbGFzdCA9IHRva2Vucy5hdCgtMSlcblxuICBpZiAoIWZpcnN0IHx8ICFsYXN0KSB0aHJvdyBuZXcgRXJyb3IoXCJSdWJ5IG1ldGFkYXRhIHN1ZmZpeCB1bmV4cGVjdGVkbHkgZGlzYXBwZWFyZWQuXCIpXG4gIGNvbnN0IGxvY2F0aW9uID0gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaXJzdC5sb2NhdGlvbi5maWxlbmFtZSwgc291cmNlLCBmaXJzdC5sb2NhdGlvbi5zdGFydC5vZmZzZXQsIGxhc3QubG9jYXRpb24uZW5kLm9mZnNldClcblxuICByZXR1cm4ge2xvY2F0aW9uLCBzb3VyY2VUeXBlOiBzb3VyY2Uuc2xpY2UobG9jYXRpb24uc3RhcnQub2Zmc2V0LCBsb2NhdGlvbi5lbmQub2Zmc2V0KX1cbn1cblxuLyoqXG4gKiBMZXhlcyB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBtZXRhZGF0YSB0b2tlbnMgaW5zaWRlIGEgUHJpc20tb3duZWQgUnVieSBjb21tZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudH0gY29tbWVudCAtIFByaXNtIGNvbW1lbnQgdG9rZW4uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge3tsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHRleHQ6IHN0cmluZ31bXX0gTWV0YWRhdGEgdG9rZW5zLlxuICovXG5mdW5jdGlvbiBjb21tZW50VG9rZW5zKGNvbW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3Qgc3RhcnQgPSB1dGY4Qnl0ZU9mZnNldFRvVXRmMTZPZmZzZXQoc291cmNlLCBjb21tZW50LmxvY2F0aW9uLnN0YXJ0T2Zmc2V0KVxuICBjb25zdCBlbmQgPSB1dGY4Qnl0ZU9mZnNldFRvVXRmMTZPZmZzZXQoc291cmNlLCBjb21tZW50LmxvY2F0aW9uLnN0YXJ0T2Zmc2V0ICsgY29tbWVudC5sb2NhdGlvbi5sZW5ndGgpXG4gIGNvbnN0IHRva2VucyA9IFtdXG4gIGxldCBvZmZzZXQgPSBzdGFydCArIDFcblxuICB3aGlsZSAob2Zmc2V0IDwgZW5kKSB7XG4gICAgd2hpbGUgKG9mZnNldCA8IGVuZCAmJiBpc1J1YnlNZXRhZGF0YVdoaXRlc3BhY2Uoc291cmNlW29mZnNldF0pKSBvZmZzZXQrK1xuICAgIGNvbnN0IHRva2VuU3RhcnQgPSBvZmZzZXRcblxuICAgIHdoaWxlIChvZmZzZXQgPCBlbmQgJiYgIWlzUnVieU1ldGFkYXRhV2hpdGVzcGFjZShzb3VyY2Vbb2Zmc2V0XSkpIG9mZnNldCsrXG4gICAgaWYgKHRva2VuU3RhcnQgPCBvZmZzZXQpIHtcbiAgICAgIHRva2Vucy5wdXNoKHtsb2NhdGlvbjogbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCB0b2tlblN0YXJ0LCBvZmZzZXQpLCB0ZXh0OiBzb3VyY2Uuc2xpY2UodG9rZW5TdGFydCwgb2Zmc2V0KX0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRva2Vuc1xufVxuXG4vKipcbiAqIENoZWNrcyBvbmUgUnVieSBtZXRhZGF0YSBzZXBhcmF0b3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhcmFjdGVyIC0gU291cmNlIGNoYXJhY3Rlci5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGl0IHNlcGFyYXRlcyBtZXRhZGF0YSB0b2tlbnMuXG4gKi9cbmZ1bmN0aW9uIGlzUnVieU1ldGFkYXRhV2hpdGVzcGFjZShjaGFyYWN0ZXIpIHtcbiAgcmV0dXJuIGNoYXJhY3RlciA9PSBcIiBcIiB8fCBjaGFyYWN0ZXIgPT0gXCJcXHRcIiB8fCBjaGFyYWN0ZXIgPT0gXCJcXHJcIiB8fCBjaGFyYWN0ZXIgPT0gXCJcXG5cIlxufVxuXG4vKipcbiAqIFNlbGVjdHMgb25seSB0aGUgY29udGlndW91cyBjb21tZW50IGJsb2NrIGltbWVkaWF0ZWx5IGJlZm9yZSBhIGRlZmluaXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtL3NyYy9kZXNlcmlhbGl6ZS5qc1wiKS5Db21tZW50W119IGNvbW1lbnRzIC0gUHJpc20gY29tbWVudHMuXG4gKiBAcGFyYW0ge3tsb2NhdGlvbjogaW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTG9jYXRpb259fSBub2RlIC0gQ29tbWVudCBvd25lci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQHJ1YnkvcHJpc20vc3JjL2Rlc2VyaWFsaXplLmpzXCIpLkNvbW1lbnRbXX0gQXNzb2NpYXRlZCBjb21tZW50cy5cbiAqL1xuZnVuY3Rpb24gYXNzb2NpYXRlZENvbW1lbnRzKGNvbW1lbnRzLCBub2RlLCBzb3VyY2UpIHtcbiAgY29uc3QgcHJlY2VkaW5nID0gY29tbWVudHMuZmlsdGVyKChjb21tZW50KSA9PiBjb21tZW50LmxvY2F0aW9uLnN0YXJ0T2Zmc2V0IDwgbm9kZS5sb2NhdGlvbi5zdGFydE9mZnNldClcbiAgICAuc29ydCgobGVmdCwgcmlnaHQpID0+IGxlZnQubG9jYXRpb24uc3RhcnRPZmZzZXQgLSByaWdodC5sb2NhdGlvbi5zdGFydE9mZnNldClcbiAgY29uc3QgYXNzb2NpYXRlZCA9IFtdXG4gIGxldCBib3VuZGFyeSA9IG5vZGUubG9jYXRpb24uc3RhcnRPZmZzZXRcblxuICBmb3IgKGxldCBpbmRleCA9IHByZWNlZGluZy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgY29tbWVudCA9IHByZWNlZGluZ1tpbmRleF1cbiAgICBjb25zdCBlbmRPZmZzZXQgPSBjb21tZW50LmxvY2F0aW9uLnN0YXJ0T2Zmc2V0ICsgY29tbWVudC5sb2NhdGlvbi5sZW5ndGhcbiAgICBjb25zdCBnYXAgPSBzbGljZVByaXNtU291cmNlKHNvdXJjZSwgZW5kT2Zmc2V0LCBib3VuZGFyeSlcblxuICAgIGlmICghaXNJbW1lZGlhdGVDb21tZW50R2FwKGdhcCkpIGJyZWFrXG5cbiAgICBhc3NvY2lhdGVkLnVuc2hpZnQoY29tbWVudClcbiAgICBib3VuZGFyeSA9IGNvbW1lbnQubG9jYXRpb24uc3RhcnRPZmZzZXRcbiAgfVxuXG4gIHJldHVybiBhc3NvY2lhdGVkXG59XG5cbi8qKlxuICogUmVhZHMgb25lIGV4YWN0IFJ1YnkgbG9jYWwgdHlwZSBjYXJyaWVyIGFuZCBpbW11dGFiaWxpdHkgbWFya2VyLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFByaXNtIGNvbW1lbnRzLlxuICogQHBhcmFtIHtMb2NhbFZhcmlhYmxlV3JpdGVOb2RlfSBub2RlIC0gTG9jYWwgd3JpdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHt7aW1tdXRhYmxlOiBib29sZWFuLCB0eXBlOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gfCB1bmRlZmluZWR9IE1ldGFkYXRhIHdoZW4gcHJlc2VudC5cbiAqL1xuZnVuY3Rpb24gbG9jYWxNZXRhZGF0YShjb21tZW50cywgbm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGNvbnN0IGFzc29jaWF0ZWQgPSBhc3NvY2lhdGVkQ29tbWVudHMoY29tbWVudHMsIG5vZGUsIHNvdXJjZSlcbiAgY29uc3QgbWV0YWRhdGEgPSBhc3NvY2lhdGVkLm1hcCgoY29tbWVudCkgPT4gY29tbWVudFRva2Vucyhjb21tZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgdHlwZU1ldGFkYXRhID0gbWV0YWRhdGEuZmlsdGVyKChbdG9rZW5dKSA9PiB0b2tlbj8udGV4dCA9PSBcIkB0eXBlXCIpXG4gIGNvbnN0IGltbXV0YWJsZU1ldGFkYXRhID0gbWV0YWRhdGEuZmlsdGVyKChbdG9rZW5dKSA9PiB0b2tlbj8udGV4dCA9PSBcIkBzZW1hbnRpZm9sZC1pbW11dGFibGVcIilcbiAgY29uc3QgcHJvZmlsZU1ldGFkYXRhID0gbWV0YWRhdGEuZmlsdGVyKChbdG9rZW5dKSA9PiB7XG4gICAgcmV0dXJuIHRva2VuPy50ZXh0LnN0YXJ0c1dpdGgoXCJAdHlwZVwiKSB8fCB0b2tlbj8udGV4dC5zdGFydHNXaXRoKFwiQHNlbWFudGlmb2xkLWltbXV0YWJsZVwiKVxuICB9KVxuXG4gIGlmIChwcm9maWxlTWV0YWRhdGEubGVuZ3RoID09IDApIHJldHVybiB1bmRlZmluZWRcblxuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICh0eXBlTWV0YWRhdGEubGVuZ3RoICE9IDEgfHwgdHlwZU1ldGFkYXRhWzBdLmxlbmd0aCA8IDIgfHxcbiAgICBpbW11dGFibGVNZXRhZGF0YS5sZW5ndGggPiAxIHx8IGltbXV0YWJsZU1ldGFkYXRhLnNvbWUoKHRva2VucykgPT4gdG9rZW5zLmxlbmd0aCAhPSAxKSB8fFxuICAgIHByb2ZpbGVNZXRhZGF0YS5sZW5ndGggIT0gdHlwZU1ldGFkYXRhLmxlbmd0aCArIGltbXV0YWJsZU1ldGFkYXRhLmxlbmd0aCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJtYWxmb3JtZWQgbG9jYWwgdHlwZSBtZXRhZGF0YVwiLCBsb2NhdGlvbilcbiAgfVxuXG4gIGNvbnN0IGRlY2xhcmVkVHlwZSA9IGpvaW5lZENvbW1lbnRUb2tlbih0eXBlTWV0YWRhdGFbMF0sIDEsIHNvdXJjZSlcblxuICByZXR1cm4ge1xuICAgIGltbXV0YWJsZTogaW1tdXRhYmxlTWV0YWRhdGEubGVuZ3RoID09IDEsXG4gICAgdHlwZTogY29udmVydFR5cGUoZGVjbGFyZWRUeXBlLnNvdXJjZVR5cGUsIGBMb2NhbCAnJHtub2RlLm5hbWV9J2AsIGxvY2F0aW9uLCBzb3VyY2UsIGRlY2xhcmVkVHlwZS5sb2NhdGlvbiwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKVxuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIFJ1YnkgbG9jYWwgZGVjbGFyYXRpb24gb3IgYXNzaWdubWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZX0gbm9kZSAtIFByaXNtIG5vZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtL3NyYy9kZXNlcmlhbGl6ZS5qc1wiKS5Db21tZW50W119IGNvbW1lbnRzIC0gUHJpc20gY29tbWVudHMuXG4gKiBAcGFyYW0ge1J1YnlDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Mb2NhbFN0YXRlbWVudH0gU2VtYW50aWMgbG9jYWwgc3RhdGVtZW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0TG9jYWxTdGF0ZW1lbnQobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoIShub2RlIGluc3RhbmNlb2YgTG9jYWxWYXJpYWJsZVdyaXRlTm9kZSkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgbm9kZS5jb25zdHJ1Y3Rvci5uYW1lLCBsb2NhdGlvbilcblxuICBjb25zdCBtZXRhZGF0YSA9IGxvY2FsTWV0YWRhdGEoY29tbWVudHMsIG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG5cbiAgaWYgKG1ldGFkYXRhKSB7XG4gICAgbGV0IGRlY2xhcmVkVHlwZSA9IG1ldGFkYXRhLnR5cGVcblxuICAgIGlmIChtZXRhZGF0YS5pbW11dGFibGUgJiYgZGVjbGFyZWRUeXBlLmtpbmQgPT0gXCJNYXBUeXBlXCIgJiYgY29udGV4dC5vcmRlcmVkTWFwRGVjbGFyYXRpb25zPy5oYXMobm9kZSkgJiZcbiAgICAgIG5vZGUudmFsdWUgaW5zdGFuY2VvZiBIYXNoTm9kZSkge1xuICAgICAgZGVjbGFyZWRUeXBlID0gb3JkZXJlZE1hcFR5cGVGcm9tTWFwKGRlY2xhcmVkVHlwZSwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBpbml0aWFsaXplcjogY29udmVydEV4cHJlc3Npb24obm9kZS52YWx1ZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZGVjbGFyZWRUeXBlKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkxvY2FsRGVjbGFyYXRpb25cIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG11dGFibGU6ICFtZXRhZGF0YS5pbW11dGFibGUsXG4gICAgICBuYW1lOiBub2RlLm5hbWUsXG4gICAgICB0eXBlOiBkZWNsYXJlZFR5cGVcbiAgICB9LCB7bmFtZTogcHJpc21Mb2NhdGlvbihub2RlLm5hbWVMb2MsIGZpbGVuYW1lLCBzb3VyY2UpLCBvcGVyYXRvcjogcHJpc21Mb2NhdGlvbihub2RlLm9wZXJhdG9yTG9jLCBmaWxlbmFtZSwgc291cmNlKX0pXG5cbiAgICBjb250ZXh0LmJpbmRpbmdzLnNldChub2RlLm5hbWUsIGRlY2xhcmVkVHlwZSlcbiAgICByZXR1cm4gc2VtYW50aWNcbiAgfVxuXG4gIGlmICghY29udGV4dC5iaW5kaW5ncy5oYXMobm9kZS5uYW1lKSkge1xuICAgIGlmIChub2RlLnZhbHVlIGluc3RhbmNlb2YgTG9jYWxWYXJpYWJsZVJlYWROb2RlICYmIGNvbnRleHQuYmluZGluZ3MuZ2V0KG5vZGUudmFsdWUubmFtZSk/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwib3JkZXJlZCBtYXAgYWxpYXMgZXNjYXBlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICByZXR1cm4gbWlzc2luZ1R5cGUoXCJydWJ5XCIsIGBMb2NhbCAnJHtub2RlLm5hbWV9J2AsIGxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgdGFyZ2V0TG9jYXRpb24gPSBwcmlzbUxvY2F0aW9uKG5vZGUubmFtZUxvYywgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgdGFyZ2V0ID0gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksIGxvY2F0aW9uOiB0YXJnZXRMb2NhdGlvbiwgbmFtZTogbm9kZS5uYW1lfSwge1xuICAgIG5hbWU6IHRhcmdldExvY2F0aW9uXG4gIH0pXG5cbiAgY29uc3QgYmluZGluZ1R5cGUgPSBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlLm5hbWUpXG4gIGNvbnN0IHNlbWFudGljID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24obm9kZS52YWx1ZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCxcbiAgICAgIGJpbmRpbmdUeXBlPy5raW5kID09IFwiRXJyb3JUeXBlXCIgPyB1bmRlZmluZWQgOiBiaW5kaW5nVHlwZSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQXNzaWdubWVudFN0YXRlbWVudFwiKSxcbiAgICBsb2NhdGlvbixcbiAgICB0YXJnZXRcbiAgfSwge29wZXJhdG9yOiBwcmlzbUxvY2F0aW9uKG5vZGUub3BlcmF0b3JMb2MsIGZpbGVuYW1lLCBzb3VyY2UpfSlcblxuICByZXR1cm4gc2VtYW50aWNcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhoYXVzdGl2ZSBQcmlzbSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGV9IG5vZGUgLSBQcmlzbSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtL3NyYy9kZXNlcmlhbGl6ZS5qc1wiKS5Db21tZW50W119IGNvbW1lbnRzIC0gUHJpc20gY29tbWVudHMuXG4gKiBAcGFyYW0ge1J1YnlDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnR9IFNlbWFudGljIHN0YXRlbWVudC5cbiAqL1xuZnVuY3Rpb24gY29udmVydFN0YXRlbWVudChub2RlLCBjb21tZW50cywgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAobm9kZSBpbnN0YW5jZW9mIFJldHVybk5vZGUpIHtcbiAgICBpZiAoKGNvbnRleHQubG9vcERlcHRoID8/IDApID4gMCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm5vbmxvY2FsIHJldHVybiBmcm9tIGVhY2ggYmxvY2tcIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIHJldHVybiBjb252ZXJ0UmV0dXJuKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBJZk5vZGUgJiYgIW5vZGUuaWZLZXl3b3JkTG9jKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwidGVybmFyeSBzdGF0ZW1lbnRcIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIElmTm9kZSB8fCBub2RlIGluc3RhbmNlb2YgVW5sZXNzTm9kZSkgcmV0dXJuIGNvbnZlcnRJZihub2RlLCBjb21tZW50cywgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBXaGlsZU5vZGUpIHJldHVybiBjb252ZXJ0V2hpbGUobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGlmIChub2RlIGluc3RhbmNlb2YgQmVnaW5Ob2RlKSByZXR1cm4gY29udmVydFJ1YnlUcnkobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGlmIChub2RlIGluc3RhbmNlb2YgTG9jYWxWYXJpYWJsZVdyaXRlTm9kZSkgcmV0dXJuIGNvbnZlcnRMb2NhbFN0YXRlbWVudChub2RlLCBjb21tZW50cywgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBJbnN0YW5jZVZhcmlhYmxlV3JpdGVOb2RlKSB7XG4gICAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBmaWVsZCA9IGNvbnRleHQuY3VycmVudENsYXNzPy5maWVsZHMuZmluZCgoY2FuZGlkYXRlKSA9PiBgQCR7Y2FuZGlkYXRlLm5hbWV9YCA9PSBub2RlLm5hbWUpXG5cbiAgICBpZiAoIWZpZWxkIHx8ICFjb250ZXh0LmN1cnJlbnRDbGFzcykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInByaXZhdGUgaW5zdGFuY2UgZmllbGQgb3V0c2lkZSBpdHMgZGVjbGFyaW5nIGNsYXNzXCIsIGxvY2F0aW9uKVxuICAgIGNvbnN0IHJlY2VpdmVyID0gd2l0aFBhcnNlclJhbmdlcyh7Y2xhc3NJZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChjb250ZXh0LmN1cnJlbnRDbGFzcy5pZCksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWNlaXZlckV4cHJlc3Npb25cIiksIGxvY2F0aW9ufSwge3JlY2VpdmVyOiBsb2NhdGlvbn0pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7ZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24obm9kZS52YWx1ZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZmllbGQudHlwZSksXG4gICAgICBmaWVsZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChmaWVsZC5pZCksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50XCIpLCBsb2NhdGlvbiwgcmVjZWl2ZXJ9LFxuICAgIHttZW1iZXI6IGxvY2F0aW9ufSlcbiAgfVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIEJyZWFrTm9kZSB8fCBub2RlIGluc3RhbmNlb2YgTmV4dE5vZGUpIHtcbiAgICBpZiAobm9kZS5hcmd1bWVudHNfKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIGAke25vZGUgaW5zdGFuY2VvZiBCcmVha05vZGUgPyBcImJyZWFrXCIgOiBcIm5leHRcIn0gdmFsdWVgLCBub2RlTG9jYXRpb24obm9kZS5hcmd1bWVudHNfLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBjb25zdCBsb2NhdGlvbiA9IHByaXNtTG9jYXRpb24obm9kZS5rZXl3b3JkTG9jLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtcIkJyZWFrU3RhdGVtZW50XCIgfCBcIkNvbnRpbnVlU3RhdGVtZW50XCJ9ICovIChub2RlIGluc3RhbmNlb2YgQnJlYWtOb2RlID8gXCJCcmVha1N0YXRlbWVudFwiIDogXCJDb250aW51ZVN0YXRlbWVudFwiKSxcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge2tleXdvcmQ6IGxvY2F0aW9ufSlcbiAgfVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlKSB7XG4gICAgaWYgKCFub2RlLnJlY2VpdmVyICYmIG5vZGUubmFtZSA9PSBcInJhaXNlXCIpIHJldHVybiBjb252ZXJ0UnVieVJhaXNlKG5vZGUsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgaWYgKG5vZGUuYmxvY2spIHJldHVybiBjb252ZXJ0Rm9yRWFjaChub2RlLCBjb21tZW50cywgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBpZiAoIW5vZGUucmVjZWl2ZXIgJiYgbm9kZS5uYW1lID09IFwicHV0c1wiICYmICFjb250ZXh0LmZ1bmN0aW9ucy5oYXMoXCJwdXRzXCIpKSByZXR1cm4gY29udmVydFByaW50KG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG5cbiAgICByZXR1cm4ge1xuICAgICAgZXhwcmVzc2lvbjogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DYWxsRXhwcmVzc2lvbn0gKi8gKGNvbnZlcnRFeHByZXNzaW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKSxcbiAgICAgIGtpbmQ6IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgbm9kZS5jb25zdHJ1Y3Rvci5uYW1lLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG59XG5cbi8qKlxuICogQ29udmVydHMgZXhhY3QgYHJhaXNlIERlY2xhcmVkRXJyb3IsIG1lc3NhZ2VgLlxuICogQHBhcmFtIHtDYWxsTm9kZX0gbm9kZSAtIFByaXNtIHJhaXNlIGNhbGwuXG4gKiBAcGFyYW0ge1J1YnlDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udGV4dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmFpc2VTdGF0ZW1lbnQgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZXRocm93U3RhdGVtZW50fSBTZW1hbnRpYyByYWlzZSBvciByZXRocm93LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UnVieVJhaXNlKG5vZGUsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYXJndW1lbnRzXyA9IG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXyA/PyBbXVxuXG4gIGlmIChhcmd1bWVudHNfLmxlbmd0aCA9PSAwICYmIGNvbnRleHQuY3VycmVudENhdGNoQmluZGluZ05vZGUpIHtcbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBiaW5kaW5nOiBjb250ZXh0LmN1cnJlbnRDYXRjaEJpbmRpbmdOb2RlLm5hbWUsXG4gICAgICBiaW5kaW5nTm9kZTogY29udGV4dC5jdXJyZW50Q2F0Y2hCaW5kaW5nTm9kZSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJldGhyb3dTdGF0ZW1lbnRcIiksXG4gICAgICBsb2NhdGlvblxuICAgIH0sIHtrZXl3b3JkOiBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cbiAgaWYgKGFyZ3VtZW50c18ubGVuZ3RoID09IDEgJiYgYXJndW1lbnRzX1swXSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVSZWFkTm9kZSAmJlxuICAgIGNvbnRleHQuY2F0Y2hCaW5kaW5nTmFtZXM/Lmhhcyhhcmd1bWVudHNfWzBdLm5hbWUpICYmIGNvbnRleHQuYmluZGluZ3MuZ2V0KGFyZ3VtZW50c19bMF0ubmFtZSk/LmtpbmQgPT0gXCJFcnJvclR5cGVcIikge1xuICAgIGNvbnN0IGJpbmRpbmdOb2RlID0gY29udGV4dC5jYXRjaEJpbmRpbmdOb2Rlcz8uZ2V0KGFyZ3VtZW50c19bMF0ubmFtZSlcblxuICAgIGlmICghYmluZGluZ05vZGUpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJyYWlzZSBvZiBhIGNhdGNoIGJpbmRpbmcgd2l0aG91dCBhbiBleGFjdCBoYW5kbGVyIGJpbmRpbmdcIiwgbG9jYXRpb24pXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgYmluZGluZzogYXJndW1lbnRzX1swXS5uYW1lLFxuICAgICAgYmluZGluZ05vZGUsXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZXRocm93U3RhdGVtZW50XCIpLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7a2V5d29yZDogcHJpc21Mb2NhdGlvbihub2RlLm1lc3NhZ2VMb2MgPz8gbm9kZS5sb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG4gIGlmIChub2RlLmJsb2NrIHx8IG5vZGUuY2FsbE9wZXJhdG9yTG9jIHx8IGFyZ3VtZW50c18ubGVuZ3RoICE9IDIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwicmFpc2Ugb3RoZXIgdGhhbiBleGFjdCBkZWNsYXJlZCBlcnJvciBhbmQgbWVzc2FnZVwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBlcnJvck5vZGUgPSBhcmd1bWVudHNfWzBdXG5cbiAgaWYgKCEoZXJyb3JOb2RlIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSkgJiYgIShlcnJvck5vZGUgaW5zdGFuY2VvZiBDb25zdGFudFBhdGhOb2RlKSB8fFxuICAgICFjb250ZXh0LmVycm9yTmFtZXMuaGFzKGNvbnN0YW50UGF0aE5hbWUoZXJyb3JOb2RlKSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwicmFpc2Ugb3RoZXIgdGhhbiBleGFjdCBkZWNsYXJlZCBlcnJvciBhbmQgbWVzc2FnZVwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBkZWNsYXJhdGlvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gKi8gKGNvbnRleHQuZXJyb3JOYW1lcy5nZXQoY29uc3RhbnRQYXRoTmFtZShlcnJvck5vZGUpKSlcbiAgY29uc3QgdHlwZUxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGVycm9yTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgZXJyb3I6IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZXJyb3I6IHdpdGhQYXJzZXJSYW5nZXMoe2RlY2xhcmF0aW9uSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvclR5cGVcIil9LCB7dHlwZTogdHlwZUxvY2F0aW9ufSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvckNvbnN0cnVjdGlvblwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgbWVzc2FnZTogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnRzX1sxXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9LCB7dHlwZTogdHlwZUxvY2F0aW9ufSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmFpc2VTdGF0ZW1lbnRcIiksXG4gICAgbG9jYXRpb25cbiAgfSwge2tleXdvcmQ6IHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jID8/IG5vZGUubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgUHJpc20gZW5zdXJlIGNsYXVzZSBib2R5LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5FbnN1cmVOb2RlfSBub2RlIC0gUHJpc20gZW5zdXJlIGNsYXVzZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc20vc3JjL2Rlc2VyaWFsaXplLmpzXCIpLkNvbW1lbnRbXX0gY29tbWVudHMgLSBQcmlzbSBjb21tZW50cy5cbiAqIEBwYXJhbSB7UnVieUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb250ZXh0LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gU2VtYW50aWMgZmluYWxseSBibG9jay5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJ1YnlFbnN1cmUobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgLy8gQSBjb21wbGV0aW9uIGJsb2NrIGdldHMgaXRzIG93biBiaW5kaW5nIHNjb3BlLCBsaWtlIGV2ZXJ5IG90aGVyIGJsb2NrIGluIGNvbnZlcnRSdWJ5VHJ5OiBhIGxvY2FsXG4gIC8vIGRlY2xhcmF0aW9uIGluc2lkZSBgZW5zdXJlYCBtdXN0IG5vdCBsZWFrIGJhY2sgaW50byB0aGUgZW5jbG9zaW5nIGNvbnZlcnNpb24gY29udGV4dC5cbiAgcmV0dXJuIGNvbnZlcnRCbG9jayhub2RlLnN0YXRlbWVudHMgPz8gbnVsbCwgY29tbWVudHMsIHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX0sIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBiZWdpbiBibG9jayB3aXRoIG9yZGVyZWQgZXhhY3QgdHlwZWQgcmVzY3VlcyBhbmQgYW4gb3B0aW9uYWwgZW5zdXJlIGNvbXBsZXRpb24gYmxvY2suXG4gKiBAcGFyYW0ge0JlZ2luTm9kZX0gbm9kZSAtIFByaXNtIGJlZ2luIG5vZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtL3NyYy9kZXNlcmlhbGl6ZS5qc1wiKS5Db21tZW50W119IGNvbW1lbnRzIC0gUGFyc2VyLW93bmVkIGNvbW1lbnRzLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlRyeVN0YXRlbWVudH0gU2VtYW50aWMgZXhhY3QgaGFuZGxlciBjaGFpbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJ1YnlUcnkobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobm9kZS5lbHNlQ2xhdXNlKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiYmVnaW4gZWxzZSBjbGF1c2VcIiwgbm9kZUxvY2F0aW9uKG5vZGUuZWxzZUNsYXVzZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2F0Y2hIYW5kbGVyW119ICovXG4gIGNvbnN0IGhhbmRsZXJzID0gW11cbiAgY29uc3Qgc2VlbkhhbmRsZXJOYW1lcyA9IG5ldyBTZXQoY29udGV4dC5jYXRjaEJpbmRpbmdOYW1lcyA/PyBbXSlcbiAgbGV0IGhhbmRsZXIgPSBub2RlLnJlc2N1ZUNsYXVzZVxuXG4gIGlmICghKGhhbmRsZXIgaW5zdGFuY2VvZiBSZXNjdWVOb2RlKSkge1xuICAgIGlmIChub2RlLmVuc3VyZUNsYXVzZSkge1xuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBib2R5OiBjb252ZXJ0QmxvY2sobm9kZS5zdGF0ZW1lbnRzLCBjb21tZW50cywgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSwgbG9jYXRpb24pLFxuICAgICAgICBoYW5kbGVycyxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHJ5U3RhdGVtZW50XCIpLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgZmluYWxseUJvZHk6IGNvbnZlcnRSdWJ5RW5zdXJlKG5vZGUuZW5zdXJlQ2xhdXNlLCBjb21tZW50cywgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIH0sIHtlbnN1cmU6IG5vZGVMb2NhdGlvbihub2RlLmVuc3VyZUNsYXVzZSwgZmlsZW5hbWUsIHNvdXJjZSksIHRyeTogbG9jYXRpb259KVxuICAgIH1cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiYmVnaW4gd2l0aG91dCByZXNjdWUgb3IgZW5zdXJlXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IGJvZHlDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpfVxuICB3aGlsZSAoaGFuZGxlciBpbnN0YW5jZW9mIFJlc2N1ZU5vZGUpIHtcbiAgICBpZiAoaGFuZGxlci5leGNlcHRpb25zLmxlbmd0aCAhPSAxIHx8XG4gICAgICAhKGhhbmRsZXIuZXhjZXB0aW9uc1swXSBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUpICYmICEoaGFuZGxlci5leGNlcHRpb25zWzBdIGluc3RhbmNlb2YgQ29uc3RhbnRQYXRoTm9kZSkgfHxcbiAgICAgICFjb250ZXh0LmVycm9yTmFtZXMuaGFzKGNvbnN0YW50UGF0aE5hbWUoaGFuZGxlci5leGNlcHRpb25zWzBdKSkgfHwgIShoYW5kbGVyLnJlZmVyZW5jZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVUYXJnZXROb2RlKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInJlc2N1ZSB3aXRob3V0IG9uZSBleGFjdCB0eXBlZCBleGNlcHRpb24gYW5kIGJpbmRpbmdcIiwgbm9kZUxvY2F0aW9uKGhhbmRsZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBpZiAoc2VlbkhhbmRsZXJOYW1lcy5oYXMoaGFuZGxlci5yZWZlcmVuY2UubmFtZSkpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgYHJlc2N1ZSBiaW5kaW5nICcke2hhbmRsZXIucmVmZXJlbmNlLm5hbWV9JyBzaGFkb3dzIGFuIG91dGVyIGhhbmRsZXIgYmluZGluZ2AsXG4gICAgICAgIG5vZGVMb2NhdGlvbihoYW5kbGVyLnJlZmVyZW5jZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIHNlZW5IYW5kbGVyTmFtZXMuYWRkKGhhbmRsZXIucmVmZXJlbmNlLm5hbWUpXG4gICAgY29uc3QgZXJyb3JOb2RlID0gaGFuZGxlci5leGNlcHRpb25zWzBdXG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259ICovIChjb250ZXh0LmVycm9yTmFtZXMuZ2V0KGNvbnN0YW50UGF0aE5hbWUoZXJyb3JOb2RlKSkpXG4gICAgY29uc3QgY2F1Z2h0TG9jYXRpb24gPSBub2RlTG9jYXRpb24oZXJyb3JOb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGNhdGNoVHlwZSA9IHdpdGhQYXJzZXJSYW5nZXMoe2RlY2xhcmF0aW9uSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvclR5cGVcIil9LCB7XG4gICAgICB0eXBlOiBjYXVnaHRMb2NhdGlvblxuICAgIH0pXG4gICAgY29uc3QgY2F0Y2hDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpLCBjYXRjaEJpbmRpbmdOYW1lczogbmV3IFNldChzZWVuSGFuZGxlck5hbWVzKSxcbiAgICAgIGNhdGNoQmluZGluZ05vZGVzOiBuZXcgTWFwKGNvbnRleHQuY2F0Y2hCaW5kaW5nTm9kZXMpfVxuXG4gICAgY2F0Y2hDb250ZXh0LmJpbmRpbmdzLnNldChoYW5kbGVyLnJlZmVyZW5jZS5uYW1lLCBjYXRjaFR5cGUpXG4gICAgY29uc3QgY2F0Y2hCaW5kaW5nTm9kZSA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2F0Y2hCaW5kaW5nXCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihoYW5kbGVyLnJlZmVyZW5jZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBtdXRhYmxlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpLFxuICAgICAgbmFtZTogaGFuZGxlci5yZWZlcmVuY2UubmFtZSxcbiAgICAgIHR5cGU6IGNhdGNoVHlwZVxuICAgIH0sIHtuYW1lOiBub2RlTG9jYXRpb24oaGFuZGxlci5yZWZlcmVuY2UsIGZpbGVuYW1lLCBzb3VyY2UpfSlcblxuICAgIGNhdGNoQ29udGV4dC5jYXRjaEJpbmRpbmdOb2Rlcy5zZXQoaGFuZGxlci5yZWZlcmVuY2UubmFtZSwgY2F0Y2hCaW5kaW5nTm9kZSlcbiAgICBjYXRjaENvbnRleHQuY3VycmVudENhdGNoQmluZGluZ05vZGUgPSBjYXRjaEJpbmRpbmdOb2RlXG4gICAgaGFuZGxlcnMucHVzaCh3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGNhdGNoQmluZGluZzogY2F0Y2hCaW5kaW5nTm9kZSxcbiAgICAgIGNhdGNoQm9keTogY29udmVydEJsb2NrKGhhbmRsZXIuc3RhdGVtZW50cywgY29tbWVudHMsIGNhdGNoQ29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSwgbm9kZUxvY2F0aW9uKGhhbmRsZXIsIGZpbGVuYW1lLCBzb3VyY2UpKSxcbiAgICAgIGNhdGNoVHlwZSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhdGNoSGFuZGxlclwiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oaGFuZGxlciwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9LCB7Y2F0Y2g6IG5vZGVMb2NhdGlvbihoYW5kbGVyLCBmaWxlbmFtZSwgc291cmNlKX0pKVxuICAgIGhhbmRsZXIgPSBoYW5kbGVyLnN1YnNlcXVlbnRcbiAgfVxuICBjb25zdCBzZW1hbnRpYyA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHJ5U3RhdGVtZW50fSAqLyAod2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKG5vZGUuc3RhdGVtZW50cywgY29tbWVudHMsIGJvZHlDb250ZXh0LCBmaWxlbmFtZSwgc291cmNlLCBsb2NhdGlvbiksXG4gICAgaGFuZGxlcnMsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHJ5U3RhdGVtZW50XCIpLFxuICAgIGxvY2F0aW9uXG4gIH0sIHt0cnk6IGxvY2F0aW9ufSkpXG5cbiAgaWYgKG5vZGUuZW5zdXJlQ2xhdXNlKSB7XG4gICAgc2VtYW50aWMuZmluYWxseUJvZHkgPSBjb252ZXJ0UnVieUVuc3VyZShub2RlLmVuc3VyZUNsYXVzZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgc2V0UGFyc2VyUmFuZ2VzKHNlbWFudGljLCB7ZW5zdXJlOiBub2RlTG9jYXRpb24obm9kZS5lbnN1cmVDbGF1c2UsIGZpbGVuYW1lLCBzb3VyY2UpLCB0cnk6IGxvY2F0aW9ufSlcbiAgfVxuICByZXR1cm4gc2VtYW50aWNcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBleGFjdCByZXNvbHZlZC1saXN0IGAuZWFjaCBkbyB8dmFsdWV8IC4uLiBlbmRgIHN5bnRheC5cbiAqIEBwYXJhbSB7Q2FsbE5vZGV9IG5vZGUgLSBQcmlzbSBjYWxsIHdpdGggYSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc20vc3JjL2Rlc2VyaWFsaXplLmpzXCIpLkNvbW1lbnRbXX0gY29tbWVudHMgLSBQcmlzbSBjb21tZW50cy5cbiAqIEBwYXJhbSB7UnVieUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb250ZXh0LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRm9yRWFjaE1hcFN0YXRlbWVudH0gU2VtYW50aWMgbG9vcC5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZvckVhY2gobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYmxvY2sgPSBub2RlLmJsb2NrXG5cbiAgaWYgKCEoYmxvY2sgaW5zdGFuY2VvZiBCbG9ja05vZGUpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiY2FsbCBibG9ja1wiLCBibG9jayA/IG5vZGVMb2NhdGlvbihibG9jaywgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvbilcbiAgaWYgKCFub2RlLnJlY2VpdmVyIHx8IG5vZGUubmFtZSAhPSBcImVhY2hcIiB8fCBub2RlLmFyZ3VtZW50c18gfHwgIW5vZGUuY2FsbE9wZXJhdG9yTG9jIHx8ICFub2RlLm1lc3NhZ2VMb2MpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiYXJiaXRyYXJ5IGNhbGwgYmxvY2tcIiwgbm9kZUxvY2F0aW9uKGJsb2NrLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBpZiAoc2xpY2VQcmlzbVNvdXJjZShzb3VyY2UsIGJsb2NrLm9wZW5pbmdMb2Muc3RhcnRPZmZzZXQsIGJsb2NrLm9wZW5pbmdMb2Muc3RhcnRPZmZzZXQgKyBibG9jay5vcGVuaW5nTG9jLmxlbmd0aCkgIT0gXCJkb1wiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm5vbi1kbyBlYWNoIGJsb2NrXCIsIHByaXNtTG9jYXRpb24oYmxvY2sub3BlbmluZ0xvYywgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgZXhjbHVkZWQgPSBmaW5kUnVieURlc2NlbmRhbnQoYmxvY2suYm9keSwgKGNhbmRpZGF0ZSkgPT5cbiAgICBjYW5kaWRhdGUgaW5zdGFuY2VvZiBSZWRvTm9kZSB8fCBjYW5kaWRhdGUgaW5zdGFuY2VvZiBSZXRyeU5vZGUgfHwgY2FuZGlkYXRlIGluc3RhbmNlb2YgUmV0dXJuTm9kZSlcblxuICBpZiAoZXhjbHVkZWQpIHtcbiAgICBjb25zdCBkZXRhaWwgPSBleGNsdWRlZCBpbnN0YW5jZW9mIFJldHVybk5vZGUgPyBcIm5vbmxvY2FsIHJldHVybiBmcm9tIGVhY2ggYmxvY2tcIiA6XG4gICAgICBleGNsdWRlZCBpbnN0YW5jZW9mIFJlZG9Ob2RlID8gXCJyZWRvIGluIGVhY2ggYmxvY2tcIiA6IFwicmV0cnkgaW4gZWFjaCBibG9ja1wiXG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIGRldGFpbCwgbm9kZUxvY2F0aW9uKGV4Y2x1ZGVkLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBpZiAoIShibG9jay5wYXJhbWV0ZXJzIGluc3RhbmNlb2YgQmxvY2tQYXJhbWV0ZXJzTm9kZSkgfHwgYmxvY2sucGFyYW1ldGVycy5sb2NhbHMubGVuZ3RoID4gMCB8fFxuICAgICFibG9jay5wYXJhbWV0ZXJzLnBhcmFtZXRlcnMpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiZWFjaCBibG9jayBwYXJhbWV0ZXJzXCIsIGJsb2NrLnBhcmFtZXRlcnNcbiAgICAgID8gbm9kZUxvY2F0aW9uKGJsb2NrLnBhcmFtZXRlcnMsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICA6IG5vZGVMb2NhdGlvbihibG9jaywgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgcGFyYW1ldGVycyA9IGJsb2NrLnBhcmFtZXRlcnMucGFyYW1ldGVyc1xuICBjb25zdCBzdXBwb3J0ZWRSZXF1aXJlZHMgPSBwYXJhbWV0ZXJzLnJlcXVpcmVkcy5sZW5ndGggPT0gMSB8fCBwYXJhbWV0ZXJzLnJlcXVpcmVkcy5sZW5ndGggPT0gMlxuICBjb25zdCB1bnN1cHBvcnRlZFBhcmFtZXRlciA9ICFzdXBwb3J0ZWRSZXF1aXJlZHNcbiAgICA/IHBhcmFtZXRlcnMucmVxdWlyZWRzWzJdID8/IHBhcmFtZXRlcnMucmVxdWlyZWRzWzFdID8/IHBhcmFtZXRlcnMucmVxdWlyZWRzWzBdID8/IGJsb2NrLnBhcmFtZXRlcnNcbiAgICA6IHBhcmFtZXRlcnMucmVxdWlyZWRzLmV2ZXJ5KChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlciBpbnN0YW5jZW9mIFJlcXVpcmVkUGFyYW1ldGVyTm9kZSkgJiZcbiAgICAgICAgcGFyYW1ldGVycy5vcHRpb25hbHMubGVuZ3RoID09IDAgJiYgIXBhcmFtZXRlcnMucmVzdCAmJlxuICAgICAgICBwYXJhbWV0ZXJzLnBvc3RzLmxlbmd0aCA9PSAwICYmIHBhcmFtZXRlcnMua2V5d29yZHMubGVuZ3RoID09IDAgJiYgIXBhcmFtZXRlcnMua2V5d29yZFJlc3QgJiYgIXBhcmFtZXRlcnMuYmxvY2tcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IHBhcmFtZXRlcnMub3B0aW9uYWxzWzBdID8/IHBhcmFtZXRlcnMucmVzdCA/PyBwYXJhbWV0ZXJzLnBvc3RzWzBdID8/IHBhcmFtZXRlcnMua2V5d29yZHNbMF0gPz9cbiAgICAgICAgcGFyYW1ldGVycy5rZXl3b3JkUmVzdCA/PyBwYXJhbWV0ZXJzLmJsb2NrID8/IHBhcmFtZXRlcnMucmVxdWlyZWRzWzBdXG5cbiAgaWYgKHVuc3VwcG9ydGVkUGFyYW1ldGVyKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiZWFjaCBibG9jayBwYXJhbWV0ZXIgYXJpdHkgb3Igc2hhcGVcIiwgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkUGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgY29sbGVjdGlvblR5cGUgPSBpdGVyYXRpb25PcGVyYW5kVHlwZShrbm93bkV4cHJlc3Npb25UeXBlKG5vZGUucmVjZWl2ZXIsIGNvbnRleHQpKVxuXG4gIGlmIChwYXJhbWV0ZXJzLnJlcXVpcmVkcy5sZW5ndGggPT0gMikge1xuICAgIGlmIChjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInVub3JkZXJlZCBtYXAgaXRlcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgaWYgKCFjb2xsZWN0aW9uVHlwZSB8fCBjb2xsZWN0aW9uVHlwZS5raW5kICE9IFwiT3JkZXJlZE1hcFR5cGVcIikge1xuICAgICAgcmV0dXJuIG1pc3NpbmdUeXBlKFwicnVieVwiLCBcIk9yZGVyZWQgbWFwIGl0ZXJhdGlvbiBjb2xsZWN0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgW2tleVBhcmFtZXRlciwgdmFsdWVQYXJhbWV0ZXJdID0gLyoqIEB0eXBlIHtbUmVxdWlyZWRQYXJhbWV0ZXJOb2RlLCBSZXF1aXJlZFBhcmFtZXRlck5vZGVdfSAqLyAocGFyYW1ldGVycy5yZXF1aXJlZHMpXG4gICAgY29uc3Qga2V5TG9jYXRpb24gPSBub2RlTG9jYXRpb24oa2V5UGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHZhbHVlTG9jYXRpb24gPSBub2RlTG9jYXRpb24odmFsdWVQYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3Qga2V5VHlwZSA9IGl0ZXJhdGlvbkJpbmRpbmdUeXBlKGNvbGxlY3Rpb25UeXBlLmtleVR5cGUsIGtleUxvY2F0aW9uKVxuICAgIGNvbnN0IHZhbHVlVHlwZSA9IGl0ZXJhdGlvbkJpbmRpbmdUeXBlKGNvbGxlY3Rpb25UeXBlLnZhbHVlVHlwZSwgdmFsdWVMb2NhdGlvbilcbiAgICBjb25zdCBrZXlCaW5kaW5nID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJWYWx1ZUJpbmRpbmdcIiksIGxvY2F0aW9uOiBrZXlMb2NhdGlvbiwgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICAgIG5hbWU6IGtleVBhcmFtZXRlci5uYW1lLCB0eXBlOiBrZXlUeXBlXG4gICAgfSwge25hbWU6IGtleUxvY2F0aW9ufSlcbiAgICBjb25zdCB2YWx1ZUJpbmRpbmcgPSB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlZhbHVlQmluZGluZ1wiKSwgbG9jYXRpb246IHZhbHVlTG9jYXRpb24sIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgICBuYW1lOiB2YWx1ZVBhcmFtZXRlci5uYW1lLCB0eXBlOiB2YWx1ZVR5cGVcbiAgICB9LCB7bmFtZTogdmFsdWVMb2NhdGlvbn0pXG4gICAgY29uc3QgYm9keUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGxvb3BEZXB0aDogKGNvbnRleHQubG9vcERlcHRoID8/IDApICsgMX1cblxuICAgIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldChrZXlQYXJhbWV0ZXIubmFtZSwga2V5VHlwZSlcbiAgICBib2R5Q29udGV4dC5iaW5kaW5ncy5zZXQodmFsdWVQYXJhbWV0ZXIubmFtZSwgdmFsdWVUeXBlKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGJvZHk6IGNvbnZlcnRCbG9jayhibG9jay5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgPyBibG9jay5ib2R5IDogbnVsbCwgY29tbWVudHMsIGJvZHlDb250ZXh0LCBmaWxlbmFtZSxcbiAgICAgICAgc291cmNlLCBub2RlTG9jYXRpb24oYmxvY2ssIGZpbGVuYW1lLCBzb3VyY2UpKSxcbiAgICAgIGtleUJpbmRpbmcsXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBtYXA6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgdmFsdWVCaW5kaW5nXG4gICAgfSwge29wZXJhdG9yOiBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYywgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG4gIGNvbnN0IHBhcmFtZXRlciA9IC8qKiBAdHlwZSB7UmVxdWlyZWRQYXJhbWV0ZXJOb2RlfSAqLyAocGFyYW1ldGVycy5yZXF1aXJlZHNbMF0pXG5cbiAgaWYgKGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiTWFwVHlwZVwiIHx8IGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJtYXAgaXRlcmF0aW9uIHdpdGhvdXQga2V5L3ZhbHVlIHBhaXIgYmluZGluZ1wiLCBub2RlTG9jYXRpb24obm9kZS5yZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgaWYgKCFjb2xsZWN0aW9uVHlwZSB8fCBjb2xsZWN0aW9uVHlwZS5raW5kICE9IFwiTGlzdFR5cGVcIikge1xuICAgIHJldHVybiBtaXNzaW5nVHlwZShcInJ1YnlcIiwgXCJJdGVyYXRpb24gY29sbGVjdGlvblwiLCBub2RlTG9jYXRpb24obm9kZS5yZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgYmluZGluZ0xvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgaW5mZXJyZWRUeXBlID0gY29sbGVjdGlvblR5cGUuZWxlbWVudFR5cGVcbiAgY29uc3QgYmluZGluZ1R5cGUgPSBpdGVyYXRpb25CaW5kaW5nVHlwZShpbmZlcnJlZFR5cGUsIGJpbmRpbmdMb2NhdGlvbilcbiAgY29uc3QgdmFsdWVCaW5kaW5nID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVmFsdWVCaW5kaW5nXCIpLFxuICAgIGxvY2F0aW9uOiBiaW5kaW5nTG9jYXRpb24sXG4gICAgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICBuYW1lOiBwYXJhbWV0ZXIubmFtZSxcbiAgICB0eXBlOiBiaW5kaW5nVHlwZVxuICB9LCB7bmFtZTogYmluZGluZ0xvY2F0aW9ufSlcbiAgY29uc3QgYm9keUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGxvb3BEZXB0aDogKGNvbnRleHQubG9vcERlcHRoID8/IDApICsgMX1cblxuICBib2R5Q29udGV4dC5iaW5kaW5ncy5zZXQocGFyYW1ldGVyLm5hbWUsIGJpbmRpbmdUeXBlKVxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKFxuICAgICAgYmxvY2suYm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlID8gYmxvY2suYm9keSA6IG51bGwsXG4gICAgICBjb21tZW50cyxcbiAgICAgIGJvZHlDb250ZXh0LFxuICAgICAgZmlsZW5hbWUsXG4gICAgICBzb3VyY2UsXG4gICAgICBub2RlTG9jYXRpb24oYmxvY2ssIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgKSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJGb3JFYWNoU3RhdGVtZW50XCIpLFxuICAgIGxpc3Q6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgIGxvY2F0aW9uLFxuICAgIHZhbHVlQmluZGluZ1xuICB9LCB7b3BlcmF0b3I6IHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogRmluZHMgdGhlIGZpcnN0IHBhcnNlciBkZXNjZW5kYW50IG1hdGNoaW5nIG9uZSBleGNsdWRlZCBibG9jayBjb25zdHJ1Y3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGUgfCBudWxsfSBub2RlIC0gUGFyc2VyIHN1YnRyZWUuXG4gKiBAcGFyYW0geyhub2RlOiBpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlKSA9PiBib29sZWFufSBwcmVkaWNhdGUgLSBFeGNsdXNpb24gcHJlZGljYXRlLlxuICogQHJldHVybnMge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGUgfCB1bmRlZmluZWR9IEZpcnN0IHNvdXJjZS1vcmRlcmVkIG1hdGNoLlxuICovXG5mdW5jdGlvbiBmaW5kUnVieURlc2NlbmRhbnQobm9kZSwgcHJlZGljYXRlKSB7XG4gIGlmICghbm9kZSkgcmV0dXJuIHVuZGVmaW5lZFxuICBpZiAocHJlZGljYXRlKG5vZGUpKSByZXR1cm4gbm9kZVxuICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY29tcGFjdENoaWxkTm9kZXMoKSkge1xuICAgIGNvbnN0IG1hdGNoID0gZmluZFJ1YnlEZXNjZW5kYW50KGNoaWxkLCBwcmVkaWNhdGUpXG5cbiAgICBpZiAobWF0Y2gpIHJldHVybiBtYXRjaFxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgb3JkZXJlZCBQcmlzbSBzdGF0ZW1lbnQgbGlzdC5cbiAqIEBwYXJhbSB7U3RhdGVtZW50c05vZGUgfCBudWxsfSBub2RlIC0gUHJpc20gc3RhdGVtZW50cywgb3IgYW4gZW1wdHkgc291cmNlIGJsb2NrLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFByaXNtIGNvbW1lbnRzLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBmYWxsYmFja0xvY2F0aW9uIC0gRW1wdHkgYmxvY2sgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IFNlbWFudGljIGJsb2NrLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0QmxvY2sobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UsIGZhbGxiYWNrTG9jYXRpb24pIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiBcIkJsb2NrXCIsXG4gICAgbG9jYXRpb246IG5vZGUgPyBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkgOiBmYWxsYmFja0xvY2F0aW9uLFxuICAgIHN0YXRlbWVudHM6IG5vZGUgPyBub2RlLmJvZHkubWFwKChzdGF0ZW1lbnQpID0+IGNvbnZlcnRTdGF0ZW1lbnQoc3RhdGVtZW50LCBjb21tZW50cywgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSkpIDogW11cbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyB0aGF0IGEgY29tbWVudCBhbmQgaXRzIG93bmVyIGFyZSBzZXBhcmF0ZWQgYnkgYXQgbW9zdCBvbmUgbmV3bGluZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBnYXAgLSBTb3VyY2UgYmV0d2VlbiB0aGUgY29tbWVudCBhbmQgZm9sbG93aW5nIGl0ZW0uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgZ2FwIGlzIGltbWVkaWF0ZSB3aGl0ZXNwYWNlLlxuICovXG5mdW5jdGlvbiBpc0ltbWVkaWF0ZUNvbW1lbnRHYXAoZ2FwKSB7XG4gIGxldCBuZXdsaW5lcyA9IDBcblxuICBmb3IgKGNvbnN0IGNoYXJhY3RlciBvZiBnYXApIHtcbiAgICBpZiAoY2hhcmFjdGVyID09IFwiXFxuXCIpIHtcbiAgICAgIG5ld2xpbmVzKytcbiAgICB9IGVsc2UgaWYgKGNoYXJhY3RlciAhPSBcIiBcIiAmJiBjaGFyYWN0ZXIgIT0gXCJcXHRcIiAmJiBjaGFyYWN0ZXIgIT0gXCJcXHJcIikge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld2xpbmVzIDw9IDFcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhbiBleGFjdCBzdXBwb3J0ZWQgUnVieSB2YWx1ZS10eXBlIHNwZWxsaW5nLlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IHNvdXJjZVR5cGUgLSBSdWJ5IHR5cGUgY29tbWVudCB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IFt0eXBlTG9jYXRpb25dIC0gRXhhY3QgdHlwZSBjb21tZW50IHRva2VuIGxvY2F0aW9uLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gW3JlY29yZE5hbWVzXSAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyPn0gW3R5cGVQYXJhbWV0ZXJzXSAtIERlY2xhcmF0aW9uLXNjb3BlZCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVmFsdWVUeXBlfSBTZW1hbnRpYyB0eXBlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHlwZShzb3VyY2VUeXBlLCBzdWJqZWN0LCBsb2NhdGlvbiwgc291cmNlLCB0eXBlTG9jYXRpb24gPSBsb2NhdGlvbiwgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKCksIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIHJldHVybiBkb2N1bWVudGVkVmFsdWVUeXBlKHtsYW5ndWFnZTogXCJydWJ5XCIsIGxvY2F0aW9uOiB0eXBlTG9jYXRpb24sIG93bmVyTG9jYXRpb246IGxvY2F0aW9uLCByZWNvcmRzOiByZWNvcmROYW1lcywgc291cmNlLCBzb3VyY2VUeXBlLCBzdWJqZWN0LCB0eXBlUGFyYW1ldGVyc30pXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBSdWJ5IGRlZmluaXRpb24gc2lnbmF0dXJlIGJlZm9yZSBib2R5IGV4cHJlc3Npb25zLlxuICogQHBhcmFtIHtEZWZOb2RlfSBub2RlIC0gUHJpc20gZGVmaW5pdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc20vc3JjL2Rlc2VyaWFsaXplLmpzXCIpLkNvbW1lbnRbXX0gY29tbWVudHMgLSBQcmlzbSBjb21tZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IG93bmVySWQgLSBTdGFibGUgZnVuY3Rpb24gaWRlbnRpdHkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxvd0J1aWx0aW5PdXRwdXRdIC0gV2hldGhlciBjb21waWxlciBhdXRob3JpdHkgYWRtaXRzIHRoZSBleGFjdCBvdXRwdXQgZmFjYWRlIGZ1bmN0aW9uLlxuICogQHJldHVybnMge1J1YnlGdW5jdGlvblNpZ25hdHVyZX0gU2VtYW50aWMgc2lnbmF0dXJlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RnVuY3Rpb25TaWduYXR1cmUobm9kZSwgY29tbWVudHMsIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCBvd25lcklkLCBhbGxvd0J1aWx0aW5PdXRwdXQgPSBmYWxzZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJMaXN0ID0gbm9kZS5wYXJhbWV0ZXJzXG5cbiAgaWYgKG5vZGUucmVjZWl2ZXIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJzaW5nbGV0b24gbWV0aG9kXCIsIG5vZGVMb2NhdGlvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgbmFtZUxvY2F0aW9uID0gcHJpc21Mb2NhdGlvbihub2RlLm5hbWVMb2MsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcInB1dHNcIiAmJiAhYWxsb3dCdWlsdGluT3V0cHV0KSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImZ1bmN0aW9uICdwdXRzJyBjYXB0dXJlcyBidWlsdC1pbiBwcmludGluZ1wiLCBuYW1lTG9jYXRpb24pXG4gIH1cbiAgY29uc3QgdW5zdXBwb3J0ZWRQYXJhbWV0ZXIgPSBwYXJhbWV0ZXJMaXN0ICYmIFtcbiAgICBwYXJhbWV0ZXJMaXN0Lm9wdGlvbmFsc1swXSwgcGFyYW1ldGVyTGlzdC5yZXN0LCBwYXJhbWV0ZXJMaXN0LnBvc3RzWzBdLCBwYXJhbWV0ZXJMaXN0LmtleXdvcmRzWzBdLFxuICAgIHBhcmFtZXRlckxpc3Qua2V5d29yZFJlc3QsIHBhcmFtZXRlckxpc3QuYmxvY2ssXG4gICAgcGFyYW1ldGVyTGlzdC5yZXF1aXJlZHMuZmluZCgocGFyYW1ldGVyKSA9PiAhKHBhcmFtZXRlciBpbnN0YW5jZW9mIFJlcXVpcmVkUGFyYW1ldGVyTm9kZSkpXG4gIF0uZmluZChCb29sZWFuKVxuXG4gIGlmICh1bnN1cHBvcnRlZFBhcmFtZXRlcikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJwYXJhbWV0ZXJzXCIsIG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZFBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICBjb25zdCBkZWNsYXJlZFR5cGVzID0gdHlwZUNvbW1lbnRzKGNvbW1lbnRzLCBub2RlLCBmaWxlbmFtZSwgc291cmNlLCBvd25lcklkKVxuICBjb25zdCB0eXBlUGFyYW1ldGVyTmFtZXMgPSBuZXcgTWFwKChkZWNsYXJlZFR5cGVzLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXJdKSlcbiAgY29uc3QgcmVxdWlyZWRQYXJhbWV0ZXJzID0gcGFyYW1ldGVyTGlzdD8ucmVxdWlyZWRzID8/IFtdXG4gIGNvbnN0IGV4dHJhQW5ub3RhdGlvbiA9IFsuLi5kZWNsYXJlZFR5cGVzLnBhcmFtZXRlcnMua2V5cygpXS5maW5kKChuYW1lKSA9PlxuICAgICFyZXF1aXJlZFBhcmFtZXRlcnMuc29tZSgocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIgaW5zdGFuY2VvZiBSZXF1aXJlZFBhcmFtZXRlck5vZGUgJiYgcGFyYW1ldGVyLm5hbWUgPT0gbmFtZSkpXG5cbiAgaWYgKGV4dHJhQW5ub3RhdGlvbikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBgYW5ub3RhdGlvbiBmb3IgdW5rbm93biBwYXJhbWV0ZXIgJyR7ZXh0cmFBbm5vdGF0aW9ufSdgLCBsb2NhdGlvbilcbiAgY29uc3QgcGFyYW1ldGVycyA9IHJlcXVpcmVkUGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4ge1xuICAgIGlmICghKHBhcmFtZXRlciBpbnN0YW5jZW9mIFJlcXVpcmVkUGFyYW1ldGVyTm9kZSkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgcGFyYW1ldGVyLmNvbnN0cnVjdG9yLm5hbWUsIGxvY2F0aW9uKVxuXG4gICAgY29uc3QgcGFyYW1ldGVyTG9jYXRpb24gPSBub2RlTG9jYXRpb24ocGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgY29uc3QgZGVjbGFyZWRUeXBlID0gZGVjbGFyZWRUeXBlcy5wYXJhbWV0ZXJzLmdldChwYXJhbWV0ZXIubmFtZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlBhcmFtZXRlclwiKSxcbiAgICAgIGxvY2F0aW9uOiBwYXJhbWV0ZXJMb2NhdGlvbixcbiAgICAgIG5hbWU6IHBhcmFtZXRlci5uYW1lLFxuICAgICAgdHlwZTogY29udmVydFR5cGUoZGVjbGFyZWRUeXBlPy5zb3VyY2VUeXBlLCBgUGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfSdgLCBwYXJhbWV0ZXJMb2NhdGlvbiwgc291cmNlLFxuICAgICAgICBkZWNsYXJlZFR5cGU/LmxvY2F0aW9uLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlck5hbWVzKVxuICAgIH0sIHtuYW1lOiBwYXJhbWV0ZXJMb2NhdGlvbn0pXG4gIH0pXG4gIHJldHVybiB7XG4gICAgbG9jYXRpb24sXG4gICAgbmFtZTogbm9kZS5uYW1lLFxuICAgIG5hbWVMb2NhdGlvbixcbiAgICBwYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGU6IGRlY2xhcmVkVHlwZXMucmV0dXJuVHlwZT8uc291cmNlVHlwZSA9PSBcIlt2b2lkXVwiXG4gICAgICA/IHJlcXVpcmVTb3VyY2VSZXR1cm5UeXBlKFwicnVieVwiLCBcIlt2b2lkXVwiLCBgRnVuY3Rpb24gJyR7bm9kZS5uYW1lfScgcmV0dXJuYCwgbG9jYXRpb24sIGRlY2xhcmVkVHlwZXMucmV0dXJuVHlwZS5sb2NhdGlvbilcbiAgICAgIDogY29udmVydFR5cGUoZGVjbGFyZWRUeXBlcy5yZXR1cm5UeXBlPy5zb3VyY2VUeXBlLCBgRnVuY3Rpb24gJyR7bm9kZS5uYW1lfScgcmV0dXJuYCwgbG9jYXRpb24sIHNvdXJjZSxcbiAgICAgICAgZGVjbGFyZWRUeXBlcy5yZXR1cm5UeXBlPy5sb2NhdGlvbiwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcyksXG4gICAgLi4uKGRlY2xhcmVkVHlwZXMudHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IGRlY2xhcmVkVHlwZXMudHlwZVBhcmFtZXRlcnN9IDoge30pXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIFJ1YnkgZGVmaW5pdGlvbiBib2R5IHVzaW5nIGFsbCBhbHJlYWR5LXByb3ZlZCBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtEZWZOb2RlfSBub2RlIC0gUHJpc20gZGVmaW5pdGlvbi5cbiAqIEBwYXJhbSB7UnVieUZ1bmN0aW9uU2lnbmF0dXJlfSBzaWduYXR1cmUgLSBDb252ZXJ0ZWQgc2lnbmF0dXJlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBSdWJ5RnVuY3Rpb25TaWduYXR1cmU+fSBmdW5jdGlvbnMgLSBNb2R1bGUgc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZCBkZWNsYXJhdGlvbnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gUmVmZXJlbmNlIGNsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvck5hbWVzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFByaXNtIGNvbW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSBTZW1hbnRpYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZ1bmN0aW9uKG5vZGUsIHNpZ25hdHVyZSwgZnVuY3Rpb25zLCByZWNvcmROYW1lcywgcmVjb3JkcywgY2xhc3NlcywgZXJyb3JOYW1lcywgZXJyb3JzLCBjb21tZW50cywgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBjb250ZXh0ID0ge1xuICAgIGJpbmRpbmdzOiBuZXcgTWFwKHNpZ25hdHVyZS5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLFxuICAgIGNsYXNzZXMsXG4gICAgZXJyb3JOYW1lcyxcbiAgICBlcnJvcnMsXG4gICAgZnVuY3Rpb25zLFxuICAgIG9yZGVyZWRNYXBEZWNsYXJhdGlvbnM6IG9yZGVyZWRNYXBEZWNsYXJhdGlvbnNGb3JSdWJ5KG5vZGUuYm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlID8gbm9kZS5ib2R5LmJvZHkgOiBbXSksXG4gICAgcmVjb3JkTmFtZXMsXG4gICAgcmVjb3JkcyxcbiAgICByZXR1cm5UeXBlOiBzaWduYXR1cmUucmV0dXJuVHlwZSxcbiAgICB0eXBlUGFyYW1ldGVyczogbmV3IE1hcCgoc2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXJdKSlcbiAgfVxuICBjb25zdCBib2R5ID0gY29udmVydEJsb2NrKFxuICAgIG5vZGUuYm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlID8gbm9kZS5ib2R5IDogbnVsbCxcbiAgICBjb21tZW50cyxcbiAgICBjb250ZXh0LFxuICAgIGZpbGVuYW1lLFxuICAgIHNvdXJjZSxcbiAgICBzaWduYXR1cmUubG9jYXRpb25cbiAgKVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5LFxuICAgIGtpbmQ6IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiLFxuICAgIGxvY2F0aW9uOiBzaWduYXR1cmUubG9jYXRpb24sXG4gICAgbmFtZTogc2lnbmF0dXJlLm5hbWUsXG4gICAgcGFyYW1ldGVyczogc2lnbmF0dXJlLnBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogc2lnbmF0dXJlLnJldHVyblR5cGUsXG4gICAgLi4uKHNpZ25hdHVyZS50eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyczogc2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9LCB7bmFtZTogc2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pXG59XG5cbi8qKlxuICogUmVzb2x2ZXMgcGFyc2VyLW93bmVkIHBhaXIgYmxvY2tzIHRvIGV4YWN0IGRlY2xhcmF0aW9ucyBpbnNpZGUgb25lIGxleGljYWwgb3duZXIuXG4gKiBBbWJpZ3VvdXMgc2FtZS1uYW1lIGRlY2xhcmF0aW9ucyBwcm9kdWNlIG5vIGV2aWRlbmNlIGFuZCBmYWlsIGR1cmluZyBsb29wIGNvbnZlcnNpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGVbXX0gbm9kZXMgLSBGdW5jdGlvbiBib2R5IG9yIGVudHJ5LXBvaW50IHJvb3RzLlxuICogQHJldHVybnMge1NldDxvYmplY3Q+fSBFeGFjdCBwYWlyLWl0ZXJhdGVkIHBhcnNlciBkZWNsYXJhdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIG9yZGVyZWRNYXBEZWNsYXJhdGlvbnNGb3JSdWJ5KG5vZGVzKSB7XG4gIC8qKiBAdHlwZSB7e2RlY2xhcmF0aW9uOiBMb2NhbFZhcmlhYmxlV3JpdGVOb2RlLCBuYW1lOiBzdHJpbmcsIG9mZnNldDogbnVtYmVyfVtdfSAqL1xuICBjb25zdCBkZWNsYXJhdGlvbnMgPSBbXVxuICAvKiogQHR5cGUge3tuYW1lOiBzdHJpbmcsIG9mZnNldDogbnVtYmVyfVtdfSAqL1xuICBjb25zdCByZWNlaXZlcnMgPSBbXVxuICAvKipcbiAgICogVmlzaXRzIG9uZSBwYXJzZXIgY2FuZGlkYXRlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGV9IG5vZGUgLSBQYXJzZXIgY2FuZGlkYXRlLlxuICAgKi9cbiAgY29uc3QgdmlzaXQgPSAobm9kZSkgPT4ge1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgRGVmTm9kZSB8fCBub2RlIGluc3RhbmNlb2YgQ2xhc3NOb2RlKSByZXR1cm5cbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVXcml0ZU5vZGUpIGRlY2xhcmF0aW9ucy5wdXNoKHtcbiAgICAgIGRlY2xhcmF0aW9uOiBub2RlLFxuICAgICAgbmFtZTogbm9kZS5uYW1lLFxuICAgICAgb2Zmc2V0OiBub2RlLmxvY2F0aW9uLnN0YXJ0T2Zmc2V0XG4gICAgfSlcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBMb2NhbFZhcmlhYmxlUmVhZE5vZGUgJiYgbm9kZS5uYW1lID09IFwiZWFjaFwiICYmXG4gICAgICBub2RlLmJsb2NrIGluc3RhbmNlb2YgQmxvY2tOb2RlICYmIG5vZGUuYmxvY2sucGFyYW1ldGVycyBpbnN0YW5jZW9mIEJsb2NrUGFyYW1ldGVyc05vZGUgJiZcbiAgICAgIG5vZGUuYmxvY2sucGFyYW1ldGVycy5wYXJhbWV0ZXJzPy5yZXF1aXJlZHMubGVuZ3RoID09IDIpIHJlY2VpdmVycy5wdXNoKHtcbiAgICAgIG5hbWU6IG5vZGUucmVjZWl2ZXIubmFtZSxcbiAgICAgIG9mZnNldDogbm9kZS5sb2NhdGlvbi5zdGFydE9mZnNldFxuICAgIH0pXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNvbXBhY3RDaGlsZE5vZGVzKCkpIHZpc2l0KGNoaWxkKVxuICB9XG5cbiAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB2aXNpdChub2RlKVxuICBjb25zdCBzZWxlY3RlZCA9IG5ldyBTZXQoKVxuICBmb3IgKGNvbnN0IHJlY2VpdmVyIG9mIHJlY2VpdmVycykge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBkZWNsYXJhdGlvbnMuZmlsdGVyKCh7bmFtZSwgb2Zmc2V0fSkgPT4gbmFtZSA9PSByZWNlaXZlci5uYW1lICYmIG9mZnNldCA8IHJlY2VpdmVyLm9mZnNldClcblxuICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PSAxKSBzZWxlY3RlZC5hZGQobWF0Y2hlc1swXS5kZWNsYXJhdGlvbilcbiAgfVxuXG4gIHJldHVybiBzZWxlY3RlZFxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBlbXB0eSBTdGFuZGFyZEVycm9yIHN1YmNsYXNzLlxuICogQHBhcmFtIHtDbGFzc05vZGV9IG5vZGUgLSBQcmlzbSBjbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBQcmVkZWNsYXJlZCBzZW1hbnRpYyBlcnJvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gU2VtYW50aWMgZXJyb3IgZGVjbGFyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRSdWJ5RXJyb3Iobm9kZSwgZGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoIShub2RlLmNvbnN0YW50UGF0aCBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUpIHx8ICEobm9kZS5zdXBlcmNsYXNzIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSkgfHxcbiAgICBub2RlLnN1cGVyY2xhc3MubmFtZSAhPSBcIlN0YW5kYXJkRXJyb3JcIiB8fCAhbm9kZS5pbmhlcml0YW5jZU9wZXJhdG9yTG9jIHx8IG5vZGUuYm9keSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJub25jYW5vbmljYWwgdHlwZWQgZXJyb3IgZGVjbGFyYXRpb25cIiwgbG9jYXRpb24pXG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge1xuICAgIG5hbWU6IG5vZGVMb2NhdGlvbihub2RlLmNvbnN0YW50UGF0aCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgdHlwZTogbm9kZUxvY2F0aW9uKG5vZGUuc3VwZXJjbGFzcywgZmlsZW5hbWUsIHNvdXJjZSlcbiAgfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgYm91bmRlZCBSdWJ5IHJlZmVyZW5jZS1jbGFzcyBwcm9maWxlLlxuICogQHBhcmFtIHtDbGFzc05vZGV9IG5vZGUgLSBQcmlzbSBjbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBQcmVkZWNsYXJlZCBjbGFzcyBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IG5vbWluYWxOYW1lcyAtIFZpc2libGUgbm9taW5hbCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZHMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gQ2xhc3NlcyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgUnVieUZ1bmN0aW9uU2lnbmF0dXJlPn0gZnVuY3Rpb25zIC0gVG9wLWxldmVsIHNpZ25hdHVyZXMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvck5hbWVzIC0gRXJyb3JzIGJ5IG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvcnMgLSBFcnJvcnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtL3NyYy9kZXNlcmlhbGl6ZS5qc1wiKS5Db21tZW50W119IGNvbW1lbnRzIC0gUHJpc20gY29tbWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259IFNlbWFudGljIGNsYXNzLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UnVieVJlZmVyZW5jZUNsYXNzKG5vZGUsIGRlY2xhcmF0aW9uLCBub21pbmFsTmFtZXMsIHJlY29yZHMsIGNsYXNzZXMsIGZ1bmN0aW9ucywgZXJyb3JOYW1lcywgZXJyb3JzLFxuICBjb21tZW50cywgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICghKG5vZGUuY29uc3RhbnRQYXRoIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSkgfHwgbm9kZS5zdXBlcmNsYXNzIHx8IG5vZGUuaW5oZXJpdGFuY2VPcGVyYXRvckxvYyB8fFxuICAgICEobm9kZS5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInJlZmVyZW5jZSBjbGFzcyBpbmhlcml0YW5jZSwgcXVhbGlmaWVkIG5hbWUsIG9yIGVtcHR5IGJvZHlcIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgbWVtYmVycyA9IG5vZGUuYm9keS5ib2R5XG4gIGNvbnN0IGluaXRpYWxpemVycyA9IG1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlciBpbnN0YW5jZW9mIERlZk5vZGUgJiYgbWVtYmVyLm5hbWUgPT0gXCJpbml0aWFsaXplXCIpXG4gIGNvbnN0IG1ldGhvZE5vZGVzID0gLyoqIEB0eXBlIHtEZWZOb2RlW119ICovIChtZW1iZXJzLmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIgaW5zdGFuY2VvZiBEZWZOb2RlICYmIG1lbWJlci5uYW1lICE9IFwiaW5pdGlhbGl6ZVwiKSlcbiAgY29uc3QgcmVzZXJ2ZWRNZXRob2QgPSBtZXRob2ROb2Rlcy5maW5kKChtZXRob2QpID0+IHJlZmVyZW5jZU1ldGhvZEhvb2tzLmhhcyhtZXRob2QubmFtZSkpXG5cbiAgaWYgKGluaXRpYWxpemVycy5sZW5ndGggIT0gMSB8fCBtZW1iZXJzLnNvbWUoKG1lbWJlcikgPT4gIShtZW1iZXIgaW5zdGFuY2VvZiBEZWZOb2RlKSkgfHwgcmVzZXJ2ZWRNZXRob2QpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwicmVmZXJlbmNlIGNsYXNzIHJlcXVpcmVzIG9uZSBpbml0aWFsaXplciBhbmQgb3JkaW5hcnkgbWV0aG9kc1wiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBpbml0aWFsaXplciA9IC8qKiBAdHlwZSB7RGVmTm9kZX0gKi8gKGluaXRpYWxpemVyc1swXSlcbiAgY29uc3QgcGFyYW1ldGVycyA9IGluaXRpYWxpemVyLnBhcmFtZXRlcnM/LnJlcXVpcmVkcyA/PyBbXVxuICBjb25zdCBpbnZhbGlkUGFyYW1ldGVyID0gaW5pdGlhbGl6ZXIucGFyYW1ldGVycyAmJiBbaW5pdGlhbGl6ZXIucGFyYW1ldGVycy5vcHRpb25hbHNbMF0sIGluaXRpYWxpemVyLnBhcmFtZXRlcnMucmVzdCxcbiAgICBpbml0aWFsaXplci5wYXJhbWV0ZXJzLnBvc3RzWzBdLCBpbml0aWFsaXplci5wYXJhbWV0ZXJzLmtleXdvcmRzWzBdLCBpbml0aWFsaXplci5wYXJhbWV0ZXJzLmtleXdvcmRSZXN0LFxuICAgIGluaXRpYWxpemVyLnBhcmFtZXRlcnMuYmxvY2tdLmZpbmQoQm9vbGVhbilcbiAgY29uc3Qgc3RhdGVtZW50cyA9IGluaXRpYWxpemVyLmJvZHkgaW5zdGFuY2VvZiBTdGF0ZW1lbnRzTm9kZSA/IGluaXRpYWxpemVyLmJvZHkuYm9keSA6IFtdXG4gIGNvbnN0IGFubm90YXRpb25zID0gdHlwZUNvbW1lbnRzKGNvbW1lbnRzLCBpbml0aWFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYWNxdWlzaXRpb24gPSBzdGF0ZW1lbnRzLmxlbmd0aCA9PSAxICYmIHN0YXRlbWVudHNbMF0gaW5zdGFuY2VvZiBJbnN0YW5jZVZhcmlhYmxlV3JpdGVOb2RlICYmXG4gICAgc3RhdGVtZW50c1swXS5uYW1lID09IFwiQHJlc291cmNlXCIgJiYgc3RhdGVtZW50c1swXS52YWx1ZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmICFzdGF0ZW1lbnRzWzBdLnZhbHVlLnJlY2VpdmVyICYmXG4gICAgIXN0YXRlbWVudHNbMF0udmFsdWUuYmxvY2sgJiYgc3RhdGVtZW50c1swXS52YWx1ZS5uYW1lID09IFwidjFfY29ubmVjdFwiICYmXG4gICAgc3RhdGVtZW50c1swXS52YWx1ZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCA9PSAyICYmIHBhcmFtZXRlcnMubGVuZ3RoID09IDIgJiZcbiAgICBwYXJhbWV0ZXJzWzBdIGluc3RhbmNlb2YgUmVxdWlyZWRQYXJhbWV0ZXJOb2RlICYmIHBhcmFtZXRlcnNbMF0ubmFtZSA9PSBcImhvc3RcIiAmJlxuICAgIHBhcmFtZXRlcnNbMV0gaW5zdGFuY2VvZiBSZXF1aXJlZFBhcmFtZXRlck5vZGUgJiYgcGFyYW1ldGVyc1sxXS5uYW1lID09IFwicG9ydFwiICYmXG4gICAgc3RhdGVtZW50c1swXS52YWx1ZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0gaW5zdGFuY2VvZiBMb2NhbFZhcmlhYmxlUmVhZE5vZGUgJiZcbiAgICBzdGF0ZW1lbnRzWzBdLnZhbHVlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXS5uYW1lID09IFwiaG9zdFwiICYmXG4gICAgc3RhdGVtZW50c1swXS52YWx1ZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMV0gaW5zdGFuY2VvZiBMb2NhbFZhcmlhYmxlUmVhZE5vZGUgJiZcbiAgICBzdGF0ZW1lbnRzWzBdLnZhbHVlLmFyZ3VtZW50c18uYXJndW1lbnRzX1sxXS5uYW1lID09IFwicG9ydFwiICYmIGRlY2xhcmF0aW9uLm5hbWUgPT0gXCJUQ1BTb2NrZXRcIiAmJlxuICAgIGZ1bmN0aW9ucy5nZXQoXCJ2MV9jb25uZWN0XCIpPy5yZXR1cm5UeXBlLmtpbmQgPT0gXCJPd25lZFJlc291cmNlVHlwZVwiXG5cbiAgaWYgKGluaXRpYWxpemVyLnJlY2VpdmVyIHx8IGludmFsaWRQYXJhbWV0ZXIgfHwgYW5ub3RhdGlvbnMucmV0dXJuVHlwZSB8fCBhbm5vdGF0aW9ucy5wYXJhbWV0ZXJzLnNpemUgIT0gcGFyYW1ldGVycy5sZW5ndGggfHxcbiAgICAhYWNxdWlzaXRpb24gJiYgc3RhdGVtZW50cy5sZW5ndGggIT0gcGFyYW1ldGVycy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibm9uY2Fub25pY2FsIHJlZmVyZW5jZSBjbGFzcyBpbml0aWFsaXplclwiLCBub2RlTG9jYXRpb24oaW5pdGlhbGl6ZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGRlY2xhcmF0aW9uLmZpZWxkcyA9IGFjcXVpc2l0aW9uID8gW3dpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGlkOiBgJHtkZWNsYXJhdGlvbi5pZH06ZmllbGQ6MGAsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkXCIpLFxuICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oLyoqIEB0eXBlIHtJbnN0YW5jZVZhcmlhYmxlV3JpdGVOb2RlfSAqLyAoc3RhdGVtZW50c1swXSksIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIG5hbWU6IFwicmVzb3VyY2VcIixcbiAgICB0eXBlOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLk93bmVkUmVzb3VyY2VUeXBlfSAqLyAoc3RydWN0dXJlZENsb25lKGZ1bmN0aW9ucy5nZXQoXCJ2MV9jb25uZWN0XCIpPy5yZXR1cm5UeXBlKSlcbiAgfSwge25hbWU6IG5vZGVMb2NhdGlvbigvKiogQHR5cGUge0luc3RhbmNlVmFyaWFibGVXcml0ZU5vZGV9ICovIChzdGF0ZW1lbnRzWzBdKSwgZmlsZW5hbWUsIHNvdXJjZSl9KV0gOiBwYXJhbWV0ZXJzLm1hcCgoY2FuZGlkYXRlLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IC8qKiBAdHlwZSB7UmVxdWlyZWRQYXJhbWV0ZXJOb2RlfSAqLyAoY2FuZGlkYXRlKVxuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBzdGF0ZW1lbnRzW2luZGV4XVxuICAgIGNvbnN0IGFubm90YXRlZCA9IGFubm90YXRpb25zLnBhcmFtZXRlcnMuZ2V0KHBhcmFtZXRlci5uYW1lKVxuXG4gICAgaWYgKCEocGFyYW1ldGVyIGluc3RhbmNlb2YgUmVxdWlyZWRQYXJhbWV0ZXJOb2RlKSB8fCAhKGFzc2lnbm1lbnQgaW5zdGFuY2VvZiBJbnN0YW5jZVZhcmlhYmxlV3JpdGVOb2RlKSB8fFxuICAgICAgYXNzaWdubWVudC5uYW1lICE9IGBAJHtwYXJhbWV0ZXIubmFtZX1gIHx8ICEoYXNzaWdubWVudC52YWx1ZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVSZWFkTm9kZSkgfHxcbiAgICAgIGFzc2lnbm1lbnQudmFsdWUubmFtZSAhPSBwYXJhbWV0ZXIubmFtZSB8fCAhYW5ub3RhdGVkKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwicHJpdmF0ZSBmaWVsZCBub3QgaW5pdGlhbGl6ZWQgZXhhY3RseSBvbmNlIGluIHBhcmFtZXRlciBvcmRlclwiLFxuICAgICAgICBub2RlTG9jYXRpb24oYXNzaWdubWVudCA/PyBpbml0aWFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmZpZWxkOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihhc3NpZ25tZW50LCBmaWxlbmFtZSwgc291cmNlKSwgbmFtZTogcGFyYW1ldGVyLm5hbWUsXG4gICAgICB0eXBlOiBjb252ZXJ0VHlwZShhbm5vdGF0ZWQuc291cmNlVHlwZSwgYFByaXZhdGUgZmllbGQgJyR7cGFyYW1ldGVyLm5hbWV9J2AsIG5vZGVMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBzb3VyY2UsIGFubm90YXRlZC5sb2NhdGlvbiwgbm9taW5hbE5hbWVzKX0sIHtuYW1lOiBub2RlTG9jYXRpb24oYXNzaWdubWVudCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9KVxuICBjb25zdCBjb25zdHJ1Y3RvclBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLm1hcCgoY2FuZGlkYXRlLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IC8qKiBAdHlwZSB7UmVxdWlyZWRQYXJhbWV0ZXJOb2RlfSAqLyAoY2FuZGlkYXRlKVxuICAgIGNvbnN0IHBhcmFtZXRlckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBhbm5vdGF0ZWQgPSBhbm5vdGF0aW9ucy5wYXJhbWV0ZXJzLmdldChwYXJhbWV0ZXIubmFtZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQYXJhbWV0ZXJcIiksIGxvY2F0aW9uOiBwYXJhbWV0ZXJMb2NhdGlvbiwgbmFtZTogcGFyYW1ldGVyLm5hbWUsXG4gICAgICB0eXBlOiBhY3F1aXNpdGlvblxuICAgICAgICA/IGNvbnZlcnRUeXBlKGFubm90YXRlZD8uc291cmNlVHlwZSwgYENvbnN0cnVjdG9yIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24sIHNvdXJjZSxcbiAgICAgICAgICBhbm5vdGF0ZWQ/LmxvY2F0aW9uLCBub21pbmFsTmFtZXMpXG4gICAgICAgIDogZGVjbGFyYXRpb24uZmllbGRzW2luZGV4XS50eXBlfSwge25hbWU6IHBhcmFtZXRlckxvY2F0aW9ufSlcbiAgfSlcbiAgZGVjbGFyYXRpb24uY29uc3RydWN0b3IgPSB3aXRoUGFyc2VyUmFuZ2VzKHtib2R5OiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSAqLyAoe30pLFxuICAgIGlkOiBgJHtkZWNsYXJhdGlvbi5pZH06Y29uc3RydWN0b3JgLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGluaXRpYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBwYXJhbWV0ZXJzOiBjb25zdHJ1Y3RvclBhcmFtZXRlcnN9LCB7Y29uc3RydWN0b3I6IHByaXNtTG9jYXRpb24oaW5pdGlhbGl6ZXIubmFtZUxvYywgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICBjb25zdCBtZXRob2RTaWduYXR1cmVzID0gbWV0aG9kTm9kZXMubWFwKChtZXRob2QsIGluZGV4KSA9PlxuICAgIGNvbnZlcnRGdW5jdGlvblNpZ25hdHVyZShtZXRob2QsIGNvbW1lbnRzLCBmaWxlbmFtZSwgc291cmNlLCBub21pbmFsTmFtZXMsIGAke2RlY2xhcmF0aW9uLmlkfTptZXRob2Q6JHtpbmRleH1gKSlcbiAgZGVjbGFyYXRpb24ubWV0aG9kcyA9IG1ldGhvZFNpZ25hdHVyZXMubWFwKChzaWduYXR1cmUsIGluZGV4KSA9PiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5OiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSAqLyAoe30pLCBpZDogYCR7ZGVjbGFyYXRpb24uaWR9Om1ldGhvZDoke2luZGV4fWAsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWV0aG9kRGVjbGFyYXRpb25cIiksIGxvY2F0aW9uOiBzaWduYXR1cmUubG9jYXRpb24sIG5hbWU6IHNpZ25hdHVyZS5uYW1lLFxuICAgIHBhcmFtZXRlcnM6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzLCByZXR1cm5UeXBlOiBzaWduYXR1cmUucmV0dXJuVHlwZVxuICB9LCB7bmFtZTogc2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pKVxuICBjb25zdCBiYXNlID0ge2JpbmRpbmdzOiBuZXcgTWFwKCksIGNsYXNzZXMsIGN1cnJlbnRDbGFzczogZGVjbGFyYXRpb24sIGVycm9yTmFtZXMsIGVycm9ycywgZnVuY3Rpb25zLFxuICAgIHJlY29yZE5hbWVzOiBub21pbmFsTmFtZXMsIHJlY29yZHN9XG5cbiAgZGVjbGFyYXRpb24uY29uc3RydWN0b3IuYm9keSA9IGNvbnZlcnRCbG9jayhpbml0aWFsaXplci5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgPyBpbml0aWFsaXplci5ib2R5IDogbnVsbCxcbiAgICBjb21tZW50cywgey4uLmJhc2UsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnN0cnVjdG9yUGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXIudHlwZV0pKSxcbiAgICAgIHJldHVyblR5cGU6IHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJUeXBlUmVmZXJlbmNlXCIpLCBuYW1lOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJ2b2lkXCIpfX0sXG4gICAgZmlsZW5hbWUsIHNvdXJjZSwgZGVjbGFyYXRpb24uY29uc3RydWN0b3IubG9jYXRpb24pXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBtZXRob2ROb2Rlcy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBtZXRob2QgPSBkZWNsYXJhdGlvbi5tZXRob2RzW2luZGV4XVxuICAgIGNvbnN0IG1ldGhvZEJvZHkgPSBtZXRob2ROb2Rlc1tpbmRleF0uYm9keVxuXG4gICAgbWV0aG9kLmJvZHkgPSBjb252ZXJ0QmxvY2sobWV0aG9kQm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlID8gbWV0aG9kQm9keSA6IG51bGwsXG4gICAgICBjb21tZW50cywgey4uLmJhc2UsIGJpbmRpbmdzOiBuZXcgTWFwKG1ldGhvZC5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLFxuICAgICAgICByZXR1cm5UeXBlOiBtZXRob2QucmV0dXJuVHlwZX0sIGZpbGVuYW1lLCBzb3VyY2UsIG1ldGhvZC5sb2NhdGlvbilcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGRlY2xhcmF0aW9uLCB7bmFtZTogbm9kZUxvY2F0aW9uKG5vZGUuY29uc3RhbnRQYXRoLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IHR5cGVkLXJlYWRlci9pbml0aWFsaXplci9mcmVlemUgUnVieSByZWNvcmQgcHJvZmlsZS5cbiAqIEBwYXJhbSB7Q2xhc3NOb2RlfSBub2RlIC0gUHJpc20gY2xhc3MgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIFByZWRlY2xhcmVkIG5vbWluYWwgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IG5hbWUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtL3NyYy9kZXNlcmlhbGl6ZS5qc1wiKS5Db21tZW50W119IGNvbW1lbnRzIC0gUGFyc2VyLW93bmVkIGNvbW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbn0gU2VtYW50aWMgcmVjb3JkLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UnVieVJlY29yZChub2RlLCBkZWNsYXJhdGlvbiwgcmVjb3JkTmFtZXMsIGNvbW1lbnRzLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXJOYW1lcyA9IG5ldyBNYXAoKGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXJdKSlcblxuICBpZiAoIShub2RlLmNvbnN0YW50UGF0aCBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUpIHx8IG5vZGUuc3VwZXJjbGFzcyB8fCBub2RlLmluaGVyaXRhbmNlT3BlcmF0b3JMb2MpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwicmVjb3JkIGluaGVyaXRhbmNlIG9yIHF1YWxpZmllZCBuYW1lXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IG1lbWJlcnMgPSBub2RlLmJvZHkgaW5zdGFuY2VvZiBTdGF0ZW1lbnRzTm9kZSA/IG5vZGUuYm9keS5ib2R5IDogW11cbiAgY29uc3QgaW5pdGlhbGl6ZXJJbmRleCA9IG1lbWJlcnMuZmluZEluZGV4KChtZW1iZXIpID0+IG1lbWJlciBpbnN0YW5jZW9mIERlZk5vZGUgJiYgbWVtYmVyLm5hbWUgPT0gXCJpbml0aWFsaXplXCIpXG5cbiAgaWYgKGluaXRpYWxpemVySW5kZXggPCAwIHx8IGluaXRpYWxpemVySW5kZXggIT0gbWVtYmVycy5sZW5ndGggLSAxIHx8IG1lbWJlcnMuc2xpY2UoMCwgaW5pdGlhbGl6ZXJJbmRleCkuc29tZSgobWVtYmVyKSA9PlxuICAgICEobWVtYmVyIGluc3RhbmNlb2YgQ2FsbE5vZGUpIHx8IG1lbWJlci5yZWNlaXZlciB8fCBtZW1iZXIubmFtZSAhPSBcImF0dHJfcmVhZGVyXCIgfHwgbWVtYmVyLmJsb2NrIHx8XG4gICAgbWVtYmVyLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoICE9IDEgfHwgIShtZW1iZXIuYXJndW1lbnRzXy5hcmd1bWVudHNfWzBdIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInJlY29yZCBjbGFzcyBib2R5IG91dHNpZGUgdHlwZWQgcmVhZGVycyBhbmQgb25lIGluaXRpYWxpemVyXCIsIG5vZGVMb2NhdGlvbihtZW1iZXJzLmZpbmQoKG1lbWJlciwgaW5kZXgpID0+XG4gICAgICBpbmRleCA+PSBpbml0aWFsaXplckluZGV4ICsgMSB8fCAhKG1lbWJlciBpbnN0YW5jZW9mIENhbGxOb2RlKSB8fCBtZW1iZXIubmFtZSAhPSBcImF0dHJfcmVhZGVyXCIpID8/IG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHJlYWRlck5vZGVzID0gLyoqIEB0eXBlIHtDYWxsTm9kZVtdfSAqLyAobWVtYmVycy5zbGljZSgwLCBpbml0aWFsaXplckluZGV4KSlcbiAgZGVjbGFyYXRpb24uZmllbGRzID0gcmVhZGVyTm9kZXMubWFwKChyZWFkZXIpID0+IHtcbiAgICBjb25zdCBzeW1ib2wgPSAvKiogQHR5cGUge1N5bWJvbE5vZGV9ICovIChyZWFkZXIuYXJndW1lbnRzXz8uYXJndW1lbnRzX1swXSlcbiAgICBjb25zdCBtZXRhZGF0YSA9IGFzc29jaWF0ZWRDb21tZW50cyhjb21tZW50cywgcmVhZGVyLCBzb3VyY2UpLm1hcCgoY29tbWVudCkgPT4gY29tbWVudFRva2Vucyhjb21tZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBjb25zdCB0eXBlTWV0YWRhdGEgPSBtZXRhZGF0YS5maWx0ZXIoKFt0b2tlbl0pID0+IHRva2VuPy50ZXh0ID09IFwiQHR5cGVcIilcbiAgICBjb25zdCBmaWVsZExvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHJlYWRlciwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmICh0eXBlTWV0YWRhdGEubGVuZ3RoICE9IDEgfHwgdHlwZU1ldGFkYXRhWzBdLmxlbmd0aCA8IDIgfHwgbWV0YWRhdGEuc29tZSgoW3Rva2VuXSkgPT4gdG9rZW4/LnRleHQ/LnN0YXJ0c1dpdGgoXCJAdHlwZVwiKSAmJiB0b2tlbi50ZXh0ICE9IFwiQHR5cGVcIikpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJtaXNzaW5nIG9yIG1hbGZvcm1lZCByZWNvcmQgcmVhZGVyIHR5cGVcIiwgZmllbGRMb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgZGVjbGFyZWRUeXBlID0gam9pbmVkQ29tbWVudFRva2VuKHR5cGVNZXRhZGF0YVswXSwgMSwgc291cmNlKVxuICAgIGNvbnN0IGZpZWxkID0ge1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkRmllbGRcIiksXG4gICAgICBsb2NhdGlvbjogZmllbGRMb2NhdGlvbixcbiAgICAgIG5hbWU6IHN5bWJvbC51bmVzY2FwZWQudmFsdWUsXG4gICAgICB0eXBlOiBjb252ZXJ0VHlwZShkZWNsYXJlZFR5cGUuc291cmNlVHlwZSwgYFJlY29yZCBmaWVsZCAnJHtzeW1ib2wudW5lc2NhcGVkLnZhbHVlfSdgLCBmaWVsZExvY2F0aW9uLCBzb3VyY2UsXG4gICAgICAgIGRlY2xhcmVkVHlwZS5sb2NhdGlvbiwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhmaWVsZCwge25hbWU6IHN5bWJvbC52YWx1ZUxvYyA/IHByaXNtTG9jYXRpb24oc3ltYm9sLnZhbHVlTG9jLCBmaWxlbmFtZSwgc291cmNlKSA6IGZpZWxkTG9jYXRpb259KVxuICB9KVxuICBjb25zdCBpbml0aWFsaXplciA9IC8qKiBAdHlwZSB7RGVmTm9kZX0gKi8gKG1lbWJlcnNbaW5pdGlhbGl6ZXJJbmRleF0pXG4gIGNvbnN0IHBhcmFtZXRlckxpc3QgPSBpbml0aWFsaXplci5wYXJhbWV0ZXJzXG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJMaXN0Py5yZXF1aXJlZHMgPz8gW11cbiAgY29uc3QgaW52YWxpZFBhcmFtZXRlciA9IHBhcmFtZXRlckxpc3QgJiYgW3BhcmFtZXRlckxpc3Qub3B0aW9uYWxzWzBdLCBwYXJhbWV0ZXJMaXN0LnJlc3QsIHBhcmFtZXRlckxpc3QucG9zdHNbMF0sXG4gICAgcGFyYW1ldGVyTGlzdC5rZXl3b3Jkc1swXSwgcGFyYW1ldGVyTGlzdC5rZXl3b3JkUmVzdCwgcGFyYW1ldGVyTGlzdC5ibG9ja10uZmluZChCb29sZWFuKVxuICBjb25zdCBpbml0aWFsaXplclN0YXRlbWVudHMgPSBpbml0aWFsaXplci5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgPyBpbml0aWFsaXplci5ib2R5LmJvZHkgOiBbXVxuXG4gIGlmIChpbml0aWFsaXplci5yZWNlaXZlciB8fCBpbnZhbGlkUGFyYW1ldGVyIHx8IHBhcmFtZXRlcnMubGVuZ3RoICE9IGRlY2xhcmF0aW9uLmZpZWxkcy5sZW5ndGggfHxcbiAgICBwYXJhbWV0ZXJzLnNvbWUoKHBhcmFtZXRlciwgaW5kZXgpID0+ICEocGFyYW1ldGVyIGluc3RhbmNlb2YgUmVxdWlyZWRQYXJhbWV0ZXJOb2RlKSB8fCBwYXJhbWV0ZXIubmFtZSAhPSBkZWNsYXJhdGlvbi5maWVsZHNbaW5kZXhdLm5hbWUpIHx8XG4gICAgaW5pdGlhbGl6ZXJTdGF0ZW1lbnRzLmxlbmd0aCAhPSBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoICsgMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJub25jYW5vbmljYWwgcmVjb3JkIGluaXRpYWxpemVyXCIsIG5vZGVMb2NhdGlvbihpbml0aWFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgYW5ub3RhdGlvbnMgPSB0eXBlQ29tbWVudHMoY29tbWVudHMsIGluaXRpYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChhbm5vdGF0aW9ucy5yZXR1cm5UeXBlIHx8IGFubm90YXRpb25zLnBhcmFtZXRlcnMuc2l6ZSAhPSBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImluY29tcGxldGUgcmVjb3JkIGluaXRpYWxpemVyIGFubm90YXRpb25zXCIsIG5vZGVMb2NhdGlvbihpbml0aWFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRlY2xhcmF0aW9uLmZpZWxkcy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBmaWVsZCA9IGRlY2xhcmF0aW9uLmZpZWxkc1tpbmRleF1cbiAgICBjb25zdCBwYXJhbWV0ZXIgPSAvKiogQHR5cGUge1JlcXVpcmVkUGFyYW1ldGVyTm9kZX0gKi8gKHBhcmFtZXRlcnNbaW5kZXhdKVxuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBpbml0aWFsaXplclN0YXRlbWVudHNbaW5kZXhdXG4gICAgY29uc3QgYW5ub3RhdGVkID0gYW5ub3RhdGlvbnMucGFyYW1ldGVycy5nZXQocGFyYW1ldGVyLm5hbWUpXG5cbiAgICBpZiAoIShhc3NpZ25tZW50IGluc3RhbmNlb2YgSW5zdGFuY2VWYXJpYWJsZVdyaXRlTm9kZSkgfHwgYXNzaWdubWVudC5uYW1lICE9IGBAJHtmaWVsZC5uYW1lfWAgfHxcbiAgICAgICEoYXNzaWdubWVudC52YWx1ZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVSZWFkTm9kZSkgfHwgYXNzaWdubWVudC52YWx1ZS5uYW1lICE9IGZpZWxkLm5hbWUgfHwgIWFubm90YXRlZCkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInJlY29yZCBmaWVsZCBub3QgaW5pdGlhbGl6ZWQgZXhhY3RseSBvbmNlXCIsIG5vZGVMb2NhdGlvbihhc3NpZ25tZW50ID8/IGluaXRpYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgcGFyYW1ldGVyVHlwZSA9IGNvbnZlcnRUeXBlKGFubm90YXRlZC5zb3VyY2VUeXBlLCBgUmVjb3JkIGluaXRpYWxpemVyIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nYCxcbiAgICAgIG5vZGVMb2NhdGlvbihwYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UsIGFubm90YXRlZC5sb2NhdGlvbiwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcblxuICAgIGlmICghc2FtZVZhbHVlVHlwZShwYXJhbWV0ZXJUeXBlLCBmaWVsZC50eXBlKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInJlY29yZCByZWFkZXIvaW5pdGlhbGl6ZXIgdHlwZSBtaXNtYXRjaFwiLCBhbm5vdGF0ZWQubG9jYXRpb24pXG4gICAgfVxuICB9XG4gIGNvbnN0IGZyZWV6ZSA9IGluaXRpYWxpemVyU3RhdGVtZW50cy5hdCgtMSlcblxuICBpZiAoIWlzUnVieVJlY29yZEZyZWV6ZShmcmVlemUpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInJlY29yZCBpbml0aWFsaXplciB3aXRob3V0IGZpbmFsIGZyZWV6ZVwiLCBub2RlTG9jYXRpb24oZnJlZXplID8/IGluaXRpYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGRlY2xhcmF0aW9uLCB7bmFtZTogbm9kZUxvY2F0aW9uKG5vZGUuY29uc3RhbnRQYXRoLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogUmVjb2duaXplcyBjYW5vbmljYWwgc291cmNlIGZyZWV6aW5nIG9yIHRoZSBnZW5lcmF0ZWQgcm9vdC1vd25lZCBLZXJuZWwgaW1wbGVtZW50YXRpb24gYmluZGluZy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZSB8IHVuZGVmaW5lZH0gbm9kZSAtIEZpbmFsIGluaXRpYWxpemVyIHN0YXRlbWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBzdGF0ZW1lbnQgb3ducyB0aGUgbmF0aXZlIHJlY29yZC1mcmVlemUgb3BlcmF0aW9uLlxuICovXG5mdW5jdGlvbiBpc1J1YnlSZWNvcmRGcmVlemUobm9kZSkge1xuICBpZiAoIShub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUpIHx8IG5vZGUuYmxvY2spIHJldHVybiBmYWxzZVxuICBpZiAoIW5vZGUucmVjZWl2ZXIpIHJldHVybiBub2RlLm5hbWUgPT0gXCJmcmVlemVcIiAmJiAhbm9kZS5hcmd1bWVudHNfXG4gIGlmIChub2RlLm5hbWUgIT0gXCJiaW5kX2NhbGxcIiB8fCAhbm9kZS5jYWxsT3BlcmF0b3JMb2MgfHwgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCAhPSAxIHx8XG4gICAgIShub2RlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXSBpbnN0YW5jZW9mIFNlbGZOb2RlKSB8fCAhKG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBDYWxsTm9kZSkpIHJldHVybiBmYWxzZVxuICBjb25zdCBtZXRob2QgPSBub2RlLnJlY2VpdmVyXG5cbiAgaWYgKG1ldGhvZC5uYW1lICE9IFwiaW5zdGFuY2VfbWV0aG9kXCIgfHwgIW1ldGhvZC5jYWxsT3BlcmF0b3JMb2MgfHwgbWV0aG9kLmJsb2NrIHx8XG4gICAgbWV0aG9kLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoICE9IDEgfHwgIShtZXRob2QuYXJndW1lbnRzXy5hcmd1bWVudHNfWzBdIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkgfHxcbiAgICAhKG1ldGhvZC5yZWNlaXZlciBpbnN0YW5jZW9mIENvbnN0YW50UGF0aE5vZGUpKSByZXR1cm4gZmFsc2VcblxuICByZXR1cm4gbWV0aG9kLnJlY2VpdmVyLnBhcmVudCA9PSBudWxsICYmIG1ldGhvZC5yZWNlaXZlci5kZWxpbWl0ZXJMb2MgIT0gbnVsbCAmJiBtZXRob2QucmVjZWl2ZXIubmFtZSA9PSBcIktlcm5lbFwiICYmXG4gICAgbWV0aG9kLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXS51bmVzY2FwZWQudmFsdWUgPT0gXCJmcmVlemVcIlxufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBleGlzdGluZyBSdWJ5IGlmL2Vsc2UgdGVybWluYWwgd2l0aCByZXN0cmljdGVkIGJyYW5jaCBwcmVmaXhlcy5cbiAqIEBwYXJhbSB7SWZOb2RlIHwgVW5sZXNzTm9kZX0gbm9kZSAtIFByaXNtIGNvbmRpdGlvbmFsIG5vZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtL3NyYy9kZXNlcmlhbGl6ZS5qc1wiKS5Db21tZW50W119IGNvbW1lbnRzIC0gUHJpc20gY29tbWVudHMuXG4gKiBAcGFyYW0ge1J1YnlDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZlN0YXRlbWVudH0gU2VtYW50aWMgYnJhbmNoLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SWYobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBjb25zdCBrZXl3b3JkTG9jYXRpb24gPSBub2RlIGluc3RhbmNlb2YgVW5sZXNzTm9kZSA/IG5vZGUua2V5d29yZExvYyA6IG5vZGUuaWZLZXl3b3JkTG9jXG5cbiAgaWYgKCFrZXl3b3JkTG9jYXRpb24gfHwga2V5d29yZExvY2F0aW9uLnN0YXJ0T2Zmc2V0ICE9IG5vZGUubG9jYXRpb24uc3RhcnRPZmZzZXQpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibW9kaWZpZXIgY29uZGl0aW9uYWxcIiwga2V5d29yZExvY2F0aW9uXG4gICAgICA/IHByaXNtTG9jYXRpb24oa2V5d29yZExvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgOiBsb2NhdGlvbilcbiAgfVxuXG4gIGlmIChub2RlLnByZWRpY2F0ZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVSZWFkTm9kZSAmJlxuICAgIGNvbnRleHQuYmluZGluZ3MuZ2V0KG5vZGUucHJlZGljYXRlLm5hbWUpPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwib3B0aW9uYWwgdHJ1dGhpbmVzcyBjb25kaXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUucHJlZGljYXRlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgVW5sZXNzTm9kZSAmJiAhZXhhY3ROaWxUZXN0KG5vZGUucHJlZGljYXRlLCBzb3VyY2UpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInVubGVzcyBjb25kaXRpb24gb3RoZXIgdGhhbiBhbiBleGFjdCBuaWw/IHByZXNlbmNlIGd1YXJkXCIsIG5vZGVMb2NhdGlvbihub2RlLnByZWRpY2F0ZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICBjb25zdCBwcmVkaWNhdGUgPSBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnByZWRpY2F0ZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgY29uc3QgY29uZGl0aW9uID0gbm9kZSBpbnN0YW5jZW9mIFVubGVzc05vZGUgJiYgcHJlZGljYXRlLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIiAmJlxuICAgIHByZWRpY2F0ZS5vcGVyYW5kLmtpbmQgPT0gXCJPcHRpb25hbElzUHJlc2VudFwiXG4gICAgPyBwcmVkaWNhdGUub3BlcmFuZFxuICAgIDogcHJlZGljYXRlXG4gIGlmIChub2RlIGluc3RhbmNlb2YgVW5sZXNzTm9kZSAmJiBjb25kaXRpb24ua2luZCAhPSBcIk9wdGlvbmFsSXNQcmVzZW50XCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwidW5sZXNzIGNvbmRpdGlvbiBvdGhlciB0aGFuIGFuIGV4YWN0IG5pbD8gcHJlc2VuY2UgZ3VhcmRcIiwgbm9kZUxvY2F0aW9uKG5vZGUucHJlZGljYXRlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBjb25zZXF1ZW50Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cbiAgY29uc3QgYWx0ZXJuYXRlQ29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cbiAgbGV0IGFsdGVybmF0ZVxuICBjb25zdCBzdWJzZXF1ZW50ID0gbm9kZSBpbnN0YW5jZW9mIFVubGVzc05vZGUgPyBub2RlLmVsc2VDbGF1c2UgOiBub2RlLnN1YnNlcXVlbnRcblxuICBpZiAoc3Vic2VxdWVudCkge1xuICAgIGlmIChzdWJzZXF1ZW50IGluc3RhbmNlb2YgRWxzZU5vZGUpIHtcbiAgICAgIGFsdGVybmF0ZSA9IGNvbnZlcnRCbG9jayhzdWJzZXF1ZW50LnN0YXRlbWVudHMsIGNvbW1lbnRzLCBhbHRlcm5hdGVDb250ZXh0LCBmaWxlbmFtZSwgc291cmNlLFxuICAgICAgICBub2RlTG9jYXRpb24oc3Vic2VxdWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfSBlbHNlIGlmIChzdWJzZXF1ZW50IGluc3RhbmNlb2YgSWZOb2RlKSB7XG4gICAgICBhbHRlcm5hdGUgPSB7XG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkJsb2NrXCIpLFxuICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKHN1YnNlcXVlbnQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBzdGF0ZW1lbnRzOiBbY29udmVydElmKHN1YnNlcXVlbnQsIGNvbW1lbnRzLCBhbHRlcm5hdGVDb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKV1cbiAgICAgIH1cbiAgICB9IGVsc2UgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBzdWJzZXF1ZW50LmNvbnN0cnVjdG9yLm5hbWUsIG5vZGVMb2NhdGlvbihzdWJzZXF1ZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uKGFsdGVybmF0ZSA/IHthbHRlcm5hdGV9IDoge30pLFxuICAgIGNvbmRpdGlvbixcbiAgICBjb25zZXF1ZW50OiBjb252ZXJ0QmxvY2sobm9kZS5zdGF0ZW1lbnRzLCBjb21tZW50cywgY29uc2VxdWVudENvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UsIGxvY2F0aW9uKSxcbiAgICBraW5kOiBcIklmU3RhdGVtZW50XCIsXG4gICAgbG9jYXRpb25cbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBvcmRpbmFyeSBibG9jay1mb3JtIFJ1YnkgcHJlLWNvbmRpdGlvbiBsb29wLlxuICogQHBhcmFtIHtXaGlsZU5vZGV9IG5vZGUgLSBQcmlzbSB3aGlsZSBub2RlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFByaXNtIGNvbW1lbnRzLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuV2hpbGVTdGF0ZW1lbnR9IFNlbWFudGljIGxvb3AuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRXaGlsZShub2RlLCBjb21tZW50cywgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBrZXl3b3JkTG9jYXRpb24gPSBwcmlzbUxvY2F0aW9uKG5vZGUua2V5d29yZExvYywgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobm9kZS5pc0JlZ2luTW9kaWZpZXIoKSB8fCAhbm9kZS5jbG9zaW5nTG9jIHx8IG5vZGUua2V5d29yZExvYy5zdGFydE9mZnNldCAhPSBub2RlLmxvY2F0aW9uLnN0YXJ0T2Zmc2V0KSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm1vZGlmaWVyIHdoaWxlXCIsIGtleXdvcmRMb2NhdGlvbilcbiAgfVxuICBjb25zdCBib2R5Q29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKG5vZGUuc3RhdGVtZW50cywgY29tbWVudHMsIGJvZHlDb250ZXh0LCBmaWxlbmFtZSwgc291cmNlLCBsb2NhdGlvbiksXG4gICAgY29uZGl0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnByZWRpY2F0ZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgdW5kZWZpbmVkLCB0cnVlKSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJXaGlsZVN0YXRlbWVudFwiKSxcbiAgICBsb2NhdGlvblxuICB9LCB7a2V5d29yZDoga2V5d29yZExvY2F0aW9ufSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgc3VwcG9ydGVkIFJ1YnkgcHV0cyBlbnRyeSBwb2ludC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZX0gbm9kZSAtIFByaXNtIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QcmludFN0YXRlbWVudH0gUHJpbnQgc3RhdGVtZW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UHJpbnQobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICghKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSkgfHwgbm9kZS5yZWNlaXZlciB8fCBub2RlLm5hbWUgIT0gXCJwdXRzXCIgfHwgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCAhPSAxKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBub2RlLmNvbnN0cnVjdG9yLm5hbWUsIGxvY2F0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHtleHByZXNzaW9uOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksIGtpbmQ6IFwiUHJpbnRTdGF0ZW1lbnRcIiwgbG9jYXRpb259XG59XG5cbi8qKlxuICogUGFyc2VzIFJ1YnkgaW50byB0aGUgc2hhcmVkIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5maWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5zb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEBwYXJhbSB7cmVhZG9ubHkgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0Q2FwYWJpbGl0eURlY2xhcmF0aW9uW119IFtpbnB1dC5jYXBhYmlsaXRpZXNdIC0gQ29tcGlsZXItYXV0aG9yaXplZCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge3tpc0VudHJ5OiBib29sZWFuLCBjbGFzc2VzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj4sIGZ1bmN0aW9uczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbj4sIHJlY29yZHM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPiwgZXJyb3JzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59fSBbaW5wdXQucHJvZ3JhbV0gLSBSZXNvbHZlZCBwcm9ncmFtIGltcG9ydHMgYW5kIGVudHJ5IHJvbGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFNlbWFudGljIG1vZHVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUnVieSh7Y2FwYWJpbGl0aWVzID0gW10sIGZpbGVuYW1lLCBzb3VyY2UsIHByb2dyYW19KSB7XG4gIGNvbnN0IHJlc3VsdCA9IHBhcnNlUHJpc20oc291cmNlLCB7ZmlsZXBhdGg6IGZpbGVuYW1lfSlcblxuICBpZiAocmVzdWx0LmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZXJyb3IgPSByZXN1bHQuZXJyb3JzWzBdXG4gICAgY29uc3QgbG9jYXRpb24gPSBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIGVycm9yLmxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBlcnJvci5sb2NhdGlvbi5zdGFydE9mZnNldCArIGVycm9yLmxvY2F0aW9uLmxlbmd0aClcblxuICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe2NvZGU6IFwiUEFSU0VfRVJST1JcIiwgbGFuZ3VhZ2U6IFwicnVieVwiLCBsb2NhdGlvbiwgbWVzc2FnZTogZXJyb3IubWVzc2FnZX0pXG4gIH1cblxuICBpZiAoIShyZXN1bHQudmFsdWUgaW5zdGFuY2VvZiBQcm9ncmFtTm9kZSkpIHRocm93IG5ldyBFcnJvcihcIlByaXNtIHJldHVybmVkIGEgbm9uLXByb2dyYW0gcm9vdC5cIilcblxuICBsZXQgYm9keSA9IHRhc2swMzRSdWJ5Qm9keShyZXN1bHQudmFsdWUuc3RhdGVtZW50cy5ib2R5LCByZXN1bHQuY29tbWVudHMsIGNhcGFiaWxpdGllcywgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAocHJvZ3JhbSkge1xuICAgIGluc3BlY3RSdWJ5TW9kdWxlKHtmaWxlbmFtZSwgc291cmNlfSlcbiAgICBjb25zdCBtb2R1bGVOb2RlID0gLyoqIEB0eXBlIHtNb2R1bGVOb2RlfSAqLyAoYm9keS5maW5kKChub2RlKSA9PiBub2RlIGluc3RhbmNlb2YgTW9kdWxlTm9kZSkpXG5cbiAgICBib2R5ID0gbW9kdWxlTm9kZS5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgPyBtb2R1bGVOb2RlLmJvZHkuYm9keSA6IFtdXG4gICAgY29uc3QgbW9kdWxlRnVuY3Rpb25Ob2RlcyA9IGJvZHkuZmlsdGVyKGlzTW9kdWxlRnVuY3Rpb25NYXJrZXIpXG4gICAgY29uc3QgZGVmaW5pdGlvbnMgPSBib2R5LmZpbHRlcigobm9kZSkgPT4gbm9kZSBpbnN0YW5jZW9mIERlZk5vZGUpXG5cbiAgICBpZiAoZGVmaW5pdGlvbnMubGVuZ3RoID4gMCAmJiAobW9kdWxlRnVuY3Rpb25Ob2Rlcy5sZW5ndGggIT0gMSB8fCBib2R5LmluZGV4T2YobW9kdWxlRnVuY3Rpb25Ob2Rlc1swXSkgPiBib2R5LmluZGV4T2YoZGVmaW5pdGlvbnNbMF0pKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm1vZHVsZSBmdW5jdGlvbnMgb3V0c2lkZSBvbmUgbGVhZGluZyBtb2R1bGVfZnVuY3Rpb24gcHJvZmlsZVwiLFxuICAgICAgICBub2RlTG9jYXRpb24obW9kdWxlRnVuY3Rpb25Ob2Rlc1sxXSA/PyBkZWZpbml0aW9uc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGJvZHkgPSBib2R5LmZpbHRlcigobm9kZSkgPT4gIWlzTW9kdWxlRnVuY3Rpb25NYXJrZXIobm9kZSkgJiYgIXJ1YnlWaXNpYmlsaXR5TWFya2VyKG5vZGUpKVxuICB9XG4gIGNvbnN0IGNsYXNzTm9kZXMgPSBib2R5LmZpbHRlcigobm9kZSkgPT4gbm9kZSBpbnN0YW5jZW9mIENsYXNzTm9kZSlcbiAgY29uc3QgZXJyb3JOb2RlcyA9IGNsYXNzTm9kZXMuZmlsdGVyKChub2RlKSA9PiBub2RlLnN1cGVyY2xhc3MgaW5zdGFuY2VvZiBDb25zdGFudFJlYWROb2RlICYmIG5vZGUuc3VwZXJjbGFzcy5uYW1lID09IFwiU3RhbmRhcmRFcnJvclwiKVxuICBjb25zdCByZWZlcmVuY2VDbGFzc05vZGVzID0gY2xhc3NOb2Rlcy5maWx0ZXIoKG5vZGUpID0+ICFlcnJvck5vZGVzLmluY2x1ZGVzKG5vZGUpICYmIG5vZGUuYm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlICYmXG4gICAgbm9kZS5ib2R5LmJvZHkubGVuZ3RoID4gMCAmJiBub2RlLmJvZHkuYm9keS5ldmVyeSgobWVtYmVyKSA9PiBtZW1iZXIgaW5zdGFuY2VvZiBEZWZOb2RlKSlcbiAgY29uc3QgcmVjb3JkTm9kZXMgPSBjbGFzc05vZGVzLmZpbHRlcigobm9kZSkgPT4gIWVycm9yTm9kZXMuaW5jbHVkZXMobm9kZSkgJiYgIXJlZmVyZW5jZUNsYXNzTm9kZXMuaW5jbHVkZXMobm9kZSkpXG4gIGNvbnN0IGVycm9yRGVjbGFyYXRpb25zID0gZXJyb3JOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiAoe1xuICAgIGlkOiBgZXJyb3I6JHtpbmRleH1gLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yRGVjbGFyYXRpb25cIiksXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBuYW1lOiBub2RlLm5hbWVcbiAgfSkpXG4gIGNvbnN0IHJlY29yZERlY2xhcmF0aW9ucyA9IHJlY29yZE5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpZCA9IGByZWNvcmQ6JHtpbmRleH1gXG4gICAgY29uc3QgZG9jdW1lbnRlZCA9IHR5cGVDb21tZW50cyhyZXN1bHQuY29tbWVudHMsIG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGlkKVxuXG4gICAgaWYgKGRvY3VtZW50ZWQucGFyYW1ldGVycy5zaXplIHx8IGRvY3VtZW50ZWQucmV0dXJuVHlwZSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImZ1bmN0aW9uIHR5cGUgYW5ub3RhdGlvbiBvbiByZWNvcmQgZGVjbGFyYXRpb25cIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBmaWVsZHM6IFtdLFxuICAgICAgaWQsXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWNvcmREZWNsYXJhdGlvblwiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBuYW1lOiBub2RlLm5hbWUsXG4gICAgICAuLi4oZG9jdW1lbnRlZC50eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyczogZG9jdW1lbnRlZC50eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgICB9XG4gIH0pXG4gIGNvbnN0IGNsYXNzRGVjbGFyYXRpb25zID0gcmVmZXJlbmNlQ2xhc3NOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiAoe1xuICAgIGNvbnN0cnVjdG9yOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNvbnN0cnVjdG9yRGVjbGFyYXRpb259ICovICh7fSksIGZpZWxkczogW10sIGlkOiBgY2xhc3M6JHtpbmRleH1gLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNsYXNzRGVjbGFyYXRpb25cIiksIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIG1ldGhvZHM6IFtdLCBuYW1lOiBub2RlLm5hbWVcbiAgfSkpXG4gIGNvbnN0IHJlb3BlbmVkID0gY2xhc3NEZWNsYXJhdGlvbnMuZmluZCgoZGVjbGFyYXRpb24sIGluZGV4KSA9PlxuICAgIGNsYXNzRGVjbGFyYXRpb25zLmZpbmRJbmRleCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBkZWNsYXJhdGlvbi5uYW1lKSAhPSBpbmRleClcblxuICBpZiAocmVvcGVuZWQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgYHJlZmVyZW5jZSBjbGFzcyByZW9wZW5pbmcgJyR7cmVvcGVuZWQubmFtZX0nYCwgcmVvcGVuZWQubG9jYXRpb24pXG4gIGNvbnN0IHJlY29yZE5hbWVzID0gLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gKi8gKFxuICAgIG5ldyBNYXAocHJvZ3JhbT8ucmVjb3JkcyA/PyBbXSkpXG4gIGZvciAoY29uc3QgW25hbWUsIGRlY2xhcmF0aW9uXSBvZiBwcm9ncmFtPy5jbGFzc2VzID8/IFtdKSByZWNvcmROYW1lcy5zZXQobmFtZSwgZGVjbGFyYXRpb24pXG4gIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgY2FwYWJpbGl0aWVzLmZsYXRNYXAoKHtyZXNvdXJjZXN9KSA9PiByZXNvdXJjZXMpKSByZWNvcmROYW1lcy5zZXQocmVzb3VyY2UubmFtZSwgcmVzb3VyY2UpXG4gIGNvbnN0IGVycm9yTmFtZXMgPSBuZXcgTWFwKHByb2dyYW0/LmVycm9ycyA/PyBbXSlcbiAgZm9yIChjb25zdCBmYWlsdXJlIG9mIGNhcGFiaWxpdGllcy5mbGF0TWFwKCh7ZmFpbHVyZXN9KSA9PiBmYWlsdXJlcykpIHtcbiAgICBlcnJvck5hbWVzLnNldChmYWlsdXJlLm5hbWUsIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKGZhaWx1cmUpKSlcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGVycm9yRGVjbGFyYXRpb25zKSBlcnJvck5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgY29uc3QgZXJyb3JzQnlJZCA9IG5ldyBNYXAoWy4uLmVycm9yTmFtZXMudmFsdWVzKCldLm1hcCgoZGVjbGFyYXRpb24pID0+IFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgY29uc3QgZXJyb3JzID0gZXJyb3JOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiBjb252ZXJ0UnVieUVycm9yKG5vZGUsIGVycm9yRGVjbGFyYXRpb25zW2luZGV4XSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgcmVjb3JkRGVjbGFyYXRpb25zKSByZWNvcmROYW1lcy5zZXQoZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyYXRpb24pXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgY2xhc3NEZWNsYXJhdGlvbnMpIHJlY29yZE5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgY29uc3QgcmVjb3Jkc0J5SWQgPSBuZXcgTWFwKHJlY29yZERlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGNsYXNzZXNCeUlkID0gbmV3IE1hcChbXG4gICAgLi4uWy4uLnByb2dyYW0/LmNsYXNzZXM/LnZhbHVlcygpID8/IFtdXS5tYXAoKGRlY2xhcmF0aW9uKSA9PiAvKiogQHR5cGUge1tzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb25dfSAqLyAoXG4gICAgICBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpLFxuICAgIC4uLmNsYXNzRGVjbGFyYXRpb25zLm1hcCgoZGVjbGFyYXRpb24pID0+IC8qKiBAdHlwZSB7W3N0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbl19ICovIChcbiAgICAgIFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgXSlcbiAgY29uc3QgZnVuY3Rpb25Ob2RlcyA9IGJvZHkuZmlsdGVyKChub2RlKSA9PiBub2RlIGluc3RhbmNlb2YgRGVmTm9kZSlcbiAgY29uc3QgYWxsb3dzQnVpbHRpbk91dHB1dCA9IGNhcGFiaWxpdGllcy5zb21lKCh7b3BlcmF0aW9uc30pID0+IG9wZXJhdGlvbnMuc29tZSgoe25hbWV9KSA9PiBuYW1lID09IFwidjFfd3JpdGVfbGluZVwiKSlcbiAgY29uc3Qgc2lnbmF0dXJlcyA9IGZ1bmN0aW9uTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0RnVuY3Rpb25TaWduYXR1cmUobm9kZSwgcmVzdWx0LmNvbW1lbnRzLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgYGZ1bmN0aW9uOiR7aW5kZXh9YCwgYWxsb3dzQnVpbHRpbk91dHB1dCkpXG4gIGNvbnN0IGZ1bmN0aW9uU2lnbmF0dXJlcyA9IG5ldyBNYXAoWy4uLmNhcGFiaWxpdHlGdW5jdGlvblNpZ25hdHVyZXMoY2FwYWJpbGl0aWVzLCBtb2R1bGVMb2NhdGlvbihmaWxlbmFtZSwgc291cmNlKSksXG4gICAgLi4uKHByb2dyYW0/LmZ1bmN0aW9ucyA/PyBbXSldLm1hcCgoW2xvY2FsTmFtZSwgZGVjbGFyYXRpb25dKSA9PiBbbG9jYWxOYW1lLCB7XG4gICAgbG9jYXRpb246IGRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgIG5hbWU6IGxvY2FsTmFtZSxcbiAgICBuYW1lTG9jYXRpb246IGRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgIHBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogZGVjbGFyYXRpb24ucmV0dXJuVHlwZSxcbiAgICAuLi4oZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9XSkpXG4gIGZvciAoY29uc3Qgc2lnbmF0dXJlIG9mIHNpZ25hdHVyZXMpIGZ1bmN0aW9uU2lnbmF0dXJlcy5zZXQoc2lnbmF0dXJlLm5hbWUsIHNpZ25hdHVyZSlcbiAgY29uc3QgcmVjb3JkcyA9IHJlY29yZE5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+XG4gICAgY29udmVydFJ1YnlSZWNvcmQobm9kZSwgcmVjb3JkRGVjbGFyYXRpb25zW2luZGV4XSwgcmVjb3JkTmFtZXMsIHJlc3VsdC5jb21tZW50cywgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGNsYXNzZXMgPSByZWZlcmVuY2VDbGFzc05vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+IGNvbnZlcnRSdWJ5UmVmZXJlbmNlQ2xhc3Mobm9kZSwgY2xhc3NEZWNsYXJhdGlvbnNbaW5kZXhdLFxuICAgIHJlY29yZE5hbWVzLCByZWNvcmRzQnlJZCwgY2xhc3Nlc0J5SWQsIGZ1bmN0aW9uU2lnbmF0dXJlcywgZXJyb3JOYW1lcywgZXJyb3JzQnlJZCwgcmVzdWx0LmNvbW1lbnRzLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgZnVuY3Rpb25zID0gZnVuY3Rpb25Ob2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PlxuICAgIGNvbnZlcnRGdW5jdGlvbihub2RlLCBzaWduYXR1cmVzW2luZGV4XSwgZnVuY3Rpb25TaWduYXR1cmVzLCByZWNvcmROYW1lcywgcmVjb3Jkc0J5SWQsIGNsYXNzZXNCeUlkLCBlcnJvck5hbWVzLCBlcnJvcnNCeUlkLFxuICAgICAgcmVzdWx0LmNvbW1lbnRzLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgZW50cnlOb2RlcyA9IGJvZHkuZmlsdGVyKChub2RlKSA9PiAhKG5vZGUgaW5zdGFuY2VvZiBEZWZOb2RlKSAmJiAhKG5vZGUgaW5zdGFuY2VvZiBDbGFzc05vZGUpKVxuICBjb25zdCBsb2NhdGlvbiA9IG1vZHVsZUxvY2F0aW9uKGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKHByb2dyYW0gJiYgIXByb2dyYW0uaXNFbnRyeSAmJiBlbnRyeU5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwidG9wLWxldmVsIHNpZGUgZWZmZWN0IG91dHNpZGUgdGhlIHNlbGVjdGVkIGVudHJ5IG1vZHVsZVwiLCBub2RlTG9jYXRpb24oZW50cnlOb2Rlc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgZmlyc3RFbnRyeSA9IGVudHJ5Tm9kZXNbMF1cbiAgY29uc3QgZW50cnlMb2NhdGlvbiA9IGZpcnN0RW50cnkgPyBsb2NhdGlvbkZyb21PZmZzZXRzKFxuICAgIGZpbGVuYW1lLFxuICAgIHNvdXJjZSxcbiAgICB1dGY4Qnl0ZU9mZnNldFRvVXRmMTZPZmZzZXQoc291cmNlLCBmaXJzdEVudHJ5LmxvY2F0aW9uLnN0YXJ0T2Zmc2V0KSxcbiAgICB1dGY4Qnl0ZU9mZnNldFRvVXRmMTZPZmZzZXQoXG4gICAgICBzb3VyY2UsXG4gICAgICAoZW50cnlOb2Rlcy5hdCgtMSk/LmxvY2F0aW9uLnN0YXJ0T2Zmc2V0ID8/IDApICsgKGVudHJ5Tm9kZXMuYXQoLTEpPy5sb2NhdGlvbi5sZW5ndGggPz8gMClcbiAgICApXG4gICkgOiBsb2NhdGlvblxuICBjb25zdCBlbnRyeUNvbnRleHQgPSB7YmluZGluZ3M6IG5ldyBNYXAoKSwgY2xhc3NlczogY2xhc3Nlc0J5SWQsIGVycm9yTmFtZXMsIGVycm9yczogZXJyb3JzQnlJZCwgZnVuY3Rpb25zOiBmdW5jdGlvblNpZ25hdHVyZXMsXG4gICAgb3JkZXJlZE1hcERlY2xhcmF0aW9uczogb3JkZXJlZE1hcERlY2xhcmF0aW9uc0ZvclJ1YnkoZW50cnlOb2RlcyksIHJlY29yZE5hbWVzLCByZWNvcmRzOiByZWNvcmRzQnlJZH1cbiAgY29uc3QgZW50cnlCbG9jayA9IHtcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCbG9ja1wiKSxcbiAgICBsb2NhdGlvbjogZW50cnlMb2NhdGlvbixcbiAgICBzdGF0ZW1lbnRzOiBlbnRyeU5vZGVzLm1hcCgoc3RhdGVtZW50KSA9PiBjb252ZXJ0U3RhdGVtZW50KHN0YXRlbWVudCwgcmVzdWx0LmNvbW1lbnRzLCBlbnRyeUNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgaWYgKCFwcm9ncmFtICYmIGZ1bmN0aW9ucy5sZW5ndGggPT0gMCAmJiBjYXBhYmlsaXRpZXMubGVuZ3RoID09IDAgJiYgIWJsb2NrUmVmZXJlbmNlc1Byb3RlY3RlZEVudHJ5KGVudHJ5QmxvY2spKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm1vZHVsZSB3aXRob3V0IGEgZnVuY3Rpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBlbnRyeVBvaW50OiB7XG4gICAgICBib2R5OiBlbnRyeUJsb2NrLFxuICAgICAga2luZDogXCJFbnRyeVBvaW50XCIsXG4gICAgICBsb2NhdGlvbjogZW50cnlMb2NhdGlvblxuICAgIH0sXG4gICAgZnVuY3Rpb25zLFxuICAgIGtpbmQ6IFwiTW9kdWxlXCIsXG4gICAgbG9jYXRpb24sXG4gICAgLi4uKGNsYXNzZXMubGVuZ3RoID4gMCA/IHtjbGFzc2VzfSA6IHt9KSxcbiAgICAuLi4oZXJyb3JzLmxlbmd0aCA+IDAgPyB7ZXJyb3JzfSA6IHt9KSxcbiAgICAuLi4ocmVjb3Jkcy5sZW5ndGggPiAwID8ge3JlY29yZHN9IDoge30pXG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmVzIGV4YWN0IHByb3RlY3RlZCBSdWJ5IHByb2JlIHN1cHBvcnQgYmVmb3JlIHBvcnRhYmxlIGNvbnZlcnNpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGVbXX0gYm9keSAtIFBhcnNlZCB0b3AtbGV2ZWwgbm9kZXMuXG4gKiBAcGFyYW0ge3tsb2NhdGlvbjoge3N0YXJ0T2Zmc2V0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyfX1bXX0gY29tbWVudHMgLSBQYXJzZXIgY29tbWVudHMuXG4gKiBAcGFyYW0ge3JlYWRvbmx5IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdENhcGFiaWxpdHlEZWNsYXJhdGlvbltdfSBjYXBhYmlsaXRpZXMgLSBBdXRob3JpemVkIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZVtdfSBQb3J0YWJsZSBub2Rlcy5cbiAqL1xuZnVuY3Rpb24gdGFzazAzNFJ1YnlCb2R5KGJvZHksIGNvbW1lbnRzLCBjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKCFpc1Rhc2swMzRSZXNvdXJjZVByb2JlKGNhcGFiaWxpdGllcykpIHJldHVybiBib2R5XG4gIGNvbnN0IG1hcmtlciA9IGNvbW1lbnRzLmZpbmQoKGNvbW1lbnQpID0+XG4gICAgc291cmNlLnNsaWNlKGNvbW1lbnQubG9jYXRpb24uc3RhcnRPZmZzZXQsIGNvbW1lbnQubG9jYXRpb24uc3RhcnRPZmZzZXQgKyBjb21tZW50LmxvY2F0aW9uLmxlbmd0aCkgPT1cbiAgICAgIFwiIyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnRcIilcblxuICBpZiAoIW1hcmtlcikgcmV0dXJuIGJvZHlcbiAgaWYgKCFoYXNFeGFjdEVmZmVjdFN1cHBvcnQoc291cmNlLCBcInJ1YnlcIikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibWFsZm9ybWVkIHByb3RlY3RlZCBUYXNrIDAzNCBzdXBwb3J0XCIsIG5vZGVMb2NhdGlvbihib2R5WzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBleHBlY3RlZCA9IFtcbiAgICBbXCJDbGFzc05vZGVcIiwgXCJQcm9iZU9wZXJhdGlvbkZhaWx1cmVcIl0sIFtcIkNsYXNzTm9kZVwiLCBcIlByb2JlQWNxdWlyZUZhaWx1cmVcIl0sIFtcIkNsYXNzTm9kZVwiLCBcIlByb2JlUmVhZEZhaWx1cmVcIl0sXG4gICAgW1wiQ2xhc3NOb2RlXCIsIFwiUHJvYmVDbG9zZUZhaWx1cmVcIl0sIFtcIkNsYXNzTm9kZVwiLCBcIlByb2JlUmVzb3VyY2VDbG9zZWRcIl0sIFtcIkNsYXNzTm9kZVwiLCBcIlByb2JlUmVzb3VyY2VcIl0sXG4gICAgW1wiR2xvYmFsVmFyaWFibGVXcml0ZU5vZGVcIiwgXCIkX19zZW1hbnRpZm9sZF90YXNrMDM0X3RyYWNlXCJdLCBbXCJEZWZOb2RlXCIsIFwicHJvYmVFZmZlY3RcIl0sIFtcIkRlZk5vZGVcIiwgXCJwcm9iZUFjcXVpcmVcIl0sXG4gICAgW1wiRGVmTm9kZVwiLCBcInByb2JlUmVhZFwiXSwgW1wiRGVmTm9kZVwiLCBcInByb2JlQ2xvc2VcIl0sIFtcIkRlZk5vZGVcIiwgXCJwcm9iZVRyYWNlXCJdXG4gIF1cbiAgY29uc3QgbWF0Y2hlcyA9IGV4cGVjdGVkLmV2ZXJ5KChba2luZCwgbmFtZV0sIGluZGV4KSA9PiBib2R5W2luZGV4XT8uY29uc3RydWN0b3IubmFtZSA9PSBraW5kICYmIFJlZmxlY3QuZ2V0KGJvZHlbaW5kZXhdLCBcIm5hbWVcIikgPT0gbmFtZSlcbiAgY29uc3QgZW5kID0gY29tbWVudHMuZmluZCgoY29tbWVudCkgPT5cbiAgICBzb3VyY2Uuc2xpY2UoY29tbWVudC5sb2NhdGlvbi5zdGFydE9mZnNldCwgY29tbWVudC5sb2NhdGlvbi5zdGFydE9mZnNldCArIGNvbW1lbnQubG9jYXRpb24ubGVuZ3RoKSA9PVxuICAgICAgXCIjIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydC1lbmRcIilcblxuICBpZiAoIW1hdGNoZXMgfHwgIWVuZCB8fCBlbmQubG9jYXRpb24uc3RhcnRPZmZzZXQgPCBib2R5W2V4cGVjdGVkLmxlbmd0aCAtIDFdLmxvY2F0aW9uLnN0YXJ0T2Zmc2V0ICsgYm9keVtleHBlY3RlZC5sZW5ndGggLSAxXS5sb2NhdGlvbi5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibWFsZm9ybWVkIHByb3RlY3RlZCBUYXNrIDAzNCBzdXBwb3J0XCIsIG5vZGVMb2NhdGlvbihib2R5WzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICByZXR1cm4gYm9keS5zbGljZShleHBlY3RlZC5sZW5ndGgpXG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGNhbm9uaWNhbCBwYXJzZXItb3duZWQgUnVieSBtb2R1bGUgYW5kIGxpdGVyYWwgcmVxdWlyZS1yZWxhdGl2ZSBlZGdlcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5maWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5zb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHt7aW1wb3J0czoge2ltcG9ydGVkTmFtZTogc3RyaW5nLCBsb2NhbE5hbWU6IHN0cmluZywgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYW1lc3BhY2U6IHRydWUsIHBhdGhMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNwZWNpZmllcjogc3RyaW5nLCBzdGRsaWJDYW5kaWRhdGU/OiB0cnVlLCB0eXBlT25seTogZmFsc2V9W10sIGV4cG9ydHM6IHtleHBvcnRlZE5hbWU6IHN0cmluZywgbG9jYWxOYW1lOiBzdHJpbmcsIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgdHlwZU9ubHk6IGZhbHNlfVtdLCBuYXRpdmVOYW1lOiBzdHJpbmcsIG5hdGl2ZVJlZmVyZW5jZXM6IHtmb3JtOiBcImNvbnN0cnVjdG9yLWNhbGxcIiB8IFwicmVjZWl2ZXItY2FsbFwiIHwgXCJ1bnF1YWxpZmllZC1jYWxsXCIsIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgbmF0aXZlTW9kdWxlOiBzdHJpbmcsIHN5bWJvbDogc3RyaW5nfVtdfX0gUGFyc2VyLW93bmVkIFJ1YnkgbW9kdWxlIGhlYWRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3BlY3RSdWJ5TW9kdWxlKHtmaWxlbmFtZSwgc291cmNlfSkge1xuICBjb25zdCByZXN1bHQgPSBwYXJzZVByaXNtKHNvdXJjZSwge2ZpbGVwYXRoOiBmaWxlbmFtZX0pXG5cbiAgaWYgKHJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGVycm9yID0gcmVzdWx0LmVycm9yc1swXVxuICAgIGNvbnN0IGxvY2F0aW9uID0gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBlcnJvci5sb2NhdGlvbi5zdGFydE9mZnNldCwgZXJyb3IubG9jYXRpb24uc3RhcnRPZmZzZXQgKyBlcnJvci5sb2NhdGlvbi5sZW5ndGgpXG5cbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtjb2RlOiBcIlBBUlNFX0VSUk9SXCIsIGxhbmd1YWdlOiBcInJ1YnlcIiwgbG9jYXRpb24sIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2V9KVxuICB9XG4gIGlmICghKHJlc3VsdC52YWx1ZSBpbnN0YW5jZW9mIFByb2dyYW1Ob2RlKSkgdGhyb3cgbmV3IEVycm9yKFwiUHJpc20gcmV0dXJuZWQgYSBub24tcHJvZ3JhbSByb290LlwiKVxuICBjb25zdCBib2R5ID0gcmVzdWx0LnZhbHVlLnN0YXRlbWVudHMuYm9keVxuICBjb25zdCBtb2R1bGVzID0gYm9keS5maWx0ZXIoKG5vZGUpID0+IG5vZGUgaW5zdGFuY2VvZiBNb2R1bGVOb2RlKVxuICBjb25zdCBkeW5hbWljUmVxdWlyZSA9IGJvZHkuZmluZChpc0R5bmFtaWNTdGRsaWJSZXF1aXJlKVxuXG4gIGlmIChkeW5hbWljUmVxdWlyZSkge1xuICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgICAgY29kZTogXCJTVERMSUJfRkFDQURFX0RZTkFNSUNfUkVGRVJFTkNFXCIsXG4gICAgICBsYW5ndWFnZTogXCJydWJ5XCIsXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGR5bmFtaWNSZXF1aXJlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG1lc3NhZ2U6IFwiRHluYW1pYyByZXF1aXJlIGNhbm5vdCBwcm92ZSBhIHN0YW5kYXJkLWxpYnJhcnkgZmFjYWRlIGlkZW50aXR5LlwiXG4gICAgfSlcbiAgfVxuICB2YWxpZGF0ZVRhc2swMzdOYXRpdmVBdHRlbXB0cyhib2R5LCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBpbnZhbGlkID0gYm9keS5maW5kKChub2RlKSA9PiAhKG5vZGUgaW5zdGFuY2VvZiBNb2R1bGVOb2RlKSAmJiAhaXNSZXF1aXJlUmVsYXRpdmUobm9kZSkgJiYgIWlzU3RkbGliUmVxdWlyZShub2RlKSlcblxuICBpZiAobW9kdWxlcy5sZW5ndGggIT0gMSB8fCAhKG1vZHVsZXNbMF0uY29uc3RhbnRQYXRoIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSkgfHwgaW52YWxpZCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJvbmUgc2ltcGxlIG1vZHVsZSB3aXRoIGxpdGVyYWwgcmVxdWlyZV9yZWxhdGl2ZSBkZWNsYXJhdGlvbnNcIixcbiAgICAgIG5vZGVMb2NhdGlvbihpbnZhbGlkID8/IG1vZHVsZXNbMV0gPz8gbW9kdWxlc1swXSA/PyByZXN1bHQudmFsdWUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGltcG9ydHMgPSBib2R5LmZpbHRlcigobm9kZSkgPT4gaXNSZXF1aXJlUmVsYXRpdmUobm9kZSkgfHwgaXNTdGRsaWJSZXF1aXJlKG5vZGUpKS5tYXAoKG5vZGUpID0+IHtcbiAgICBjb25zdCBjYWxsID0gLyoqIEB0eXBlIHtDYWxsTm9kZX0gKi8gKG5vZGUpXG4gICAgY29uc3QgYXJndW1lbnQgPSAvKiogQHR5cGUge1N0cmluZ05vZGV9ICovIChjYWxsLmFyZ3VtZW50c18/LmFyZ3VtZW50c19bMF0pXG4gICAgY29uc3Qgc3RkbGliQ2FuZGlkYXRlID0gaXNTdGRsaWJSZXF1aXJlKGNhbGwpXG5cbiAgICBpZiAoIWFyZ3VtZW50LnVuZXNjYXBlZC52YWxpZEVuY29kaW5nIHx8IGFyZ3VtZW50LnVuZXNjYXBlZC5lbmNvZGluZyAhPSBcInV0Zi04XCIgfHwgYXJndW1lbnQuaXNGb3JjZWRCaW5hcnlFbmNvZGluZygpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibm9uLVVURi04IHJlcXVpcmVfcmVsYXRpdmUgcGF0aFwiLCBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpbXBvcnRlZE5hbWU6IFwiKlwiLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSW1wb3J0XCIpLFxuICAgICAgbG9jYWxOYW1lOiBcIlwiLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihjYWxsLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5hbWVzcGFjZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKHRydWUpLFxuICAgICAgcGF0aExvY2F0aW9uOiBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgc3BlY2lmaWVyOiBhcmd1bWVudC51bmVzY2FwZWQudmFsdWUsXG4gICAgICAuLi4oc3RkbGliQ2FuZGlkYXRlID8ge3N0ZGxpYkNhbmRpZGF0ZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKHRydWUpfSA6IHt9KSxcbiAgICAgIHR5cGVPbmx5OiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpXG4gICAgfVxuICB9KVxuICBjb25zdCBtb2R1bGVCb2R5ID0gbW9kdWxlc1swXS5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgPyBtb2R1bGVzWzBdLmJvZHkuYm9keSA6IFtdXG4gIGNvbnN0IHZpc2liaWxpdHkgPSBuZXcgTWFwKClcblxuICBmb3IgKGNvbnN0IG5vZGUgb2YgbW9kdWxlQm9keSkge1xuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSkgfHwgIVtcInByaXZhdGVfY2xhc3NfbWV0aG9kXCIsIFwicHJpdmF0ZV9jb25zdGFudFwiXS5pbmNsdWRlcyhub2RlLm5hbWUpKSBjb250aW51ZVxuICAgIGNvbnN0IG1hcmtlciA9IHJ1YnlWaXNpYmlsaXR5TWFya2VyKG5vZGUpXG5cbiAgICBpZiAoIW1hcmtlcikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBgbWFsZm9ybWVkICR7bm9kZS5uYW1lfWAsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBpZiAodmlzaWJpbGl0eS5oYXMobWFya2VyLm5hbWUpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIGBkdXBsaWNhdGUgdmlzaWJpbGl0eSBtYXJrZXIgZm9yICcke21hcmtlci5uYW1lfSdgLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBtb2R1bGVCb2R5LmZpbmQoKGNhbmRpZGF0ZSkgPT4gbWFya2VyLmtpbmQgPT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGNhbmRpZGF0ZSBpbnN0YW5jZW9mIERlZk5vZGUgJiYgY2FuZGlkYXRlLm5hbWUgPT0gbWFya2VyLm5hbWVcbiAgICAgIDogY2FuZGlkYXRlIGluc3RhbmNlb2YgQ2xhc3NOb2RlICYmIGNhbmRpZGF0ZS5uYW1lID09IG1hcmtlci5uYW1lKVxuXG4gICAgaWYgKCFkZWNsYXJhdGlvbiB8fCBtb2R1bGVCb2R5LmluZGV4T2YoZGVjbGFyYXRpb24pID4gbW9kdWxlQm9keS5pbmRleE9mKG5vZGUpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIGB2aXNpYmlsaXR5IG1hcmtlciB3aXRob3V0IGFuIGVhcmxpZXIgJHttYXJrZXIua2luZH1gLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIHZpc2liaWxpdHkuc2V0KG1hcmtlci5uYW1lLCBtYXJrZXIua2luZClcbiAgfVxuICBjb25zdCBleHBvcnRzID0gbW9kdWxlQm9keS5mbGF0TWFwKChub2RlKSA9PiB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBEZWZOb2RlIHx8IG5vZGUgaW5zdGFuY2VvZiBDbGFzc05vZGUpIHtcbiAgICAgIGNvbnN0IGtpbmQgPSBub2RlIGluc3RhbmNlb2YgRGVmTm9kZSA/IFwiZnVuY3Rpb25cIiA6IG5vZGUuYm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlICYmIG5vZGUuYm9keS5ib2R5Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgbm9kZS5ib2R5LmJvZHkuZXZlcnkoKG1lbWJlcikgPT4gbWVtYmVyIGluc3RhbmNlb2YgRGVmTm9kZSkgPyBcImNsYXNzXCIgOiBcInJlY29yZFwiXG5cbiAgICAgIGlmICh2aXNpYmlsaXR5LmdldChub2RlLm5hbWUpID09IGtpbmQpIHJldHVybiBbXVxuICAgICAgcmV0dXJuIFt7XG4gICAgICAgIGV4cG9ydGVkTmFtZTogbm9kZS5uYW1lLFxuICAgICAgICBsb2NhbE5hbWU6IG5vZGUubmFtZSxcbiAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlIGluc3RhbmNlb2YgQ2xhc3NOb2RlID8gbm9kZS5jb25zdGFudFBhdGggOiBub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgc3ltYm9sS2luZDogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0RlY2xhcmF0aW9uS2luZH0gKi8gKGtpbmQpLFxuICAgICAgICB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKVxuICAgICAgfV1cbiAgICB9XG4gICAgcmV0dXJuIFtdXG4gIH0pXG4gIGNvbnN0IG5hdGl2ZVJlZmVyZW5jZXMgPSBydWJ5TmF0aXZlUmVmZXJlbmNlcyhtb2R1bGVzWzBdLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIHJldHVybiB7ZXhwb3J0cywgaW1wb3J0cywgbmF0aXZlTmFtZTogbW9kdWxlc1swXS5uYW1lLCBuYXRpdmVSZWZlcmVuY2VzfVxufVxuXG4vKipcbiAqIFJlamVjdHMgcGFyc2VyLXByb3ZlZCBhdHRlbXB0cyB0byB1c2Ugb3IgbXV0YXRlIHRoZSBib3VuZGVkIHNvY2tldCBmYWNhZGUgb3V0c2lkZSBpdHMgZXhhY3Qgc3VyZmFjZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZVtdfSBib2R5IC0gUHJpc20gcHJvZ3JhbSBib2R5LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVRhc2swMzdOYXRpdmVBdHRlbXB0cyhib2R5LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGFjdGl2ZSA9IGJvZHkuc29tZSgobm9kZSkgPT4gaXNTdGRsaWJSZXF1aXJlKG5vZGUpICYmIG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJlxuICAgIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzX1swXSBpbnN0YW5jZW9mIFN0cmluZ05vZGUgJiYgbm9kZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0udW5lc2NhcGVkLnZhbHVlID09IFwic29ja2V0XCIpXG4gIGNvbnN0IHJlb3BlbmVkID0gYm9keS5maW5kKChub2RlKSA9PiBub2RlIGluc3RhbmNlb2YgQ2xhc3NOb2RlICYmIG5vZGUubmFtZSA9PSBcIlRDUFNvY2tldFwiKVxuXG4gIGlmIChhY3RpdmUgJiYgcmVvcGVuZWQpIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgIGNvZGU6IFwiU1RETElCX0ZBQ0FERV9SRU9QRU5FRFwiLFxuICAgIGxhbmd1YWdlOiBcInJ1YnlcIixcbiAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKHJlb3BlbmVkLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBtZXNzYWdlOiBcIkNhbGxlciBzb3VyY2UgcmVvcGVucyB0aGUgY29tcGlsZXItb3duZWQgVENQU29ja2V0IGZhY2FkZSBpZGVudGl0eS5cIlxuICB9KVxuICBjb25zdCBtb2R1bGVzID0gYm9keS5maWx0ZXIoKG5vZGUpID0+IG5vZGUgaW5zdGFuY2VvZiBNb2R1bGVOb2RlKVxuXG4gIC8qKlxuICAgKiBWaXNpdHMgb25lIHBhcnNlciBub2RlIGZvciBib3VuZGVkIG5hdGl2ZSBhdHRlbXB0cy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gQ2FuZGlkYXRlIFByaXNtIG5vZGUuXG4gICAqL1xuICBmdW5jdGlvbiB2aXNpdChub2RlKSB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSkge1xuICAgICAgY29uc3QgcmVjZWl2ZXIgPSBub2RlLnJlY2VpdmVyXG4gICAgICBjb25zdCB0Y3BSZWNlaXZlciA9IHJlY2VpdmVyIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSAmJiByZWNlaXZlci5uYW1lID09IFwiVENQU29ja2V0XCJcblxuICAgICAgaWYgKHRjcFJlY2VpdmVyKSB7XG4gICAgICAgIGlmICghYWN0aXZlKSB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgICAgICBjb2RlOiBcIlNURExJQl9GQUNBREVfSURFTlRJVFlfVU5QUk9WRURcIixcbiAgICAgICAgICBsYW5ndWFnZTogXCJydWJ5XCIsXG4gICAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbigvKiogQHR5cGUge0NvbnN0YW50UmVhZE5vZGV9ICovIChyZWNlaXZlciksIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiVENQU29ja2V0IHJlcXVpcmVzIHRoZSBleGFjdCBwYXJzZXItcHJvdmVkIHJlcXVpcmUgXFxcInNvY2tldFxcXCIgaWRlbnRpdHkuXCJcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKG5vZGUubmFtZSAhPSBcIm5ld1wiIHx8IG5vZGUuYmxvY2sgfHwgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCAhPSAyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgICAgICAgICBjb2RlOiBcIlNURExJQl9GQUNBREVfTUVNQkVSX1VOU1VQUE9SVEVEXCIsXG4gICAgICAgICAgICBsYW5ndWFnZTogXCJydWJ5XCIsXG4gICAgICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICAgICAgbWVzc2FnZTogXCJUQ1BTb2NrZXQgc3VwcG9ydHMgb25seSBleGFjdCB0d28tYXJndW1lbnQgbmV3IHdpdGhvdXQgYSBibG9jay5cIlxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGtlcm5lbFB1dHMgPSAhbm9kZS5yZWNlaXZlciAmJiBub2RlLm5hbWUgPT0gXCJwdXRzXCIgfHxcbiAgICAgICAgbm9kZS5yZWNlaXZlciBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUgJiYgbm9kZS5yZWNlaXZlci5uYW1lID09IFwiS2VybmVsXCIgJiYgbm9kZS5uYW1lID09IFwicHV0c1wiXG5cbiAgICAgIGlmIChhY3RpdmUgJiYga2VybmVsUHV0cyAmJiAobm9kZS5ibG9jayB8fCBub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoICE9IDEpKSB7XG4gICAgICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgICAgICAgIGNvZGU6IFwiU1RETElCX0ZBQ0FERV9NRU1CRVJfVU5TVVBQT1JURURcIixcbiAgICAgICAgICBsYW5ndWFnZTogXCJydWJ5XCIsXG4gICAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBtZXNzYWdlOiBcIlRoZSBUYXNrIDAzNyBPdXRwdXQgZmFjYWRlIHN1cHBvcnRzIGV4YWN0bHkgb25lIHN0cmluZyBhcmd1bWVudCB3aXRob3V0IGEgYmxvY2suXCJcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNvbXBhY3RDaGlsZE5vZGVzKCkpIHZpc2l0KGNoaWxkKVxuICB9XG5cbiAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykgdmlzaXQobW9kdWxlKVxufVxuXG4vKipcbiAqIENvbGxlY3RzIGV4YWN0IFRhc2sgMDM3IG5hdGl2ZSBpZGVudGl0aWVzIGZyb20gUHJpc20gbm9kZXMgaW4gc291cmNlIG9yZGVyLlxuICogQHBhcmFtIHtNb2R1bGVOb2RlfSBtb2R1bGUgLSBQYXJzZWQgYXBwbGljYXRpb24gbW9kdWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHt7Zm9ybTogXCJjb25zdHJ1Y3Rvci1jYWxsXCIgfCBcInJlY2VpdmVyLWNhbGxcIiB8IFwidW5xdWFsaWZpZWQtY2FsbFwiLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIG5hdGl2ZU1vZHVsZTogc3RyaW5nLCBzeW1ib2w6IHN0cmluZ31bXX0gUGFyc2VyLXByb3ZlZCBuYXRpdmUgcmVmZXJlbmNlcy5cbiAqL1xuZnVuY3Rpb24gcnVieU5hdGl2ZVJlZmVyZW5jZXMobW9kdWxlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIC8qKiBAdHlwZSB7e2Zvcm06IFwiY29uc3RydWN0b3ItY2FsbFwiIHwgXCJyZWNlaXZlci1jYWxsXCIgfCBcInVucXVhbGlmaWVkLWNhbGxcIiwgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYXRpdmVNb2R1bGU6IHN0cmluZywgb2Zmc2V0OiBudW1iZXIsIHN5bWJvbDogc3RyaW5nfVtdfSAqL1xuICBjb25zdCByZWZlcmVuY2VzID0gW11cblxuICAvKipcbiAgICogVmlzaXRzIG9uZSBwYXJzZXIgbm9kZSB3aXRob3V0IGludGVycHJldGluZyBzb3VyY2UgdGV4dC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gUGFyc2VyIG5vZGUuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZnVuY3Rpb24gdmlzaXQobm9kZSkge1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgIW5vZGUuYmxvY2sgJiYgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCA9PSAxICYmXG4gICAgICAhbm9kZS5yZWNlaXZlciAmJiBub2RlLm5hbWUgPT0gXCJwdXRzXCIpIHtcbiAgICAgIHJlZmVyZW5jZXMucHVzaCh7Zm9ybTogXCJ1bnF1YWxpZmllZC1jYWxsXCIsIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIG5hdGl2ZU1vZHVsZTogXCJydWJ5Oktlcm5lbFwiLFxuICAgICAgICBvZmZzZXQ6IG5vZGUubG9jYXRpb24uc3RhcnRPZmZzZXQsIHN5bWJvbDogXCJwdXRzXCJ9KVxuICAgIH1cbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmICFub2RlLmJsb2NrICYmIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggPT0gMSAmJiBub2RlLm5hbWUgPT0gXCJwdXRzXCIgJiZcbiAgICAgIG5vZGUuY2FsbE9wZXJhdG9yTG9jICYmIG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBDb25zdGFudFJlYWROb2RlICYmIG5vZGUucmVjZWl2ZXIubmFtZSA9PSBcIktlcm5lbFwiKSB7XG4gICAgICByZWZlcmVuY2VzLnB1c2goe2Zvcm06IFwicmVjZWl2ZXItY2FsbFwiLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCBuYXRpdmVNb2R1bGU6IFwicnVieTpLZXJuZWxcIixcbiAgICAgICAgb2Zmc2V0OiBub2RlLmxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBzeW1ib2w6IFwicHV0c1wifSlcbiAgICB9XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiAhbm9kZS5ibG9jayAmJiBub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoID09IDIgJiYgbm9kZS5uYW1lID09IFwibmV3XCIgJiZcbiAgICAgIG5vZGUuY2FsbE9wZXJhdG9yTG9jICYmIG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBDb25zdGFudFJlYWROb2RlICYmIG5vZGUucmVjZWl2ZXIubmFtZSA9PSBcIlRDUFNvY2tldFwiKSB7XG4gICAgICByZWZlcmVuY2VzLnB1c2goe2Zvcm06IFwiY29uc3RydWN0b3ItY2FsbFwiLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCBuYXRpdmVNb2R1bGU6IFwic29ja2V0XCIsXG4gICAgICAgIG9mZnNldDogbm9kZS5sb2NhdGlvbi5zdGFydE9mZnNldCwgc3ltYm9sOiBcIlRDUFNvY2tldFwifSlcbiAgICB9XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNvbXBhY3RDaGlsZE5vZGVzKCkpIHZpc2l0KGNoaWxkKVxuICB9XG5cbiAgdmlzaXQobW9kdWxlKVxuICByZXR1cm4gcmVmZXJlbmNlcy5zb3J0KChsZWZ0LCByaWdodCkgPT4gbGVmdC5vZmZzZXQgLSByaWdodC5vZmZzZXQpLm1hcCgoe29mZnNldDogX29mZnNldCwgLi4ucmVmZXJlbmNlfSkgPT4gcmVmZXJlbmNlKVxufVxuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBhIFJ1Ynkgbm9kZSBpcyBvbmUgY2Fub25pY2FsIGxpdGVyYWwgcmVsYXRpdmUgbG9hZCBlZGdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gQ2FuZGlkYXRlIGNhbGwuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbm9kZSBpcyBhIHN1cHBvcnRlZCByZXF1aXJlLXJlbGF0aXZlIGNhbGwuXG4gKi9cbmZ1bmN0aW9uIGlzUmVxdWlyZVJlbGF0aXZlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiAhbm9kZS5yZWNlaXZlciAmJiAhbm9kZS5ibG9jayAmJiBub2RlLm5hbWUgPT0gXCJyZXF1aXJlX3JlbGF0aXZlXCIgJiZcbiAgICBub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoID09IDEgJiYgbm9kZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0gaW5zdGFuY2VvZiBTdHJpbmdOb2RlXG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIGEgUnVieSBub2RlIGlzIG9uZSBwYXJzZXItcHJvdmVkIGxpdGVyYWwgZmFjYWRlIHJlcXVpcmUgY2FuZGlkYXRlLlxuICogT3RoZXIgbG9hZC1wYXRoIHJlcXVpcmVzIHJldGFpbiB0aGUgVGFzayAwMTAgdW5zdXBwb3J0ZWQgcHJvZmlsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZX0gbm9kZSAtIENhbmRpZGF0ZSBjYWxsLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIG5vZGUgaXMgYSBsaXRlcmFsIFNlbWFudGlmb2xkIGZhY2FkZSByZXF1aXJlLlxuICovXG5mdW5jdGlvbiBpc1N0ZGxpYlJlcXVpcmUobm9kZSkge1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmICFub2RlLnJlY2VpdmVyICYmICFub2RlLmJsb2NrICYmIG5vZGUubmFtZSA9PSBcInJlcXVpcmVcIiAmJlxuICAgIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggPT0gMSAmJiBub2RlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXSBpbnN0YW5jZW9mIFN0cmluZ05vZGUgJiZcbiAgICAobm9kZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0udW5lc2NhcGVkLnZhbHVlID09IFwic29ja2V0XCIgfHxcbiAgICAgIG5vZGUuYXJndW1lbnRzXy5hcmd1bWVudHNfWzBdLnVuZXNjYXBlZC52YWx1ZS5zdGFydHNXaXRoKFwic2VtYW50aWZvbGQvXCIpKVxufVxuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBhIFJ1Ynkgbm9kZSBkeW5hbWljYWxseSBjb25zdHJ1Y3RzIGEgZmFjYWRlIHJlcXVpcmUgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGV9IG5vZGUgLSBDYW5kaWRhdGUgY2FsbC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBwYXJzZXIgZXhwb3NlcyBhIG5vbmxpdGVyYWwgcmVxdWlyZS5cbiAqL1xuZnVuY3Rpb24gaXNEeW5hbWljU3RkbGliUmVxdWlyZShub2RlKSB7XG4gIGlmICghKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSkgfHwgbm9kZS5yZWNlaXZlciB8fCBub2RlLmJsb2NrIHx8IG5vZGUubmFtZSAhPSBcInJlcXVpcmVcIiB8fFxuICAgIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggIT0gMSkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiAhKG5vZGUuYXJndW1lbnRzXy5hcmd1bWVudHNfWzBdIGluc3RhbmNlb2YgU3RyaW5nTm9kZSlcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHdoZXRoZXIgYSBSdWJ5IG5vZGUgaXMgdGhlIGNhbm9uaWNhbCBtb2R1bGUtZnVuY3Rpb24gbWFya2VyLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gQ2FuZGlkYXRlIG1hcmtlci5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBub2RlIGlzIGEgYmFyZSBtb2R1bGUtZnVuY3Rpb24gY2FsbC5cbiAqL1xuZnVuY3Rpb24gaXNNb2R1bGVGdW5jdGlvbk1hcmtlcihub2RlKSB7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgIW5vZGUucmVjZWl2ZXIgJiYgIW5vZGUuYmxvY2sgJiYgbm9kZS5uYW1lID09IFwibW9kdWxlX2Z1bmN0aW9uXCIgJiYgIW5vZGUuYXJndW1lbnRzX1xufVxuXG4vKipcbiAqIFJlYWRzIG9uZSBleGFjdCBnZW5lcmF0ZWQgUnVieSB2aXNpYmlsaXR5IG1hcmtlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZX0gbm9kZSAtIENhbmRpZGF0ZSBtb2R1bGUtYm9keSBub2RlLlxuICogQHJldHVybnMge3traW5kOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0RlY2xhcmF0aW9uS2luZCwgbmFtZTogc3RyaW5nfSB8IHVuZGVmaW5lZH0gTWFya2VyIG1lYW5pbmcuXG4gKi9cbmZ1bmN0aW9uIHJ1YnlWaXNpYmlsaXR5TWFya2VyKG5vZGUpIHtcbiAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlKSB8fCBub2RlLnJlY2VpdmVyIHx8IG5vZGUuYmxvY2sgfHxcbiAgICAhW1wicHJpdmF0ZV9jbGFzc19tZXRob2RcIiwgXCJwcml2YXRlX2NvbnN0YW50XCJdLmluY2x1ZGVzKG5vZGUubmFtZSkgfHxcbiAgICBub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoICE9IDEgfHwgIShub2RlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXSBpbnN0YW5jZW9mIFN5bWJvbE5vZGUpKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgcmV0dXJuIHtcbiAgICBraW5kOiBub2RlLm5hbWUgPT0gXCJwcml2YXRlX2NsYXNzX21ldGhvZFwiID8gXCJmdW5jdGlvblwiIDogXCJyZWNvcmRcIixcbiAgICBuYW1lOiBub2RlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXS51bmVzY2FwZWQudmFsdWVcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhIHBhcnNlci1vd25lZCBzaW1wbGUgUnVieSBjb25zdGFudCBwYXRoIHdpdGhvdXQgaW5zcGVjdGluZyBzb3VyY2UgdGV4dC5cbiAqIEBwYXJhbSB7Q29uc3RhbnRSZWFkTm9kZSB8IENvbnN0YW50UGF0aE5vZGV9IG5vZGUgLSBDb25zdGFudCBwYXRoLlxuICogQHJldHVybnMge3N0cmluZ30gUXVhbGlmaWVkIGNvbnN0YW50IG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50UGF0aE5hbWUobm9kZSkge1xuICBpZiAobm9kZSBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUpIHJldHVybiBub2RlLm5hbWVcbiAgaWYgKHR5cGVvZiBub2RlLm5hbWUgIT0gXCJzdHJpbmdcIikgdGhyb3cgbmV3IEVycm9yKFwiUHJpc20gcmV0dXJuZWQgYSBjb25zdGFudCBwYXRoIHdpdGhvdXQgYSBuYW1lLlwiKVxuICBpZiAoIW5vZGUucGFyZW50KSByZXR1cm4gbm9kZS5uYW1lXG4gIGlmICghKG5vZGUucGFyZW50IGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSkgJiYgIShub2RlLnBhcmVudCBpbnN0YW5jZW9mIENvbnN0YW50UGF0aE5vZGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUHJpc20gcmV0dXJuZWQgYW4gdW5zdXBwb3J0ZWQgY29uc3RhbnQtcGF0aCBwYXJlbnQuXCIpXG4gIH1cblxuICByZXR1cm4gYCR7Y29uc3RhbnRQYXRoTmFtZShub2RlLnBhcmVudCl9Ojoke25vZGUubmFtZX1gXG59XG4iXX0=
1986
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVieS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZHMvcnVieS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUNMLE9BQU8sRUFDUCxTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxtQkFBbUIsRUFDbkIsU0FBUyxFQUNULFNBQVMsRUFDVCxRQUFRLEVBQ1IsU0FBUyxFQUNULGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLFFBQVEsRUFDUixzQkFBc0IsRUFDdEIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sV0FBVyxFQUNYLHlCQUF5QixFQUN6Qix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDdkIsc0JBQXNCLEVBQ3RCLFVBQVUsRUFDVixRQUFRLEVBQ1IsT0FBTyxFQUNQLE1BQU0sRUFDTixlQUFlLEVBQ2YsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixRQUFRLEVBQ1IsVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsUUFBUSxFQUNSLGNBQWMsRUFDZCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFFBQVEsRUFDUixVQUFVLEVBQ1YsU0FBUyxFQUNULFNBQVMsRUFDVixNQUFNLGFBQWEsQ0FBQTtBQUNwQixPQUFPLEVBQUMsV0FBVyxFQUFFLHFCQUFxQixFQUFFLGlCQUFpQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDdEYsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sd0JBQXdCLENBQUE7QUFDcEUsT0FBTyxFQUFDLG1CQUFtQixFQUFFLGNBQWMsRUFBRSwyQkFBMkIsRUFBQyxNQUFNLHlCQUF5QixDQUFBO0FBQ3hHLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQzdELE9BQU8sRUFBQyxlQUFlLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQTtBQUMz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QW5kTm9kZSxcbiAgQXJyYXlOb2RlLFxuICBBc3NvY05vZGUsXG4gIEJsb2NrTm9kZSxcbiAgQmxvY2tQYXJhbWV0ZXJzTm9kZSxcbiAgQmVnaW5Ob2RlLFxuICBCcmVha05vZGUsXG4gIENhbGxOb2RlLFxuICBDbGFzc05vZGUsXG4gIENvbnN0YW50UGF0aE5vZGUsXG4gIENvbnN0YW50UmVhZE5vZGUsXG4gIERlZk5vZGUsXG4gIEVsc2VOb2RlLFxuICBFbWJlZGRlZFN0YXRlbWVudHNOb2RlLFxuICBGYWxzZU5vZGUsXG4gIEhhc2hOb2RlLFxuICBJZk5vZGUsXG4gIEludGVnZXJOb2RlLFxuICBJbnN0YW5jZVZhcmlhYmxlV3JpdGVOb2RlLFxuICBJbnN0YW5jZVZhcmlhYmxlUmVhZE5vZGUsXG4gIEludGVycG9sYXRlZFN0cmluZ05vZGUsXG4gIExvY2FsVmFyaWFibGVSZWFkTm9kZSxcbiAgTG9jYWxWYXJpYWJsZVRhcmdldE5vZGUsXG4gIExvY2FsVmFyaWFibGVXcml0ZU5vZGUsXG4gIE1vZHVsZU5vZGUsXG4gIE5leHROb2RlLFxuICBOaWxOb2RlLFxuICBPck5vZGUsXG4gIFBhcmVudGhlc2VzTm9kZSxcbiAgUHJvZ3JhbU5vZGUsXG4gIFJlcXVpcmVkUGFyYW1ldGVyTm9kZSxcbiAgUmVkb05vZGUsXG4gIFJlc2N1ZU5vZGUsXG4gIFJldHVybk5vZGUsXG4gIFJldHJ5Tm9kZSxcbiAgU2VsZk5vZGUsXG4gIFN0YXRlbWVudHNOb2RlLFxuICBTdHJpbmdOb2RlLFxuICBTeW1ib2xOb2RlLFxuICBUcnVlTm9kZSxcbiAgVW5sZXNzTm9kZSxcbiAgV2hpbGVOb2RlLFxuICBsb2FkUHJpc21cbn0gZnJvbSBcIkBydWJ5L3ByaXNtXCJcbmltcG9ydCB7bWlzc2luZ1R5cGUsIFNlbWFudGlmb2xkRGlhZ25vc3RpYywgdW5zdXBwb3J0ZWRTeW50YXh9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7YmxvY2tSZWZlcmVuY2VzUHJvdGVjdGVkRW50cnl9IGZyb20gXCIuLi9zZW1hbnRpYy9lZmZlY3RzLmpzXCJcbmltcG9ydCB7bG9jYXRpb25Gcm9tT2Zmc2V0cywgbW9kdWxlTG9jYXRpb24sIHV0ZjhCeXRlT2Zmc2V0VG9VdGYxNk9mZnNldH0gZnJvbSBcIi4uL3NlbWFudGljL2xvY2F0aW9uLmpzXCJcbmltcG9ydCB7d2l0aEFkYXB0ZWRPcGVyYXRpb259IGZyb20gXCIuLi9zZW1hbnRpYy9vcGVyYXRvcnMuanNcIlxuaW1wb3J0IHtzZXRQYXJzZXJSYW5nZXMsIHdpdGhQYXJzZXJSYW5nZXN9IGZyb20gXCIuLi9zZW1hbnRpYy9wcm92ZW5hbmNlLmpzXCJcbmltcG9ydCB7aGFzT25seVVuaWNvZGVTY2FsYXJzLCBzY2FsYXJUeXBlfSBmcm9tIFwiLi4vc2VtYW50aWMvc2NhbGFycy5qc1wiXG5pbXBvcnQge2lzVGFzazAzNFJlc291cmNlUHJvYmV9IGZyb20gXCIuLi9zZW1hbnRpYy9jYXBhYmlsaXRpZXMuanNcIlxuaW1wb3J0IHtoYXNFeGFjdEVmZmVjdFN1cHBvcnR9IGZyb20gXCIuLi9iYWNrZW5kcy9lZmZlY3RzLmpzXCJcbmltcG9ydCB7cmVxdWlyZVNvdXJjZVJldHVyblR5cGV9IGZyb20gXCIuL3NjYWxhcnMuanNcIlxuaW1wb3J0IHtjYXBhYmlsaXR5RnVuY3Rpb25TaWduYXR1cmVzLCBkb2N1bWVudGVkVmFsdWVUeXBlLCBpbnN0YW50aWF0ZWRSZWNvcmRGaWVsZFR5cGUsIGl0ZXJhdGlvbkJpbmRpbmdUeXBlLCBpdGVyYXRpb25PcGVyYW5kVHlwZSwga25vd25DYWxsUmV0dXJuVHlwZSwgb3JkZXJlZE1hcFR5cGVGcm9tTWFwLCBwcmVzZXJ2ZXNHZW5lcmljT3B0aW9uYWxFdmlkZW5jZSwgcmVjb3JkVHlwZSwgcmVmZXJlbmNlVHlwZSwgc2FtZVZhbHVlVHlwZX0gZnJvbSBcIi4vdHlwZXMuanNcIlxuY29uc3QgcGFyc2VQcmlzbSA9IGF3YWl0IGxvYWRQcmlzbSgpXG5jb25zdCByZWZlcmVuY2VNZXRob2RIb29rcyA9IG5ldyBTZXQoW1xuICBcIl9fc2VuZF9fXCIsIFwiZXh0ZW5kXCIsIFwiZmV0Y2hcIiwgXCJpbnN0YW5jZV9ldmFsXCIsIFwiaW5zdGFuY2VfZXhlY1wiLCBcIm1ldGhvZFwiLCBcIm1ldGhvZF9taXNzaW5nXCIsIFwicHVibGljX3NlbmRcIixcbiAgXCJyZXNwb25kX3RvX21pc3Npbmc/XCIsIFwic2VuZFwiLCBcInNpbmdsZXRvbl9jbGFzc1wiLCBcInNpemVcIlxuXSlcbi8qKiBAdHlwZWRlZiB7e25hbWU6IHN0cmluZywgbmFtZUxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgcGFyYW1ldGVyczogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUGFyYW1ldGVyW10sIHJldHVyblR5cGU6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlLCB0eXBlUGFyYW1ldGVycz86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXJbXSwgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufX0gUnVieUZ1bmN0aW9uU2lnbmF0dXJlICovXG4vKiogQHR5cGVkZWYge3tiaW5kaW5nczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNCaW5kaW5nVHlwZT4sIGNhdGNoQmluZGluZ05hbWVzPzogU2V0PHN0cmluZz4sIGNsYXNzZXM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+LCBjYXRjaEJpbmRpbmdOb2Rlcz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNhdGNoQmluZGluZz4sIGN1cnJlbnRDYXRjaEJpbmRpbmdOb2RlPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2F0Y2hCaW5kaW5nLCBjdXJyZW50Q2xhc3M/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uLCBlcnJvck5hbWVzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPiwgZXJyb3JzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPiwgZnVuY3Rpb25zOiBNYXA8c3RyaW5nLCBSdWJ5RnVuY3Rpb25TaWduYXR1cmU+LCBvcmRlcmVkTWFwRGVjbGFyYXRpb25zPzogU2V0PG9iamVjdD4sIHJlY29yZHM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPiwgcmVjb3JkTmFtZXM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JbnRlcmZhY2VEZWNsYXJhdGlvbj4sIGxvb3BEZXB0aD86IG51bWJlciwgcmV0dXJuVHlwZT86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlLCB0eXBlUGFyYW1ldGVycz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXI+fX0gUnVieUNvbnZlcnNpb25Db250ZXh0ICovXG5jb25zdCBydWJ5QmluYXJ5T3BlcmF0aW9ucyA9IG5ldyBNYXAoW1xuICBbXCIrXCIsIFwiQWRkXCJdLFxuICBbXCItXCIsIFwiU3VidHJhY3RcIl0sXG4gIFtcIipcIiwgXCJNdWx0aXBseVwiXSxcbiAgW1wiPT1cIiwgXCJFcXVhbFwiXSxcbiAgW1wiIT1cIiwgXCJOb3RFcXVhbFwiXSxcbiAgW1wiPFwiLCBcIkxlc3NUaGFuXCJdLFxuICBbXCI8PVwiLCBcIkxlc3NUaGFuT3JFcXVhbFwiXSxcbiAgW1wiPlwiLCBcIkdyZWF0ZXJUaGFuXCJdLFxuICBbXCI+PVwiLCBcIkdyZWF0ZXJUaGFuT3JFcXVhbFwiXVxuXSlcblxuLyoqXG4gKiBSZXR1cm5zIGEgbm9ybWFsaXplZCBQcmlzbSBub2RlIGxvY2F0aW9uLlxuICogQHBhcmFtIHt7bG9jYXRpb246IGltcG9ydChcIkBydWJ5L3ByaXNtXCIpLkxvY2F0aW9ufX0gbm9kZSAtIFByaXNtIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBTb3VyY2UgbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIHJldHVybiBwcmlzbUxvY2F0aW9uKG5vZGUubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBQcmlzbSBsb2NhdGlvbiBpbnRvIGEgbm9ybWFsaXplZCBzb3VyY2UgbG9jYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLkxvY2F0aW9ufSBsb2NhdGlvbiAtIFByaXNtIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gU291cmNlIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBwcmlzbUxvY2F0aW9uKGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIHJldHVybiBsb2NhdGlvbkZyb21PZmZzZXRzKFxuICAgIGZpbGVuYW1lLFxuICAgIHNvdXJjZSxcbiAgICB1dGY4Qnl0ZU9mZnNldFRvVXRmMTZPZmZzZXQoc291cmNlLCBsb2NhdGlvbi5zdGFydE9mZnNldCksXG4gICAgdXRmOEJ5dGVPZmZzZXRUb1V0ZjE2T2Zmc2V0KHNvdXJjZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQgKyBsb2NhdGlvbi5sZW5ndGgpXG4gIClcbn1cblxuLyoqXG4gKiBTbGljZXMgSmF2YVNjcmlwdCBzb3VyY2UgdXNpbmcgUHJpc20ncyBVVEYtOCBieXRlIG9mZnNldHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0T2Zmc2V0IC0gSW5jbHVzaXZlIFByaXNtIGJ5dGUgb2Zmc2V0LlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZE9mZnNldCAtIEV4Y2x1c2l2ZSBQcmlzbSBieXRlIG9mZnNldC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFNvdXJjZSB0ZXh0IGluIHRoZSBieXRlIHJhbmdlLlxuICovXG5mdW5jdGlvbiBzbGljZVByaXNtU291cmNlKHNvdXJjZSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkge1xuICByZXR1cm4gc291cmNlLnNsaWNlKFxuICAgIHV0ZjhCeXRlT2Zmc2V0VG9VdGYxNk9mZnNldChzb3VyY2UsIHN0YXJ0T2Zmc2V0KSxcbiAgICB1dGY4Qnl0ZU9mZnNldFRvVXRmMTZPZmZzZXQoc291cmNlLCBlbmRPZmZzZXQpXG4gIClcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN1cHBvcnRlZCBQcmlzbSBleHByZXNzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gUHJpc20gbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge1J1YnlDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gW2V4cGVjdGVkVHlwZV0gLSBFeHBsaWNpdCBjb250ZXh0dWFsIHZhbHVlIHR5cGUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVzZXJ2ZU9wdGlvbmFsXSAtIFdoZXRoZXIgYW4gb3B0aW9uYWwgaWRlbnRpZmllciByZW1haW5zIHdyYXBwZWQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEV4cHJlc3Npb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZXhwZWN0ZWRUeXBlLCBwcmVzZXJ2ZU9wdGlvbmFsID0gZmFsc2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIE5pbE5vZGUpIHtcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcHRpb25hbE5vbmVcIiksIGxvY2F0aW9ufSwge2Fic2VuY2U6IGxvY2F0aW9ufSlcbiAgICB9XG4gICAgaWYgKGtub3duRXhwcmVzc2lvblR5cGUobm9kZSwgY29udGV4dCk/LmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgICAgcmV0dXJuIGNvbnZlcnRFeHByZXNzaW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHVuZGVmaW5lZCwgdHJ1ZSlcbiAgICB9XG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxTb21lXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICB2YWx1ZTogY29udmVydEV4cHJlc3Npb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZXhwZWN0ZWRUeXBlLnZhbHVlVHlwZSlcbiAgICB9LCB7c29tZTogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBOaWxOb2RlKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibmlsIG91dHNpZGUgYW4gZXhwbGljaXQgb3B0aW9uYWwgY29udGV4dFwiLCBsb2NhdGlvbilcblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUuYmxvY2spIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiY2FsbCBibG9ja1wiLCBub2RlTG9jYXRpb24obm9kZS5ibG9jaywgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUuY2FsbE9wZXJhdG9yTG9jICYmIHNsaWNlUHJpc21Tb3VyY2UoXG4gICAgc291cmNlLFxuICAgIG5vZGUuY2FsbE9wZXJhdG9yTG9jLnN0YXJ0T2Zmc2V0LFxuICAgIG5vZGUuY2FsbE9wZXJhdG9yTG9jLnN0YXJ0T2Zmc2V0ICsgbm9kZS5jYWxsT3BlcmF0b3JMb2MubGVuZ3RoXG4gICkgPT0gXCImLlwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBub2RlLmNvbnN0cnVjdG9yLm5hbWUsIGxvY2F0aW9uKVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBQYXJlbnRoZXNlc05vZGUgJiYgbm9kZS5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgJiYgbm9kZS5ib2R5LmJvZHkubGVuZ3RoID09IDEpIHtcbiAgICByZXR1cm4gY29udmVydEV4cHJlc3Npb24obm9kZS5ib2R5LmJvZHlbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGV4cGVjdGVkVHlwZSwgcHJlc2VydmVPcHRpb25hbClcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgTG9jYWxWYXJpYWJsZVJlYWROb2RlKSB7XG4gICAgY29uc3QgaWRlbnRpZmllciA9IHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbiwgbmFtZTogbm9kZS5uYW1lfSwge25hbWU6IGxvY2F0aW9ufSlcblxuICAgIGlmICghcHJlc2VydmVPcHRpb25hbCAmJiBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlLm5hbWUpPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcHRpb25hbFVud3JhcFwiKSwgbG9jYXRpb24sIG9wZXJhbmQ6IGlkZW50aWZpZXJ9LCB7dW53cmFwOiBsb2NhdGlvbn0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGlkZW50aWZpZXJcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgU2VsZk5vZGUpIHtcbiAgICBpZiAoIWNvbnRleHQuY3VycmVudENsYXNzKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwic2VsZiBvdXRzaWRlIGEgcmVmZXJlbmNlIGNsYXNzXCIsIGxvY2F0aW9uKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtjbGFzc0lkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGNvbnRleHQuY3VycmVudENsYXNzLmlkKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIpLFxuICAgICAgbG9jYXRpb259LCB7cmVjZWl2ZXI6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgSW5zdGFuY2VWYXJpYWJsZVJlYWROb2RlKSB7XG4gICAgY29uc3QgZmllbGQgPSBjb250ZXh0LmN1cnJlbnRDbGFzcz8uZmllbGRzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gYEAke2NhbmRpZGF0ZS5uYW1lfWAgPT0gbm9kZS5uYW1lKVxuXG4gICAgaWYgKCFmaWVsZCB8fCAhY29udGV4dC5jdXJyZW50Q2xhc3MpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJwcml2YXRlIGluc3RhbmNlIGZpZWxkIG91dHNpZGUgaXRzIGRlY2xhcmluZyBjbGFzc1wiLCBsb2NhdGlvbilcbiAgICBjb25zdCByZWNlaXZlciA9IHdpdGhQYXJzZXJSYW5nZXMoe2NsYXNzSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoY29udGV4dC5jdXJyZW50Q2xhc3MuaWQpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sIHtyZWNlaXZlcjogbG9jYXRpb259KVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2ZpZWxkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGZpZWxkLmlkKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkUmVhZFwiKSxcbiAgICAgIGxvY2F0aW9uLCByZWNlaXZlcn0sIHttZW1iZXI6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgSW50ZWdlck5vZGUpIHtcbiAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKG5vZGUudmFsdWUpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibm9uLXNhZmUgaW50ZWdlciBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkludGVnZXJMaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IG5vZGUudmFsdWV9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBUcnVlTm9kZSB8fCBub2RlIGluc3RhbmNlb2YgRmFsc2VOb2RlKSB7XG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkJvb2xlYW5MaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IG5vZGUgaW5zdGFuY2VvZiBUcnVlTm9kZX0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIFN0cmluZ05vZGUpIHtcbiAgICBjb25zdCBkZWNvZGVkID0gbm9kZS51bmVzY2FwZWRcblxuICAgIGlmICghZGVjb2RlZC52YWxpZEVuY29kaW5nIHx8IGRlY29kZWQuZW5jb2RpbmcgIT0gXCJ1dGYtOFwiIHx8IG5vZGUuaXNGb3JjZWRCaW5hcnlFbmNvZGluZygpIHx8XG4gICAgICAhaGFzT25seVVuaWNvZGVTY2FsYXJzKGRlY29kZWQudmFsdWUpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiaW52YWxpZCBVbmljb2RlIHN0cmluZyBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJTdHJpbmdMaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IGRlY29kZWQudmFsdWV9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBJbnRlcnBvbGF0ZWRTdHJpbmdOb2RlKSB7XG4gICAgaWYgKG5vZGUub3BlbmluZ0xvYyAmJiBzbGljZVByaXNtU291cmNlKHNvdXJjZSwgbm9kZS5vcGVuaW5nTG9jLnN0YXJ0T2Zmc2V0LCBub2RlLm9wZW5pbmdMb2Muc3RhcnRPZmZzZXQgKyBub2RlLm9wZW5pbmdMb2MubGVuZ3RoKS5zdGFydHNXaXRoKFwiPDxcIikpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJoZXJlZG9jIHN0cmluZ1wiLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0cyA9IG5vZGUucGFydHMubWFwKChwYXJ0KSA9PiB7XG4gICAgICBpZiAocGFydCBpbnN0YW5jZW9mIFN0cmluZ05vZGUpIHJldHVybiBjb252ZXJ0RXhwcmVzc2lvbihwYXJ0LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBzY2FsYXJUeXBlKFwic3RyaW5nXCIpKVxuICAgICAgaWYgKHBhcnQgaW5zdGFuY2VvZiBFbWJlZGRlZFN0YXRlbWVudHNOb2RlKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudHMgPSBwYXJ0LnN0YXRlbWVudHNcblxuICAgICAgICBpZiAoIXN0YXRlbWVudHMgfHwgc3RhdGVtZW50cy5ib2R5Lmxlbmd0aCAhPSAxKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiaW50ZXJwb2xhdGVkIHN0YXRlbWVudFwiLCBub2RlTG9jYXRpb24ocGFydCwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgICAgICAgcmV0dXJuIGNvbnZlcnRFeHByZXNzaW9uKHN0YXRlbWVudHMuYm9keVswXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgc2NhbGFyVHlwZShcInN0cmluZ1wiKSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBwYXJ0LmNvbnN0cnVjdG9yLm5hbWUsIG5vZGVMb2NhdGlvbihwYXJ0LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9KVxuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PSAwKSByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiU3RyaW5nTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBcIlwifSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcblxuICAgIGxldCBsb3dlcmVkID0gcGFydHNbMF1cblxuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cy5zbGljZSgxKSkge1xuICAgICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih7XG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkJpbmFyeUV4cHJlc3Npb25cIiksXG4gICAgICAgIGxlZnQ6IGxvd2VyZWQsXG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICByaWdodDogcGFydFxuICAgICAgfSwgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy9vcGVyYXRvcnMuanNcIikuQWRhcHRlZE9wZXJhdGlvbn0gKi8gKFwiU3RyaW5nQ29uY2F0XCIpKVxuXG4gICAgICBsb3dlcmVkID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGxvd2VyZWQsIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIElmTm9kZSAmJiAhbm9kZS5pZktleXdvcmRMb2MpIHtcbiAgICBjb25zdCBlbHNlQ2xhdXNlID0gbm9kZS5zdWJzZXF1ZW50XG4gICAgY29uc3QgY29uc2VxdWVudFN0YXRlbWVudHMgPSBub2RlLnN0YXRlbWVudHNcbiAgICBjb25zdCBjb25zZXF1ZW50QXJtID0gY29uc2VxdWVudFN0YXRlbWVudHMgJiYgY29uc2VxdWVudFN0YXRlbWVudHMuYm9keS5sZW5ndGggPT0gMSA/IGNvbnNlcXVlbnRTdGF0ZW1lbnRzLmJvZHlbMF0gOiB1bmRlZmluZWRcblxuICAgIGlmICghKGVsc2VDbGF1c2UgaW5zdGFuY2VvZiBFbHNlTm9kZSkgfHwgIWVsc2VDbGF1c2Uuc3RhdGVtZW50cyB8fCBlbHNlQ2xhdXNlLnN0YXRlbWVudHMuYm9keS5sZW5ndGggIT0gMSB8fCAhY29uc2VxdWVudEFybSB8fCAhbm9kZS50aGVuS2V5d29yZExvYykge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInRlcm5hcnkgd2l0aG91dCBhbHRlcm5hdGVcIiwgbG9jYXRpb24pXG4gICAgfVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgYWx0ZXJuYXRlOiBjb252ZXJ0RXhwcmVzc2lvbihlbHNlQ2xhdXNlLnN0YXRlbWVudHMuYm9keVswXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBjb25kaXRpb246IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucHJlZGljYXRlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGNvbnNlcXVlbnQ6IGNvbnZlcnRFeHByZXNzaW9uKGNvbnNlcXVlbnRBcm0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIpLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7XG4gICAgICBhbHRlcm5hdGU6IG5vZGVMb2NhdGlvbihlbHNlQ2xhdXNlLnN0YXRlbWVudHMuYm9keVswXSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBjb2xvbjogcHJpc21Mb2NhdGlvbihlbHNlQ2xhdXNlLmVsc2VLZXl3b3JkTG9jID8/IGVsc2VDbGF1c2UubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgY29uZGl0aW9uOiBub2RlTG9jYXRpb24obm9kZS5wcmVkaWNhdGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgY29uc2VxdWVudDogbm9kZUxvY2F0aW9uKGNvbnNlcXVlbnRBcm0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgb3BlcmF0b3I6IHByaXNtTG9jYXRpb24obm9kZS50aGVuS2V5d29yZExvYywgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KSkpXG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIE9yTm9kZSAmJiBub2RlLmxlZnQgaW5zdGFuY2VvZiBMb2NhbFZhcmlhYmxlUmVhZE5vZGUgJiZcbiAgICBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlLmxlZnQubmFtZSk/LmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJvcHRpb25hbCBkZWZhdWx0IHdpdGggfHxcIiwgcHJpc21Mb2NhdGlvbihub2RlLm9wZXJhdG9yTG9jLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIGlmIChleGFjdE5pbFRlc3Qobm9kZSwgc291cmNlKSkge1xuICAgIGNvbnN0IGNhbGwgPSAvKiogQHR5cGUge0NhbGxOb2RlfSAqLyAobm9kZSlcbiAgICBjb25zdCByZWNlaXZlciA9IC8qKiBAdHlwZSB7TG9jYWxWYXJpYWJsZVJlYWROb2RlfSAqLyAoY2FsbC5yZWNlaXZlcilcbiAgICBjb25zdCBvcGVyYW5kID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZGVudGlmaWVyRXhwcmVzc2lvbn0gKi8gKFxuICAgICAgY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHVuZGVmaW5lZCwgdHJ1ZSlcbiAgICApXG4gICAgY29uc3QgcHJlc2VudCA9IHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsSXNQcmVzZW50XCIpLCBsb2NhdGlvbiwgb3BlcmFuZH0sIHtcbiAgICAgIG9wZXJhdG9yOiBwcmlzbUxvY2F0aW9uKGNhbGwubWVzc2FnZUxvYyA/PyBjYWxsLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IFwiVW5hcnlFeHByZXNzaW9uXCIsXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG9wZXJhbmQ6IHByZXNlbnRcbiAgICB9LCB7b3BlcmF0b3I6IHByaXNtTG9jYXRpb24oY2FsbC5tZXNzYWdlTG9jID8/IGNhbGwubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpfSksIFwiTm90XCIpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBBcnJheU5vZGUpIHtcbiAgICBpZiAoIW5vZGUub3BlbmluZ0xvYyB8fCAhbm9kZS5jbG9zaW5nTG9jKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwic3BlY2lhbCBhcnJheSBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuICAgIGlmIChub2RlLmlzQ29udGFpbnNTcGxhdCgpKSB7XG4gICAgICBjb25zdCBzcGxhdCA9IG5vZGUuZWxlbWVudHMuZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5jb25zdHJ1Y3Rvci5uYW1lID09IFwiU3BsYXROb2RlXCIpXG5cbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJhcnJheSBzcGxhdFwiLCBzcGxhdCA/IG5vZGVMb2NhdGlvbihzcGxhdCwgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvbilcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50VHlwZSA9IGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIkxpc3RUeXBlXCIgPyBleHBlY3RlZFR5cGUuZWxlbWVudFR5cGUgOiB1bmRlZmluZWRcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGVsZW1lbnRzOiBub2RlLmVsZW1lbnRzLm1hcCgoZWxlbWVudCkgPT4gY29udmVydEV4cHJlc3Npb24oZWxlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZWxlbWVudFR5cGUpKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkxpc3RMaXRlcmFsXCIpLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7XG4gICAgICBjbG9zZTogcHJpc21Mb2NhdGlvbihub2RlLmNsb3NpbmdMb2MsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgb3BlbjogcHJpc21Mb2NhdGlvbihub2RlLm9wZW5pbmdMb2MsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgSGFzaE5vZGUpIHtcbiAgICBjb25zdCB2YWx1ZVR5cGUgPSBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJNYXBUeXBlXCIgfHwgZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIlxuICAgICAgPyBleHBlY3RlZFR5cGUudmFsdWVUeXBlIDogdW5kZWZpbmVkXG4gICAgY29uc3QgZW50cmllcyA9IG5vZGUuZWxlbWVudHMubWFwKChlbGVtZW50KSA9PiB7XG4gICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgQXNzb2NOb2RlKSB8fCAhZWxlbWVudC5vcGVyYXRvckxvYyB8fFxuICAgICAgICBzbGljZVByaXNtU291cmNlKHNvdXJjZSwgZWxlbWVudC5vcGVyYXRvckxvYy5zdGFydE9mZnNldCwgZWxlbWVudC5vcGVyYXRvckxvYy5zdGFydE9mZnNldCArIGVsZW1lbnQub3BlcmF0b3JMb2MubGVuZ3RoKSAhPSBcIj0+XCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImhhc2ggZW50cnlcIiwgbm9kZUxvY2F0aW9uKGVsZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgaWYgKCEoZWxlbWVudC5rZXkgaW5zdGFuY2VvZiBTdHJpbmdOb2RlKSkge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibWFwIGtleSBvdGhlciB0aGFuIGEgc3RyaW5nIGxpdGVyYWxcIiwgbm9kZUxvY2F0aW9uKGVsZW1lbnQua2V5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleSA9IGNvbnZlcnRFeHByZXNzaW9uKGVsZW1lbnQua2V5LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGtleTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdHJpbmdMaXRlcmFsfSAqLyAoa2V5KSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwRW50cnlcIiksXG4gICAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oZWxlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIHZhbHVlOiBjb252ZXJ0RXhwcmVzc2lvbihlbGVtZW50LnZhbHVlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCB2YWx1ZVR5cGUpXG4gICAgICB9LCB7b3BlcmF0b3I6IHByaXNtTG9jYXRpb24oZWxlbWVudC5vcGVyYXRvckxvYywgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBlbnRyaWVzLFxuICAgICAga2luZDogZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIlxuICAgICAgICA/IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9yZGVyZWRNYXBMaXRlcmFsXCIpXG4gICAgICAgIDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwTGl0ZXJhbFwiKSxcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge1xuICAgICAgY2xvc2U6IHByaXNtTG9jYXRpb24obm9kZS5jbG9zaW5nTG9jLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG9wZW46IHByaXNtTG9jYXRpb24obm9kZS5vcGVuaW5nTG9jLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIChub2RlLnJlY2VpdmVyIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSB8fCBub2RlLnJlY2VpdmVyIGluc3RhbmNlb2YgQ29uc3RhbnRQYXRoTm9kZSkgJiYgbm9kZS5uYW1lID09IFwibmV3XCIgJiZcbiAgICBub2RlLmNhbGxPcGVyYXRvckxvYyAmJiAhbm9kZS5ibG9jaykge1xuICAgIGNvbnN0IHJlY29yZE5hbWUgPSBjb25zdGFudFBhdGhOYW1lKG5vZGUucmVjZWl2ZXIpXG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBjb250ZXh0LnJlY29yZE5hbWVzLmdldChyZWNvcmROYW1lKVxuXG4gICAgaWYgKCFkZWNsYXJhdGlvbikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImNvbnN0cnVjdGlvbiBvZiBhIG5vbi1yZWNvcmQgY2xhc3NcIiwgbm9kZUxvY2F0aW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGlmIChkZWNsYXJhdGlvbi5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKSB7XG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiAobm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfID8/IFtdKS5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT5cbiAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLnBhcmFtZXRlcnNbaW5kZXhdPy50eXBlKSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWZlcmVuY2VDb25zdHJ1Y3Rpb25cIiksIGxvY2F0aW9uLFxuICAgICAgcmVmZXJlbmNlOiByZWZlcmVuY2VUeXBlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBub2RlTG9jYXRpb24obm9kZS5yZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSkpfSxcbiAgICAgIHtjbGFzczogbm9kZUxvY2F0aW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJJbnRlcmZhY2VEZWNsYXJhdGlvblwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiY29uc3RydWN0aW9uIG9mIGFuIGludGVyZmFjZVwiLCBub2RlTG9jYXRpb24obm9kZS5yZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGlmIChkZWNsYXJhdGlvbi5raW5kID09IFwiRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvblwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwib3duZWQgcmVzb3VyY2UgY29uc3RydWN0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIlJlY29yZFR5cGVcIiAmJiBleHBlY3RlZFR5cGUuZGVjbGFyYXRpb25JZCA9PSBkZWNsYXJhdGlvbi5pZFxuICAgICAgPyBleHBlY3RlZFR5cGUuYXJndW1lbnRzXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgYXJndW1lbnRzOiAobm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfID8/IFtdKS5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT5cbiAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsXG4gICAgICAgICAgaW5zdGFudGlhdGVkUmVjb3JkRmllbGRUeXBlKGRlY2xhcmF0aW9uLCB0eXBlQXJndW1lbnRzLCBpbmRleCkpKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY29yZENvbnN0cnVjdGlvblwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmVjb3JkOiByZWNvcmRUeXBlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBub2RlTG9jYXRpb24obm9kZS5yZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIHR5cGVBcmd1bWVudHMpXG4gICAgfSwge3JlY29yZDogbm9kZUxvY2F0aW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgbm9kZS5yZWNlaXZlciAmJiBub2RlLm5hbWUgPT0gXCIhXCIpIHtcbiAgICBjb25zdCBvcGVyYXRvckxvY2F0aW9uID0gcHJpc21Mb2NhdGlvbihub2RlLm1lc3NhZ2VMb2MgPz8gbm9kZS5sb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChub2RlLmNhbGxPcGVyYXRvckxvYykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInF1YWxpZmllZCBib29sZWFuIG5vdFwiLCBvcGVyYXRvckxvY2F0aW9uKVxuICAgIGlmIChub2RlLm1lc3NhZ2VMb2M/Lmxlbmd0aCAhPSAxKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwicHJlY2VkZW5jZS1zZW5zaXRpdmUgYm9vbGVhbiBub3RcIiwgb3BlcmF0b3JMb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKG5vZGUuYXJndW1lbnRzXykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImJvb2xlYW4gbm90IGFyZ3VtZW50IGxpc3RcIiwgb3BlcmF0b3JMb2NhdGlvbilcblxuICAgIGNvbnN0IG9wZXJhbmQgPSBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuXG4gICAgaWYgKG9wZXJhbmQua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiICYmIG9wZXJhbmQub3BlcmFuZC5raW5kID09IFwiT3B0aW9uYWxJc1ByZXNlbnRcIikge1xuICAgICAgcmV0dXJuIG9wZXJhbmQub3BlcmFuZFxuICAgIH1cbiAgICBjb25zdCBzZW1hbnRpYyA9IHdpdGhBZGFwdGVkT3BlcmF0aW9uKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogXCJVbmFyeUV4cHJlc3Npb25cIixcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgb3BlcmFuZFxuICAgIH0sIHtvcGVyYXRvcjogb3BlcmF0b3JMb2NhdGlvbn0pLCBcIk5vdFwiKVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgbm9kZS5yZWNlaXZlciAmJiBub2RlLm5hbWUgPT0gXCItQFwiKSB7XG4gICAgY29uc3Qgb3BlcmF0b3JMb2NhdGlvbiA9IHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jID8/IG5vZGUubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAobm9kZS5jYWxsT3BlcmF0b3JMb2MpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJxdWFsaWZpZWQgaW50ZWdlciBuZWdhdGlvblwiLCBvcGVyYXRvckxvY2F0aW9uKVxuICAgIGlmIChub2RlLmFyZ3VtZW50c18pIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJpbnRlZ2VyIG5lZ2F0aW9uIGFyZ3VtZW50IGxpc3RcIiwgb3BlcmF0b3JMb2NhdGlvbilcblxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIlVuYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBvcGVyYW5kOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH0sIHtvcGVyYXRvcjogb3BlcmF0b3JMb2NhdGlvbn0pLCBcIk5lZ2F0ZVwiKVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgQW5kTm9kZSB8fCBub2RlIGluc3RhbmNlb2YgT3JOb2RlKSB7XG4gICAgY29uc3Qgb3BlcmF0b3JMb2NhdGlvbiA9IHByaXNtTG9jYXRpb24obm9kZS5vcGVyYXRvckxvYywgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBzb3VyY2VPcGVyYXRvciA9IHNvdXJjZS5zbGljZShvcGVyYXRvckxvY2F0aW9uLnN0YXJ0Lm9mZnNldCwgb3BlcmF0b3JMb2NhdGlvbi5lbmQub2Zmc2V0KVxuXG4gICAgaWYgKHNvdXJjZU9wZXJhdG9yICE9IFwiJiZcIiAmJiBzb3VyY2VPcGVyYXRvciAhPSBcInx8XCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgYHByZWNlZGVuY2Utc2Vuc2l0aXZlIGJvb2xlYW4gJHtzb3VyY2VPcGVyYXRvcn1gLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICBjb25zdCBzZW1hbnRpYyA9IHdpdGhBZGFwdGVkT3BlcmF0aW9uKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogXCJCaW5hcnlFeHByZXNzaW9uXCIsXG4gICAgICBsZWZ0OiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLmxlZnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICByaWdodDogY29udmVydEV4cHJlc3Npb24obm9kZS5yaWdodCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9LCB7b3BlcmF0b3I6IG9wZXJhdG9yTG9jYXRpb259KSwgbm9kZSBpbnN0YW5jZW9mIEFuZE5vZGUgPyBcIkFuZFwiIDogXCJPclwiKVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgbm9kZS5yZWNlaXZlciAmJiBydWJ5QmluYXJ5T3BlcmF0aW9ucy5oYXMobm9kZS5uYW1lKSAmJiBub2RlLmNhbGxPcGVyYXRvckxvYyAmJlxuICAgIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggPT0gMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcbiAgICAgIFwicnVieVwiLFxuICAgICAgYHF1YWxpZmllZCBiaW5hcnkgb3BlcmF0b3IgJHtub2RlLm5hbWV9YCxcbiAgICAgIHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jID8/IG5vZGUubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgKVxuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyICYmIHJ1YnlCaW5hcnlPcGVyYXRpb25zLmhhcyhub2RlLm5hbWUpICYmIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggPT0gMSkge1xuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIkJpbmFyeUV4cHJlc3Npb25cIixcbiAgICAgIGxlZnQ6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICByaWdodDogY29udmVydEV4cHJlc3Npb24obm9kZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgfSwge29wZXJhdG9yOiBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pLCAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL29wZXJhdG9ycy5qc1wiKS5BZGFwdGVkT3BlcmF0aW9ufSAqLyAocnVieUJpbmFyeU9wZXJhdGlvbnMuZ2V0KG5vZGUubmFtZSkpKVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgbm9kZS5yZWNlaXZlciAmJiBub2RlLm5hbWUgPT0gXCJbXVwiICYmIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggPT0gMSAmJlxuICAgICFub2RlLmNhbGxPcGVyYXRvckxvYyAmJiAhbm9kZS5ibG9jaykge1xuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGNvbGxlY3Rpb246IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgaW5kZXg6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUuYXJndW1lbnRzXy5hcmd1bWVudHNfWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkxpc3RJbmRleEV4cHJlc3Npb25cIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHRvdGFsaXR5OiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJwcm92ZW5cIilcbiAgICB9LCB7b3BlcmF0b3I6IHByaXNtTG9jYXRpb24obm9kZS5vcGVuaW5nTG9jID8/IG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyICYmIG5vZGUubmFtZSA9PSBcImZldGNoXCIgJiYgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCA9PSAxICYmXG4gICAgbm9kZS5jYWxsT3BlcmF0b3JMb2MgJiYgIW5vZGUuYmxvY2spIHtcbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBjb2xsZWN0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGtleTogY29udmVydEV4cHJlc3Npb24obm9kZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwTG9va3VwRXhwcmVzc2lvblwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgdG90YWxpdHk6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcImZhaWwtb24tYWJzZW5jZVwiKVxuICAgIH0sIHtvcGVyYXRvcjogcHJpc21Mb2NhdGlvbihub2RlLm1lc3NhZ2VMb2MgPz8gbm9kZS5sb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgbm9kZS5yZWNlaXZlciBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUgJiYgbm9kZS5jYWxsT3BlcmF0b3JMb2MgJiYgIW5vZGUuYmxvY2spIHtcbiAgICBjb25zdCBjYWxsZWUgPSBgJHtub2RlLnJlY2VpdmVyLm5hbWV9LiR7bm9kZS5uYW1lfWBcbiAgICBjb25zdCBzaWduYXR1cmUgPSBjb250ZXh0LmZ1bmN0aW9ucy5nZXQoY2FsbGVlKVxuXG4gICAgaWYgKHNpZ25hdHVyZSkge1xuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBhcmd1bWVudHM6IChub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18gPz8gW10pLm1hcCgoYXJndW1lbnQsIGluZGV4KSA9PlxuICAgICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBzaWduYXR1cmUucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUsXG4gICAgICAgICAgICBwcmVzZXJ2ZXNHZW5lcmljT3B0aW9uYWxFdmlkZW5jZShzaWduYXR1cmUsIGluZGV4KSkpLFxuICAgICAgICBjYWxsZWUsXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhbGxFeHByZXNzaW9uXCIpLFxuICAgICAgICBsb2NhdGlvblxuICAgICAgfSwge2NhbGxlZTogcHJpc21Mb2NhdGlvbihub2RlLm1lc3NhZ2VMb2MgPz8gbm9kZS5sb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cbiAgfVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUucmVjZWl2ZXIgJiYgbm9kZS5uYW1lID09IFwic2l6ZVwiICYmICFub2RlLmFyZ3VtZW50c18gJiYgbm9kZS5jYWxsT3BlcmF0b3JMb2MgJiYgIW5vZGUuYmxvY2spIHtcbiAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5yZWNlaXZlciwgY29udGV4dClcblxuICAgIGlmIChyZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIpIHtcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgZmllbGQ6IG5vZGUubmFtZSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWVtYmVyUmVhZFwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHJlY2VpdmVyOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgICAgfSwge21lbWJlcjogcHJpc21Mb2NhdGlvbihub2RlLm1lc3NhZ2VMb2MgPz8gbm9kZS5sb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBjb2xsZWN0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNvbGxlY3Rpb25TaXplRXhwcmVzc2lvblwiKSxcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge29wZXJhdG9yOiBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyIGluc3RhbmNlb2YgTG9jYWxWYXJpYWJsZVJlYWROb2RlICYmIG5vZGUubmFtZSA9PSBcIm1lc3NhZ2VcIiAmJlxuICAgICFub2RlLmFyZ3VtZW50c18gJiYgbm9kZS5jYWxsT3BlcmF0b3JMb2MgJiYgIW5vZGUuYmxvY2sgJiYgY29udGV4dC5iaW5kaW5ncy5nZXQobm9kZS5yZWNlaXZlci5uYW1lKT8ua2luZCA9PSBcIkVycm9yVHlwZVwiKSB7XG4gICAgY29uc3QgcmVjZWl2ZXJMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JNZXNzYWdlUmVhZFwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmVjZWl2ZXI6IHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbjogcmVjZWl2ZXJMb2NhdGlvbiwgbmFtZTogbm9kZS5yZWNlaXZlci5uYW1lfSwge1xuICAgICAgICBuYW1lOiByZWNlaXZlckxvY2F0aW9uXG4gICAgICB9KVxuICAgIH0sIHttZW1iZXI6IHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jID8/IG5vZGUubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUucmVjZWl2ZXIgJiYgbm9kZS5jYWxsT3BlcmF0b3JMb2MgJiYgIW5vZGUuYmxvY2sgJiZcbiAgICBrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5yZWNlaXZlciwgY29udGV4dCk/LmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIpIHtcbiAgICBjb25zdCByZWNlaXZlclR5cGUgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlZmVyZW5jZVR5cGV9ICovIChrbm93blZhbHVlRXhwcmVzc2lvblR5cGUobm9kZS5yZWNlaXZlciwgY29udGV4dCkpXG4gICAgY29uc3QgbWV0aG9kID0gY29udGV4dC5jbGFzc2VzLmdldChyZWNlaXZlclR5cGUuZGVjbGFyYXRpb25JZCk/Lm1ldGhvZHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBub2RlLm5hbWUpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiAobm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfID8/IFtdKS5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT5cbiAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBtZXRob2Q/LnBhcmFtZXRlcnNbaW5kZXhdPy50eXBlKSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWV0aG9kQ2FsbEV4cHJlc3Npb25cIiksIGxvY2F0aW9uLCBtZXRob2Q6IG1ldGhvZD8uaWQgPz8gbm9kZS5uYW1lLFxuICAgIHJlY2VpdmVyOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KX0sXG4gICAge21lbWJlcjogcHJpc21Mb2NhdGlvbihub2RlLm1lc3NhZ2VMb2MgPz8gbm9kZS5sb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgbm9kZS5yZWNlaXZlciAmJiBub2RlLmNhbGxPcGVyYXRvckxvYyAmJiAhbm9kZS5hcmd1bWVudHNfICYmICFub2RlLmJsb2NrKSB7XG4gICAgaWYgKFtcInNlbmRcIiwgXCJwdWJsaWNfc2VuZFwiLCBcIl9fc2VuZF9fXCIsIFwiaW5zdGFuY2VfdmFyaWFibGVfZ2V0XCIsIFwibWV0aG9kXCJdLmluY2x1ZGVzKG5vZGUubmFtZSkpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJkeW5hbWljIG9yIHJlZmxlY3RpdmUgbWVtYmVyIGFjY2Vzc1wiLCBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZmllbGQ6IG5vZGUubmFtZSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1lbWJlclJlYWRcIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJlY2VpdmVyOiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH0sIHttZW1iZXI6IHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jID8/IG5vZGUubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgIW5vZGUucmVjZWl2ZXIpIHtcbiAgICBpZiAoW1wic2VuZFwiLCBcInB1YmxpY19zZW5kXCIsIFwiX19zZW5kX19cIl0uaW5jbHVkZXMobm9kZS5uYW1lKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImR5bmFtaWMgY2FsbFwiLCBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KG5vZGUubmFtZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGFyZ3VtZW50czogKG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXyA/PyBbXSkubWFwKChhcmd1bWVudCwgaW5kZXgpID0+XG4gICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBzaWduYXR1cmU/LnBhcmFtZXRlcnNbaW5kZXhdPy50eXBlLFxuICAgICAgICAgIHByZXNlcnZlc0dlbmVyaWNPcHRpb25hbEV2aWRlbmNlKHNpZ25hdHVyZSwgaW5kZXgpKSksXG4gICAgICBjYWxsZWU6IG5vZGUubmFtZSxcbiAgICAgIGtpbmQ6IFwiQ2FsbEV4cHJlc3Npb25cIixcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge2NhbGxlZTogcHJpc21Mb2NhdGlvbihub2RlLm1lc3NhZ2VMb2MgPz8gbm9kZS5sb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgbm9kZS5yZWNlaXZlcikge1xuICAgIGNvbnN0IHVuc3VwcG9ydGVkTG9jYXRpb24gPSAhbm9kZS5jYWxsT3BlcmF0b3JMb2MgJiYgbm9kZS5tZXNzYWdlTG9jICYmIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggPT0gMVxuICAgICAgPyBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYywgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIDogbm9kZUxvY2F0aW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIG5vZGUuY29uc3RydWN0b3IubmFtZSwgdW5zdXBwb3J0ZWRMb2NhdGlvbilcbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgbm9kZS5jb25zdHJ1Y3Rvci5uYW1lLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBvbmx5IHJlc3VsdCB0eXBlcyBlc3RhYmxpc2hlZCBieSBleHBsaWNpdCBzaWduYXR1cmVzIGFuZCBiaW5kaW5ncy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZX0gbm9kZSAtIFBhcnNlci1vd25lZCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGUgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvclR5cGUgfCB1bmRlZmluZWR9IEtub3duIHJlc3VsdCB0eXBlLlxuICovXG5mdW5jdGlvbiBrbm93bkV4cHJlc3Npb25UeXBlKG5vZGUsIGNvbnRleHQpIHtcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBQYXJlbnRoZXNlc05vZGUgJiYgbm9kZS5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgJiYgbm9kZS5ib2R5LmJvZHkubGVuZ3RoID09IDEpIHtcbiAgICByZXR1cm4ga25vd25FeHByZXNzaW9uVHlwZShub2RlLmJvZHkuYm9keVswXSwgY29udGV4dClcbiAgfVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVSZWFkTm9kZSkgcmV0dXJuIGNvbnRleHQuYmluZGluZ3MuZ2V0KG5vZGUubmFtZSlcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiAhbm9kZS5yZWNlaXZlcikge1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNvbnRleHQuZnVuY3Rpb25zLmdldChub2RlLm5hbWUpXG5cbiAgICBpZiAoc2lnbmF0dXJlKSByZXR1cm4ga25vd25DYWxsUmV0dXJuVHlwZShzaWduYXR1cmUsIChub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18gPz8gW10pLm1hcCgoYXJndW1lbnQpID0+XG4gICAgICBrbm93bkV4cHJlc3Npb25UeXBlKGFyZ3VtZW50LCBjb250ZXh0KSkpXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSkge1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNvbnRleHQuZnVuY3Rpb25zLmdldChgJHtub2RlLnJlY2VpdmVyLm5hbWV9LiR7bm9kZS5uYW1lfWApXG5cbiAgICBpZiAoc2lnbmF0dXJlKSByZXR1cm4ga25vd25DYWxsUmV0dXJuVHlwZShzaWduYXR1cmUsIChub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18gPz8gW10pLm1hcCgoYXJndW1lbnQpID0+XG4gICAgICBrbm93bkV4cHJlc3Npb25UeXBlKGFyZ3VtZW50LCBjb250ZXh0KSkpXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyICYmIG5vZGUubmFtZSA9PSBcIltdXCIpIHtcbiAgICBjb25zdCBjb2xsZWN0aW9uVHlwZSA9IGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLnJlY2VpdmVyLCBjb250ZXh0KVxuXG4gICAgaWYgKGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiTGlzdFR5cGVcIikgcmV0dXJuIGNvbGxlY3Rpb25UeXBlLmVsZW1lbnRUeXBlXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiBub2RlLnJlY2VpdmVyICYmIG5vZGUubmFtZSA9PSBcImZldGNoXCIpIHtcbiAgICBjb25zdCBjb2xsZWN0aW9uVHlwZSA9IGtub3duVmFsdWVFeHByZXNzaW9uVHlwZShub2RlLnJlY2VpdmVyLCBjb250ZXh0KVxuXG4gICAgaWYgKGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiTWFwVHlwZVwiIHx8IGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIikgcmV0dXJuIGNvbGxlY3Rpb25UeXBlLnZhbHVlVHlwZVxuICB9XG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgKG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBDb25zdGFudFJlYWROb2RlIHx8IG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBDb25zdGFudFBhdGhOb2RlKSAmJiBub2RlLm5hbWUgPT0gXCJuZXdcIikge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gY29udGV4dC5yZWNvcmROYW1lcy5nZXQoY29uc3RhbnRQYXRoTmFtZShub2RlLnJlY2VpdmVyKSlcblxuICAgIGlmIChkZWNsYXJhdGlvbj8uaWQpIHJldHVybiBkZWNsYXJhdGlvbi5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiXG4gICAgICA/IHtkZWNsYXJhdGlvbklkOiBkZWNsYXJhdGlvbi5pZCwga2luZDogXCJSZWZlcmVuY2VUeXBlXCJ9XG4gICAgICA6IHtkZWNsYXJhdGlvbklkOiBkZWNsYXJhdGlvbi5pZCwga2luZDogXCJSZWNvcmRUeXBlXCJ9XG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBTZWxmTm9kZSAmJiBjb250ZXh0LmN1cnJlbnRDbGFzcz8uaWQpIHJldHVybiB7ZGVjbGFyYXRpb25JZDogY29udGV4dC5jdXJyZW50Q2xhc3MuaWQsIGtpbmQ6IFwiUmVmZXJlbmNlVHlwZVwifVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIEluc3RhbmNlVmFyaWFibGVSZWFkTm9kZSAmJiBjb250ZXh0LmN1cnJlbnRDbGFzcykge1xuICAgIHJldHVybiBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoZmllbGQpID0+IGBAJHtmaWVsZC5uYW1lfWAgPT0gbm9kZS5uYW1lKT8udHlwZVxuICB9XG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgbm9kZS5yZWNlaXZlciAmJiBub2RlLmNhbGxPcGVyYXRvckxvYykge1xuICAgIGNvbnN0IHJlY2VpdmVyID0ga25vd25WYWx1ZUV4cHJlc3Npb25UeXBlKG5vZGUucmVjZWl2ZXIsIGNvbnRleHQpXG5cbiAgICBpZiAocmVjZWl2ZXI/LmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIpIHtcbiAgICAgIHJldHVybiBjb250ZXh0LmNsYXNzZXMuZ2V0KHJlY2VpdmVyLmRlY2xhcmF0aW9uSWQpPy5tZXRob2RzLmZpbmQoKG1ldGhvZCkgPT4gbWV0aG9kLm5hbWUgPT0gbm9kZS5uYW1lKT8ucmV0dXJuVHlwZVxuICAgIH1cbiAgICBpZiAobm9kZS5hcmd1bWVudHNfKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgaWYgKHJlY2VpdmVyPy5raW5kICE9IFwiUmVjb3JkVHlwZVwiKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBjb250ZXh0LnJlY29yZHMuZ2V0KHJlY2VpdmVyLmRlY2xhcmF0aW9uSWQpXG4gICAgY29uc3QgaW5kZXggPSBkZWNsYXJhdGlvbj8uZmllbGRzLmZpbmRJbmRleCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbm9kZS5uYW1lKSA/PyAtMVxuXG4gICAgcmV0dXJuIGRlY2xhcmF0aW9uID8gaW5zdGFudGlhdGVkUmVjb3JkRmllbGRUeXBlKGRlY2xhcmF0aW9uLCByZWNlaXZlci5hcmd1bWVudHMsIGluZGV4KSA6IHVuZGVmaW5lZFxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSB2YWx1ZSB0eXBlIHByb2R1Y2VkIGJ5IHRoZSBmcm9udGVuZCdzIGltcGxpY2l0IG9wdGlvbmFsLWJpbmRpbmcgdW53cmFwLlxuICogU2VtYW50aWMgdmFsaWRhdGlvbiBzZXBhcmF0ZWx5IHByb3ZlcyB0aGF0IHRoZSB1bndyYXAgb2NjdXJzIG9ubHkgb24gYSBwcmVzZW50IHBhdGguXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGV9IG5vZGUgLSBQYXJzZXItb3duZWQgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7UnVieUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JUeXBlIHwgdW5kZWZpbmVkfSBDb252ZXJ0ZWQgdmFsdWUgdHlwZS5cbiAqL1xuZnVuY3Rpb24ga25vd25WYWx1ZUV4cHJlc3Npb25UeXBlKG5vZGUsIGNvbnRleHQpIHtcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBQYXJlbnRoZXNlc05vZGUgJiYgbm9kZS5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgJiYgbm9kZS5ib2R5LmJvZHkubGVuZ3RoID09IDEpIHtcbiAgICByZXR1cm4ga25vd25WYWx1ZUV4cHJlc3Npb25UeXBlKG5vZGUuYm9keS5ib2R5WzBdLCBjb250ZXh0KVxuICB9XG4gIGNvbnN0IHR5cGUgPSBrbm93bkV4cHJlc3Npb25UeXBlKG5vZGUsIGNvbnRleHQpXG5cbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBMb2NhbFZhcmlhYmxlUmVhZE5vZGUgJiYgdHlwZT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiID8gdHlwZS52YWx1ZVR5cGUgOiB0eXBlXG59XG5cbi8qKlxuICogUmVjb2duaXplcyBvbmx5IHRoZSBwYXJzZXItYmFja2VkIGBpZGVudGlmaWVyLm5pbD9gIHNwZWxsaW5nIHVzZWQgYnkgVGFzayAwMDcuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGV9IG5vZGUgLSBDYW5kaWRhdGUgUHJpc20gZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGlzIGlzIG9uZSBleGFjdCBuaWwgdGVzdC5cbiAqL1xuZnVuY3Rpb24gZXhhY3ROaWxUZXN0KG5vZGUsIHNvdXJjZSkge1xuICBpZiAoIShub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUpIHx8ICEobm9kZS5yZWNlaXZlciBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVSZWFkTm9kZSkgfHxcbiAgICBub2RlLm5hbWUgIT0gXCJuaWw/XCIgfHwgIW5vZGUuY2FsbE9wZXJhdG9yTG9jIHx8IG5vZGUuYXJndW1lbnRzXyB8fCBub2RlLmJsb2NrKSByZXR1cm4gZmFsc2VcblxuICByZXR1cm4gc2xpY2VQcmlzbVNvdXJjZShcbiAgICBzb3VyY2UsXG4gICAgbm9kZS5jYWxsT3BlcmF0b3JMb2Muc3RhcnRPZmZzZXQsXG4gICAgbm9kZS5jYWxsT3BlcmF0b3JMb2Muc3RhcnRPZmZzZXQgKyBub2RlLmNhbGxPcGVyYXRvckxvYy5sZW5ndGhcbiAgKSA9PSBcIi5cIlxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleHBsaWNpdCBSdWJ5IHJldHVybi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZX0gbm9kZSAtIFByaXNtIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZXR1cm5TdGF0ZW1lbnR9IFNlbWFudGljIHJldHVybi5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJldHVybihub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIFJldHVybk5vZGUpIHx8IChub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoID8/IDApID4gMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgbm9kZS5jb25zdHJ1Y3Rvci5uYW1lLCBsb2NhdGlvbilcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uKG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzX1swXSA/IHtleHByZXNzaW9uOiBjb252ZXJ0RXhwcmVzc2lvbihcbiAgICAgIG5vZGUuYXJndW1lbnRzXy5hcmd1bWVudHNfWzBdLFxuICAgICAgZmlsZW5hbWUsXG4gICAgICBzb3VyY2UsXG4gICAgICBjb250ZXh0LFxuICAgICAgY29udGV4dC5yZXR1cm5UeXBlPy5raW5kID09IFwiVHlwZVJlZmVyZW5jZVwiICYmIGNvbnRleHQucmV0dXJuVHlwZS5uYW1lID09IFwidm9pZFwiID8gdW5kZWZpbmVkIDogY29udGV4dC5yZXR1cm5UeXBlXG4gICAgKX0gOiB7fSksXG4gICAga2luZDogXCJSZXR1cm5TdGF0ZW1lbnRcIixcbiAgICBsb2NhdGlvblxuICB9XG59XG5cbi8qKlxuICogUmVhZHMgUHJpc20tb3duZWQgUkJTLXN0eWxlIHR5cGUgY29tbWVudHMgZGlyZWN0bHkgcHJlY2VkaW5nIGEgZGVmaW5pdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc20vc3JjL2Rlc2VyaWFsaXplLmpzXCIpLkNvbW1lbnRbXX0gY29tbWVudHMgLSBQcmlzbSBjb21tZW50cy5cbiAqIEBwYXJhbSB7e2xvY2F0aW9uOiBpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Mb2NhdGlvbn19IG5vZGUgLSBDb21tZW50IG93bmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3duZXJJZF0gLSBTdGFibGUgZGVjbGFyYXRpb24gaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7e3BhcmFtZXRlcnM6IE1hcDxzdHJpbmcsIHtsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNvdXJjZVR5cGU6IHN0cmluZ30+LCByZXR1cm5UeXBlOiB7bG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBzb3VyY2VUeXBlOiBzdHJpbmd9IHwgdW5kZWZpbmVkLCB0eXBlUGFyYW1ldGVycz86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXJbXX19IERlY2xhcmVkIHR5cGVzLlxuICovXG5mdW5jdGlvbiB0eXBlQ29tbWVudHMoY29tbWVudHMsIG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIG93bmVySWQpIHtcbiAgY29uc3QgcHJlY2VkaW5nID0gYXNzb2NpYXRlZENvbW1lbnRzKGNvbW1lbnRzLCBub2RlLCBzb3VyY2UpXG4gIGNvbnN0IHBhcmFtZXRlclR5cGVzID0gbmV3IE1hcCgpXG4gIC8qKiBAdHlwZSB7e2xvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgc291cmNlVHlwZTogc3RyaW5nfSB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IHJldHVyblR5cGVcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyW119ICovXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXJzID0gW11cblxuICBmb3IgKGNvbnN0IGNvbW1lbnQgb2YgcHJlY2VkaW5nKSB7XG4gICAgY29uc3Qgd29yZHMgPSBjb21tZW50VG9rZW5zKGNvbW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAod29yZHNbMF0/LnRleHQgPT0gXCJAcGFyYW1cIiAmJiB3b3Jkcy5sZW5ndGggPj0gMykge1xuICAgICAgaWYgKHBhcmFtZXRlclR5cGVzLmhhcyh3b3Jkc1sxXS50ZXh0KSkge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiZHVwbGljYXRlIHBhcmFtZXRlciBhbm5vdGF0aW9uXCIsIHdvcmRzWzFdLmxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgcGFyYW1ldGVyVHlwZXMuc2V0KHdvcmRzWzFdLnRleHQsIGpvaW5lZENvbW1lbnRUb2tlbih3b3JkcywgMiwgc291cmNlKSlcbiAgICB9IGVsc2UgaWYgKHdvcmRzWzBdPy50ZXh0ID09IFwiQHJldHVyblwiICYmIHdvcmRzLmxlbmd0aCA+PSAyKSB7XG4gICAgICBpZiAocmV0dXJuVHlwZSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImR1cGxpY2F0ZSByZXR1cm4gYW5ub3RhdGlvblwiLCB3b3Jkc1sxXS5sb2NhdGlvbilcbiAgICAgIHJldHVyblR5cGUgPSBqb2luZWRDb21tZW50VG9rZW4od29yZHMsIDEsIHNvdXJjZSlcbiAgICB9IGVsc2UgaWYgKHdvcmRzWzBdPy50ZXh0ID09IFwiQHRlbXBsYXRlXCIgJiYgd29yZHMubGVuZ3RoID09IDIgJiYgb3duZXJJZCAmJlxuICAgICAgL15bQS1aYS16X11bQS1aYS16MC05X10qJC91LnRlc3Qod29yZHNbMV0udGV4dCkpIHtcbiAgICAgIHR5cGVQYXJhbWV0ZXJzLnB1c2god2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGlkOiBgJHtvd25lcklkfTp0eXBlOiR7dHlwZVBhcmFtZXRlcnMubGVuZ3RofWAsXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlR5cGVQYXJhbWV0ZXJcIiksXG4gICAgICAgIGxvY2F0aW9uOiB3b3Jkc1sxXS5sb2NhdGlvbixcbiAgICAgICAgbmFtZTogd29yZHNbMV0udGV4dFxuICAgICAgfSwge25hbWU6IHdvcmRzWzFdLmxvY2F0aW9ufSkpXG4gICAgfSBlbHNlIGlmICh3b3Jkc1swXT8udGV4dD8uc3RhcnRzV2l0aChcIkB0ZW1wbGF0ZVwiKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcImJvdW5kZWQsIGRlZmF1bHRlZCwgdmFyaWFudCwgb3IgbWFsZm9ybWVkIHR5cGUgcGFyYW1ldGVyXCIsIHdvcmRzWzFdPy5sb2NhdGlvbiA/PyBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfSBlbHNlIGlmICh3b3Jkc1swXT8udGV4dD8uc3RhcnRzV2l0aChcIkBwYXJhbVwiKSB8fCB3b3Jkc1swXT8udGV4dD8uc3RhcnRzV2l0aChcIkByZXR1cm5cIikpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJtYWxmb3JtZWQgZnVuY3Rpb24gdHlwZSBhbm5vdGF0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge3BhcmFtZXRlcnM6IHBhcmFtZXRlclR5cGVzLCByZXR1cm5UeXBlLCAuLi4odHlwZVBhcmFtZXRlcnMubGVuZ3RoID4gMCA/IHt0eXBlUGFyYW1ldGVyc30gOiB7fSl9XG59XG5cbi8qKlxuICogUmVqb2lucyBhIGJvdW5kZWQgbWV0YWRhdGEgc3VmZml4IHdoaWxlIHJldGFpbmluZyBpdHMgcGFyc2VyLW93bmVkIHJhbmdlLlxuICogQHBhcmFtIHt7bG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCB0ZXh0OiBzdHJpbmd9W119IHRva2VucyAtIENvbW1lbnQgdG9rZW5zLlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IC0gRmlyc3Qgc3VmZml4IHRva2VuLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHt7bG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBzb3VyY2VUeXBlOiBzdHJpbmd9fSBKb2luZWQgdG9rZW4uXG4gKi9cbmZ1bmN0aW9uIGpvaW5lZENvbW1lbnRUb2tlbih0b2tlbnMsIHN0YXJ0LCBzb3VyY2UpIHtcbiAgY29uc3QgZmlyc3QgPSB0b2tlbnNbc3RhcnRdXG4gIGNvbnN0IGxhc3QgPSB0b2tlbnMuYXQoLTEpXG5cbiAgaWYgKCFmaXJzdCB8fCAhbGFzdCkgdGhyb3cgbmV3IEVycm9yKFwiUnVieSBtZXRhZGF0YSBzdWZmaXggdW5leHBlY3RlZGx5IGRpc2FwcGVhcmVkLlwiKVxuICBjb25zdCBsb2NhdGlvbiA9IGxvY2F0aW9uRnJvbU9mZnNldHMoZmlyc3QubG9jYXRpb24uZmlsZW5hbWUsIHNvdXJjZSwgZmlyc3QubG9jYXRpb24uc3RhcnQub2Zmc2V0LCBsYXN0LmxvY2F0aW9uLmVuZC5vZmZzZXQpXG5cbiAgcmV0dXJuIHtsb2NhdGlvbiwgc291cmNlVHlwZTogc291cmNlLnNsaWNlKGxvY2F0aW9uLnN0YXJ0Lm9mZnNldCwgbG9jYXRpb24uZW5kLm9mZnNldCl9XG59XG5cbi8qKlxuICogTGV4ZXMgd2hpdGVzcGFjZS1zZXBhcmF0ZWQgbWV0YWRhdGEgdG9rZW5zIGluc2lkZSBhIFByaXNtLW93bmVkIFJ1YnkgY29tbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc20vc3JjL2Rlc2VyaWFsaXplLmpzXCIpLkNvbW1lbnR9IGNvbW1lbnQgLSBQcmlzbSBjb21tZW50IHRva2VuLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHt7bG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCB0ZXh0OiBzdHJpbmd9W119IE1ldGFkYXRhIHRva2Vucy5cbiAqL1xuZnVuY3Rpb24gY29tbWVudFRva2Vucyhjb21tZW50LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IHN0YXJ0ID0gdXRmOEJ5dGVPZmZzZXRUb1V0ZjE2T2Zmc2V0KHNvdXJjZSwgY29tbWVudC5sb2NhdGlvbi5zdGFydE9mZnNldClcbiAgY29uc3QgZW5kID0gdXRmOEJ5dGVPZmZzZXRUb1V0ZjE2T2Zmc2V0KHNvdXJjZSwgY29tbWVudC5sb2NhdGlvbi5zdGFydE9mZnNldCArIGNvbW1lbnQubG9jYXRpb24ubGVuZ3RoKVxuICBjb25zdCB0b2tlbnMgPSBbXVxuICBsZXQgb2Zmc2V0ID0gc3RhcnQgKyAxXG5cbiAgd2hpbGUgKG9mZnNldCA8IGVuZCkge1xuICAgIHdoaWxlIChvZmZzZXQgPCBlbmQgJiYgaXNSdWJ5TWV0YWRhdGFXaGl0ZXNwYWNlKHNvdXJjZVtvZmZzZXRdKSkgb2Zmc2V0KytcbiAgICBjb25zdCB0b2tlblN0YXJ0ID0gb2Zmc2V0XG5cbiAgICB3aGlsZSAob2Zmc2V0IDwgZW5kICYmICFpc1J1YnlNZXRhZGF0YVdoaXRlc3BhY2Uoc291cmNlW29mZnNldF0pKSBvZmZzZXQrK1xuICAgIGlmICh0b2tlblN0YXJ0IDwgb2Zmc2V0KSB7XG4gICAgICB0b2tlbnMucHVzaCh7bG9jYXRpb246IGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgdG9rZW5TdGFydCwgb2Zmc2V0KSwgdGV4dDogc291cmNlLnNsaWNlKHRva2VuU3RhcnQsIG9mZnNldCl9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0b2tlbnNcbn1cblxuLyoqXG4gKiBDaGVja3Mgb25lIFJ1YnkgbWV0YWRhdGEgc2VwYXJhdG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJhY3RlciAtIFNvdXJjZSBjaGFyYWN0ZXIuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBpdCBzZXBhcmF0ZXMgbWV0YWRhdGEgdG9rZW5zLlxuICovXG5mdW5jdGlvbiBpc1J1YnlNZXRhZGF0YVdoaXRlc3BhY2UoY2hhcmFjdGVyKSB7XG4gIHJldHVybiBjaGFyYWN0ZXIgPT0gXCIgXCIgfHwgY2hhcmFjdGVyID09IFwiXFx0XCIgfHwgY2hhcmFjdGVyID09IFwiXFxyXCIgfHwgY2hhcmFjdGVyID09IFwiXFxuXCJcbn1cblxuLyoqXG4gKiBTZWxlY3RzIG9ubHkgdGhlIGNvbnRpZ3VvdXMgY29tbWVudCBibG9jayBpbW1lZGlhdGVseSBiZWZvcmUgYSBkZWZpbml0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFByaXNtIGNvbW1lbnRzLlxuICogQHBhcmFtIHt7bG9jYXRpb246IGltcG9ydChcIkBydWJ5L3ByaXNtXCIpLkxvY2F0aW9ufX0gbm9kZSAtIENvbW1lbnQgb3duZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIkBydWJ5L3ByaXNtL3NyYy9kZXNlcmlhbGl6ZS5qc1wiKS5Db21tZW50W119IEFzc29jaWF0ZWQgY29tbWVudHMuXG4gKi9cbmZ1bmN0aW9uIGFzc29jaWF0ZWRDb21tZW50cyhjb21tZW50cywgbm9kZSwgc291cmNlKSB7XG4gIGNvbnN0IHByZWNlZGluZyA9IGNvbW1lbnRzLmZpbHRlcigoY29tbWVudCkgPT4gY29tbWVudC5sb2NhdGlvbi5zdGFydE9mZnNldCA8IG5vZGUubG9jYXRpb24uc3RhcnRPZmZzZXQpXG4gICAgLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0LmxvY2F0aW9uLnN0YXJ0T2Zmc2V0IC0gcmlnaHQubG9jYXRpb24uc3RhcnRPZmZzZXQpXG4gIGNvbnN0IGFzc29jaWF0ZWQgPSBbXVxuICBsZXQgYm91bmRhcnkgPSBub2RlLmxvY2F0aW9uLnN0YXJ0T2Zmc2V0XG5cbiAgZm9yIChsZXQgaW5kZXggPSBwcmVjZWRpbmcubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGNvbW1lbnQgPSBwcmVjZWRpbmdbaW5kZXhdXG4gICAgY29uc3QgZW5kT2Zmc2V0ID0gY29tbWVudC5sb2NhdGlvbi5zdGFydE9mZnNldCArIGNvbW1lbnQubG9jYXRpb24ubGVuZ3RoXG4gICAgY29uc3QgZ2FwID0gc2xpY2VQcmlzbVNvdXJjZShzb3VyY2UsIGVuZE9mZnNldCwgYm91bmRhcnkpXG5cbiAgICBpZiAoIWlzSW1tZWRpYXRlQ29tbWVudEdhcChnYXApKSBicmVha1xuXG4gICAgYXNzb2NpYXRlZC51bnNoaWZ0KGNvbW1lbnQpXG4gICAgYm91bmRhcnkgPSBjb21tZW50LmxvY2F0aW9uLnN0YXJ0T2Zmc2V0XG4gIH1cblxuICByZXR1cm4gYXNzb2NpYXRlZFxufVxuXG4vKipcbiAqIFJlYWRzIG9uZSBleGFjdCBSdWJ5IGxvY2FsIHR5cGUgY2FycmllciBhbmQgaW1tdXRhYmlsaXR5IG1hcmtlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc20vc3JjL2Rlc2VyaWFsaXplLmpzXCIpLkNvbW1lbnRbXX0gY29tbWVudHMgLSBQcmlzbSBjb21tZW50cy5cbiAqIEBwYXJhbSB7TG9jYWxWYXJpYWJsZVdyaXRlTm9kZX0gbm9kZSAtIExvY2FsIHdyaXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkludGVyZmFjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHt7aW1tdXRhYmxlOiBib29sZWFuLCB0eXBlOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gfCB1bmRlZmluZWR9IE1ldGFkYXRhIHdoZW4gcHJlc2VudC5cbiAqL1xuZnVuY3Rpb24gbG9jYWxNZXRhZGF0YShjb21tZW50cywgbm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGNvbnN0IGFzc29jaWF0ZWQgPSBhc3NvY2lhdGVkQ29tbWVudHMoY29tbWVudHMsIG5vZGUsIHNvdXJjZSlcbiAgY29uc3QgbWV0YWRhdGEgPSBhc3NvY2lhdGVkLm1hcCgoY29tbWVudCkgPT4gY29tbWVudFRva2Vucyhjb21tZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgdHlwZU1ldGFkYXRhID0gbWV0YWRhdGEuZmlsdGVyKChbdG9rZW5dKSA9PiB0b2tlbj8udGV4dCA9PSBcIkB0eXBlXCIpXG4gIGNvbnN0IGltbXV0YWJsZU1ldGFkYXRhID0gbWV0YWRhdGEuZmlsdGVyKChbdG9rZW5dKSA9PiB0b2tlbj8udGV4dCA9PSBcIkBzZW1hbnRpZm9sZC1pbW11dGFibGVcIilcbiAgY29uc3QgcHJvZmlsZU1ldGFkYXRhID0gbWV0YWRhdGEuZmlsdGVyKChbdG9rZW5dKSA9PiB7XG4gICAgcmV0dXJuIHRva2VuPy50ZXh0LnN0YXJ0c1dpdGgoXCJAdHlwZVwiKSB8fCB0b2tlbj8udGV4dC5zdGFydHNXaXRoKFwiQHNlbWFudGlmb2xkLWltbXV0YWJsZVwiKVxuICB9KVxuXG4gIGlmIChwcm9maWxlTWV0YWRhdGEubGVuZ3RoID09IDApIHJldHVybiB1bmRlZmluZWRcblxuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmICh0eXBlTWV0YWRhdGEubGVuZ3RoICE9IDEgfHwgdHlwZU1ldGFkYXRhWzBdLmxlbmd0aCA8IDIgfHxcbiAgICBpbW11dGFibGVNZXRhZGF0YS5sZW5ndGggPiAxIHx8IGltbXV0YWJsZU1ldGFkYXRhLnNvbWUoKHRva2VucykgPT4gdG9rZW5zLmxlbmd0aCAhPSAxKSB8fFxuICAgIHByb2ZpbGVNZXRhZGF0YS5sZW5ndGggIT0gdHlwZU1ldGFkYXRhLmxlbmd0aCArIGltbXV0YWJsZU1ldGFkYXRhLmxlbmd0aCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJtYWxmb3JtZWQgbG9jYWwgdHlwZSBtZXRhZGF0YVwiLCBsb2NhdGlvbilcbiAgfVxuXG4gIGNvbnN0IGRlY2xhcmVkVHlwZSA9IGpvaW5lZENvbW1lbnRUb2tlbih0eXBlTWV0YWRhdGFbMF0sIDEsIHNvdXJjZSlcblxuICByZXR1cm4ge1xuICAgIGltbXV0YWJsZTogaW1tdXRhYmxlTWV0YWRhdGEubGVuZ3RoID09IDEsXG4gICAgdHlwZTogY29udmVydFR5cGUoZGVjbGFyZWRUeXBlLnNvdXJjZVR5cGUsIGBMb2NhbCAnJHtub2RlLm5hbWV9J2AsIGxvY2F0aW9uLCBzb3VyY2UsIGRlY2xhcmVkVHlwZS5sb2NhdGlvbiwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKVxuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIFJ1YnkgbG9jYWwgZGVjbGFyYXRpb24gb3IgYXNzaWdubWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZX0gbm9kZSAtIFByaXNtIG5vZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtL3NyYy9kZXNlcmlhbGl6ZS5qc1wiKS5Db21tZW50W119IGNvbW1lbnRzIC0gUHJpc20gY29tbWVudHMuXG4gKiBAcGFyYW0ge1J1YnlDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Mb2NhbFN0YXRlbWVudH0gU2VtYW50aWMgbG9jYWwgc3RhdGVtZW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0TG9jYWxTdGF0ZW1lbnQobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoIShub2RlIGluc3RhbmNlb2YgTG9jYWxWYXJpYWJsZVdyaXRlTm9kZSkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgbm9kZS5jb25zdHJ1Y3Rvci5uYW1lLCBsb2NhdGlvbilcblxuICBjb25zdCBtZXRhZGF0YSA9IGxvY2FsTWV0YWRhdGEoY29tbWVudHMsIG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG5cbiAgaWYgKG1ldGFkYXRhKSB7XG4gICAgbGV0IGRlY2xhcmVkVHlwZSA9IG1ldGFkYXRhLnR5cGVcblxuICAgIGlmIChtZXRhZGF0YS5pbW11dGFibGUgJiYgZGVjbGFyZWRUeXBlLmtpbmQgPT0gXCJNYXBUeXBlXCIgJiYgY29udGV4dC5vcmRlcmVkTWFwRGVjbGFyYXRpb25zPy5oYXMobm9kZSkgJiZcbiAgICAgIG5vZGUudmFsdWUgaW5zdGFuY2VvZiBIYXNoTm9kZSkge1xuICAgICAgZGVjbGFyZWRUeXBlID0gb3JkZXJlZE1hcFR5cGVGcm9tTWFwKGRlY2xhcmVkVHlwZSwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBpbml0aWFsaXplcjogY29udmVydEV4cHJlc3Npb24obm9kZS52YWx1ZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZGVjbGFyZWRUeXBlKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkxvY2FsRGVjbGFyYXRpb25cIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG11dGFibGU6ICFtZXRhZGF0YS5pbW11dGFibGUsXG4gICAgICBuYW1lOiBub2RlLm5hbWUsXG4gICAgICB0eXBlOiBkZWNsYXJlZFR5cGVcbiAgICB9LCB7bmFtZTogcHJpc21Mb2NhdGlvbihub2RlLm5hbWVMb2MsIGZpbGVuYW1lLCBzb3VyY2UpLCBvcGVyYXRvcjogcHJpc21Mb2NhdGlvbihub2RlLm9wZXJhdG9yTG9jLCBmaWxlbmFtZSwgc291cmNlKX0pXG5cbiAgICBjb250ZXh0LmJpbmRpbmdzLnNldChub2RlLm5hbWUsIGRlY2xhcmVkVHlwZSlcbiAgICByZXR1cm4gc2VtYW50aWNcbiAgfVxuXG4gIGlmICghY29udGV4dC5iaW5kaW5ncy5oYXMobm9kZS5uYW1lKSkge1xuICAgIGlmIChub2RlLnZhbHVlIGluc3RhbmNlb2YgTG9jYWxWYXJpYWJsZVJlYWROb2RlICYmIGNvbnRleHQuYmluZGluZ3MuZ2V0KG5vZGUudmFsdWUubmFtZSk/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwib3JkZXJlZCBtYXAgYWxpYXMgZXNjYXBlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICByZXR1cm4gbWlzc2luZ1R5cGUoXCJydWJ5XCIsIGBMb2NhbCAnJHtub2RlLm5hbWV9J2AsIGxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgdGFyZ2V0TG9jYXRpb24gPSBwcmlzbUxvY2F0aW9uKG5vZGUubmFtZUxvYywgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgdGFyZ2V0ID0gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksIGxvY2F0aW9uOiB0YXJnZXRMb2NhdGlvbiwgbmFtZTogbm9kZS5uYW1lfSwge1xuICAgIG5hbWU6IHRhcmdldExvY2F0aW9uXG4gIH0pXG5cbiAgY29uc3QgYmluZGluZ1R5cGUgPSBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlLm5hbWUpXG4gIGNvbnN0IHNlbWFudGljID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24obm9kZS52YWx1ZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCxcbiAgICAgIGJpbmRpbmdUeXBlPy5raW5kID09IFwiRXJyb3JUeXBlXCIgPyB1bmRlZmluZWQgOiBiaW5kaW5nVHlwZSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQXNzaWdubWVudFN0YXRlbWVudFwiKSxcbiAgICBsb2NhdGlvbixcbiAgICB0YXJnZXRcbiAgfSwge29wZXJhdG9yOiBwcmlzbUxvY2F0aW9uKG5vZGUub3BlcmF0b3JMb2MsIGZpbGVuYW1lLCBzb3VyY2UpfSlcblxuICByZXR1cm4gc2VtYW50aWNcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhoYXVzdGl2ZSBQcmlzbSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGV9IG5vZGUgLSBQcmlzbSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtL3NyYy9kZXNlcmlhbGl6ZS5qc1wiKS5Db21tZW50W119IGNvbW1lbnRzIC0gUHJpc20gY29tbWVudHMuXG4gKiBAcGFyYW0ge1J1YnlDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnR9IFNlbWFudGljIHN0YXRlbWVudC5cbiAqL1xuZnVuY3Rpb24gY29udmVydFN0YXRlbWVudChub2RlLCBjb21tZW50cywgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAobm9kZSBpbnN0YW5jZW9mIFJldHVybk5vZGUpIHtcbiAgICBpZiAoKGNvbnRleHQubG9vcERlcHRoID8/IDApID4gMCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm5vbmxvY2FsIHJldHVybiBmcm9tIGVhY2ggYmxvY2tcIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIHJldHVybiBjb252ZXJ0UmV0dXJuKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIH1cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBJZk5vZGUgJiYgIW5vZGUuaWZLZXl3b3JkTG9jKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwidGVybmFyeSBzdGF0ZW1lbnRcIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIElmTm9kZSB8fCBub2RlIGluc3RhbmNlb2YgVW5sZXNzTm9kZSkgcmV0dXJuIGNvbnZlcnRJZihub2RlLCBjb21tZW50cywgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBXaGlsZU5vZGUpIHJldHVybiBjb252ZXJ0V2hpbGUobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGlmIChub2RlIGluc3RhbmNlb2YgQmVnaW5Ob2RlKSByZXR1cm4gY29udmVydFJ1YnlUcnkobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGlmIChub2RlIGluc3RhbmNlb2YgTG9jYWxWYXJpYWJsZVdyaXRlTm9kZSkgcmV0dXJuIGNvbnZlcnRMb2NhbFN0YXRlbWVudChub2RlLCBjb21tZW50cywgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBJbnN0YW5jZVZhcmlhYmxlV3JpdGVOb2RlKSB7XG4gICAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBmaWVsZCA9IGNvbnRleHQuY3VycmVudENsYXNzPy5maWVsZHMuZmluZCgoY2FuZGlkYXRlKSA9PiBgQCR7Y2FuZGlkYXRlLm5hbWV9YCA9PSBub2RlLm5hbWUpXG5cbiAgICBpZiAoIWZpZWxkIHx8ICFjb250ZXh0LmN1cnJlbnRDbGFzcykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInByaXZhdGUgaW5zdGFuY2UgZmllbGQgb3V0c2lkZSBpdHMgZGVjbGFyaW5nIGNsYXNzXCIsIGxvY2F0aW9uKVxuICAgIGNvbnN0IHJlY2VpdmVyID0gd2l0aFBhcnNlclJhbmdlcyh7Y2xhc3NJZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChjb250ZXh0LmN1cnJlbnRDbGFzcy5pZCksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWNlaXZlckV4cHJlc3Npb25cIiksIGxvY2F0aW9ufSwge3JlY2VpdmVyOiBsb2NhdGlvbn0pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7ZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24obm9kZS52YWx1ZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZmllbGQudHlwZSksXG4gICAgICBmaWVsZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChmaWVsZC5pZCksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50XCIpLCBsb2NhdGlvbiwgcmVjZWl2ZXJ9LFxuICAgIHttZW1iZXI6IGxvY2F0aW9ufSlcbiAgfVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIEJyZWFrTm9kZSB8fCBub2RlIGluc3RhbmNlb2YgTmV4dE5vZGUpIHtcbiAgICBpZiAobm9kZS5hcmd1bWVudHNfKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIGAke25vZGUgaW5zdGFuY2VvZiBCcmVha05vZGUgPyBcImJyZWFrXCIgOiBcIm5leHRcIn0gdmFsdWVgLCBub2RlTG9jYXRpb24obm9kZS5hcmd1bWVudHNfLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBjb25zdCBsb2NhdGlvbiA9IHByaXNtTG9jYXRpb24obm9kZS5rZXl3b3JkTG9jLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtcIkJyZWFrU3RhdGVtZW50XCIgfCBcIkNvbnRpbnVlU3RhdGVtZW50XCJ9ICovIChub2RlIGluc3RhbmNlb2YgQnJlYWtOb2RlID8gXCJCcmVha1N0YXRlbWVudFwiIDogXCJDb250aW51ZVN0YXRlbWVudFwiKSxcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge2tleXdvcmQ6IGxvY2F0aW9ufSlcbiAgfVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlKSB7XG4gICAgaWYgKCFub2RlLnJlY2VpdmVyICYmIG5vZGUubmFtZSA9PSBcInJhaXNlXCIpIHJldHVybiBjb252ZXJ0UnVieVJhaXNlKG5vZGUsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgaWYgKG5vZGUuYmxvY2spIHJldHVybiBjb252ZXJ0Rm9yRWFjaChub2RlLCBjb21tZW50cywgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBpZiAoIW5vZGUucmVjZWl2ZXIgJiYgbm9kZS5uYW1lID09IFwicHV0c1wiICYmICFjb250ZXh0LmZ1bmN0aW9ucy5oYXMoXCJwdXRzXCIpKSByZXR1cm4gY29udmVydFByaW50KG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG5cbiAgICByZXR1cm4ge1xuICAgICAgZXhwcmVzc2lvbjogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DYWxsRXhwcmVzc2lvbn0gKi8gKGNvbnZlcnRFeHByZXNzaW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKSxcbiAgICAgIGtpbmQ6IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgbm9kZS5jb25zdHJ1Y3Rvci5uYW1lLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG59XG5cbi8qKlxuICogQ29udmVydHMgZXhhY3QgYHJhaXNlIERlY2xhcmVkRXJyb3IsIG1lc3NhZ2VgLlxuICogQHBhcmFtIHtDYWxsTm9kZX0gbm9kZSAtIFByaXNtIHJhaXNlIGNhbGwuXG4gKiBAcGFyYW0ge1J1YnlDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udGV4dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmFpc2VTdGF0ZW1lbnQgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZXRocm93U3RhdGVtZW50fSBTZW1hbnRpYyByYWlzZSBvciByZXRocm93LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UnVieVJhaXNlKG5vZGUsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYXJndW1lbnRzXyA9IG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXyA/PyBbXVxuXG4gIGlmIChhcmd1bWVudHNfLmxlbmd0aCA9PSAwICYmIGNvbnRleHQuY3VycmVudENhdGNoQmluZGluZ05vZGUpIHtcbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBiaW5kaW5nOiBjb250ZXh0LmN1cnJlbnRDYXRjaEJpbmRpbmdOb2RlLm5hbWUsXG4gICAgICBiaW5kaW5nTm9kZTogY29udGV4dC5jdXJyZW50Q2F0Y2hCaW5kaW5nTm9kZSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJldGhyb3dTdGF0ZW1lbnRcIiksXG4gICAgICBsb2NhdGlvblxuICAgIH0sIHtrZXl3b3JkOiBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYyA/PyBub2RlLmxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cbiAgaWYgKGFyZ3VtZW50c18ubGVuZ3RoID09IDEgJiYgYXJndW1lbnRzX1swXSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVSZWFkTm9kZSAmJlxuICAgIGNvbnRleHQuY2F0Y2hCaW5kaW5nTmFtZXM/Lmhhcyhhcmd1bWVudHNfWzBdLm5hbWUpICYmIGNvbnRleHQuYmluZGluZ3MuZ2V0KGFyZ3VtZW50c19bMF0ubmFtZSk/LmtpbmQgPT0gXCJFcnJvclR5cGVcIikge1xuICAgIGNvbnN0IGJpbmRpbmdOb2RlID0gY29udGV4dC5jYXRjaEJpbmRpbmdOb2Rlcz8uZ2V0KGFyZ3VtZW50c19bMF0ubmFtZSlcblxuICAgIGlmICghYmluZGluZ05vZGUpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJyYWlzZSBvZiBhIGNhdGNoIGJpbmRpbmcgd2l0aG91dCBhbiBleGFjdCBoYW5kbGVyIGJpbmRpbmdcIiwgbG9jYXRpb24pXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgYmluZGluZzogYXJndW1lbnRzX1swXS5uYW1lLFxuICAgICAgYmluZGluZ05vZGUsXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZXRocm93U3RhdGVtZW50XCIpLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7a2V5d29yZDogcHJpc21Mb2NhdGlvbihub2RlLm1lc3NhZ2VMb2MgPz8gbm9kZS5sb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG4gIGlmIChub2RlLmJsb2NrIHx8IG5vZGUuY2FsbE9wZXJhdG9yTG9jIHx8IGFyZ3VtZW50c18ubGVuZ3RoICE9IDIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwicmFpc2Ugb3RoZXIgdGhhbiBleGFjdCBkZWNsYXJlZCBlcnJvciBhbmQgbWVzc2FnZVwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBlcnJvck5vZGUgPSBhcmd1bWVudHNfWzBdXG5cbiAgaWYgKCEoZXJyb3JOb2RlIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSkgJiYgIShlcnJvck5vZGUgaW5zdGFuY2VvZiBDb25zdGFudFBhdGhOb2RlKSB8fFxuICAgICFjb250ZXh0LmVycm9yTmFtZXMuaGFzKGNvbnN0YW50UGF0aE5hbWUoZXJyb3JOb2RlKSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwicmFpc2Ugb3RoZXIgdGhhbiBleGFjdCBkZWNsYXJlZCBlcnJvciBhbmQgbWVzc2FnZVwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBkZWNsYXJhdGlvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gKi8gKGNvbnRleHQuZXJyb3JOYW1lcy5nZXQoY29uc3RhbnRQYXRoTmFtZShlcnJvck5vZGUpKSlcbiAgY29uc3QgdHlwZUxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGVycm9yTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgZXJyb3I6IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZXJyb3I6IHdpdGhQYXJzZXJSYW5nZXMoe2RlY2xhcmF0aW9uSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvclR5cGVcIil9LCB7dHlwZTogdHlwZUxvY2F0aW9ufSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvckNvbnN0cnVjdGlvblwiKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgbWVzc2FnZTogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnRzX1sxXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9LCB7dHlwZTogdHlwZUxvY2F0aW9ufSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmFpc2VTdGF0ZW1lbnRcIiksXG4gICAgbG9jYXRpb25cbiAgfSwge2tleXdvcmQ6IHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jID8/IG5vZGUubG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgUHJpc20gZW5zdXJlIGNsYXVzZSBib2R5LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5FbnN1cmVOb2RlfSBub2RlIC0gUHJpc20gZW5zdXJlIGNsYXVzZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc20vc3JjL2Rlc2VyaWFsaXplLmpzXCIpLkNvbW1lbnRbXX0gY29tbWVudHMgLSBQcmlzbSBjb21tZW50cy5cbiAqIEBwYXJhbSB7UnVieUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb250ZXh0LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gU2VtYW50aWMgZmluYWxseSBibG9jay5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJ1YnlFbnN1cmUobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgLy8gQSBjb21wbGV0aW9uIGJsb2NrIGdldHMgaXRzIG93biBiaW5kaW5nIHNjb3BlLCBsaWtlIGV2ZXJ5IG90aGVyIGJsb2NrIGluIGNvbnZlcnRSdWJ5VHJ5OiBhIGxvY2FsXG4gIC8vIGRlY2xhcmF0aW9uIGluc2lkZSBgZW5zdXJlYCBtdXN0IG5vdCBsZWFrIGJhY2sgaW50byB0aGUgZW5jbG9zaW5nIGNvbnZlcnNpb24gY29udGV4dC5cbiAgcmV0dXJuIGNvbnZlcnRCbG9jayhub2RlLnN0YXRlbWVudHMgPz8gbnVsbCwgY29tbWVudHMsIHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKX0sIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBiZWdpbiBibG9jayB3aXRoIG9yZGVyZWQgZXhhY3QgdHlwZWQgcmVzY3VlcyBhbmQgYW4gb3B0aW9uYWwgZW5zdXJlIGNvbXBsZXRpb24gYmxvY2suXG4gKiBAcGFyYW0ge0JlZ2luTm9kZX0gbm9kZSAtIFByaXNtIGJlZ2luIG5vZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtL3NyYy9kZXNlcmlhbGl6ZS5qc1wiKS5Db21tZW50W119IGNvbW1lbnRzIC0gUGFyc2VyLW93bmVkIGNvbW1lbnRzLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlRyeVN0YXRlbWVudH0gU2VtYW50aWMgZXhhY3QgaGFuZGxlciBjaGFpbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJ1YnlUcnkobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobm9kZS5lbHNlQ2xhdXNlKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiYmVnaW4gZWxzZSBjbGF1c2VcIiwgbm9kZUxvY2F0aW9uKG5vZGUuZWxzZUNsYXVzZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2F0Y2hIYW5kbGVyW119ICovXG4gIGNvbnN0IGhhbmRsZXJzID0gW11cbiAgY29uc3Qgc2VlbkhhbmRsZXJOYW1lcyA9IG5ldyBTZXQoY29udGV4dC5jYXRjaEJpbmRpbmdOYW1lcyA/PyBbXSlcbiAgbGV0IGhhbmRsZXIgPSBub2RlLnJlc2N1ZUNsYXVzZVxuXG4gIGlmICghKGhhbmRsZXIgaW5zdGFuY2VvZiBSZXNjdWVOb2RlKSkge1xuICAgIGlmIChub2RlLmVuc3VyZUNsYXVzZSkge1xuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBib2R5OiBjb252ZXJ0QmxvY2sobm9kZS5zdGF0ZW1lbnRzLCBjb21tZW50cywgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSwgbG9jYXRpb24pLFxuICAgICAgICBoYW5kbGVycyxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHJ5U3RhdGVtZW50XCIpLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgZmluYWxseUJvZHk6IGNvbnZlcnRSdWJ5RW5zdXJlKG5vZGUuZW5zdXJlQ2xhdXNlLCBjb21tZW50cywgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIH0sIHtlbnN1cmU6IG5vZGVMb2NhdGlvbihub2RlLmVuc3VyZUNsYXVzZSwgZmlsZW5hbWUsIHNvdXJjZSksIHRyeTogbG9jYXRpb259KVxuICAgIH1cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiYmVnaW4gd2l0aG91dCByZXNjdWUgb3IgZW5zdXJlXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IGJvZHlDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpfVxuICB3aGlsZSAoaGFuZGxlciBpbnN0YW5jZW9mIFJlc2N1ZU5vZGUpIHtcbiAgICBpZiAoaGFuZGxlci5leGNlcHRpb25zLmxlbmd0aCAhPSAxIHx8XG4gICAgICAhKGhhbmRsZXIuZXhjZXB0aW9uc1swXSBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUpICYmICEoaGFuZGxlci5leGNlcHRpb25zWzBdIGluc3RhbmNlb2YgQ29uc3RhbnRQYXRoTm9kZSkgfHxcbiAgICAgICFjb250ZXh0LmVycm9yTmFtZXMuaGFzKGNvbnN0YW50UGF0aE5hbWUoaGFuZGxlci5leGNlcHRpb25zWzBdKSkgfHwgIShoYW5kbGVyLnJlZmVyZW5jZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVUYXJnZXROb2RlKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInJlc2N1ZSB3aXRob3V0IG9uZSBleGFjdCB0eXBlZCBleGNlcHRpb24gYW5kIGJpbmRpbmdcIiwgbm9kZUxvY2F0aW9uKGhhbmRsZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBpZiAoc2VlbkhhbmRsZXJOYW1lcy5oYXMoaGFuZGxlci5yZWZlcmVuY2UubmFtZSkpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgYHJlc2N1ZSBiaW5kaW5nICcke2hhbmRsZXIucmVmZXJlbmNlLm5hbWV9JyBzaGFkb3dzIGFuIG91dGVyIGhhbmRsZXIgYmluZGluZ2AsXG4gICAgICAgIG5vZGVMb2NhdGlvbihoYW5kbGVyLnJlZmVyZW5jZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIHNlZW5IYW5kbGVyTmFtZXMuYWRkKGhhbmRsZXIucmVmZXJlbmNlLm5hbWUpXG4gICAgY29uc3QgZXJyb3JOb2RlID0gaGFuZGxlci5leGNlcHRpb25zWzBdXG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259ICovIChjb250ZXh0LmVycm9yTmFtZXMuZ2V0KGNvbnN0YW50UGF0aE5hbWUoZXJyb3JOb2RlKSkpXG4gICAgY29uc3QgY2F1Z2h0TG9jYXRpb24gPSBub2RlTG9jYXRpb24oZXJyb3JOb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGNhdGNoVHlwZSA9IHdpdGhQYXJzZXJSYW5nZXMoe2RlY2xhcmF0aW9uSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvclR5cGVcIil9LCB7XG4gICAgICB0eXBlOiBjYXVnaHRMb2NhdGlvblxuICAgIH0pXG4gICAgY29uc3QgY2F0Y2hDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpLCBjYXRjaEJpbmRpbmdOYW1lczogbmV3IFNldChzZWVuSGFuZGxlck5hbWVzKSxcbiAgICAgIGNhdGNoQmluZGluZ05vZGVzOiBuZXcgTWFwKGNvbnRleHQuY2F0Y2hCaW5kaW5nTm9kZXMpfVxuXG4gICAgY2F0Y2hDb250ZXh0LmJpbmRpbmdzLnNldChoYW5kbGVyLnJlZmVyZW5jZS5uYW1lLCBjYXRjaFR5cGUpXG4gICAgY29uc3QgY2F0Y2hCaW5kaW5nTm9kZSA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2F0Y2hCaW5kaW5nXCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihoYW5kbGVyLnJlZmVyZW5jZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBtdXRhYmxlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpLFxuICAgICAgbmFtZTogaGFuZGxlci5yZWZlcmVuY2UubmFtZSxcbiAgICAgIHR5cGU6IGNhdGNoVHlwZVxuICAgIH0sIHtuYW1lOiBub2RlTG9jYXRpb24oaGFuZGxlci5yZWZlcmVuY2UsIGZpbGVuYW1lLCBzb3VyY2UpfSlcblxuICAgIGNhdGNoQ29udGV4dC5jYXRjaEJpbmRpbmdOb2Rlcy5zZXQoaGFuZGxlci5yZWZlcmVuY2UubmFtZSwgY2F0Y2hCaW5kaW5nTm9kZSlcbiAgICBjYXRjaENvbnRleHQuY3VycmVudENhdGNoQmluZGluZ05vZGUgPSBjYXRjaEJpbmRpbmdOb2RlXG4gICAgaGFuZGxlcnMucHVzaCh3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGNhdGNoQmluZGluZzogY2F0Y2hCaW5kaW5nTm9kZSxcbiAgICAgIGNhdGNoQm9keTogY29udmVydEJsb2NrKGhhbmRsZXIuc3RhdGVtZW50cywgY29tbWVudHMsIGNhdGNoQ29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSwgbm9kZUxvY2F0aW9uKGhhbmRsZXIsIGZpbGVuYW1lLCBzb3VyY2UpKSxcbiAgICAgIGNhdGNoVHlwZSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhdGNoSGFuZGxlclwiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oaGFuZGxlciwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9LCB7Y2F0Y2g6IG5vZGVMb2NhdGlvbihoYW5kbGVyLCBmaWxlbmFtZSwgc291cmNlKX0pKVxuICAgIGhhbmRsZXIgPSBoYW5kbGVyLnN1YnNlcXVlbnRcbiAgfVxuICBjb25zdCBzZW1hbnRpYyA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHJ5U3RhdGVtZW50fSAqLyAod2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKG5vZGUuc3RhdGVtZW50cywgY29tbWVudHMsIGJvZHlDb250ZXh0LCBmaWxlbmFtZSwgc291cmNlLCBsb2NhdGlvbiksXG4gICAgaGFuZGxlcnMsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHJ5U3RhdGVtZW50XCIpLFxuICAgIGxvY2F0aW9uXG4gIH0sIHt0cnk6IGxvY2F0aW9ufSkpXG5cbiAgaWYgKG5vZGUuZW5zdXJlQ2xhdXNlKSB7XG4gICAgc2VtYW50aWMuZmluYWxseUJvZHkgPSBjb252ZXJ0UnVieUVuc3VyZShub2RlLmVuc3VyZUNsYXVzZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgc2V0UGFyc2VyUmFuZ2VzKHNlbWFudGljLCB7ZW5zdXJlOiBub2RlTG9jYXRpb24obm9kZS5lbnN1cmVDbGF1c2UsIGZpbGVuYW1lLCBzb3VyY2UpLCB0cnk6IGxvY2F0aW9ufSlcbiAgfVxuICByZXR1cm4gc2VtYW50aWNcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBleGFjdCByZXNvbHZlZC1saXN0IGAuZWFjaCBkbyB8dmFsdWV8IC4uLiBlbmRgIHN5bnRheC5cbiAqIEBwYXJhbSB7Q2FsbE5vZGV9IG5vZGUgLSBQcmlzbSBjYWxsIHdpdGggYSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc20vc3JjL2Rlc2VyaWFsaXplLmpzXCIpLkNvbW1lbnRbXX0gY29tbWVudHMgLSBQcmlzbSBjb21tZW50cy5cbiAqIEBwYXJhbSB7UnVieUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb250ZXh0LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRm9yRWFjaE1hcFN0YXRlbWVudH0gU2VtYW50aWMgbG9vcC5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZvckVhY2gobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYmxvY2sgPSBub2RlLmJsb2NrXG5cbiAgaWYgKCEoYmxvY2sgaW5zdGFuY2VvZiBCbG9ja05vZGUpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiY2FsbCBibG9ja1wiLCBibG9jayA/IG5vZGVMb2NhdGlvbihibG9jaywgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvbilcbiAgaWYgKCFub2RlLnJlY2VpdmVyIHx8IG5vZGUubmFtZSAhPSBcImVhY2hcIiB8fCBub2RlLmFyZ3VtZW50c18gfHwgIW5vZGUuY2FsbE9wZXJhdG9yTG9jIHx8ICFub2RlLm1lc3NhZ2VMb2MpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiYXJiaXRyYXJ5IGNhbGwgYmxvY2tcIiwgbm9kZUxvY2F0aW9uKGJsb2NrLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBpZiAoc2xpY2VQcmlzbVNvdXJjZShzb3VyY2UsIGJsb2NrLm9wZW5pbmdMb2Muc3RhcnRPZmZzZXQsIGJsb2NrLm9wZW5pbmdMb2Muc3RhcnRPZmZzZXQgKyBibG9jay5vcGVuaW5nTG9jLmxlbmd0aCkgIT0gXCJkb1wiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm5vbi1kbyBlYWNoIGJsb2NrXCIsIHByaXNtTG9jYXRpb24oYmxvY2sub3BlbmluZ0xvYywgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgZXhjbHVkZWQgPSBmaW5kUnVieURlc2NlbmRhbnQoYmxvY2suYm9keSwgKGNhbmRpZGF0ZSkgPT5cbiAgICBjYW5kaWRhdGUgaW5zdGFuY2VvZiBSZWRvTm9kZSB8fCBjYW5kaWRhdGUgaW5zdGFuY2VvZiBSZXRyeU5vZGUgfHwgY2FuZGlkYXRlIGluc3RhbmNlb2YgUmV0dXJuTm9kZSlcblxuICBpZiAoZXhjbHVkZWQpIHtcbiAgICBjb25zdCBkZXRhaWwgPSBleGNsdWRlZCBpbnN0YW5jZW9mIFJldHVybk5vZGUgPyBcIm5vbmxvY2FsIHJldHVybiBmcm9tIGVhY2ggYmxvY2tcIiA6XG4gICAgICBleGNsdWRlZCBpbnN0YW5jZW9mIFJlZG9Ob2RlID8gXCJyZWRvIGluIGVhY2ggYmxvY2tcIiA6IFwicmV0cnkgaW4gZWFjaCBibG9ja1wiXG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIGRldGFpbCwgbm9kZUxvY2F0aW9uKGV4Y2x1ZGVkLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBpZiAoIShibG9jay5wYXJhbWV0ZXJzIGluc3RhbmNlb2YgQmxvY2tQYXJhbWV0ZXJzTm9kZSkgfHwgYmxvY2sucGFyYW1ldGVycy5sb2NhbHMubGVuZ3RoID4gMCB8fFxuICAgICFibG9jay5wYXJhbWV0ZXJzLnBhcmFtZXRlcnMpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiZWFjaCBibG9jayBwYXJhbWV0ZXJzXCIsIGJsb2NrLnBhcmFtZXRlcnNcbiAgICAgID8gbm9kZUxvY2F0aW9uKGJsb2NrLnBhcmFtZXRlcnMsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICA6IG5vZGVMb2NhdGlvbihibG9jaywgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgcGFyYW1ldGVycyA9IGJsb2NrLnBhcmFtZXRlcnMucGFyYW1ldGVyc1xuICBjb25zdCBzdXBwb3J0ZWRSZXF1aXJlZHMgPSBwYXJhbWV0ZXJzLnJlcXVpcmVkcy5sZW5ndGggPT0gMSB8fCBwYXJhbWV0ZXJzLnJlcXVpcmVkcy5sZW5ndGggPT0gMlxuICBjb25zdCB1bnN1cHBvcnRlZFBhcmFtZXRlciA9ICFzdXBwb3J0ZWRSZXF1aXJlZHNcbiAgICA/IHBhcmFtZXRlcnMucmVxdWlyZWRzWzJdID8/IHBhcmFtZXRlcnMucmVxdWlyZWRzWzFdID8/IHBhcmFtZXRlcnMucmVxdWlyZWRzWzBdID8/IGJsb2NrLnBhcmFtZXRlcnNcbiAgICA6IHBhcmFtZXRlcnMucmVxdWlyZWRzLmV2ZXJ5KChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlciBpbnN0YW5jZW9mIFJlcXVpcmVkUGFyYW1ldGVyTm9kZSkgJiZcbiAgICAgICAgcGFyYW1ldGVycy5vcHRpb25hbHMubGVuZ3RoID09IDAgJiYgIXBhcmFtZXRlcnMucmVzdCAmJlxuICAgICAgICBwYXJhbWV0ZXJzLnBvc3RzLmxlbmd0aCA9PSAwICYmIHBhcmFtZXRlcnMua2V5d29yZHMubGVuZ3RoID09IDAgJiYgIXBhcmFtZXRlcnMua2V5d29yZFJlc3QgJiYgIXBhcmFtZXRlcnMuYmxvY2tcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IHBhcmFtZXRlcnMub3B0aW9uYWxzWzBdID8/IHBhcmFtZXRlcnMucmVzdCA/PyBwYXJhbWV0ZXJzLnBvc3RzWzBdID8/IHBhcmFtZXRlcnMua2V5d29yZHNbMF0gPz9cbiAgICAgICAgcGFyYW1ldGVycy5rZXl3b3JkUmVzdCA/PyBwYXJhbWV0ZXJzLmJsb2NrID8/IHBhcmFtZXRlcnMucmVxdWlyZWRzWzBdXG5cbiAgaWYgKHVuc3VwcG9ydGVkUGFyYW1ldGVyKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwiZWFjaCBibG9jayBwYXJhbWV0ZXIgYXJpdHkgb3Igc2hhcGVcIiwgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkUGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgY29sbGVjdGlvblR5cGUgPSBpdGVyYXRpb25PcGVyYW5kVHlwZShrbm93bkV4cHJlc3Npb25UeXBlKG5vZGUucmVjZWl2ZXIsIGNvbnRleHQpKVxuXG4gIGlmIChwYXJhbWV0ZXJzLnJlcXVpcmVkcy5sZW5ndGggPT0gMikge1xuICAgIGlmIChjb2xsZWN0aW9uVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInVub3JkZXJlZCBtYXAgaXRlcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgaWYgKCFjb2xsZWN0aW9uVHlwZSB8fCBjb2xsZWN0aW9uVHlwZS5raW5kICE9IFwiT3JkZXJlZE1hcFR5cGVcIikge1xuICAgICAgcmV0dXJuIG1pc3NpbmdUeXBlKFwicnVieVwiLCBcIk9yZGVyZWQgbWFwIGl0ZXJhdGlvbiBjb2xsZWN0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLnJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgW2tleVBhcmFtZXRlciwgdmFsdWVQYXJhbWV0ZXJdID0gLyoqIEB0eXBlIHtbUmVxdWlyZWRQYXJhbWV0ZXJOb2RlLCBSZXF1aXJlZFBhcmFtZXRlck5vZGVdfSAqLyAocGFyYW1ldGVycy5yZXF1aXJlZHMpXG4gICAgY29uc3Qga2V5TG9jYXRpb24gPSBub2RlTG9jYXRpb24oa2V5UGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHZhbHVlTG9jYXRpb24gPSBub2RlTG9jYXRpb24odmFsdWVQYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3Qga2V5VHlwZSA9IGl0ZXJhdGlvbkJpbmRpbmdUeXBlKGNvbGxlY3Rpb25UeXBlLmtleVR5cGUsIGtleUxvY2F0aW9uKVxuICAgIGNvbnN0IHZhbHVlVHlwZSA9IGl0ZXJhdGlvbkJpbmRpbmdUeXBlKGNvbGxlY3Rpb25UeXBlLnZhbHVlVHlwZSwgdmFsdWVMb2NhdGlvbilcbiAgICBjb25zdCBrZXlCaW5kaW5nID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJWYWx1ZUJpbmRpbmdcIiksIGxvY2F0aW9uOiBrZXlMb2NhdGlvbiwgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICAgIG5hbWU6IGtleVBhcmFtZXRlci5uYW1lLCB0eXBlOiBrZXlUeXBlXG4gICAgfSwge25hbWU6IGtleUxvY2F0aW9ufSlcbiAgICBjb25zdCB2YWx1ZUJpbmRpbmcgPSB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlZhbHVlQmluZGluZ1wiKSwgbG9jYXRpb246IHZhbHVlTG9jYXRpb24sIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgICBuYW1lOiB2YWx1ZVBhcmFtZXRlci5uYW1lLCB0eXBlOiB2YWx1ZVR5cGVcbiAgICB9LCB7bmFtZTogdmFsdWVMb2NhdGlvbn0pXG4gICAgY29uc3QgYm9keUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGxvb3BEZXB0aDogKGNvbnRleHQubG9vcERlcHRoID8/IDApICsgMX1cblxuICAgIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldChrZXlQYXJhbWV0ZXIubmFtZSwga2V5VHlwZSlcbiAgICBib2R5Q29udGV4dC5iaW5kaW5ncy5zZXQodmFsdWVQYXJhbWV0ZXIubmFtZSwgdmFsdWVUeXBlKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGJvZHk6IGNvbnZlcnRCbG9jayhibG9jay5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgPyBibG9jay5ib2R5IDogbnVsbCwgY29tbWVudHMsIGJvZHlDb250ZXh0LCBmaWxlbmFtZSxcbiAgICAgICAgc291cmNlLCBub2RlTG9jYXRpb24oYmxvY2ssIGZpbGVuYW1lLCBzb3VyY2UpKSxcbiAgICAgIGtleUJpbmRpbmcsXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBtYXA6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgdmFsdWVCaW5kaW5nXG4gICAgfSwge29wZXJhdG9yOiBwcmlzbUxvY2F0aW9uKG5vZGUubWVzc2FnZUxvYywgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG4gIGNvbnN0IHBhcmFtZXRlciA9IC8qKiBAdHlwZSB7UmVxdWlyZWRQYXJhbWV0ZXJOb2RlfSAqLyAocGFyYW1ldGVycy5yZXF1aXJlZHNbMF0pXG5cbiAgaWYgKGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiTWFwVHlwZVwiIHx8IGNvbGxlY3Rpb25UeXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJtYXAgaXRlcmF0aW9uIHdpdGhvdXQga2V5L3ZhbHVlIHBhaXIgYmluZGluZ1wiLCBub2RlTG9jYXRpb24obm9kZS5yZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgaWYgKCFjb2xsZWN0aW9uVHlwZSB8fCBjb2xsZWN0aW9uVHlwZS5raW5kICE9IFwiTGlzdFR5cGVcIikge1xuICAgIHJldHVybiBtaXNzaW5nVHlwZShcInJ1YnlcIiwgXCJJdGVyYXRpb24gY29sbGVjdGlvblwiLCBub2RlTG9jYXRpb24obm9kZS5yZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgYmluZGluZ0xvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgaW5mZXJyZWRUeXBlID0gY29sbGVjdGlvblR5cGUuZWxlbWVudFR5cGVcbiAgY29uc3QgYmluZGluZ1R5cGUgPSBpdGVyYXRpb25CaW5kaW5nVHlwZShpbmZlcnJlZFR5cGUsIGJpbmRpbmdMb2NhdGlvbilcbiAgY29uc3QgdmFsdWVCaW5kaW5nID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVmFsdWVCaW5kaW5nXCIpLFxuICAgIGxvY2F0aW9uOiBiaW5kaW5nTG9jYXRpb24sXG4gICAgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICBuYW1lOiBwYXJhbWV0ZXIubmFtZSxcbiAgICB0eXBlOiBiaW5kaW5nVHlwZVxuICB9LCB7bmFtZTogYmluZGluZ0xvY2F0aW9ufSlcbiAgY29uc3QgYm9keUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGxvb3BEZXB0aDogKGNvbnRleHQubG9vcERlcHRoID8/IDApICsgMX1cblxuICBib2R5Q29udGV4dC5iaW5kaW5ncy5zZXQocGFyYW1ldGVyLm5hbWUsIGJpbmRpbmdUeXBlKVxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKFxuICAgICAgYmxvY2suYm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlID8gYmxvY2suYm9keSA6IG51bGwsXG4gICAgICBjb21tZW50cyxcbiAgICAgIGJvZHlDb250ZXh0LFxuICAgICAgZmlsZW5hbWUsXG4gICAgICBzb3VyY2UsXG4gICAgICBub2RlTG9jYXRpb24oYmxvY2ssIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgKSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJGb3JFYWNoU3RhdGVtZW50XCIpLFxuICAgIGxpc3Q6IGNvbnZlcnRFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgIGxvY2F0aW9uLFxuICAgIHZhbHVlQmluZGluZ1xuICB9LCB7b3BlcmF0b3I6IHByaXNtTG9jYXRpb24obm9kZS5tZXNzYWdlTG9jLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogRmluZHMgdGhlIGZpcnN0IHBhcnNlciBkZXNjZW5kYW50IG1hdGNoaW5nIG9uZSBleGNsdWRlZCBibG9jayBjb25zdHJ1Y3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGUgfCBudWxsfSBub2RlIC0gUGFyc2VyIHN1YnRyZWUuXG4gKiBAcGFyYW0geyhub2RlOiBpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlKSA9PiBib29sZWFufSBwcmVkaWNhdGUgLSBFeGNsdXNpb24gcHJlZGljYXRlLlxuICogQHJldHVybnMge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGUgfCB1bmRlZmluZWR9IEZpcnN0IHNvdXJjZS1vcmRlcmVkIG1hdGNoLlxuICovXG5mdW5jdGlvbiBmaW5kUnVieURlc2NlbmRhbnQobm9kZSwgcHJlZGljYXRlKSB7XG4gIGlmICghbm9kZSkgcmV0dXJuIHVuZGVmaW5lZFxuICBpZiAocHJlZGljYXRlKG5vZGUpKSByZXR1cm4gbm9kZVxuICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY29tcGFjdENoaWxkTm9kZXMoKSkge1xuICAgIGNvbnN0IG1hdGNoID0gZmluZFJ1YnlEZXNjZW5kYW50KGNoaWxkLCBwcmVkaWNhdGUpXG5cbiAgICBpZiAobWF0Y2gpIHJldHVybiBtYXRjaFxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgb3JkZXJlZCBQcmlzbSBzdGF0ZW1lbnQgbGlzdC5cbiAqIEBwYXJhbSB7U3RhdGVtZW50c05vZGUgfCBudWxsfSBub2RlIC0gUHJpc20gc3RhdGVtZW50cywgb3IgYW4gZW1wdHkgc291cmNlIGJsb2NrLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFByaXNtIGNvbW1lbnRzLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBmYWxsYmFja0xvY2F0aW9uIC0gRW1wdHkgYmxvY2sgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IFNlbWFudGljIGJsb2NrLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0QmxvY2sobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UsIGZhbGxiYWNrTG9jYXRpb24pIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiBcIkJsb2NrXCIsXG4gICAgbG9jYXRpb246IG5vZGUgPyBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkgOiBmYWxsYmFja0xvY2F0aW9uLFxuICAgIHN0YXRlbWVudHM6IG5vZGUgPyBub2RlLmJvZHkubWFwKChzdGF0ZW1lbnQpID0+IGNvbnZlcnRTdGF0ZW1lbnQoc3RhdGVtZW50LCBjb21tZW50cywgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSkpIDogW11cbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyB0aGF0IGEgY29tbWVudCBhbmQgaXRzIG93bmVyIGFyZSBzZXBhcmF0ZWQgYnkgYXQgbW9zdCBvbmUgbmV3bGluZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBnYXAgLSBTb3VyY2UgYmV0d2VlbiB0aGUgY29tbWVudCBhbmQgZm9sbG93aW5nIGl0ZW0uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgZ2FwIGlzIGltbWVkaWF0ZSB3aGl0ZXNwYWNlLlxuICovXG5mdW5jdGlvbiBpc0ltbWVkaWF0ZUNvbW1lbnRHYXAoZ2FwKSB7XG4gIGxldCBuZXdsaW5lcyA9IDBcblxuICBmb3IgKGNvbnN0IGNoYXJhY3RlciBvZiBnYXApIHtcbiAgICBpZiAoY2hhcmFjdGVyID09IFwiXFxuXCIpIHtcbiAgICAgIG5ld2xpbmVzKytcbiAgICB9IGVsc2UgaWYgKGNoYXJhY3RlciAhPSBcIiBcIiAmJiBjaGFyYWN0ZXIgIT0gXCJcXHRcIiAmJiBjaGFyYWN0ZXIgIT0gXCJcXHJcIikge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld2xpbmVzIDw9IDFcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhbiBleGFjdCBzdXBwb3J0ZWQgUnVieSB2YWx1ZS10eXBlIHNwZWxsaW5nLlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IHNvdXJjZVR5cGUgLSBSdWJ5IHR5cGUgY29tbWVudCB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IFt0eXBlTG9jYXRpb25dIC0gRXhhY3QgdHlwZSBjb21tZW50IHRva2VuIGxvY2F0aW9uLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSW50ZXJmYWNlRGVjbGFyYXRpb24+fSBbcmVjb3JkTmFtZXNdIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXI+fSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IFNlbWFudGljIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUeXBlKHNvdXJjZVR5cGUsIHN1YmplY3QsIGxvY2F0aW9uLCBzb3VyY2UsIHR5cGVMb2NhdGlvbiA9IGxvY2F0aW9uLCByZWNvcmROYW1lcyA9IG5ldyBNYXAoKSwgdHlwZVBhcmFtZXRlcnMgPSBuZXcgTWFwKCkpIHtcbiAgcmV0dXJuIGRvY3VtZW50ZWRWYWx1ZVR5cGUoe2xhbmd1YWdlOiBcInJ1YnlcIiwgbG9jYXRpb246IHR5cGVMb2NhdGlvbiwgb3duZXJMb2NhdGlvbjogbG9jYXRpb24sIHJlY29yZHM6IHJlY29yZE5hbWVzLCBzb3VyY2UsIHNvdXJjZVR5cGUsIHN1YmplY3QsIHR5cGVQYXJhbWV0ZXJzfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIFJ1YnkgZGVmaW5pdGlvbiBzaWduYXR1cmUgYmVmb3JlIGJvZHkgZXhwcmVzc2lvbnMuXG4gKiBAcGFyYW0ge0RlZk5vZGV9IG5vZGUgLSBQcmlzbSBkZWZpbml0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFByaXNtIGNvbW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkludGVyZmFjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBvd25lcklkIC0gU3RhYmxlIGZ1bmN0aW9uIGlkZW50aXR5LlxuICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dCdWlsdGluT3V0cHV0XSAtIFdoZXRoZXIgY29tcGlsZXIgYXV0aG9yaXR5IGFkbWl0cyB0aGUgZXhhY3Qgb3V0cHV0IGZhY2FkZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtSdWJ5RnVuY3Rpb25TaWduYXR1cmV9IFNlbWFudGljIHNpZ25hdHVyZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZ1bmN0aW9uU2lnbmF0dXJlKG5vZGUsIGNvbW1lbnRzLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgb3duZXJJZCwgYWxsb3dCdWlsdGluT3V0cHV0ID0gZmFsc2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgcGFyYW1ldGVyTGlzdCA9IG5vZGUucGFyYW1ldGVyc1xuXG4gIGlmIChub2RlLnJlY2VpdmVyKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwic2luZ2xldG9uIG1ldGhvZFwiLCBub2RlTG9jYXRpb24obm9kZS5yZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IG5hbWVMb2NhdGlvbiA9IHByaXNtTG9jYXRpb24obm9kZS5uYW1lTG9jLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJwdXRzXCIgJiYgIWFsbG93QnVpbHRpbk91dHB1dCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJmdW5jdGlvbiAncHV0cycgY2FwdHVyZXMgYnVpbHQtaW4gcHJpbnRpbmdcIiwgbmFtZUxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IHVuc3VwcG9ydGVkUGFyYW1ldGVyID0gcGFyYW1ldGVyTGlzdCAmJiBbXG4gICAgcGFyYW1ldGVyTGlzdC5vcHRpb25hbHNbMF0sIHBhcmFtZXRlckxpc3QucmVzdCwgcGFyYW1ldGVyTGlzdC5wb3N0c1swXSwgcGFyYW1ldGVyTGlzdC5rZXl3b3Jkc1swXSxcbiAgICBwYXJhbWV0ZXJMaXN0LmtleXdvcmRSZXN0LCBwYXJhbWV0ZXJMaXN0LmJsb2NrLFxuICAgIHBhcmFtZXRlckxpc3QucmVxdWlyZWRzLmZpbmQoKHBhcmFtZXRlcikgPT4gIShwYXJhbWV0ZXIgaW5zdGFuY2VvZiBSZXF1aXJlZFBhcmFtZXRlck5vZGUpKVxuICBdLmZpbmQoQm9vbGVhbilcblxuICBpZiAodW5zdXBwb3J0ZWRQYXJhbWV0ZXIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwicGFyYW1ldGVyc1wiLCBub2RlTG9jYXRpb24odW5zdXBwb3J0ZWRQYXJhbWV0ZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgY29uc3QgZGVjbGFyZWRUeXBlcyA9IHR5cGVDb21tZW50cyhjb21tZW50cywgbm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgb3duZXJJZClcbiAgY29uc3QgdHlwZVBhcmFtZXRlck5hbWVzID0gbmV3IE1hcCgoZGVjbGFyZWRUeXBlcy50eXBlUGFyYW1ldGVycyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyXSkpXG4gIGNvbnN0IHJlcXVpcmVkUGFyYW1ldGVycyA9IHBhcmFtZXRlckxpc3Q/LnJlcXVpcmVkcyA/PyBbXVxuICBjb25zdCBleHRyYUFubm90YXRpb24gPSBbLi4uZGVjbGFyZWRUeXBlcy5wYXJhbWV0ZXJzLmtleXMoKV0uZmluZCgobmFtZSkgPT5cbiAgICAhcmVxdWlyZWRQYXJhbWV0ZXJzLnNvbWUoKHBhcmFtZXRlcikgPT4gcGFyYW1ldGVyIGluc3RhbmNlb2YgUmVxdWlyZWRQYXJhbWV0ZXJOb2RlICYmIHBhcmFtZXRlci5uYW1lID09IG5hbWUpKVxuXG4gIGlmIChleHRyYUFubm90YXRpb24pIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgYGFubm90YXRpb24gZm9yIHVua25vd24gcGFyYW1ldGVyICcke2V4dHJhQW5ub3RhdGlvbn0nYCwgbG9jYXRpb24pXG4gIGNvbnN0IHBhcmFtZXRlcnMgPSByZXF1aXJlZFBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IHtcbiAgICBpZiAoIShwYXJhbWV0ZXIgaW5zdGFuY2VvZiBSZXF1aXJlZFBhcmFtZXRlck5vZGUpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIHBhcmFtZXRlci5jb25zdHJ1Y3Rvci5uYW1lLCBsb2NhdGlvbilcblxuICAgIGNvbnN0IHBhcmFtZXRlckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGNvbnN0IGRlY2xhcmVkVHlwZSA9IGRlY2xhcmVkVHlwZXMucGFyYW1ldGVycy5nZXQocGFyYW1ldGVyLm5hbWUpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQYXJhbWV0ZXJcIiksXG4gICAgICBsb2NhdGlvbjogcGFyYW1ldGVyTG9jYXRpb24sXG4gICAgICBuYW1lOiBwYXJhbWV0ZXIubmFtZSxcbiAgICAgIHR5cGU6IGNvbnZlcnRUeXBlKGRlY2xhcmVkVHlwZT8uc291cmNlVHlwZSwgYFBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24sIHNvdXJjZSxcbiAgICAgICAgZGVjbGFyZWRUeXBlPy5sb2NhdGlvbiwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcbiAgICB9LCB7bmFtZTogcGFyYW1ldGVyTG9jYXRpb259KVxuICB9KVxuICByZXR1cm4ge1xuICAgIGxvY2F0aW9uLFxuICAgIG5hbWU6IG5vZGUubmFtZSxcbiAgICBuYW1lTG9jYXRpb24sXG4gICAgcGFyYW1ldGVycyxcbiAgICByZXR1cm5UeXBlOiBkZWNsYXJlZFR5cGVzLnJldHVyblR5cGU/LnNvdXJjZVR5cGUgPT0gXCJbdm9pZF1cIlxuICAgICAgPyByZXF1aXJlU291cmNlUmV0dXJuVHlwZShcInJ1YnlcIiwgXCJbdm9pZF1cIiwgYEZ1bmN0aW9uICcke25vZGUubmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLCBkZWNsYXJlZFR5cGVzLnJldHVyblR5cGUubG9jYXRpb24pXG4gICAgICA6IGNvbnZlcnRUeXBlKGRlY2xhcmVkVHlwZXMucmV0dXJuVHlwZT8uc291cmNlVHlwZSwgYEZ1bmN0aW9uICcke25vZGUubmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLCBzb3VyY2UsXG4gICAgICAgIGRlY2xhcmVkVHlwZXMucmV0dXJuVHlwZT8ubG9jYXRpb24sIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpLFxuICAgIC4uLihkZWNsYXJlZFR5cGVzLnR5cGVQYXJhbWV0ZXJzID8ge3R5cGVQYXJhbWV0ZXJzOiBkZWNsYXJlZFR5cGVzLnR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBSdWJ5IGRlZmluaXRpb24gYm9keSB1c2luZyBhbGwgYWxyZWFkeS1wcm92ZWQgc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7RGVmTm9kZX0gbm9kZSAtIFByaXNtIGRlZmluaXRpb24uXG4gKiBAcGFyYW0ge1J1YnlGdW5jdGlvblNpZ25hdHVyZX0gc2lnbmF0dXJlIC0gQ29udmVydGVkIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgUnVieUZ1bmN0aW9uU2lnbmF0dXJlPn0gZnVuY3Rpb25zIC0gTW9kdWxlIHNpZ25hdHVyZXMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JbnRlcmZhY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZCBkZWNsYXJhdGlvbnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gUmVmZXJlbmNlIGNsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvck5hbWVzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFByaXNtIGNvbW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSBTZW1hbnRpYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZ1bmN0aW9uKG5vZGUsIHNpZ25hdHVyZSwgZnVuY3Rpb25zLCByZWNvcmROYW1lcywgcmVjb3JkcywgY2xhc3NlcywgZXJyb3JOYW1lcywgZXJyb3JzLCBjb21tZW50cywgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBjb250ZXh0ID0ge1xuICAgIGJpbmRpbmdzOiBuZXcgTWFwKHNpZ25hdHVyZS5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLFxuICAgIGNsYXNzZXMsXG4gICAgZXJyb3JOYW1lcyxcbiAgICBlcnJvcnMsXG4gICAgZnVuY3Rpb25zLFxuICAgIG9yZGVyZWRNYXBEZWNsYXJhdGlvbnM6IG9yZGVyZWRNYXBEZWNsYXJhdGlvbnNGb3JSdWJ5KG5vZGUuYm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlID8gbm9kZS5ib2R5LmJvZHkgOiBbXSksXG4gICAgcmVjb3JkTmFtZXMsXG4gICAgcmVjb3JkcyxcbiAgICByZXR1cm5UeXBlOiBzaWduYXR1cmUucmV0dXJuVHlwZSxcbiAgICB0eXBlUGFyYW1ldGVyczogbmV3IE1hcCgoc2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXJdKSlcbiAgfVxuICBjb25zdCBib2R5ID0gY29udmVydEJsb2NrKFxuICAgIG5vZGUuYm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlID8gbm9kZS5ib2R5IDogbnVsbCxcbiAgICBjb21tZW50cyxcbiAgICBjb250ZXh0LFxuICAgIGZpbGVuYW1lLFxuICAgIHNvdXJjZSxcbiAgICBzaWduYXR1cmUubG9jYXRpb25cbiAgKVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5LFxuICAgIGtpbmQ6IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiLFxuICAgIGxvY2F0aW9uOiBzaWduYXR1cmUubG9jYXRpb24sXG4gICAgbmFtZTogc2lnbmF0dXJlLm5hbWUsXG4gICAgcGFyYW1ldGVyczogc2lnbmF0dXJlLnBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogc2lnbmF0dXJlLnJldHVyblR5cGUsXG4gICAgLi4uKHNpZ25hdHVyZS50eXBlUGFyYW1ldGVycyA/IHt0eXBlUGFyYW1ldGVyczogc2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9LCB7bmFtZTogc2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pXG59XG5cbi8qKlxuICogUmVzb2x2ZXMgcGFyc2VyLW93bmVkIHBhaXIgYmxvY2tzIHRvIGV4YWN0IGRlY2xhcmF0aW9ucyBpbnNpZGUgb25lIGxleGljYWwgb3duZXIuXG4gKiBBbWJpZ3VvdXMgc2FtZS1uYW1lIGRlY2xhcmF0aW9ucyBwcm9kdWNlIG5vIGV2aWRlbmNlIGFuZCBmYWlsIGR1cmluZyBsb29wIGNvbnZlcnNpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGVbXX0gbm9kZXMgLSBGdW5jdGlvbiBib2R5IG9yIGVudHJ5LXBvaW50IHJvb3RzLlxuICogQHJldHVybnMge1NldDxvYmplY3Q+fSBFeGFjdCBwYWlyLWl0ZXJhdGVkIHBhcnNlciBkZWNsYXJhdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIG9yZGVyZWRNYXBEZWNsYXJhdGlvbnNGb3JSdWJ5KG5vZGVzKSB7XG4gIC8qKiBAdHlwZSB7e2RlY2xhcmF0aW9uOiBMb2NhbFZhcmlhYmxlV3JpdGVOb2RlLCBuYW1lOiBzdHJpbmcsIG9mZnNldDogbnVtYmVyfVtdfSAqL1xuICBjb25zdCBkZWNsYXJhdGlvbnMgPSBbXVxuICAvKiogQHR5cGUge3tuYW1lOiBzdHJpbmcsIG9mZnNldDogbnVtYmVyfVtdfSAqL1xuICBjb25zdCByZWNlaXZlcnMgPSBbXVxuICAvKipcbiAgICogVmlzaXRzIG9uZSBwYXJzZXIgY2FuZGlkYXRlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGV9IG5vZGUgLSBQYXJzZXIgY2FuZGlkYXRlLlxuICAgKi9cbiAgY29uc3QgdmlzaXQgPSAobm9kZSkgPT4ge1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgRGVmTm9kZSB8fCBub2RlIGluc3RhbmNlb2YgQ2xhc3NOb2RlKSByZXR1cm5cbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVXcml0ZU5vZGUpIGRlY2xhcmF0aW9ucy5wdXNoKHtcbiAgICAgIGRlY2xhcmF0aW9uOiBub2RlLFxuICAgICAgbmFtZTogbm9kZS5uYW1lLFxuICAgICAgb2Zmc2V0OiBub2RlLmxvY2F0aW9uLnN0YXJ0T2Zmc2V0XG4gICAgfSlcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmIG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBMb2NhbFZhcmlhYmxlUmVhZE5vZGUgJiYgbm9kZS5uYW1lID09IFwiZWFjaFwiICYmXG4gICAgICBub2RlLmJsb2NrIGluc3RhbmNlb2YgQmxvY2tOb2RlICYmIG5vZGUuYmxvY2sucGFyYW1ldGVycyBpbnN0YW5jZW9mIEJsb2NrUGFyYW1ldGVyc05vZGUgJiZcbiAgICAgIG5vZGUuYmxvY2sucGFyYW1ldGVycy5wYXJhbWV0ZXJzPy5yZXF1aXJlZHMubGVuZ3RoID09IDIpIHJlY2VpdmVycy5wdXNoKHtcbiAgICAgIG5hbWU6IG5vZGUucmVjZWl2ZXIubmFtZSxcbiAgICAgIG9mZnNldDogbm9kZS5sb2NhdGlvbi5zdGFydE9mZnNldFxuICAgIH0pXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNvbXBhY3RDaGlsZE5vZGVzKCkpIHZpc2l0KGNoaWxkKVxuICB9XG5cbiAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB2aXNpdChub2RlKVxuICBjb25zdCBzZWxlY3RlZCA9IG5ldyBTZXQoKVxuICBmb3IgKGNvbnN0IHJlY2VpdmVyIG9mIHJlY2VpdmVycykge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBkZWNsYXJhdGlvbnMuZmlsdGVyKCh7bmFtZSwgb2Zmc2V0fSkgPT4gbmFtZSA9PSByZWNlaXZlci5uYW1lICYmIG9mZnNldCA8IHJlY2VpdmVyLm9mZnNldClcblxuICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PSAxKSBzZWxlY3RlZC5hZGQobWF0Y2hlc1swXS5kZWNsYXJhdGlvbilcbiAgfVxuXG4gIHJldHVybiBzZWxlY3RlZFxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBlbXB0eSBTdGFuZGFyZEVycm9yIHN1YmNsYXNzLlxuICogQHBhcmFtIHtDbGFzc05vZGV9IG5vZGUgLSBQcmlzbSBjbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBQcmVkZWNsYXJlZCBzZW1hbnRpYyBlcnJvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gU2VtYW50aWMgZXJyb3IgZGVjbGFyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRSdWJ5RXJyb3Iobm9kZSwgZGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoIShub2RlLmNvbnN0YW50UGF0aCBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUpIHx8ICEobm9kZS5zdXBlcmNsYXNzIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSkgfHxcbiAgICBub2RlLnN1cGVyY2xhc3MubmFtZSAhPSBcIlN0YW5kYXJkRXJyb3JcIiB8fCAhbm9kZS5pbmhlcml0YW5jZU9wZXJhdG9yTG9jIHx8IG5vZGUuYm9keSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJub25jYW5vbmljYWwgdHlwZWQgZXJyb3IgZGVjbGFyYXRpb25cIiwgbG9jYXRpb24pXG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge1xuICAgIG5hbWU6IG5vZGVMb2NhdGlvbihub2RlLmNvbnN0YW50UGF0aCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgdHlwZTogbm9kZUxvY2F0aW9uKG5vZGUuc3VwZXJjbGFzcywgZmlsZW5hbWUsIHNvdXJjZSlcbiAgfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgYm91bmRlZCBSdWJ5IHJlZmVyZW5jZS1jbGFzcyBwcm9maWxlLlxuICogQHBhcmFtIHtDbGFzc05vZGV9IG5vZGUgLSBQcmlzbSBjbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBQcmVkZWNsYXJlZCBjbGFzcyBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkludGVyZmFjZURlY2xhcmF0aW9uPn0gbm9taW5hbE5hbWVzIC0gVmlzaWJsZSBub21pbmFsIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fSByZWNvcmRzIC0gUmVjb3JkcyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj59IGNsYXNzZXMgLSBDbGFzc2VzIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBSdWJ5RnVuY3Rpb25TaWduYXR1cmU+fSBmdW5jdGlvbnMgLSBUb3AtbGV2ZWwgc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9yTmFtZXMgLSBFcnJvcnMgYnkgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9ycyAtIEVycm9ycyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc20vc3JjL2Rlc2VyaWFsaXplLmpzXCIpLkNvbW1lbnRbXX0gY29tbWVudHMgLSBQcmlzbSBjb21tZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gU2VtYW50aWMgY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRSdWJ5UmVmZXJlbmNlQ2xhc3Mobm9kZSwgZGVjbGFyYXRpb24sIG5vbWluYWxOYW1lcywgcmVjb3JkcywgY2xhc3NlcywgZnVuY3Rpb25zLCBlcnJvck5hbWVzLCBlcnJvcnMsXG4gIGNvbW1lbnRzLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKCEobm9kZS5jb25zdGFudFBhdGggaW5zdGFuY2VvZiBDb25zdGFudFJlYWROb2RlKSB8fCBub2RlLnN1cGVyY2xhc3MgfHwgbm9kZS5pbmhlcml0YW5jZU9wZXJhdG9yTG9jIHx8XG4gICAgIShub2RlLmJvZHkgaW5zdGFuY2VvZiBTdGF0ZW1lbnRzTm9kZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwicmVmZXJlbmNlIGNsYXNzIGluaGVyaXRhbmNlLCBxdWFsaWZpZWQgbmFtZSwgb3IgZW1wdHkgYm9keVwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBtZW1iZXJzID0gbm9kZS5ib2R5LmJvZHlcbiAgY29uc3QgaW5pdGlhbGl6ZXJzID0gbWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyIGluc3RhbmNlb2YgRGVmTm9kZSAmJiBtZW1iZXIubmFtZSA9PSBcImluaXRpYWxpemVcIilcbiAgY29uc3QgbWV0aG9kTm9kZXMgPSAvKiogQHR5cGUge0RlZk5vZGVbXX0gKi8gKG1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlciBpbnN0YW5jZW9mIERlZk5vZGUgJiYgbWVtYmVyLm5hbWUgIT0gXCJpbml0aWFsaXplXCIpKVxuICBjb25zdCByZXNlcnZlZE1ldGhvZCA9IG1ldGhvZE5vZGVzLmZpbmQoKG1ldGhvZCkgPT4gcmVmZXJlbmNlTWV0aG9kSG9va3MuaGFzKG1ldGhvZC5uYW1lKSlcblxuICBpZiAoaW5pdGlhbGl6ZXJzLmxlbmd0aCAhPSAxIHx8IG1lbWJlcnMuc29tZSgobWVtYmVyKSA9PiAhKG1lbWJlciBpbnN0YW5jZW9mIERlZk5vZGUpKSB8fCByZXNlcnZlZE1ldGhvZCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJyZWZlcmVuY2UgY2xhc3MgcmVxdWlyZXMgb25lIGluaXRpYWxpemVyIGFuZCBvcmRpbmFyeSBtZXRob2RzXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IGluaXRpYWxpemVyID0gLyoqIEB0eXBlIHtEZWZOb2RlfSAqLyAoaW5pdGlhbGl6ZXJzWzBdKVxuICBjb25zdCBwYXJhbWV0ZXJzID0gaW5pdGlhbGl6ZXIucGFyYW1ldGVycz8ucmVxdWlyZWRzID8/IFtdXG4gIGNvbnN0IGludmFsaWRQYXJhbWV0ZXIgPSBpbml0aWFsaXplci5wYXJhbWV0ZXJzICYmIFtpbml0aWFsaXplci5wYXJhbWV0ZXJzLm9wdGlvbmFsc1swXSwgaW5pdGlhbGl6ZXIucGFyYW1ldGVycy5yZXN0LFxuICAgIGluaXRpYWxpemVyLnBhcmFtZXRlcnMucG9zdHNbMF0sIGluaXRpYWxpemVyLnBhcmFtZXRlcnMua2V5d29yZHNbMF0sIGluaXRpYWxpemVyLnBhcmFtZXRlcnMua2V5d29yZFJlc3QsXG4gICAgaW5pdGlhbGl6ZXIucGFyYW1ldGVycy5ibG9ja10uZmluZChCb29sZWFuKVxuICBjb25zdCBzdGF0ZW1lbnRzID0gaW5pdGlhbGl6ZXIuYm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlID8gaW5pdGlhbGl6ZXIuYm9keS5ib2R5IDogW11cbiAgY29uc3QgYW5ub3RhdGlvbnMgPSB0eXBlQ29tbWVudHMoY29tbWVudHMsIGluaXRpYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBhY3F1aXNpdGlvbiA9IHN0YXRlbWVudHMubGVuZ3RoID09IDEgJiYgc3RhdGVtZW50c1swXSBpbnN0YW5jZW9mIEluc3RhbmNlVmFyaWFibGVXcml0ZU5vZGUgJiZcbiAgICBzdGF0ZW1lbnRzWzBdLm5hbWUgPT0gXCJAcmVzb3VyY2VcIiAmJiBzdGF0ZW1lbnRzWzBdLnZhbHVlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgIXN0YXRlbWVudHNbMF0udmFsdWUucmVjZWl2ZXIgJiZcbiAgICAhc3RhdGVtZW50c1swXS52YWx1ZS5ibG9jayAmJiBzdGF0ZW1lbnRzWzBdLnZhbHVlLm5hbWUgPT0gXCJ2MV9jb25uZWN0XCIgJiZcbiAgICBzdGF0ZW1lbnRzWzBdLnZhbHVlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoID09IDIgJiYgcGFyYW1ldGVycy5sZW5ndGggPT0gMiAmJlxuICAgIHBhcmFtZXRlcnNbMF0gaW5zdGFuY2VvZiBSZXF1aXJlZFBhcmFtZXRlck5vZGUgJiYgcGFyYW1ldGVyc1swXS5uYW1lID09IFwiaG9zdFwiICYmXG4gICAgcGFyYW1ldGVyc1sxXSBpbnN0YW5jZW9mIFJlcXVpcmVkUGFyYW1ldGVyTm9kZSAmJiBwYXJhbWV0ZXJzWzFdLm5hbWUgPT0gXCJwb3J0XCIgJiZcbiAgICBzdGF0ZW1lbnRzWzBdLnZhbHVlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVSZWFkTm9kZSAmJlxuICAgIHN0YXRlbWVudHNbMF0udmFsdWUuYXJndW1lbnRzXy5hcmd1bWVudHNfWzBdLm5hbWUgPT0gXCJob3N0XCIgJiZcbiAgICBzdGF0ZW1lbnRzWzBdLnZhbHVlLmFyZ3VtZW50c18uYXJndW1lbnRzX1sxXSBpbnN0YW5jZW9mIExvY2FsVmFyaWFibGVSZWFkTm9kZSAmJlxuICAgIHN0YXRlbWVudHNbMF0udmFsdWUuYXJndW1lbnRzXy5hcmd1bWVudHNfWzFdLm5hbWUgPT0gXCJwb3J0XCIgJiYgZGVjbGFyYXRpb24ubmFtZSA9PSBcIlRDUFNvY2tldFwiICYmXG4gICAgZnVuY3Rpb25zLmdldChcInYxX2Nvbm5lY3RcIik/LnJldHVyblR5cGUua2luZCA9PSBcIk93bmVkUmVzb3VyY2VUeXBlXCJcblxuICBpZiAoaW5pdGlhbGl6ZXIucmVjZWl2ZXIgfHwgaW52YWxpZFBhcmFtZXRlciB8fCBhbm5vdGF0aW9ucy5yZXR1cm5UeXBlIHx8IGFubm90YXRpb25zLnBhcmFtZXRlcnMuc2l6ZSAhPSBwYXJhbWV0ZXJzLmxlbmd0aCB8fFxuICAgICFhY3F1aXNpdGlvbiAmJiBzdGF0ZW1lbnRzLmxlbmd0aCAhPSBwYXJhbWV0ZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJub25jYW5vbmljYWwgcmVmZXJlbmNlIGNsYXNzIGluaXRpYWxpemVyXCIsIG5vZGVMb2NhdGlvbihpbml0aWFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgZGVjbGFyYXRpb24uZmllbGRzID0gYWNxdWlzaXRpb24gPyBbd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgaWQ6IGAke2RlY2xhcmF0aW9uLmlkfTpmaWVsZDowYCxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQcml2YXRlRmllbGRcIiksXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbigvKiogQHR5cGUge0luc3RhbmNlVmFyaWFibGVXcml0ZU5vZGV9ICovIChzdGF0ZW1lbnRzWzBdKSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgbmFtZTogXCJyZXNvdXJjZVwiLFxuICAgIHR5cGU6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuT3duZWRSZXNvdXJjZVR5cGV9ICovIChzdHJ1Y3R1cmVkQ2xvbmUoZnVuY3Rpb25zLmdldChcInYxX2Nvbm5lY3RcIik/LnJldHVyblR5cGUpKVxuICB9LCB7bmFtZTogbm9kZUxvY2F0aW9uKC8qKiBAdHlwZSB7SW5zdGFuY2VWYXJpYWJsZVdyaXRlTm9kZX0gKi8gKHN0YXRlbWVudHNbMF0pLCBmaWxlbmFtZSwgc291cmNlKX0pXSA6IHBhcmFtZXRlcnMubWFwKChjYW5kaWRhdGUsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gLyoqIEB0eXBlIHtSZXF1aXJlZFBhcmFtZXRlck5vZGV9ICovIChjYW5kaWRhdGUpXG4gICAgY29uc3QgYXNzaWdubWVudCA9IHN0YXRlbWVudHNbaW5kZXhdXG4gICAgY29uc3QgYW5ub3RhdGVkID0gYW5ub3RhdGlvbnMucGFyYW1ldGVycy5nZXQocGFyYW1ldGVyLm5hbWUpXG5cbiAgICBpZiAoIShwYXJhbWV0ZXIgaW5zdGFuY2VvZiBSZXF1aXJlZFBhcmFtZXRlck5vZGUpIHx8ICEoYXNzaWdubWVudCBpbnN0YW5jZW9mIEluc3RhbmNlVmFyaWFibGVXcml0ZU5vZGUpIHx8XG4gICAgICBhc3NpZ25tZW50Lm5hbWUgIT0gYEAke3BhcmFtZXRlci5uYW1lfWAgfHwgIShhc3NpZ25tZW50LnZhbHVlIGluc3RhbmNlb2YgTG9jYWxWYXJpYWJsZVJlYWROb2RlKSB8fFxuICAgICAgYXNzaWdubWVudC52YWx1ZS5uYW1lICE9IHBhcmFtZXRlci5uYW1lIHx8ICFhbm5vdGF0ZWQpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJwcml2YXRlIGZpZWxkIG5vdCBpbml0aWFsaXplZCBleGFjdGx5IG9uY2UgaW4gcGFyYW1ldGVyIG9yZGVyXCIsXG4gICAgICAgIG5vZGVMb2NhdGlvbihhc3NpZ25tZW50ID8/IGluaXRpYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2lkOiBgJHtkZWNsYXJhdGlvbi5pZH06ZmllbGQ6JHtpbmRleH1gLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQcml2YXRlRmllbGRcIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGFzc2lnbm1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpLCBuYW1lOiBwYXJhbWV0ZXIubmFtZSxcbiAgICAgIHR5cGU6IGNvbnZlcnRUeXBlKGFubm90YXRlZC5zb3VyY2VUeXBlLCBgUHJpdmF0ZSBmaWVsZCAnJHtwYXJhbWV0ZXIubmFtZX0nYCwgbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIHNvdXJjZSwgYW5ub3RhdGVkLmxvY2F0aW9uLCBub21pbmFsTmFtZXMpfSwge25hbWU6IG5vZGVMb2NhdGlvbihhc3NpZ25tZW50LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG4gIGNvbnN0IGNvbnN0cnVjdG9yUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMubWFwKChjYW5kaWRhdGUsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gLyoqIEB0eXBlIHtSZXF1aXJlZFBhcmFtZXRlck5vZGV9ICovIChjYW5kaWRhdGUpXG4gICAgY29uc3QgcGFyYW1ldGVyTG9jYXRpb24gPSBub2RlTG9jYXRpb24ocGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGFubm90YXRlZCA9IGFubm90YXRpb25zLnBhcmFtZXRlcnMuZ2V0KHBhcmFtZXRlci5uYW1lKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlBhcmFtZXRlclwiKSwgbG9jYXRpb246IHBhcmFtZXRlckxvY2F0aW9uLCBuYW1lOiBwYXJhbWV0ZXIubmFtZSxcbiAgICAgIHR5cGU6IGFjcXVpc2l0aW9uXG4gICAgICAgID8gY29udmVydFR5cGUoYW5ub3RhdGVkPy5zb3VyY2VUeXBlLCBgQ29uc3RydWN0b3IgcGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfSdgLCBwYXJhbWV0ZXJMb2NhdGlvbiwgc291cmNlLFxuICAgICAgICAgIGFubm90YXRlZD8ubG9jYXRpb24sIG5vbWluYWxOYW1lcylcbiAgICAgICAgOiBkZWNsYXJhdGlvbi5maWVsZHNbaW5kZXhdLnR5cGV9LCB7bmFtZTogcGFyYW1ldGVyTG9jYXRpb259KVxuICB9KVxuICBkZWNsYXJhdGlvbi5jb25zdHJ1Y3RvciA9IHdpdGhQYXJzZXJSYW5nZXMoe2JvZHk6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9ICovICh7fSksXG4gICAgaWQ6IGAke2RlY2xhcmF0aW9uLmlkfTpjb25zdHJ1Y3RvcmAsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNvbnN0cnVjdG9yRGVjbGFyYXRpb25cIiksIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oaW5pdGlhbGl6ZXIsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIHBhcmFtZXRlcnM6IGNvbnN0cnVjdG9yUGFyYW1ldGVyc30sIHtjb25zdHJ1Y3RvcjogcHJpc21Mb2NhdGlvbihpbml0aWFsaXplci5uYW1lTG9jLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIGNvbnN0IG1ldGhvZFNpZ25hdHVyZXMgPSBtZXRob2ROb2Rlcy5tYXAoKG1ldGhvZCwgaW5kZXgpID0+XG4gICAgY29udmVydEZ1bmN0aW9uU2lnbmF0dXJlKG1ldGhvZCwgY29tbWVudHMsIGZpbGVuYW1lLCBzb3VyY2UsIG5vbWluYWxOYW1lcywgYCR7ZGVjbGFyYXRpb24uaWR9Om1ldGhvZDoke2luZGV4fWApKVxuICBkZWNsYXJhdGlvbi5tZXRob2RzID0gbWV0aG9kU2lnbmF0dXJlcy5tYXAoKHNpZ25hdHVyZSwgaW5kZXgpID0+IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGJvZHk6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9ICovICh7fSksIGlkOiBgJHtkZWNsYXJhdGlvbi5pZH06bWV0aG9kOiR7aW5kZXh9YCxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNZXRob2REZWNsYXJhdGlvblwiKSwgbG9jYXRpb246IHNpZ25hdHVyZS5sb2NhdGlvbiwgbmFtZTogc2lnbmF0dXJlLm5hbWUsXG4gICAgcGFyYW1ldGVyczogc2lnbmF0dXJlLnBhcmFtZXRlcnMsIHJldHVyblR5cGU6IHNpZ25hdHVyZS5yZXR1cm5UeXBlXG4gIH0sIHtuYW1lOiBzaWduYXR1cmUubmFtZUxvY2F0aW9ufSkpXG4gIGNvbnN0IGJhc2UgPSB7YmluZGluZ3M6IG5ldyBNYXAoKSwgY2xhc3NlcywgY3VycmVudENsYXNzOiBkZWNsYXJhdGlvbiwgZXJyb3JOYW1lcywgZXJyb3JzLCBmdW5jdGlvbnMsXG4gICAgcmVjb3JkTmFtZXM6IG5vbWluYWxOYW1lcywgcmVjb3Jkc31cblxuICBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5ib2R5ID0gY29udmVydEJsb2NrKGluaXRpYWxpemVyLmJvZHkgaW5zdGFuY2VvZiBTdGF0ZW1lbnRzTm9kZSA/IGluaXRpYWxpemVyLmJvZHkgOiBudWxsLFxuICAgIGNvbW1lbnRzLCB7Li4uYmFzZSwgYmluZGluZ3M6IG5ldyBNYXAoY29uc3RydWN0b3JQYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLFxuICAgICAgcmV0dXJuVHlwZToge2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlR5cGVSZWZlcmVuY2VcIiksIG5hbWU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcInZvaWRcIil9fSxcbiAgICBmaWxlbmFtZSwgc291cmNlLCBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5sb2NhdGlvbilcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1ldGhvZE5vZGVzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IG1ldGhvZCA9IGRlY2xhcmF0aW9uLm1ldGhvZHNbaW5kZXhdXG4gICAgY29uc3QgbWV0aG9kQm9keSA9IG1ldGhvZE5vZGVzW2luZGV4XS5ib2R5XG5cbiAgICBtZXRob2QuYm9keSA9IGNvbnZlcnRCbG9jayhtZXRob2RCb2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgPyBtZXRob2RCb2R5IDogbnVsbCxcbiAgICAgIGNvbW1lbnRzLCB7Li4uYmFzZSwgYmluZGluZ3M6IG5ldyBNYXAobWV0aG9kLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyLnR5cGVdKSksXG4gICAgICAgIHJldHVyblR5cGU6IG1ldGhvZC5yZXR1cm5UeXBlfSwgZmlsZW5hbWUsIHNvdXJjZSwgbWV0aG9kLmxvY2F0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoZGVjbGFyYXRpb24sIHtuYW1lOiBub2RlTG9jYXRpb24obm9kZS5jb25zdGFudFBhdGgsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgdHlwZWQtcmVhZGVyL2luaXRpYWxpemVyL2ZyZWV6ZSBSdWJ5IHJlY29yZCBwcm9maWxlLlxuICogQHBhcmFtIHtDbGFzc05vZGV9IG5vZGUgLSBQcmlzbSBjbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgbm9taW5hbCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkludGVyZmFjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBuYW1lLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFBhcnNlci1vd25lZCBjb21tZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IFNlbWFudGljIHJlY29yZC5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJ1YnlSZWNvcmQobm9kZSwgZGVjbGFyYXRpb24sIHJlY29yZE5hbWVzLCBjb21tZW50cywgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCB0eXBlUGFyYW1ldGVyTmFtZXMgPSBuZXcgTWFwKChkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyXSkpXG5cbiAgaWYgKCEobm9kZS5jb25zdGFudFBhdGggaW5zdGFuY2VvZiBDb25zdGFudFJlYWROb2RlKSB8fCBub2RlLnN1cGVyY2xhc3MgfHwgbm9kZS5pbmhlcml0YW5jZU9wZXJhdG9yTG9jKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInJlY29yZCBpbmhlcml0YW5jZSBvciBxdWFsaWZpZWQgbmFtZVwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBtZW1iZXJzID0gbm9kZS5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgPyBub2RlLmJvZHkuYm9keSA6IFtdXG4gIGNvbnN0IGluaXRpYWxpemVySW5kZXggPSBtZW1iZXJzLmZpbmRJbmRleCgobWVtYmVyKSA9PiBtZW1iZXIgaW5zdGFuY2VvZiBEZWZOb2RlICYmIG1lbWJlci5uYW1lID09IFwiaW5pdGlhbGl6ZVwiKVxuXG4gIGlmIChpbml0aWFsaXplckluZGV4IDwgMCB8fCBpbml0aWFsaXplckluZGV4ICE9IG1lbWJlcnMubGVuZ3RoIC0gMSB8fCBtZW1iZXJzLnNsaWNlKDAsIGluaXRpYWxpemVySW5kZXgpLnNvbWUoKG1lbWJlcikgPT5cbiAgICAhKG1lbWJlciBpbnN0YW5jZW9mIENhbGxOb2RlKSB8fCBtZW1iZXIucmVjZWl2ZXIgfHwgbWVtYmVyLm5hbWUgIT0gXCJhdHRyX3JlYWRlclwiIHx8IG1lbWJlci5ibG9jayB8fFxuICAgIG1lbWJlci5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCAhPSAxIHx8ICEobWVtYmVyLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXSBpbnN0YW5jZW9mIFN5bWJvbE5vZGUpKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJyZWNvcmQgY2xhc3MgYm9keSBvdXRzaWRlIHR5cGVkIHJlYWRlcnMgYW5kIG9uZSBpbml0aWFsaXplclwiLCBub2RlTG9jYXRpb24obWVtYmVycy5maW5kKChtZW1iZXIsIGluZGV4KSA9PlxuICAgICAgaW5kZXggPj0gaW5pdGlhbGl6ZXJJbmRleCArIDEgfHwgIShtZW1iZXIgaW5zdGFuY2VvZiBDYWxsTm9kZSkgfHwgbWVtYmVyLm5hbWUgIT0gXCJhdHRyX3JlYWRlclwiKSA/PyBub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCByZWFkZXJOb2RlcyA9IC8qKiBAdHlwZSB7Q2FsbE5vZGVbXX0gKi8gKG1lbWJlcnMuc2xpY2UoMCwgaW5pdGlhbGl6ZXJJbmRleCkpXG4gIGRlY2xhcmF0aW9uLmZpZWxkcyA9IHJlYWRlck5vZGVzLm1hcCgocmVhZGVyKSA9PiB7XG4gICAgY29uc3Qgc3ltYm9sID0gLyoqIEB0eXBlIHtTeW1ib2xOb2RlfSAqLyAocmVhZGVyLmFyZ3VtZW50c18/LmFyZ3VtZW50c19bMF0pXG4gICAgY29uc3QgbWV0YWRhdGEgPSBhc3NvY2lhdGVkQ29tbWVudHMoY29tbWVudHMsIHJlYWRlciwgc291cmNlKS5tYXAoKGNvbW1lbnQpID0+IGNvbW1lbnRUb2tlbnMoY29tbWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3QgdHlwZU1ldGFkYXRhID0gbWV0YWRhdGEuZmlsdGVyKChbdG9rZW5dKSA9PiB0b2tlbj8udGV4dCA9PSBcIkB0eXBlXCIpXG4gICAgY29uc3QgZmllbGRMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihyZWFkZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAodHlwZU1ldGFkYXRhLmxlbmd0aCAhPSAxIHx8IHR5cGVNZXRhZGF0YVswXS5sZW5ndGggPCAyIHx8IG1ldGFkYXRhLnNvbWUoKFt0b2tlbl0pID0+IHRva2VuPy50ZXh0Py5zdGFydHNXaXRoKFwiQHR5cGVcIikgJiYgdG9rZW4udGV4dCAhPSBcIkB0eXBlXCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibWlzc2luZyBvciBtYWxmb3JtZWQgcmVjb3JkIHJlYWRlciB0eXBlXCIsIGZpZWxkTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGRlY2xhcmVkVHlwZSA9IGpvaW5lZENvbW1lbnRUb2tlbih0eXBlTWV0YWRhdGFbMF0sIDEsIHNvdXJjZSlcbiAgICBjb25zdCBmaWVsZCA9IHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY29yZEZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IGZpZWxkTG9jYXRpb24sXG4gICAgICBuYW1lOiBzeW1ib2wudW5lc2NhcGVkLnZhbHVlLFxuICAgICAgdHlwZTogY29udmVydFR5cGUoZGVjbGFyZWRUeXBlLnNvdXJjZVR5cGUsIGBSZWNvcmQgZmllbGQgJyR7c3ltYm9sLnVuZXNjYXBlZC52YWx1ZX0nYCwgZmllbGRMb2NhdGlvbiwgc291cmNlLFxuICAgICAgICBkZWNsYXJlZFR5cGUubG9jYXRpb24sIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoZmllbGQsIHtuYW1lOiBzeW1ib2wudmFsdWVMb2MgPyBwcmlzbUxvY2F0aW9uKHN5bWJvbC52YWx1ZUxvYywgZmlsZW5hbWUsIHNvdXJjZSkgOiBmaWVsZExvY2F0aW9ufSlcbiAgfSlcbiAgY29uc3QgaW5pdGlhbGl6ZXIgPSAvKiogQHR5cGUge0RlZk5vZGV9ICovIChtZW1iZXJzW2luaXRpYWxpemVySW5kZXhdKVxuICBjb25zdCBwYXJhbWV0ZXJMaXN0ID0gaW5pdGlhbGl6ZXIucGFyYW1ldGVyc1xuICBjb25zdCBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyTGlzdD8ucmVxdWlyZWRzID8/IFtdXG4gIGNvbnN0IGludmFsaWRQYXJhbWV0ZXIgPSBwYXJhbWV0ZXJMaXN0ICYmIFtwYXJhbWV0ZXJMaXN0Lm9wdGlvbmFsc1swXSwgcGFyYW1ldGVyTGlzdC5yZXN0LCBwYXJhbWV0ZXJMaXN0LnBvc3RzWzBdLFxuICAgIHBhcmFtZXRlckxpc3Qua2V5d29yZHNbMF0sIHBhcmFtZXRlckxpc3Qua2V5d29yZFJlc3QsIHBhcmFtZXRlckxpc3QuYmxvY2tdLmZpbmQoQm9vbGVhbilcbiAgY29uc3QgaW5pdGlhbGl6ZXJTdGF0ZW1lbnRzID0gaW5pdGlhbGl6ZXIuYm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlID8gaW5pdGlhbGl6ZXIuYm9keS5ib2R5IDogW11cblxuICBpZiAoaW5pdGlhbGl6ZXIucmVjZWl2ZXIgfHwgaW52YWxpZFBhcmFtZXRlciB8fCBwYXJhbWV0ZXJzLmxlbmd0aCAhPSBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoIHx8XG4gICAgcGFyYW1ldGVycy5zb21lKChwYXJhbWV0ZXIsIGluZGV4KSA9PiAhKHBhcmFtZXRlciBpbnN0YW5jZW9mIFJlcXVpcmVkUGFyYW1ldGVyTm9kZSkgfHwgcGFyYW1ldGVyLm5hbWUgIT0gZGVjbGFyYXRpb24uZmllbGRzW2luZGV4XS5uYW1lKSB8fFxuICAgIGluaXRpYWxpemVyU3RhdGVtZW50cy5sZW5ndGggIT0gZGVjbGFyYXRpb24uZmllbGRzLmxlbmd0aCArIDEpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibm9uY2Fub25pY2FsIHJlY29yZCBpbml0aWFsaXplclwiLCBub2RlTG9jYXRpb24oaW5pdGlhbGl6ZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGFubm90YXRpb25zID0gdHlwZUNvbW1lbnRzKGNvbW1lbnRzLCBpbml0aWFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoYW5ub3RhdGlvbnMucmV0dXJuVHlwZSB8fCBhbm5vdGF0aW9ucy5wYXJhbWV0ZXJzLnNpemUgIT0gZGVjbGFyYXRpb24uZmllbGRzLmxlbmd0aCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJpbmNvbXBsZXRlIHJlY29yZCBpbml0aWFsaXplciBhbm5vdGF0aW9uc1wiLCBub2RlTG9jYXRpb24oaW5pdGlhbGl6ZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgZmllbGQgPSBkZWNsYXJhdGlvbi5maWVsZHNbaW5kZXhdXG4gICAgY29uc3QgcGFyYW1ldGVyID0gLyoqIEB0eXBlIHtSZXF1aXJlZFBhcmFtZXRlck5vZGV9ICovIChwYXJhbWV0ZXJzW2luZGV4XSlcbiAgICBjb25zdCBhc3NpZ25tZW50ID0gaW5pdGlhbGl6ZXJTdGF0ZW1lbnRzW2luZGV4XVxuICAgIGNvbnN0IGFubm90YXRlZCA9IGFubm90YXRpb25zLnBhcmFtZXRlcnMuZ2V0KHBhcmFtZXRlci5uYW1lKVxuXG4gICAgaWYgKCEoYXNzaWdubWVudCBpbnN0YW5jZW9mIEluc3RhbmNlVmFyaWFibGVXcml0ZU5vZGUpIHx8IGFzc2lnbm1lbnQubmFtZSAhPSBgQCR7ZmllbGQubmFtZX1gIHx8XG4gICAgICAhKGFzc2lnbm1lbnQudmFsdWUgaW5zdGFuY2VvZiBMb2NhbFZhcmlhYmxlUmVhZE5vZGUpIHx8IGFzc2lnbm1lbnQudmFsdWUubmFtZSAhPSBmaWVsZC5uYW1lIHx8ICFhbm5vdGF0ZWQpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJyZWNvcmQgZmllbGQgbm90IGluaXRpYWxpemVkIGV4YWN0bHkgb25jZVwiLCBub2RlTG9jYXRpb24oYXNzaWdubWVudCA/PyBpbml0aWFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IHBhcmFtZXRlclR5cGUgPSBjb252ZXJ0VHlwZShhbm5vdGF0ZWQuc291cmNlVHlwZSwgYFJlY29yZCBpbml0aWFsaXplciBwYXJhbWV0ZXIgJyR7cGFyYW1ldGVyLm5hbWV9J2AsXG4gICAgICBub2RlTG9jYXRpb24ocGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKSwgc291cmNlLCBhbm5vdGF0ZWQubG9jYXRpb24sIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpXG5cbiAgICBpZiAoIXNhbWVWYWx1ZVR5cGUocGFyYW1ldGVyVHlwZSwgZmllbGQudHlwZSkpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJyZWNvcmQgcmVhZGVyL2luaXRpYWxpemVyIHR5cGUgbWlzbWF0Y2hcIiwgYW5ub3RhdGVkLmxvY2F0aW9uKVxuICAgIH1cbiAgfVxuICBjb25zdCBmcmVlemUgPSBpbml0aWFsaXplclN0YXRlbWVudHMuYXQoLTEpXG5cbiAgaWYgKCFpc1J1YnlSZWNvcmRGcmVlemUoZnJlZXplKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJyZWNvcmQgaW5pdGlhbGl6ZXIgd2l0aG91dCBmaW5hbCBmcmVlemVcIiwgbm9kZUxvY2F0aW9uKGZyZWV6ZSA/PyBpbml0aWFsaXplciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge25hbWU6IG5vZGVMb2NhdGlvbihub2RlLmNvbnN0YW50UGF0aCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIFJlY29nbml6ZXMgY2Fub25pY2FsIHNvdXJjZSBmcmVlemluZyBvciB0aGUgZ2VuZXJhdGVkIHJvb3Qtb3duZWQgS2VybmVsIGltcGxlbWVudGF0aW9uIGJpbmRpbmcuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGUgfCB1bmRlZmluZWR9IG5vZGUgLSBGaW5hbCBpbml0aWFsaXplciBzdGF0ZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgc3RhdGVtZW50IG93bnMgdGhlIG5hdGl2ZSByZWNvcmQtZnJlZXplIG9wZXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gaXNSdWJ5UmVjb3JkRnJlZXplKG5vZGUpIHtcbiAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlKSB8fCBub2RlLmJsb2NrKSByZXR1cm4gZmFsc2VcbiAgaWYgKCFub2RlLnJlY2VpdmVyKSByZXR1cm4gbm9kZS5uYW1lID09IFwiZnJlZXplXCIgJiYgIW5vZGUuYXJndW1lbnRzX1xuICBpZiAobm9kZS5uYW1lICE9IFwiYmluZF9jYWxsXCIgfHwgIW5vZGUuY2FsbE9wZXJhdG9yTG9jIHx8IG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggIT0gMSB8fFxuICAgICEobm9kZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0gaW5zdGFuY2VvZiBTZWxmTm9kZSkgfHwgIShub2RlLnJlY2VpdmVyIGluc3RhbmNlb2YgQ2FsbE5vZGUpKSByZXR1cm4gZmFsc2VcbiAgY29uc3QgbWV0aG9kID0gbm9kZS5yZWNlaXZlclxuXG4gIGlmIChtZXRob2QubmFtZSAhPSBcImluc3RhbmNlX21ldGhvZFwiIHx8ICFtZXRob2QuY2FsbE9wZXJhdG9yTG9jIHx8IG1ldGhvZC5ibG9jayB8fFxuICAgIG1ldGhvZC5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCAhPSAxIHx8ICEobWV0aG9kLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXSBpbnN0YW5jZW9mIFN5bWJvbE5vZGUpIHx8XG4gICAgIShtZXRob2QucmVjZWl2ZXIgaW5zdGFuY2VvZiBDb25zdGFudFBhdGhOb2RlKSkgcmV0dXJuIGZhbHNlXG5cbiAgcmV0dXJuIG1ldGhvZC5yZWNlaXZlci5wYXJlbnQgPT0gbnVsbCAmJiBtZXRob2QucmVjZWl2ZXIuZGVsaW1pdGVyTG9jICE9IG51bGwgJiYgbWV0aG9kLnJlY2VpdmVyLm5hbWUgPT0gXCJLZXJuZWxcIiAmJlxuICAgIG1ldGhvZC5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0udW5lc2NhcGVkLnZhbHVlID09IFwiZnJlZXplXCJcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZXhpc3RpbmcgUnVieSBpZi9lbHNlIHRlcm1pbmFsIHdpdGggcmVzdHJpY3RlZCBicmFuY2ggcHJlZml4ZXMuXG4gKiBAcGFyYW0ge0lmTm9kZSB8IFVubGVzc05vZGV9IG5vZGUgLSBQcmlzbSBjb25kaXRpb25hbCBub2RlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbS9zcmMvZGVzZXJpYWxpemUuanNcIikuQ29tbWVudFtdfSBjb21tZW50cyAtIFByaXNtIGNvbW1lbnRzLlxuICogQHBhcmFtIHtSdWJ5Q29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSWZTdGF0ZW1lbnR9IFNlbWFudGljIGJyYW5jaC5cbiAqL1xuZnVuY3Rpb24gY29udmVydElmKG5vZGUsIGNvbW1lbnRzLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgY29uc3Qga2V5d29yZExvY2F0aW9uID0gbm9kZSBpbnN0YW5jZW9mIFVubGVzc05vZGUgPyBub2RlLmtleXdvcmRMb2MgOiBub2RlLmlmS2V5d29yZExvY1xuXG4gIGlmICgha2V5d29yZExvY2F0aW9uIHx8IGtleXdvcmRMb2NhdGlvbi5zdGFydE9mZnNldCAhPSBub2RlLmxvY2F0aW9uLnN0YXJ0T2Zmc2V0KSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm1vZGlmaWVyIGNvbmRpdGlvbmFsXCIsIGtleXdvcmRMb2NhdGlvblxuICAgICAgPyBwcmlzbUxvY2F0aW9uKGtleXdvcmRMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIDogbG9jYXRpb24pXG4gIH1cblxuICBpZiAobm9kZS5wcmVkaWNhdGUgaW5zdGFuY2VvZiBMb2NhbFZhcmlhYmxlUmVhZE5vZGUgJiZcbiAgICBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlLnByZWRpY2F0ZS5uYW1lKT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm9wdGlvbmFsIHRydXRoaW5lc3MgY29uZGl0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLnByZWRpY2F0ZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIFVubGVzc05vZGUgJiYgIWV4YWN0TmlsVGVzdChub2RlLnByZWRpY2F0ZSwgc291cmNlKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJ1bmxlc3MgY29uZGl0aW9uIG90aGVyIHRoYW4gYW4gZXhhY3QgbmlsPyBwcmVzZW5jZSBndWFyZFwiLCBub2RlTG9jYXRpb24obm9kZS5wcmVkaWNhdGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgY29uc3QgcHJlZGljYXRlID0gY29udmVydEV4cHJlc3Npb24obm9kZS5wcmVkaWNhdGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGNvbnN0IGNvbmRpdGlvbiA9IG5vZGUgaW5zdGFuY2VvZiBVbmxlc3NOb2RlICYmIHByZWRpY2F0ZS5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIgJiZcbiAgICBwcmVkaWNhdGUub3BlcmFuZC5raW5kID09IFwiT3B0aW9uYWxJc1ByZXNlbnRcIlxuICAgID8gcHJlZGljYXRlLm9wZXJhbmRcbiAgICA6IHByZWRpY2F0ZVxuICBpZiAobm9kZSBpbnN0YW5jZW9mIFVubGVzc05vZGUgJiYgY29uZGl0aW9uLmtpbmQgIT0gXCJPcHRpb25hbElzUHJlc2VudFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcInVubGVzcyBjb25kaXRpb24gb3RoZXIgdGhhbiBhbiBleGFjdCBuaWw/IHByZXNlbmNlIGd1YXJkXCIsIG5vZGVMb2NhdGlvbihub2RlLnByZWRpY2F0ZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgY29uc2VxdWVudENvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyl9XG4gIGNvbnN0IGFsdGVybmF0ZUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyl9XG4gIGxldCBhbHRlcm5hdGVcbiAgY29uc3Qgc3Vic2VxdWVudCA9IG5vZGUgaW5zdGFuY2VvZiBVbmxlc3NOb2RlID8gbm9kZS5lbHNlQ2xhdXNlIDogbm9kZS5zdWJzZXF1ZW50XG5cbiAgaWYgKHN1YnNlcXVlbnQpIHtcbiAgICBpZiAoc3Vic2VxdWVudCBpbnN0YW5jZW9mIEVsc2VOb2RlKSB7XG4gICAgICBhbHRlcm5hdGUgPSBjb252ZXJ0QmxvY2soc3Vic2VxdWVudC5zdGF0ZW1lbnRzLCBjb21tZW50cywgYWx0ZXJuYXRlQ29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKHN1YnNlcXVlbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH0gZWxzZSBpZiAoc3Vic2VxdWVudCBpbnN0YW5jZW9mIElmTm9kZSkge1xuICAgICAgYWx0ZXJuYXRlID0ge1xuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCbG9ja1wiKSxcbiAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihzdWJzZXF1ZW50LCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgc3RhdGVtZW50czogW2NvbnZlcnRJZihzdWJzZXF1ZW50LCBjb21tZW50cywgYWx0ZXJuYXRlQ29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSldXG4gICAgICB9XG4gICAgfSBlbHNlIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgc3Vic2VxdWVudC5jb25zdHJ1Y3Rvci5uYW1lLCBub2RlTG9jYXRpb24oc3Vic2VxdWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLihhbHRlcm5hdGUgPyB7YWx0ZXJuYXRlfSA6IHt9KSxcbiAgICBjb25kaXRpb24sXG4gICAgY29uc2VxdWVudDogY29udmVydEJsb2NrKG5vZGUuc3RhdGVtZW50cywgY29tbWVudHMsIGNvbnNlcXVlbnRDb250ZXh0LCBmaWxlbmFtZSwgc291cmNlLCBsb2NhdGlvbiksXG4gICAga2luZDogXCJJZlN0YXRlbWVudFwiLFxuICAgIGxvY2F0aW9uXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgb3JkaW5hcnkgYmxvY2stZm9ybSBSdWJ5IHByZS1jb25kaXRpb24gbG9vcC5cbiAqIEBwYXJhbSB7V2hpbGVOb2RlfSBub2RlIC0gUHJpc20gd2hpbGUgbm9kZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc20vc3JjL2Rlc2VyaWFsaXplLmpzXCIpLkNvbW1lbnRbXX0gY29tbWVudHMgLSBQcmlzbSBjb21tZW50cy5cbiAqIEBwYXJhbSB7UnVieUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLldoaWxlU3RhdGVtZW50fSBTZW1hbnRpYyBsb29wLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0V2hpbGUobm9kZSwgY29tbWVudHMsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3Qga2V5d29yZExvY2F0aW9uID0gcHJpc21Mb2NhdGlvbihub2RlLmtleXdvcmRMb2MsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUuaXNCZWdpbk1vZGlmaWVyKCkgfHwgIW5vZGUuY2xvc2luZ0xvYyB8fCBub2RlLmtleXdvcmRMb2Muc3RhcnRPZmZzZXQgIT0gbm9kZS5sb2NhdGlvbi5zdGFydE9mZnNldCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJtb2RpZmllciB3aGlsZVwiLCBrZXl3b3JkTG9jYXRpb24pXG4gIH1cbiAgY29uc3QgYm9keUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyl9XG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGJvZHk6IGNvbnZlcnRCbG9jayhub2RlLnN0YXRlbWVudHMsIGNvbW1lbnRzLCBib2R5Q29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSwgbG9jYXRpb24pLFxuICAgIGNvbmRpdGlvbjogY29udmVydEV4cHJlc3Npb24obm9kZS5wcmVkaWNhdGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHVuZGVmaW5lZCwgdHJ1ZSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiV2hpbGVTdGF0ZW1lbnRcIiksXG4gICAgbG9jYXRpb25cbiAgfSwge2tleXdvcmQ6IGtleXdvcmRMb2NhdGlvbn0pXG59XG5cbi8qKlxuICogQ29udmVydHMgdGhlIHN1cHBvcnRlZCBSdWJ5IHB1dHMgZW50cnkgcG9pbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGV9IG5vZGUgLSBQcmlzbSBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7UnVieUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUHJpbnRTdGF0ZW1lbnR9IFByaW50IHN0YXRlbWVudC5cbiAqL1xuZnVuY3Rpb24gY29udmVydFByaW50KG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoIShub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUpIHx8IG5vZGUucmVjZWl2ZXIgfHwgbm9kZS5uYW1lICE9IFwicHV0c1wiIHx8IG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggIT0gMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgbm9kZS5jb25zdHJ1Y3Rvci5uYW1lLCBsb2NhdGlvbilcbiAgfVxuXG4gIHJldHVybiB7ZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24obm9kZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLCBraW5kOiBcIlByaW50U3RhdGVtZW50XCIsIGxvY2F0aW9ufVxufVxuXG4vKipcbiAqIFBhcnNlcyBSdWJ5IGludG8gdGhlIHNoYXJlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBQYXJzZXIgaW5wdXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuc291cmNlIC0gU291cmNlIHRleHQuXG4gKiBAcGFyYW0ge3JlYWRvbmx5IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdENhcGFiaWxpdHlEZWNsYXJhdGlvbltdfSBbaW5wdXQuY2FwYWJpbGl0aWVzXSAtIENvbXBpbGVyLWF1dGhvcml6ZWQgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHt7aXNFbnRyeTogYm9vbGVhbiwgY2xhc3Nlcz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+LCBmdW5jdGlvbnM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb24+LCByZWNvcmRzOiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj4sIGVycm9ycz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fX0gW2lucHV0LnByb2dyYW1dIC0gUmVzb2x2ZWQgcHJvZ3JhbSBpbXBvcnRzIGFuZCBlbnRyeSByb2xlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBTZW1hbnRpYyBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVJ1Ynkoe2NhcGFiaWxpdGllcyA9IFtdLCBmaWxlbmFtZSwgc291cmNlLCBwcm9ncmFtfSkge1xuICBjb25zdCByZXN1bHQgPSBwYXJzZVByaXNtKHNvdXJjZSwge2ZpbGVwYXRoOiBmaWxlbmFtZX0pXG5cbiAgaWYgKHJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGVycm9yID0gcmVzdWx0LmVycm9yc1swXVxuICAgIGNvbnN0IGxvY2F0aW9uID0gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBlcnJvci5sb2NhdGlvbi5zdGFydE9mZnNldCwgZXJyb3IubG9jYXRpb24uc3RhcnRPZmZzZXQgKyBlcnJvci5sb2NhdGlvbi5sZW5ndGgpXG5cbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtjb2RlOiBcIlBBUlNFX0VSUk9SXCIsIGxhbmd1YWdlOiBcInJ1YnlcIiwgbG9jYXRpb24sIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2V9KVxuICB9XG5cbiAgaWYgKCEocmVzdWx0LnZhbHVlIGluc3RhbmNlb2YgUHJvZ3JhbU5vZGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJQcmlzbSByZXR1cm5lZCBhIG5vbi1wcm9ncmFtIHJvb3QuXCIpXG5cbiAgbGV0IGJvZHkgPSB0YXNrMDM0UnVieUJvZHkocmVzdWx0LnZhbHVlLnN0YXRlbWVudHMuYm9keSwgcmVzdWx0LmNvbW1lbnRzLCBjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKHByb2dyYW0pIHtcbiAgICBpbnNwZWN0UnVieU1vZHVsZSh7ZmlsZW5hbWUsIHNvdXJjZX0pXG4gICAgY29uc3QgbW9kdWxlTm9kZSA9IC8qKiBAdHlwZSB7TW9kdWxlTm9kZX0gKi8gKGJvZHkuZmluZCgobm9kZSkgPT4gbm9kZSBpbnN0YW5jZW9mIE1vZHVsZU5vZGUpKVxuXG4gICAgYm9keSA9IG1vZHVsZU5vZGUuYm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlID8gbW9kdWxlTm9kZS5ib2R5LmJvZHkgOiBbXVxuICAgIGNvbnN0IG1vZHVsZUZ1bmN0aW9uTm9kZXMgPSBib2R5LmZpbHRlcihpc01vZHVsZUZ1bmN0aW9uTWFya2VyKVxuICAgIGNvbnN0IGRlZmluaXRpb25zID0gYm9keS5maWx0ZXIoKG5vZGUpID0+IG5vZGUgaW5zdGFuY2VvZiBEZWZOb2RlKVxuXG4gICAgaWYgKGRlZmluaXRpb25zLmxlbmd0aCA+IDAgJiYgKG1vZHVsZUZ1bmN0aW9uTm9kZXMubGVuZ3RoICE9IDEgfHwgYm9keS5pbmRleE9mKG1vZHVsZUZ1bmN0aW9uTm9kZXNbMF0pID4gYm9keS5pbmRleE9mKGRlZmluaXRpb25zWzBdKSkpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJtb2R1bGUgZnVuY3Rpb25zIG91dHNpZGUgb25lIGxlYWRpbmcgbW9kdWxlX2Z1bmN0aW9uIHByb2ZpbGVcIixcbiAgICAgICAgbm9kZUxvY2F0aW9uKG1vZHVsZUZ1bmN0aW9uTm9kZXNbMV0gPz8gZGVmaW5pdGlvbnNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBib2R5ID0gYm9keS5maWx0ZXIoKG5vZGUpID0+ICFpc01vZHVsZUZ1bmN0aW9uTWFya2VyKG5vZGUpICYmICFydWJ5VmlzaWJpbGl0eU1hcmtlcihub2RlKSlcbiAgfVxuICBjb25zdCBjbGFzc05vZGVzID0gYm9keS5maWx0ZXIoKG5vZGUpID0+IG5vZGUgaW5zdGFuY2VvZiBDbGFzc05vZGUpXG4gIGNvbnN0IGVycm9yTm9kZXMgPSBjbGFzc05vZGVzLmZpbHRlcigobm9kZSkgPT4gbm9kZS5zdXBlcmNsYXNzIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSAmJiBub2RlLnN1cGVyY2xhc3MubmFtZSA9PSBcIlN0YW5kYXJkRXJyb3JcIilcbiAgY29uc3QgcmVmZXJlbmNlQ2xhc3NOb2RlcyA9IGNsYXNzTm9kZXMuZmlsdGVyKChub2RlKSA9PiAhZXJyb3JOb2Rlcy5pbmNsdWRlcyhub2RlKSAmJiBub2RlLmJvZHkgaW5zdGFuY2VvZiBTdGF0ZW1lbnRzTm9kZSAmJlxuICAgIG5vZGUuYm9keS5ib2R5Lmxlbmd0aCA+IDAgJiYgbm9kZS5ib2R5LmJvZHkuZXZlcnkoKG1lbWJlcikgPT4gbWVtYmVyIGluc3RhbmNlb2YgRGVmTm9kZSkpXG4gIGNvbnN0IHJlY29yZE5vZGVzID0gY2xhc3NOb2Rlcy5maWx0ZXIoKG5vZGUpID0+ICFlcnJvck5vZGVzLmluY2x1ZGVzKG5vZGUpICYmICFyZWZlcmVuY2VDbGFzc05vZGVzLmluY2x1ZGVzKG5vZGUpKVxuICBjb25zdCBlcnJvckRlY2xhcmF0aW9ucyA9IGVycm9yTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT4gKHtcbiAgICBpZDogYGVycm9yOiR7aW5kZXh9YCxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvckRlY2xhcmF0aW9uXCIpLFxuICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgbmFtZTogbm9kZS5uYW1lXG4gIH0pKVxuICBjb25zdCByZWNvcmREZWNsYXJhdGlvbnMgPSByZWNvcmROb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgaWQgPSBgcmVjb3JkOiR7aW5kZXh9YFxuICAgIGNvbnN0IGRvY3VtZW50ZWQgPSB0eXBlQ29tbWVudHMocmVzdWx0LmNvbW1lbnRzLCBub2RlLCBmaWxlbmFtZSwgc291cmNlLCBpZClcblxuICAgIGlmIChkb2N1bWVudGVkLnBhcmFtZXRlcnMuc2l6ZSB8fCBkb2N1bWVudGVkLnJldHVyblR5cGUpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJmdW5jdGlvbiB0eXBlIGFubm90YXRpb24gb24gcmVjb3JkIGRlY2xhcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZmllbGRzOiBbXSxcbiAgICAgIGlkLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkRGVjbGFyYXRpb25cIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbmFtZTogbm9kZS5uYW1lLFxuICAgICAgLi4uKGRvY3VtZW50ZWQudHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IGRvY3VtZW50ZWQudHlwZVBhcmFtZXRlcnN9IDoge30pXG4gICAgfVxuICB9KVxuICBjb25zdCBjbGFzc0RlY2xhcmF0aW9ucyA9IHJlZmVyZW5jZUNsYXNzTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT4gKHtcbiAgICBjb25zdHJ1Y3RvcjogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Db25zdHJ1Y3RvckRlY2xhcmF0aW9ufSAqLyAoe30pLCBmaWVsZHM6IFtdLCBpZDogYGNsYXNzOiR7aW5kZXh9YCxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDbGFzc0RlY2xhcmF0aW9uXCIpLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCBtZXRob2RzOiBbXSwgbmFtZTogbm9kZS5uYW1lXG4gIH0pKVxuICBjb25zdCByZW9wZW5lZCA9IGNsYXNzRGVjbGFyYXRpb25zLmZpbmQoKGRlY2xhcmF0aW9uLCBpbmRleCkgPT5cbiAgICBjbGFzc0RlY2xhcmF0aW9ucy5maW5kSW5kZXgoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT0gZGVjbGFyYXRpb24ubmFtZSkgIT0gaW5kZXgpXG5cbiAgaWYgKHJlb3BlbmVkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIGByZWZlcmVuY2UgY2xhc3MgcmVvcGVuaW5nICcke3Jlb3BlbmVkLm5hbWV9J2AsIHJlb3BlbmVkLmxvY2F0aW9uKVxuICBjb25zdCByZWNvcmROYW1lcyA9IC8qKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkludGVyZmFjZURlY2xhcmF0aW9uPn0gKi8gKFxuICAgIG5ldyBNYXAocHJvZ3JhbT8ucmVjb3JkcyA/PyBbXSkpXG4gIGZvciAoY29uc3QgW25hbWUsIGRlY2xhcmF0aW9uXSBvZiBwcm9ncmFtPy5jbGFzc2VzID8/IFtdKSByZWNvcmROYW1lcy5zZXQobmFtZSwgZGVjbGFyYXRpb24pXG4gIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgY2FwYWJpbGl0aWVzLmZsYXRNYXAoKHtyZXNvdXJjZXN9KSA9PiByZXNvdXJjZXMpKSByZWNvcmROYW1lcy5zZXQocmVzb3VyY2UubmFtZSwgcmVzb3VyY2UpXG4gIGNvbnN0IGVycm9yTmFtZXMgPSBuZXcgTWFwKHByb2dyYW0/LmVycm9ycyA/PyBbXSlcbiAgZm9yIChjb25zdCBmYWlsdXJlIG9mIGNhcGFiaWxpdGllcy5mbGF0TWFwKCh7ZmFpbHVyZXN9KSA9PiBmYWlsdXJlcykpIHtcbiAgICBlcnJvck5hbWVzLnNldChmYWlsdXJlLm5hbWUsIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKGZhaWx1cmUpKSlcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGVycm9yRGVjbGFyYXRpb25zKSBlcnJvck5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgY29uc3QgZXJyb3JzQnlJZCA9IG5ldyBNYXAoWy4uLmVycm9yTmFtZXMudmFsdWVzKCldLm1hcCgoZGVjbGFyYXRpb24pID0+IFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgY29uc3QgZXJyb3JzID0gZXJyb3JOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiBjb252ZXJ0UnVieUVycm9yKG5vZGUsIGVycm9yRGVjbGFyYXRpb25zW2luZGV4XSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgcmVjb3JkRGVjbGFyYXRpb25zKSByZWNvcmROYW1lcy5zZXQoZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyYXRpb24pXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgY2xhc3NEZWNsYXJhdGlvbnMpIHJlY29yZE5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgY29uc3QgcmVjb3Jkc0J5SWQgPSBuZXcgTWFwKHJlY29yZERlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGNsYXNzZXNCeUlkID0gbmV3IE1hcChbXG4gICAgLi4uWy4uLnByb2dyYW0/LmNsYXNzZXM/LnZhbHVlcygpID8/IFtdXS5tYXAoKGRlY2xhcmF0aW9uKSA9PiAvKiogQHR5cGUge1tzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb25dfSAqLyAoXG4gICAgICBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpLFxuICAgIC4uLmNsYXNzRGVjbGFyYXRpb25zLm1hcCgoZGVjbGFyYXRpb24pID0+IC8qKiBAdHlwZSB7W3N0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbl19ICovIChcbiAgICAgIFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgXSlcbiAgY29uc3QgZnVuY3Rpb25Ob2RlcyA9IGJvZHkuZmlsdGVyKChub2RlKSA9PiBub2RlIGluc3RhbmNlb2YgRGVmTm9kZSlcbiAgY29uc3QgYWxsb3dzQnVpbHRpbk91dHB1dCA9IGNhcGFiaWxpdGllcy5zb21lKCh7b3BlcmF0aW9uc30pID0+IG9wZXJhdGlvbnMuc29tZSgoe25hbWV9KSA9PiBuYW1lID09IFwidjFfd3JpdGVfbGluZVwiKSlcbiAgY29uc3Qgc2lnbmF0dXJlcyA9IGZ1bmN0aW9uTm9kZXMubWFwKChub2RlLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0RnVuY3Rpb25TaWduYXR1cmUobm9kZSwgcmVzdWx0LmNvbW1lbnRzLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgYGZ1bmN0aW9uOiR7aW5kZXh9YCwgYWxsb3dzQnVpbHRpbk91dHB1dCkpXG4gIGNvbnN0IGZ1bmN0aW9uU2lnbmF0dXJlcyA9IG5ldyBNYXAoWy4uLmNhcGFiaWxpdHlGdW5jdGlvblNpZ25hdHVyZXMoY2FwYWJpbGl0aWVzLCBtb2R1bGVMb2NhdGlvbihmaWxlbmFtZSwgc291cmNlKSksXG4gICAgLi4uKHByb2dyYW0/LmZ1bmN0aW9ucyA/PyBbXSldLm1hcCgoW2xvY2FsTmFtZSwgZGVjbGFyYXRpb25dKSA9PiBbbG9jYWxOYW1lLCB7XG4gICAgbG9jYXRpb246IGRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgIG5hbWU6IGxvY2FsTmFtZSxcbiAgICBuYW1lTG9jYXRpb246IGRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgIHBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogZGVjbGFyYXRpb24ucmV0dXJuVHlwZSxcbiAgICAuLi4oZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9XSkpXG4gIGZvciAoY29uc3Qgc2lnbmF0dXJlIG9mIHNpZ25hdHVyZXMpIGZ1bmN0aW9uU2lnbmF0dXJlcy5zZXQoc2lnbmF0dXJlLm5hbWUsIHNpZ25hdHVyZSlcbiAgY29uc3QgcmVjb3JkcyA9IHJlY29yZE5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+XG4gICAgY29udmVydFJ1YnlSZWNvcmQobm9kZSwgcmVjb3JkRGVjbGFyYXRpb25zW2luZGV4XSwgcmVjb3JkTmFtZXMsIHJlc3VsdC5jb21tZW50cywgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGNsYXNzZXMgPSByZWZlcmVuY2VDbGFzc05vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+IGNvbnZlcnRSdWJ5UmVmZXJlbmNlQ2xhc3Mobm9kZSwgY2xhc3NEZWNsYXJhdGlvbnNbaW5kZXhdLFxuICAgIHJlY29yZE5hbWVzLCByZWNvcmRzQnlJZCwgY2xhc3Nlc0J5SWQsIGZ1bmN0aW9uU2lnbmF0dXJlcywgZXJyb3JOYW1lcywgZXJyb3JzQnlJZCwgcmVzdWx0LmNvbW1lbnRzLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgZnVuY3Rpb25zID0gZnVuY3Rpb25Ob2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PlxuICAgIGNvbnZlcnRGdW5jdGlvbihub2RlLCBzaWduYXR1cmVzW2luZGV4XSwgZnVuY3Rpb25TaWduYXR1cmVzLCByZWNvcmROYW1lcywgcmVjb3Jkc0J5SWQsIGNsYXNzZXNCeUlkLCBlcnJvck5hbWVzLCBlcnJvcnNCeUlkLFxuICAgICAgcmVzdWx0LmNvbW1lbnRzLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgZW50cnlOb2RlcyA9IGJvZHkuZmlsdGVyKChub2RlKSA9PiAhKG5vZGUgaW5zdGFuY2VvZiBEZWZOb2RlKSAmJiAhKG5vZGUgaW5zdGFuY2VvZiBDbGFzc05vZGUpKVxuICBjb25zdCBsb2NhdGlvbiA9IG1vZHVsZUxvY2F0aW9uKGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKHByb2dyYW0gJiYgIXByb2dyYW0uaXNFbnRyeSAmJiBlbnRyeU5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwidG9wLWxldmVsIHNpZGUgZWZmZWN0IG91dHNpZGUgdGhlIHNlbGVjdGVkIGVudHJ5IG1vZHVsZVwiLCBub2RlTG9jYXRpb24oZW50cnlOb2Rlc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgZmlyc3RFbnRyeSA9IGVudHJ5Tm9kZXNbMF1cbiAgY29uc3QgZW50cnlMb2NhdGlvbiA9IGZpcnN0RW50cnkgPyBsb2NhdGlvbkZyb21PZmZzZXRzKFxuICAgIGZpbGVuYW1lLFxuICAgIHNvdXJjZSxcbiAgICB1dGY4Qnl0ZU9mZnNldFRvVXRmMTZPZmZzZXQoc291cmNlLCBmaXJzdEVudHJ5LmxvY2F0aW9uLnN0YXJ0T2Zmc2V0KSxcbiAgICB1dGY4Qnl0ZU9mZnNldFRvVXRmMTZPZmZzZXQoXG4gICAgICBzb3VyY2UsXG4gICAgICAoZW50cnlOb2Rlcy5hdCgtMSk/LmxvY2F0aW9uLnN0YXJ0T2Zmc2V0ID8/IDApICsgKGVudHJ5Tm9kZXMuYXQoLTEpPy5sb2NhdGlvbi5sZW5ndGggPz8gMClcbiAgICApXG4gICkgOiBsb2NhdGlvblxuICBjb25zdCBlbnRyeUNvbnRleHQgPSB7YmluZGluZ3M6IG5ldyBNYXAoKSwgY2xhc3NlczogY2xhc3Nlc0J5SWQsIGVycm9yTmFtZXMsIGVycm9yczogZXJyb3JzQnlJZCwgZnVuY3Rpb25zOiBmdW5jdGlvblNpZ25hdHVyZXMsXG4gICAgb3JkZXJlZE1hcERlY2xhcmF0aW9uczogb3JkZXJlZE1hcERlY2xhcmF0aW9uc0ZvclJ1YnkoZW50cnlOb2RlcyksIHJlY29yZE5hbWVzLCByZWNvcmRzOiByZWNvcmRzQnlJZH1cbiAgY29uc3QgZW50cnlCbG9jayA9IHtcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCbG9ja1wiKSxcbiAgICBsb2NhdGlvbjogZW50cnlMb2NhdGlvbixcbiAgICBzdGF0ZW1lbnRzOiBlbnRyeU5vZGVzLm1hcCgoc3RhdGVtZW50KSA9PiBjb252ZXJ0U3RhdGVtZW50KHN0YXRlbWVudCwgcmVzdWx0LmNvbW1lbnRzLCBlbnRyeUNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgaWYgKCFwcm9ncmFtICYmIGZ1bmN0aW9ucy5sZW5ndGggPT0gMCAmJiBjYXBhYmlsaXRpZXMubGVuZ3RoID09IDAgJiYgIWJsb2NrUmVmZXJlbmNlc1Byb3RlY3RlZEVudHJ5KGVudHJ5QmxvY2spKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBcIm1vZHVsZSB3aXRob3V0IGEgZnVuY3Rpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBlbnRyeVBvaW50OiB7XG4gICAgICBib2R5OiBlbnRyeUJsb2NrLFxuICAgICAga2luZDogXCJFbnRyeVBvaW50XCIsXG4gICAgICBsb2NhdGlvbjogZW50cnlMb2NhdGlvblxuICAgIH0sXG4gICAgZnVuY3Rpb25zLFxuICAgIGtpbmQ6IFwiTW9kdWxlXCIsXG4gICAgbG9jYXRpb24sXG4gICAgLi4uKGNsYXNzZXMubGVuZ3RoID4gMCA/IHtjbGFzc2VzfSA6IHt9KSxcbiAgICAuLi4oZXJyb3JzLmxlbmd0aCA+IDAgPyB7ZXJyb3JzfSA6IHt9KSxcbiAgICAuLi4ocmVjb3Jkcy5sZW5ndGggPiAwID8ge3JlY29yZHN9IDoge30pXG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmVzIGV4YWN0IHByb3RlY3RlZCBSdWJ5IHByb2JlIHN1cHBvcnQgYmVmb3JlIHBvcnRhYmxlIGNvbnZlcnNpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGVbXX0gYm9keSAtIFBhcnNlZCB0b3AtbGV2ZWwgbm9kZXMuXG4gKiBAcGFyYW0ge3tsb2NhdGlvbjoge3N0YXJ0T2Zmc2V0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyfX1bXX0gY29tbWVudHMgLSBQYXJzZXIgY29tbWVudHMuXG4gKiBAcGFyYW0ge3JlYWRvbmx5IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdENhcGFiaWxpdHlEZWNsYXJhdGlvbltdfSBjYXBhYmlsaXRpZXMgLSBBdXRob3JpemVkIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZVtdfSBQb3J0YWJsZSBub2Rlcy5cbiAqL1xuZnVuY3Rpb24gdGFzazAzNFJ1YnlCb2R5KGJvZHksIGNvbW1lbnRzLCBjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKCFpc1Rhc2swMzRSZXNvdXJjZVByb2JlKGNhcGFiaWxpdGllcykpIHJldHVybiBib2R5XG4gIGNvbnN0IG1hcmtlciA9IGNvbW1lbnRzLmZpbmQoKGNvbW1lbnQpID0+XG4gICAgc291cmNlLnNsaWNlKGNvbW1lbnQubG9jYXRpb24uc3RhcnRPZmZzZXQsIGNvbW1lbnQubG9jYXRpb24uc3RhcnRPZmZzZXQgKyBjb21tZW50LmxvY2F0aW9uLmxlbmd0aCkgPT1cbiAgICAgIFwiIyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnRcIilcblxuICBpZiAoIW1hcmtlcikgcmV0dXJuIGJvZHlcbiAgaWYgKCFoYXNFeGFjdEVmZmVjdFN1cHBvcnQoc291cmNlLCBcInJ1YnlcIikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibWFsZm9ybWVkIHByb3RlY3RlZCBUYXNrIDAzNCBzdXBwb3J0XCIsIG5vZGVMb2NhdGlvbihib2R5WzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBleHBlY3RlZCA9IFtcbiAgICBbXCJDbGFzc05vZGVcIiwgXCJQcm9iZU9wZXJhdGlvbkZhaWx1cmVcIl0sIFtcIkNsYXNzTm9kZVwiLCBcIlByb2JlQWNxdWlyZUZhaWx1cmVcIl0sIFtcIkNsYXNzTm9kZVwiLCBcIlByb2JlUmVhZEZhaWx1cmVcIl0sXG4gICAgW1wiQ2xhc3NOb2RlXCIsIFwiUHJvYmVDbG9zZUZhaWx1cmVcIl0sIFtcIkNsYXNzTm9kZVwiLCBcIlByb2JlUmVzb3VyY2VDbG9zZWRcIl0sIFtcIkNsYXNzTm9kZVwiLCBcIlByb2JlUmVzb3VyY2VcIl0sXG4gICAgW1wiR2xvYmFsVmFyaWFibGVXcml0ZU5vZGVcIiwgXCIkX19zZW1hbnRpZm9sZF90YXNrMDM0X3RyYWNlXCJdLCBbXCJEZWZOb2RlXCIsIFwicHJvYmVFZmZlY3RcIl0sIFtcIkRlZk5vZGVcIiwgXCJwcm9iZUFjcXVpcmVcIl0sXG4gICAgW1wiRGVmTm9kZVwiLCBcInByb2JlUmVhZFwiXSwgW1wiRGVmTm9kZVwiLCBcInByb2JlQ2xvc2VcIl0sIFtcIkRlZk5vZGVcIiwgXCJwcm9iZVRyYWNlXCJdXG4gIF1cbiAgY29uc3QgbWF0Y2hlcyA9IGV4cGVjdGVkLmV2ZXJ5KChba2luZCwgbmFtZV0sIGluZGV4KSA9PiBib2R5W2luZGV4XT8uY29uc3RydWN0b3IubmFtZSA9PSBraW5kICYmIFJlZmxlY3QuZ2V0KGJvZHlbaW5kZXhdLCBcIm5hbWVcIikgPT0gbmFtZSlcbiAgY29uc3QgZW5kID0gY29tbWVudHMuZmluZCgoY29tbWVudCkgPT5cbiAgICBzb3VyY2Uuc2xpY2UoY29tbWVudC5sb2NhdGlvbi5zdGFydE9mZnNldCwgY29tbWVudC5sb2NhdGlvbi5zdGFydE9mZnNldCArIGNvbW1lbnQubG9jYXRpb24ubGVuZ3RoKSA9PVxuICAgICAgXCIjIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydC1lbmRcIilcblxuICBpZiAoIW1hdGNoZXMgfHwgIWVuZCB8fCBlbmQubG9jYXRpb24uc3RhcnRPZmZzZXQgPCBib2R5W2V4cGVjdGVkLmxlbmd0aCAtIDFdLmxvY2F0aW9uLnN0YXJ0T2Zmc2V0ICsgYm9keVtleHBlY3RlZC5sZW5ndGggLSAxXS5sb2NhdGlvbi5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibWFsZm9ybWVkIHByb3RlY3RlZCBUYXNrIDAzNCBzdXBwb3J0XCIsIG5vZGVMb2NhdGlvbihib2R5WzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICByZXR1cm4gYm9keS5zbGljZShleHBlY3RlZC5sZW5ndGgpXG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGNhbm9uaWNhbCBwYXJzZXItb3duZWQgUnVieSBtb2R1bGUgYW5kIGxpdGVyYWwgcmVxdWlyZS1yZWxhdGl2ZSBlZGdlcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5maWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5zb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHt7aW1wb3J0czoge2ltcG9ydGVkTmFtZTogc3RyaW5nLCBsb2NhbE5hbWU6IHN0cmluZywgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYW1lc3BhY2U6IHRydWUsIHBhdGhMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNwZWNpZmllcjogc3RyaW5nLCBzdGRsaWJDYW5kaWRhdGU/OiB0cnVlLCB0eXBlT25seTogZmFsc2V9W10sIGV4cG9ydHM6IHtleHBvcnRlZE5hbWU6IHN0cmluZywgbG9jYWxOYW1lOiBzdHJpbmcsIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgdHlwZU9ubHk6IGZhbHNlfVtdLCBuYXRpdmVOYW1lOiBzdHJpbmcsIG5hdGl2ZVJlZmVyZW5jZXM6IHtmb3JtOiBcImNvbnN0cnVjdG9yLWNhbGxcIiB8IFwicmVjZWl2ZXItY2FsbFwiIHwgXCJ1bnF1YWxpZmllZC1jYWxsXCIsIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgbmF0aXZlTW9kdWxlOiBzdHJpbmcsIHN5bWJvbDogc3RyaW5nfVtdfX0gUGFyc2VyLW93bmVkIFJ1YnkgbW9kdWxlIGhlYWRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3BlY3RSdWJ5TW9kdWxlKHtmaWxlbmFtZSwgc291cmNlfSkge1xuICBjb25zdCByZXN1bHQgPSBwYXJzZVByaXNtKHNvdXJjZSwge2ZpbGVwYXRoOiBmaWxlbmFtZX0pXG5cbiAgaWYgKHJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGVycm9yID0gcmVzdWx0LmVycm9yc1swXVxuICAgIGNvbnN0IGxvY2F0aW9uID0gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBlcnJvci5sb2NhdGlvbi5zdGFydE9mZnNldCwgZXJyb3IubG9jYXRpb24uc3RhcnRPZmZzZXQgKyBlcnJvci5sb2NhdGlvbi5sZW5ndGgpXG5cbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtjb2RlOiBcIlBBUlNFX0VSUk9SXCIsIGxhbmd1YWdlOiBcInJ1YnlcIiwgbG9jYXRpb24sIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2V9KVxuICB9XG4gIGlmICghKHJlc3VsdC52YWx1ZSBpbnN0YW5jZW9mIFByb2dyYW1Ob2RlKSkgdGhyb3cgbmV3IEVycm9yKFwiUHJpc20gcmV0dXJuZWQgYSBub24tcHJvZ3JhbSByb290LlwiKVxuICBjb25zdCBib2R5ID0gcmVzdWx0LnZhbHVlLnN0YXRlbWVudHMuYm9keVxuICBjb25zdCBtb2R1bGVzID0gYm9keS5maWx0ZXIoKG5vZGUpID0+IG5vZGUgaW5zdGFuY2VvZiBNb2R1bGVOb2RlKVxuICBjb25zdCBkeW5hbWljUmVxdWlyZSA9IGJvZHkuZmluZChpc0R5bmFtaWNTdGRsaWJSZXF1aXJlKVxuXG4gIGlmIChkeW5hbWljUmVxdWlyZSkge1xuICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgICAgY29kZTogXCJTVERMSUJfRkFDQURFX0RZTkFNSUNfUkVGRVJFTkNFXCIsXG4gICAgICBsYW5ndWFnZTogXCJydWJ5XCIsXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGR5bmFtaWNSZXF1aXJlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG1lc3NhZ2U6IFwiRHluYW1pYyByZXF1aXJlIGNhbm5vdCBwcm92ZSBhIHN0YW5kYXJkLWxpYnJhcnkgZmFjYWRlIGlkZW50aXR5LlwiXG4gICAgfSlcbiAgfVxuICB2YWxpZGF0ZVRhc2swMzdOYXRpdmVBdHRlbXB0cyhib2R5LCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBpbnZhbGlkID0gYm9keS5maW5kKChub2RlKSA9PiAhKG5vZGUgaW5zdGFuY2VvZiBNb2R1bGVOb2RlKSAmJiAhaXNSZXF1aXJlUmVsYXRpdmUobm9kZSkgJiYgIWlzU3RkbGliUmVxdWlyZShub2RlKSlcblxuICBpZiAobW9kdWxlcy5sZW5ndGggIT0gMSB8fCAhKG1vZHVsZXNbMF0uY29uc3RhbnRQYXRoIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSkgfHwgaW52YWxpZCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcInJ1YnlcIiwgXCJvbmUgc2ltcGxlIG1vZHVsZSB3aXRoIGxpdGVyYWwgcmVxdWlyZV9yZWxhdGl2ZSBkZWNsYXJhdGlvbnNcIixcbiAgICAgIG5vZGVMb2NhdGlvbihpbnZhbGlkID8/IG1vZHVsZXNbMV0gPz8gbW9kdWxlc1swXSA/PyByZXN1bHQudmFsdWUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGltcG9ydHMgPSBib2R5LmZpbHRlcigobm9kZSkgPT4gaXNSZXF1aXJlUmVsYXRpdmUobm9kZSkgfHwgaXNTdGRsaWJSZXF1aXJlKG5vZGUpKS5tYXAoKG5vZGUpID0+IHtcbiAgICBjb25zdCBjYWxsID0gLyoqIEB0eXBlIHtDYWxsTm9kZX0gKi8gKG5vZGUpXG4gICAgY29uc3QgYXJndW1lbnQgPSAvKiogQHR5cGUge1N0cmluZ05vZGV9ICovIChjYWxsLmFyZ3VtZW50c18/LmFyZ3VtZW50c19bMF0pXG4gICAgY29uc3Qgc3RkbGliQ2FuZGlkYXRlID0gaXNTdGRsaWJSZXF1aXJlKGNhbGwpXG5cbiAgICBpZiAoIWFyZ3VtZW50LnVuZXNjYXBlZC52YWxpZEVuY29kaW5nIHx8IGFyZ3VtZW50LnVuZXNjYXBlZC5lbmNvZGluZyAhPSBcInV0Zi04XCIgfHwgYXJndW1lbnQuaXNGb3JjZWRCaW5hcnlFbmNvZGluZygpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIFwibm9uLVVURi04IHJlcXVpcmVfcmVsYXRpdmUgcGF0aFwiLCBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpbXBvcnRlZE5hbWU6IFwiKlwiLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSW1wb3J0XCIpLFxuICAgICAgbG9jYWxOYW1lOiBcIlwiLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihjYWxsLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5hbWVzcGFjZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKHRydWUpLFxuICAgICAgcGF0aExvY2F0aW9uOiBub2RlTG9jYXRpb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgc3BlY2lmaWVyOiBhcmd1bWVudC51bmVzY2FwZWQudmFsdWUsXG4gICAgICAuLi4oc3RkbGliQ2FuZGlkYXRlID8ge3N0ZGxpYkNhbmRpZGF0ZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKHRydWUpfSA6IHt9KSxcbiAgICAgIHR5cGVPbmx5OiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpXG4gICAgfVxuICB9KVxuICBjb25zdCBtb2R1bGVCb2R5ID0gbW9kdWxlc1swXS5ib2R5IGluc3RhbmNlb2YgU3RhdGVtZW50c05vZGUgPyBtb2R1bGVzWzBdLmJvZHkuYm9keSA6IFtdXG4gIGNvbnN0IHZpc2liaWxpdHkgPSBuZXcgTWFwKClcblxuICBmb3IgKGNvbnN0IG5vZGUgb2YgbW9kdWxlQm9keSkge1xuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSkgfHwgIVtcInByaXZhdGVfY2xhc3NfbWV0aG9kXCIsIFwicHJpdmF0ZV9jb25zdGFudFwiXS5pbmNsdWRlcyhub2RlLm5hbWUpKSBjb250aW51ZVxuICAgIGNvbnN0IG1hcmtlciA9IHJ1YnlWaXNpYmlsaXR5TWFya2VyKG5vZGUpXG5cbiAgICBpZiAoIW1hcmtlcikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwicnVieVwiLCBgbWFsZm9ybWVkICR7bm9kZS5uYW1lfWAsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBpZiAodmlzaWJpbGl0eS5oYXMobWFya2VyLm5hbWUpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIGBkdXBsaWNhdGUgdmlzaWJpbGl0eSBtYXJrZXIgZm9yICcke21hcmtlci5uYW1lfSdgLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBtb2R1bGVCb2R5LmZpbmQoKGNhbmRpZGF0ZSkgPT4gbWFya2VyLmtpbmQgPT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGNhbmRpZGF0ZSBpbnN0YW5jZW9mIERlZk5vZGUgJiYgY2FuZGlkYXRlLm5hbWUgPT0gbWFya2VyLm5hbWVcbiAgICAgIDogY2FuZGlkYXRlIGluc3RhbmNlb2YgQ2xhc3NOb2RlICYmIGNhbmRpZGF0ZS5uYW1lID09IG1hcmtlci5uYW1lKVxuXG4gICAgaWYgKCFkZWNsYXJhdGlvbiB8fCBtb2R1bGVCb2R5LmluZGV4T2YoZGVjbGFyYXRpb24pID4gbW9kdWxlQm9keS5pbmRleE9mKG5vZGUpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJydWJ5XCIsIGB2aXNpYmlsaXR5IG1hcmtlciB3aXRob3V0IGFuIGVhcmxpZXIgJHttYXJrZXIua2luZH1gLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIHZpc2liaWxpdHkuc2V0KG1hcmtlci5uYW1lLCBtYXJrZXIua2luZClcbiAgfVxuICBjb25zdCBleHBvcnRzID0gbW9kdWxlQm9keS5mbGF0TWFwKChub2RlKSA9PiB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBEZWZOb2RlIHx8IG5vZGUgaW5zdGFuY2VvZiBDbGFzc05vZGUpIHtcbiAgICAgIGNvbnN0IGtpbmQgPSBub2RlIGluc3RhbmNlb2YgRGVmTm9kZSA/IFwiZnVuY3Rpb25cIiA6IG5vZGUuYm9keSBpbnN0YW5jZW9mIFN0YXRlbWVudHNOb2RlICYmIG5vZGUuYm9keS5ib2R5Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgbm9kZS5ib2R5LmJvZHkuZXZlcnkoKG1lbWJlcikgPT4gbWVtYmVyIGluc3RhbmNlb2YgRGVmTm9kZSkgPyBcImNsYXNzXCIgOiBcInJlY29yZFwiXG5cbiAgICAgIGlmICh2aXNpYmlsaXR5LmdldChub2RlLm5hbWUpID09IGtpbmQpIHJldHVybiBbXVxuICAgICAgcmV0dXJuIFt7XG4gICAgICAgIGV4cG9ydGVkTmFtZTogbm9kZS5uYW1lLFxuICAgICAgICBsb2NhbE5hbWU6IG5vZGUubmFtZSxcbiAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlIGluc3RhbmNlb2YgQ2xhc3NOb2RlID8gbm9kZS5jb25zdGFudFBhdGggOiBub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgc3ltYm9sS2luZDogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0RlY2xhcmF0aW9uS2luZH0gKi8gKGtpbmQpLFxuICAgICAgICB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKVxuICAgICAgfV1cbiAgICB9XG4gICAgcmV0dXJuIFtdXG4gIH0pXG4gIGNvbnN0IG5hdGl2ZVJlZmVyZW5jZXMgPSBydWJ5TmF0aXZlUmVmZXJlbmNlcyhtb2R1bGVzWzBdLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIHJldHVybiB7ZXhwb3J0cywgaW1wb3J0cywgbmF0aXZlTmFtZTogbW9kdWxlc1swXS5uYW1lLCBuYXRpdmVSZWZlcmVuY2VzfVxufVxuXG4vKipcbiAqIFJlamVjdHMgcGFyc2VyLXByb3ZlZCBhdHRlbXB0cyB0byB1c2Ugb3IgbXV0YXRlIHRoZSBib3VuZGVkIHNvY2tldCBmYWNhZGUgb3V0c2lkZSBpdHMgZXhhY3Qgc3VyZmFjZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZVtdfSBib2R5IC0gUHJpc20gcHJvZ3JhbSBib2R5LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVRhc2swMzdOYXRpdmVBdHRlbXB0cyhib2R5LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGFjdGl2ZSA9IGJvZHkuc29tZSgobm9kZSkgPT4gaXNTdGRsaWJSZXF1aXJlKG5vZGUpICYmIG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJlxuICAgIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzX1swXSBpbnN0YW5jZW9mIFN0cmluZ05vZGUgJiYgbm9kZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0udW5lc2NhcGVkLnZhbHVlID09IFwic29ja2V0XCIpXG4gIGNvbnN0IHJlb3BlbmVkID0gYm9keS5maW5kKChub2RlKSA9PiBub2RlIGluc3RhbmNlb2YgQ2xhc3NOb2RlICYmIG5vZGUubmFtZSA9PSBcIlRDUFNvY2tldFwiKVxuXG4gIGlmIChhY3RpdmUgJiYgcmVvcGVuZWQpIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgIGNvZGU6IFwiU1RETElCX0ZBQ0FERV9SRU9QRU5FRFwiLFxuICAgIGxhbmd1YWdlOiBcInJ1YnlcIixcbiAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKHJlb3BlbmVkLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBtZXNzYWdlOiBcIkNhbGxlciBzb3VyY2UgcmVvcGVucyB0aGUgY29tcGlsZXItb3duZWQgVENQU29ja2V0IGZhY2FkZSBpZGVudGl0eS5cIlxuICB9KVxuICBjb25zdCBtb2R1bGVzID0gYm9keS5maWx0ZXIoKG5vZGUpID0+IG5vZGUgaW5zdGFuY2VvZiBNb2R1bGVOb2RlKVxuXG4gIC8qKlxuICAgKiBWaXNpdHMgb25lIHBhcnNlciBub2RlIGZvciBib3VuZGVkIG5hdGl2ZSBhdHRlbXB0cy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gQ2FuZGlkYXRlIFByaXNtIG5vZGUuXG4gICAqL1xuICBmdW5jdGlvbiB2aXNpdChub2RlKSB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSkge1xuICAgICAgY29uc3QgcmVjZWl2ZXIgPSBub2RlLnJlY2VpdmVyXG4gICAgICBjb25zdCB0Y3BSZWNlaXZlciA9IHJlY2VpdmVyIGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSAmJiByZWNlaXZlci5uYW1lID09IFwiVENQU29ja2V0XCJcblxuICAgICAgaWYgKHRjcFJlY2VpdmVyKSB7XG4gICAgICAgIGlmICghYWN0aXZlKSB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgICAgICBjb2RlOiBcIlNURExJQl9GQUNBREVfSURFTlRJVFlfVU5QUk9WRURcIixcbiAgICAgICAgICBsYW5ndWFnZTogXCJydWJ5XCIsXG4gICAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbigvKiogQHR5cGUge0NvbnN0YW50UmVhZE5vZGV9ICovIChyZWNlaXZlciksIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiVENQU29ja2V0IHJlcXVpcmVzIHRoZSBleGFjdCBwYXJzZXItcHJvdmVkIHJlcXVpcmUgXFxcInNvY2tldFxcXCIgaWRlbnRpdHkuXCJcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKG5vZGUubmFtZSAhPSBcIm5ld1wiIHx8IG5vZGUuYmxvY2sgfHwgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCAhPSAyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgICAgICAgICBjb2RlOiBcIlNURExJQl9GQUNBREVfTUVNQkVSX1VOU1VQUE9SVEVEXCIsXG4gICAgICAgICAgICBsYW5ndWFnZTogXCJydWJ5XCIsXG4gICAgICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICAgICAgbWVzc2FnZTogXCJUQ1BTb2NrZXQgc3VwcG9ydHMgb25seSBleGFjdCB0d28tYXJndW1lbnQgbmV3IHdpdGhvdXQgYSBibG9jay5cIlxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGtlcm5lbFB1dHMgPSAhbm9kZS5yZWNlaXZlciAmJiBub2RlLm5hbWUgPT0gXCJwdXRzXCIgfHxcbiAgICAgICAgbm9kZS5yZWNlaXZlciBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUgJiYgbm9kZS5yZWNlaXZlci5uYW1lID09IFwiS2VybmVsXCIgJiYgbm9kZS5uYW1lID09IFwicHV0c1wiXG5cbiAgICAgIGlmIChhY3RpdmUgJiYga2VybmVsUHV0cyAmJiAobm9kZS5ibG9jayB8fCBub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoICE9IDEpKSB7XG4gICAgICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgICAgICAgIGNvZGU6IFwiU1RETElCX0ZBQ0FERV9NRU1CRVJfVU5TVVBQT1JURURcIixcbiAgICAgICAgICBsYW5ndWFnZTogXCJydWJ5XCIsXG4gICAgICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBtZXNzYWdlOiBcIlRoZSBUYXNrIDAzNyBPdXRwdXQgZmFjYWRlIHN1cHBvcnRzIGV4YWN0bHkgb25lIHN0cmluZyBhcmd1bWVudCB3aXRob3V0IGEgYmxvY2suXCJcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNvbXBhY3RDaGlsZE5vZGVzKCkpIHZpc2l0KGNoaWxkKVxuICB9XG5cbiAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykgdmlzaXQobW9kdWxlKVxufVxuXG4vKipcbiAqIENvbGxlY3RzIGV4YWN0IFRhc2sgMDM3IG5hdGl2ZSBpZGVudGl0aWVzIGZyb20gUHJpc20gbm9kZXMgaW4gc291cmNlIG9yZGVyLlxuICogQHBhcmFtIHtNb2R1bGVOb2RlfSBtb2R1bGUgLSBQYXJzZWQgYXBwbGljYXRpb24gbW9kdWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHt7Zm9ybTogXCJjb25zdHJ1Y3Rvci1jYWxsXCIgfCBcInJlY2VpdmVyLWNhbGxcIiB8IFwidW5xdWFsaWZpZWQtY2FsbFwiLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIG5hdGl2ZU1vZHVsZTogc3RyaW5nLCBzeW1ib2w6IHN0cmluZ31bXX0gUGFyc2VyLXByb3ZlZCBuYXRpdmUgcmVmZXJlbmNlcy5cbiAqL1xuZnVuY3Rpb24gcnVieU5hdGl2ZVJlZmVyZW5jZXMobW9kdWxlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIC8qKiBAdHlwZSB7e2Zvcm06IFwiY29uc3RydWN0b3ItY2FsbFwiIHwgXCJyZWNlaXZlci1jYWxsXCIgfCBcInVucXVhbGlmaWVkLWNhbGxcIiwgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYXRpdmVNb2R1bGU6IHN0cmluZywgb2Zmc2V0OiBudW1iZXIsIHN5bWJvbDogc3RyaW5nfVtdfSAqL1xuICBjb25zdCByZWZlcmVuY2VzID0gW11cblxuICAvKipcbiAgICogVmlzaXRzIG9uZSBwYXJzZXIgbm9kZSB3aXRob3V0IGludGVycHJldGluZyBzb3VyY2UgdGV4dC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gUGFyc2VyIG5vZGUuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZnVuY3Rpb24gdmlzaXQobm9kZSkge1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgIW5vZGUuYmxvY2sgJiYgbm9kZS5hcmd1bWVudHNfPy5hcmd1bWVudHNfLmxlbmd0aCA9PSAxICYmXG4gICAgICAhbm9kZS5yZWNlaXZlciAmJiBub2RlLm5hbWUgPT0gXCJwdXRzXCIpIHtcbiAgICAgIHJlZmVyZW5jZXMucHVzaCh7Zm9ybTogXCJ1bnF1YWxpZmllZC1jYWxsXCIsIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIG5hdGl2ZU1vZHVsZTogXCJydWJ5Oktlcm5lbFwiLFxuICAgICAgICBvZmZzZXQ6IG5vZGUubG9jYXRpb24uc3RhcnRPZmZzZXQsIHN5bWJvbDogXCJwdXRzXCJ9KVxuICAgIH1cbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmICFub2RlLmJsb2NrICYmIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggPT0gMSAmJiBub2RlLm5hbWUgPT0gXCJwdXRzXCIgJiZcbiAgICAgIG5vZGUuY2FsbE9wZXJhdG9yTG9jICYmIG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBDb25zdGFudFJlYWROb2RlICYmIG5vZGUucmVjZWl2ZXIubmFtZSA9PSBcIktlcm5lbFwiKSB7XG4gICAgICByZWZlcmVuY2VzLnB1c2goe2Zvcm06IFwicmVjZWl2ZXItY2FsbFwiLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCBuYXRpdmVNb2R1bGU6IFwicnVieTpLZXJuZWxcIixcbiAgICAgICAgb2Zmc2V0OiBub2RlLmxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBzeW1ib2w6IFwicHV0c1wifSlcbiAgICB9XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiAhbm9kZS5ibG9jayAmJiBub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoID09IDIgJiYgbm9kZS5uYW1lID09IFwibmV3XCIgJiZcbiAgICAgIG5vZGUuY2FsbE9wZXJhdG9yTG9jICYmIG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBDb25zdGFudFJlYWROb2RlICYmIG5vZGUucmVjZWl2ZXIubmFtZSA9PSBcIlRDUFNvY2tldFwiKSB7XG4gICAgICByZWZlcmVuY2VzLnB1c2goe2Zvcm06IFwiY29uc3RydWN0b3ItY2FsbFwiLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCBuYXRpdmVNb2R1bGU6IFwic29ja2V0XCIsXG4gICAgICAgIG9mZnNldDogbm9kZS5sb2NhdGlvbi5zdGFydE9mZnNldCwgc3ltYm9sOiBcIlRDUFNvY2tldFwifSlcbiAgICB9XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNvbXBhY3RDaGlsZE5vZGVzKCkpIHZpc2l0KGNoaWxkKVxuICB9XG5cbiAgdmlzaXQobW9kdWxlKVxuICByZXR1cm4gcmVmZXJlbmNlcy5zb3J0KChsZWZ0LCByaWdodCkgPT4gbGVmdC5vZmZzZXQgLSByaWdodC5vZmZzZXQpLm1hcCgoe29mZnNldDogX29mZnNldCwgLi4ucmVmZXJlbmNlfSkgPT4gcmVmZXJlbmNlKVxufVxuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBhIFJ1Ynkgbm9kZSBpcyBvbmUgY2Fub25pY2FsIGxpdGVyYWwgcmVsYXRpdmUgbG9hZCBlZGdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gQ2FuZGlkYXRlIGNhbGwuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbm9kZSBpcyBhIHN1cHBvcnRlZCByZXF1aXJlLXJlbGF0aXZlIGNhbGwuXG4gKi9cbmZ1bmN0aW9uIGlzUmVxdWlyZVJlbGF0aXZlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSAmJiAhbm9kZS5yZWNlaXZlciAmJiAhbm9kZS5ibG9jayAmJiBub2RlLm5hbWUgPT0gXCJyZXF1aXJlX3JlbGF0aXZlXCIgJiZcbiAgICBub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoID09IDEgJiYgbm9kZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0gaW5zdGFuY2VvZiBTdHJpbmdOb2RlXG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIGEgUnVieSBub2RlIGlzIG9uZSBwYXJzZXItcHJvdmVkIGxpdGVyYWwgZmFjYWRlIHJlcXVpcmUgY2FuZGlkYXRlLlxuICogT3RoZXIgbG9hZC1wYXRoIHJlcXVpcmVzIHJldGFpbiB0aGUgVGFzayAwMTAgdW5zdXBwb3J0ZWQgcHJvZmlsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZX0gbm9kZSAtIENhbmRpZGF0ZSBjYWxsLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIG5vZGUgaXMgYSBsaXRlcmFsIFNlbWFudGlmb2xkIGZhY2FkZSByZXF1aXJlLlxuICovXG5mdW5jdGlvbiBpc1N0ZGxpYlJlcXVpcmUobm9kZSkge1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlICYmICFub2RlLnJlY2VpdmVyICYmICFub2RlLmJsb2NrICYmIG5vZGUubmFtZSA9PSBcInJlcXVpcmVcIiAmJlxuICAgIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggPT0gMSAmJiBub2RlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXSBpbnN0YW5jZW9mIFN0cmluZ05vZGUgJiZcbiAgICAobm9kZS5hcmd1bWVudHNfLmFyZ3VtZW50c19bMF0udW5lc2NhcGVkLnZhbHVlID09IFwic29ja2V0XCIgfHxcbiAgICAgIG5vZGUuYXJndW1lbnRzXy5hcmd1bWVudHNfWzBdLnVuZXNjYXBlZC52YWx1ZS5zdGFydHNXaXRoKFwic2VtYW50aWZvbGQvXCIpKVxufVxuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBhIFJ1Ynkgbm9kZSBkeW5hbWljYWxseSBjb25zdHJ1Y3RzIGEgZmFjYWRlIHJlcXVpcmUgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBydWJ5L3ByaXNtXCIpLk5vZGV9IG5vZGUgLSBDYW5kaWRhdGUgY2FsbC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBwYXJzZXIgZXhwb3NlcyBhIG5vbmxpdGVyYWwgcmVxdWlyZS5cbiAqL1xuZnVuY3Rpb24gaXNEeW5hbWljU3RkbGliUmVxdWlyZShub2RlKSB7XG4gIGlmICghKG5vZGUgaW5zdGFuY2VvZiBDYWxsTm9kZSkgfHwgbm9kZS5yZWNlaXZlciB8fCBub2RlLmJsb2NrIHx8IG5vZGUubmFtZSAhPSBcInJlcXVpcmVcIiB8fFxuICAgIG5vZGUuYXJndW1lbnRzXz8uYXJndW1lbnRzXy5sZW5ndGggIT0gMSkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiAhKG5vZGUuYXJndW1lbnRzXy5hcmd1bWVudHNfWzBdIGluc3RhbmNlb2YgU3RyaW5nTm9kZSlcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHdoZXRoZXIgYSBSdWJ5IG5vZGUgaXMgdGhlIGNhbm9uaWNhbCBtb2R1bGUtZnVuY3Rpb24gbWFya2VyLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAcnVieS9wcmlzbVwiKS5Ob2RlfSBub2RlIC0gQ2FuZGlkYXRlIG1hcmtlci5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBub2RlIGlzIGEgYmFyZSBtb2R1bGUtZnVuY3Rpb24gY2FsbC5cbiAqL1xuZnVuY3Rpb24gaXNNb2R1bGVGdW5jdGlvbk1hcmtlcihub2RlKSB7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgQ2FsbE5vZGUgJiYgIW5vZGUucmVjZWl2ZXIgJiYgIW5vZGUuYmxvY2sgJiYgbm9kZS5uYW1lID09IFwibW9kdWxlX2Z1bmN0aW9uXCIgJiYgIW5vZGUuYXJndW1lbnRzX1xufVxuXG4vKipcbiAqIFJlYWRzIG9uZSBleGFjdCBnZW5lcmF0ZWQgUnVieSB2aXNpYmlsaXR5IG1hcmtlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQHJ1YnkvcHJpc21cIikuTm9kZX0gbm9kZSAtIENhbmRpZGF0ZSBtb2R1bGUtYm9keSBub2RlLlxuICogQHJldHVybnMge3traW5kOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0RlY2xhcmF0aW9uS2luZCwgbmFtZTogc3RyaW5nfSB8IHVuZGVmaW5lZH0gTWFya2VyIG1lYW5pbmcuXG4gKi9cbmZ1bmN0aW9uIHJ1YnlWaXNpYmlsaXR5TWFya2VyKG5vZGUpIHtcbiAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIENhbGxOb2RlKSB8fCBub2RlLnJlY2VpdmVyIHx8IG5vZGUuYmxvY2sgfHxcbiAgICAhW1wicHJpdmF0ZV9jbGFzc19tZXRob2RcIiwgXCJwcml2YXRlX2NvbnN0YW50XCJdLmluY2x1ZGVzKG5vZGUubmFtZSkgfHxcbiAgICBub2RlLmFyZ3VtZW50c18/LmFyZ3VtZW50c18ubGVuZ3RoICE9IDEgfHwgIShub2RlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXSBpbnN0YW5jZW9mIFN5bWJvbE5vZGUpKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgcmV0dXJuIHtcbiAgICBraW5kOiBub2RlLm5hbWUgPT0gXCJwcml2YXRlX2NsYXNzX21ldGhvZFwiID8gXCJmdW5jdGlvblwiIDogXCJyZWNvcmRcIixcbiAgICBuYW1lOiBub2RlLmFyZ3VtZW50c18uYXJndW1lbnRzX1swXS51bmVzY2FwZWQudmFsdWVcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhIHBhcnNlci1vd25lZCBzaW1wbGUgUnVieSBjb25zdGFudCBwYXRoIHdpdGhvdXQgaW5zcGVjdGluZyBzb3VyY2UgdGV4dC5cbiAqIEBwYXJhbSB7Q29uc3RhbnRSZWFkTm9kZSB8IENvbnN0YW50UGF0aE5vZGV9IG5vZGUgLSBDb25zdGFudCBwYXRoLlxuICogQHJldHVybnMge3N0cmluZ30gUXVhbGlmaWVkIGNvbnN0YW50IG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50UGF0aE5hbWUobm9kZSkge1xuICBpZiAobm9kZSBpbnN0YW5jZW9mIENvbnN0YW50UmVhZE5vZGUpIHJldHVybiBub2RlLm5hbWVcbiAgaWYgKHR5cGVvZiBub2RlLm5hbWUgIT0gXCJzdHJpbmdcIikgdGhyb3cgbmV3IEVycm9yKFwiUHJpc20gcmV0dXJuZWQgYSBjb25zdGFudCBwYXRoIHdpdGhvdXQgYSBuYW1lLlwiKVxuICBpZiAoIW5vZGUucGFyZW50KSByZXR1cm4gbm9kZS5uYW1lXG4gIGlmICghKG5vZGUucGFyZW50IGluc3RhbmNlb2YgQ29uc3RhbnRSZWFkTm9kZSkgJiYgIShub2RlLnBhcmVudCBpbnN0YW5jZW9mIENvbnN0YW50UGF0aE5vZGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUHJpc20gcmV0dXJuZWQgYW4gdW5zdXBwb3J0ZWQgY29uc3RhbnQtcGF0aCBwYXJlbnQuXCIpXG4gIH1cblxuICByZXR1cm4gYCR7Y29uc3RhbnRQYXRoTmFtZShub2RlLnBhcmVudCl9Ojoke25vZGUubmFtZX1gXG59XG4iXX0=