occam-verify-cli 0.0.933 → 0.0.934

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 (37) hide show
  1. package/lib/context/local.js +8 -7
  2. package/lib/declaration.js +2 -2
  3. package/lib/equivalence.js +16 -1
  4. package/lib/proofStep.js +43 -6
  5. package/lib/shim.js +14 -0
  6. package/lib/substitution/statementForMetavariable.js +45 -1
  7. package/lib/substitution/termForVariable.js +15 -1
  8. package/lib/unifier/metaLevel.js +5 -1
  9. package/lib/unifier/statementAgainstCombinator.js +3 -2
  10. package/lib/unifier/termAgainstConstructor.js +3 -2
  11. package/lib/verify/declaration.js +18 -18
  12. package/lib/verify/judgement.js +2 -2
  13. package/lib/verify/proofStep.js +3 -3
  14. package/lib/verify/statement/qualified.js +57 -9
  15. package/lib/verify/statement/unqualified.js +62 -51
  16. package/lib/verify/statement.js +22 -34
  17. package/lib/verify/subDerivation.js +8 -2
  18. package/lib/verify/term.js +3 -2
  19. package/package.json +1 -1
  20. package/src/context/local.js +8 -5
  21. package/src/declaration.js +2 -2
  22. package/src/equivalence.js +19 -0
  23. package/src/proofStep.js +57 -4
  24. package/src/shim.js +5 -0
  25. package/src/substitution/statementForMetavariable.js +31 -0
  26. package/src/substitution/termForVariable.js +16 -0
  27. package/src/unifier/metaLevel.js +5 -0
  28. package/src/unifier/statementAgainstCombinator.js +2 -1
  29. package/src/unifier/termAgainstConstructor.js +2 -1
  30. package/src/verify/declaration.js +20 -23
  31. package/src/verify/judgement.js +1 -1
  32. package/src/verify/proofStep.js +2 -2
  33. package/src/verify/statement/qualified.js +84 -8
  34. package/src/verify/statement/unqualified.js +85 -12
  35. package/src/verify/statement.js +34 -37
  36. package/src/verify/subDerivation.js +3 -1
  37. package/src/verify/term.js +2 -1
@@ -8,15 +8,17 @@ Object.defineProperty(exports, "default", {
8
8
  return verifyQualifiedStatement;
9
9
  }
10
10
  });
11
+ var _equality = /*#__PURE__*/ _interop_require_default(require("../equality"));
12
+ var _judgement = /*#__PURE__*/ _interop_require_default(require("../judgement"));
13
+ var _type = /*#__PURE__*/ _interop_require_default(require("../assertion/type"));
11
14
  var _metavariableAgainstStatement = /*#__PURE__*/ _interop_require_default(require("../../unify/metavariableAgainstStatement"));
12
15
  var _query = require("../../utilities/query");
13
- var _statement = require("../../verify/statement");
14
16
  function _interop_require_default(obj) {
15
17
  return obj && obj.__esModule ? obj : {
16
18
  default: obj
17
19
  };
18
20
  }
19
- var statementNodeQuery = (0, _query.nodeQuery)("/qualifiedStatement/statement!"), metavariableNodeQuery = (0, _query.nodeQuery)("/qualifiedStatement/reference/metavariable!");
21
+ var statementNodeQuery = (0, _query.nodeQuery)("/qualifiedStatement/statement!"), equalityNodeQuery = (0, _query.nodeQuery)("/statement/equality!"), judgementNodeQuery = (0, _query.nodeQuery)("/statement/judgement!"), metavariableNodeQuery = (0, _query.nodeQuery)("/qualifiedStatement/reference/metavariable!"), typeAssertionNodeQuery = (0, _query.nodeQuery)("/statement/typeAssertion!");
20
22
  function verifyQualifiedStatement(qualifiedStatementNode, substitutions, assignments, localContext) {
21
23
  var qualifiedStatementVerified;
22
24
  var qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
@@ -119,7 +121,7 @@ function verifyQualifiedStatementAAgainstReference(qualifiedStatementNode, subst
119
121
  var metavariableNode = metavariableNodeQuery(qualifiedStatementNode), metavariableString = localContext.nodeAsString(metavariableNode), metavariablePresent = localContext.isMetavariablePresentByMetavariableNode(metavariableNode), qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
120
122
  localContext.trace("Verifying the '".concat(qualifiedStatementString, "' qualified statement against the '").concat(metavariableString, "' reference..."), qualifiedStatementNode);
121
123
  if (metavariablePresent) {
122
- var statementNode = statementNodeQuery(qualifiedStatementNode), localContextA = null, localContextB = localContext, statementNodeB = statementNode, substitutionNode = null, metavariableNodeA = metavariableString, metavariableVerifiedAgainstStatement = (0, _metavariableAgainstStatement.default)(metavariableNodeA, statementNodeB, substitutionNode, substitutions, localContextA, localContextB, function() {
124
+ var statementNode = statementNodeQuery(qualifiedStatementNode), localContextA = null, localContextB = localContext, statementNodeB = statementNode, substitutionNode = null, metavariableNodeA = metavariableNode, metavariableVerifiedAgainstStatement = (0, _metavariableAgainstStatement.default)(metavariableNodeA, statementNodeB, substitutionNode, substitutions, localContextA, localContextB, function() {
123
125
  var verifiedAhead = true;
124
126
  return verifiedAhead;
125
127
  });
@@ -134,12 +136,13 @@ function verifyStatedStatement(statementNode, assignments, derived, localContext
134
136
  var statedStatementVerified;
135
137
  var statementString = localContext.nodeAsString(statementNode);
136
138
  localContext.trace("Verifying the '".concat(statementString, "' stated statement..."), statementNode);
137
- var verifyStatementFunctions = [
138
- _statement.verifyStatementAsEquality,
139
- _statement.verifyStatementAsTypeAssertion
139
+ var verifyStatedStatementFunctions = [
140
+ verifyStatedStatementAsEquality,
141
+ verifyStatedStatementAsJudgement,
142
+ verifyStatedStatementAsTypeAssertion
140
143
  ];
141
- verifyStatementFunctions.some(function(verifyStatementFunction) {
142
- var statedStatementVerified = verifyStatementFunction(statementNode, assignments, derived, localContext);
144
+ verifyStatedStatementFunctions.every(function(verifyStatedStatementFunction) {
145
+ var statedStatementVerified = verifyStatedStatementFunction(statementNode, assignments, derived, localContext);
143
146
  if (statedStatementVerified) {
144
147
  return true;
145
148
  }
@@ -150,5 +153,50 @@ function verifyStatedStatement(statementNode, assignments, derived, localContext
150
153
  }
151
154
  return statedStatementVerified;
152
155
  }
156
+ function verifyStatedStatementAsEquality(statementNode, assignments, derived, localContext) {
157
+ var statedStatementVerifiedAsEquality = true; ///
158
+ var equalityNode = equalityNodeQuery(statementNode);
159
+ if (equalityNode !== null) {
160
+ var statementString = localContext.nodeAsString(statementNode);
161
+ localContext.trace("Verifying the '".concat(statementString, "' stated statement as an equality..."), statementNode);
162
+ var equalityVerified = (0, _equality.default)(equalityNode, assignments, derived, localContext, function() {
163
+ var verifiedAhead = true;
164
+ return verifiedAhead;
165
+ });
166
+ statedStatementVerifiedAsEquality = equalityVerified; ///
167
+ if (statedStatementVerifiedAsEquality) {
168
+ localContext.debug("...verified the '".concat(statementString, "' stated statement as an equality."), statementNode);
169
+ }
170
+ }
171
+ return statedStatementVerifiedAsEquality;
172
+ }
173
+ function verifyStatedStatementAsJudgement(statementNode, assignments, derived, localContext) {
174
+ var statedStatementVerifiedAsJudgement = true;
175
+ var judgementNode = judgementNodeQuery(statementNode);
176
+ if (judgementNode !== null) {
177
+ var statementString = localContext.nodeAsString(statementNode);
178
+ localContext.trace("Verifying the '".concat(statementString, "' stated statement as a judgement..."), statementNode);
179
+ var judgementVerified = (0, _judgement.default)(judgementNode, assignments, derived, localContext);
180
+ statedStatementVerifiedAsJudgement = judgementVerified; ///
181
+ if (statedStatementVerifiedAsJudgement) {
182
+ localContext.debug("...verified the '".concat(statementString, "' stated statement as a judgement."), statementNode);
183
+ }
184
+ }
185
+ return statedStatementVerifiedAsJudgement;
186
+ }
187
+ function verifyStatedStatementAsTypeAssertion(statementNode, assignments, derived, localContext) {
188
+ var statementVerifiedAsTypeAssertion = true; ///
189
+ var typeAssertionNode = typeAssertionNodeQuery(statementNode);
190
+ if (typeAssertionNode !== null) {
191
+ var statementString = localContext.nodeAsString(statementNode);
192
+ localContext.trace("Verifying the '".concat(statementString, "' stated statement as a type assertion..."), statementNode);
193
+ var typeAssertionVerified = (0, _type.default)(typeAssertionNode, assignments, derived, localContext);
194
+ statementVerifiedAsTypeAssertion = typeAssertionVerified; ///
195
+ if (statementVerifiedAsTypeAssertion) {
196
+ localContext.debug("...verified the '".concat(statementString, "' stated statement as a type assertion."), statementNode);
197
+ }
198
+ }
199
+ return statementVerifiedAsTypeAssertion;
200
+ }
153
201
 
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50L3F1YWxpZmllZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHVuaWZ5TWV0YXZhcmlhYmxlQWdhaW5zdFN0YXRlbWVudCBmcm9tIFwiLi4vLi4vdW5pZnkvbWV0YXZhcmlhYmxlQWdhaW5zdFN0YXRlbWVudFwiO1xuXG5pbXBvcnQgeyBub2RlUXVlcnkgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyB2ZXJpZnlTdGF0ZW1lbnRBc0VxdWFsaXR5LCB2ZXJpZnlTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vdmVyaWZ5L3N0YXRlbWVudFwiO1xuXG5jb25zdCBzdGF0ZW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvcXVhbGlmaWVkU3RhdGVtZW50L3N0YXRlbWVudCFcIiksXG4gICAgICBtZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvcXVhbGlmaWVkU3RhdGVtZW50L3JlZmVyZW5jZS9tZXRhdmFyaWFibGUhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnQocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgYXNzaWdubWVudHMsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQ7XG5cbiAgY29uc3QgcXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudC4uLmAsIHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gIGNvbnN0IHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEZ1bmN0aW9ucyA9IFtcbiAgICB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdFJ1bGUsXG4gICAgdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RBeGlvbSxcbiAgICB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdExlbW1hLFxuICAgIHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0VGhlb3JlbSxcbiAgICB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdENvbmplY3R1cmUsXG4gICAgdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RSZWZlcmVuY2VcbiAgXTtcblxuICBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCA9IHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEZ1bmN0aW9ucy5zb21lKCh2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRGdW5jdGlvbikgPT4geyAgLy8vXG4gICAgY29uc3QgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQgPSB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRGdW5jdGlvbihxdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHQpO1xuXG4gICAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCkge1xuICAgIGNvbnN0IGRlcml2ZWQgPSBmYWxzZSxcbiAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIHN0YXRlZFN0YXRlbWVudFZlcmlmaWVkID0gdmVyaWZ5U3RhdGVkU3RhdGVtZW50KHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpO1xuXG4gICAgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQgPSBzdGF0ZWRTdGF0ZW1lbnRWZXJpZmllZDsgLy8vXG4gIH1cblxuICBpZiAocXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50LmAsIHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdFJ1bGUocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RSdWxlID0gZmFsc2U7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGVRdWVyeShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgcnVsZSA9IGxvY2FsQ29udGV4dC5maW5kUnVsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICBpZiAocnVsZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlUXVlcnkocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgYWdhaW5zdCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgcnVsZS4uLmAsIHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3QgcnVsZU1hdGNoZXNTdGF0ZW1lbnQgPSBydWxlLm1hdGNoU3RhdGVtZW50KHN0YXRlbWVudE5vZGUsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RSdWxlID0gcnVsZU1hdGNoZXNTdGF0ZW1lbnQ7ICAvLy9cblxuICAgIGlmIChxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RSdWxlKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIHJ1bGUuYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdFJ1bGU7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0QXhpb20ocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RBeGlvbSA9IGZhbHNlO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlUXVlcnkocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSksXG4gICAgICAgIGF4aW9tID0gbG9jYWxDb250ZXh0LmZpbmRBeGlvbUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICBpZiAoYXhpb20gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgcXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIGF4aW9tLi4uYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgICBjb25zdCBheGlvbU1hdGNoZXNTdGF0ZW1lbnQgPSBheGlvbS5tYXRjaFN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBsb2NhbENvbnRleHQpO1xuXG4gICAgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0QXhpb20gPSBheGlvbU1hdGNoZXNTdGF0ZW1lbnQ7IC8vL1xuXG4gICAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdEF4aW9tKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIGF4aW9tLmAsIHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RBeGlvbTtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RMZW1tYShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdExlbW1hID0gZmFsc2U7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGVRdWVyeShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgbGVtbWEgPSBsb2NhbENvbnRleHQuZmluZExlbW1hQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gIGlmIChsZW1tYSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlUXVlcnkocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgYWdhaW5zdCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbGVtbWEuLi5gLCBxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGxlbW1hTWF0Y2hlc1N0YXRlbWVudCA9IGxlbW1hLm1hdGNoU3RhdGVtZW50KHN0YXRlbWVudE5vZGUsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RMZW1tYSA9IGxlbW1hTWF0Y2hlc1N0YXRlbWVudDsgLy8vXG5cbiAgICBpZiAocXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0TGVtbWEpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgYWdhaW5zdCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbGVtbWEuYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdExlbW1hO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdFRoZW9yZW0ocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RUaGVvcmVtID0gZmFsc2U7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGVRdWVyeShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgdGhlb3JlbSA9IGxvY2FsQ29udGV4dC5maW5kVGhlb3JlbUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICBpZiAodGhlb3JlbSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlUXVlcnkocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgYWdhaW5zdCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgdGhlb3JlbS4uLmAsIHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3QgdGhlb3JlbU1hdGNoZXNTdGF0ZW1lbnQgPSB0aGVvcmVtLm1hdGNoU3RhdGVtZW50KHN0YXRlbWVudE5vZGUsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RUaGVvcmVtID0gdGhlb3JlbU1hdGNoZXNTdGF0ZW1lbnQ7IC8vL1xuXG4gICAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdFRoZW9yZW0pIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgYWdhaW5zdCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgdGhlb3JlbS5gLCBxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0VGhlb3JlbTtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RDb25qZWN0dXJlKHF1YWxpZmllZFN0YXRlbWVudE5vZGUsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0Q29uamVjdHVyZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlUXVlcnkocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSksXG4gICAgICAgIGNvbmplY3R1cmUgPSBsb2NhbENvbnRleHQuZmluZENvbmplY3R1cmVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgaWYgKGNvbmplY3R1cmUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgcXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIGNvbmplY3R1cmUuLi5gLCBxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGNvbmplY3R1cmVNYXRjaGVzU3RhdGVtZW50ID0gY29uamVjdHVyZS5tYXRjaFN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBsb2NhbENvbnRleHQpO1xuXG4gICAgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0Q29uamVjdHVyZSA9IGNvbmplY3R1cmVNYXRjaGVzU3RhdGVtZW50OyAvLy9cblxuICAgIGlmIChxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RDb25qZWN0dXJlKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIGNvbmplY3R1cmUuYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdENvbmplY3R1cmU7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0UmVmZXJlbmNlKHF1YWxpZmllZFN0YXRlbWVudE5vZGUsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0UmVmZXJlbmNlID0gZmFsc2U7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGVRdWVyeShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlUHJlc2VudCA9IGxvY2FsQ29udGV4dC5pc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgIHF1YWxpZmllZFN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgYWdhaW5zdCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgcmVmZXJlbmNlLi4uYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZVByZXNlbnQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIGxvY2FsQ29udGV4dEEgPSBudWxsLFxuICAgICAgICAgIGxvY2FsQ29udGV4dEIgPSBsb2NhbENvbnRleHQsIC8vL1xuICAgICAgICAgIHN0YXRlbWVudE5vZGVCID0gc3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uTm9kZSA9IG51bGwsXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZUEgPSBtZXRhdmFyaWFibGVTdHJpbmcsIC8vL1xuICAgICAgICAgIG1ldGF2YXJpYWJsZVZlcmlmaWVkQWdhaW5zdFN0YXRlbWVudCA9IHVuaWZ5TWV0YXZhcmlhYmxlQWdhaW5zdFN0YXRlbWVudChtZXRhdmFyaWFibGVOb2RlQSwgc3RhdGVtZW50Tm9kZUIsIHN1YnN0aXR1dGlvbk5vZGUsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dEEsIGxvY2FsQ29udGV4dEIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmlmaWVkQWhlYWQgPSB0cnVlO1xuXG4gICAgICAgICAgICByZXR1cm4gdmVyaWZpZWRBaGVhZDtcbiAgICAgICAgICB9KTtcblxuICAgIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdFJlZmVyZW5jZSA9IG1ldGF2YXJpYWJsZVZlcmlmaWVkQWdhaW5zdFN0YXRlbWVudDsgLy8vXG4gIH1cblxuICBpZiAocXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0UmVmZXJlbmNlKSB7XG4gICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudCBhZ2FpbnN0IHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyByZWZlcmVuY2UuYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG4gIH1cblxuICByZXR1cm4gcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0UmVmZXJlbmNlO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlTdGF0ZWRTdGF0ZW1lbnQoc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgc3RhdGVkU3RhdGVtZW50VmVyaWZpZWQ7XG5cbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhzdGF0ZW1lbnROb2RlKTtcblxuICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVkIHN0YXRlbWVudC4uLmAsIHN0YXRlbWVudE5vZGUpO1xuXG4gIGNvbnN0IHZlcmlmeVN0YXRlbWVudEZ1bmN0aW9ucyA9IFtcbiAgICB2ZXJpZnlTdGF0ZW1lbnRBc0VxdWFsaXR5LFxuICAgIHZlcmlmeVN0YXRlbWVudEFzVHlwZUFzc2VydGlvblxuICBdO1xuXG4gIHZlcmlmeVN0YXRlbWVudEZ1bmN0aW9ucy5zb21lKCh2ZXJpZnlTdGF0ZW1lbnRGdW5jdGlvbikgPT4ge1xuICAgIGNvbnN0IHN0YXRlZFN0YXRlbWVudFZlcmlmaWVkID0gdmVyaWZ5U3RhdGVtZW50RnVuY3Rpb24oc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBpZiAoc3RhdGVkU3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgc3RhdGVkU3RhdGVtZW50VmVyaWZpZWQgPSB0cnVlOyAvLy9cblxuICBpZiAoc3RhdGVkU3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZWQgc3RhdGVtZW50LmAsIHN0YXRlbWVudE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlZFN0YXRlbWVudFZlcmlmaWVkO1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeVF1YWxpZmllZFN0YXRlbWVudCIsInN0YXRlbWVudE5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsIm1ldGF2YXJpYWJsZU5vZGVRdWVyeSIsInF1YWxpZmllZFN0YXRlbWVudE5vZGUiLCJzdWJzdGl0dXRpb25zIiwiYXNzaWdubWVudHMiLCJsb2NhbENvbnRleHQiLCJxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCIsInF1YWxpZmllZFN0YXRlbWVudFN0cmluZyIsIm5vZGVBc1N0cmluZyIsInRyYWNlIiwidmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50RnVuY3Rpb25zIiwidmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RSdWxlIiwidmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RBeGlvbSIsInZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0TGVtbWEiLCJ2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdFRoZW9yZW0iLCJ2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdENvbmplY3R1cmUiLCJ2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdFJlZmVyZW5jZSIsInNvbWUiLCJ2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRGdW5jdGlvbiIsImRlcml2ZWQiLCJzdGF0ZW1lbnROb2RlIiwic3RhdGVkU3RhdGVtZW50VmVyaWZpZWQiLCJ2ZXJpZnlTdGF0ZWRTdGF0ZW1lbnQiLCJkZWJ1ZyIsInF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdFJ1bGUiLCJtZXRhdmFyaWFibGVOb2RlIiwicnVsZSIsImZpbmRSdWxlQnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwicnVsZU1hdGNoZXNTdGF0ZW1lbnQiLCJtYXRjaFN0YXRlbWVudCIsInF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdEF4aW9tIiwiYXhpb20iLCJmaW5kQXhpb21CeU1ldGF2YXJpYWJsZU5vZGUiLCJheGlvbU1hdGNoZXNTdGF0ZW1lbnQiLCJxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RMZW1tYSIsImxlbW1hIiwiZmluZExlbW1hQnlNZXRhdmFyaWFibGVOb2RlIiwibGVtbWFNYXRjaGVzU3RhdGVtZW50IiwicXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0VGhlb3JlbSIsInRoZW9yZW0iLCJmaW5kVGhlb3JlbUJ5TWV0YXZhcmlhYmxlTm9kZSIsInRoZW9yZW1NYXRjaGVzU3RhdGVtZW50IiwicXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0Q29uamVjdHVyZSIsImNvbmplY3R1cmUiLCJmaW5kQ29uamVjdHVyZUJ5TWV0YXZhcmlhYmxlTm9kZSIsImNvbmplY3R1cmVNYXRjaGVzU3RhdGVtZW50IiwicXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0UmVmZXJlbmNlIiwibWV0YXZhcmlhYmxlUHJlc2VudCIsImlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZSIsImxvY2FsQ29udGV4dEEiLCJsb2NhbENvbnRleHRCIiwic3RhdGVtZW50Tm9kZUIiLCJzdWJzdGl0dXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlTm9kZUEiLCJtZXRhdmFyaWFibGVWZXJpZmllZEFnYWluc3RTdGF0ZW1lbnQiLCJ1bmlmeU1ldGF2YXJpYWJsZUFnYWluc3RTdGF0ZW1lbnQiLCJ2ZXJpZmllZEFoZWFkIiwic3RhdGVtZW50U3RyaW5nIiwidmVyaWZ5U3RhdGVtZW50RnVuY3Rpb25zIiwidmVyaWZ5U3RhdGVtZW50QXNFcXVhbGl0eSIsInZlcmlmeVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbiIsInZlcmlmeVN0YXRlbWVudEZ1bmN0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFVQTs7O2VBQXdCQTs7O21GQVJzQjtxQkFFcEI7eUJBQ2dEOzs7Ozs7QUFFMUUsSUFBTUMscUJBQXFCQyxJQUFBQSxnQkFBUyxFQUFDLG1DQUMvQkMsd0JBQXdCRCxJQUFBQSxnQkFBUyxFQUFDO0FBRXpCLFNBQVNGLHlCQUF5Qkksc0JBQXNCLEVBQUVDLGFBQWEsRUFBRUMsV0FBVyxFQUFFQyxZQUFZO0lBQy9HLElBQUlDO0lBRUosSUFBTUMsMkJBQTJCRixhQUFhRyxZQUFZLENBQUNOO0lBRTNERyxhQUFhSSxLQUFLLENBQUMsQUFBQyxrQkFBMEMsT0FBekJGLDBCQUF5Qiw2QkFBMkJMO0lBRXpGLElBQU1RLG9DQUFv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
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50L3F1YWxpZmllZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHZlcmlmeUVxdWFsaXR5IGZyb20gXCIuLi9lcXVhbGl0eVwiO1xuaW1wb3J0IHZlcmlmeUp1ZGdlbWVudCBmcm9tIFwiLi4vanVkZ2VtZW50XCI7XG5pbXBvcnQgdmVyaWZ5VHlwZUFzc2VydGlvbiBmcm9tIFwiLi4vYXNzZXJ0aW9uL3R5cGVcIjtcbmltcG9ydCB1bmlmeU1ldGF2YXJpYWJsZUFnYWluc3RTdGF0ZW1lbnQgZnJvbSBcIi4uLy4uL3VuaWZ5L21ldGF2YXJpYWJsZUFnYWluc3RTdGF0ZW1lbnRcIjtcblxuaW1wb3J0IHsgbm9kZVF1ZXJ5IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9xdWVyeVwiO1xuXG5jb25zdCBzdGF0ZW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvcXVhbGlmaWVkU3RhdGVtZW50L3N0YXRlbWVudCFcIiksXG4gICAgICBlcXVhbGl0eU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvZXF1YWxpdHkhXCIpLFxuICAgICAganVkZ2VtZW50Tm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC9qdWRnZW1lbnQhXCIpLFxuICAgICAgbWV0YXZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3F1YWxpZmllZFN0YXRlbWVudC9yZWZlcmVuY2UvbWV0YXZhcmlhYmxlIVwiKSxcbiAgICAgIHR5cGVBc3NlcnRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50L3R5cGVBc3NlcnRpb24hXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnQocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgYXNzaWdubWVudHMsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQ7XG5cbiAgY29uc3QgcXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudC4uLmAsIHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gIGNvbnN0IHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEZ1bmN0aW9ucyA9IFtcbiAgICB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdFJ1bGUsXG4gICAgdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RBeGlvbSxcbiAgICB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdExlbW1hLFxuICAgIHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0VGhlb3JlbSxcbiAgICB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdENvbmplY3R1cmUsXG4gICAgdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RSZWZlcmVuY2VcbiAgXTtcblxuICBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCA9IHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEZ1bmN0aW9ucy5zb21lKCh2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRGdW5jdGlvbikgPT4geyAgLy8vXG4gICAgY29uc3QgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQgPSB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRGdW5jdGlvbihxdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHQpO1xuXG4gICAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCkge1xuICAgIGNvbnN0IGRlcml2ZWQgPSBmYWxzZSxcbiAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIHN0YXRlZFN0YXRlbWVudFZlcmlmaWVkID0gdmVyaWZ5U3RhdGVkU3RhdGVtZW50KHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpO1xuXG4gICAgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQgPSBzdGF0ZWRTdGF0ZW1lbnRWZXJpZmllZDsgLy8vXG4gIH1cblxuICBpZiAocXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50LmAsIHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdFJ1bGUocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RSdWxlID0gZmFsc2U7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGVRdWVyeShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgcnVsZSA9IGxvY2FsQ29udGV4dC5maW5kUnVsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICBpZiAocnVsZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlUXVlcnkocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgYWdhaW5zdCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgcnVsZS4uLmAsIHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3QgcnVsZU1hdGNoZXNTdGF0ZW1lbnQgPSBydWxlLm1hdGNoU3RhdGVtZW50KHN0YXRlbWVudE5vZGUsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RSdWxlID0gcnVsZU1hdGNoZXNTdGF0ZW1lbnQ7ICAvLy9cblxuICAgIGlmIChxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RSdWxlKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIHJ1bGUuYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdFJ1bGU7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0QXhpb20ocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RBeGlvbSA9IGZhbHNlO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlUXVlcnkocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSksXG4gICAgICAgIGF4aW9tID0gbG9jYWxDb250ZXh0LmZpbmRBeGlvbUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICBpZiAoYXhpb20gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgcXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIGF4aW9tLi4uYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgICBjb25zdCBheGlvbU1hdGNoZXNTdGF0ZW1lbnQgPSBheGlvbS5tYXRjaFN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBsb2NhbENvbnRleHQpO1xuXG4gICAgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0QXhpb20gPSBheGlvbU1hdGNoZXNTdGF0ZW1lbnQ7IC8vL1xuXG4gICAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdEF4aW9tKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIGF4aW9tLmAsIHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RBeGlvbTtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RMZW1tYShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdExlbW1hID0gZmFsc2U7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGVRdWVyeShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgbGVtbWEgPSBsb2NhbENvbnRleHQuZmluZExlbW1hQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gIGlmIChsZW1tYSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlUXVlcnkocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgYWdhaW5zdCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbGVtbWEuLi5gLCBxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGxlbW1hTWF0Y2hlc1N0YXRlbWVudCA9IGxlbW1hLm1hdGNoU3RhdGVtZW50KHN0YXRlbWVudE5vZGUsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RMZW1tYSA9IGxlbW1hTWF0Y2hlc1N0YXRlbWVudDsgLy8vXG5cbiAgICBpZiAocXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0TGVtbWEpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgYWdhaW5zdCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbGVtbWEuYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdExlbW1hO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdFRoZW9yZW0ocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RUaGVvcmVtID0gZmFsc2U7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGVRdWVyeShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgdGhlb3JlbSA9IGxvY2FsQ29udGV4dC5maW5kVGhlb3JlbUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICBpZiAodGhlb3JlbSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlUXVlcnkocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgYWdhaW5zdCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgdGhlb3JlbS4uLmAsIHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3QgdGhlb3JlbU1hdGNoZXNTdGF0ZW1lbnQgPSB0aGVvcmVtLm1hdGNoU3RhdGVtZW50KHN0YXRlbWVudE5vZGUsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RUaGVvcmVtID0gdGhlb3JlbU1hdGNoZXNTdGF0ZW1lbnQ7IC8vL1xuXG4gICAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdFRoZW9yZW0pIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgYWdhaW5zdCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgdGhlb3JlbS5gLCBxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0VGhlb3JlbTtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RDb25qZWN0dXJlKHF1YWxpZmllZFN0YXRlbWVudE5vZGUsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0Q29uamVjdHVyZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlUXVlcnkocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSksXG4gICAgICAgIGNvbmplY3R1cmUgPSBsb2NhbENvbnRleHQuZmluZENvbmplY3R1cmVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgaWYgKGNvbmplY3R1cmUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgcXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIGNvbmplY3R1cmUuLi5gLCBxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGNvbmplY3R1cmVNYXRjaGVzU3RhdGVtZW50ID0gY29uamVjdHVyZS5tYXRjaFN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBsb2NhbENvbnRleHQpO1xuXG4gICAgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0Q29uamVjdHVyZSA9IGNvbmplY3R1cmVNYXRjaGVzU3RhdGVtZW50OyAvLy9cblxuICAgIGlmIChxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RDb25qZWN0dXJlKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIGNvbmplY3R1cmUuYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdENvbmplY3R1cmU7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0UmVmZXJlbmNlKHF1YWxpZmllZFN0YXRlbWVudE5vZGUsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0UmVmZXJlbmNlID0gZmFsc2U7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGVRdWVyeShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlUHJlc2VudCA9IGxvY2FsQ29udGV4dC5pc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgIHF1YWxpZmllZFN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgYWdhaW5zdCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgcmVmZXJlbmNlLi4uYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZVByZXNlbnQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIGxvY2FsQ29udGV4dEEgPSBudWxsLFxuICAgICAgICAgIGxvY2FsQ29udGV4dEIgPSBsb2NhbENvbnRleHQsIC8vL1xuICAgICAgICAgIHN0YXRlbWVudE5vZGVCID0gc3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uTm9kZSA9IG51bGwsXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZUEgPSBtZXRhdmFyaWFibGVOb2RlLCAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGVWZXJpZmllZEFnYWluc3RTdGF0ZW1lbnQgPSB1bmlmeU1ldGF2YXJpYWJsZUFnYWluc3RTdGF0ZW1lbnQobWV0YXZhcmlhYmxlTm9kZUEsIHN0YXRlbWVudE5vZGVCLCBzdWJzdGl0dXRpb25Ob2RlLCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHRBLCBsb2NhbENvbnRleHRCLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJpZmllZEFoZWFkID0gdHJ1ZTtcblxuICAgICAgICAgICAgcmV0dXJuIHZlcmlmaWVkQWhlYWQ7XG4gICAgICAgICAgfSk7XG5cbiAgICBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RSZWZlcmVuY2UgPSBtZXRhdmFyaWFibGVWZXJpZmllZEFnYWluc3RTdGF0ZW1lbnQ7IC8vL1xuICB9XG5cbiAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdFJlZmVyZW5jZSkge1xuICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgYWdhaW5zdCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgcmVmZXJlbmNlLmAsIHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdFJlZmVyZW5jZTtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5U3RhdGVkU3RhdGVtZW50KHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHN0YXRlZFN0YXRlbWVudFZlcmlmaWVkO1xuXG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcoc3RhdGVtZW50Tm9kZSk7XG5cbiAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlZCBzdGF0ZW1lbnQuLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICBjb25zdCB2ZXJpZnlTdGF0ZWRTdGF0ZW1lbnRGdW5jdGlvbnMgPSBbXG4gICAgdmVyaWZ5U3RhdGVkU3RhdGVtZW50QXNFcXVhbGl0eSxcbiAgICB2ZXJpZnlTdGF0ZWRTdGF0ZW1lbnRBc0p1ZGdlbWVudCxcbiAgICB2ZXJpZnlTdGF0ZWRTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb25cbiAgXTtcblxuICB2ZXJpZnlTdGF0ZWRTdGF0ZW1lbnRGdW5jdGlvbnMuZXZlcnkoKHZlcmlmeVN0YXRlZFN0YXRlbWVudEZ1bmN0aW9uKSA9PiB7IC8vL1xuICAgIGNvbnN0IHN0YXRlZFN0YXRlbWVudFZlcmlmaWVkID0gdmVyaWZ5U3RhdGVkU3RhdGVtZW50RnVuY3Rpb24oc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBpZiAoc3RhdGVkU3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgc3RhdGVkU3RhdGVtZW50VmVyaWZpZWQgPSB0cnVlOyAvLy9cblxuICBpZiAoc3RhdGVkU3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZWQgc3RhdGVtZW50LmAsIHN0YXRlbWVudE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlZFN0YXRlbWVudFZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlTdGF0ZWRTdGF0ZW1lbnRBc0VxdWFsaXR5KHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHN0YXRlZFN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSA9IHRydWU7IC8vL1xuXG4gIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IGVxdWFsaXR5Tm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpO1xuXG4gIGlmIChlcXVhbGl0eU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlZCBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGVxdWFsaXR5VmVyaWZpZWQgPSB2ZXJpZnlFcXVhbGl0eShlcXVhbGl0eU5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQsICgpID0+IHtcbiAgICAgIGNvbnN0IHZlcmlmaWVkQWhlYWQgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gdmVyaWZpZWRBaGVhZDtcbiAgICB9KTtcblxuICAgIHN0YXRlZFN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSA9IGVxdWFsaXR5VmVyaWZpZWQ7IC8vL1xuXG4gICAgaWYgKHN0YXRlZFN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVkIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS5gLCBzdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVkU3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5O1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlTdGF0ZWRTdGF0ZW1lbnRBc0p1ZGdlbWVudChzdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBzdGF0ZWRTdGF0ZW1lbnRWZXJpZmllZEFzSnVkZ2VtZW50ID0gdHJ1ZTtcblxuICBjb25zdCBqdWRnZW1lbnROb2RlID0ganVkZ2VtZW50Tm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpO1xuXG4gIGlmIChqdWRnZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhzdGF0ZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZWQgc3RhdGVtZW50IGFzIGEganVkZ2VtZW50Li4uYCwgc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBjb25zdCBqdWRnZW1lbnRWZXJpZmllZCA9IHZlcmlmeUp1ZGdlbWVudChqdWRnZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgIHN0YXRlZFN0YXRlbWVudFZlcmlmaWVkQXNKdWRnZW1lbnQgPSBqdWRnZW1lbnRWZXJpZmllZDsgIC8vL1xuXG4gICAgaWYgKHN0YXRlZFN0YXRlbWVudFZlcmlmaWVkQXNKdWRnZW1lbnQpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlZCBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuYCwgc3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlZFN0YXRlbWVudFZlcmlmaWVkQXNKdWRnZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVN0YXRlZFN0YXRlbWVudEFzVHlwZUFzc2VydGlvbihzdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWZXJpZmllZEFzVHlwZUFzc2VydGlvbiA9IHRydWU7ICAvLy9cblxuICBjb25zdCB0eXBlQXNzZXJ0aW9uTm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlUXVlcnkoc3RhdGVtZW50Tm9kZSk7XG5cbiAgaWYgKHR5cGVBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhzdGF0ZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZWQgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IHR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHZlcmlmeVR5cGVBc3NlcnRpb24odHlwZUFzc2VydGlvbk5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpO1xuXG4gICAgc3RhdGVtZW50VmVyaWZpZWRBc1R5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQ7IC8vL1xuXG4gICAgaWYgKHN0YXRlbWVudFZlcmlmaWVkQXNUeXBlQXNzZXJ0aW9uKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZWQgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uYCwgc3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZlcmlmaWVkQXNUeXBlQXNzZXJ0aW9uO1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeVF1YWxpZmllZFN0YXRlbWVudCIsInN0YXRlbWVudE5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsImVxdWFsaXR5Tm9kZVF1ZXJ5IiwianVkZ2VtZW50Tm9kZVF1ZXJ5IiwibWV0YXZhcmlhYmxlTm9kZVF1ZXJ5IiwidHlwZUFzc2VydGlvbk5vZGVRdWVyeSIsInF1YWxpZmllZFN0YXRlbWVudE5vZGUiLCJzdWJzdGl0dXRpb25zIiwiYXNzaWdubWVudHMiLCJsb2NhbENvbnRleHQiLCJxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCIsInF1YWxpZmllZFN0YXRlbWVudFN0cmluZyIsIm5vZGVBc1N0cmluZyIsInRyYWNlIiwidmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50RnVuY3Rpb25zIiwidmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RSdWxlIiwidmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RBeGlvbSIsInZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0TGVtbWEiLCJ2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdFRoZW9yZW0iLCJ2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdENvbmplY3R1cmUiLCJ2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdFJlZmVyZW5jZSIsInNvbWUiLCJ2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRGdW5jdGlvbiIsImRlcml2ZWQiLCJzdGF0ZW1lbnROb2RlIiwic3RhdGVkU3RhdGVtZW50VmVyaWZpZWQiLCJ2ZXJpZnlTdGF0ZWRTdGF0ZW1lbnQiLCJkZWJ1ZyIsInF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdFJ1bGUiLCJtZXRhdmFyaWFibGVOb2RlIiwicnVsZSIsImZpbmRSdWxlQnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwicnVsZU1hdGNoZXNTdGF0ZW1lbnQiLCJtYXRjaFN0YXRlbWVudCIsInF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdEF4aW9tIiwiYXhpb20iLCJmaW5kQXhpb21CeU1ldGF2YXJpYWJsZU5vZGUiLCJheGlvbU1hdGNoZXNTdGF0ZW1lbnQiLCJxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RMZW1tYSIsImxlbW1hIiwiZmluZExlbW1hQnlNZXRhdmFyaWFibGVOb2RlIiwibGVtbWFNYXRjaGVzU3RhdGVtZW50IiwicXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0VGhlb3JlbSIsInRoZW9yZW0iLCJmaW5kVGhlb3JlbUJ5TWV0YXZhcmlhYmxlTm9kZSIsInRoZW9yZW1NYXRjaGVzU3RhdGVtZW50IiwicXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0Q29uamVjdHVyZSIsImNvbmplY3R1cmUiLCJmaW5kQ29uamVjdHVyZUJ5TWV0YXZhcmlhYmxlTm9kZSIsImNvbmplY3R1cmVNYXRjaGVzU3RhdGVtZW50IiwicXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0UmVmZXJlbmNlIiwibWV0YXZhcmlhYmxlUHJlc2VudCIsImlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZSIsImxvY2FsQ29udGV4dEEiLCJsb2NhbENvbnRleHRCIiwic3RhdGVtZW50Tm9kZUIiLCJzdWJzdGl0dXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlTm9kZUEiLCJtZXRhdmFyaWFibGVWZXJpZmllZEFnYWluc3RTdGF0ZW1lbnQiLCJ1bmlmeU1ldGF2YXJpYWJsZUFnYWluc3RTdGF0ZW1lbnQiLCJ2ZXJpZmllZEFoZWFkIiwic3RhdGVtZW50U3RyaW5nIiwidmVyaWZ5U3RhdGVkU3RhdGVtZW50RnVuY3Rpb25zIiwidmVyaWZ5U3RhdGVkU3RhdGVtZW50QXNFcXVhbGl0eSIsInZlcmlmeVN0YXRlZFN0YXRlbWVudEFzSnVkZ2VtZW50IiwidmVyaWZ5U3RhdGVkU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwiZXZlcnkiLCJ2ZXJpZnlTdGF0ZWRTdGF0ZW1lbnRGdW5jdGlvbiIsInN0YXRlZFN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSIsImVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5VmVyaWZpZWQiLCJ2ZXJpZnlFcXVhbGl0eSIsInN0YXRlZFN0YXRlbWVudFZlcmlmaWVkQXNKdWRnZW1lbnQiLCJqdWRnZW1lbnROb2RlIiwianVkZ2VtZW50VmVyaWZpZWQiLCJ2ZXJpZnlKdWRnZW1lbnQiLCJzdGF0ZW1lbnRWZXJpZmllZEFzVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUFzc2VydGlvblZlcmlmaWVkIiwidmVyaWZ5VHlwZUFzc2VydGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBZUE7OztlQUF3QkE7OzsrREFiRztnRUFDQzsyREFDSTttRkFDYztxQkFFcEI7Ozs7OztBQUUxQixJQUFNQyxxQkFBcUJDLElBQUFBLGdCQUFTLEVBQUMsbUNBQy9CQyxvQkFBb0JELElBQUFBLGdCQUFTLEVBQUMseUJBQzlCRSxxQkFBcUJGLElBQUFBLGdCQUFTLEVBQUMsMEJBQy9CRyx3QkFBd0JILElBQUFBLGdCQUFTLEVBQUMsZ0RBQ2xDSSx5QkFBeUJKLElBQUFBLGdCQUFTLEVBQUM7QUFFMUIsU0FBU0YseUJBQXlCTyxzQkFBc0IsRUFBRUMsYUFBYSxFQUFFQyxXQUFXLEVBQUVDLFlBQVk7SUFDL0csSUFBSUM7SUFFSixJQUFNQywyQkFBMkJGLGFBQWFHLFlBQVksQ0FBQ047SUFFM0RHLGFBQWFJLEtBQUssQ0FBQyxBQUFDLGtCQUEwQyxPQUF6QkYsMEJBQXlCLDZCQUEyQkw7SUFFekYsSUFBTVEsb0NBQW9DO1FBQ3hDQztRQUNBQztRQUNBQztRQUNBQztRQUNBQztRQUNBQztLQUNEO0lBRURWLDZCQUE2Qkksa0NBQWtDTyxJQUFJLENBQUMsU0FBQ0M7UUFDbkUsSUFBTVosNkJBQTZCWSxpQ0FBaUNoQix3QkFBd0JDLGVBQWVFO1FBRTNHLElBQUlDLDRCQUE0QjtZQUM5QixPQUFPO1FBQ1Q7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
@@ -8,50 +8,17 @@ Object.defineProperty(exports, "default", {
8
8
  return verifyUnqualifiedStatement;
9
9
  }
10
10
  });
11
- var _statement = /*#__PURE__*/ _interop_require_wildcard(require("../../verify/statement"));
11
+ var _equality = /*#__PURE__*/ _interop_require_default(require("../../verify/equality"));
12
+ var _judgement = /*#__PURE__*/ _interop_require_default(require("../../verify/judgement"));
13
+ var _statement = /*#__PURE__*/ _interop_require_default(require("../../verify/statement"));
14
+ var _type = /*#__PURE__*/ _interop_require_default(require("../assertion/type"));
12
15
  var _query = require("../../utilities/query");
13
- function _getRequireWildcardCache(nodeInterop) {
14
- if (typeof WeakMap !== "function") return null;
15
- var cacheBabelInterop = new WeakMap();
16
- var cacheNodeInterop = new WeakMap();
17
- return (_getRequireWildcardCache = function(nodeInterop) {
18
- return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
19
- })(nodeInterop);
20
- }
21
- function _interop_require_wildcard(obj, nodeInterop) {
22
- if (!nodeInterop && obj && obj.__esModule) {
23
- return obj;
24
- }
25
- if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
26
- return {
27
- default: obj
28
- };
29
- }
30
- var cache = _getRequireWildcardCache(nodeInterop);
31
- if (cache && cache.has(obj)) {
32
- return cache.get(obj);
33
- }
34
- var newObj = {
35
- __proto__: null
16
+ function _interop_require_default(obj) {
17
+ return obj && obj.__esModule ? obj : {
18
+ default: obj
36
19
  };
37
- var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
38
- for(var key in obj){
39
- if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
40
- var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
41
- if (desc && (desc.get || desc.set)) {
42
- Object.defineProperty(newObj, key, desc);
43
- } else {
44
- newObj[key] = obj[key];
45
- }
46
- }
47
- }
48
- newObj.default = obj;
49
- if (cache) {
50
- cache.set(obj, newObj);
51
- }
52
- return newObj;
53
20
  }
54
- var statementNodeQuery = (0, _query.nodeQuery)("/unqualifiedStatement/statement!");
21
+ var statementNodeQuery = (0, _query.nodeQuery)("/unqualifiedStatement/statement!"), equalityNodeQuery = (0, _query.nodeQuery)("/statement/equality!"), judgementNodeQuery = (0, _query.nodeQuery)("/statement/judgement!"), typeAssertionNodeQuery = (0, _query.nodeQuery)("/statement/typeAssertion!");
55
22
  function verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext) {
56
23
  var unqualifiedStatementVerified;
57
24
  var unqualifiedStatementString = localContext.nodeAsString(unqualifiedStatementNode);
@@ -76,8 +43,8 @@ function verifyDerivedUnqualifiedStatement(unqualifiedStatementNode, assignments
76
43
  if (derived) {
77
44
  var statementNode = statementNodeQuery(unqualifiedStatementNode), unqualifiedStatementString = localContext.nodeAsString(unqualifiedStatementNode);
78
45
  localContext.trace("Verifying the '".concat(unqualifiedStatementString, "' derived unqualified statement..."), unqualifiedStatementNode);
79
- var matchesStatementNode = localContext.matchStatementNode(statementNode);
80
- if (matchesStatementNode) {
46
+ var statementUnified = localContext.unifyStatement(statementNode);
47
+ if (statementUnified) {
81
48
  derivedUnqualifiedStatementVerified = true;
82
49
  } else {
83
50
  var statementNode1 = statementNodeQuery(unqualifiedStatementNode), derivedStatementVerified = verifyDerivedStatement(statementNode1, assignments, derived, localContext);
@@ -106,22 +73,66 @@ function verifyDerivedStatement(statementNode, assignments, derived, localContex
106
73
  var derivedStatementVerified;
107
74
  var statementString = localContext.nodeAsString(statementNode);
108
75
  localContext.trace("Verifying the '".concat(statementString, "' derived statement..."), statementNode);
109
- var verifyStatementFunctions = [
110
- _statement.verifyStatementAsEquality,
111
- _statement.verifyStatementAsJudgement,
112
- _statement.verifyStatementAsTypeAssertion
76
+ var verifyDerivedStatementFunctions = [
77
+ verifyDerivedStatementAsEquality,
78
+ verifyDerivedStatementAsJudgement,
79
+ verifyDerivedStatementAsTypeAssertion
113
80
  ];
114
- verifyStatementFunctions.some(function(verifyStatementFunction) {
115
- var derivedStatementVerified = verifyStatementFunction(statementNode, assignments, derived, localContext);
81
+ derivedStatementVerified = verifyDerivedStatementFunctions.every(function(verifyDerivedStatementFunction) {
82
+ var derivedStatementVerified = verifyDerivedStatementFunction(statementNode, assignments, derived, localContext);
116
83
  if (derivedStatementVerified) {
117
84
  return true;
118
85
  }
119
86
  });
120
- derivedStatementVerified = true; ///
121
87
  if (derivedStatementVerified) {
122
88
  localContext.debug("...verified the '".concat(statementString, "' derived statement."), statementNode);
123
89
  }
124
90
  return derivedStatementVerified;
125
91
  }
92
+ function verifyDerivedStatementAsEquality(statementNode, assignments, derived, localContext) {
93
+ var derivedStatementVerifiedAsEquality = true; ///
94
+ var equalityNode = equalityNodeQuery(statementNode);
95
+ if (equalityNode !== null) {
96
+ var statementString = localContext.nodeAsString(statementNode);
97
+ localContext.trace("Verifying the '".concat(statementString, "' derived statement as an equality..."), statementNode);
98
+ var equalityVerified = (0, _equality.default)(equalityNode, assignments, derived, localContext, function() {
99
+ var verifiedAhead = true;
100
+ return verifiedAhead;
101
+ });
102
+ derivedStatementVerifiedAsEquality = equalityVerified; ///
103
+ if (derivedStatementVerifiedAsEquality) {
104
+ localContext.debug("...verified the '".concat(statementString, "' derived statement as an equality."), statementNode);
105
+ }
106
+ }
107
+ return derivedStatementVerifiedAsEquality;
108
+ }
109
+ function verifyDerivedStatementAsJudgement(statementNode, assignments, derived, localContext) {
110
+ var derivedStatementVerifiedAsJudgement = true;
111
+ var judgementNode = judgementNodeQuery(statementNode);
112
+ if (judgementNode !== null) {
113
+ var statementString = localContext.nodeAsString(statementNode);
114
+ localContext.trace("Verifying the '".concat(statementString, "' derived statement as a judgement..."), statementNode);
115
+ var judgementVerified = (0, _judgement.default)(judgementNode, assignments, derived, localContext);
116
+ derivedStatementVerifiedAsJudgement = judgementVerified; ///
117
+ if (derivedStatementVerifiedAsJudgement) {
118
+ localContext.debug("...verified the '".concat(statementString, "' derived statement as a judgement."), statementNode);
119
+ }
120
+ }
121
+ return derivedStatementVerifiedAsJudgement;
122
+ }
123
+ function verifyDerivedStatementAsTypeAssertion(statementNode, assignments, derived, localContext) {
124
+ var statementVerifiedAsTypeAssertion = true; ///
125
+ var typeAssertionNode = typeAssertionNodeQuery(statementNode);
126
+ if (typeAssertionNode !== null) {
127
+ var statementString = localContext.nodeAsString(statementNode);
128
+ localContext.trace("Verifying the '".concat(statementString, "' derived statement as a type assertion..."), statementNode);
129
+ var typeAssertionVerified = (0, _type.default)(typeAssertionNode, assignments, derived, localContext);
130
+ statementVerifiedAsTypeAssertion = typeAssertionVerified; ///
131
+ if (statementVerifiedAsTypeAssertion) {
132
+ localContext.debug("...verified the '".concat(statementString, "' derived statement as a type assertion."), statementNode);
133
+ }
134
+ }
135
+ return statementVerifiedAsTypeAssertion;
136
+ }
126
137
 
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50L3VucXVhbGlmaWVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgdmVyaWZ5U3RhdGVtZW50IGZyb20gXCIuLi8uLi92ZXJpZnkvc3RhdGVtZW50XCI7XG5cbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IHZlcmlmeVN0YXRlbWVudEFzRXF1YWxpdHksIHZlcmlmeVN0YXRlbWVudEFzSnVkZ2VtZW50LCB2ZXJpZnlTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vdmVyaWZ5L3N0YXRlbWVudFwiO1xuXG5jb25zdCBzdGF0ZW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdW5xdWFsaWZpZWRTdGF0ZW1lbnQvc3RhdGVtZW50IVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5VW5xdWFsaWZpZWRTdGF0ZW1lbnQodW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCB1bnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkO1xuXG4gIGNvbnN0IHVucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyh1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt1bnF1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHVucXVhbGlmaWVkIHN0YXRlbWVudC4uLmAsIHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgY29uc3QgdmVyaWZ5VW5xdWFsaWZpZWRTdGF0ZW1lbnRGdW5jdGlvbnMgPSBbXG4gICAgdmVyaWZ5RGVyaXZlZFVucXVhbGlmaWVkU3RhdGVtZW50LFxuICAgIHZlcmlmeVN0YXRlZFVucXVhbGlmaWVkU3RhdGVtZW50XG4gIF07XG5cbiAgdW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCA9IHZlcmlmeVVucXVhbGlmaWVkU3RhdGVtZW50RnVuY3Rpb25zLnNvbWUoKHZlcmlmeVVucXVhbGlmaWVkU3RhdGVtZW50RnVuY3Rpb24pID0+IHtcbiAgICBjb25zdCB1bnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkID0gdmVyaWZ5VW5xdWFsaWZpZWRTdGF0ZW1lbnRGdW5jdGlvbih1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpO1xuXG4gICAgaWYgKHVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt1bnF1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHVucXVhbGlmaWVkIHN0YXRlbWVudC5gLCB1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIHVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeURlcml2ZWRVbnF1YWxpZmllZFN0YXRlbWVudCh1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IGRlcml2ZWRVbnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkID0gZmFsc2U7XG5cbiAgaWYgKGRlcml2ZWQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgdW5xdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dW5xdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBkZXJpdmVkIHVucXVhbGlmaWVkIHN0YXRlbWVudC4uLmAsIHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgICBjb25zdCBtYXRjaGVzU3RhdGVtZW50Tm9kZSA9IGxvY2FsQ29udGV4dC5tYXRjaFN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBpZiAobWF0Y2hlc1N0YXRlbWVudE5vZGUpIHtcbiAgICAgIGRlcml2ZWRVbnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGVRdWVyeSh1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgICAgZGVyaXZlZFN0YXRlbWVudFZlcmlmaWVkID0gdmVyaWZ5RGVyaXZlZFN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgICAgZGVyaXZlZFVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQgPSBkZXJpdmVkU3RhdGVtZW50VmVyaWZpZWQ7IC8vL1xuICAgIH1cblxuICAgIGlmIChkZXJpdmVkVW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dW5xdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBkZXJpdmVkIHVucXVhbGlmaWVkIHN0YXRlbWVudC5gLCB1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkZXJpdmVkVW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5U3RhdGVkVW5xdWFsaWZpZWRTdGF0ZW1lbnQodW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBzdGF0ZWRVbnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkID0gZmFsc2U7XG5cbiAgaWYgKCFkZXJpdmVkKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGVRdWVyeSh1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIHVucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyh1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3VucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgc3RhdGVkIHVucXVhbGlmaWVkIHN0YXRlbWVudC4uLmAsIHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnRWZXJpZmllZCA9IHZlcmlmeVN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgIHN0YXRlZFVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQgPSBzdGF0ZW1lbnRWZXJpZmllZDsgLy8vXG5cbiAgICBpZiAoc3RhdGVkVW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dW5xdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZWQgdW5xdWFsaWZpZWQgc3RhdGVtZW50LmAsIHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlZFVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeURlcml2ZWRTdGF0ZW1lbnQoc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgZGVyaXZlZFN0YXRlbWVudFZlcmlmaWVkO1xuXG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcoc3RhdGVtZW50Tm9kZSk7XG5cbiAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIGRlcml2ZWQgc3RhdGVtZW50Li4uYCwgc3RhdGVtZW50Tm9kZSk7XG5cbiAgY29uc3QgdmVyaWZ5U3RhdGVtZW50RnVuY3Rpb25zID0gW1xuICAgIHZlcmlmeVN0YXRlbWVudEFzRXF1YWxpdHksXG4gICAgdmVyaWZ5U3RhdGVtZW50QXNKdWRnZW1lbnQsXG4gICAgdmVyaWZ5U3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uXG4gIF07XG5cbiAgdmVyaWZ5U3RhdGVtZW50RnVuY3Rpb25zLnNvbWUoKHZlcmlmeVN0YXRlbWVudEZ1bmN0aW9uKSA9PiB7XG4gICAgY29uc3QgZGVyaXZlZFN0YXRlbWVudFZlcmlmaWVkID0gdmVyaWZ5U3RhdGVtZW50RnVuY3Rpb24oc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBpZiAoZGVyaXZlZFN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZCA9IHRydWU7IC8vL1xuXG4gIGlmIChkZXJpdmVkU3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBkZXJpdmVkIHN0YXRlbWVudC5gLCBzdGF0ZW1lbnROb2RlKTtcbiAgfVxuXG4gIHJldHVybiBkZXJpdmVkU3RhdGVtZW50VmVyaWZpZWQ7XG59XG4iXSwibmFtZXMiOlsidmVyaWZ5VW5xdWFsaWZpZWRTdGF0ZW1lbnQiLCJzdGF0ZW1lbnROb2RlUXVlcnkiLCJub2RlUXVlcnkiLCJ1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUiLCJhc3NpZ25tZW50cyIsImRlcml2ZWQiLCJsb2NhbENvbnRleHQiLCJ1bnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkIiwidW5xdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmciLCJub2RlQXNTdHJpbmciLCJ0cmFjZSIsInZlcmlmeVVucXVhbGlmaWVkU3RhdGVtZW50RnVuY3Rpb25zIiwidmVyaWZ5RGVyaXZlZFVucXVhbGlmaWVkU3RhdGVtZW50IiwidmVyaWZ5U3RhdGVkVW5xdWFsaWZpZWRTdGF0ZW1lbnQiLCJzb21lIiwidmVyaWZ5VW5xdWFsaWZpZWRTdGF0ZW1lbnRGdW5jdGlvbiIsImRlYnVnIiwiZGVyaXZlZFVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQiLCJzdGF0ZW1lbnROb2RlIiwibWF0Y2hlc1N0YXRlbWVudE5vZGUiLCJtYXRjaFN0YXRlbWVudE5vZGUiLCJkZXJpdmVkU3RhdGVtZW50VmVyaWZpZWQiLCJ2ZXJpZnlEZXJpdmVkU3RhdGVtZW50Iiwic3RhdGVkVW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCIsInN0YXRlbWVudFZlcmlmaWVkIiwidmVyaWZ5U3RhdGVtZW50Iiwic3RhdGVtZW50U3RyaW5nIiwidmVyaWZ5U3RhdGVtZW50RnVuY3Rpb25zIiwidmVyaWZ5U3RhdGVtZW50QXNFcXVhbGl0eSIsInZlcmlmeVN0YXRlbWVudEFzSnVkZ2VtZW50IiwidmVyaWZ5U3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwidmVyaWZ5U3RhdGVtZW50RnVuY3Rpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVNBOzs7ZUFBd0JBOzs7aUVBUEk7cUJBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUcxQixJQUFNQyxxQkFBcUJDLElBQUFBLGdCQUFTLEVBQUM7QUFFdEIsU0FB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
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50L3VucXVhbGlmaWVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgdmVyaWZ5RXF1YWxpdHkgZnJvbSBcIi4uLy4uL3ZlcmlmeS9lcXVhbGl0eVwiO1xuaW1wb3J0IHZlcmlmeUp1ZGdlbWVudCBmcm9tIFwiLi4vLi4vdmVyaWZ5L2p1ZGdlbWVudFwiO1xuaW1wb3J0IHZlcmlmeVN0YXRlbWVudCBmcm9tIFwiLi4vLi4vdmVyaWZ5L3N0YXRlbWVudFwiO1xuaW1wb3J0IHZlcmlmeVR5cGVBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvbi90eXBlXCI7XG5cbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvcXVlcnlcIjtcblxuY29uc3Qgc3RhdGVtZW50Tm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3VucXVhbGlmaWVkU3RhdGVtZW50L3N0YXRlbWVudCFcIiksXG4gICAgICBlcXVhbGl0eU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvZXF1YWxpdHkhXCIpLFxuICAgICAganVkZ2VtZW50Tm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC9qdWRnZW1lbnQhXCIpLFxuICAgICAgdHlwZUFzc2VydGlvbk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvdHlwZUFzc2VydGlvbiFcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZlcmlmeVVucXVhbGlmaWVkU3RhdGVtZW50KHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgdW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZDtcblxuICBjb25zdCB1bnF1YWxpZmllZFN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcodW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dW5xdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyB1bnF1YWxpZmllZCBzdGF0ZW1lbnQuLi5gLCB1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gIGNvbnN0IHZlcmlmeVVucXVhbGlmaWVkU3RhdGVtZW50RnVuY3Rpb25zID0gW1xuICAgIHZlcmlmeURlcml2ZWRVbnF1YWxpZmllZFN0YXRlbWVudCxcbiAgICB2ZXJpZnlTdGF0ZWRVbnF1YWxpZmllZFN0YXRlbWVudFxuICBdO1xuXG4gIHVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQgPSB2ZXJpZnlVbnF1YWxpZmllZFN0YXRlbWVudEZ1bmN0aW9ucy5zb21lKCh2ZXJpZnlVbnF1YWxpZmllZFN0YXRlbWVudEZ1bmN0aW9uKSA9PiB7XG4gICAgY29uc3QgdW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCA9IHZlcmlmeVVucXVhbGlmaWVkU3RhdGVtZW50RnVuY3Rpb24odW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgIGlmICh1bnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmICh1bnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dW5xdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyB1bnF1YWxpZmllZCBzdGF0ZW1lbnQuYCwgdW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcbiAgfVxuXG4gIHJldHVybiB1bnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlEZXJpdmVkVW5xdWFsaWZpZWRTdGF0ZW1lbnQodW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBkZXJpdmVkVW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCA9IGZhbHNlO1xuXG4gIGlmIChkZXJpdmVkKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGVRdWVyeSh1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIHVucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyh1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3VucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgZGVyaXZlZCB1bnF1YWxpZmllZCBzdGF0ZW1lbnQuLi5gLCB1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50VW5pZmllZCA9IGxvY2FsQ29udGV4dC51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnROb2RlKTtcblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVkKSB7XG4gICAgICBkZXJpdmVkVW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlUXVlcnkodW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICAgIGRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZCA9IHZlcmlmeURlcml2ZWRTdGF0ZW1lbnQoc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICAgIGRlcml2ZWRVbnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkID0gZGVyaXZlZFN0YXRlbWVudFZlcmlmaWVkOyAvLy9cbiAgICB9XG5cbiAgICBpZiAoZGVyaXZlZFVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3VucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgZGVyaXZlZCB1bnF1YWxpZmllZCBzdGF0ZW1lbnQuYCwgdW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVyaXZlZFVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVN0YXRlZFVucXVhbGlmaWVkU3RhdGVtZW50KHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgc3RhdGVkVW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCA9IGZhbHNlO1xuXG4gIGlmICghZGVyaXZlZCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlUXVlcnkodW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICB1bnF1YWxpZmllZFN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcodW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt1bnF1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHN0YXRlZCB1bnF1YWxpZmllZCBzdGF0ZW1lbnQuLi5gLCB1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50VmVyaWZpZWQgPSB2ZXJpZnlTdGF0ZW1lbnQoc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBzdGF0ZWRVbnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkID0gc3RhdGVtZW50VmVyaWZpZWQ7IC8vL1xuXG4gICAgaWYgKHN0YXRlZFVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3VucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgc3RhdGVkIHVucXVhbGlmaWVkIHN0YXRlbWVudC5gLCB1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZWRVbnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlEZXJpdmVkU3RhdGVtZW50KHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IGRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZDtcblxuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHN0YXRlbWVudE5vZGUpO1xuXG4gIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBkZXJpdmVkIHN0YXRlbWVudC4uLmAsIHN0YXRlbWVudE5vZGUpO1xuXG4gIGNvbnN0IHZlcmlmeURlcml2ZWRTdGF0ZW1lbnRGdW5jdGlvbnMgPSBbXG4gICAgdmVyaWZ5RGVyaXZlZFN0YXRlbWVudEFzRXF1YWxpdHksXG4gICAgdmVyaWZ5RGVyaXZlZFN0YXRlbWVudEFzSnVkZ2VtZW50LFxuICAgIHZlcmlmeURlcml2ZWRTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb25cbiAgXTtcblxuICBkZXJpdmVkU3RhdGVtZW50VmVyaWZpZWQgPSB2ZXJpZnlEZXJpdmVkU3RhdGVtZW50RnVuY3Rpb25zLmV2ZXJ5KCh2ZXJpZnlEZXJpdmVkU3RhdGVtZW50RnVuY3Rpb24pID0+IHsgIC8vL1xuICAgIGNvbnN0IGRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZCA9IHZlcmlmeURlcml2ZWRTdGF0ZW1lbnRGdW5jdGlvbihzdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgIGlmIChkZXJpdmVkU3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZCkge1xuICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIGRlcml2ZWQgc3RhdGVtZW50LmAsIHN0YXRlbWVudE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIGRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5RGVyaXZlZFN0YXRlbWVudEFzRXF1YWxpdHkoc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgZGVyaXZlZFN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSA9IHRydWU7IC8vL1xuXG4gIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IGVxdWFsaXR5Tm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpO1xuXG4gIGlmIChlcXVhbGl0eU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIGRlcml2ZWQgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5Li4uYCwgc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBjb25zdCBlcXVhbGl0eVZlcmlmaWVkID0gdmVyaWZ5RXF1YWxpdHkoZXF1YWxpdHlOb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0LCAoKSA9PiB7XG4gICAgICBjb25zdCB2ZXJpZmllZEFoZWFkID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHZlcmlmaWVkQWhlYWQ7XG4gICAgfSk7XG5cbiAgICBkZXJpdmVkU3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5ID0gZXF1YWxpdHlWZXJpZmllZDsgLy8vXG5cbiAgICBpZiAoZGVyaXZlZFN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgZGVyaXZlZCBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuYCwgc3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHk7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeURlcml2ZWRTdGF0ZW1lbnRBc0p1ZGdlbWVudChzdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBkZXJpdmVkU3RhdGVtZW50VmVyaWZpZWRBc0p1ZGdlbWVudCA9IHRydWU7XG5cbiAgY29uc3QganVkZ2VtZW50Tm9kZSA9IGp1ZGdlbWVudE5vZGVRdWVyeShzdGF0ZW1lbnROb2RlKTtcblxuICBpZiAoanVkZ2VtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgZGVyaXZlZCBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGp1ZGdlbWVudFZlcmlmaWVkID0gdmVyaWZ5SnVkZ2VtZW50KGp1ZGdlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpO1xuXG4gICAgZGVyaXZlZFN0YXRlbWVudFZlcmlmaWVkQXNKdWRnZW1lbnQgPSBqdWRnZW1lbnRWZXJpZmllZDsgIC8vL1xuXG4gICAgaWYgKGRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZEFzSnVkZ2VtZW50KSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBkZXJpdmVkIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC5gLCBzdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVyaXZlZFN0YXRlbWVudFZlcmlmaWVkQXNKdWRnZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeURlcml2ZWRTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24oc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmVyaWZpZWRBc1R5cGVBc3NlcnRpb24gPSB0cnVlOyAgLy8vXG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbk5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpO1xuXG4gIGlmICh0eXBlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgZGVyaXZlZCBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi4uLmAsIHN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvblZlcmlmaWVkID0gdmVyaWZ5VHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uTm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBzdGF0ZW1lbnRWZXJpZmllZEFzVHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25WZXJpZmllZDsgLy8vXG5cbiAgICBpZiAoc3RhdGVtZW50VmVyaWZpZWRBc1R5cGVBc3NlcnRpb24pIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIGRlcml2ZWQgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uYCwgc3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZlcmlmaWVkQXNUeXBlQXNzZXJ0aW9uO1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeVVucXVhbGlmaWVkU3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwiZXF1YWxpdHlOb2RlUXVlcnkiLCJqdWRnZW1lbnROb2RlUXVlcnkiLCJ0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5IiwidW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlIiwiYXNzaWdubWVudHMiLCJkZXJpdmVkIiwibG9jYWxDb250ZXh0IiwidW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCIsInVucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nIiwibm9kZUFzU3RyaW5nIiwidHJhY2UiLCJ2ZXJpZnlVbnF1YWxpZmllZFN0YXRlbWVudEZ1bmN0aW9ucyIsInZlcmlmeURlcml2ZWRVbnF1YWxpZmllZFN0YXRlbWVudCIsInZlcmlmeVN0YXRlZFVucXVhbGlmaWVkU3RhdGVtZW50Iiwic29tZSIsInZlcmlmeVVucXVhbGlmaWVkU3RhdGVtZW50RnVuY3Rpb24iLCJkZWJ1ZyIsImRlcml2ZWRVbnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkIiwic3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudFVuaWZpZWQiLCJ1bmlmeVN0YXRlbWVudCIsImRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZCIsInZlcmlmeURlcml2ZWRTdGF0ZW1lbnQiLCJzdGF0ZWRVbnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkIiwic3RhdGVtZW50VmVyaWZpZWQiLCJ2ZXJpZnlTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRTdHJpbmciLCJ2ZXJpZnlEZXJpdmVkU3RhdGVtZW50RnVuY3Rpb25zIiwidmVyaWZ5RGVyaXZlZFN0YXRlbWVudEFzRXF1YWxpdHkiLCJ2ZXJpZnlEZXJpdmVkU3RhdGVtZW50QXNKdWRnZW1lbnQiLCJ2ZXJpZnlEZXJpdmVkU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwiZXZlcnkiLCJ2ZXJpZnlEZXJpdmVkU3RhdGVtZW50RnVuY3Rpb24iLCJkZXJpdmVkU3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5IiwiZXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlWZXJpZmllZCIsInZlcmlmeUVxdWFsaXR5IiwidmVyaWZpZWRBaGVhZCIsImRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZEFzSnVkZ2VtZW50IiwianVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudFZlcmlmaWVkIiwidmVyaWZ5SnVkZ2VtZW50Iiwic3RhdGVtZW50VmVyaWZpZWRBc1R5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVBc3NlcnRpb25WZXJpZmllZCIsInZlcmlmeVR5cGVBc3NlcnRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWNBOzs7ZUFBd0JBOzs7K0RBWkc7Z0VBQ0M7Z0VBQ0E7MkRBQ0k7cUJBRU47Ozs7OztBQUUxQixJQUFNQyxxQkFBcUJDLElBQUFBLGdCQUFTLEVBQUMscUNBQy9CQyxvQkFBb0JELElBQUFBLGdCQUFTLEVBQUMseUJBQzlCRSxxQkFBcUJGLElBQUFBLGdCQUFTLEVBQUMsMEJBQy9CRyx5QkFBeUJILElBQUFBLGdCQUFTLEVBQUM7QUFFMUIsU0FBU0YsMkJBQTJCTSx3QkFBd0IsRUFBRUMsV0FBVyxFQUFFQyxPQUFPLEVBQUVDLFlBQVk7SUFDN0csSUFBSUM7SUFFSixJQUFNQyw2QkFBNkJGLGFBQWFHLFlBQVksQ0FBQ047SUFFN0RHLGFBQWFJLEtBQUssQ0FBQyxBQUFDLGtCQUE0QyxPQUEzQkYsNEJBQTJCLCtCQUE2Qkw7SUFFN0YsSUFBTVEsc0NBQXNDO1FBQzFDQztRQUNBQztLQUNEO0lBRUROLCtCQUErQkksb0NBQW9DRyxJQUFJLENBQUMsU0FBQ0M7UUFDdkUsSUFBTVIs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