occam-nominal 1.0.479 → 1.0.486

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 (81) hide show
  1. package/lib/context/liminal.js +8 -8
  2. package/lib/element/assertion/subproof.js +55 -126
  3. package/lib/element/assumption/implicit.js +2 -2
  4. package/lib/element/claim.js +13 -13
  5. package/lib/element/combinator/bracketed.js +2 -4
  6. package/lib/element/combinator.js +27 -47
  7. package/lib/element/constraint.js +2 -2
  8. package/lib/element/constructor/bracketed.js +3 -3
  9. package/lib/element/constructor.js +27 -24
  10. package/lib/element/declaration/combinator.js +12 -18
  11. package/lib/element/declaration/constructor.js +2 -2
  12. package/lib/element/declaration/metavariable.js +17 -27
  13. package/lib/element/derivation.js +9 -11
  14. package/lib/element/equality.js +2 -2
  15. package/lib/element/fact/premise.js +38 -59
  16. package/lib/element/fact/step.js +49 -81
  17. package/lib/element/fact.js +6 -9
  18. package/lib/element/generator.js +9 -9
  19. package/lib/element/hypothesis.js +51 -95
  20. package/lib/element/label.js +2 -2
  21. package/lib/element/metavariable.js +35 -47
  22. package/lib/element/procedureCall.js +44 -62
  23. package/lib/element/proof.js +12 -14
  24. package/lib/element/property.js +4 -4
  25. package/lib/element/reference.js +34 -43
  26. package/lib/element/resolution/conclusion.js +8 -13
  27. package/lib/element/resolution/deduction.js +3 -3
  28. package/lib/element/resolution.js +6 -12
  29. package/lib/element/rule.js +76 -105
  30. package/lib/element/section.js +27 -40
  31. package/lib/element/signature.js +2 -2
  32. package/lib/element/statement.js +5 -7
  33. package/lib/element/subDerivation.js +9 -11
  34. package/lib/element/subproof.js +27 -36
  35. package/lib/element/substitution/statement.js +38 -58
  36. package/lib/element/term.js +2 -2
  37. package/lib/process/unification.js +67 -136
  38. package/lib/process/unify.js +3 -3
  39. package/lib/process/validate.js +16 -4
  40. package/lib/process/validation.js +14 -8
  41. package/package.json +3 -3
  42. package/src/context/liminal.js +7 -7
  43. package/src/element/assertion/subproof.js +59 -165
  44. package/src/element/assumption/implicit.js +1 -1
  45. package/src/element/claim.js +16 -16
  46. package/src/element/combinator/bracketed.js +1 -3
  47. package/src/element/combinator.js +32 -60
  48. package/src/element/constraint.js +1 -1
  49. package/src/element/constructor/bracketed.js +3 -3
  50. package/src/element/constructor.js +36 -32
  51. package/src/element/declaration/combinator.js +11 -17
  52. package/src/element/declaration/constructor.js +1 -1
  53. package/src/element/declaration/metavariable.js +16 -28
  54. package/src/element/derivation.js +10 -12
  55. package/src/element/equality.js +1 -1
  56. package/src/element/fact/premise.js +40 -72
  57. package/src/element/fact/step.js +54 -102
  58. package/src/element/fact.js +5 -9
  59. package/src/element/generator.js +8 -8
  60. package/src/element/hypothesis.js +54 -121
  61. package/src/element/label.js +1 -1
  62. package/src/element/metavariable.js +39 -57
  63. package/src/element/procedureCall.js +59 -74
  64. package/src/element/proof.js +13 -15
  65. package/src/element/property.js +4 -4
  66. package/src/element/reference.js +31 -51
  67. package/src/element/resolution/conclusion.js +9 -16
  68. package/src/element/resolution/deduction.js +2 -2
  69. package/src/element/resolution.js +5 -13
  70. package/src/element/rule.js +78 -112
  71. package/src/element/section.js +26 -42
  72. package/src/element/signature.js +1 -1
  73. package/src/element/statement.js +4 -6
  74. package/src/element/subDerivation.js +10 -12
  75. package/src/element/subproof.js +26 -36
  76. package/src/element/substitution/statement.js +44 -71
  77. package/src/element/term.js +1 -1
  78. package/src/process/unification.js +67 -175
  79. package/src/process/unify.js +2 -2
  80. package/src/process/validate.js +17 -3
  81. package/src/process/validation.js +13 -7
@@ -74,18 +74,18 @@ class LiminalContext extends _context.default {
74
74
  this.addInferredSubstitution(inferredSubstitution);
75
75
  });
76
76
  }
77
- solveInferredSubstitutions(continuation) {
77
+ solveInferredSubstitutions(forward, back) {
78
78
  const context = this, inferredSubstitutions = this.getInferredSubstitutions(), metavariableNodes = (0, _substitutions.metavariableNodesFromInferredSubstitutions)(inferredSubstitutions);
79
- return forEach(metavariableNodes, (metavariableNode, continuation)=>{
79
+ return forEach(metavariableNodes, (metavariableNode, forward, back)=>{
80
80
  const complexInferredSubstitutions = this.findComplexInferredSubstitutionsByMetavariableNode(metavariableNode);
81
- return forEach(complexInferredSubstitutions, (complexInferredSubstitution, continuation)=>{
81
+ return forEach(complexInferredSubstitutions, (complexInferredSubstitution, forward, back)=>{
82
82
  const inferredSubstitution = complexInferredSubstitution, solved = inferredSubstitution.isSolved();
83
83
  if (solved) {
84
- return continuation();
84
+ return forward(context, back);
85
85
  }
86
- return inferredSubstitution.solve(context, continuation);
87
- }, continuation);
88
- }, continuation);
86
+ return inferredSubstitution.solve(context, forward, back);
87
+ }, forward, back);
88
+ }, forward, back);
89
89
  }
90
90
  areInferredSubstitutionsSolved() {
91
91
  const inferredSubstitutions = this.getInferredSubstitutions(), metavariableNodes = (0, _substitutions.metavariableNodesFromInferredSubstitutions)(inferredSubstitutions), solved = metavariableNodes.every((metavariableNode)=>{
@@ -198,4 +198,4 @@ class LiminalContext extends _context.default {
198
198
  }
199
199
  }
200
200
 
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2xpbWluYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBtZXRhdmFyaWFibGVOb2Rlc0Zyb21JbmZlcnJlZFN1YnN0aXR1dGlvbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N1YnN0aXR1dGlvbnNcIjtcblxuY29uc3QgeyBmb3JFYWNoIH0gPSBjb250aW51YXRpb25VdGlsaXRpZXMsXG4gICAgICB7IHB1c2gsIGZpbmQsIGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGltaW5hbENvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgaW5mZXJyZWRTdWJzdGl0dXRpb25zKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLmluZmVycmVkU3Vic3RpdHV0aW9ucyA9IGluZmVycmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldEluZmVycmVkU3Vic3RpdHV0aW9ucyhpbmZlcnJlZFN1YnN0aXR1dGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goaW5mZXJyZWRTdWJzdGl0dXRpb25zLCB0aGlzLmluZmVycmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICBjb250ZXh0LmdldEluZmVycmVkU3Vic3RpdHV0aW9ucyhpbmZlcnJlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIGluZmVycmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldFNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbigpIHtcbiAgICBsZXQgc29sZUluZmVycmVkU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uc0xlbmd0aCA9IHRoaXMuaW5mZXJyZWRTdWJzdGl0dXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChpbmZlcnJlZFN1YnN0aXR1dGlvbnNMZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGZpcnN0SW5mZXJyZWRTdWJzdGl0dXRpb24gPSBmaXJzdCh0aGlzLmluZmVycmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgIHNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbiA9IGZpcnN0SW5mZXJyZWRTdWJzdGl0dXRpb247IC8vL1xuICAgIH1cblxuICAgIHJldHVybiBzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBnZXRTaW5ndWxhck5vblRyaXZpYWxJbmZlcnJlZFN1YnN0aXR1dGlvbigpIHtcbiAgICBsZXQgc2luZ3VsYXJOb25Ucml2aWFsSW5mZXJyZWRTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc29sZUluZmVycmVkU3Vic3RpdHV0aW9uID0gdGhpcy5nZXRTb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24oKTtcblxuICAgIGlmIChzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbk5vblRyaXZpYWwgPSBzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24uaXNOb25Ucml2aWFsKCk7XG5cbiAgICAgIGlmIChzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb25Ob25Ucml2aWFsKSB7XG4gICAgICAgIHNpbmd1bGFyTm9uVHJpdmlhbEluZmVycmVkU3Vic3RpdHV0aW9uID0gc29sZUluZmVycmVkU3Vic3RpdHV0aW9uOyAgLy8vXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpbmd1bGFyTm9uVHJpdmlhbEluZmVycmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgYWRkU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbikge1xuICAgIC8vL1xuICB9XG5cbiAgYWRkSW5mZXJyZWRTdWJzdGl0dXRpb24oaW5mZXJyZWRTdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgaW5mZXJyZWRTdWJzdGl0dXRpb25BID0gaW5mZXJyZWRTdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgIGluZmVycmVkU3Vic3RpdHV0aW9uU3RyaW5nID0gaW5mZXJyZWRTdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2luZmVycmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgaW5mZXJyZWQgc3Vic3RpdHV0aW9uIHRvIHRoZSBsaW1pbmFsIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uQiA9IHRoaXMuaW5mZXJyZWRTdWJzdGl0dXRpb25zLmZpbmQoKGluZmVycmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbkIgPSBpbmZlcnJlZFN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgICBpbmZlcnJlZFN1YnN0aXR1dGlvbkFFcXVhbFRvSW5mZXJyZWRTdWJzdGl0dXRpb25CID0gaW5mZXJyZWRTdWJzdGl0dXRpb25BLmlzRXF1YWxUbyhpbmZlcnJlZFN1YnN0aXR1dGlvbkIpO1xuXG4gICAgICBpZiAoaW5mZXJyZWRTdWJzdGl0dXRpb25BRXF1YWxUb0luZmVycmVkU3Vic3RpdHV0aW9uQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgaWYgKGluZmVycmVkU3Vic3RpdHV0aW9uQiAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2luZmVycmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgaW5mZXJyZWQgc3Vic3RpdHV0aW9uIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIGxpbWluYWwgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZlcnJlZFN1YnN0aXR1dGlvbnMucHVzaChpbmZlcnJlZFN1YnN0aXR1dGlvbik7XG4gICAgfVxuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2luZmVycmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgaW5mZXJyZWQgc3Vic3RpdHV0aW9uIHRvIHRoZSBsaW1pbmFsIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRJbmZlcnJlZFN1YnN0aXR1dGlvbnMoaW5mZXJyZWRTdWJzdGl0dXRpb25zKSB7XG4gICAgaW5mZXJyZWRTdWJzdGl0dXRpb25zLmZvckVhY2goKGluZmVycmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICB0aGlzLmFkZEluZmVycmVkU3Vic3RpdHV0aW9uKGluZmVycmVkU3Vic3RpdHV0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNvbHZlSW5mZXJyZWRTdWJzdGl0dXRpb25zKGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBpbmZlcnJlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldEluZmVycmVkU3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVzID0gbWV0YXZhcmlhYmxlTm9kZXNGcm9tSW5mZXJyZWRTdWJzdGl0dXRpb25zKGluZmVycmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gZm9yRWFjaChtZXRhdmFyaWFibGVOb2RlcywgKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgY29uc3QgY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZmluZENvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgIHJldHVybiBmb3JFYWNoKGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbnMsIChjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb24sIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbiA9IGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgICAgIHNvbHZlZCA9IGluZmVycmVkU3Vic3RpdHV0aW9uLmlzU29sdmVkKCk7XG5cbiAgICAgICAgaWYgKHNvbHZlZCkge1xuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbmZlcnJlZFN1YnN0aXR1dGlvbi5zb2x2ZShjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgICAgfSwgY29udGludWF0aW9uKTtcbiAgICB9LCBjb250aW51YXRpb24pO1xuICB9XG5cbiAgYXJlSW5mZXJyZWRTdWJzdGl0dXRpb25zU29sdmVkKCkge1xuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0SW5mZXJyZWRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZXMgPSBtZXRhdmFyaWFibGVOb2Rlc0Zyb21JbmZlcnJlZFN1YnN0aXR1dGlvbnMoaW5mZXJyZWRTdWJzdGl0dXRpb25zKSxcbiAgICAgICAgICBzb2x2ZWQgPSBtZXRhdmFyaWFibGVOb2Rlcy5ldmVyeSgobWV0YXZhcmlhYmxlTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZmluZENvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgICAgICAgICBjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25zU29sdmVkID0gY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9ucy5ldmVyeSgoY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvblNvbHZlZCA9IGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbi5pc1NvbHZlZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25Tb2x2ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25zU29sdmVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHNvbHZlZDtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb25zTGVuZ3RoID0gdGhpcy5pbmZlcnJlZFN1YnN0aXR1dGlvbnMubGVuZ3RoLFxuICAgICAgICAgIGVtcHR5ID0gKGluZmVycmVkU3Vic3RpdHV0aW9uc0xlbmd0aCA9PT0gMCk7XG5cbiAgICByZXR1cm4gZW1wdHk7XG4gIH1cblxuICBxdWFsaWZ5KGFzc3VtcHRpb24sIGNvbnN0cmFpbnQpIHtcbiAgICBsZXQgcXVhbGlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBlbXB0eSA9IHRoaXMuaXNFbXB0eSgpO1xuXG4gICAgaWYgKGVtcHR5KSB7XG4gICAgICBxdWFsaWZpZXMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24gPSB0aGlzLmdldFNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbigpO1xuXG4gICAgICBpZiAoc29sZUluZmVycmVkU3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHsgUmVmZXJlbmNlSW5mZXJyZWRTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICAgICAgICBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgICAgIHJlZmVyZW5jZUluZmVycmVkU3Vic3RpdHV0aW9uID0gUmVmZXJlbmNlSW5mZXJyZWRTdWJzdGl0dXRpb24uZnJvbUFzc3VtcHRpb25BbmRDb25zdHJhaW50KGFzc3VtcHRpb24sIGNvbnN0cmFpbnQsIGNvbnRleHQpLFxuICAgICAgICAgICAgICByZWZlcmVuY2VJbmZlcnJlZFN1YnN0aXR1dGlvbkNvbXBhcmVzVG9Tc29sZUluZmVycmVkU3Vic3RpdHV0aW9uID0gcmVmZXJlbmNlSW5mZXJyZWRTdWJzdGl0dXRpb24uY29tcGFyZVN1YnN0aXR1dGlvbihzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24pO1xuXG4gICAgICAgIGlmIChyZWZlcmVuY2VJbmZlcnJlZFN1YnN0aXR1dGlvbkNvbXBhcmVzVG9Tc29sZUluZmVycmVkU3Vic3RpdHV0aW9uKSB7XG4gICAgICAgICAgcXVhbGlmaWVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWFsaWZpZXM7XG4gIH1cblxuICBtZXJnZShjb250ZXh0KSB7XG4gICAgY29udGV4dC5kZWJ1ZyhgTWVyZ2luZyB0aGUgbGltaW5hbCBjb250ZXh0YCk7XG5cbiAgICBjb250ZXh0LmFkZEluZmVycmVkU3Vic3RpdHV0aW9ucyh0aGlzLmluZmVycmVkU3Vic3RpdHV0aW9ucyk7XG4gIH1cblxuICBmaW5kSW5mZXJyZWRTdWJzdGl0dXRpb24oY2FsbGJhY2spIHtcbiAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldEluZmVycmVkU3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIGluZmVycmVkU3Vic3RpdHV0aW9uID0gaW5mZXJyZWRTdWJzdGl0dXRpb25zLmZpbmQoY2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIGluZmVycmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZEluZmVycmVkU3Vic3RpdHV0aW9ucyhjYWxsYmFjaykge1xuICAgIGxldCBpbmZlcnJlZFN1YnN0aXR1dGlvbnM7XG5cbiAgICBpbmZlcnJlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldEluZmVycmVkU3Vic3RpdHV0aW9ucygpO1xuXG4gICAgaW5mZXJyZWRTdWJzdGl0dXRpb25zID0gZmluZChpbmZlcnJlZFN1YnN0aXR1dGlvbnMsIGNhbGxiYWNrKTsgIC8vL1xuXG4gICAgcmV0dXJuIGluZmVycmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kSW5mZXJyZWRTdWJzdGl0dXRpb24oKGluZmVycmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCB2YXJpYWJsZU5vZGVNYXRjaGVzID0gaW5mZXJyZWRTdWJzdGl0dXRpb24ubWF0Y2hWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKTtcblxuICAgICAgaWYgKHZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBpbmZlcnJlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3Qgc2ltcGxlSW5mZXJyZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRTaW1wbGVJbmZlcnJlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBpbmZlcnJlZFN1YnN0aXR1dGlvbiA9IHNpbXBsZUluZmVycmVkU3Vic3RpdHV0aW9uOyAgLy8vXG5cbiAgICByZXR1cm4gaW5mZXJyZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kU2ltcGxlSW5mZXJyZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHNpbXBsZUluZmVycmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kSW5mZXJyZWRTdWJzdGl0dXRpb24oKGluZmVycmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvblNpbXBsZSA9IGluZmVycmVkU3Vic3RpdHV0aW9uLmlzU2ltcGxlKCk7XG5cbiAgICAgIGlmIChpbmZlcnJlZFN1YnN0aXR1dGlvblNpbXBsZSkge1xuICAgICAgICBjb25zdCBzaW1wbGVJbmZlcnJlZFN1YnN0aXR1dGlvbiA9IGluZmVycmVkU3Vic3RpdHV0aW9uLCAgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gc2ltcGxlSW5mZXJyZWRTdWJzdGl0dXRpb24ubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzaW1wbGVJbmZlcnJlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRDb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25zQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbnMoKGluZmVycmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbkNvbXBsZXggPSBpbmZlcnJlZFN1YnN0aXR1dGlvbi5pc0NvbXBsZXgoKTtcblxuICAgICAgaWYgKGluZmVycmVkU3Vic3RpdHV0aW9uQ29tcGxleCkge1xuICAgICAgICBjb25zdCBjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb24gPSBpbmZlcnJlZFN1YnN0aXR1dGlvbiwgIC8vL1xuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbi5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUobWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kSW5mZXJyZWRTdWJzdGl0dXRpb24oKGluZmVycmVkU3Vic3RpdHV0aW9uKSA9PiB7ICAvLy9cbiAgICAgICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gaW5mZXJyZWRTdWJzdGl0dXRpb24ubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSBpbmZlcnJlZFN1YnN0aXR1dGlvbi5tYXRjaFN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGluZmVycmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgaXNJbmZlcnJlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kSW5mZXJyZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgaW5mZXJyZWRTdWJzdGl0dXRpb25QcmVzZW50ID0gKGluZmVycmVkU3Vic3RpdHV0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBpbmZlcnJlZFN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBpc0luZmVycmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUobWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kSW5mZXJyZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbk5vZGUpLFxuICAgICAgICAgIGluZmVycmVkU3Vic3RpdHV0aW9uUHJlc2VudCA9IChpbmZlcnJlZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gaW5mZXJyZWRTdWJzdGl0dXRpb25QcmVzZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKGNvbnRleHQpIHtcbiAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbnMgPSBbXSxcbiAgICAgICAgICBsaW1pbmFsQ29udGV4dCA9IG5ldyBMaW1pbmFsQ29udGV4dChjb250ZXh0LCBpbmZlcnJlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIGxpbWluYWxDb250ZXh0O1xuICB9XG59XG4iXSwibmFtZXMiOlsiTGltaW5hbENvbnRleHQiLCJmb3JFYWNoIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwicHVzaCIsImZpbmQiLCJmaXJzdCIsImFycmF5VXRpbGl0aWVzIiwiQ29udGV4dCIsImNvbnRleHQiLCJpbmZlcnJlZFN1YnN0aXR1dGlvbnMiLCJnZXRJbmZlcnJlZFN1YnN0aXR1dGlvbnMiLCJnZXRDb250ZXh0IiwiZ2V0U29sZUluZmVycmVkU3Vic3RpdHV0aW9uIiwic29sZUluZmVycmVkU3Vic3RpdHV0aW9uIiwiaW5mZXJyZWRTdWJzdGl0dXRpb25zTGVuZ3RoIiwibGVuZ3RoIiwiZmlyc3RJbmZlcnJlZFN1YnN0aXR1dGlvbiIsImdldFNpbmd1bGFyTm9uVHJpdmlhbEluZmVycmVkU3Vic3RpdHV0aW9uIiwic2luZ3VsYXJOb25Ucml2aWFsSW5mZXJyZWRTdWJzdGl0dXRpb24iLCJzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb25Ob25Ucml2aWFsIiwiaXNOb25Ucml2aWFsIiwiYWRkU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uIiwiYWRkSW5mZXJyZWRTdWJzdGl0dXRpb24iLCJpbmZlcnJlZFN1YnN0aXR1dGlvbiIsImluZmVycmVkU3Vic3RpdHV0aW9uQSIsImluZmVycmVkU3Vic3RpdHV0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJpbmZlcnJlZFN1YnN0aXR1dGlvbkIiLCJpbmZlcnJlZFN1YnN0aXR1dGlvbkFFcXVhbFRvSW5mZXJyZWRTdWJzdGl0dXRpb25CIiwiaXNFcXVhbFRvIiwiZGVidWciLCJhZGRJbmZlcnJlZFN1YnN0aXR1dGlvbnMiLCJzb2x2ZUluZmVycmVkU3Vic3RpdHV0aW9ucyIsImNvbnRpbnVhdGlvbiIsIm1ldGF2YXJpYWJsZU5vZGVzIiwibWV0YXZhcmlhYmxlTm9kZXNGcm9tSW5mZXJyZWRTdWJzdGl0dXRpb25zIiwibWV0YXZhcmlhYmxlTm9kZSIsImNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbnMiLCJmaW5kQ29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZSIsImNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbiIsInNvbHZlZCIsImlzU29sdmVkIiwic29sdmUiLCJhcmVJbmZlcnJlZFN1YnN0aXR1dGlvbnNTb2x2ZWQiLCJldmVyeSIsImNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbnNTb2x2ZWQiLCJjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25Tb2x2ZWQiLCJpc0VtcHR5IiwiZW1wdHkiLCJxdWFsaWZ5IiwiYXNzdW1wdGlvbiIsImNvbnN0cmFpbnQiLCJxdWFsaWZpZXMiLCJSZWZlcmVuY2VJbmZlcnJlZFN1YnN0aXR1dGlvbiIsImVsZW1lbnRzIiwicmVmZXJlbmNlSW5mZXJyZWRTdWJzdGl0dXRpb24iLCJmcm9tQXNzdW1wdGlvbkFuZENvbnN0cmFpbnQiLCJyZWZlcmVuY2VJbmZlcnJlZFN1YnN0aXR1dGlvbkNvbXBhcmVzVG9Tc29sZUluZmVycmVkU3Vic3RpdHV0aW9uIiwiY29tcGFyZVN1YnN0aXR1dGlvbiIsIm1lcmdlIiwiZmluZEluZmVycmVkU3Vic3RpdHV0aW9uIiwiY2FsbGJhY2siLCJmaW5kSW5mZXJyZWRTdWJzdGl0dXRpb25zIiwiZmluZEluZmVycmVkU3Vic3RpdHV0aW9uQnlWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2hWYXJpYWJsZU5vZGUiLCJmaW5kSW5mZXJyZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUiLCJzaW1wbGVJbmZlcnJlZFN1YnN0aXR1dGlvbiIsImZpbmRTaW1wbGVJbmZlcnJlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZSIsImluZmVycmVkU3Vic3RpdHV0aW9uU2ltcGxlIiwiaXNTaW1wbGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImluZmVycmVkU3Vic3RpdHV0aW9uQ29tcGxleCIsImlzQ29tcGxleCIsImZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaFN1YnN0aXR1dGlvbk5vZGUiLCJpc0luZmVycmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZSIsImluZmVycmVkU3Vic3RpdHV0aW9uUHJlc2VudCIsImlzSW5mZXJyZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZSIsImZyb21Ob3RoaW5nIiwibGltaW5hbENvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWFBOzs7ZUFBcUJBOzs7MkJBWFU7Z0NBQ087Z0VBRWxCO2lFQUNDOytCQUVzQzs7Ozs7O0FBRTNELE1BQU0sRUFBRUMsT0FBTyxFQUFFLEdBQUdDLHFDQUFxQixFQUNuQyxFQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlCQUFjO0FBRTdCLE1BQU1OLHVCQUF1Qk8sZ0JBQU87SUFDakQsWUFBWUMsT0FBTyxFQUFFQyxxQkFBcUIsQ0FBRTtRQUMxQyxLQUFLLENBQUNEO1FBRU4sSUFBSSxDQUFDQyxxQkFBcUIsR0FBR0E7SUFDL0I7SUFFQUMseUJBQXlCRCx3QkFBd0IsRUFBRSxFQUFFO1FBQ25ELE1BQU1ELFVBQVUsSUFBSSxDQUFDRyxVQUFVO1FBRS9CUixLQUFLTSx1QkFBdUIsSUFBSSxDQUFDQSxxQkFBcUI7UUFFdERELFFBQVFFLHdCQUF3QixDQUFDRDtRQUVqQyxPQUFPQTtJQUNUO0lBRUFHLDhCQUE4QjtRQUM1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
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2xpbWluYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBtZXRhdmFyaWFibGVOb2Rlc0Zyb21JbmZlcnJlZFN1YnN0aXR1dGlvbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N1YnN0aXR1dGlvbnNcIjtcblxuY29uc3QgeyBmb3JFYWNoIH0gPSBjb250aW51YXRpb25VdGlsaXRpZXMsXG4gICAgICB7IHB1c2gsIGZpbmQsIGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGltaW5hbENvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgaW5mZXJyZWRTdWJzdGl0dXRpb25zKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLmluZmVycmVkU3Vic3RpdHV0aW9ucyA9IGluZmVycmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldEluZmVycmVkU3Vic3RpdHV0aW9ucyhpbmZlcnJlZFN1YnN0aXR1dGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goaW5mZXJyZWRTdWJzdGl0dXRpb25zLCB0aGlzLmluZmVycmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICBjb250ZXh0LmdldEluZmVycmVkU3Vic3RpdHV0aW9ucyhpbmZlcnJlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIGluZmVycmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldFNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbigpIHtcbiAgICBsZXQgc29sZUluZmVycmVkU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uc0xlbmd0aCA9IHRoaXMuaW5mZXJyZWRTdWJzdGl0dXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChpbmZlcnJlZFN1YnN0aXR1dGlvbnNMZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGZpcnN0SW5mZXJyZWRTdWJzdGl0dXRpb24gPSBmaXJzdCh0aGlzLmluZmVycmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgIHNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbiA9IGZpcnN0SW5mZXJyZWRTdWJzdGl0dXRpb247IC8vL1xuICAgIH1cblxuICAgIHJldHVybiBzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBnZXRTaW5ndWxhck5vblRyaXZpYWxJbmZlcnJlZFN1YnN0aXR1dGlvbigpIHtcbiAgICBsZXQgc2luZ3VsYXJOb25Ucml2aWFsSW5mZXJyZWRTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc29sZUluZmVycmVkU3Vic3RpdHV0aW9uID0gdGhpcy5nZXRTb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24oKTtcblxuICAgIGlmIChzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbk5vblRyaXZpYWwgPSBzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24uaXNOb25Ucml2aWFsKCk7XG5cbiAgICAgIGlmIChzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb25Ob25Ucml2aWFsKSB7XG4gICAgICAgIHNpbmd1bGFyTm9uVHJpdmlhbEluZmVycmVkU3Vic3RpdHV0aW9uID0gc29sZUluZmVycmVkU3Vic3RpdHV0aW9uOyAgLy8vXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpbmd1bGFyTm9uVHJpdmlhbEluZmVycmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgYWRkU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbikge1xuICAgIC8vL1xuICB9XG5cbiAgYWRkSW5mZXJyZWRTdWJzdGl0dXRpb24oaW5mZXJyZWRTdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgaW5mZXJyZWRTdWJzdGl0dXRpb25BID0gaW5mZXJyZWRTdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgIGluZmVycmVkU3Vic3RpdHV0aW9uU3RyaW5nID0gaW5mZXJyZWRTdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2luZmVycmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgaW5mZXJyZWQgc3Vic3RpdHV0aW9uIHRvIHRoZSBsaW1pbmFsIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uQiA9IHRoaXMuaW5mZXJyZWRTdWJzdGl0dXRpb25zLmZpbmQoKGluZmVycmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbkIgPSBpbmZlcnJlZFN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgICBpbmZlcnJlZFN1YnN0aXR1dGlvbkFFcXVhbFRvSW5mZXJyZWRTdWJzdGl0dXRpb25CID0gaW5mZXJyZWRTdWJzdGl0dXRpb25BLmlzRXF1YWxUbyhpbmZlcnJlZFN1YnN0aXR1dGlvbkIpO1xuXG4gICAgICBpZiAoaW5mZXJyZWRTdWJzdGl0dXRpb25BRXF1YWxUb0luZmVycmVkU3Vic3RpdHV0aW9uQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgaWYgKGluZmVycmVkU3Vic3RpdHV0aW9uQiAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2luZmVycmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgaW5mZXJyZWQgc3Vic3RpdHV0aW9uIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIGxpbWluYWwgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZlcnJlZFN1YnN0aXR1dGlvbnMucHVzaChpbmZlcnJlZFN1YnN0aXR1dGlvbik7XG4gICAgfVxuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2luZmVycmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgaW5mZXJyZWQgc3Vic3RpdHV0aW9uIHRvIHRoZSBsaW1pbmFsIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRJbmZlcnJlZFN1YnN0aXR1dGlvbnMoaW5mZXJyZWRTdWJzdGl0dXRpb25zKSB7XG4gICAgaW5mZXJyZWRTdWJzdGl0dXRpb25zLmZvckVhY2goKGluZmVycmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICB0aGlzLmFkZEluZmVycmVkU3Vic3RpdHV0aW9uKGluZmVycmVkU3Vic3RpdHV0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNvbHZlSW5mZXJyZWRTdWJzdGl0dXRpb25zKGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgaW5mZXJyZWRTdWJzdGl0dXRpb25zID0gdGhpcy5nZXRJbmZlcnJlZFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlcyA9IG1ldGF2YXJpYWJsZU5vZGVzRnJvbUluZmVycmVkU3Vic3RpdHV0aW9ucyhpbmZlcnJlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIGZvckVhY2gobWV0YXZhcmlhYmxlTm9kZXMsIChtZXRhdmFyaWFibGVOb2RlLCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCBjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25zID0gdGhpcy5maW5kQ29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgcmV0dXJuIGZvckVhY2goY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9ucywgKGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbiwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbiA9IGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgICAgIHNvbHZlZCA9IGluZmVycmVkU3Vic3RpdHV0aW9uLmlzU29sdmVkKCk7XG5cbiAgICAgICAgaWYgKHNvbHZlZCkge1xuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluZmVycmVkU3Vic3RpdHV0aW9uLnNvbHZlKGNvbnRleHQsIGZvcndhcmQsIGJhY2spO1xuICAgICAgfSwgZm9yd2FyZCwgYmFjayk7XG4gICAgfSwgZm9yd2FyZCwgYmFjayk7XG4gIH1cblxuICBhcmVJbmZlcnJlZFN1YnN0aXR1dGlvbnNTb2x2ZWQoKSB7XG4gICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb25zID0gdGhpcy5nZXRJbmZlcnJlZFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlcyA9IG1ldGF2YXJpYWJsZU5vZGVzRnJvbUluZmVycmVkU3Vic3RpdHV0aW9ucyhpbmZlcnJlZFN1YnN0aXR1dGlvbnMpLFxuICAgICAgICAgIHNvbHZlZCA9IG1ldGF2YXJpYWJsZU5vZGVzLmV2ZXJ5KChtZXRhdmFyaWFibGVOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25zID0gdGhpcy5maW5kQ29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICAgICAgICAgIGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbnNTb2x2ZWQgPSBjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25zLmV2ZXJ5KChjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uU29sdmVkID0gY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uLmlzU29sdmVkKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvblNvbHZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbnNTb2x2ZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gc29sdmVkO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbnNMZW5ndGggPSB0aGlzLmluZmVycmVkU3Vic3RpdHV0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgZW1wdHkgPSAoaW5mZXJyZWRTdWJzdGl0dXRpb25zTGVuZ3RoID09PSAwKTtcblxuICAgIHJldHVybiBlbXB0eTtcbiAgfVxuXG4gIHF1YWxpZnkoYXNzdW1wdGlvbiwgY29uc3RyYWludCkge1xuICAgIGxldCBxdWFsaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVtcHR5ID0gdGhpcy5pc0VtcHR5KCk7XG5cbiAgICBpZiAoZW1wdHkpIHtcbiAgICAgIHF1YWxpZmllcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZ2V0U29sZUluZmVycmVkU3Vic3RpdHV0aW9uKCk7XG5cbiAgICAgIGlmIChzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgeyBSZWZlcmVuY2VJbmZlcnJlZFN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgICAgIGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICAgICAgcmVmZXJlbmNlSW5mZXJyZWRTdWJzdGl0dXRpb24gPSBSZWZlcmVuY2VJbmZlcnJlZFN1YnN0aXR1dGlvbi5mcm9tQXNzdW1wdGlvbkFuZENvbnN0cmFpbnQoYXNzdW1wdGlvbiwgY29uc3RyYWludCwgY29udGV4dCksXG4gICAgICAgICAgICAgIHJlZmVyZW5jZUluZmVycmVkU3Vic3RpdHV0aW9uQ29tcGFyZXNUb1Nzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24gPSByZWZlcmVuY2VJbmZlcnJlZFN1YnN0aXR1dGlvbi5jb21wYXJlU3Vic3RpdHV0aW9uKHNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbik7XG5cbiAgICAgICAgaWYgKHJlZmVyZW5jZUluZmVycmVkU3Vic3RpdHV0aW9uQ29tcGFyZXNUb1Nzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24pIHtcbiAgICAgICAgICBxdWFsaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1YWxpZmllcztcbiAgfVxuXG4gIG1lcmdlKGNvbnRleHQpIHtcbiAgICBjb250ZXh0LmRlYnVnKGBNZXJnaW5nIHRoZSBsaW1pbmFsIGNvbnRleHRgKTtcblxuICAgIGNvbnRleHQuYWRkSW5mZXJyZWRTdWJzdGl0dXRpb25zKHRoaXMuaW5mZXJyZWRTdWJzdGl0dXRpb25zKTtcbiAgfVxuXG4gIGZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbihjYWxsYmFjaykge1xuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0SW5mZXJyZWRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgaW5mZXJyZWRTdWJzdGl0dXRpb24gPSBpbmZlcnJlZFN1YnN0aXR1dGlvbnMuZmluZChjYWxsYmFjayk7XG5cbiAgICByZXR1cm4gaW5mZXJyZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kSW5mZXJyZWRTdWJzdGl0dXRpb25zKGNhbGxiYWNrKSB7XG4gICAgbGV0IGluZmVycmVkU3Vic3RpdHV0aW9ucztcblxuICAgIGluZmVycmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0SW5mZXJyZWRTdWJzdGl0dXRpb25zKCk7XG5cbiAgICBpbmZlcnJlZFN1YnN0aXR1dGlvbnMgPSBmaW5kKGluZmVycmVkU3Vic3RpdHV0aW9ucywgY2FsbGJhY2spOyAgLy8vXG5cbiAgICByZXR1cm4gaW5mZXJyZWRTdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZmluZEluZmVycmVkU3Vic3RpdHV0aW9uQnlWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbigoaW5mZXJyZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlTm9kZU1hdGNoZXMgPSBpbmZlcnJlZFN1YnN0aXR1dGlvbi5tYXRjaFZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAodmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGluZmVycmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZEluZmVycmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBzaW1wbGVJbmZlcnJlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZFNpbXBsZUluZmVycmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIGluZmVycmVkU3Vic3RpdHV0aW9uID0gc2ltcGxlSW5mZXJyZWRTdWJzdGl0dXRpb247ICAvLy9cblxuICAgIHJldHVybiBpbmZlcnJlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRTaW1wbGVJbmZlcnJlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3Qgc2ltcGxlSW5mZXJyZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbigoaW5mZXJyZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uU2ltcGxlID0gaW5mZXJyZWRTdWJzdGl0dXRpb24uaXNTaW1wbGUoKTtcblxuICAgICAgaWYgKGluZmVycmVkU3Vic3RpdHV0aW9uU2ltcGxlKSB7XG4gICAgICAgIGNvbnN0IHNpbXBsZUluZmVycmVkU3Vic3RpdHV0aW9uID0gaW5mZXJyZWRTdWJzdGl0dXRpb24sICAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBzaW1wbGVJbmZlcnJlZFN1YnN0aXR1dGlvbi5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHNpbXBsZUluZmVycmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZENvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZEluZmVycmVkU3Vic3RpdHV0aW9ucygoaW5mZXJyZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uQ29tcGxleCA9IGluZmVycmVkU3Vic3RpdHV0aW9uLmlzQ29tcGxleCgpO1xuXG4gICAgICBpZiAoaW5mZXJyZWRTdWJzdGl0dXRpb25Db21wbGV4KSB7XG4gICAgICAgIGNvbnN0IGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbiA9IGluZmVycmVkU3Vic3RpdHV0aW9uLCAgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZEluZmVycmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbigoaW5mZXJyZWRTdWJzdGl0dXRpb24pID0+IHsgIC8vL1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBpbmZlcnJlZFN1YnN0aXR1dGlvbi5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IGluZmVycmVkU3Vic3RpdHV0aW9uLm1hdGNoU3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgICAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gaW5mZXJyZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBpc0luZmVycmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBpbmZlcnJlZFN1YnN0aXR1dGlvblByZXNlbnQgPSAoaW5mZXJyZWRTdWJzdGl0dXRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGluZmVycmVkU3Vic3RpdHV0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzSW5mZXJyZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUobWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uTm9kZSksXG4gICAgICAgICAgaW5mZXJyZWRTdWJzdGl0dXRpb25QcmVzZW50ID0gKGluZmVycmVkU3Vic3RpdHV0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBpbmZlcnJlZFN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoY29udGV4dCkge1xuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9ucyA9IFtdLFxuICAgICAgICAgIGxpbWluYWxDb250ZXh0ID0gbmV3IExpbWluYWxDb250ZXh0KGNvbnRleHQsIGluZmVycmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gbGltaW5hbENvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJMaW1pbmFsQ29udGV4dCIsImZvckVhY2giLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJwdXNoIiwiZmluZCIsImZpcnN0IiwiYXJyYXlVdGlsaXRpZXMiLCJDb250ZXh0IiwiY29udGV4dCIsImluZmVycmVkU3Vic3RpdHV0aW9ucyIsImdldEluZmVycmVkU3Vic3RpdHV0aW9ucyIsImdldENvbnRleHQiLCJnZXRTb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24iLCJzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24iLCJpbmZlcnJlZFN1YnN0aXR1dGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJmaXJzdEluZmVycmVkU3Vic3RpdHV0aW9uIiwiZ2V0U2luZ3VsYXJOb25Ucml2aWFsSW5mZXJyZWRTdWJzdGl0dXRpb24iLCJzaW5ndWxhck5vblRyaXZpYWxJbmZlcnJlZFN1YnN0aXR1dGlvbiIsInNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbk5vblRyaXZpYWwiLCJpc05vblRyaXZpYWwiLCJhZGRTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb24iLCJhZGRJbmZlcnJlZFN1YnN0aXR1dGlvbiIsImluZmVycmVkU3Vic3RpdHV0aW9uIiwiaW5mZXJyZWRTdWJzdGl0dXRpb25BIiwiaW5mZXJyZWRTdWJzdGl0dXRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImluZmVycmVkU3Vic3RpdHV0aW9uQiIsImluZmVycmVkU3Vic3RpdHV0aW9uQUVxdWFsVG9JbmZlcnJlZFN1YnN0aXR1dGlvbkIiLCJpc0VxdWFsVG8iLCJkZWJ1ZyIsImFkZEluZmVycmVkU3Vic3RpdHV0aW9ucyIsInNvbHZlSW5mZXJyZWRTdWJzdGl0dXRpb25zIiwiZm9yd2FyZCIsImJhY2siLCJtZXRhdmFyaWFibGVOb2RlcyIsIm1ldGF2YXJpYWJsZU5vZGVzRnJvbUluZmVycmVkU3Vic3RpdHV0aW9ucyIsIm1ldGF2YXJpYWJsZU5vZGUiLCJjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25zIiwiZmluZENvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUiLCJjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb24iLCJzb2x2ZWQiLCJpc1NvbHZlZCIsInNvbHZlIiwiYXJlSW5mZXJyZWRTdWJzdGl0dXRpb25zU29sdmVkIiwiZXZlcnkiLCJjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25zU29sdmVkIiwiY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uU29sdmVkIiwiaXNFbXB0eSIsImVtcHR5IiwicXVhbGlmeSIsImFzc3VtcHRpb24iLCJjb25zdHJhaW50IiwicXVhbGlmaWVzIiwiUmVmZXJlbmNlSW5mZXJyZWRTdWJzdGl0dXRpb24iLCJlbGVtZW50cyIsInJlZmVyZW5jZUluZmVycmVkU3Vic3RpdHV0aW9uIiwiZnJvbUFzc3VtcHRpb25BbmRDb25zdHJhaW50IiwicmVmZXJlbmNlSW5mZXJyZWRTdWJzdGl0dXRpb25Db21wYXJlc1RvU3NvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbiIsImNvbXBhcmVTdWJzdGl0dXRpb24iLCJtZXJnZSIsImZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbiIsImNhbGxiYWNrIiwiZmluZEluZmVycmVkU3Vic3RpdHV0aW9ucyIsImZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlTWF0Y2hlcyIsIm1hdGNoVmFyaWFibGVOb2RlIiwiZmluZEluZmVycmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlIiwic2ltcGxlSW5mZXJyZWRTdWJzdGl0dXRpb24iLCJmaW5kU2ltcGxlSW5mZXJyZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUiLCJpbmZlcnJlZFN1YnN0aXR1dGlvblNpbXBsZSIsImlzU2ltcGxlIiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJpbmZlcnJlZFN1YnN0aXR1dGlvbkNvbXBsZXgiLCJpc0NvbXBsZXgiLCJmaW5kSW5mZXJyZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hTdWJzdGl0dXRpb25Ob2RlIiwiaXNJbmZlcnJlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUiLCJpbmZlcnJlZFN1YnN0aXR1dGlvblByZXNlbnQiLCJpc0luZmVycmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUiLCJmcm9tTm90aGluZyIsImxpbWluYWxDb250ZXh0Il0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFhQTs7O2VBQXFCQTs7OzJCQVhVO2dDQUNPO2dFQUVsQjtpRUFDQzsrQkFFc0M7Ozs7OztBQUUzRCxNQUFNLEVBQUVDLE9BQU8sRUFBRSxHQUFHQyxxQ0FBcUIsRUFDbkMsRUFBRUMsSUFBSSxFQUFFQyxJQUFJLEVBQUVDLEtBQUssRUFBRSxHQUFHQyx5QkFBYztBQUU3QixNQUFNTix1QkFBdUJPLGdCQUFPO0lBQ2pELFlBQVlDLE9BQU8sRUFBRUMscUJBQXFCLENBQUU7UUFDMUMsS0FBSyxDQUFDRDtRQUVOLElBQUksQ0FBQ0MscUJBQXFCLEdBQUdBO0lBQy9CO0lBRUFDLHlCQUF5QkQsd0JBQXdCLEVBQUUsRUFBRTtRQUNuRCxNQUFNRCxVQUFVLElBQUksQ0FBQ0csVUFBVTtRQUUvQlIsS0FBS00sdUJBQXVCLElBQUksQ0FBQ0EscUJBQXFCO1FBRXRERCxRQUFRRSx3QkFBd0IsQ0FBQ0Q7UUFFakMsT0FBT0E7SUFDVDtJ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
@@ -12,16 +12,16 @@ const _necessary = require("necessary");
12
12
  const _occamlanguages = require("occam-languages");
13
13
  const _assertion = /*#__PURE__*/ _interop_require_default(require("../assertion"));
14
14
  const _elements = require("../../elements");
15
+ const _state = require("../../utilities/state");
15
16
  const _context = require("../../utilities/context");
16
17
  const _instantiate = require("../../process/instantiate");
17
- const _state = require("../../utilities/state");
18
18
  const _element = require("../../utilities/element");
19
19
  function _interop_require_default(obj) {
20
20
  return obj && obj.__esModule ? obj : {
21
21
  default: obj
22
22
  };
23
23
  }
24
- const { last, front } = _necessary.arrayUtilities, { backwardsEvery } = _occamlanguages.continuationUtilities, { breakPointFromJSON } = _occamlanguages.breakPointUtilities;
24
+ const { last, front } = _necessary.arrayUtilities, { breakPointFromJSON } = _occamlanguages.breakPointUtilities, { all, every, backwardsEvery } = _occamlanguages.continuationUtilities;
25
25
  const _default = (0, _elements.define)(class SubproofAssertion extends _assertion.default {
26
26
  constructor(context, string, node, breakPoint, statements){
27
27
  super(context, string, node, breakPoint);
@@ -38,119 +38,62 @@ const _default = (0, _elements.define)(class SubproofAssertion extends _assertio
38
38
  const frontStatements = front(this.statements), supposedStatements = frontStatements; ///
39
39
  return supposedStatements;
40
40
  }
41
+ getSupposedStatement(index) {
42
+ const supposedStatements = this.getSupposedStatements(), supposedStatement = supposedStatements[index];
43
+ return supposedStatement;
44
+ }
41
45
  getSubproofAssertionNode() {
42
46
  const node = this.getNode(), subproofAssertionNode = node; ///
43
47
  return subproofAssertionNode;
44
48
  }
45
- validate(state, context, continuation) {
46
- let validates;
49
+ validate(state, context, forward, back) {
50
+ let assertion;
47
51
  const subproofAssertionString = this.getString(); ///
48
52
  context.trace(`Validating the '${subproofAssertionString}' subproof assertion...`);
49
- let assertion;
50
53
  assertion = this.findAssertion(context);
51
54
  if (assertion !== null) {
52
55
  const subproofAssertion = assertion; ///
53
56
  context.debug(`The '${subproofAssertionString}' subproof assertion is already present.`);
54
- validates = continuation(subproofAssertion, context);
55
- } else {
56
- assertion = this; ///
57
- const validateStatements = this.validateStatements.bind(this);
58
- validates = all([
59
- validateStatements
60
- ], state, context, (state, context)=>{
61
- let validates;
62
- const validateWhenDeclared = this.validateWhenDeclared.bind(this), validateWhenDerived = this.validateWhenDerived.bind(this);
63
- validates = exists([
64
- validateWhenDeclared,
65
- validateWhenDerived
66
- ], state, context, (state, context)=>{
67
- let validates;
68
- context.addAssertion(assertion);
69
- const subproofAssertion = assertion; ///
70
- validates = continuation(subproofAssertion, context);
71
- return validates;
72
- });
73
- return validates;
74
- });
57
+ return forward(subproofAssertion, context);
75
58
  }
76
- if (validates) {
59
+ assertion = this; ///
60
+ const validateStatements = this.validateStatements.bind(this);
61
+ return all([
62
+ validateStatements
63
+ ], state, context, (state, context, back)=>{
64
+ context.addAssertion(assertion);
65
+ const subproofAssertion = assertion; ///
77
66
  context.debug(`...validated the '${subproofAssertionString}' subproof assertion.`);
78
- }
79
- return validates;
67
+ return forward(subproofAssertion, context, back);
68
+ }, back);
80
69
  }
81
- validateStatements(state, context, continuation) {
82
- let statementsValidate;
70
+ validateStatements(state, context, forward, back) {
83
71
  const subproofAssertionString = this.getString(); ///
84
72
  context.trace(`Validating the '${subproofAssertionString}' subproof assertion's statements...`);
85
- statementsValidate = every(this.statements, (statement, context, continuation)=>{
86
- let statementValidates;
87
- (0, _state.declare)((state)=>{
88
- statementValidates = statement.validate(state, context, (statement, context)=>{
89
- let validates;
90
- validates = continuation(context);
91
- return validates;
92
- });
73
+ return every(this.statements, (statement, context, forward, back)=>{
74
+ return (0, _state.declare)((state)=>{
75
+ return statement.validate(state, context, (statement, context, back)=>{
76
+ return forward(context, back);
77
+ }, back);
93
78
  });
94
- return statementValidates;
95
- }, context, (context)=>{
96
- let validates;
97
- validates = continuation(state, context);
98
- return validates;
99
- });
100
- if (statementsValidate) {
79
+ }, context, (context, back)=>{
101
80
  context.debug(`...validated the '${subproofAssertionString}' subproof assertion's statements.`);
102
- }
103
- return statementsValidate;
104
- }
105
- validateWhenDeclared(state, context, continuation) {
106
- let validatesWhenDeclared = false;
107
- const declared = (0, _state.isDeclared)(state);
108
- if (declared) {
109
- const subproofAssertionString = this.getString(); ///
110
- context.trace(`Validating the '${subproofAssertionString}' declared subproof assertion...`);
111
- validatesWhenDeclared = continuation(state, context);
112
- if (validatesWhenDeclared) {
113
- context.debug(`...validated the '${subproofAssertionString}' declared subproof assertion.`);
114
- }
115
- }
116
- return validatesWhenDeclared;
81
+ return forward(state, context, back);
82
+ }, back);
117
83
  }
118
- validateWhenDerived(state, context, continuation) {
119
- let validatesWhenDerived = false;
120
- const derived = (0, _state.isDerived)(state);
121
- if (derived) {
122
- const subproofAssertionString = this.getString(); ///
123
- context.trace(`Validating the '${subproofAssertionString}' derived subproof assertion...`);
124
- validatesWhenDerived = true;
125
- validatesWhenDerived = continuation(state, context);
126
- if (validatesWhenDerived) {
127
- context.debug(`...validated the '${subproofAssertionString}' derived subproof assertion.`);
128
- }
129
- }
130
- return validatesWhenDerived;
131
- }
132
- unifySubproof(subproof, generalContext, specificContext, continuation) {
84
+ unifySubproof(subproof, generalContext, specificContext, forward, back) {
133
85
  const context = specificContext, subproofString = subproof.getString(), subproofAssertionString = this.getString(); ///
134
86
  context.trace(`Unifying the '${subproofString}' subproof with the '${subproofAssertionString}' subproof assertion...`);
135
87
  const lastStep = subproof.getLastStep();
136
- return this.unifyLastStep(lastStep, generalContext, specificContext, (lastStepUnifies)=>{
137
- let subproofUnifies = false;
138
- if (!lastStepUnifies) {
139
- return continuation(subproofUnifies);
140
- }
88
+ return this.unifyLastStep(lastStep, generalContext, specificContext, (generalContext, specificContext, back)=>{
141
89
  const suppositions = subproof.getSuppositions();
142
- return this.unifySuppositions(suppositions, generalContext, specificContext, (suppositionsUnify)=>{
143
- if (suppositionsUnify) {
144
- subproofUnifies = true;
145
- }
146
- if (subproofUnifies) {
147
- context.debug(`...unified the '${subproofString}' subproof with the '${subproofAssertionString}' subproof assertion.`);
148
- }
149
- return continuation(subproofUnifies);
150
- });
151
- });
90
+ return this.unifySuppositions(suppositions, generalContext, specificContext, (generalContext, specificContext, back)=>{
91
+ context.debug(`...unified the '${subproofString}' subproof with the '${subproofAssertionString}' subproof assertion.`);
92
+ return forward(generalContext, specificContext, back);
93
+ }, back);
94
+ }, back);
152
95
  }
153
- unifyLastStep(lastStep, generalContext, specificContext, continuation) {
96
+ unifyLastStep(lastStep, generalContext, specificContext, forward, back) {
154
97
  const context = specificContext, lastStepString = lastStep.getString(), deducedStatement = this.getDeducedStatement(), deducedStatementString = deducedStatement.getString();
155
98
  context.trace(`Unifying the '${lastStepString}' last step with the '${deducedStatementString}' deduced statement...`);
156
99
  const lastStepContext = lastStep.getContext();
@@ -158,54 +101,40 @@ const _default = (0, _elements.define)(class SubproofAssertion extends _assertio
158
101
  return (0, _context.join)((specificContext)=>{
159
102
  return (0, _context.reconcile)((specificContext)=>{
160
103
  const lastStepStatement = lastStep.getStatement();
161
- return deducedStatement.unifyStatement(lastStepStatement, generalContext, specificContext, (lastStepStatementUnifies)=>{
162
- let lastStepUnifies = false;
163
- if (lastStepStatementUnifies) {
164
- specificContext.commit(context);
165
- lastStepUnifies = true;
166
- }
167
- if (lastStepUnifies) {
168
- context.debug(`...unified the '${lastStepString}' last step with the '${deducedStatementString}' deduced statement.`);
169
- }
170
- return continuation(lastStepUnifies);
171
- });
104
+ return deducedStatement.unifyStatement(lastStepStatement, generalContext, specificContext, (generalContext, specificContext, back)=>{
105
+ specificContext.commit(context);
106
+ specificContext = context; ///
107
+ context.debug(`...unified the '${lastStepString}' last step with the '${deducedStatementString}' deduced statement.`);
108
+ return forward(generalContext, specificContext, back);
109
+ }, back);
172
110
  }, specificContext);
173
111
  }, specificContext, context);
174
112
  }
175
- unifySupposition(supposition, supposedStatement, generalContext, specificContext, continuation) {
176
- const context = specificContext, suppositionString = supposition.getString(), supposedStatementString = supposedStatement.getString();
113
+ unifySupposition(supposition, generalContext, specificContext, forward, back, index) {
114
+ const context = specificContext, suppositionString = supposition.getString(), supposedStatement = this.getSupposedStatement(index), supposedStatementString = supposedStatement.getString();
177
115
  context.trace(`Unifying the '${suppositionString}' supposition with the '${supposedStatementString}' supposed statement...`);
178
116
  const suppositionContext = supposition.getContext();
179
117
  specificContext = suppositionContext; ///
180
118
  return (0, _context.join)((specificContext)=>{
181
119
  return (0, _context.reconcile)((specificContext)=>{
182
120
  const suppositionStatement = supposition.getStatement();
183
- return supposedStatement.unifyStatement(suppositionStatement, generalContext, specificContext, (suppositionStatementUnifies)=>{
184
- let suppositionUnifies = false;
185
- if (suppositionStatementUnifies) {
186
- specificContext.commit(context);
187
- suppositionUnifies = true;
188
- }
189
- if (suppositionUnifies) {
190
- context.debug(`...unified the '${suppositionString}' supposition with the '${supposedStatementString}' supposed statement.`);
191
- }
192
- return continuation(suppositionUnifies);
193
- });
121
+ return supposedStatement.unifyStatement(suppositionStatement, generalContext, specificContext, (generalContext, specificContext, back)=>{
122
+ specificContext.commit(context);
123
+ specificContext = context; ///
124
+ context.debug(`...unified the '${suppositionString}' supposition with the '${supposedStatementString}' supposed statement.`);
125
+ return forward(generalContext, specificContext, back);
126
+ }, back);
194
127
  }, specificContext);
195
128
  }, specificContext, context);
196
129
  }
197
- unifySuppositions(suppositions, generalContext, specificContext, continuation) {
130
+ unifySuppositions(suppositions, generalContext, specificContext, forward, back) {
198
131
  const supposedStatements = this.getSupposedStatements(), suppositionsLength = suppositions.length, supposedStatementsLength = supposedStatements.length;
199
132
  if (suppositionsLength !== supposedStatementsLength) {
200
- const suppositionsUnify = false;
201
- return continuation(suppositionsUnify);
133
+ return back();
202
134
  }
203
- let index = suppositionsLength; ///
204
- return backwardsEvery(suppositions, (supposition, continuation)=>{
205
- index--;
206
- const supposedStatement = supposedStatements[index];
207
- return this.unifySupposition(supposition, supposedStatement, generalContext, specificContext, continuation);
208
- }, continuation);
135
+ return backwardsEvery(suppositions, (supposition, forward, back, index)=>{
136
+ return this.unifySupposition(supposition, generalContext, specificContext, forward, back, index);
137
+ }, forward, back);
209
138
  }
210
139
  static name = "SubproofAssertion";
211
140
  static fromJSON(json, context) {
@@ -233,4 +162,4 @@ function statementsFromSubproofAssertionNode(subproofAssertionNode, context) {
233
162
  return statements;
234
163
  }
235
164
 
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zdWJwcm9vZi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGpvaW4sIHJlY29uY2lsZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlU3VicHJvb2ZBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgZGVjbGFyZSwgaXNEZXJpdmVkLCBpc0RlY2xhcmVkIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuaW1wb3J0IHsgc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IGxhc3QsIGZyb250IH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgYmFja3dhcmRzRXZlcnkgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWtQb2ludEZyb21KU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgU3VicHJvb2ZBc3NlcnRpb24gZXh0ZW5kcyBBc3NlcnRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudHMpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5zdGF0ZW1lbnRzID0gc3RhdGVtZW50cztcbiAgfVxuXG4gIGdldFN0YXRlbWVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50cztcbiAgfVxuXG4gIGdldERlZHVjZWRTdGF0ZW1lbnQoKSB7XG4gICAgY29uc3QgbGFzdFN0YXRlbWVudCA9IGxhc3QodGhpcy5zdGF0ZW1lbnRzKSxcbiAgICAgICAgICBkZWR1Y2VkU3RhdGVtZW50ID0gbGFzdFN0YXRlbWVudDsgLy8vXG5cbiAgICByZXR1cm4gZGVkdWNlZFN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFN1cHBvc2VkU3RhdGVtZW50cygpIHtcbiAgICBjb25zdCBmcm9udFN0YXRlbWVudHMgPSBmcm9udCh0aGlzLnN0YXRlbWVudHMpLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50cyA9IGZyb250U3RhdGVtZW50czsgIC8vL1xuXG4gICAgcmV0dXJuIHN1cHBvc2VkU3RhdGVtZW50cztcbiAgfVxuXG4gIGdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb25Ob2RlO1xuICB9XG5cbiAgdmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBsZXQgYXNzZXJ0aW9uO1xuXG4gICAgYXNzZXJ0aW9uID0gdGhpcy5maW5kQXNzZXJ0aW9uKGNvbnRleHQpO1xuXG4gICAgaWYgKGFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24gaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oc3VicHJvb2ZBc3NlcnRpb24sIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnRpb24gPSB0aGlzOyAvLy9cblxuICAgICAgY29uc3QgdmFsaWRhdGVTdGF0ZW1lbnRzID0gdGhpcy52YWxpZGF0ZVN0YXRlbWVudHMuYmluZCh0aGlzKTtcblxuICAgICAgdmFsaWRhdGVzID0gYWxsKFtcbiAgICAgICAgdmFsaWRhdGVTdGF0ZW1lbnRzXG4gICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgY29uc3QgdmFsaWRhdGVXaGVuRGVjbGFyZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlY2xhcmVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgICB2YWxpZGF0ZXMgPSBleGlzdHMoW1xuICAgICAgICAgIHZhbGlkYXRlV2hlbkRlY2xhcmVkLFxuICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWRcbiAgICAgICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCkgPT4ge1xuICAgICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICAgICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHN1YnByb29mQXNzZXJ0aW9uLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudHMoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCBzdGF0ZW1lbnRzVmFsaWRhdGU7XG5cbiAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uJ3Mgc3RhdGVtZW50cy4uLmApO1xuXG4gICAgc3RhdGVtZW50c1ZhbGlkYXRlID0gZXZlcnkodGhpcy5zdGF0ZW1lbnRzLCAoc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXM7XG5cbiAgICAgIGRlY2xhcmUoKHN0YXRlKSA9PiB7XG4gICAgICAgIHN0YXRlbWVudFZhbGlkYXRlcyA9IHN0YXRlbWVudC52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHN0YXRlbWVudCwgY29udGV4dCkgPT4ge1xuICAgICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzO1xuICAgIH0sIGNvbnRleHQsIChjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgIH0pO1xuXG4gICAgaWYgKHN0YXRlbWVudHNWYWxpZGF0ZSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbidzIHN0YXRlbWVudHMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlbWVudHNWYWxpZGF0ZTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlY2xhcmVkKHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlbkRlY2xhcmVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBkZWNsYXJlZCA9IGlzRGVjbGFyZWQoc3RhdGUpO1xuXG4gICAgaWYgKGRlY2xhcmVkKSB7XG4gICAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIGRlY2xhcmVkIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgICB2YWxpZGF0ZXNXaGVuRGVjbGFyZWQgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAodmFsaWRhdGVzV2hlbkRlY2xhcmVkKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBkZWNsYXJlZCBzdWJwcm9vZiBhc3NlcnRpb24uYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc1doZW5EZWNsYXJlZDtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlcml2ZWQoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgZGVyaXZlZCA9IGlzRGVyaXZlZChzdGF0ZSk7XG5cbiAgICBpZiAoZGVyaXZlZCkge1xuICAgICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBkZXJpdmVkIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRydWU7XG5cbiAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gY29udGludWF0aW9uKHN0YXRlLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBkZXJpdmVkIHN1YnByb29mIGFzc2VydGlvbi5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzV2hlbkRlcml2ZWQ7XG4gIH1cblxuICB1bmlmeVN1YnByb29mKHN1YnByb29mLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3VicHJvb2ZTdHJpbmcgPSBzdWJwcm9vZi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2Ygd2l0aCB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IGxhc3RTdGVwID0gc3VicHJvb2YuZ2V0TGFzdFN0ZXAoKTtcblxuICAgIHJldHVybiB0aGlzLnVuaWZ5TGFzdFN0ZXAobGFzdFN0ZXAsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChsYXN0U3RlcFVuaWZpZXMpID0+IHtcbiAgICAgIGxldCBzdWJwcm9vZlVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKCFsYXN0U3RlcFVuaWZpZXMpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWJwcm9vZlVuaWZpZXMpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdXBwb3NpdGlvbnMgPSBzdWJwcm9vZi5nZXRTdXBwb3NpdGlvbnMoKTtcblxuICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3VwcG9zaXRpb25zVW5pZnkpID0+IHtcbiAgICAgICAgaWYgKHN1cHBvc2l0aW9uc1VuaWZ5KSB7XG4gICAgICAgICAgc3VicHJvb2ZVbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJwcm9vZlVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnByb29mIHdpdGggdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWJwcm9vZlVuaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeUxhc3RTdGVwKGxhc3RTdGVwLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgbGFzdFN0ZXBTdHJpbmcgPSBsYXN0U3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBkZWR1Y2VkU3RhdGVtZW50ID0gdGhpcy5nZXREZWR1Y2VkU3RhdGVtZW50KCksXG4gICAgICAgICAgZGVkdWNlZFN0YXRlbWVudFN0cmluZyA9IGRlZHVjZWRTdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7bGFzdFN0ZXBTdHJpbmd9JyBsYXN0IHN0ZXAgd2l0aCB0aGUgJyR7ZGVkdWNlZFN0YXRlbWVudFN0cmluZ30nIGRlZHVjZWQgc3RhdGVtZW50Li4uYClcblxuICAgIGNvbnN0IGxhc3RTdGVwQ29udGV4dCA9IGxhc3RTdGVwLmdldENvbnRleHQoKTtcblxuICAgIHNwZWNpZmljQ29udGV4dCA9IGxhc3RTdGVwQ29udGV4dDsgIC8vL1xuXG4gICAgcmV0dXJuIGpvaW4oKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGxhc3RTdGVwU3RhdGVtZW50ID0gbGFzdFN0ZXAuZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgICAgcmV0dXJuIGRlZHVjZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQobGFzdFN0ZXBTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChsYXN0U3RlcFN0YXRlbWVudFVuaWZpZXMpID0+IHtcbiAgICAgICAgICBsZXQgbGFzdFN0ZXBVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAobGFzdFN0ZXBTdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgICBsYXN0U3RlcFVuaWZpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChsYXN0U3RlcFVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2xhc3RTdGVwU3RyaW5nfScgbGFzdCBzdGVwIHdpdGggdGhlICcke2RlZHVjZWRTdGF0ZW1lbnRTdHJpbmd9JyBkZWR1Y2VkIHN0YXRlbWVudC5gKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24obGFzdFN0ZXBVbmlmaWVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCwgY29udGV4dCk7XG4gfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIHN1cHBvc2VkU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudFN0cmluZyA9IHN1cHBvc2VkU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuLi5gKVxuXG4gICAgY29uc3Qgc3VwcG9zaXRpb25Db250ZXh0ID0gc3VwcG9zaXRpb24uZ2V0Q29udGV4dCgpO1xuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gc3VwcG9zaXRpb25Db250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3Qgc3VwcG9zaXRpb25TdGF0ZW1lbnQgPSBzdXBwb3NpdGlvbi5nZXRTdGF0ZW1lbnQoKTtcblxuICAgICAgICByZXR1cm4gc3VwcG9zZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3VwcG9zaXRpb25TdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdXBwb3NpdGlvblN0YXRlbWVudFVuaWZpZXMpID0+IHtcbiAgICAgICAgICBsZXQgc3VwcG9zaXRpb25VbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoc3VwcG9zaXRpb25TdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgICBzdXBwb3NpdGlvblVuaWZpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdXBwb3NpdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuYClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cHBvc2l0aW9uVW5pZmllcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdXBwb3NlZFN0YXRlbWVudHMgPSB0aGlzLmdldFN1cHBvc2VkU3RhdGVtZW50cygpLFxuICAgICAgICAgIHN1cHBvc2l0aW9uc0xlbmd0aCA9IHN1cHBvc2l0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgc3VwcG9zZWRTdGF0ZW1lbnRzTGVuZ3RoID0gc3VwcG9zZWRTdGF0ZW1lbnRzLmxlbmd0aDtcblxuICAgIGlmIChzdXBwb3NpdGlvbnNMZW5ndGggIT09IHN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCkge1xuICAgICAgY29uc3Qgc3VwcG9zaXRpb25zVW5pZnkgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdXBwb3NpdGlvbnNVbmlmeSk7XG4gICAgfVxuXG4gICAgbGV0IGluZGV4ID0gc3VwcG9zaXRpb25zTGVuZ3RoOyAvLy9cblxuICAgIHJldHVybiBiYWNrd2FyZHNFdmVyeShzdXBwb3NpdGlvbnMsIChzdXBwb3NpdGlvbiwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICBpbmRleC0tO1xuXG4gICAgICBjb25zdCBzdXBwb3NlZFN0YXRlbWVudCA9IHN1cHBvc2VkU3RhdGVtZW50c1tpbmRleF07XG5cbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIHN1cHBvc2VkU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0sIGNvbnRpbnVhdGlvbik7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiU3VicHJvb2ZBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBzdWJwcm9vckFzc2VydGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCB7IG5hbWUgfSA9IGpzb247XG5cbiAgICBpZiAodGhpcy5uYW1lID09PSBuYW1lKSB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gaW5zdGFudGlhdGVTdWJwcm9vZkFzc2VydGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICAgIHN1YnByb29yQXNzZXJ0aW9uID0gbmV3IFN1YnByb29mQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50cyk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VicHJvb3JBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZXMgPSBzdWJwcm9vZkFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZXMoKSxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudE5vZGVzLm1hcCgoc3RhdGVtZXROb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50ID0gY29udGV4dC5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWV0Tm9kZSk7XG5cbiAgICAgICAgICByZXR1cm4gc3RhdGVtZW50O1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cbiJdLCJuYW1lcyI6WyJsYXN0IiwiZnJvbnQiLCJhcnJheVV0aWxpdGllcyIsImJhY2t3YXJkc0V2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIlN1YnByb29mQXNzZXJ0aW9uIiwiQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3RhdGVtZW50cyIsImdldFN0YXRlbWVudHMiLCJnZXREZWR1Y2VkU3RhdGVtZW50IiwibGFzdFN0YXRlbWVudCIsImRlZHVjZWRTdGF0ZW1lbnQiLCJnZXRTdXBwb3NlZFN0YXRlbWVudHMiLCJmcm9udFN0YXRlbWVudHMiLCJzdXBwb3NlZFN0YXRlbWVudHMiLCJnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJnZXROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwidmFsaWRhdGUiLCJzdGF0ZSIsImNvbnRpbnVhdGlvbiIsInZhbGlkYXRlcyIsInN1YnByb29mQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJhc3NlcnRpb24iLCJmaW5kQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb24iLCJkZWJ1ZyIsInZhbGlkYXRlU3RhdGVtZW50cyIsImJpbmQiLCJhbGwiLCJ2YWxpZGF0ZVdoZW5EZWNsYXJlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJleGlzdHMiLCJhZGRBc3NlcnRpb24iLCJzdGF0ZW1lbnRzVmFsaWRhdGUiLCJldmVyeSIsInN0YXRlbWVudCIsInN0YXRlbWVudFZhbGlkYXRlcyIsImRlY2xhcmUiLCJ2YWxpZGF0ZXNXaGVuRGVjbGFyZWQiLCJkZWNsYXJlZCIsImlzRGVjbGFyZWQiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCIsImRlcml2ZWQiLCJpc0Rlcml2ZWQiLCJ1bmlmeVN1YnByb29mIiwic3VicHJvb2YiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInN1YnByb29mU3RyaW5nIiwibGFzdFN0ZXAiLCJnZXRMYXN0U3RlcCIsInVuaWZ5TGFzdFN0ZXAiLCJsYXN0U3RlcFVuaWZpZXMiLCJzdWJwcm9vZlVuaWZpZXMiLCJzdXBwb3NpdGlvbnMiLCJnZXRTdXBwb3NpdGlvbnMiLCJ1bmlmeVN1cHBvc2l0aW9ucyIsInN1cHBvc2l0aW9uc1VuaWZ5IiwibGFzdFN0ZXBTdHJpbmciLCJkZWR1Y2VkU3RhdGVtZW50U3RyaW5nIiwibGFzdFN0ZXBDb250ZXh0IiwiZ2V0Q29udGV4dCIsImpvaW4iLCJyZWNvbmNpbGUiLCJsYXN0U3RlcFN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50IiwibGFzdFN0ZXBTdGF0ZW1lbnRVbmlmaWVzIiwiY29tbWl0IiwidW5pZnlTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uIiwic3VwcG9zZWRTdGF0ZW1lbnQiLCJzdXBwb3NpdGlvblN0cmluZyIsInN1cHBvc2VkU3RhdGVtZW50U3RyaW5nIiwic3VwcG9zaXRpb25Db250ZXh0Iiwic3VwcG9zaXRpb25TdGF0ZW1lbnQiLCJzdXBwb3NpdGlvblN0YXRlbWVudFVuaWZpZXMiLCJzdXBwb3NpdGlvblVuaWZpZXMiLCJzdXBwb3NpdGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGgiLCJpbmRleCIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iLCJzdWJwcm9vckFzc2VydGlvbiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsIm1hcCIsInN0YXRlbWV0Tm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWlCQTs7O2VBQUE7OzsyQkFmK0I7Z0NBQzRCO2tFQUVyQzswQkFFQzt5QkFDc0I7NkJBQ0E7dUJBQ0U7eUJBQ0k7Ozs7OztBQUVuRCxNQUFNLEVBQUVBLElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlCQUFjLEVBQ2hDLEVBQUVDLGNBQWMsRUFBRSxHQUFHQyxxQ0FBcUIsRUFDMUMsRUFBRUMsa0JBQWtCLEVBQUUsR0FBR0MsbUNBQW1CO01BRWxELFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsMEJBQTBCQyxrQkFBUztJQUM3RCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsQ0FBRTtRQUN6RCxLQUFLLENBQUNKLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtJQUNwQjtJQUVBQyxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQ0QsVUFBVTtJQUN4QjtJQUVBRSxzQkFBc0I7UUFDcEIsTUFBTUMsZ0JBQWdCakIsS0FBSyxJQUFJLENBQUNjLFVBQVUsR0FDcENJLG1CQUFtQkQsZUFBZSxHQUFHO1FBRTNDLE9BQU9DO0lBQ1Q7SUFFQUMsd0JBQXdCO1FBQ3RCLE1BQU1DLGtCQUFrQm5CLE1BQU0sSUFBSSxDQUFDYSxVQUFVLEdBQ3ZDTyxxQkFBcUJELGlCQUFrQixHQUFH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
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zdWJwcm9vZi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGRlY2xhcmUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5pbXBvcnQgeyBqb2luLCByZWNvbmNpbGUsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVN1YnByb29mQXNzZXJ0aW9uIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuY29uc3QgeyBsYXN0LCBmcm9udCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGJyZWFrUG9pbnRGcm9tSlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcyxcbiAgICAgIHsgYWxsLCBldmVyeSwgYmFja3dhcmRzRXZlcnkgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFN1YnByb29mQXNzZXJ0aW9uIGV4dGVuZHMgQXNzZXJ0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnRzKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMuc3RhdGVtZW50cyA9IHN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnRzKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudHM7XG4gIH1cblxuICBnZXREZWR1Y2VkU3RhdGVtZW50KCkge1xuICAgIGNvbnN0IGxhc3RTdGF0ZW1lbnQgPSBsYXN0KHRoaXMuc3RhdGVtZW50cyksXG4gICAgICAgICAgZGVkdWNlZFN0YXRlbWVudCA9IGxhc3RTdGF0ZW1lbnQ7IC8vL1xuXG4gICAgcmV0dXJuIGRlZHVjZWRTdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRTdXBwb3NlZFN0YXRlbWVudHMoKSB7XG4gICAgY29uc3QgZnJvbnRTdGF0ZW1lbnRzID0gZnJvbnQodGhpcy5zdGF0ZW1lbnRzKSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudHMgPSBmcm9udFN0YXRlbWVudHM7ICAvLy9cblxuICAgIHJldHVybiBzdXBwb3NlZFN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRTdXBwb3NlZFN0YXRlbWVudChpbmRleCkge1xuICAgIGNvbnN0IHN1cHBvc2VkU3RhdGVtZW50cyA9IHRoaXMuZ2V0U3VwcG9zZWRTdGF0ZW1lbnRzKCksXG4gICAgICAgICAgc3VwcG9zZWRTdGF0ZW1lbnQgPSBzdXBwb3NlZFN0YXRlbWVudHNbaW5kZXhdO1xuXG4gICAgcmV0dXJuIHN1cHBvc2VkU3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbk5vZGU7XG4gIH1cblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBhc3NlcnRpb247XG5cbiAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBhc3NlcnRpb24gPSB0aGlzLmZpbmRBc3NlcnRpb24oY29udGV4dCk7XG5cbiAgICBpZiAoYXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbiBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkIChzdWJwcm9vZkFzc2VydGlvbiwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgYXNzZXJ0aW9uID0gdGhpczsgLy8vXG5cbiAgICBjb25zdCB2YWxpZGF0ZVN0YXRlbWVudHMgPSB0aGlzLnZhbGlkYXRlU3RhdGVtZW50cy5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGFsbChbXG4gICAgICB2YWxpZGF0ZVN0YXRlbWVudHNcbiAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN1YnByb29mQXNzZXJ0aW9uLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50cyhzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24ncyBzdGF0ZW1lbnRzLi4uYCk7XG5cbiAgICByZXR1cm4gZXZlcnkodGhpcy5zdGF0ZW1lbnRzLCAoc3RhdGVtZW50LCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICByZXR1cm4gZGVjbGFyZSgoc3RhdGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHN0YXRlbWVudC52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHN0YXRlbWVudCwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uJ3Mgc3RhdGVtZW50cy5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdW5pZnlTdWJwcm9vZihzdWJwcm9vZiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mLmdldFN0cmluZygpLFxuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3VicHJvb2ZTdHJpbmd9JyBzdWJwcm9vZiB3aXRoIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgbGFzdFN0ZXAgPSBzdWJwcm9vZi5nZXRMYXN0U3RlcCgpO1xuXG4gICAgcmV0dXJuIHRoaXMudW5pZnlMYXN0U3RlcChsYXN0U3RlcCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IHN1cHBvc2l0aW9ucyA9IHN1YnByb29mLmdldFN1cHBvc2l0aW9ucygpO1xuXG4gICAgICByZXR1cm4gdGhpcy51bmlmeVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2Ygd2l0aCB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24uYCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcndhcmQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgICB9LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5TGFzdFN0ZXAobGFzdFN0ZXAsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgbGFzdFN0ZXBTdHJpbmcgPSBsYXN0U3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBkZWR1Y2VkU3RhdGVtZW50ID0gdGhpcy5nZXREZWR1Y2VkU3RhdGVtZW50KCksXG4gICAgICAgICAgZGVkdWNlZFN0YXRlbWVudFN0cmluZyA9IGRlZHVjZWRTdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7bGFzdFN0ZXBTdHJpbmd9JyBsYXN0IHN0ZXAgd2l0aCB0aGUgJyR7ZGVkdWNlZFN0YXRlbWVudFN0cmluZ30nIGRlZHVjZWQgc3RhdGVtZW50Li4uYClcblxuICAgIGNvbnN0IGxhc3RTdGVwQ29udGV4dCA9IGxhc3RTdGVwLmdldENvbnRleHQoKTtcblxuICAgIHNwZWNpZmljQ29udGV4dCA9IGxhc3RTdGVwQ29udGV4dDsgIC8vL1xuXG4gICAgcmV0dXJuIGpvaW4oKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGxhc3RTdGVwU3RhdGVtZW50ID0gbGFzdFN0ZXAuZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgICAgcmV0dXJuIGRlZHVjZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQobGFzdFN0ZXBTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2xhc3RTdGVwU3RyaW5nfScgbGFzdCBzdGVwIHdpdGggdGhlICcke2RlZHVjZWRTdGF0ZW1lbnRTdHJpbmd9JyBkZWR1Y2VkIHN0YXRlbWVudC5gKTtcblxuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiB9XG5cbiAgdW5pZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaywgaW5kZXgpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudCA9IHRoaXMuZ2V0U3VwcG9zZWRTdGF0ZW1lbnQoaW5kZXgpLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50U3RyaW5nID0gc3VwcG9zZWRTdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbiB3aXRoIHRoZSAnJHtzdXBwb3NlZFN0YXRlbWVudFN0cmluZ30nIHN1cHBvc2VkIHN0YXRlbWVudC4uLmApXG5cbiAgICBjb25zdCBzdXBwb3NpdGlvbkNvbnRleHQgPSBzdXBwb3NpdGlvbi5nZXRDb250ZXh0KCk7XG5cbiAgICBzcGVjaWZpY0NvbnRleHQgPSBzdXBwb3NpdGlvbkNvbnRleHQ7ICAvLy9cblxuICAgIHJldHVybiBqb2luKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBzdXBwb3NpdGlvblN0YXRlbWVudCA9IHN1cHBvc2l0aW9uLmdldFN0YXRlbWVudCgpO1xuXG4gICAgICAgIHJldHVybiBzdXBwb3NlZFN0YXRlbWVudC51bmlmeVN0YXRlbWVudChzdXBwb3NpdGlvblN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbiB3aXRoIHRoZSAnJHtzdXBwb3NlZFN0YXRlbWVudFN0cmluZ30nIHN1cHBvc2VkIHN0YXRlbWVudC5gKVxuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3Qgc3VwcG9zZWRTdGF0ZW1lbnRzID0gdGhpcy5nZXRTdXBwb3NlZFN0YXRlbWVudHMoKSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnNMZW5ndGggPSBzdXBwb3NpdGlvbnMubGVuZ3RoLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCA9IHN1cHBvc2VkU3RhdGVtZW50cy5sZW5ndGg7XG5cbiAgICBpZiAoc3VwcG9zaXRpb25zTGVuZ3RoICE9PSBzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGgpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhY2t3YXJkc0V2ZXJ5KHN1cHBvc2l0aW9ucywgKHN1cHBvc2l0aW9uLCBmb3J3YXJkLCBiYWNrLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaywgaW5kZXgpO1xuICAgIH0sIGZvcndhcmQsIGJhY2spO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlN1YnByb29mQXNzZXJ0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgc3VicHJvb3JBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBqc29uO1xuXG4gICAgaWYgKHRoaXMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IGluc3RhbnRpYXRlU3VicHJvb2ZBc3NlcnRpb24oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbm9kZSA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgICBzdWJwcm9vckFzc2VydGlvbiA9IG5ldyBTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudHMpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnByb29yQXNzZXJ0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xuICB9XG59KTtcblxuZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGVzID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGVzKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnROb2Rlcy5tYXAoKHN0YXRlbWV0Tm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1ldE5vZGUpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG4iXSwibmFtZXMiOlsibGFzdCIsImZyb250IiwiYXJyYXlVdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiYWxsIiwiZXZlcnkiLCJiYWNrd2FyZHNFdmVyeSIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsImRlZmluZSIsIlN1YnByb29mQXNzZXJ0aW9uIiwiQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3RhdGVtZW50cyIsImdldFN0YXRlbWVudHMiLCJnZXREZWR1Y2VkU3RhdGVtZW50IiwibGFzdFN0YXRlbWVudCIsImRlZHVjZWRTdGF0ZW1lbnQiLCJnZXRTdXBwb3NlZFN0YXRlbWVudHMiLCJmcm9udFN0YXRlbWVudHMiLCJzdXBwb3NlZFN0YXRlbWVudHMiLCJnZXRTdXBwb3NlZFN0YXRlbWVudCIsImluZGV4Iiwic3VwcG9zZWRTdGF0ZW1lbnQiLCJnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJnZXROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwidmFsaWRhdGUiLCJzdGF0ZSIsImZvcndhcmQiLCJiYWNrIiwiYXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImZpbmRBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbiIsImRlYnVnIiwidmFsaWRhdGVTdGF0ZW1lbnRzIiwiYmluZCIsImFkZEFzc2VydGlvbiIsInN0YXRlbWVudCIsImRlY2xhcmUiLCJ1bmlmeVN1YnByb29mIiwic3VicHJvb2YiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInN1YnByb29mU3RyaW5nIiwibGFzdFN0ZXAiLCJnZXRMYXN0U3RlcCIsInVuaWZ5TGFzdFN0ZXAiLCJzdXBwb3NpdGlvbnMiLCJnZXRTdXBwb3NpdGlvbnMiLCJ1bmlmeVN1cHBvc2l0aW9ucyIsImxhc3RTdGVwU3RyaW5nIiwiZGVkdWNlZFN0YXRlbWVudFN0cmluZyIsImxhc3RTdGVwQ29udGV4dCIsImdldENvbnRleHQiLCJqb2luIiwicmVjb25jaWxlIiwibGFzdFN0ZXBTdGF0ZW1lbnQiLCJnZXRTdGF0ZW1lbnQiLCJ1bmlmeVN0YXRlbWVudCIsImNvbW1pdCIsInVuaWZ5U3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uU3RyaW5nIiwic3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmciLCJzdXBwb3NpdGlvbkNvbnRleHQiLCJzdXBwb3NpdGlvblN0YXRlbWVudCIsInN1cHBvc2l0aW9uc0xlbmd0aCIsImxlbmd0aCIsInN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iLCJzdWJwcm9vckFzc2VydGlvbiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsIm1hcCIsInN0YXRlbWV0Tm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWlCQTs7O2VBQUE7OzsyQkFmK0I7Z0NBQzRCO2tFQUVyQzswQkFFQzt1QkFDQzt5QkFDcUI7NkJBQ0E7eUJBQ007Ozs7OztBQUVuRCxNQUFNLEVBQUVBLElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlCQUFjLEVBQ2hDLEVBQUVDLGtCQUFrQixFQUFFLEdBQUdDLG1DQUFtQixFQUM1QyxFQUFFQyxHQUFHLEVBQUVDLEtBQUssRUFBRUMsY0FBYyxFQUFFLEdBQUdDLHFDQUFxQjtNQUU1RCxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLDBCQUEwQkMsa0JBQVM7SUFDN0QsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxVQUFVLENBQUU7UUFDekQsS0FBSyxDQUFDSixTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLFVBQVUsR0FBR0E7SUFDcEI7SUFFQUMsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUNELFVBQVU7SUFDeEI7SUFFQUUsc0JBQXNCO1FBQ3BCLE1BQU1DLGdCQUFnQm5CLEtBQUssSUFBSSxDQUFDZ0IsVUFBVSxHQUNwQ0ksbUJBQW1CRCxlQUFlLEdBQUc7UUFFM0MsT0FBT0M7SUFDVDtJQUVBQyx3QkFBd0I7UUFDdEIsTUFBTUMsa0JBQWtCckIsTUFBTSxJQUFJLENBQUNlLFVBQVUsR0FDdkNPLHFC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
@@ -44,7 +44,7 @@ const _default = (0, _elements.define)(class ImplicitAssumption extends _occamla
44
44
  let assumption;
45
45
  assumption = this; ///
46
46
  context = this.getContext();
47
- (0, _context.attempt)((context)=>{
47
+ return (0, _context.attempt)((context)=>{
48
48
  const validateStatement = this.validateStatement.bind(this);
49
49
  validates = all([
50
50
  validateStatement
@@ -101,4 +101,4 @@ const _default = (0, _elements.define)(class ImplicitAssumption extends _occamla
101
101
  }
102
102
  });
103
103
 
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc3VtcHRpb24vaW1wbGljaXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgYWJsYXRlLCBhdHRlbXB0LCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVJbXBsaWNpdEFzc3VtcHRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nRnJvbVN0YXRlbWVudCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBpbXBsaWNpdEFzc3VtcHRpb25Gcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgSW1wbGljaXRBc3N1bXB0aW9uIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldEltcGxpY2l0QXNzdW1wdGlvbk5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbk5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gaW1wbGljaXRBc3N1bXB0aW9uTm9kZTtcbiAgfVxuXG4gIGdldFN0YXRlbWVudE5vZGUoKSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5nZXRTdGF0ZW1lbnROb2RlKCk7IH1cblxuICBpc0VxdWFsVG8oaW1wbGljaXRBc3N1bXB0aW9uKSB7XG4gICAgY29uc3QgaW1wbGljaXRBc3N1bXB0aW9uTm9kZSA9IGltcGxpY2l0QXNzdW1wdGlvbi5nZXROb2RlKCksXG4gICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoSW1wbGljaXRBc3N1bXB0aW9uTm9kZShpbXBsaWNpdEFzc3VtcHRpb25Ob2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gaW1wbGljaXRBc3N1bXB0aW9uTm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hJbXBsaWNpdEFzc3VtcHRpb25Ob2RlKGltcGxpY2l0QXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBub2RlID0gaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlTWF0Y2hlcztcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dCwgIC8vL1xuICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ltcGxpY2l0QXNzdW1wdGlvblN0cmluZ30nIGltcGxpY2l0IGFzc3VtcHRpb24uLi5gKTtcblxuICAgIGxldCBhc3N1bXB0aW9uO1xuXG4gICAgYXNzdW1wdGlvbiA9IHRoaXM7ICAvLy9cblxuICAgIGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGF0dGVtcHQoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlU3RhdGVtZW50ID0gdGhpcy52YWxpZGF0ZVN0YXRlbWVudC5iaW5kKHRoaXMpO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBhbGwoW1xuICAgICAgICB2YWxpZGF0ZVN0YXRlbWVudFxuICAgICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgXyApID0+IHtcbiAgICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgICB0aGlzLmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbiA9IGFzc3VtcHRpb247ICAvLy9cblxuICAgICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oaW1wbGljaXRBc3N1bXB0aW9uLCBjb250ZXh0KTtcblxuICAgICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2ltcGxpY2l0QXNzdW1wdGlvblN0cmluZ30nIGltcGxpY2l0IGFzc3VtcHRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzO1xuXG4gICAgY29uc3QgaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7aW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nfScgaW1wbGljaXQgYXNzdW1wdGlvbidzIHN0YXRlbWVudC4uLmApO1xuXG4gICAgc3RhdGVtZW50VmFsaWRhdGVzID0gdGhpcy5zdGF0ZW1lbnQudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgIH0pO1xuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmd9JyBpbXBsaWNpdCBhc3N1bXB0aW9uJ3Mgc3RhdGVtZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXM7XG4gIH1cblxuICB1bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBkZWJ1Z2dlclxuXG4gICAgbGV0IHN0YXRlbWVudFVuaWZpZXM7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcHJvb2ZBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke3Byb29mQXNzZXJ0aW9uU3RyaW5nfScgaW1wbGljaXRBc3N1bXB0aW9uJ3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBzdGF0ZW1lbnRVbmlmaWVzID0gdGhpcy5zdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBpbXBsaWNpdEFzc3VtcHRpb24ncyBzdGF0ZW1lbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXM7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiSW1wbGljaXRBc3N1bXB0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgbGV0IGltcGxpY2l0QXNzdW1wdGlvbjtcblxuICAgIGFibGF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nID0gaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQpLFxuICAgICAgICAgICAgICBzdHJpbmcgPSBpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmcsICAvLy9cbiAgICAgICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uTm9kZSA9IGluc3RhbnRpYXRlSW1wbGljaXRBc3N1bXB0aW9uKHN0cmluZywgY29udGV4dCk7XG5cbiAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uID0gaW1wbGljaXRBc3N1bXB0aW9uRnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUoaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBpbXBsaWNpdEFzc3VtcHRpb247XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImRlZmluZSIsIkltcGxpY2l0QXNzdW1wdGlvbiIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJzdGF0ZW1lbnQiLCJnZXRTdGF0ZW1lbnQiLCJnZXRJbXBsaWNpdEFzc3VtcHRpb25Ob2RlIiwiZ2V0Tm9kZSIsImltcGxpY2l0QXNzdW1wdGlvbk5vZGUiLCJnZXRTdGF0ZW1lbnROb2RlIiwiaXNFcXVhbFRvIiwiaW1wbGljaXRBc3N1bXB0aW9uIiwiaW1wbGljaXRBc3N1bXB0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEltcGxpY2l0QXNzdW1wdGlvbk5vZGUiLCJlcXVhbFRvIiwibm9kZU1hdGNoZXMiLCJtYXRjaE5vZGUiLCJ2YWxpZGF0ZSIsInN0YXRlIiwiY29udGludWF0aW9uIiwidmFsaWRhdGVzIiwic3BlY2lmaWNDb250ZXh0IiwiaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJhc3N1bXB0aW9uIiwiZ2V0Q29udGV4dCIsImF0dGVtcHQiLCJ2YWxpZGF0ZVN0YXRlbWVudCIsImJpbmQiLCJhbGwiLCJfIiwiY29tbWl0IiwiZGVidWciLCJzdGF0ZW1lbnRWYWxpZGF0ZXMiLCJ1bmlmeVN0YXRlbWVudCIsImdlbmVyYWxDb250ZXh0Iiwic3RhdGVtZW50VW5pZmllcyIsInN0YXRlbWVudFN0cmluZyIsInByb29mQXNzZXJ0aW9uU3RyaW5nIiwibmFtZSIsImZyb21TdGF0ZW1lbnQiLCJhYmxhdGUiLCJpbnN0YW50aWF0ZSIsImltcGxpY2l0QXNzdW1wdGlvblN0cmluZ0Zyb21TdGF0ZW1lbnQiLCJpbnN0YW50aWF0ZUltcGxpY2l0QXNzdW1wdGlvbiIsImltcGxpY2l0QXNzdW1wdGlvbkZyb21JbXBs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
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc3VtcHRpb24vaW1wbGljaXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgYWJsYXRlLCBhdHRlbXB0LCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVJbXBsaWNpdEFzc3VtcHRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nRnJvbVN0YXRlbWVudCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBpbXBsaWNpdEFzc3VtcHRpb25Gcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgSW1wbGljaXRBc3N1bXB0aW9uIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldEltcGxpY2l0QXNzdW1wdGlvbk5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbk5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gaW1wbGljaXRBc3N1bXB0aW9uTm9kZTtcbiAgfVxuXG4gIGdldFN0YXRlbWVudE5vZGUoKSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5nZXRTdGF0ZW1lbnROb2RlKCk7IH1cblxuICBpc0VxdWFsVG8oaW1wbGljaXRBc3N1bXB0aW9uKSB7XG4gICAgY29uc3QgaW1wbGljaXRBc3N1bXB0aW9uTm9kZSA9IGltcGxpY2l0QXNzdW1wdGlvbi5nZXROb2RlKCksXG4gICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoSW1wbGljaXRBc3N1bXB0aW9uTm9kZShpbXBsaWNpdEFzc3VtcHRpb25Ob2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gaW1wbGljaXRBc3N1bXB0aW9uTm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hJbXBsaWNpdEFzc3VtcHRpb25Ob2RlKGltcGxpY2l0QXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBub2RlID0gaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlTWF0Y2hlcztcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dCwgIC8vL1xuICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ltcGxpY2l0QXNzdW1wdGlvblN0cmluZ30nIGltcGxpY2l0IGFzc3VtcHRpb24uLi5gKTtcblxuICAgIGxldCBhc3N1bXB0aW9uO1xuXG4gICAgYXNzdW1wdGlvbiA9IHRoaXM7ICAvLy9cblxuICAgIGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHJldHVybiBhdHRlbXB0KChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKTtcblxuICAgICAgdmFsaWRhdGVzID0gYWxsKFtcbiAgICAgICAgdmFsaWRhdGVTdGF0ZW1lbnRcbiAgICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIF8gKSA9PiB7XG4gICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgdGhpcy5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb24gPSBhc3N1bXB0aW9uOyAgLy8vXG5cbiAgICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKGltcGxpY2l0QXNzdW1wdGlvbiwgY29udGV4dCk7XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmd9JyBpbXBsaWNpdCBhc3N1bXB0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudChzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHN0YXRlbWVudFZhbGlkYXRlcztcblxuICAgIGNvbnN0IGltcGxpY2l0QXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ltcGxpY2l0QXNzdW1wdGlvblN0cmluZ30nIGltcGxpY2l0IGFzc3VtcHRpb24ncyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIHN0YXRlbWVudFZhbGlkYXRlcyA9IHRoaXMuc3RhdGVtZW50LnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAoc3RhdGVtZW50LCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICB0aGlzLnN0YXRlbWVudCA9IHN0YXRlbWVudDtcblxuICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHN0YXRlLCBjb250ZXh0KTtcblxuICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICB9KTtcblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7aW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nfScgaW1wbGljaXQgYXNzdW1wdGlvbidzIHN0YXRlbWVudC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzO1xuICB9XG5cbiAgdW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgZGVidWdnZXJcblxuICAgIGxldCBzdGF0ZW1lbnRVbmlmaWVzO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgLy8vXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIHByb29mQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtwcm9vZkFzc2VydGlvblN0cmluZ30nIGltcGxpY2l0QXNzdW1wdGlvbidzIHN0YXRlbWVudC4uLmApO1xuXG4gICAgc3RhdGVtZW50VW5pZmllcyA9IHRoaXMuc3RhdGVtZW50LnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke3Byb29mQXNzZXJ0aW9uU3RyaW5nfScgaW1wbGljaXRBc3N1bXB0aW9uJ3Mgc3RhdGVtZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkltcGxpY2l0QXNzdW1wdGlvblwiO1xuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGxldCBpbXBsaWNpdEFzc3VtcHRpb247XG5cbiAgICBhYmxhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGltcGxpY2l0QXNzdW1wdGlvblN0cmluZyA9IGltcGxpY2l0QXNzdW1wdGlvblN0cmluZ0Zyb21TdGF0ZW1lbnQoc3RhdGVtZW50KSxcbiAgICAgICAgICAgICAgc3RyaW5nID0gaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nLCAgLy8vXG4gICAgICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbk5vZGUgPSBpbnN0YW50aWF0ZUltcGxpY2l0QXNzdW1wdGlvbihzdHJpbmcsIGNvbnRleHQpO1xuXG4gICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbiA9IGltcGxpY2l0QXNzdW1wdGlvbkZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlKGltcGxpY2l0QXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gaW1wbGljaXRBc3N1bXB0aW9uO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJkZWZpbmUiLCJJbXBsaWNpdEFzc3VtcHRpb24iLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiZ2V0SW1wbGljaXRBc3N1bXB0aW9uTm9kZSIsImdldE5vZGUiLCJpbXBsaWNpdEFzc3VtcHRpb25Ob2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImlzRXF1YWxUbyIsImltcGxpY2l0QXNzdW1wdGlvbiIsImltcGxpY2l0QXNzdW1wdGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hJbXBsaWNpdEFzc3VtcHRpb25Ob2RlIiwiZXF1YWxUbyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwidmFsaWRhdGUiLCJzdGF0ZSIsImNvbnRpbnVhdGlvbiIsInZhbGlkYXRlcyIsInNwZWNpZmljQ29udGV4dCIsImltcGxpY2l0QXNzdW1wdGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiYXNzdW1wdGlvbiIsImdldENvbnRleHQiLCJhdHRlbXB0IiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJiaW5kIiwiYWxsIiwiXyIsImNvbW1pdCIsImRlYnVnIiwic3RhdGVtZW50VmFsaWRhdGVzIiwidW5pZnlTdGF0ZW1lbnQiLCJnZW5lcmFsQ29udGV4dCIsInN0YXRlbWVudFVuaWZpZXMiLCJzdGF0ZW1lbnRTdHJpbmciLCJwcm9vZkFzc2VydGlvblN0cmluZyIsIm5hbWUiLCJmcm9tU3RhdGVtZW50IiwiYWJsYXRlIiwiaW5zdGFudGlhdGUiLCJpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmdGcm9tU3RhdGVtZW50IiwiaW5zdGFudGlhdGVJbXBsaWNpdEFzc3VtcHRpb24iLCJpbXBsaWNpdEFzc3VtcHRpb25G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