occam-nominal 1.0.198 → 1.0.207

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 (47) hide show
  1. package/lib/element/assertion/subproof.js +34 -1
  2. package/lib/element/assumption/implicit.js +7 -3
  3. package/lib/element/assumption.js +27 -9
  4. package/lib/element/constraint.js +2 -2
  5. package/lib/element/equivalence.js +7 -11
  6. package/lib/element/goal.js +124 -20
  7. package/lib/element/judgement.js +46 -9
  8. package/lib/element/label.js +4 -6
  9. package/lib/element/metavariable.js +5 -5
  10. package/lib/element/procedureCall.js +3 -5
  11. package/lib/element/proofAssertion/premise.js +4 -7
  12. package/lib/element/proofAssertion/step.js +12 -1
  13. package/lib/element/proofAssertion/supposition.js +6 -20
  14. package/lib/element/reference.js +5 -5
  15. package/lib/element/schema.js +51 -42
  16. package/lib/element/signature.js +9 -11
  17. package/lib/element/statement.js +36 -36
  18. package/lib/element/substitution/frame.js +5 -5
  19. package/lib/node/schema.js +3 -3
  20. package/lib/preamble.js +2 -1
  21. package/lib/process/unification.js +35 -9
  22. package/lib/utilities/element.js +9 -2
  23. package/lib/utilities/json.js +10 -10
  24. package/package.json +1 -1
  25. package/src/element/assertion/subproof.js +58 -0
  26. package/src/element/assumption/implicit.js +8 -2
  27. package/src/element/assumption.js +46 -11
  28. package/src/element/constraint.js +1 -1
  29. package/src/element/equivalence.js +13 -17
  30. package/src/element/goal.js +123 -22
  31. package/src/element/judgement.js +72 -11
  32. package/src/element/label.js +5 -7
  33. package/src/element/metavariable.js +8 -8
  34. package/src/element/procedureCall.js +2 -6
  35. package/src/element/proofAssertion/premise.js +3 -7
  36. package/src/element/proofAssertion/step.js +16 -0
  37. package/src/element/proofAssertion/supposition.js +5 -32
  38. package/src/element/reference.js +8 -8
  39. package/src/element/schema.js +17 -60
  40. package/src/element/signature.js +8 -10
  41. package/src/element/statement.js +58 -58
  42. package/src/element/substitution/frame.js +7 -7
  43. package/src/node/schema.js +1 -1
  44. package/src/preamble.js +1 -0
  45. package/src/process/unification.js +50 -9
  46. package/src/utilities/element.js +12 -1
  47. package/src/utilities/json.js +13 -13
@@ -86,6 +86,22 @@ const _default = (0, _elements.define)(class SubproofAssertion extends _assertio
86
86
  });
87
87
  return statementsValidate;
88
88
  }
89
+ unifySchema(schema, generalContext, specificContext) {
90
+ let schemaUnifies = false;
91
+ const context = specificContext, schemaString = schema.getString(), subproofAssertionString = this.getString();
92
+ context.trace(`Unifying the '${schemaString}' schema with the '${subproofAssertionString}' subproof assertion...`);
93
+ const deduction = schema.getDeduction(), deductionUnifies = this.unifyDeduction(deduction, generalContext, specificContext);
94
+ if (deductionUnifies) {
95
+ const suppositions = schema.getSuppositions(), suppositionsUnify = this.unifySuppositions(suppositions, generalContext, specificContext);
96
+ if (suppositionsUnify) {
97
+ schemaUnifies = true;
98
+ }
99
+ }
100
+ if (schemaUnifies) {
101
+ context.debug(`...unified the '${schemaString}' schema with the '${subproofAssertionString}' subproof assertion.`);
102
+ }
103
+ return schemaUnifies;
104
+ }
89
105
  unifySubproof(subproof, generalContext, specificContext) {
90
106
  let subproofUnifies = false;
91
107
  const context = specificContext, subproofString = subproof.getString(), subproofAssertionString = this.getString(); ///
@@ -119,6 +135,23 @@ const _default = (0, _elements.define)(class SubproofAssertion extends _assertio
119
135
  }
120
136
  return lastStepUnifies;
121
137
  }
138
+ unifyDeduction(deduction, generalContext, specificContext) {
139
+ let deductionUnifies = false;
140
+ const context = specificContext, deductionString = deduction.getString(), deducedStatement = this.getDeducedStatement(), deducedStatementString = deducedStatement.getString();
141
+ context.trace(`Unifying the '${deductionString}' deduction with the '${deducedStatementString}' deduced statement...`);
142
+ const deductionContext = deduction.getContext();
143
+ specificContext = deductionContext; ///
144
+ (0, _context.join)((specificContext)=>{
145
+ const deductionStatement = deduction.getStatement(), deductionStatementUnifies = deducedStatement.unifyStatement(deductionStatement, generalContext, specificContext);
146
+ if (deductionStatementUnifies) {
147
+ deductionUnifies = true;
148
+ }
149
+ }, specificContext, context);
150
+ if (deductionUnifies) {
151
+ context.debug(`...unified the '${deductionString}' deduction with the '${deducedStatementString}' deduced statement.`);
152
+ }
153
+ return deductionUnifies;
154
+ }
122
155
  unifySupposition(supposition, index, generalContext, specificContext) {
123
156
  let suppositionUnifies = false;
124
157
  const context = specificContext, supposedStatement = this.getSupposedStatement(index), suppositionString = supposition.getString(), supposedStatementString = supposedStatement.getString();
@@ -175,4 +208,4 @@ function statementsFromSubproofAssertionNode(subproofAssertionNode, context) {
175
208
  return statements;
176
209
  }
177
210
 
178
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zdWJwcm9vZi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGJyZWFrUG9pbnRGcm9tSlNPTiB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYnJlYWtQb2ludFwiO1xuaW1wb3J0IHsgam9pbiwgZGVzY2VuZCwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlU3VicHJvb2ZBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IGxhc3QsIGZyb250LCBiYWNrd2FyZHNFdmVyeSB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBTdWJwcm9vZkFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50cykge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0RGVkdWNlZFN0YXRlbWVudCgpIHtcbiAgICBjb25zdCBsYXN0U3RhdGVtZW50ID0gbGFzdCh0aGlzLnN0YXRlbWVudHMpLFxuICAgICAgICAgIGRlZHVjZWRTdGF0ZW1lbnQgPSBsYXN0U3RhdGVtZW50OyAvLy9cblxuICAgIHJldHVybiBkZWR1Y2VkU3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0U3VwcG9zZWRTdGF0ZW1lbnQoaW5kZXgpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLnN0YXRlbWVudHNbaW5kZXhdLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50ID0gc3RhdGVtZW50OyAgLy8vXG5cbiAgICByZXR1cm4gc3VwcG9zZWRTdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRTdXBwb3NlZFN0YXRlbWVudHMoKSB7XG4gICAgY29uc3QgZnJvbnRTdGF0ZW1lbnRzID0gZnJvbnQodGhpcy5zdGF0ZW1lbnRzKSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudHMgPSBmcm9udFN0YXRlbWVudHM7ICAvLy9cblxuICAgIHJldHVybiBzdXBwb3NlZFN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uTm9kZTtcbiAgfVxuXG4gIHZhbGlkYXRlKGNvbnRleHQpIHtcbiAgICBsZXQgc3VicHJvb2ZBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgbGV0IHZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdmFsaWRBc3NlcnRpb24gPSB0aGlzLmZpbmRWYWxpZEFzc2VydGlvbihjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgdmFsaWRhdGVzID0gdHJ1ZTtcblxuICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSB2YWxpZEFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbiBpcyBhbHJlYWR5IHZhbGlkLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRzVmFsaWRhdGUgPSB0aGlzLnZhbGlkYXRlU3RhdGVtZW50cyhjb250ZXh0KTtcblxuICAgICAgaWYgKHN0YXRlbWVudHNWYWxpZGF0ZSkge1xuICAgICAgICB2YWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IGFzc2VydGlvbiA9IHRoaXM7IC8vL1xuXG4gICAgICAgIHN1YnByb29mQXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAgLy8vXG5cbiAgICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50cyhjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50c1ZhbGlkYXRlID0gdGhpcy5zdGF0ZW1lbnRzLmV2ZXJ5KChzdGF0ZW1lbnQpID0+IHtcbiAgICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgZGVzY2VuZCgoY29udGV4dCkgPT4ge1xuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnQudmFsaWRhdGUoY29udGV4dCk7ICAvLy9cblxuICAgICAgICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSwgY29udGV4dCk7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50c1ZhbGlkYXRlO1xuICB9XG5cbiAgdW5pZnlTdWJwcm9vZihzdWJwcm9vZiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCBzdWJwcm9vZlVuaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mLmdldFN0cmluZygpLFxuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3VicHJvb2ZTdHJpbmd9JyBzdWJwcm9vZiB3aXRoIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgbGFzdFN0ZXAgPSBzdWJwcm9vZi5nZXRMYXN0U3RlcCgpLFxuICAgICAgICAgIGxhc3RTdGVwVW5pZmllcyA9IHRoaXMudW5pZnlMYXN0U3RlcChsYXN0U3RlcCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBpZiAobGFzdFN0ZXBVbmlmaWVzKSB7XG4gICAgICBjb25zdCBzdXBwb3NpdGlvbnMgPSBzdWJwcm9vZi5nZXRTdXBwb3NpdGlvbnMoKSxcbiAgICAgICAgICAgIHN1cHBvc2l0aW9uc1VuaWZ5ID0gdGhpcy51bmlmeVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICBpZiAoc3VwcG9zaXRpb25zVW5pZnkpIHtcbiAgICAgICAgc3VicHJvb2ZVbmlmaWVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VicHJvb2ZVbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnByb29mIHdpdGggdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZlVuaWZpZXM7XG4gIH1cblxuICB1bmlmeUxhc3RTdGVwKGxhc3RTdGVwLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IGxhc3RTdGVwVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGxhc3RTdGVwU3RyaW5nID0gbGFzdFN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgZGVkdWNlZFN0YXRlbWVudCA9IHRoaXMuZ2V0RGVkdWNlZFN0YXRlbWVudCgpLFxuICAgICAgICAgIGRlZHVjZWRTdGF0ZW1lbnRTdHJpbmcgPSBkZWR1Y2VkU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2xhc3RTdGVwU3RyaW5nfScgbGFzdCBzdGVwIHdpdGggdGhlICcke2RlZHVjZWRTdGF0ZW1lbnRTdHJpbmd9JyBkZWR1Y2VkIHN0YXRlbWVudC4uLmApXG5cbiAgICBjb25zdCBsYXN0U3RlcENvbnRleHQgPSBsYXN0U3RlcC5nZXRDb250ZXh0KCk7XG5cbiAgICBzcGVjaWZpY0NvbnRleHQgPSBsYXN0U3RlcENvbnRleHQ7ICAvLy9cblxuICAgIGpvaW4oKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgbGFzdFN0ZXBTdGF0ZW1lbnQgPSBsYXN0U3RlcC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICAgIGxhc3RTdGVwU3RhdGVtZW50VW5pZmllcyA9IGRlZHVjZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQobGFzdFN0ZXBTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICBpZiAobGFzdFN0ZXBTdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgIGxhc3RTdGVwVW5pZmllcyA9IHRydWU7XG4gICAgICB9XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcblxuICAgIGlmIChsYXN0U3RlcFVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2xhc3RTdGVwU3RyaW5nfScgbGFzdCBzdGVwIHdpdGggdGhlICcke2RlZHVjZWRTdGF0ZW1lbnRTdHJpbmd9JyBkZWR1Y2VkIHN0YXRlbWVudC5gKVxuICAgIH1cblxuICAgIHJldHVybiBsYXN0U3RlcFVuaWZpZXM7XG4gIH1cblxuICB1bmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBpbmRleCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCBzdXBwb3NpdGlvblVuaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudCA9IHRoaXMuZ2V0U3VwcG9zZWRTdGF0ZW1lbnQoaW5kZXgpLFxuICAgICAgICAgIHN1cHBvc2l0aW9uU3RyaW5nID0gc3VwcG9zaXRpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmcgPSBzdXBwb3NlZFN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uIHdpdGggdGhlICcke3N1cHBvc2VkU3RhdGVtZW50U3RyaW5nfScgc3VwcG9zZWQgc3RhdGVtZW50Li4uYClcblxuICAgIGNvbnN0IHN1cHBvc2l0aW9uQ29udGV4dCA9IHN1cHBvc2l0aW9uLmdldENvbnRleHQoKTtcblxuICAgIHNwZWNpZmljQ29udGV4dCA9IHN1cHBvc2l0aW9uQ29udGV4dDsgIC8vL1xuXG4gICAgam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBzdXBwb3NpdGlvblN0YXRlbWVudCA9IHN1cHBvc2l0aW9uLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgICAgc3VwcG9zaXRpb25TdGF0ZW1lbnRVbmlmaWVzID0gc3VwcG9zZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3VwcG9zaXRpb25TdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICBpZiAoc3VwcG9zaXRpb25TdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgIHN1cHBvc2l0aW9uVW5pZmllcyA9IHRydWU7XG4gICAgICB9XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcblxuICAgIGlmIChzdXBwb3NpdGlvblVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuYClcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb25VbmlmaWVzO1xuICB9XG5cbiAgdW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBnZW5lcmFsQ29udHh0LCBzcHNlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IHN1cHBvc2l0aW9uc1VuaWZ5ID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdXBwb3NlZFN0YXRlbWVudHMgPSB0aGlzLmdldFN1cHBvc2VkU3RhdGVtZW50cygpLFxuICAgICAgICAgIHN1cHBvc2l0aW9uc0xlbmd0aCA9IHN1cHBvc2l0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgc3VwcG9zZWRTdGF0ZW1lbnRzTGVuZ3RoID0gc3VwcG9zZWRTdGF0ZW1lbnRzLmxlbmd0aDtcblxuICAgIGlmIChzdXBwb3NpdGlvbnNMZW5ndGggPT09IHN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCkge1xuICAgICAgc3VwcG9zaXRpb25zVW5pZnkgPSBiYWNrd2FyZHNFdmVyeShzdXBwb3NpdGlvbnMsIChzdXBwb3NpdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgc3VwcG9zaXRpb25VbmlmaWVzID0gdGhpcy51bmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBpbmRleCwgZ2VuZXJhbENvbnR4dCwgc3BzZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN1cHBvc2l0aW9uVW5pZmllcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb25zVW5pZnk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiU3VicHJvb2ZBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBzdWJwcm9vckFzc2VydGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCB7IG5hbWUgfSA9IGpzb247XG5cbiAgICBpZiAodGhpcy5uYW1lID09PSBuYW1lKSB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gaW5zdGFudGlhdGVTdWJwcm9vZkFzc2VydGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICAgIHN1YnByb29yQXNzZXJ0aW9uID0gbmV3IFN1YnByb29mQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50cyk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VicHJvb3JBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZXMgPSBzdWJwcm9vZkFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZXMoKSxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudE5vZGVzLm1hcCgoc3RhdGVtZXROb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50ID0gY29udGV4dC5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWV0Tm9kZSk7XG5cbiAgICAgICAgICByZXR1cm4gc3RhdGVtZW50O1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cbiJdLCJuYW1lcyI6WyJsYXN0IiwiZnJvbnQiLCJiYWNrd2FyZHNFdmVyeSIsImFycmF5VXRpbGl0aWVzIiwiZGVmaW5lIiwiU3VicHJvb2ZBc3NlcnRpb24iLCJBc3NlcnRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJzdGF0ZW1lbnRzIiwiZ2V0U3RhdGVtZW50cyIsImdldERlZHVjZWRTdGF0ZW1lbnQiLCJsYXN0U3RhdGVtZW50IiwiZGVkdWNlZFN0YXRlbWVudCIsImdldFN1cHBvc2VkU3RhdGVtZW50IiwiaW5kZXgiLCJzdGF0ZW1lbnQiLCJzdXBwb3NlZFN0YXRlbWVudCIsImdldFN1cHBvc2VkU3RhdGVtZW50cyIsImZyb250U3RhdGVtZW50cyIsInN1cHBvc2VkU3RhdGVtZW50cyIsImdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJ2YWxpZGF0ZSIsInN1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZhbGlkYXRlcyIsInZhbGlkQXNzZXJ0aW9uIiwiZmluZFZhbGlkQXNzZXJ0aW9uIiwiZGVidWciLCJzdGF0ZW1lbnRzVmFsaWRhdGUiLCJ2YWxpZGF0ZVN0YXRlbWVudHMiLCJhc3NlcnRpb24iLCJhZGRBc3NlcnRpb24iLCJldmVyeSIsInN0YXRlbWVudFZhbGlkYXRlcyIsImRlc2NlbmQiLCJ1bmlmeVN1YnByb29mIiwic3VicHJvb2YiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInN1YnByb29mVW5pZmllcyIsInN1YnByb29mU3RyaW5nIiwibGFzdFN0ZXAiLCJnZXRMYXN0U3RlcCIsImxhc3RTdGVwVW5pZmllcyIsInVuaWZ5TGFzdFN0ZXAiLCJzdXBwb3NpdGlvbnMiLCJnZXRTdXBwb3NpdGlvbnMiLCJzdXBwb3NpdGlvbnNVbmlmeSIsInVuaWZ5U3VwcG9zaXRpb25zIiwibGFzdFN0ZXBTdHJpbmciLCJkZWR1Y2VkU3RhdGVtZW50U3RyaW5nIiwibGFzdFN0ZXBDb250ZXh0IiwiZ2V0Q29udGV4dCIsImpvaW4iLCJsYXN0U3RlcFN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsImxhc3RTdGVwU3RhdGVtZW50VW5pZmllcyIsInVuaWZ5U3RhdGVtZW50IiwidW5pZnlTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25VbmlmaWVzIiwic3VwcG9zaXRpb25TdHJpbmciLCJzdXBwb3NlZFN0YXRlbWVudFN0cmluZyIsInN1cHBvc2l0aW9uQ29udGV4dCIsInN1cHBvc2l0aW9uU3RhdGVtZW50Iiwic3VwcG9zaXRpb25TdGF0ZW1lbnRVbmlmaWVzIiwiZ2VuZXJhbENvbnR4dCIsInNwc2VjaWZpY0NvbnRleHQiLCJzdXBwb3NpdGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGgiLCJuYW1lIiwiZnJvbUpTT04iLCJqc29uIiwic3VicHJvb3JBc3NlcnRpb24iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlU3VicHJvb2ZBc3NlcnRpb24iLCJicmVha1BvaW50RnJvbUpTT04iLCJzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImZyb21TdGF0ZW1lbnQiLCJzdGF0ZW1lbnROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGVzIiwiZ2V0U3RhdGVtZW50Tm9kZXMiLCJtYXAiLCJzdGF0ZW1ldE5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFjQTs7O2VBQUE7OzsyQkFaK0I7a0VBRVQ7MEJBRUM7NEJBQ1k7eUJB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
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zdWJwcm9vZi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGJyZWFrUG9pbnRGcm9tSlNPTiB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYnJlYWtQb2ludFwiO1xuaW1wb3J0IHsgam9pbiwgZGVzY2VuZCwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlU3VicHJvb2ZBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IGxhc3QsIGZyb250LCBiYWNrd2FyZHNFdmVyeSB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBTdWJwcm9vZkFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50cykge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0RGVkdWNlZFN0YXRlbWVudCgpIHtcbiAgICBjb25zdCBsYXN0U3RhdGVtZW50ID0gbGFzdCh0aGlzLnN0YXRlbWVudHMpLFxuICAgICAgICAgIGRlZHVjZWRTdGF0ZW1lbnQgPSBsYXN0U3RhdGVtZW50OyAvLy9cblxuICAgIHJldHVybiBkZWR1Y2VkU3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0U3VwcG9zZWRTdGF0ZW1lbnQoaW5kZXgpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLnN0YXRlbWVudHNbaW5kZXhdLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50ID0gc3RhdGVtZW50OyAgLy8vXG5cbiAgICByZXR1cm4gc3VwcG9zZWRTdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRTdXBwb3NlZFN0YXRlbWVudHMoKSB7XG4gICAgY29uc3QgZnJvbnRTdGF0ZW1lbnRzID0gZnJvbnQodGhpcy5zdGF0ZW1lbnRzKSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudHMgPSBmcm9udFN0YXRlbWVudHM7ICAvLy9cblxuICAgIHJldHVybiBzdXBwb3NlZFN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uTm9kZTtcbiAgfVxuXG4gIHZhbGlkYXRlKGNvbnRleHQpIHtcbiAgICBsZXQgc3VicHJvb2ZBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgbGV0IHZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdmFsaWRBc3NlcnRpb24gPSB0aGlzLmZpbmRWYWxpZEFzc2VydGlvbihjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgdmFsaWRhdGVzID0gdHJ1ZTtcblxuICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSB2YWxpZEFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbiBpcyBhbHJlYWR5IHZhbGlkLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRzVmFsaWRhdGUgPSB0aGlzLnZhbGlkYXRlU3RhdGVtZW50cyhjb250ZXh0KTtcblxuICAgICAgaWYgKHN0YXRlbWVudHNWYWxpZGF0ZSkge1xuICAgICAgICB2YWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IGFzc2VydGlvbiA9IHRoaXM7IC8vL1xuXG4gICAgICAgIHN1YnByb29mQXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAgLy8vXG5cbiAgICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50cyhjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50c1ZhbGlkYXRlID0gdGhpcy5zdGF0ZW1lbnRzLmV2ZXJ5KChzdGF0ZW1lbnQpID0+IHtcbiAgICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgZGVzY2VuZCgoY29udGV4dCkgPT4ge1xuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnQudmFsaWRhdGUoY29udGV4dCk7ICAvLy9cblxuICAgICAgICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSwgY29udGV4dCk7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50c1ZhbGlkYXRlO1xuICB9XG5cbiAgdW5pZnlTY2hlbWEoc2NoZW1hLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IHNjaGVtYVVuaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBzY2hlbWFTdHJpbmcgPSBzY2hlbWEuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSB3aXRoIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgZGVkdWN0aW9uID0gc2NoZW1hLmdldERlZHVjdGlvbigpLFxuICAgICAgICAgIGRlZHVjdGlvblVuaWZpZXMgPSB0aGlzLnVuaWZ5RGVkdWN0aW9uKGRlZHVjdGlvbiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBpZiAoZGVkdWN0aW9uVW5pZmllcykge1xuICAgICAgY29uc3Qgc3VwcG9zaXRpb25zID0gc2NoZW1hLmdldFN1cHBvc2l0aW9ucygpLFxuICAgICAgICAgICAgc3VwcG9zaXRpb25zVW5pZnkgPSB0aGlzLnVuaWZ5U3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgIGlmIChzdXBwb3NpdGlvbnNVbmlmeSkge1xuICAgICAgICBzY2hlbWFVbmlmaWVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzY2hlbWFVbmlmaWVzO1xuICB9XG5cbiAgdW5pZnlTdWJwcm9vZihzdWJwcm9vZiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCBzdWJwcm9vZlVuaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mLmdldFN0cmluZygpLFxuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3VicHJvb2ZTdHJpbmd9JyBzdWJwcm9vZiB3aXRoIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgbGFzdFN0ZXAgPSBzdWJwcm9vZi5nZXRMYXN0U3RlcCgpLFxuICAgICAgICAgIGxhc3RTdGVwVW5pZmllcyA9IHRoaXMudW5pZnlMYXN0U3RlcChsYXN0U3RlcCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBpZiAobGFzdFN0ZXBVbmlmaWVzKSB7XG4gICAgICBjb25zdCBzdXBwb3NpdGlvbnMgPSBzdWJwcm9vZi5nZXRTdXBwb3NpdGlvbnMoKSxcbiAgICAgICAgICAgIHN1cHBvc2l0aW9uc1VuaWZ5ID0gdGhpcy51bmlmeVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICBpZiAoc3VwcG9zaXRpb25zVW5pZnkpIHtcbiAgICAgICAgc3VicHJvb2ZVbmlmaWVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VicHJvb2ZVbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnByb29mIHdpdGggdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZlVuaWZpZXM7XG4gIH1cblxuICB1bmlmeUxhc3RTdGVwKGxhc3RTdGVwLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IGxhc3RTdGVwVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGxhc3RTdGVwU3RyaW5nID0gbGFzdFN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgZGVkdWNlZFN0YXRlbWVudCA9IHRoaXMuZ2V0RGVkdWNlZFN0YXRlbWVudCgpLFxuICAgICAgICAgIGRlZHVjZWRTdGF0ZW1lbnRTdHJpbmcgPSBkZWR1Y2VkU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2xhc3RTdGVwU3RyaW5nfScgbGFzdCBzdGVwIHdpdGggdGhlICcke2RlZHVjZWRTdGF0ZW1lbnRTdHJpbmd9JyBkZWR1Y2VkIHN0YXRlbWVudC4uLmApXG5cbiAgICBjb25zdCBsYXN0U3RlcENvbnRleHQgPSBsYXN0U3RlcC5nZXRDb250ZXh0KCk7XG5cbiAgICBzcGVjaWZpY0NvbnRleHQgPSBsYXN0U3RlcENvbnRleHQ7ICAvLy9cblxuICAgIGpvaW4oKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgbGFzdFN0ZXBTdGF0ZW1lbnQgPSBsYXN0U3RlcC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICAgIGxhc3RTdGVwU3RhdGVtZW50VW5pZmllcyA9IGRlZHVjZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQobGFzdFN0ZXBTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICBpZiAobGFzdFN0ZXBTdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgIGxhc3RTdGVwVW5pZmllcyA9IHRydWU7XG4gICAgICB9XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcblxuICAgIGlmIChsYXN0U3RlcFVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2xhc3RTdGVwU3RyaW5nfScgbGFzdCBzdGVwIHdpdGggdGhlICcke2RlZHVjZWRTdGF0ZW1lbnRTdHJpbmd9JyBkZWR1Y2VkIHN0YXRlbWVudC5gKVxuICAgIH1cblxuICAgIHJldHVybiBsYXN0U3RlcFVuaWZpZXM7XG4gIH1cblxuICB1bmlmeURlZHVjdGlvbihkZWR1Y3Rpb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBsZXQgZGVkdWN0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGRlZHVjdGlvblN0cmluZyA9IGRlZHVjdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBkZWR1Y2VkU3RhdGVtZW50ID0gdGhpcy5nZXREZWR1Y2VkU3RhdGVtZW50KCksXG4gICAgICAgICAgZGVkdWNlZFN0YXRlbWVudFN0cmluZyA9IGRlZHVjZWRTdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uIHdpdGggdGhlICcke2RlZHVjZWRTdGF0ZW1lbnRTdHJpbmd9JyBkZWR1Y2VkIHN0YXRlbWVudC4uLmApXG5cbiAgICBjb25zdCBkZWR1Y3Rpb25Db250ZXh0ID0gZGVkdWN0aW9uLmdldENvbnRleHQoKTtcblxuICAgIHNwZWNpZmljQ29udGV4dCA9IGRlZHVjdGlvbkNvbnRleHQ7ICAvLy9cblxuICAgIGpvaW4oKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgZGVkdWN0aW9uU3RhdGVtZW50ID0gZGVkdWN0aW9uLmdldFN0YXRlbWVudCgpLFxuICAgICAgICBkZWR1Y3Rpb25TdGF0ZW1lbnRVbmlmaWVzID0gZGVkdWNlZFN0YXRlbWVudC51bmlmeVN0YXRlbWVudChkZWR1Y3Rpb25TdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICBpZiAoZGVkdWN0aW9uU3RhdGVtZW50VW5pZmllcykge1xuICAgICAgICBkZWR1Y3Rpb25VbmlmaWVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuXG4gICAgaWYgKGRlZHVjdGlvblVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbiB3aXRoIHRoZSAnJHtkZWR1Y2VkU3RhdGVtZW50U3RyaW5nfScgZGVkdWNlZCBzdGF0ZW1lbnQuYClcbiAgICB9XG5cbiAgICByZXR1cm4gZGVkdWN0aW9uVW5pZmllcztcbiAgfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGluZGV4LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IHN1cHBvc2l0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50ID0gdGhpcy5nZXRTdXBwb3NlZFN0YXRlbWVudChpbmRleCksXG4gICAgICAgICAgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudFN0cmluZyA9IHN1cHBvc2VkU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuLi5gKVxuXG4gICAgY29uc3Qgc3VwcG9zaXRpb25Db250ZXh0ID0gc3VwcG9zaXRpb24uZ2V0Q29udGV4dCgpO1xuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gc3VwcG9zaXRpb25Db250ZXh0OyAgLy8vXG5cbiAgICBqb2luKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHN1cHBvc2l0aW9uU3RhdGVtZW50ID0gc3VwcG9zaXRpb24uZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgICBzdXBwb3NpdGlvblN0YXRlbWVudFVuaWZpZXMgPSBzdXBwb3NlZFN0YXRlbWVudC51bmlmeVN0YXRlbWVudChzdXBwb3NpdGlvblN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgIGlmIChzdXBwb3NpdGlvblN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgc3VwcG9zaXRpb25VbmlmaWVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuXG4gICAgaWYgKHN1cHBvc2l0aW9uVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbiB3aXRoIHRoZSAnJHtzdXBwb3NlZFN0YXRlbWVudFN0cmluZ30nIHN1cHBvc2VkIHN0YXRlbWVudC5gKVxuICAgIH1cblxuICAgIHJldHVybiBzdXBwb3NpdGlvblVuaWZpZXM7XG4gIH1cblxuICB1bmlmeVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMsIGdlbmVyYWxDb250eHQsIHNwc2VjaWZpY0NvbnRleHQpIHtcbiAgICBsZXQgc3VwcG9zaXRpb25zVW5pZnkgPSBmYWxzZTtcblxuICAgIGNvbnN0IHN1cHBvc2VkU3RhdGVtZW50cyA9IHRoaXMuZ2V0U3VwcG9zZWRTdGF0ZW1lbnRzKCksXG4gICAgICAgICAgc3VwcG9zaXRpb25zTGVuZ3RoID0gc3VwcG9zaXRpb25zLmxlbmd0aCxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGggPSBzdXBwb3NlZFN0YXRlbWVudHMubGVuZ3RoO1xuXG4gICAgaWYgKHN1cHBvc2l0aW9uc0xlbmd0aCA9PT0gc3VwcG9zZWRTdGF0ZW1lbnRzTGVuZ3RoKSB7XG4gICAgICBzdXBwb3NpdGlvbnNVbmlmeSA9IGJhY2t3YXJkc0V2ZXJ5KHN1cHBvc2l0aW9ucywgKHN1cHBvc2l0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBzdXBwb3NpdGlvblVuaWZpZXMgPSB0aGlzLnVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGluZGV4LCBnZW5lcmFsQ29udHh0LCBzcHNlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBpZiAoc3VwcG9zaXRpb25VbmlmaWVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBwb3NpdGlvbnNVbmlmeTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJTdWJwcm9vZkFzc2VydGlvblwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IHN1YnByb29yQXNzZXJ0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHsgbmFtZSB9ID0ganNvbjtcblxuICAgIGlmICh0aGlzLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBpbnN0YW50aWF0ZVN1YnByb29mQXNzZXJ0aW9uKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBzdWJwcm9vZkFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgICAgc3VicHJvb3JBc3NlcnRpb24gPSBuZXcgU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnRzKTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vckFzc2VydGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlcyA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlcygpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50Tm9kZXMubWFwKChzdGF0ZW1ldE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGF0ZW1lbnQgPSBjb250ZXh0LmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZXROb2RlKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuIl0sIm5hbWVzIjpbImxhc3QiLCJmcm9udCIsImJhY2t3YXJkc0V2ZXJ5IiwiYXJyYXlVdGlsaXRpZXMiLCJkZWZpbmUiLCJTdWJwcm9vZkFzc2VydGlvbiIsIkFzc2VydGlvbiIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInN0YXRlbWVudHMiLCJnZXRTdGF0ZW1lbnRzIiwiZ2V0RGVkdWNlZFN0YXRlbWVudCIsImxhc3RTdGF0ZW1lbnQiLCJkZWR1Y2VkU3RhdGVtZW50IiwiZ2V0U3VwcG9zZWRTdGF0ZW1lbnQiLCJpbmRleCIsInN0YXRlbWVudCIsInN1cHBvc2VkU3RhdGVtZW50IiwiZ2V0U3VwcG9zZWRTdGF0ZW1lbnRzIiwiZnJvbnRTdGF0ZW1lbnRzIiwic3VwcG9zZWRTdGF0ZW1lbnRzIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInZhbGlkYXRlIiwic3VicHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmFsaWRhdGVzIiwidmFsaWRBc3NlcnRpb24iLCJmaW5kVmFsaWRBc3NlcnRpb24iLCJkZWJ1ZyIsInN0YXRlbWVudHNWYWxpZGF0ZSIsInZhbGlkYXRlU3RhdGVtZW50cyIsImFzc2VydGlvbiIsImFkZEFzc2VydGlvbiIsImV2ZXJ5Iiwic3RhdGVtZW50VmFsaWRhdGVzIiwiZGVzY2VuZCIsInVuaWZ5U2NoZW1hIiwic2NoZW1hIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJzY2hlbWFVbmlmaWVzIiwic2NoZW1hU3RyaW5nIiwiZGVkdWN0aW9uIiwiZ2V0RGVkdWN0aW9uIiwiZGVkdWN0aW9uVW5pZmllcyIsInVuaWZ5RGVkdWN0aW9uIiwic3VwcG9zaXRpb25zIiwiZ2V0U3VwcG9zaXRpb25zIiwic3VwcG9zaXRpb25zVW5pZnkiLCJ1bmlmeVN1cHBvc2l0aW9ucyIsInVuaWZ5U3VicHJvb2YiLCJzdWJwcm9vZiIsInN1YnByb29mVW5pZmllcyIsInN1YnByb29mU3RyaW5nIiwibGFzdFN0ZXAiLCJnZXRMYXN0U3RlcCIsImxhc3RTdGVwVW5pZmllcyIsInVuaWZ5TGFzdFN0ZXAiLCJsYXN0U3RlcFN0cmluZyIsImRlZHVjZWRTdGF0ZW1lbnRTdHJpbmciLCJsYXN0U3RlcENvbnRleHQiLCJnZXRDb250ZXh0Iiwiam9pbiIsImxhc3RTdGVwU3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwibGFzdFN0ZXBTdGF0ZW1lbnRVbmlmaWVzIiwidW5pZnlTdGF0ZW1lbnQiLCJkZWR1Y3Rpb25TdHJpbmciLCJkZWR1Y3Rpb25Db250ZXh0IiwiZGVkdWN0aW9uU3RhdGVtZW50IiwiZGVkdWN0aW9uU3RhdGVtZW50VW5pZmllcyIsInVuaWZ5U3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uVW5pZmllcyIsInN1cHBvc2l0aW9uU3RyaW5nIiwic3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmciLCJzdXBwb3NpdGlvbkNvbnRleHQiLCJzdXBwb3NpdGlvblN0YXRlbWVudCIsInN1cHBvc2l0aW9uU3RhdGVtZW50VW5pZmllcyIsImdlbmVyYWxDb250eHQiLCJzcHNlY2lmaWNDb250ZXh0Iiwic3VwcG9zaXRpb25zTGVuZ3RoIiwibGVuZ3RoIiwic3VwcG9zZWRTdGF0ZW1lbnRzTGVuZ3RoIiwibmFtZSIsImZyb21KU09OIiwianNvbiIsInN1YnByb29yQXNzZXJ0aW9uIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZVN1YnByb29mQXNzZXJ0aW9uIiwiYnJlYWtQb2ludEZyb21KU09OIiwic3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJmcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlcyIsImdldFN0YXRlbWVudE5vZGVzIiwibWFwIiwic3RhdGVtZXROb2RlIiwiZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBY0E7OztlQUFBOzs7MkJBWitCO2tFQUVUOzBCQUVDOzRCQUNZO3lCQUNROzZCQUNFO3lCQUNNOzs7Ozs7QUFFbkQsTUFBTSxFQUFFQSxJQUFJLEVBQUVDLEtBQUssRUFBRUMsY0FBYyxFQUFFLEdBQUdDLHlCQUFjO01BRXRELFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsMEJBQTBCQyxrQkFBUztJQUM3RCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsQ0FBRTtRQUN6RCxLQUFLLENBQUNKLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtJQUNwQjtJQUVBQyxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQ0QsVUFBVTtJQUN4QjtJQUVBRSxzQkFBc0I7UUFDcEIsTUFBTUMsZ0JBQWdCZCxLQUFLLElBQUksQ0FBQ1csVUFBVSxHQUNwQ0ksbUJBQW1CRCxlQUFlLEdBQUc7UUFFM0MsT0FBT0M7SUFDVDtJQUVBQyxxQkFBcUJDLEtBQUssRUFBRTtRQUMxQixNQUFN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
@@ -29,6 +29,10 @@ const _default = (0, _elements.define)(class ImplicitAssumption extends _occamla
29
29
  getStatementNode() {
30
30
  return this.statement.getStatementNode();
31
31
  }
32
+ getReference() {
33
+ const reference = null;
34
+ return reference;
35
+ }
32
36
  isEqualTo(implicitAssumption) {
33
37
  const implicitAssumptionNode = implicitAssumption.getNode(), implicitAssumptionNodeMatches = this.matchImplicitAssumptionNode(implicitAssumptionNode), equalTo = implicitAssumptionNodeMatches; ///
34
38
  return equalTo;
@@ -52,13 +56,13 @@ const _default = (0, _elements.define)(class ImplicitAssumption extends _occamla
52
56
  validate(context) {
53
57
  let implicitAssumption = null;
54
58
  const implicitAssumptionString = this.getString(); ///
55
- context.trace(`Validating the '${implicitAssumptionString}' implicitAssumption...`);
59
+ context.trace(`Validating the '${implicitAssumptionString}' implicit qssumption...`);
56
60
  let validates = false;
57
61
  const validAssumption = this.findValidAssumption(context);
58
62
  if (validAssumption !== null) {
59
63
  validates = true;
60
64
  implicitAssumption = validAssumption; ///
61
- context.debug(`...the '${implicitAssumptionString}' implicitAssumption is already valid.`);
65
+ context.debug(`...the '${implicitAssumptionString}' implicit qssumption is already valid.`);
62
66
  } else {
63
67
  const statementValidates = this.validateStatement(context);
64
68
  if (statementValidates) {
@@ -140,4 +144,4 @@ const _default = (0, _elements.define)(class ImplicitAssumption extends _occamla
140
144
  }
141
145
  });
142
146
 
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc3VtcHRpb24vaW1wbGljaXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgcGFyZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlSW1wbGljaXRBc3N1bXB0aW9uIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IGltcGxpY2l0QXNzdW1wdGlvblN0cmluZ0Zyb21TdGF0ZW1lbnQgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgaW1wbGljaXRBc3N1bXB0aW9uRnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIEltcGxpY2l0QXNzdW1wdGlvbiBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnN0YXRlbWVudCA9IHN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFN0YXRlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRJbXBsaWNpdEFzc3VtcHRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIGltcGxpY2l0QXNzdW1wdGlvbk5vZGU7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnROb2RlKCkgeyByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuZ2V0U3RhdGVtZW50Tm9kZSgpOyB9XG5cbiAgaXNFcXVhbFRvKGltcGxpY2l0QXNzdW1wdGlvbikge1xuICAgIGNvbnN0IGltcGxpY2l0QXNzdW1wdGlvbk5vZGUgPSBpbXBsaWNpdEFzc3VtcHRpb24uZ2V0Tm9kZSgpLFxuICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEltcGxpY2l0QXNzdW1wdGlvbk5vZGUoaW1wbGljaXRBc3N1bXB0aW9uTm9kZSksXG4gICAgICAgICAgZXF1YWxUbyA9IGltcGxpY2l0QXNzdW1wdGlvbk5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIG1hdGNoSW1wbGljaXRBc3N1bXB0aW9uTm9kZShpbXBsaWNpdEFzc3VtcHRpb25Ob2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IGltcGxpY2l0QXNzdW1wdGlvbk5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gaW1wbGljaXRBc3N1bXB0aW9uTm9kZU1hdGNoZXM7XG4gIH1cblxuICBmaW5kU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCkge1xuICAgIGxldCBzdWJwcm9vZkFzc2VydGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gdGhpcy5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKTtcblxuICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgIHN1YnByb29mQXNzZXJ0aW9uID0gY29udGV4dC5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xuICB9XG5cbiAgZmluZFZhbGlkQXNzdW1wdGlvbihjb250ZXh0KSB7XG4gICAgY29uc3QgaW1wbGljaXRBc3N1bXB0aW9uTm9kZSA9IHRoaXMuZ2V0SW1wbGljaXRBc3N1bXB0aW9uTm9kZSgpLFxuICAgICAgICAgIGFzc3VtcHRpb25Ob2RlID0gaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgIGFzc3VtcHRpb24gPSBjb250ZXh0LmZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSksXG4gICAgICAgICAgdmFsaWRBc3N1bXB0aW9uID0gYXNzdW1wdGlvbjsgIC8vL1xuXG4gICAgcmV0dXJuIHZhbGlkQXNzdW1wdGlvbjtcbiAgfVxuXG4gIHZhbGlkYXRlKGNvbnRleHQpIHtcbiAgICBsZXQgaW1wbGljaXRBc3N1bXB0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IGltcGxpY2l0QXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ltcGxpY2l0QXNzdW1wdGlvblN0cmluZ30nIGltcGxpY2l0QXNzdW1wdGlvbi4uLmApO1xuXG4gICAgbGV0IHZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdmFsaWRBc3N1bXB0aW9uID0gdGhpcy5maW5kVmFsaWRBc3N1bXB0aW9uKGNvbnRleHQpO1xuXG4gICAgaWYgKHZhbGlkQXNzdW1wdGlvbiAhPT0gbnVsbCkge1xuICAgICAgdmFsaWRhdGVzID0gdHJ1ZTtcblxuICAgICAgaW1wbGljaXRBc3N1bXB0aW9uID0gdmFsaWRBc3N1bXB0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke2ltcGxpY2l0QXNzdW1wdGlvblN0cmluZ30nIGltcGxpY2l0QXNzdW1wdGlvbiBpcyBhbHJlYWR5IHZhbGlkLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0aGlzLnZhbGlkYXRlU3RhdGVtZW50KGNvbnRleHQpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlZCA9IGNvbnRleHQuaXNTdGF0ZWQoKTtcblxuICAgICAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZCA9IGZhbHNlLFxuICAgICAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAoc3RhdGVkKSB7XG4gICAgICAgICAgdmFsaWRhdGVzV2hlblN0YXRlZCA9IHRoaXMudmFsaWRhdGVXaGVuU3RhdGVkKGNvbnRleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdGhpcy52YWxpZGF0ZVdoZW5EZXJpdmVkKGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlc1doZW5TdGF0ZWQgfHwgdmFsaWRhdGVzV2hlbkRlcml2ZWQpIHtcbiAgICAgICAgICB2YWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uID0gdGhpczsgIC8vL1xuXG4gICAgICAgIGNvbnN0IGFzc3VtcHRpb24gPSBpbXBsaWNpdEFzc3VtcHRpb247ICAvLy9cblxuICAgICAgICBjb250ZXh0LmFkZEFzc3VtcHRpb24oYXNzdW1wdGlvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmd9JyBpbXBsaWNpdEFzc3VtcHRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGltcGxpY2l0QXNzdW1wdGlvbjtcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KGNvbnRleHQpIHtcbiAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmd9JyBpbXBsaWNpdEFzc3VtcHRpb24ncyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuc3RhdGVtZW50LnZhbGlkYXRlKGNvbnRleHQpO1xuXG4gICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgc3RhdGVtZW50VmFsaWRhdGVzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2ltcGxpY2l0QXNzdW1wdGlvblN0cmluZ30nIGltcGxpY2l0QXNzdW1wdGlvbidzIHN0YXRlbWVudC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuU3RhdGVkKGNvbnRleHQpIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZDtcblxuICAgIGNvbnN0IGltcGxpY2l0QXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ltcGxpY2l0QXNzdW1wdGlvblN0cmluZ30nIHN0YXRlZCBpbXBsaWNpdEFzc3VtcHRpb24uLi5gKTtcblxuICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0cnVlXG5cbiAgICBpZiAodmFsaWRhdGVzV2hlblN0YXRlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmd9JyBzdGF0ZWQgaW1wbGljaXRBc3N1bXB0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXNXaGVuU3RhdGVkO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuRGVyaXZlZChjb250ZXh0KSB7XG4gICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkO1xuXG4gICAgY29uc3QgaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7aW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nfScgZGVyaXZlZCBpbXBsaWNpdEFzc3VtcHRpb24uLi5gKTtcblxuICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdHJ1ZVxuXG4gICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2ltcGxpY2l0QXNzdW1wdGlvblN0cmluZ30nIGRlcml2ZWQgaW1wbGljaXRBc3N1bXB0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXNXaGVuRGVyaXZlZDtcbiAgfVxuXG4gIHVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCBzdGF0ZW1lbnRVbmlmaWVzO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgLy8vXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIHByb29mQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtwcm9vZkFzc2VydGlvblN0cmluZ30nIGltcGxpY2l0QXNzdW1wdGlvbidzIHN0YXRlbWVudC4uLmApO1xuXG4gICAgc3RhdGVtZW50VW5pZmllcyA9IHRoaXMuc3RhdGVtZW50LnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke3Byb29mQXNzZXJ0aW9uU3RyaW5nfScgaW1wbGljaXRBc3N1bXB0aW9uJ3Mgc3RhdGVtZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkltcGxpY2l0QXNzdW1wdGlvblwiO1xuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGxldCBpbXBsaWNpdEFzc3VtcHRpb247XG5cbiAgICBwYXJlKChjb250ZXh0KSA9PiB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmcgPSBpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmdGcm9tU3RhdGVtZW50KHN0YXRlbWVudCksXG4gICAgICAgICAgICAgIHN0cmluZyA9IGltcGxpY2l0QXNzdW1wdGlvblN0cmluZywgIC8vL1xuICAgICAgICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlID0gaW5zdGFudGlhdGVJbXBsaWNpdEFzc3VtcHRpb24oc3RyaW5nLCBjb250ZXh0KTtcblxuICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb24gPSBpbXBsaWNpdEFzc3VtcHRpb25Gcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZShpbXBsaWNpdEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGltcGxpY2l0QXNzdW1wdGlvbjtcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsiZGVmaW5lIiwiSW1wbGljaXRBc3N1bXB0aW9uIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsImdldEltcGxpY2l0QXNzdW1wdGlvbk5vZGUiLCJnZXROb2RlIiwiaW1wbGljaXRBc3N1bXB0aW9uTm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJpc0VxdWFsVG8iLCJpbXBsaWNpdEFzc3VtcHRpb24iLCJpbXBsaWNpdEFzc3VtcHRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoSW1wbGljaXRBc3N1bXB0aW9uTm9kZSIsImVxdWFsVG8iLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsImZpbmRTdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJmaW5kVmFsaWRBc3N1bXB0aW9uIiwiYXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uIiwiZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlIiwidmFsaWRBc3N1bXB0aW9uIiwidmFsaWRhdGUiLCJpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZhbGlkYXRlcyIsImRlYnVnIiwic3RhdGVtZW50VmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJzdGF0ZWQiLCJpc1N0YXRlZCIsInZhbGlkYXRlc1doZW5TdGF0ZWQiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCIsInZhbGlkYXRlV2hlblN0YXRlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJhZGRBc3N1bXB0aW9uIiwidW5pZnlTdGF0ZW1lbnQiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInN0YXRlbWVudFVuaWZpZXMiLCJzdGF0ZW1lbnRTdHJpbmciLCJwcm9vZkFzc2VydGlvblN0cmluZyIsIm5hbWUiLCJmcm9tU3RhdGVtZW50IiwicGFyZSIsImluc3RhbnRpYXRlIiwiaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nRnJvbVN0YXRlbWVudCIsImluc3RhbnRpYXRlSW1wbGljaXRBc3N1bXB0aW9uIiwiaW1wbGljaXRBc3N1bXB0aW9uRnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVVBOzs7ZUFBQTs7O2dDQVJ3QjswQkFFRDt5QkFDVzs2QkFDWTt3QkFDUTt5QkFDTztNQUU3RCxXQUFlQSxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLDJCQUEyQkMsdUJBQU87SUFDNUQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxTQUFTLENBQUU7UUFDeEQsS0FBSyxDQUFDSixTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLFNBQVMsR0FBR0E7SUFDbkI7SUFFQUMsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDRCxTQUFTO0lBQ3ZCO0lBRUFFLDRCQUE0QjtRQUMxQixNQUFNSixPQUFPLElBQUksQ0FBQ0ssT0FBTyxJQUNuQkMseUJBQXlCTixNQUFPLEdBQUc7UUFFekMsT0FBT007SUFDVDtJQUVBQyxtQkFBbUI7UUFBRSxPQUFPLElBQUksQ0FBQ0wsU0FBUyxDQUFDSyxnQkFBZ0I7SUFBSTtJQUUvREMsVUFBVUMsa0JBQWtCLEVBQUU7UUFDNUIsTUFBTUgseUJBQXlCRyxtQkFBbUJKLE9BQU8sSUFDbkRLLGdDQUFnQyxJQUFJLENBQUNDLDJCQUEyQixDQUFDTCx5QkFDakVNLFVBQVVGLCtC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
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc3VtcHRpb24vaW1wbGljaXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgcGFyZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlSW1wbGljaXRBc3N1bXB0aW9uIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IGltcGxpY2l0QXNzdW1wdGlvblN0cmluZ0Zyb21TdGF0ZW1lbnQgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgaW1wbGljaXRBc3N1bXB0aW9uRnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIEltcGxpY2l0QXNzdW1wdGlvbiBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnN0YXRlbWVudCA9IHN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFN0YXRlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRJbXBsaWNpdEFzc3VtcHRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIGltcGxpY2l0QXNzdW1wdGlvbk5vZGU7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnROb2RlKCkgeyByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuZ2V0U3RhdGVtZW50Tm9kZSgpOyB9XG5cbiAgZ2V0UmVmZXJlbmNlKCkge1xuICAgIGNvbnN0IHJlZmVyZW5jZSA9IG51bGw7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9XG5cbiAgaXNFcXVhbFRvKGltcGxpY2l0QXNzdW1wdGlvbikge1xuICAgIGNvbnN0IGltcGxpY2l0QXNzdW1wdGlvbk5vZGUgPSBpbXBsaWNpdEFzc3VtcHRpb24uZ2V0Tm9kZSgpLFxuICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEltcGxpY2l0QXNzdW1wdGlvbk5vZGUoaW1wbGljaXRBc3N1bXB0aW9uTm9kZSksXG4gICAgICAgICAgZXF1YWxUbyA9IGltcGxpY2l0QXNzdW1wdGlvbk5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIG1hdGNoSW1wbGljaXRBc3N1bXB0aW9uTm9kZShpbXBsaWNpdEFzc3VtcHRpb25Ob2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IGltcGxpY2l0QXNzdW1wdGlvbk5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gaW1wbGljaXRBc3N1bXB0aW9uTm9kZU1hdGNoZXM7XG4gIH1cblxuICBmaW5kU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCkge1xuICAgIGxldCBzdWJwcm9vZkFzc2VydGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gdGhpcy5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKTtcblxuICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgIHN1YnByb29mQXNzZXJ0aW9uID0gY29udGV4dC5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xuICB9XG5cbiAgZmluZFZhbGlkQXNzdW1wdGlvbihjb250ZXh0KSB7XG4gICAgY29uc3QgaW1wbGljaXRBc3N1bXB0aW9uTm9kZSA9IHRoaXMuZ2V0SW1wbGljaXRBc3N1bXB0aW9uTm9kZSgpLFxuICAgICAgICAgIGFzc3VtcHRpb25Ob2RlID0gaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgIGFzc3VtcHRpb24gPSBjb250ZXh0LmZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSksXG4gICAgICAgICAgdmFsaWRBc3N1bXB0aW9uID0gYXNzdW1wdGlvbjsgIC8vL1xuXG4gICAgcmV0dXJuIHZhbGlkQXNzdW1wdGlvbjtcbiAgfVxuXG4gIHZhbGlkYXRlKGNvbnRleHQpIHtcbiAgICBsZXQgaW1wbGljaXRBc3N1bXB0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IGltcGxpY2l0QXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ltcGxpY2l0QXNzdW1wdGlvblN0cmluZ30nIGltcGxpY2l0IHFzc3VtcHRpb24uLi5gKTtcblxuICAgIGxldCB2YWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHZhbGlkQXNzdW1wdGlvbiA9IHRoaXMuZmluZFZhbGlkQXNzdW1wdGlvbihjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZEFzc3VtcHRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG5cbiAgICAgIGltcGxpY2l0QXNzdW1wdGlvbiA9IHZhbGlkQXNzdW1wdGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHtpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmd9JyBpbXBsaWNpdCBxc3N1bXB0aW9uIGlzIGFscmVhZHkgdmFsaWQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQoY29udGV4dCk7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXMpIHtcbiAgICAgICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgICAgIGxldCB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gZmFsc2UsXG4gICAgICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChzdGF0ZWQpIHtcbiAgICAgICAgICB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gdGhpcy52YWxpZGF0ZVdoZW5TdGF0ZWQoY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQoY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGVzV2hlblN0YXRlZCB8fCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb24gPSB0aGlzOyAgLy8vXG5cbiAgICAgICAgY29uc3QgYXNzdW1wdGlvbiA9IGltcGxpY2l0QXNzdW1wdGlvbjsgIC8vL1xuXG4gICAgICAgIGNvbnRleHQuYWRkQXNzdW1wdGlvbihhc3N1bXB0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2ltcGxpY2l0QXNzdW1wdGlvblN0cmluZ30nIGltcGxpY2l0QXNzdW1wdGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW1wbGljaXRBc3N1bXB0aW9uO1xuICB9XG5cbiAgdmFsaWRhdGVTdGF0ZW1lbnQoY29udGV4dCkge1xuICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGltcGxpY2l0QXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ltcGxpY2l0QXNzdW1wdGlvblN0cmluZ30nIGltcGxpY2l0QXNzdW1wdGlvbidzIHN0YXRlbWVudC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5zdGF0ZW1lbnQudmFsaWRhdGUoY29udGV4dCk7XG5cbiAgICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7aW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nfScgaW1wbGljaXRBc3N1bXB0aW9uJ3Mgc3RhdGVtZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5TdGF0ZWQoY29udGV4dCkge1xuICAgIGxldCB2YWxpZGF0ZXNXaGVuU3RhdGVkO1xuXG4gICAgY29uc3QgaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7aW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nfScgc3RhdGVkIGltcGxpY2l0QXNzdW1wdGlvbi4uLmApO1xuXG4gICAgdmFsaWRhdGVzV2hlblN0YXRlZCA9IHRydWVcblxuICAgIGlmICh2YWxpZGF0ZXNXaGVuU3RhdGVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2ltcGxpY2l0QXNzdW1wdGlvblN0cmluZ30nIHN0YXRlZCBpbXBsaWNpdEFzc3VtcHRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc1doZW5TdGF0ZWQ7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKGNvbnRleHQpIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQ7XG5cbiAgICBjb25zdCBpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmd9JyBkZXJpdmVkIGltcGxpY2l0QXNzdW1wdGlvbi4uLmApO1xuXG4gICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlXG5cbiAgICBpZiAodmFsaWRhdGVzV2hlbkRlcml2ZWQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7aW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nfScgZGVyaXZlZCBpbXBsaWNpdEFzc3VtcHRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc1doZW5EZXJpdmVkO1xuICB9XG5cbiAgdW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IHN0YXRlbWVudFVuaWZpZXM7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcHJvb2ZBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke3Byb29mQXNzZXJ0aW9uU3RyaW5nfScgaW1wbGljaXRBc3N1bXB0aW9uJ3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBzdGF0ZW1lbnRVbmlmaWVzID0gdGhpcy5zdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBpbXBsaWNpdEFzc3VtcHRpb24ncyBzdGF0ZW1lbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXM7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiSW1wbGljaXRBc3N1bXB0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgbGV0IGltcGxpY2l0QXNzdW1wdGlvbjtcblxuICAgIHBhcmUoKGNvbnRleHQpID0+IHtcbiAgICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGltcGxpY2l0QXNzdW1wdGlvblN0cmluZyA9IGltcGxpY2l0QXNzdW1wdGlvblN0cmluZ0Zyb21TdGF0ZW1lbnQoc3RhdGVtZW50KSxcbiAgICAgICAgICAgICAgc3RyaW5nID0gaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nLCAgLy8vXG4gICAgICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbk5vZGUgPSBpbnN0YW50aWF0ZUltcGxpY2l0QXNzdW1wdGlvbihzdHJpbmcsIGNvbnRleHQpO1xuXG4gICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbiA9IGltcGxpY2l0QXNzdW1wdGlvbkZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlKGltcGxpY2l0QXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gaW1wbGljaXRBc3N1bXB0aW9uO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJkZWZpbmUiLCJJbXBsaWNpdEFzc3VtcHRpb24iLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiZ2V0SW1wbGljaXRBc3N1bXB0aW9uTm9kZSIsImdldE5vZGUiLCJpbXBsaWNpdEFzc3VtcHRpb25Ob2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImdldFJlZmVyZW5jZSIsInJlZmVyZW5jZSIsImlzRXF1YWxUbyIsImltcGxpY2l0QXNzdW1wdGlvbiIsImltcGxpY2l0QXNzdW1wdGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hJbXBsaWNpdEFzc3VtcHRpb25Ob2RlIiwiZXF1YWxUbyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwiZmluZFN1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb24iLCJzdGF0ZW1lbnROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZSIsImZpbmRWYWxpZEFzc3VtcHRpb24iLCJhc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb24iLCJmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUiLCJ2YWxpZEFzc3VtcHRpb24iLCJ2YWxpZGF0ZSIsImltcGxpY2l0QXNzdW1wdGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmFsaWRhdGVzIiwiZGVidWciLCJzdGF0ZW1lbnRWYWxpZGF0ZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudCIsInN0YXRlZCIsImlzU3RhdGVkIiwidmFsaWRhdGVzV2hlblN0YXRlZCIsInZhbGlkYXRlc1doZW5EZXJpdmVkIiwidmFsaWRhdGVXaGVuU3RhdGVkIiwidmFsaWRhdGVXaGVuRGVyaXZlZCIsImFkZEFzc3VtcHRpb24iLCJ1bmlmeVN0YXRlbWVudCIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0Iiwic3RhdGVtZW50VW5pZmllcyIsInN0YXRlbWVudFN0cmluZyIsInByb29mQXNzZXJ0aW9uU3RyaW5nIiwibmFtZSIsImZyb21TdGF0ZW1lbnQiLCJwYXJlIiwiaW5zdGFudGlhdGUiLCJpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmdGcm9tU3RhdGVtZW50IiwiaW5zdGFudGlhdGVJbXBsaWNpdEFzc3VtcHRpb24iLCJpbXBsaWNpdEFzc3VtcHRpb25Gcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBVUE7OztlQUFBOzs7Z0NBUndCOzBCQUVEO3lCQUNXOzZCQUNZO3dCQUNRO3lCQUNPO01BRTdELFdBQWVBLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsMkJBQTJCQyx1QkFBTztJQUM1RCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsQ0FBRTtRQUN4RCxLQUFLLENBQUNKLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtJQUNuQjtJQUVBQyxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUNELFNBQVM7SUFDdkI7SUFFQUUsNEJBQTRCO1FBQzFCLE1BQU1KLE9BQU8sSUFBSSxDQUFDSyxPQUFPLElBQ25CQyx5QkFBeUJOLE1BQU8sR0FBRztRQUV6QyxPQUFPTTtJQUNUO0lBRUFDLG1CQUFtQjtRQUFFLE9BQU8sSUFBSSxDQUFDTCxTQUFTLENBQUNLLGdCQUFnQjtJQUFJO0lB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
@@ -215,29 +215,47 @@ const _default = (0, _elements.define)(class Assumption extends _occamlanguages.
215
215
  let schemaUnifies = false;
216
216
  const schemaString = schema.getString(), assumptionString = this.getString();
217
217
  context.trace(`Unifying the '${schemaString}' schema with the '${assumptionString}' assumption...`);
218
- (0, _context.reconcile)((context)=>{
219
- const label = schema.getLabel(), labelUnifies = this.reference.unifyLabel(label, context);
218
+ const generalContext = context, specificContext = context; ///
219
+ (0, _context.reconcile)((specificContext)=>{
220
+ const label = schema.getLabel(), context = specificContext, labelUnifies = this.reference.unifyLabel(label, context);
220
221
  if (labelUnifies) {
221
- const conditional = schema.isConditional(), subproofAssertion = subproofAssertionFromStatement(this.statement, context);
222
- if (conditional) {
222
+ const schemaConditional = schema.isConditional(), subproofAssertion = subproofAssertionFromStatement(this.statement, context);
223
+ if (schemaConditional) {
223
224
  if (subproofAssertion !== null) {
224
- schemaUnifies = subproofAssertion.unifySchema(schema, context);
225
+ schemaUnifies = subproofAssertion.unifySchema(schema, generalContext, specificContext);
225
226
  }
226
227
  } else {
227
228
  if (subproofAssertion === null) {
228
- const deducedStatment = schema.getDeducedStatement(), deducedStatmentUnfifies = this.unifyDeducedStatement(deducedStatment, context);
229
- if (deducedStatmentUnfifies) {
229
+ const deduction = schema.getDeduction(), deductionUnifies = this.unifyDeduction(deduction, generalContext, specificContext);
230
+ if (deductionUnifies) {
230
231
  schemaUnifies = true;
231
232
  }
232
233
  }
233
234
  }
234
235
  }
235
- }, context);
236
+ }, specificContext);
236
237
  if (schemaUnifies) {
237
238
  context.debug(`...unified the '${schemaString}' schema with the '${assumptionString}' assumption.`);
238
239
  }
239
240
  return schemaUnifies;
240
241
  }
242
+ unifyDeduction(deduction, generalContext, specificContext) {
243
+ let deductionUnifies;
244
+ const context = specificContext, deductionString = deduction.getString(), assumptionString = this.getString();
245
+ context.trace(`Unifying the '${deductionString}' deduction's statement with the '${assumptionString}' assumption's '${assumptionString}' statement...`);
246
+ const statement = deduction.getStatement(), deductionContext = deduction.getContext(); ///
247
+ specificContext = deductionContext; ///
248
+ (0, _context.join)((specificContext)=>{
249
+ const statementUnifies = this.statement.unifyStatement(statement, generalContext, specificContext);
250
+ if (statementUnifies) {
251
+ deductionUnifies = true;
252
+ }
253
+ }, specificContext, context);
254
+ if (deductionUnifies) {
255
+ context.debug(`...unified the '${deductionString}' deduction's statement with the '${assumptionString}' assumption's '${assumptionString}' statement.`);
256
+ }
257
+ return deductionUnifies;
258
+ }
241
259
  static name = "Assumption";
242
260
  toJSON() {
243
261
  const string = this.getString();
@@ -276,4 +294,4 @@ function subproofAssertionFromStatement(statement, context) {
276
294
  return subproofAssertion;
277
295
  }
278
296
 
279
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2Fzc3VtcHRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IGVsZW1lbnRzLCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVBc3N1bXB0aW9uIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHJlY29uY2lsZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2JyZWFrUG9pbnRcIjtcblxuY29uc3QgeyBlYWNoLCBjbG9uZSwgZmlsdGVyIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIEFzc3VtcHRpb24gZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHN0YXRlbWVudCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcbiAgICB0aGlzLnN0YXRlbWVudCA9IHN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFJlZmVyZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2U7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0QXNzdW1wdGlvbk5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGFzc3VtcHRpb25Ob2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25Ob2RlO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50Tm9kZSgpIHsgcmV0dXJuIHRoaXMuc3RhdGVtZW50LmdldFN0YXRlbWVudE5vZGUoKTsgfVxuXG4gIGdldE1ldGF2YXJpYWJsZSgpIHsgcmV0dXJuIHRoaXMucmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZSgpOyB9XG5cbiAgaXNFcXVhbFRvKGFzc3VtcHRpb24pIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uTm9kZSA9IGFzc3VtcHRpb24uZ2V0Tm9kZSgpLFxuICAgICAgICAgIGFzc3VtcHRpb25Ob2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSksXG4gICAgICAgICAgZXF1YWxUbyA9IGFzc3VtcHRpb25Ob2RlTWF0Y2hlczsgIC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICBtYXRjaEFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IGFzc3VtcHRpb25Ob2RlLCAvLy9cbiAgICAgICAgICBub2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hOb2RlKG5vZGUpLFxuICAgICAgICAgIGFzc3VtcHRpb25Ob2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBhc3N1bXB0aW9uTm9kZU1hdGNoZXM7XG4gIH1cblxuICBmaW5kU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCkge1xuICAgIGxldCBzdWJwcm9vZkFzc2VydGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gdGhpcy5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKTtcblxuICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgIHN1YnByb29mQXNzZXJ0aW9uID0gY29udGV4dC5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xuICB9XG5cbiAgZmluZFZhbGlkQXNzdW1wdGlvbihjb250ZXh0KSB7XG4gICAgY29uc3QgYXNzdW1wdGlvbk5vZGUgPSB0aGlzLmdldEFzc3VtcHRpb25Ob2RlKCksXG4gICAgICAgICAgYXNzdW1wdGlvbiA9IGNvbnRleHQuZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSxcbiAgICAgICAgICB2YWxpZEFzc3VtcHRpb24gPSBhc3N1bXB0aW9uOyAgLy8vXG5cbiAgICByZXR1cm4gdmFsaWRBc3N1bXB0aW9uO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCkge1xuICAgIGxldCBhc3N1bXB0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbi4uLmApO1xuXG4gICAgbGV0IHZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdmFsaWRBc3N1bXB0aW9uID0gdGhpcy5maW5kVmFsaWRBc3N1bXB0aW9uKGNvbnRleHQpO1xuXG4gICAgaWYgKHZhbGlkQXNzdW1wdGlvbiAhPT0gbnVsbCkge1xuICAgICAgdmFsaWRhdGVzID0gdHJ1ZTtcblxuICAgICAgYXNzdW1wdGlvbiA9IHZhbGlkQXNzdW1wdGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbiBpcyBhbHJlYWR5IHZhbGlkLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0aGlzLnZhbGlkYXRlU3RhdGVtZW50KGNvbnRleHQpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZVZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGVSZWZlcmVuY2UoY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHJlZmVyZW5jZVZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnN0IHN0YXRlZCA9IGNvbnRleHQuaXNTdGF0ZWQoKTtcblxuICAgICAgICAgIGxldCB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gZmFsc2UsXG4gICAgICAgICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoc3RhdGVkKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gdGhpcy52YWxpZGF0ZVdoZW5TdGF0ZWQoY29udGV4dCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdGhpcy52YWxpZGF0ZVdoZW5EZXJpdmVkKGNvbnRleHQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2YWxpZGF0ZXNXaGVuU3RhdGVkIHx8IHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgIGFzc3VtcHRpb24gPSB0aGlzOyAgLy8vXG5cbiAgICAgICAgY29udGV4dC5hZGRBc3N1bXB0aW9uKGFzc3VtcHRpb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICB2YWxpZGF0ZVJlZmVyZW5jZShjb250ZXh0KSB7XG4gICAgbGV0IHJlZmVyZW5jZVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3MgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICBjb25zdCByZWZlcmVuY2UgPSB0aGlzLnJlZmVyZW5jZS52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlO1xuXG4gICAgICByZWZlcmVuY2VWYWxpZGF0ZXMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChyZWZlcmVuY2VWYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24ncyByZWZlcmVuY2UuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZmVyZW5jZVZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KGNvbnRleHQpIHtcbiAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24ncyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuc3RhdGVtZW50LnZhbGlkYXRlKGNvbnRleHQpO1xuXG4gICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgc3RhdGVtZW50VmFsaWRhdGVzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3Mgc3RhdGVtZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5TdGF0ZWQoY29udGV4dCkge1xuICAgIGxldCB2YWxpZGF0ZXNXaGVuU3RhdGVkO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBzdGF0ZWQgYXNzdW1wdGlvbi4uLmApO1xuXG4gICAgdmFsaWRhdGVzV2hlblN0YXRlZCA9IHRydWVcblxuICAgIGlmICh2YWxpZGF0ZXNXaGVuU3RhdGVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBzdGF0ZWQgYXNzdW1wdGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzV2hlblN0YXRlZDtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlcml2ZWQoY29udGV4dCkge1xuICAgIGxldCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBkZXJpdmVkIGFzc3VtcHRpb24uLi5gKTtcblxuICAgIGxldCBzY2hlbWFzO1xuXG4gICAgc2NoZW1hcyA9IGNvbnRleHQuZ2V0U2NoZW1hcygpO1xuXG4gICAgc2NoZW1hcyA9IGNsb25lKHNjaGVtYXMpOyAvLy9cblxuICAgIGZpbHRlcihzY2hlbWFzLCAoc2NoZW1hKSA9PiB7XG4gICAgICBjb25zdCBsYWJlbCA9IHNjaGVtYS5nZXRMYWJlbCgpLFxuICAgICAgICAgICAgbGFiZWxVbmlmaWVzID0gdGhpcy51bmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0KTtcblxuICAgICAgaWYgKGxhYmVsVW5pZmllcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHNjaGVtYXNVbmlmaXkgPSBlYWNoKHNjaGVtYXMsIChzY2hlbWEpID0+IHtcbiAgICAgIGNvbnN0IHNjaGVtYVVuaWZpZXMgPSB0aGlzLnVuaWZ5U2NoZW1hKHNjaGVtYSwgY29udGV4dCk7XG5cbiAgICAgIGlmIChzY2hlbWFVbmlmaWVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHNjaGVtYXNVbmlmaXkpIHtcbiAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzV2hlbkRlcml2ZWQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGRlcml2ZWQgYXNzdW1wdGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzV2hlbkRlcml2ZWQ7XG4gIH1cblxuICB1bmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0KSB7XG4gICAgbGV0IGxhYmVsVW5pZmllcztcblxuICAgIGNvbnN0IGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGxhYmVsVW5pZmllcyA9IHRoaXMucmVmZXJlbmNlLnVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgaWYgKGxhYmVsVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbCB3aXRoIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzIHJlZmVyZW5jZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFiZWxVbmlmaWVzO1xuICB9XG5cbiAgdW5pZnlTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gICAgbGV0IHNjaGVtYVVuaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNjaGVtYVN0cmluZyA9IHNjaGVtYS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEgd2l0aCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24uLi5gKTtcblxuICAgIHJlY29uY2lsZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgbGFiZWwgPSBzY2hlbWEuZ2V0TGFiZWwoKSxcbiAgICAgICAgICAgIGxhYmVsVW5pZmllcyA9IHRoaXMucmVmZXJlbmNlLnVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQpO1xuXG4gICAgICBpZiAobGFiZWxVbmlmaWVzKSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbmFsID0gc2NoZW1hLmlzQ29uZGl0aW9uYWwoKSxcbiAgICAgICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQodGhpcy5zdGF0ZW1lbnQsIGNvbnRleHQpXG5cbiAgICAgICAgaWYgKGNvbmRpdGlvbmFsKSB7XG4gICAgICAgICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzY2hlbWFVbmlmaWVzID0gc3VicHJvb2ZBc3NlcnRpb24udW5pZnlTY2hlbWEoc2NoZW1hLCBjb250ZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBkZWR1Y2VkU3RhdG1lbnQgPSBzY2hlbWEuZ2V0RGVkdWNlZFN0YXRlbWVudCgpLFxuICAgICAgICAgICAgICAgICAgZGVkdWNlZFN0YXRtZW50VW5maWZpZXMgPSB0aGlzLnVuaWZ5RGVkdWNlZFN0YXRlbWVudChkZWR1Y2VkU3RhdG1lbnQsIGNvbnRleHQpO1xuXG4gICAgICAgICAgICBpZiAoZGVkdWNlZFN0YXRtZW50VW5maWZpZXMpIHtcbiAgICAgICAgICAgICAgc2NoZW1hVW5pZmllcyA9dHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmIChzY2hlbWFVbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEgd2l0aCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjaGVtYVVuaWZpZXM7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiQXNzdW1wdGlvblwiO1xuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIGFzc3VtcHRpb25Ob2RlID0gaW5zdGFudGlhdGVBc3N1bXB0aW9uKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gYXNzdW1wdGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIGFzc3VtcHRpb24gPSBuZXcgQXNzdW1wdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgc3RhdGVtZW50KTtcblxuICAgICAgcmV0dXJuIGFzc3VtcHRpb247XG4gICAgfSwgY29udGV4dCk7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiByZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGFzc3VtcHRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IGNvbnRleHQuZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5mdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGFzc3VtcHRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gY29udGV4dC5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mQXNzZXJ0aW9uO1xuXG4gIGNvbnN0IHsgU3VicHJvb2ZBc3NlcnRpb24gfSA9IGVsZW1lbnRzO1xuXG4gIHN1YnByb29mQXNzZXJ0aW9uID0gU3VicHJvb2ZBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIHN1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb24udmFsaWRhdGUoY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG5cbn1cblxuIl0sIm5hbWVzIjpbImVhY2giLCJjbG9uZSIsImZpbHRlciIsImFycmF5VXRpbGl0aWVzIiwiZGVmaW5lIiwiQXNzdW1wdGlvbiIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJyZWZlcmVuY2UiLCJzdGF0ZW1lbnQiLCJnZXRSZWZlcmVuY2UiLCJnZXRTdGF0ZW1lbnQiLCJnZXRBc3N1bXB0aW9uTm9kZSIsImdldE5vZGUiLCJhc3N1bXB0aW9uTm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJnZXRNZXRhdmFyaWFibGUiLCJpc0VxdWFsVG8iLCJhc3N1bXB0aW9uIiwiYXNzdW1wdGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3N1bXB0aW9uTm9kZSIsImVxdWFsVG8iLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsImZpbmRTdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJmaW5kVmFsaWRBc3N1bXB0aW9uIiwiZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlIiwidmFsaWRBc3N1bXB0aW9uIiwidmFsaWRhdGUiLCJhc3N1bXB0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YWxpZGF0ZXMiLCJkZWJ1ZyIsInN0YXRlbWVudFZhbGlkYXRlcyIsInZhbGlkYXRlU3RhdGVtZW50IiwicmVmZXJlbmNlVmFsaWRhdGVzIiwidmFsaWRhdGVSZWZlcmVuY2UiLCJzdGF0ZWQiLCJpc1N0YXRlZCIsInZhbGlkYXRlc1doZW5TdGF0ZWQiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCIsInZhbGlkYXRlV2hlblN0YXRlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJhZGRBc3N1bXB0aW9uIiwic2NoZW1hcyIsImdldFNjaGVtYXMiLCJzY2hlbWEiLCJsYWJlbCIsImdldExhYmVsIiwibGFiZWxVbmlmaWVzIiwidW5pZnlMYWJlbCIsInNjaGVtYXNVbmlmaXkiLCJzY2hlbWFVbmlmaWVzIiwidW5pZnlTY2hlbWEiLCJsYWJlbFN0cmluZyIsInJlY29uY2lsZSIsInNjaGVtYVN0cmluZyIsImNvbmRpdGlvbmFsIiwiaXNDb25kaXRpb25hbCIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsImRlZHVjZWRTdGF0bWVudCIsImdldERlZHVjZWRTdGF0ZW1lbnQiLCJkZWR1Y2VkU3RhdG1lbnRVbmZpZmllcyIsInVuaWZ5RGVkdWNlZFN0YXRlbWVudCIsIm5hbWUiLCJ0b0pTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImpzb24iLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVBc3N1bXB0aW9uIiwiYnJlYWtQb2ludEZyb21KU09OIiwicmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlIiwic3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsImdldE1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlIiwiZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZSIsIlN1YnByb29mQXNzZXJ0aW9uIiwiZWxlbWVudHMiLCJmcm9tU3RhdGVtZW50Il0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFZQTs7O2VBQUE7OztnQ0FWd0I7MkJBQ087a0VBRUU7NkJBQ0s7eUJBQ0M7NEJBQ3dCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFL0QsTUFBTSxFQUFFQSxJQUFJLEVBQUVDLEtBQUssRUFBRUMsTUFBTSxFQUFFLEdBQUdDLHlCQUFjO01BRTlDLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsbUJBQW1CQyx1QkFBTztJQUNwRCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsU0FBUyxDQUFFO1FBQ25FLEtBQUssQ0FBQ0wsU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxTQUFTLEdBQUdBO1FBQ2pCLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtJQUNuQjtJQUVBQyxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUNGLFNBQVM7SUFD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
297
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2Fzc3VtcHRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlQXNzdW1wdGlvbiB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyBqb2luLCByZWNvbmNpbGUsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9icmVha1BvaW50XCI7XG5cbmNvbnN0IHsgZWFjaCwgY2xvbmUsIGZpbHRlciB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBBc3N1bXB0aW9uIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgdGhpcy5zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRSZWZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldEFzc3VtcHRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBhc3N1bXB0aW9uTm9kZTtcbiAgfVxuXG4gIGdldFN0YXRlbWVudE5vZGUoKSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5nZXRTdGF0ZW1lbnROb2RlKCk7IH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7IHJldHVybiB0aGlzLnJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGlzRXF1YWxUbyhhc3N1bXB0aW9uKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvbk5vZGUgPSBhc3N1bXB0aW9uLmdldE5vZGUoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBhc3N1bXB0aW9uTm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBhc3N1bXB0aW9uTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBhc3N1bXB0aW9uTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbk5vZGVNYXRjaGVzO1xuICB9XG5cbiAgZmluZFN1YnByb29mQXNzZXJ0aW9uKGNvbnRleHQpIHtcbiAgICBsZXQgc3VicHJvb2ZBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHRoaXMuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlKCk7XG5cbiAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IGNvbnRleHQuZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRWYWxpZEFzc3VtcHRpb24oY29udGV4dCkge1xuICAgIGNvbnN0IGFzc3VtcHRpb25Ob2RlID0gdGhpcy5nZXRBc3N1bXB0aW9uTm9kZSgpLFxuICAgICAgICAgIGFzc3VtcHRpb24gPSBjb250ZXh0LmZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSksXG4gICAgICAgICAgdmFsaWRBc3N1bXB0aW9uID0gYXNzdW1wdGlvbjsgIC8vL1xuXG4gICAgcmV0dXJuIHZhbGlkQXNzdW1wdGlvbjtcbiAgfVxuXG4gIHZhbGlkYXRlKGNvbnRleHQpIHtcbiAgICBsZXQgYXNzdW1wdGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24uLi5gKTtcblxuICAgIGxldCB2YWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHZhbGlkQXNzdW1wdGlvbiA9IHRoaXMuZmluZFZhbGlkQXNzdW1wdGlvbihjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZEFzc3VtcHRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG5cbiAgICAgIGFzc3VtcHRpb24gPSB2YWxpZEFzc3VtcHRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi50aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gaXMgYWxyZWFkeSB2YWxpZC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3RhdGVtZW50VmFsaWRhdGVzID0gdGhpcy52YWxpZGF0ZVN0YXRlbWVudChjb250ZXh0KTtcblxuICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgICBjb25zdCByZWZlcmVuY2VWYWxpZGF0ZXMgPSB0aGlzLnZhbGlkYXRlUmVmZXJlbmNlKGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChyZWZlcmVuY2VWYWxpZGF0ZXMpIHtcbiAgICAgICAgICBjb25zdCBzdGF0ZWQgPSBjb250ZXh0LmlzU3RhdGVkKCk7XG5cbiAgICAgICAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZCA9IGZhbHNlLFxuICAgICAgICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHN0YXRlZCkge1xuICAgICAgICAgICAgdmFsaWRhdGVzV2hlblN0YXRlZCA9IHRoaXMudmFsaWRhdGVXaGVuU3RhdGVkKGNvbnRleHQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVyaXZlZChjb250ZXh0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsaWRhdGVzV2hlblN0YXRlZCB8fCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgICAgICAgdmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICBhc3N1bXB0aW9uID0gdGhpczsgIC8vL1xuXG4gICAgICAgIGNvbnRleHQuYWRkQXNzdW1wdGlvbihhc3N1bXB0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9XG5cbiAgdmFsaWRhdGVSZWZlcmVuY2UoY29udGV4dCkge1xuICAgIGxldCByZWZlcmVuY2VWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzIHJlZmVyZW5jZS4uLmApO1xuXG4gICAgY29uc3QgcmVmZXJlbmNlID0gdGhpcy5yZWZlcmVuY2UudmFsaWRhdGUoY29udGV4dCk7XG5cbiAgICBpZiAocmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcblxuICAgICAgcmVmZXJlbmNlVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocmVmZXJlbmNlVmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3MgcmVmZXJlbmNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiByZWZlcmVuY2VWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudChjb250ZXh0KSB7XG4gICAgbGV0IHN0YXRlbWVudFZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLnN0YXRlbWVudC52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIHN0YXRlbWVudFZhbGlkYXRlcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzIHN0YXRlbWVudC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuU3RhdGVkKGNvbnRleHQpIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZDtcblxuICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgc3RhdGVkIGFzc3VtcHRpb24uLi5gKTtcblxuICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0cnVlXG5cbiAgICBpZiAodmFsaWRhdGVzV2hlblN0YXRlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgc3RhdGVkIGFzc3VtcHRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc1doZW5TdGF0ZWQ7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKGNvbnRleHQpIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgZGVyaXZlZCBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICBsZXQgc2NoZW1hcztcblxuICAgIHNjaGVtYXMgPSBjb250ZXh0LmdldFNjaGVtYXMoKTtcblxuICAgIHNjaGVtYXMgPSBjbG9uZShzY2hlbWFzKTsgLy8vXG5cbiAgICBmaWx0ZXIoc2NoZW1hcywgKHNjaGVtYSkgPT4ge1xuICAgICAgY29uc3QgbGFiZWwgPSBzY2hlbWEuZ2V0TGFiZWwoKSxcbiAgICAgICAgICAgIGxhYmVsVW5pZmllcyA9IHRoaXMudW5pZnlMYWJlbChsYWJlbCwgY29udGV4dCk7XG5cbiAgICAgIGlmIChsYWJlbFVuaWZpZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzY2hlbWFzVW5pZml5ID0gZWFjaChzY2hlbWFzLCAoc2NoZW1hKSA9PiB7XG4gICAgICBjb25zdCBzY2hlbWFVbmlmaWVzID0gdGhpcy51bmlmeVNjaGVtYShzY2hlbWEsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoc2NoZW1hVW5pZmllcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChzY2hlbWFzVW5pZml5KSB7XG4gICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBkZXJpdmVkIGFzc3VtcHRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc1doZW5EZXJpdmVkO1xuICB9XG5cbiAgdW5pZnlMYWJlbChsYWJlbCwgY29udGV4dCkge1xuICAgIGxldCBsYWJlbFVuaWZpZXM7XG5cbiAgICBjb25zdCBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpLFxuICAgICAgICAgIGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbCB3aXRoIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbi4uLmApO1xuXG4gICAgcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBsYWJlbFVuaWZpZXMgPSB0aGlzLnJlZmVyZW5jZS51bmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmIChsYWJlbFVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2xhYmVsU3RyaW5nfScgbGFiZWwgd2l0aCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24ncyByZWZlcmVuY2UuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhYmVsVW5pZmllcztcbiAgfVxuXG4gIHVuaWZ5U2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICAgIGxldCBzY2hlbWFVbmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBzY2hlbWFTdHJpbmcgPSBzY2hlbWEuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBnZW5lcmFsQ29udGV4dCA9IGNvbnRleHQsIC8vL1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBsYWJlbCA9IHNjaGVtYS5nZXRMYWJlbCgpLFxuICAgICAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgbGFiZWxVbmlmaWVzID0gdGhpcy5yZWZlcmVuY2UudW5pZnlMYWJlbChsYWJlbCwgY29udGV4dCk7XG5cbiAgICAgIGlmIChsYWJlbFVuaWZpZXMpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hQ29uZGl0aW9uYWwgPSBzY2hlbWEuaXNDb25kaXRpb25hbCgpLFxuICAgICAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCh0aGlzLnN0YXRlbWVudCwgY29udGV4dClcblxuICAgICAgICBpZiAoc2NoZW1hQ29uZGl0aW9uYWwpIHtcbiAgICAgICAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgIHNjaGVtYVVuaWZpZXMgPSBzdWJwcm9vZkFzc2VydGlvbi51bmlmeVNjaGVtYShzY2hlbWEsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZHVjdGlvbiA9IHNjaGVtYS5nZXREZWR1Y3Rpb24oKSxcbiAgICAgICAgICAgICAgICAgIGRlZHVjdGlvblVuaWZpZXMgPSB0aGlzLnVuaWZ5RGVkdWN0aW9uKGRlZHVjdGlvbiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgICAgIGlmIChkZWR1Y3Rpb25VbmlmaWVzKSB7XG4gICAgICAgICAgICAgIHNjaGVtYVVuaWZpZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBpZiAoc2NoZW1hVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzY2hlbWFVbmlmaWVzO1xuICB9XG5cbiAgdW5pZnlEZWR1Y3Rpb24oZGVkdWN0aW9uLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IGRlZHVjdGlvblVuaWZpZXM7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgZGVkdWN0aW9uU3RyaW5nID0gZGVkdWN0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbidzIHN0YXRlbWVudCAgd2l0aCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24ncyAnJHthc3N1bXB0aW9uU3RyaW5nfScgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBkZWR1Y3Rpb24uZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgZGVkdWN0aW9uQ29udGV4dCA9IGRlZHVjdGlvbi5nZXRDb250ZXh0KCk7IC8vL1xuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gZGVkdWN0aW9uQ29udGV4dDsgLy8vXG5cbiAgICBqb2luKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFVuaWZpZXMgPSB0aGlzLnN0YXRlbWVudC51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgICBkZWR1Y3Rpb25VbmlmaWVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuXG4gICAgaWYgKGRlZHVjdGlvblVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbidzIHN0YXRlbWVudCB3aXRoIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzICcke2Fzc3VtcHRpb25TdHJpbmd9JyBzdGF0ZW1lbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZHVjdGlvblVuaWZpZXM7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiQXNzdW1wdGlvblwiO1xuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIGFzc3VtcHRpb25Ob2RlID0gaW5zdGFudGlhdGVBc3N1bXB0aW9uKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gYXNzdW1wdGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIGFzc3VtcHRpb24gPSBuZXcgQXNzdW1wdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgc3RhdGVtZW50KTtcblxuICAgICAgcmV0dXJuIGFzc3VtcHRpb247XG4gICAgfSwgY29udGV4dCk7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiByZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGFzc3VtcHRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IGNvbnRleHQuZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5mdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGFzc3VtcHRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gY29udGV4dC5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mQXNzZXJ0aW9uO1xuXG4gIGNvbnN0IHsgU3VicHJvb2ZBc3NlcnRpb24gfSA9IGVsZW1lbnRzO1xuXG4gIHN1YnByb29mQXNzZXJ0aW9uID0gU3VicHJvb2ZBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIHN1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb24udmFsaWRhdGUoY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG5cbn1cblxuIl0sIm5hbWVzIjpbImVhY2giLCJjbG9uZSIsImZpbHRlciIsImFycmF5VXRpbGl0aWVzIiwiZGVmaW5lIiwiQXNzdW1wdGlvbiIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJyZWZlcmVuY2UiLCJzdGF0ZW1lbnQiLCJnZXRSZWZlcmVuY2UiLCJnZXRTdGF0ZW1lbnQiLCJnZXRBc3N1bXB0aW9uTm9kZSIsImdldE5vZGUiLCJhc3N1bXB0aW9uTm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJnZXRNZXRhdmFyaWFibGUiLCJpc0VxdWFsVG8iLCJhc3N1bXB0aW9uIiwiYXNzdW1wdGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3N1bXB0aW9uTm9kZSIsImVxdWFsVG8iLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsImZpbmRTdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJmaW5kVmFsaWRBc3N1bXB0aW9uIiwiZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlIiwidmFsaWRBc3N1bXB0aW9uIiwidmFsaWRhdGUiLCJhc3N1bXB0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YWxpZGF0ZXMiLCJkZWJ1ZyIsInN0YXRlbWVudFZhbGlkYXRlcyIsInZhbGlkYXRlU3RhdGVtZW50IiwicmVmZXJlbmNlVmFsaWRhdGVzIiwidmFsaWRhdGVSZWZlcmVuY2UiLCJzdGF0ZWQiLCJpc1N0YXRlZCIsInZhbGlkYXRlc1doZW5TdGF0ZWQiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCIsInZhbGlkYXRlV2hlblN0YXRlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJhZGRBc3N1bXB0aW9uIiwic2NoZW1hcyIsImdldFNjaGVtYXMiLCJzY2hlbWEiLCJsYWJlbCIsImdldExhYmVsIiwibGFiZWxVbmlmaWVzIiwidW5pZnlMYWJlbCIsInNjaGVtYXNVbmlmaXkiLCJzY2hlbWFVbmlmaWVzIiwidW5pZnlTY2hlbWEiLCJsYWJlbFN0cmluZyIsInJlY29uY2lsZSIsInNjaGVtYVN0cmluZyIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0Iiwic2NoZW1hQ29uZGl0aW9uYWwiLCJpc0NvbmRpdGlvbmFsIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwiZGVkdWN0aW9uIiwiZ2V0RGVkdWN0aW9uIiwiZGVkdWN0aW9uVW5pZmllcyIsInVuaWZ5RGVkdWN0aW9uIiwiZGVkdWN0aW9uU3RyaW5nIiwiZGVkdWN0aW9uQ29udGV4dCIsImdldENvbnRleHQiLCJqb2luIiwic3RhdGVtZW50VW5pZmllcyIsInVuaWZ5U3RhdGVtZW50IiwibmFtZSIsInRvSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwianNvbiIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZUFzc3VtcHRpb24iLCJicmVha1BvaW50RnJvbUpTT04iLCJyZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIiwiU3VicHJvb2ZBc3NlcnRpb24iLCJlbGVtZW50cyIs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
@@ -51,7 +51,7 @@ const _default = (0, _elements.define)(class Constraint extends _occamlanguages.
51
51
  validate(context) {
52
52
  let constraint = null;
53
53
  const constraintString = this.getString(); ///
54
- context.trace(`Validating the '${constraintString}' meta-lLevel assumption...`);
54
+ context.trace(`Validating the '${constraintString}' constraint...`);
55
55
  let validates = false;
56
56
  const validConstraint = this.findValidConstraint(context);
57
57
  if (validConstraint !== null) {
@@ -253,4 +253,4 @@ function statementFromConstraintNode(constraintNode, context) {
253
253
  return statement;
254
254
  }
255
255
 
256
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NvbnN0cmFpbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgdW5pZnlTdGF0ZW1lbnQgfSBmcm9tIFwiLi4vcHJvY2Vzcy91bmlmeVwiO1xuaW1wb3J0IHsgc3RyaXBCcmFja2V0c0Zyb21TdGF0ZW1lbnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2JyYWNrZXRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUNvbnN0cmFpbnQgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvYnJlYWtQb2ludFwiO1xuaW1wb3J0IHsgY29uc3RyYWludEZyb21Db25zdHJhaW50Tm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHsgY29uc3RyYWludFN0cmluZ0Zyb21SZWZlcmVuY2VBbmRTdGF0ZW1lbnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgam9pbiwgYWJsYXRlLCBhdHRlbXB0LCBkZXNjZW5kLCByZWNvbmNpbGUsIHNlcmlhbGlzZSwgdW5zZXJpYWxpc2UsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBDb25zdHJhaW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgdGhpcy5zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRSZWZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldENvbnN0cmFpbnROb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBjb25zdHJhaW50Tm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBjb25zdHJhaW50Tm9kZTtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZSgpIHsgcmV0dXJuIHRoaXMucmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZSgpOyB9XG5cbiAgaXNFcXVhbFRvKGNvbnN0cmFpbnQpIHtcbiAgICBjb25zdCBjb25zdHJhaW50Tm9kZSA9IGNvbnN0cmFpbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGNvbnN0cmFpbnROb2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hDb25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSksXG4gICAgICAgICAgZXF1YWxUbyA9IGNvbnN0cmFpbnROb2RlTWF0Y2hlczsgIC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICBtYXRjaENvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IGNvbnN0cmFpbnROb2RlLCAvLy9cbiAgICAgICAgICBub2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hOb2RlKG5vZGUpLFxuICAgICAgICAgIGNvbnN0cmFpbnROb2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBjb25zdHJhaW50Tm9kZU1hdGNoZXM7XG4gIH1cblxuICBmaW5kVmFsaWRDb25zdHJhaW50KGNvbnRleHQpIHtcbiAgICBjb25zdCBjb25zdHJhaW50Tm9kZSA9IHRoaXMuZ2V0Q29uc3RyYWludE5vZGUoKSxcbiAgICAgICAgICBjb25zdHJhaW50ID0gY29udGV4dC5maW5kQ29uc3RyYWludEJ5Q29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUpLFxuICAgICAgICAgIHZhbGlkQ29uc3RyYWludCA9IGNvbnN0cmFpbnQ7ICAvLy9cblxuICAgIHJldHVybiB2YWxpZENvbnN0cmFpbnQ7XG4gIH1cblxuICB2YWxpZGF0ZShjb250ZXh0KSB7XG4gICAgbGV0IGNvbnN0cmFpbnQgPSBudWxsO1xuXG4gICAgY29uc3QgY29uc3RyYWludFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBtZXRhLWxMZXZlbCBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICBsZXQgdmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCB2YWxpZENvbnN0cmFpbnQgPSB0aGlzLmZpbmRWYWxpZENvbnN0cmFpbnQoY29udGV4dCk7XG5cbiAgICBpZiAodmFsaWRDb25zdHJhaW50ICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXMgPSB0cnVlO1xuXG4gICAgICBjb25zdHJhaW50ID0gdmFsaWRDb25zdHJhaW50OyAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50IGlzIGFscmVhZHkgdmFsaWQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRlbXBvcmFyeUNvbnRleHQgPSBjb250ZXh0OyAvLy9cblxuICAgICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgICBhdHRlbXB0KChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudFZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQoY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZVZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGVSZWZlcmVuY2UoY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAocmVmZXJlbmNlVmFsaWRhdGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZWQgPSBjb250ZXh0LmlzU3RhdGVkKCk7XG5cbiAgICAgICAgICAgIGxldCB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gZmFsc2UsXG4gICAgICAgICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZWQpIHtcbiAgICAgICAgICAgICAgdmFsaWRhdGVzV2hlblN0YXRlZCA9IHRoaXMudmFsaWRhdGVXaGVuU3RhdGVkKGNvbnRleHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQoY29udGV4dCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWxpZGF0ZXNXaGVuU3RhdGVkIHx8IHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIHRoaXMuY29tbWl0KGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICB9LCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dCA9IHRlbXBvcmFyeUNvbnRleHQ7IC8vL1xuXG4gICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0cmFpbnQgPSB0aGlzOyAgLy8vXG5cbiAgICAgICAgY29udGV4dC5hZGRDb25zdHJhaW50KGNvbnN0cmFpbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnN0cmFpbnQ7XG4gIH1cblxuICB2YWxpZGF0ZVJlZmVyZW5jZShjb250ZXh0KSB7XG4gICAgbGV0IHJlZmVyZW5jZVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29uc3RyYWludFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50J3MgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICBjb25zdCByZWZlcmVuY2UgPSB0aGlzLnJlZmVyZW5jZS52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IHRoaXMucmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZSgpLFxuICAgICAgICAgICAgbWV0YXZhcmlhYmxlRGVjbGFyZWQgPSBtZXRhdmFyaWFibGUuaXNEZWNsYXJlZCgpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlRGVjbGFyZWQpIHtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG5cbiAgICAgICAgcmVmZXJlbmNlVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVmZXJlbmNlVmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50J3MgcmVmZXJlbmNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiByZWZlcmVuY2VWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudChjb250ZXh0KSB7XG4gICAgbGV0IHN0YXRlbWVudFZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29uc3RyYWludFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50J3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBkZXNjZW5kKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLnN0YXRlbWVudC52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludCdzIHN0YXRlbWVudC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuU3RhdGVkKGNvbnRleHQpIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZDtcblxuICAgIGNvbnN0IGNvbnN0cmFpbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgc3RhdGVkIGNvbnN0cmFpbnQuLi5gKTtcblxuICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0cnVlXG5cbiAgICBpZiAodmFsaWRhdGVzV2hlblN0YXRlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgc3RhdGVkIGNvbnN0cmFpbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc1doZW5TdGF0ZWQ7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKGNvbnRleHQpIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQ7XG5cbiAgICBjb25zdCBjb25zdHJhaW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGRlcml2ZWQgY29uc3RyYWludC4uLmApO1xuXG4gICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuXG4gICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBkZXJpdmVkIGNvbnN0cmFpbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc1doZW5EZXJpdmVkO1xuICB9XG5cbiAgdW5pZnlSZWZlcmVuY2UocmVmZXJlbmNlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IHJlZmVyZW5jZVVuaWZpZXM7XG5cbiAgICBpZiAocmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICBjb25zdHJhaW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2Ugd2l0aCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQncyByZWZlcmVuY2UuLi5gKTtcblxuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlID0gdGhpcy5nZXRNZXRhdmFyaWFibGUoKTtcblxuICAgICAgcmVmZXJlbmNlVW5pZmllcyA9IG1ldGF2YXJpYWJsZS51bmlmeVJlZmVyZW5jZShyZWZlcmVuY2UsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICBpZiAocmVmZXJlbmNlVW5pZmllcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLnVuaWZpZWQgdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHdpdGggdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50J3MgcmVmZXJlbmNlLmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZWZlcmVuY2VVbmlmaWVzID0gdHJ1ZTsgIC8vL1xuICAgIH1cblxuICAgIHJldHVybiByZWZlcmVuY2VVbmlmaWVzO1xuICB9XG5cbiAgdW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IHN0YXRlbWVudFVuaWZpZXM7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIGNvbnN0cmFpbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQncyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IGdlbmVyYWxTdGF0ZW1lbnQgPSB0aGlzLnN0YXRlbWVudCwgIC8vL1xuICAgICAgICAgIHNwZWNpZmljU3RhdGVtZW50ID0gc3RyaXBCcmFja2V0c0Zyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTsgIC8vL1xuXG4gICAgc3RhdGVtZW50VW5pZmllcyA9IHVuaWZ5U3RhdGVtZW50KGdlbmVyYWxTdGF0ZW1lbnQsIHNwZWNpZmljU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQncyBzdGF0ZW1lbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXM7XG4gIH1cblxuICB1bmlmeUFzc3VtcHRpb24oYXNzdW1wdGlvbiwgY29udGV4dCkge1xuICAgIGxldCBhc3N1bXB0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IGFzc3VtcHRpb24uZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBjb25zdHJhaW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbiB3aXRoIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludC4uLmApO1xuXG4gICAgY29uc3QgY29uc3RyYWludENvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgYXNzdW1wdGlvbkNvbnRleHQgPSBhc3N1bXB0aW9uLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBjb25zdHJhaW50Q29udGV4dCxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBhc3N1bXB0aW9uQ29udGV4dDsgIC8vL1xuXG4gICAgam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCByZWZlcmVuY2UgPSBhc3N1bXB0aW9uLmdldFJlZmVyZW5jZSgpLFxuICAgICAgICAgICAgICByZWZlcm5lY2VVbmlmaWVzID0gdGhpcy51bmlmeVJlZmVyZW5jZShyZWZlcmVuY2UsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIGlmIChyZWZlcm5lY2VVbmlmaWVzKSB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50ID0gYXNzdW1wdGlvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICAgICAgICBzdGF0ZW1lbnRVbmlmaWVkID0gdGhpcy51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZWQpIHtcbiAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICAgIGFzc3VtcHRpb25VbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcblxuICAgIGlmIChhc3N1bXB0aW9uVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gd2l0aCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQuLi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvblVuaWZpZXM7XG4gIH1cblxuICB1bmlmeUFzc3VtcHRpb25zKGFzc3VtcHRpb25zLCBjb250ZXh0KSB7XG4gICAgY29uc3QgYXNzdW1wdGlvbnNVbmlmeSA9IGFzc3VtcHRpb25zLnNvbWUoKGFzc3VtcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IGFzc3VtcHRpb25VbmlmaWVzID0gdGhpcy51bmlmeUFzc3VtcHRpb24oYXNzdW1wdGlvbiwgY29udGV4dCk7XG5cbiAgICAgIGlmIChhc3N1bXB0aW9uVW5pZmllcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uc1VuaWZ5O1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHJldHVybiBzZXJpYWxpc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICBjb250ZXh0LFxuICAgICAgICBzdHJpbmcsXG4gICAgICAgIGJyZWFrUG9pbnRcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBqc29uO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkNvbnN0cmFpbnRcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBjb25zdHJhaW50O1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHVuc2VyaWFsaXNlKChqc29uLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICBjb25zdHJhaW50Tm9kZSA9IGluc3RhbnRpYXRlQ29uc3RyYWludChzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gY29uc3RyYWludE5vZGUsICAvLy9cbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KTtcblxuICAgICAgICBjb25zdHJhaW50ID0gbmV3IENvbnN0cmFpbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG4gICAgICB9LCBqc29uLCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBjb25zdHJhaW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGVwKHN0ZXAsIGNvbnRleHQpIHtcbiAgICBsZXQgY29uc3RyYWludDtcblxuICAgIGxldCBzdGF0ZW1lbnQ7XG5cbiAgICBzdGF0ZW1lbnQgPSBzdGVwLmdldFN0YXRlbWVudCgpO1xuXG4gICAgc3RhdGVtZW50ID0gc3RyaXBCcmFja2V0c0Zyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTsgLy8vXG5cbiAgICBjb25zdCByZWZlcmVuY2UgPSBzdGVwLmdldFJlZmVyZW5jZSgpO1xuXG4gICAgYWJsYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBjb25zdHJhaW50U3RyaW5nID0gY29uc3RyYWludFN0cmluZ0Zyb21SZWZlcmVuY2VBbmRTdGF0ZW1lbnQocmVmZXJlbmNlLCBzdGF0ZW1lbnQpLFxuICAgICAgICAgICAgICBzdHJpbmcgPSBjb25zdHJhaW50U3RyaW5nLCAgLy8vXG4gICAgICAgICAgICAgIGNvbnN0cmFpbnROb2RlID0gaW5zdGFudGlhdGVDb25zdHJhaW50KHN0cmluZywgY29udGV4dCk7XG5cbiAgICAgICAgY29uc3RyYWludCA9IGNvbnN0cmFpbnRGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29uc3RyYWludDtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHJlZmVyZW5jZUZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZWZlcmVuY2VOb2RlID0gY29uc3RyYWludE5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICByZWZlcm5lY2UgPSBjb250ZXh0LmZpbmRSZWZlcmVuY2VCeVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSk7XG5cbiAgcmV0dXJuIHJlZmVybmVjZTtcbn1cblxuZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb25zdHJhaW50Tm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuIl0sIm5hbWVzIjpbImRlZmluZSIsIkNvbnN0cmFpbnQiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwicmVmZXJlbmNlIiwic3RhdGVtZW50IiwiZ2V0UmVmZXJlbmNlIiwiZ2V0U3RhdGVtZW50IiwiZ2V0Q29uc3RyYWludE5vZGUiLCJnZXROb2RlIiwiY29uc3RyYWludE5vZGUiLCJnZXRNZXRhdmFyaWFibGUiLCJpc0VxdWFsVG8iLCJjb25zdHJhaW50IiwiY29uc3RyYWludE5vZGVNYXRjaGVzIiwibWF0Y2hDb25zdHJhaW50Tm9kZSIsImVxdWFsVG8iLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsImZpbmRWYWxpZENvbnN0cmFpbnQiLCJmaW5kQ29uc3RyYWludEJ5Q29uc3RyYWludE5vZGUiLCJ2YWxpZENvbnN0cmFpbnQiLCJ2YWxpZGF0ZSIsImNvbnN0cmFpbnRTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZhbGlkYXRlcyIsImRlYnVnIiwidGVtcG9yYXJ5Q29udGV4dCIsImdldENvbnRleHQiLCJhdHRlbXB0Iiwic3RhdGVtZW50VmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJyZWZlcmVuY2VWYWxpZGF0ZXMiLCJ2YWxpZGF0ZVJlZmVyZW5jZSIsInN0YXRlZCIsImlzU3RhdGVkIiwidmFsaWRhdGVzV2hlblN0YXRlZCIsInZhbGlkYXRlc1doZW5EZXJpdmVkIiwidmFsaWRhdGVXaGVuU3RhdGVkIiwidmFsaWRhdGVXaGVuRGVyaXZlZCIsImNvbW1pdCIsImFkZENvbnN0cmFpbnQiLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVEZWNsYXJlZCIsImlzRGVjbGFyZWQiLCJkZXNjZW5kIiwidW5pZnlSZWZlcmVuY2UiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInJlZmVyZW5jZVVuaWZpZXMiLCJyZWZlcmVuY2VTdHJpbmciLCJ1bmlmeVN0YXRlbWVudCIsInN0YXRlbWVudFVuaWZpZXMiLCJzdGF0ZW1lbnRTdHJpbmciLCJnZW5lcmFsU3RhdGVtZW50Iiwic3BlY2lmaWNTdGF0ZW1lbnQiLCJzdHJpcEJyYWNrZXRzRnJvbVN0YXRlbWVudCIsInVuaWZ5QXNzdW1wdGlvbiIsImFzc3VtcHRpb24iLCJhc3N1bXB0aW9uVW5pZmllcyIsImFzc3VtcHRpb25TdHJpbmciLCJjb25zdHJhaW50Q29udGV4dCIsImFzc3VtcHRpb25Db250ZXh0Iiwiam9pbiIsInJlY29uY2lsZSIsInJlZmVybmVjZVVuaWZpZXMiLCJzdGF0ZW1lbnRVbmlmaWVkIiwidW5pZnlBc3N1bXB0aW9ucyIsImFzc3VtcHRpb25zIiwiYXNzdW1wdGlvbnNVbmlmeSIsInNvbWUiLCJ0b0pTT04iLCJzZXJpYWxpc2UiLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsInVuc2VyaWFsaXNlIiwiaW5zdGFudGlhdGVDb25zdHJhaW50IiwiYnJlYWtQb2ludEZyb21KU09OIiwicmVmZXJlbmNlRnJvbUNvbnN0cmFpbnROb2RlIiwic3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlIiwiZnJvbVN0ZXAiLCJzdGVwIiwiYWJsYXRlIiwiY29uc3RyYWludFN0cmluZ0Zyb21SZWZlcmVuY2VBbmRTdGF0ZW1lbnQiLCJjb25zdHJhaW50RnJvbUNvbnN0cmFpbnROb2RlIiwicmVmZXJlbmNlTm9kZSIsImdldFJlZmVyZW5jZU5vZGUiLCJyZWZlcm5lY2UiLCJmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlIiwic3RhdGVtZW50Tm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFhQTs7O2VBQUE7OztnQ0FYd0I7MEJBRUQ7dUJBQ1E7MEJBQ1k7NkJBQ0w7NEJBQ3lCO3lCQUNsQjt3QkFDYTt5QkFDcUM7TUFFL0YsV0FBZUEsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxtQkFBbUJDLHVCQUFPO0lBQ3BELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxTQUFTLENBQUU7UUFDbkUsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLFNBQVMsR0FBR0E7UUFDakIsSUFBSSxDQUFDQyxTQUFTLEdBQUdBO0lBQ25CO0lBRUFDLGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQ0YsU0FBUztJQUN2QjtJQUVBRyxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUNGLFNBQVM7SUFDdkI7SUFF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
256
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NvbnN0cmFpbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgdW5pZnlTdGF0ZW1lbnQgfSBmcm9tIFwiLi4vcHJvY2Vzcy91bmlmeVwiO1xuaW1wb3J0IHsgc3RyaXBCcmFja2V0c0Zyb21TdGF0ZW1lbnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2JyYWNrZXRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUNvbnN0cmFpbnQgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvYnJlYWtQb2ludFwiO1xuaW1wb3J0IHsgY29uc3RyYWludEZyb21Db25zdHJhaW50Tm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHsgY29uc3RyYWludFN0cmluZ0Zyb21SZWZlcmVuY2VBbmRTdGF0ZW1lbnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgam9pbiwgYWJsYXRlLCBhdHRlbXB0LCBkZXNjZW5kLCByZWNvbmNpbGUsIHNlcmlhbGlzZSwgdW5zZXJpYWxpc2UsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBDb25zdHJhaW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgdGhpcy5zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRSZWZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldENvbnN0cmFpbnROb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBjb25zdHJhaW50Tm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBjb25zdHJhaW50Tm9kZTtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZSgpIHsgcmV0dXJuIHRoaXMucmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZSgpOyB9XG5cbiAgaXNFcXVhbFRvKGNvbnN0cmFpbnQpIHtcbiAgICBjb25zdCBjb25zdHJhaW50Tm9kZSA9IGNvbnN0cmFpbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGNvbnN0cmFpbnROb2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hDb25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSksXG4gICAgICAgICAgZXF1YWxUbyA9IGNvbnN0cmFpbnROb2RlTWF0Y2hlczsgIC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICBtYXRjaENvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IGNvbnN0cmFpbnROb2RlLCAvLy9cbiAgICAgICAgICBub2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hOb2RlKG5vZGUpLFxuICAgICAgICAgIGNvbnN0cmFpbnROb2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBjb25zdHJhaW50Tm9kZU1hdGNoZXM7XG4gIH1cblxuICBmaW5kVmFsaWRDb25zdHJhaW50KGNvbnRleHQpIHtcbiAgICBjb25zdCBjb25zdHJhaW50Tm9kZSA9IHRoaXMuZ2V0Q29uc3RyYWludE5vZGUoKSxcbiAgICAgICAgICBjb25zdHJhaW50ID0gY29udGV4dC5maW5kQ29uc3RyYWludEJ5Q29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUpLFxuICAgICAgICAgIHZhbGlkQ29uc3RyYWludCA9IGNvbnN0cmFpbnQ7ICAvLy9cblxuICAgIHJldHVybiB2YWxpZENvbnN0cmFpbnQ7XG4gIH1cblxuICB2YWxpZGF0ZShjb250ZXh0KSB7XG4gICAgbGV0IGNvbnN0cmFpbnQgPSBudWxsO1xuXG4gICAgY29uc3QgY29uc3RyYWludFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50Li4uYCk7XG5cbiAgICBsZXQgdmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCB2YWxpZENvbnN0cmFpbnQgPSB0aGlzLmZpbmRWYWxpZENvbnN0cmFpbnQoY29udGV4dCk7XG5cbiAgICBpZiAodmFsaWRDb25zdHJhaW50ICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXMgPSB0cnVlO1xuXG4gICAgICBjb25zdHJhaW50ID0gdmFsaWRDb25zdHJhaW50OyAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50IGlzIGFscmVhZHkgdmFsaWQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRlbXBvcmFyeUNvbnRleHQgPSBjb250ZXh0OyAvLy9cblxuICAgICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgICBhdHRlbXB0KChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudFZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQoY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZVZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGVSZWZlcmVuY2UoY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAocmVmZXJlbmNlVmFsaWRhdGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZWQgPSBjb250ZXh0LmlzU3RhdGVkKCk7XG5cbiAgICAgICAgICAgIGxldCB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gZmFsc2UsXG4gICAgICAgICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZWQpIHtcbiAgICAgICAgICAgICAgdmFsaWRhdGVzV2hlblN0YXRlZCA9IHRoaXMudmFsaWRhdGVXaGVuU3RhdGVkKGNvbnRleHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQoY29udGV4dCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWxpZGF0ZXNXaGVuU3RhdGVkIHx8IHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIHRoaXMuY29tbWl0KGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICB9LCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dCA9IHRlbXBvcmFyeUNvbnRleHQ7IC8vL1xuXG4gICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0cmFpbnQgPSB0aGlzOyAgLy8vXG5cbiAgICAgICAgY29udGV4dC5hZGRDb25zdHJhaW50KGNvbnN0cmFpbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnN0cmFpbnQ7XG4gIH1cblxuICB2YWxpZGF0ZVJlZmVyZW5jZShjb250ZXh0KSB7XG4gICAgbGV0IHJlZmVyZW5jZVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29uc3RyYWludFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50J3MgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICBjb25zdCByZWZlcmVuY2UgPSB0aGlzLnJlZmVyZW5jZS52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IHRoaXMucmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZSgpLFxuICAgICAgICAgICAgbWV0YXZhcmlhYmxlRGVjbGFyZWQgPSBtZXRhdmFyaWFibGUuaXNEZWNsYXJlZCgpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlRGVjbGFyZWQpIHtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG5cbiAgICAgICAgcmVmZXJlbmNlVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVmZXJlbmNlVmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50J3MgcmVmZXJlbmNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiByZWZlcmVuY2VWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudChjb250ZXh0KSB7XG4gICAgbGV0IHN0YXRlbWVudFZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29uc3RyYWludFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50J3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBkZXNjZW5kKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLnN0YXRlbWVudC52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludCdzIHN0YXRlbWVudC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuU3RhdGVkKGNvbnRleHQpIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZDtcblxuICAgIGNvbnN0IGNvbnN0cmFpbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgc3RhdGVkIGNvbnN0cmFpbnQuLi5gKTtcblxuICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0cnVlXG5cbiAgICBpZiAodmFsaWRhdGVzV2hlblN0YXRlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgc3RhdGVkIGNvbnN0cmFpbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc1doZW5TdGF0ZWQ7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKGNvbnRleHQpIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQ7XG5cbiAgICBjb25zdCBjb25zdHJhaW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGRlcml2ZWQgY29uc3RyYWludC4uLmApO1xuXG4gICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuXG4gICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBkZXJpdmVkIGNvbnN0cmFpbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc1doZW5EZXJpdmVkO1xuICB9XG5cbiAgdW5pZnlSZWZlcmVuY2UocmVmZXJlbmNlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IHJlZmVyZW5jZVVuaWZpZXM7XG5cbiAgICBpZiAocmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICBjb25zdHJhaW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2Ugd2l0aCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQncyByZWZlcmVuY2UuLi5gKTtcblxuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlID0gdGhpcy5nZXRNZXRhdmFyaWFibGUoKTtcblxuICAgICAgcmVmZXJlbmNlVW5pZmllcyA9IG1ldGF2YXJpYWJsZS51bmlmeVJlZmVyZW5jZShyZWZlcmVuY2UsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICBpZiAocmVmZXJlbmNlVW5pZmllcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLnVuaWZpZWQgdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHdpdGggdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50J3MgcmVmZXJlbmNlLmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZWZlcmVuY2VVbmlmaWVzID0gdHJ1ZTsgIC8vL1xuICAgIH1cblxuICAgIHJldHVybiByZWZlcmVuY2VVbmlmaWVzO1xuICB9XG5cbiAgdW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IHN0YXRlbWVudFVuaWZpZXM7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIGNvbnN0cmFpbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQncyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IGdlbmVyYWxTdGF0ZW1lbnQgPSB0aGlzLnN0YXRlbWVudCwgIC8vL1xuICAgICAgICAgIHNwZWNpZmljU3RhdGVtZW50ID0gc3RyaXBCcmFja2V0c0Zyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTsgIC8vL1xuXG4gICAgc3RhdGVtZW50VW5pZmllcyA9IHVuaWZ5U3RhdGVtZW50KGdlbmVyYWxTdGF0ZW1lbnQsIHNwZWNpZmljU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQncyBzdGF0ZW1lbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXM7XG4gIH1cblxuICB1bmlmeUFzc3VtcHRpb24oYXNzdW1wdGlvbiwgY29udGV4dCkge1xuICAgIGxldCBhc3N1bXB0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IGFzc3VtcHRpb24uZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBjb25zdHJhaW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbiB3aXRoIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludC4uLmApO1xuXG4gICAgY29uc3QgY29uc3RyYWludENvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgYXNzdW1wdGlvbkNvbnRleHQgPSBhc3N1bXB0aW9uLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBjb25zdHJhaW50Q29udGV4dCxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBhc3N1bXB0aW9uQ29udGV4dDsgIC8vL1xuXG4gICAgam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCByZWZlcmVuY2UgPSBhc3N1bXB0aW9uLmdldFJlZmVyZW5jZSgpLFxuICAgICAgICAgICAgICByZWZlcm5lY2VVbmlmaWVzID0gdGhpcy51bmlmeVJlZmVyZW5jZShyZWZlcmVuY2UsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIGlmIChyZWZlcm5lY2VVbmlmaWVzKSB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50ID0gYXNzdW1wdGlvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICAgICAgICBzdGF0ZW1lbnRVbmlmaWVkID0gdGhpcy51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZWQpIHtcbiAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICAgIGFzc3VtcHRpb25VbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcblxuICAgIGlmIChhc3N1bXB0aW9uVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gd2l0aCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQuLi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvblVuaWZpZXM7XG4gIH1cblxuICB1bmlmeUFzc3VtcHRpb25zKGFzc3VtcHRpb25zLCBjb250ZXh0KSB7XG4gICAgY29uc3QgYXNzdW1wdGlvbnNVbmlmeSA9IGFzc3VtcHRpb25zLnNvbWUoKGFzc3VtcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IGFzc3VtcHRpb25VbmlmaWVzID0gdGhpcy51bmlmeUFzc3VtcHRpb24oYXNzdW1wdGlvbiwgY29udGV4dCk7XG5cbiAgICAgIGlmIChhc3N1bXB0aW9uVW5pZmllcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uc1VuaWZ5O1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHJldHVybiBzZXJpYWxpc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICBjb250ZXh0LFxuICAgICAgICBzdHJpbmcsXG4gICAgICAgIGJyZWFrUG9pbnRcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBqc29uO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkNvbnN0cmFpbnRcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBjb25zdHJhaW50O1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHVuc2VyaWFsaXNlKChqc29uLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICBjb25zdHJhaW50Tm9kZSA9IGluc3RhbnRpYXRlQ29uc3RyYWludChzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gY29uc3RyYWludE5vZGUsICAvLy9cbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KTtcblxuICAgICAgICBjb25zdHJhaW50ID0gbmV3IENvbnN0cmFpbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG4gICAgICB9LCBqc29uLCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBjb25zdHJhaW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGVwKHN0ZXAsIGNvbnRleHQpIHtcbiAgICBsZXQgY29uc3RyYWludDtcblxuICAgIGxldCBzdGF0ZW1lbnQ7XG5cbiAgICBzdGF0ZW1lbnQgPSBzdGVwLmdldFN0YXRlbWVudCgpO1xuXG4gICAgc3RhdGVtZW50ID0gc3RyaXBCcmFja2V0c0Zyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTsgLy8vXG5cbiAgICBjb25zdCByZWZlcmVuY2UgPSBzdGVwLmdldFJlZmVyZW5jZSgpO1xuXG4gICAgYWJsYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBjb25zdHJhaW50U3RyaW5nID0gY29uc3RyYWludFN0cmluZ0Zyb21SZWZlcmVuY2VBbmRTdGF0ZW1lbnQocmVmZXJlbmNlLCBzdGF0ZW1lbnQpLFxuICAgICAgICAgICAgICBzdHJpbmcgPSBjb25zdHJhaW50U3RyaW5nLCAgLy8vXG4gICAgICAgICAgICAgIGNvbnN0cmFpbnROb2RlID0gaW5zdGFudGlhdGVDb25zdHJhaW50KHN0cmluZywgY29udGV4dCk7XG5cbiAgICAgICAgY29uc3RyYWludCA9IGNvbnN0cmFpbnRGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29uc3RyYWludDtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHJlZmVyZW5jZUZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZWZlcmVuY2VOb2RlID0gY29uc3RyYWludE5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICByZWZlcm5lY2UgPSBjb250ZXh0LmZpbmRSZWZlcmVuY2VCeVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSk7XG5cbiAgcmV0dXJuIHJlZmVybmVjZTtcbn1cblxuZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb25zdHJhaW50Tm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuIl0sIm5hbWVzIjpbImRlZmluZSIsIkNvbnN0cmFpbnQiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwicmVmZXJlbmNlIiwic3RhdGVtZW50IiwiZ2V0UmVmZXJlbmNlIiwiZ2V0U3RhdGVtZW50IiwiZ2V0Q29uc3RyYWludE5vZGUiLCJnZXROb2RlIiwiY29uc3RyYWludE5vZGUiLCJnZXRNZXRhdmFyaWFibGUiLCJpc0VxdWFsVG8iLCJjb25zdHJhaW50IiwiY29uc3RyYWludE5vZGVNYXRjaGVzIiwibWF0Y2hDb25zdHJhaW50Tm9kZSIsImVxdWFsVG8iLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsImZpbmRWYWxpZENvbnN0cmFpbnQiLCJmaW5kQ29uc3RyYWludEJ5Q29uc3RyYWludE5vZGUiLCJ2YWxpZENvbnN0cmFpbnQiLCJ2YWxpZGF0ZSIsImNvbnN0cmFpbnRTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZhbGlkYXRlcyIsImRlYnVnIiwidGVtcG9yYXJ5Q29udGV4dCIsImdldENvbnRleHQiLCJhdHRlbXB0Iiwic3RhdGVtZW50VmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJyZWZlcmVuY2VWYWxpZGF0ZXMiLCJ2YWxpZGF0ZVJlZmVyZW5jZSIsInN0YXRlZCIsImlzU3RhdGVkIiwidmFsaWRhdGVzV2hlblN0YXRlZCIsInZhbGlkYXRlc1doZW5EZXJpdmVkIiwidmFsaWRhdGVXaGVuU3RhdGVkIiwidmFsaWRhdGVXaGVuRGVyaXZlZCIsImNvbW1pdCIsImFkZENvbnN0cmFpbnQiLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVEZWNsYXJlZCIsImlzRGVjbGFyZWQiLCJkZXNjZW5kIiwidW5pZnlSZWZlcmVuY2UiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInJlZmVyZW5jZVVuaWZpZXMiLCJyZWZlcmVuY2VTdHJpbmciLCJ1bmlmeVN0YXRlbWVudCIsInN0YXRlbWVudFVuaWZpZXMiLCJzdGF0ZW1lbnRTdHJpbmciLCJnZW5lcmFsU3RhdGVtZW50Iiwic3BlY2lmaWNTdGF0ZW1lbnQiLCJzdHJpcEJyYWNrZXRzRnJvbVN0YXRlbWVudCIsInVuaWZ5QXNzdW1wdGlvbiIsImFzc3VtcHRpb24iLCJhc3N1bXB0aW9uVW5pZmllcyIsImFzc3VtcHRpb25TdHJpbmciLCJjb25zdHJhaW50Q29udGV4dCIsImFzc3VtcHRpb25Db250ZXh0Iiwiam9pbiIsInJlY29uY2lsZSIsInJlZmVybmVjZVVuaWZpZXMiLCJzdGF0ZW1lbnRVbmlmaWVkIiwidW5pZnlBc3N1bXB0aW9ucyIsImFzc3VtcHRpb25zIiwiYXNzdW1wdGlvbnNVbmlmeSIsInNvbWUiLCJ0b0pTT04iLCJzZXJpYWxpc2UiLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsInVuc2VyaWFsaXNlIiwiaW5zdGFudGlhdGVDb25zdHJhaW50IiwiYnJlYWtQb2ludEZyb21KU09OIiwicmVmZXJlbmNlRnJvbUNvbnN0cmFpbnROb2RlIiwic3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlIiwiZnJvbVN0ZXAiLCJzdGVwIiwiYWJsYXRlIiwiY29uc3RyYWludFN0cmluZ0Zyb21SZWZlcmVuY2VBbmRTdGF0ZW1lbnQiLCJjb25zdHJhaW50RnJvbUNvbnN0cmFpbnROb2RlIiwicmVmZXJlbmNlTm9kZSIsImdldFJlZmVyZW5jZU5vZGUiLCJyZWZlcm5lY2UiLCJmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlIiwic3RhdGVtZW50Tm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFhQTs7O2VBQUE7OztnQ0FYd0I7MEJBRUQ7dUJBQ1E7MEJBQ1k7NkJBQ0w7NEJBQ3lCO3lCQUNsQjt3QkFDYTt5QkFDcUM7TUFFL0YsV0FBZUEsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxtQkFBbUJDLHVCQUFPO0lBQ3BELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxTQUFTLENBQUU7UUFDbkUsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLFNBQVMsR0FBR0E7UUFDakIsSUFBSSxDQUFDQyxTQUFTLEdBQUdBO0lBQ25CO0lBRUFDLGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQ0YsU0FBUztJQUN2QjtJQUVBRyxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUNGLFNBQVM7SUFDdkI7SUFFQUcsb0JBQW9CO1FB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