occam-verify-cli 0.0.942 → 0.0.944
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/conclusion.js +3 -4
- package/lib/consequent.js +3 -4
- package/lib/constants.js +5 -1
- package/lib/context/file.js +1 -1
- package/lib/context/local.js +15 -5
- package/lib/equality.js +14 -1
- package/lib/metavariable.js +12 -4
- package/lib/premise.js +11 -12
- package/lib/proofStep.js +13 -18
- package/lib/rule.js +5 -38
- package/lib/substitution/statementForMetavariable.js +17 -3
- package/lib/substitution/termForVariable.js +16 -2
- package/lib/substitution.js +14 -1
- package/lib/substitutions.js +28 -10
- package/lib/supposition.js +11 -12
- package/lib/topLevelAssertion.js +5 -38
- package/lib/unifier/equality.js +6 -8
- package/lib/unifier/metaLevel.js +7 -10
- package/lib/unifier/statementAgainstCombinator.js +6 -9
- package/lib/unifier/termAgainstConstructor.js +5 -5
- package/lib/unifier.js +34 -13
- package/lib/unify/conclusionAgainstStatement.js +34 -0
- package/lib/unify/consequentAgainstStatement.js +34 -0
- package/lib/unify/metavariableAgainstStatement.js +23 -15
- package/lib/unify/premiseAgainstProofStep.js +41 -0
- package/lib/unify/premisesAgainstProofSteps.js +31 -0
- package/lib/unify/statementAgainstMetaType.js +5 -9
- package/lib/unify/suppositionAgainstProofStep.js +41 -0
- package/lib/unify/suppositionsAgainstProofSteps.js +31 -0
- package/lib/unify/termAgainstTerm.js +4 -5
- package/lib/unify/termAgainstType.js +7 -7
- package/lib/unify/variableAgainstTerm.js +11 -27
- package/lib/utilities/arguments.js +27 -0
- package/lib/utilities/array.js +5 -2
- package/lib/utilities/unify.js +19 -0
- package/lib/verifier/metaLevel.js +8 -11
- package/lib/verifier/statementAsCombinator.js +13 -22
- package/lib/verifier/topLevel.js +3 -6
- package/lib/verifier.js +28 -8
- package/lib/verify/assertion/type.js +3 -7
- package/lib/verify/declaration/metavariable.js +1 -1
- package/lib/verify/equality.js +12 -25
- package/lib/verify/metavariable.js +26 -63
- package/lib/verify/statement/qualified.js +55 -58
- package/lib/verify/statement/unqualified.js +3 -6
- package/lib/verify/statement.js +36 -34
- package/lib/verify/term.js +26 -32
- package/lib/verify/type.js +4 -7
- package/lib/verify/variable.js +3 -4
- package/package.json +1 -1
- package/src/conclusion.js +2 -6
- package/src/consequent.js +2 -6
- package/src/constants.js +1 -0
- package/src/context/file.js +5 -5
- package/src/context/local.js +20 -9
- package/src/equality.js +22 -0
- package/src/metavariable.js +1 -1
- package/src/premise.js +18 -24
- package/src/proofStep.js +16 -21
- package/src/rule.js +11 -65
- package/src/substitution/statementForMetavariable.js +17 -3
- package/src/substitution/termForVariable.js +17 -1
- package/src/substitution.js +12 -0
- package/src/substitutions.js +41 -7
- package/src/supposition.js +18 -24
- package/src/topLevelAssertion.js +11 -65
- package/src/unifier/equality.js +7 -8
- package/src/unifier/metaLevel.js +6 -10
- package/src/unifier/statementAgainstCombinator.js +9 -9
- package/src/unifier/termAgainstConstructor.js +6 -4
- package/src/unifier.js +35 -11
- package/src/unify/conclusionAgainstStatement.js +34 -0
- package/src/unify/consequentAgainstStatement.js +34 -0
- package/src/unify/metavariableAgainstStatement.js +32 -22
- package/src/unify/premiseAgainstProofStep.js +54 -0
- package/src/unify/premisesAgainstProofSteps.js +23 -0
- package/src/unify/statementAgainstMetaType.js +3 -11
- package/src/unify/suppositionAgainstProofStep.js +54 -0
- package/src/unify/suppositionsAgainstProofSteps.js +23 -0
- package/src/unify/termAgainstTerm.js +3 -7
- package/src/unify/termAgainstType.js +5 -6
- package/src/unify/variableAgainstTerm.js +17 -47
- package/src/utilities/arguments.js +18 -0
- package/src/utilities/array.js +1 -1
- package/src/utilities/unify.js +18 -0
- package/src/verifier/metaLevel.js +7 -11
- package/src/verifier/statementAsCombinator.js +15 -28
- package/src/verifier/topLevel.js +13 -17
- package/src/verifier.js +28 -6
- package/src/verify/assertion/type.js +2 -6
- package/src/verify/declaration/metavariable.js +9 -9
- package/src/verify/equality.js +12 -40
- package/src/verify/metavariable.js +31 -91
- package/src/verify/statement/qualified.js +54 -58
- package/src/verify/statement/unqualified.js +2 -6
- package/src/verify/statement.js +38 -36
- package/src/verify/term.js +25 -31
- package/src/verify/type.js +3 -7
- package/src/verify/variable.js +2 -4
|
@@ -23,21 +23,21 @@ function verifyQualifiedStatement(qualifiedStatementNode, substitutions, assignm
|
|
|
23
23
|
var qualifiedStatementVerified;
|
|
24
24
|
var qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
25
25
|
localContext.trace("Verifying the '".concat(qualifiedStatementString, "' qualified statement..."), qualifiedStatementNode);
|
|
26
|
-
var
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
26
|
+
var unifyQualifiedStatementFunctions = [
|
|
27
|
+
unifyQualifiedStatementAAgainstRule,
|
|
28
|
+
unifyQualifiedStatementAAgainstAxiom,
|
|
29
|
+
unifyQualifiedStatementAAgainstLemma,
|
|
30
|
+
unifyQualifiedStatementAAgainstTheorem,
|
|
31
|
+
unifyQualifiedStatementAAgainstConjecture,
|
|
32
|
+
unifyQualifiedStatementAAgainstReference
|
|
33
33
|
];
|
|
34
|
-
|
|
35
|
-
var
|
|
36
|
-
if (
|
|
34
|
+
var qualifiedStatementUnified = unifyQualifiedStatementFunctions.some(function(unifyQualifiedStatementFunction) {
|
|
35
|
+
var qualifiedStatementUnified = unifyQualifiedStatementFunction(qualifiedStatementNode, substitutions, localContext);
|
|
36
|
+
if (qualifiedStatementUnified) {
|
|
37
37
|
return true;
|
|
38
38
|
}
|
|
39
39
|
});
|
|
40
|
-
if (
|
|
40
|
+
if (qualifiedStatementUnified) {
|
|
41
41
|
var derived = false, statementNode = statementNodeQuery(qualifiedStatementNode), statedStatementVerified = verifyStatedStatement(statementNode, assignments, derived, localContext);
|
|
42
42
|
qualifiedStatementVerified = statedStatementVerified; ///
|
|
43
43
|
}
|
|
@@ -46,91 +46,91 @@ function verifyQualifiedStatement(qualifiedStatementNode, substitutions, assignm
|
|
|
46
46
|
}
|
|
47
47
|
return qualifiedStatementVerified;
|
|
48
48
|
}
|
|
49
|
-
function
|
|
50
|
-
var
|
|
49
|
+
function unifyQualifiedStatementAAgainstRule(qualifiedStatementNode, substitutions, localContext) {
|
|
50
|
+
var qualifiedStatementUnifiedAgainstRule = false;
|
|
51
51
|
var metavariableNode = metavariableNodeQuery(qualifiedStatementNode), rule = localContext.findRuleByMetavariableNode(metavariableNode);
|
|
52
52
|
if (rule !== null) {
|
|
53
53
|
var statementNode = statementNodeQuery(qualifiedStatementNode), metavariableString = localContext.nodeAsString(metavariableNode), qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
54
|
-
localContext.trace("
|
|
54
|
+
localContext.trace("Unifying the '".concat(qualifiedStatementString, "' qualified statement against the '").concat(metavariableString, "' rule..."), qualifiedStatementNode);
|
|
55
55
|
var ruleMatchesStatement = rule.unifyStatement(statementNode, localContext);
|
|
56
|
-
|
|
57
|
-
if (
|
|
58
|
-
localContext.debug("...
|
|
56
|
+
qualifiedStatementUnifiedAgainstRule = ruleMatchesStatement; ///
|
|
57
|
+
if (qualifiedStatementUnifiedAgainstRule) {
|
|
58
|
+
localContext.debug("...unified the '".concat(qualifiedStatementString, "' qualified statement against the '").concat(metavariableString, "' rule."), qualifiedStatementNode);
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
-
return
|
|
61
|
+
return qualifiedStatementUnifiedAgainstRule;
|
|
62
62
|
}
|
|
63
|
-
function
|
|
64
|
-
var
|
|
63
|
+
function unifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, substitutions, localContext) {
|
|
64
|
+
var qualifiedStatementUnifiedAgainstAxiom = false;
|
|
65
65
|
var metavariableNode = metavariableNodeQuery(qualifiedStatementNode), axiom = localContext.findAxiomByMetavariableNode(metavariableNode);
|
|
66
66
|
if (axiom !== null) {
|
|
67
67
|
var statementNode = statementNodeQuery(qualifiedStatementNode), metavariableString = localContext.nodeAsString(metavariableNode), qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
68
|
-
localContext.trace("
|
|
68
|
+
localContext.trace("Unifying the '".concat(qualifiedStatementString, "' qualified statement against the '").concat(metavariableString, "' axiom..."), qualifiedStatementNode);
|
|
69
69
|
var axiomMatchesStatement = axiom.unifyStatement(statementNode, localContext);
|
|
70
|
-
|
|
71
|
-
if (
|
|
72
|
-
localContext.debug("...
|
|
70
|
+
qualifiedStatementUnifiedAgainstAxiom = axiomMatchesStatement; ///
|
|
71
|
+
if (qualifiedStatementUnifiedAgainstAxiom) {
|
|
72
|
+
localContext.debug("...unified the '".concat(qualifiedStatementString, "' qualified statement against the '").concat(metavariableString, "' axiom."), qualifiedStatementNode);
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
|
-
return
|
|
75
|
+
return qualifiedStatementUnifiedAgainstAxiom;
|
|
76
76
|
}
|
|
77
|
-
function
|
|
78
|
-
var
|
|
77
|
+
function unifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, substitutions, localContext) {
|
|
78
|
+
var qualifiedStatementUnifiedAgainstLemma = false;
|
|
79
79
|
var metavariableNode = metavariableNodeQuery(qualifiedStatementNode), lemma = localContext.findLemmaByMetavariableNode(metavariableNode);
|
|
80
80
|
if (lemma !== null) {
|
|
81
81
|
var statementNode = statementNodeQuery(qualifiedStatementNode), metavariableString = localContext.nodeAsString(metavariableNode), qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
82
|
-
localContext.trace("
|
|
82
|
+
localContext.trace("Unifying the '".concat(qualifiedStatementString, "' qualified statement against the '").concat(metavariableString, "' lemma..."), qualifiedStatementNode);
|
|
83
83
|
var lemmaMatchesStatement = lemma.unifyStatement(statementNode, localContext);
|
|
84
|
-
|
|
85
|
-
if (
|
|
86
|
-
localContext.debug("...
|
|
84
|
+
qualifiedStatementUnifiedAgainstLemma = lemmaMatchesStatement; ///
|
|
85
|
+
if (qualifiedStatementUnifiedAgainstLemma) {
|
|
86
|
+
localContext.debug("...unified the '".concat(qualifiedStatementString, "' qualified statement against the '").concat(metavariableString, "' lemma."), qualifiedStatementNode);
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
|
-
return
|
|
89
|
+
return qualifiedStatementUnifiedAgainstLemma;
|
|
90
90
|
}
|
|
91
|
-
function
|
|
92
|
-
var
|
|
91
|
+
function unifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, substitutions, localContext) {
|
|
92
|
+
var qualifiedStatementUnifiedAgainstTheorem = false;
|
|
93
93
|
var metavariableNode = metavariableNodeQuery(qualifiedStatementNode), theorem = localContext.findTheoremByMetavariableNode(metavariableNode);
|
|
94
94
|
if (theorem !== null) {
|
|
95
95
|
var statementNode = statementNodeQuery(qualifiedStatementNode), metavariableString = localContext.nodeAsString(metavariableNode), qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
96
|
-
localContext.trace("
|
|
96
|
+
localContext.trace("Unifying the '".concat(qualifiedStatementString, "' qualified statement against the '").concat(metavariableString, "' theorem..."), qualifiedStatementNode);
|
|
97
97
|
var theoremMatchesStatement = theorem.unifyStatement(statementNode, localContext);
|
|
98
|
-
|
|
99
|
-
if (
|
|
100
|
-
localContext.debug("...
|
|
98
|
+
qualifiedStatementUnifiedAgainstTheorem = theoremMatchesStatement; ///
|
|
99
|
+
if (qualifiedStatementUnifiedAgainstTheorem) {
|
|
100
|
+
localContext.debug("...unified the '".concat(qualifiedStatementString, "' qualified statement against the '").concat(metavariableString, "' theorem."), qualifiedStatementNode);
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
|
-
return
|
|
103
|
+
return qualifiedStatementUnifiedAgainstTheorem;
|
|
104
104
|
}
|
|
105
|
-
function
|
|
106
|
-
var
|
|
105
|
+
function unifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, substitutions, localContext) {
|
|
106
|
+
var qualifiedStatementUnifiedAgainstConjecture = false;
|
|
107
107
|
var metavariableNode = metavariableNodeQuery(qualifiedStatementNode), conjecture = localContext.findConjectureByMetavariableNode(metavariableNode);
|
|
108
108
|
if (conjecture !== null) {
|
|
109
109
|
var statementNode = statementNodeQuery(qualifiedStatementNode), metavariableString = localContext.nodeAsString(metavariableNode), qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
110
|
-
localContext.trace("
|
|
110
|
+
localContext.trace("Unifying the '".concat(qualifiedStatementString, "' qualified statement against the '").concat(metavariableString, "' conjecture..."), qualifiedStatementNode);
|
|
111
111
|
var conjectureMatchesStatement = conjecture.unifyStatement(statementNode, localContext);
|
|
112
|
-
|
|
113
|
-
if (
|
|
114
|
-
localContext.debug("...
|
|
112
|
+
qualifiedStatementUnifiedAgainstConjecture = conjectureMatchesStatement; ///
|
|
113
|
+
if (qualifiedStatementUnifiedAgainstConjecture) {
|
|
114
|
+
localContext.debug("...unified the '".concat(qualifiedStatementString, "' qualified statement against the '").concat(metavariableString, "' conjecture."), qualifiedStatementNode);
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
-
return
|
|
117
|
+
return qualifiedStatementUnifiedAgainstConjecture;
|
|
118
118
|
}
|
|
119
|
-
function
|
|
120
|
-
var
|
|
119
|
+
function unifyQualifiedStatementAAgainstReference(qualifiedStatementNode, substitutions, localContext) {
|
|
120
|
+
var qualifiedStatementUnifiedAgainstReference = false;
|
|
121
121
|
var metavariableNode = metavariableNodeQuery(qualifiedStatementNode), metavariableString = localContext.nodeAsString(metavariableNode), metavariablePresent = localContext.isMetavariablePresentByMetavariableNode(metavariableNode), qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
122
|
-
localContext.trace("
|
|
122
|
+
localContext.trace("Unifying the '".concat(qualifiedStatementString, "' qualified statement against the '").concat(metavariableString, "' reference..."), qualifiedStatementNode);
|
|
123
123
|
if (metavariablePresent) {
|
|
124
124
|
var statementNode = statementNodeQuery(qualifiedStatementNode), localContextA = null, localContextB = localContext, statementNodeB = statementNode, substitutionNodeA = null, metavariableNodeA = metavariableNode, metavariableVerifiedAgainstStatement = (0, _metavariableAgainstStatement.default)(metavariableNodeA, statementNodeB, substitutionNodeA, substitutions, localContextA, localContextB, function() {
|
|
125
125
|
var verifiedAhead = true;
|
|
126
126
|
return verifiedAhead;
|
|
127
127
|
});
|
|
128
|
-
|
|
128
|
+
qualifiedStatementUnifiedAgainstReference = metavariableVerifiedAgainstStatement; ///
|
|
129
129
|
}
|
|
130
|
-
if (
|
|
131
|
-
localContext.debug("...
|
|
130
|
+
if (qualifiedStatementUnifiedAgainstReference) {
|
|
131
|
+
localContext.debug("...unified the '".concat(qualifiedStatementString, "' qualified statement against the '").concat(metavariableString, "' reference."), qualifiedStatementNode);
|
|
132
132
|
}
|
|
133
|
-
return
|
|
133
|
+
return qualifiedStatementUnifiedAgainstReference;
|
|
134
134
|
}
|
|
135
135
|
function verifyStatedStatement(statementNode, assignments, derived, localContext) {
|
|
136
136
|
var statedStatementVerified;
|
|
@@ -159,10 +159,7 @@ function verifyStatedStatementAsEquality(statementNode, assignments, derived, lo
|
|
|
159
159
|
if (equalityNode !== null) {
|
|
160
160
|
var statementString = localContext.nodeAsString(statementNode);
|
|
161
161
|
localContext.trace("Verifying the '".concat(statementString, "' stated statement as an equality..."), statementNode);
|
|
162
|
-
var equalityVerified = (0, _equality.default)(equalityNode, assignments, derived, localContext
|
|
163
|
-
var verifiedAhead = true;
|
|
164
|
-
return verifiedAhead;
|
|
165
|
-
});
|
|
162
|
+
var equalityVerified = (0, _equality.default)(equalityNode, assignments, derived, localContext);
|
|
166
163
|
statedStatementVerifiedAsEquality = equalityVerified; ///
|
|
167
164
|
if (statedStatementVerifiedAsEquality) {
|
|
168
165
|
localContext.debug("...verified the '".concat(statementString, "' stated statement as an equality."), statementNode);
|
|
@@ -199,4 +196,4 @@ function verifyStatedStatementAsTypeAssertion(statementNode, assignments, derive
|
|
|
199
196
|
return statementVerifiedAsTypeAssertion;
|
|
200
197
|
}
|
|
201
198
|
|
|
202
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50L3F1YWxpZmllZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHZlcmlmeUVxdWFsaXR5IGZyb20gXCIuLi9lcXVhbGl0eVwiO1xuaW1wb3J0IHZlcmlmeUp1ZGdlbWVudCBmcm9tIFwiLi4vanVkZ2VtZW50XCI7XG5pbXBvcnQgdmVyaWZ5VHlwZUFzc2VydGlvbiBmcm9tIFwiLi4vYXNzZXJ0aW9uL3R5cGVcIjtcbmltcG9ydCB1bmlmeU1ldGF2YXJpYWJsZUFnYWluc3RTdGF0ZW1lbnQgZnJvbSBcIi4uLy4uL3VuaWZ5L21ldGF2YXJpYWJsZUFnYWluc3RTdGF0ZW1lbnRcIjtcblxuaW1wb3J0IHsgbm9kZVF1ZXJ5IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9xdWVyeVwiO1xuXG5jb25zdCBzdGF0ZW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvcXVhbGlmaWVkU3RhdGVtZW50L3N0YXRlbWVudCFcIiksXG4gICAgICBlcXVhbGl0eU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvZXF1YWxpdHkhXCIpLFxuICAgICAganVkZ2VtZW50Tm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC9qdWRnZW1lbnQhXCIpLFxuICAgICAgbWV0YXZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3F1YWxpZmllZFN0YXRlbWVudC9yZWZlcmVuY2UvbWV0YXZhcmlhYmxlIVwiKSxcbiAgICAgIHR5cGVBc3NlcnRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50L3R5cGVBc3NlcnRpb24hXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnQocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgYXNzaWdubWVudHMsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQ7XG5cbiAgY29uc3QgcXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudC4uLmAsIHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gIGNvbnN0IHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEZ1bmN0aW9ucyA9IFtcbiAgICB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdFJ1bGUsXG4gICAgdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RBeGlvbSxcbiAgICB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdExlbW1hLFxuICAgIHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0VGhlb3JlbSxcbiAgICB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdENvbmplY3R1cmUsXG4gICAgdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RSZWZlcmVuY2VcbiAgXTtcblxuICBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCA9IHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEZ1bmN0aW9ucy5zb21lKCh2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRGdW5jdGlvbikgPT4geyAgLy8vXG4gICAgY29uc3QgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQgPSB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRGdW5jdGlvbihxdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHQpO1xuXG4gICAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCkge1xuICAgIGNvbnN0IGRlcml2ZWQgPSBmYWxzZSxcbiAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIHN0YXRlZFN0YXRlbWVudFZlcmlmaWVkID0gdmVyaWZ5U3RhdGVkU3RhdGVtZW50KHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpO1xuXG4gICAgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQgPSBzdGF0ZWRTdGF0ZW1lbnRWZXJpZmllZDsgLy8vXG4gIH1cblxuICBpZiAocXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50LmAsIHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdFJ1bGUocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RSdWxlID0gZmFsc2U7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGVRdWVyeShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgcnVsZSA9IGxvY2FsQ29udGV4dC5maW5kUnVsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICBpZiAocnVsZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlUXVlcnkocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgYWdhaW5zdCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgcnVsZS4uLmAsIHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3QgcnVsZU1hdGNoZXNTdGF0ZW1lbnQgPSBydWxlLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudE5vZGUsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RSdWxlID0gcnVsZU1hdGNoZXNTdGF0ZW1lbnQ7ICAvLy9cblxuICAgIGlmIChxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RSdWxlKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIHJ1bGUuYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdFJ1bGU7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0QXhpb20ocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RBeGlvbSA9IGZhbHNlO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlUXVlcnkocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSksXG4gICAgICAgIGF4aW9tID0gbG9jYWxDb250ZXh0LmZpbmRBeGlvbUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICBpZiAoYXhpb20gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgcXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIGF4aW9tLi4uYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgICBjb25zdCBheGlvbU1hdGNoZXNTdGF0ZW1lbnQgPSBheGlvbS51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBsb2NhbENvbnRleHQpO1xuXG4gICAgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0QXhpb20gPSBheGlvbU1hdGNoZXNTdGF0ZW1lbnQ7IC8vL1xuXG4gICAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdEF4aW9tKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIGF4aW9tLmAsIHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RBeGlvbTtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RMZW1tYShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdExlbW1hID0gZmFsc2U7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGVRdWVyeShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgbGVtbWEgPSBsb2NhbENvbnRleHQuZmluZExlbW1hQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gIGlmIChsZW1tYSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlUXVlcnkocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgYWdhaW5zdCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbGVtbWEuLi5gLCBxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGxlbW1hTWF0Y2hlc1N0YXRlbWVudCA9IGxlbW1hLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudE5vZGUsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RMZW1tYSA9IGxlbW1hTWF0Y2hlc1N0YXRlbWVudDsgLy8vXG5cbiAgICBpZiAocXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0TGVtbWEpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgYWdhaW5zdCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbGVtbWEuYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdExlbW1hO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdFRoZW9yZW0ocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RUaGVvcmVtID0gZmFsc2U7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGVRdWVyeShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgdGhlb3JlbSA9IGxvY2FsQ29udGV4dC5maW5kVGhlb3JlbUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICBpZiAodGhlb3JlbSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlUXVlcnkocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgYWdhaW5zdCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgdGhlb3JlbS4uLmAsIHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3QgdGhlb3JlbU1hdGNoZXNTdGF0ZW1lbnQgPSB0aGVvcmVtLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudE5vZGUsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RUaGVvcmVtID0gdGhlb3JlbU1hdGNoZXNTdGF0ZW1lbnQ7IC8vL1xuXG4gICAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdFRoZW9yZW0pIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgYWdhaW5zdCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgdGhlb3JlbS5gLCBxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0VGhlb3JlbTtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RDb25qZWN0dXJlKHF1YWxpZmllZFN0YXRlbWVudE5vZGUsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0Q29uamVjdHVyZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlUXVlcnkocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSksXG4gICAgICAgIGNvbmplY3R1cmUgPSBsb2NhbENvbnRleHQuZmluZENvbmplY3R1cmVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgaWYgKGNvbmplY3R1cmUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgcXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIGNvbmplY3R1cmUuLi5gLCBxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGNvbmplY3R1cmVNYXRjaGVzU3RhdGVtZW50ID0gY29uamVjdHVyZS51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBsb2NhbENvbnRleHQpO1xuXG4gICAgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0Q29uamVjdHVyZSA9IGNvbmplY3R1cmVNYXRjaGVzU3RhdGVtZW50OyAvLy9cblxuICAgIGlmIChxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RDb25qZWN0dXJlKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIGNvbmplY3R1cmUuYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdENvbmplY3R1cmU7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0UmVmZXJlbmNlKHF1YWxpZmllZFN0YXRlbWVudE5vZGUsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0UmVmZXJlbmNlID0gZmFsc2U7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGVRdWVyeShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlUHJlc2VudCA9IGxvY2FsQ29udGV4dC5pc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgIHF1YWxpZmllZFN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgYWdhaW5zdCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgcmVmZXJlbmNlLi4uYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZVByZXNlbnQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIGxvY2FsQ29udGV4dEEgPSBudWxsLFxuICAgICAgICAgIGxvY2FsQ29udGV4dEIgPSBsb2NhbENvbnRleHQsIC8vL1xuICAgICAgICAgIHN0YXRlbWVudE5vZGVCID0gc3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uTm9kZUEgPSBudWxsLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVBID0gbWV0YXZhcmlhYmxlTm9kZSwgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlVmVyaWZpZWRBZ2FpbnN0U3RhdGVtZW50ID0gdW5pZnlNZXRhdmFyaWFibGVBZ2FpbnN0U3RhdGVtZW50KG1ldGF2YXJpYWJsZU5vZGVBLCBzdGF0ZW1lbnROb2RlQiwgc3Vic3RpdHV0aW9uTm9kZUEsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dEEsIGxvY2FsQ29udGV4dEIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmlmaWVkQWhlYWQgPSB0cnVlO1xuXG4gICAgICAgICAgICByZXR1cm4gdmVyaWZpZWRBaGVhZDtcbiAgICAgICAgICB9KTtcblxuICAgIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdFJlZmVyZW5jZSA9IG1ldGF2YXJpYWJsZVZlcmlmaWVkQWdhaW5zdFN0YXRlbWVudDsgLy8vXG4gIH1cblxuICBpZiAocXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0UmVmZXJlbmNlKSB7XG4gICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudCBhZ2FpbnN0IHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyByZWZlcmVuY2UuYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG4gIH1cblxuICByZXR1cm4gcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0UmVmZXJlbmNlO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlTdGF0ZWRTdGF0ZW1lbnQoc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgc3RhdGVkU3RhdGVtZW50VmVyaWZpZWQ7XG5cbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhzdGF0ZW1lbnROb2RlKTtcblxuICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVkIHN0YXRlbWVudC4uLmAsIHN0YXRlbWVudE5vZGUpO1xuXG4gIGNvbnN0IHZlcmlmeVN0YXRlZFN0YXRlbWVudEZ1bmN0aW9ucyA9IFtcbiAgICB2ZXJpZnlTdGF0ZWRTdGF0ZW1lbnRBc0VxdWFsaXR5LFxuICAgIHZlcmlmeVN0YXRlZFN0YXRlbWVudEFzSnVkZ2VtZW50LFxuICAgIHZlcmlmeVN0YXRlZFN0YXRlbWVudEFzVHlwZUFzc2VydGlvblxuICBdO1xuXG4gIHZlcmlmeVN0YXRlZFN0YXRlbWVudEZ1bmN0aW9ucy5ldmVyeSgodmVyaWZ5U3RhdGVkU3RhdGVtZW50RnVuY3Rpb24pID0+IHsgLy8vXG4gICAgY29uc3Qgc3RhdGVkU3RhdGVtZW50VmVyaWZpZWQgPSB2ZXJpZnlTdGF0ZWRTdGF0ZW1lbnRGdW5jdGlvbihzdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZWRTdGF0ZW1lbnRWZXJpZmllZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICBzdGF0ZWRTdGF0ZW1lbnRWZXJpZmllZCA9IHRydWU7IC8vL1xuXG4gIGlmIChzdGF0ZWRTdGF0ZW1lbnRWZXJpZmllZCkge1xuICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlZCBzdGF0ZW1lbnQuYCwgc3RhdGVtZW50Tm9kZSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVkU3RhdGVtZW50VmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVN0YXRlZFN0YXRlbWVudEFzRXF1YWxpdHkoc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgc3RhdGVkU3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5ID0gdHJ1ZTsgLy8vXG5cbiAgY29uc3QgZXF1YWxpdHlOb2RlID0gZXF1YWxpdHlOb2RlUXVlcnkoc3RhdGVtZW50Tm9kZSk7XG5cbiAgaWYgKGVxdWFsaXR5Tm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVkIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS4uLmAsIHN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3QgZXF1YWxpdHlWZXJpZmllZCA9IHZlcmlmeUVxdWFsaXR5KGVxdWFsaXR5Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCwgKCkgPT4ge1xuICAgICAgY29uc3QgdmVyaWZpZWRBaGVhZCA9IHRydWU7XG5cbiAgICAgIHJldHVybiB2ZXJpZmllZEFoZWFkO1xuICAgIH0pO1xuXG4gICAgc3RhdGVkU3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5ID0gZXF1YWxpdHlWZXJpZmllZDsgLy8vXG5cbiAgICBpZiAoc3RhdGVkU3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5KSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZWQgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5LmAsIHN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZWRTdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHk7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVN0YXRlZFN0YXRlbWVudEFzSnVkZ2VtZW50KHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHN0YXRlZFN0YXRlbWVudFZlcmlmaWVkQXNKdWRnZW1lbnQgPSB0cnVlO1xuXG4gIGNvbnN0IGp1ZGdlbWVudE5vZGUgPSBqdWRnZW1lbnROb2RlUXVlcnkoc3RhdGVtZW50Tm9kZSk7XG5cbiAgaWYgKGp1ZGdlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlZCBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGp1ZGdlbWVudFZlcmlmaWVkID0gdmVyaWZ5SnVkZ2VtZW50KGp1ZGdlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpO1xuXG4gICAgc3RhdGVkU3RhdGVtZW50VmVyaWZpZWRBc0p1ZGdlbWVudCA9IGp1ZGdlbWVudFZlcmlmaWVkOyAgLy8vXG5cbiAgICBpZiAoc3RhdGVkU3RhdGVtZW50VmVyaWZpZWRBc0p1ZGdlbWVudCkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVkIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC5gLCBzdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVkU3RhdGVtZW50VmVyaWZpZWRBc0p1ZGdlbWVudDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5U3RhdGVkU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZlcmlmaWVkQXNUeXBlQXNzZXJ0aW9uID0gdHJ1ZTsgIC8vL1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25Ob2RlID0gdHlwZUFzc2VydGlvbk5vZGVRdWVyeShzdGF0ZW1lbnROb2RlKTtcblxuICBpZiAodHlwZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlZCBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi4uLmAsIHN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvblZlcmlmaWVkID0gdmVyaWZ5VHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uTm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBzdGF0ZW1lbnRWZXJpZmllZEFzVHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25WZXJpZmllZDsgLy8vXG5cbiAgICBpZiAoc3RhdGVtZW50VmVyaWZpZWRBc1R5cGVBc3NlcnRpb24pIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlZCBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi5gLCBzdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmVyaWZpZWRBc1R5cGVBc3NlcnRpb247XG59XG4iXSwibmFtZXMiOlsidmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwiZXF1YWxpdHlOb2RlUXVlcnkiLCJqdWRnZW1lbnROb2RlUXVlcnkiLCJtZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJ0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5IiwicXVhbGlmaWVkU3RhdGVtZW50Tm9kZSIsInN1YnN0aXR1dGlvbnMiLCJhc3NpZ25tZW50cyIsImxvY2FsQ29udGV4dCIsInF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkIiwicXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nIiwibm9kZUFzU3RyaW5nIiwidHJhY2UiLCJ2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRGdW5jdGlvbnMiLCJ2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdFJ1bGUiLCJ2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdEF4aW9tIiwidmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RMZW1tYSIsInZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0VGhlb3JlbSIsInZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0Q29uamVjdHVyZSIsInZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0UmVmZXJlbmNlIiwic29tZSIsInZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEZ1bmN0aW9uIiwiZGVyaXZlZCIsInN0YXRlbWVudE5vZGUiLCJzdGF0ZWRTdGF0ZW1lbnRWZXJpZmllZCIsInZlcmlmeVN0YXRlZFN0YXRlbWVudCIsImRlYnVnIiwicXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0UnVsZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJydWxlIiwiZmluZFJ1bGVCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVTdHJpbmciLCJydWxlTWF0Y2hlc1N0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50IiwicXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0QXhpb20iLCJheGlvbSIsImZpbmRBeGlvbUJ5TWV0YXZhcmlhYmxlTm9kZSIsImF4aW9tTWF0Y2hlc1N0YXRlbWVudCIsInF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdExlbW1hIiwibGVtbWEiLCJmaW5kTGVtbWFCeU1ldGF2YXJpYWJsZU5vZGUiLCJsZW1tYU1hdGNoZXNTdGF0ZW1lbnQiLCJxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RUaGVvcmVtIiwidGhlb3JlbSIsImZpbmRUaGVvcmVtQnlNZXRhdmFyaWFibGVOb2RlIiwidGhlb3JlbU1hdGNoZXNTdGF0ZW1lbnQiLCJxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RDb25qZWN0dXJlIiwiY29uamVjdHVyZSIsImZpbmRDb25qZWN0dXJlQnlNZXRhdmFyaWFibGVOb2RlIiwiY29uamVjdHVyZU1hdGNoZXNTdGF0ZW1lbnQiLCJxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RSZWZlcmVuY2UiLCJtZXRhdmFyaWFibGVQcmVzZW50IiwiaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwibG9jYWxDb250ZXh0QSIsImxvY2FsQ29udGV4dEIiLCJzdGF0ZW1lbnROb2RlQiIsInN1YnN0aXR1dGlvbk5vZGVBIiwibWV0YXZhcmlhYmxlTm9kZUEiLCJtZXRhdmFyaWFibGVWZXJpZmllZEFnYWluc3RTdGF0ZW1lbnQiLCJ1bmlmeU1ldGF2YXJpYWJsZUFnYWluc3RTdGF0ZW1lbnQiLCJ2ZXJpZmllZEFoZWFkIiwic3RhdGVtZW50U3RyaW5nIiwidmVyaWZ5U3RhdGVkU3RhdGVtZW50RnVuY3Rpb25zIiwidmVyaWZ5U3RhdGVkU3RhdGVtZW50QXNFcXVhbGl0eSIsInZlcmlmeVN0YXRlZFN0YXRlbWVudEFzSnVkZ2VtZW50IiwidmVyaWZ5U3RhdGVkU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwiZXZlcnkiLCJ2ZXJpZnlTdGF0ZWRTdGF0ZW1lbnRGdW5jdGlvbiIsInN0YXRlZFN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSIsImVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5VmVyaWZpZWQiLCJ2ZXJpZnlFcXVhbGl0eSIsInN0YXRlZFN0YXRlbWVudFZlcmlmaWVkQXNKdWRnZW1lbnQiLCJqdWRnZW1lbnROb2RlIiwianVkZ2VtZW50VmVyaWZpZWQiLCJ2ZXJpZnlKdWRnZW1lbnQiLCJzdGF0ZW1lbnRWZXJpZmllZEFzVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUFzc2VydGlvblZlcmlmaWVkIiwidmVyaWZ5VHlwZUFzc2VydGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBZUE7OztlQUF3QkE7OzsrREFiRztnRUFDQzsyREFDSTttRkFDYztxQkFFcEI7Ozs7OztBQUUxQixJQUFNQyxxQkFBcUJDLElBQUFBLGdCQUFTLEVBQUMsbUNBQy9CQyxvQkFBb0JELElBQUFBLGdCQUFTLEVBQUMseUJBQzlCRSxxQkFBcUJGLElBQUFBLGdCQUFTLEVBQUMsMEJBQy9CRyx3QkFBd0JILElBQUFBLGdCQUFTLEVBQUMsZ0RBQ2xDSSx5QkFBeUJKLElBQUFBLGdCQUFTLEVBQUM7QUFFMUIsU0FBU0YseUJBQXlCTyxzQkFBc0IsRUFBRUMsYUFBYSxFQUFFQyxXQUFXLEVBQUVDLFlBQVk7SUFDL0csSUFBSUM7SUFFSixJQUFNQywyQkFBMkJGLGFBQWFHLFlBQVksQ0FBQ047SUFFM0RHLGFBQWFJLEtBQUssQ0FBQyxBQUFDLGtCQUEwQyxPQUF6QkYsMEJBQXlCLDZCQUEyQkw7SUFFekYsSUFBTVEsb0NBQW9DO1FBQ3hDQztRQUNBQztRQUNBQztRQUNBQztRQUNBQztRQUNBQztLQUNEO0lBRURWLDZCQUE2Qkksa0NBQWtDTyxJQUFJLENBQUMsU0FBQ0M7UUFDbkUsSUFBTVosNkJBQTZCWSxpQ0FBaUNoQix3QkFBd0JDLGVBQWVFO1FBRTNHLElBQUlDLDRCQUE0QjtZQUM5QixPQUFPO1FB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
|
|
199
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50L3F1YWxpZmllZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHZlcmlmeUVxdWFsaXR5IGZyb20gXCIuLi9lcXVhbGl0eVwiO1xuaW1wb3J0IHZlcmlmeUp1ZGdlbWVudCBmcm9tIFwiLi4vanVkZ2VtZW50XCI7XG5pbXBvcnQgdmVyaWZ5VHlwZUFzc2VydGlvbiBmcm9tIFwiLi4vYXNzZXJ0aW9uL3R5cGVcIjtcbmltcG9ydCB1bmlmeU1ldGF2YXJpYWJsZUFnYWluc3RTdGF0ZW1lbnQgZnJvbSBcIi4uLy4uL3VuaWZ5L21ldGF2YXJpYWJsZUFnYWluc3RTdGF0ZW1lbnRcIjtcblxuaW1wb3J0IHsgbm9kZVF1ZXJ5IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9xdWVyeVwiO1xuXG5jb25zdCBzdGF0ZW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvcXVhbGlmaWVkU3RhdGVtZW50L3N0YXRlbWVudCFcIiksXG4gICAgICBlcXVhbGl0eU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvZXF1YWxpdHkhXCIpLFxuICAgICAganVkZ2VtZW50Tm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC9qdWRnZW1lbnQhXCIpLFxuICAgICAgbWV0YXZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3F1YWxpZmllZFN0YXRlbWVudC9yZWZlcmVuY2UvbWV0YXZhcmlhYmxlIVwiKSxcbiAgICAgIHR5cGVBc3NlcnRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50L3R5cGVBc3NlcnRpb24hXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnQocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgYXNzaWdubWVudHMsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQ7XG5cbiAgY29uc3QgcXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudC4uLmAsIHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gIGNvbnN0IHVuaWZ5UXVhbGlmaWVkU3RhdGVtZW50RnVuY3Rpb25zID0gW1xuICAgIHVuaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RSdWxlLFxuICAgIHVuaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RBeGlvbSxcbiAgICB1bmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0TGVtbWEsXG4gICAgdW5pZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdFRoZW9yZW0sXG4gICAgdW5pZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdENvbmplY3R1cmUsXG4gICAgdW5pZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdFJlZmVyZW5jZVxuICBdO1xuXG4gIGNvbnN0IHF1YWxpZmllZFN0YXRlbWVudFVuaWZpZWQgPSB1bmlmeVF1YWxpZmllZFN0YXRlbWVudEZ1bmN0aW9ucy5zb21lKCh1bmlmeVF1YWxpZmllZFN0YXRlbWVudEZ1bmN0aW9uKSA9PiB7ICAvLy9cbiAgICBjb25zdCBxdWFsaWZpZWRTdGF0ZW1lbnRVbmlmaWVkID0gdW5pZnlRdWFsaWZpZWRTdGF0ZW1lbnRGdW5jdGlvbihxdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHQpO1xuXG4gICAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFVuaWZpZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFVuaWZpZWQpIHtcbiAgICBjb25zdCBkZXJpdmVkID0gZmFsc2UsXG4gICAgICAgICAgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGVRdWVyeShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICBzdGF0ZWRTdGF0ZW1lbnRWZXJpZmllZCA9IHZlcmlmeVN0YXRlZFN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkID0gc3RhdGVkU3RhdGVtZW50VmVyaWZpZWQ7IC8vL1xuICB9XG5cbiAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudC5gLCBxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcbiAgfVxuXG4gIHJldHVybiBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZDtcbn1cblxuZnVuY3Rpb24gdW5pZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdFJ1bGUocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBxdWFsaWZpZWRTdGF0ZW1lbnRVbmlmaWVkQWdhaW5zdFJ1bGUgPSBmYWxzZTtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gbWV0YXZhcmlhYmxlTm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICBydWxlID0gbG9jYWxDb250ZXh0LmZpbmRSdWxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gIGlmIChydWxlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGVRdWVyeShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIHF1YWxpZmllZFN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIHJ1bGUuLi5gLCBxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IHJ1bGVNYXRjaGVzU3RhdGVtZW50ID0gcnVsZS51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBsb2NhbENvbnRleHQpO1xuXG4gICAgcXVhbGlmaWVkU3RhdGVtZW50VW5pZmllZEFnYWluc3RSdWxlID0gcnVsZU1hdGNoZXNTdGF0ZW1lbnQ7ICAvLy9cblxuICAgIGlmIChxdWFsaWZpZWRTdGF0ZW1lbnRVbmlmaWVkQWdhaW5zdFJ1bGUpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudCBhZ2FpbnN0IHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBydWxlLmAsIHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBxdWFsaWZpZWRTdGF0ZW1lbnRVbmlmaWVkQWdhaW5zdFJ1bGU7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RBeGlvbShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHF1YWxpZmllZFN0YXRlbWVudFVuaWZpZWRBZ2FpbnN0QXhpb20gPSBmYWxzZTtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gbWV0YXZhcmlhYmxlTm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICBheGlvbSA9IGxvY2FsQ29udGV4dC5maW5kQXhpb21CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgaWYgKGF4aW9tICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGVRdWVyeShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIHF1YWxpZmllZFN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIGF4aW9tLi4uYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgICBjb25zdCBheGlvbU1hdGNoZXNTdGF0ZW1lbnQgPSBheGlvbS51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBsb2NhbENvbnRleHQpO1xuXG4gICAgcXVhbGlmaWVkU3RhdGVtZW50VW5pZmllZEFnYWluc3RBeGlvbSA9IGF4aW9tTWF0Y2hlc1N0YXRlbWVudDsgLy8vXG5cbiAgICBpZiAocXVhbGlmaWVkU3RhdGVtZW50VW5pZmllZEFnYWluc3RBeGlvbSkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIGF4aW9tLmAsIHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBxdWFsaWZpZWRTdGF0ZW1lbnRVbmlmaWVkQWdhaW5zdEF4aW9tO1xufVxuXG5mdW5jdGlvbiB1bmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0TGVtbWEocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBxdWFsaWZpZWRTdGF0ZW1lbnRVbmlmaWVkQWdhaW5zdExlbW1hID0gZmFsc2U7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGVRdWVyeShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgbGVtbWEgPSBsb2NhbENvbnRleHQuZmluZExlbW1hQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gIGlmIChsZW1tYSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlUXVlcnkocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudCBhZ2FpbnN0IHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBsZW1tYS4uLmAsIHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3QgbGVtbWFNYXRjaGVzU3RhdGVtZW50ID0gbGVtbWEudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50Tm9kZSwgbG9jYWxDb250ZXh0KTtcblxuICAgIHF1YWxpZmllZFN0YXRlbWVudFVuaWZpZWRBZ2FpbnN0TGVtbWEgPSBsZW1tYU1hdGNoZXNTdGF0ZW1lbnQ7IC8vL1xuXG4gICAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFVuaWZpZWRBZ2FpbnN0TGVtbWEpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudCBhZ2FpbnN0IHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBsZW1tYS5gLCBxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcXVhbGlmaWVkU3RhdGVtZW50VW5pZmllZEFnYWluc3RMZW1tYTtcbn1cblxuZnVuY3Rpb24gdW5pZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdFRoZW9yZW0ocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBxdWFsaWZpZWRTdGF0ZW1lbnRVbmlmaWVkQWdhaW5zdFRoZW9yZW0gPSBmYWxzZTtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gbWV0YXZhcmlhYmxlTm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICB0aGVvcmVtID0gbG9jYWxDb250ZXh0LmZpbmRUaGVvcmVtQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gIGlmICh0aGVvcmVtICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGVRdWVyeShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIHF1YWxpZmllZFN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIHRoZW9yZW0uLi5gLCBxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IHRoZW9yZW1NYXRjaGVzU3RhdGVtZW50ID0gdGhlb3JlbS51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBsb2NhbENvbnRleHQpO1xuXG4gICAgcXVhbGlmaWVkU3RhdGVtZW50VW5pZmllZEFnYWluc3RUaGVvcmVtID0gdGhlb3JlbU1hdGNoZXNTdGF0ZW1lbnQ7IC8vL1xuXG4gICAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFVuaWZpZWRBZ2FpbnN0VGhlb3JlbSkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIHRoZW9yZW0uYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHF1YWxpZmllZFN0YXRlbWVudFVuaWZpZWRBZ2FpbnN0VGhlb3JlbTtcbn1cblxuZnVuY3Rpb24gdW5pZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdENvbmplY3R1cmUocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBxdWFsaWZpZWRTdGF0ZW1lbnRVbmlmaWVkQWdhaW5zdENvbmplY3R1cmUgPSBmYWxzZTtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gbWV0YXZhcmlhYmxlTm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICBjb25qZWN0dXJlID0gbG9jYWxDb250ZXh0LmZpbmRDb25qZWN0dXJlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gIGlmIChjb25qZWN0dXJlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGVRdWVyeShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIHF1YWxpZmllZFN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIGNvbmplY3R1cmUuLi5gLCBxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGNvbmplY3R1cmVNYXRjaGVzU3RhdGVtZW50ID0gY29uamVjdHVyZS51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBsb2NhbENvbnRleHQpO1xuXG4gICAgcXVhbGlmaWVkU3RhdGVtZW50VW5pZmllZEFnYWluc3RDb25qZWN0dXJlID0gY29uamVjdHVyZU1hdGNoZXNTdGF0ZW1lbnQ7IC8vL1xuXG4gICAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFVuaWZpZWRBZ2FpbnN0Q29uamVjdHVyZSkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIGNvbmplY3R1cmUuYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHF1YWxpZmllZFN0YXRlbWVudFVuaWZpZWRBZ2FpbnN0Q29uamVjdHVyZTtcbn1cblxuZnVuY3Rpb24gdW5pZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdFJlZmVyZW5jZShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHF1YWxpZmllZFN0YXRlbWVudFVuaWZpZWRBZ2FpbnN0UmVmZXJlbmNlID0gZmFsc2U7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGVRdWVyeShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlUHJlc2VudCA9IGxvY2FsQ29udGV4dC5pc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgIHF1YWxpZmllZFN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgbG9jYWxDb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudCBhZ2FpbnN0IHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyByZWZlcmVuY2UuLi5gLCBxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICBpZiAobWV0YXZhcmlhYmxlUHJlc2VudCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlUXVlcnkocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgbG9jYWxDb250ZXh0QSA9IG51bGwsXG4gICAgICAgICAgbG9jYWxDb250ZXh0QiA9IGxvY2FsQ29udGV4dCwgLy8vXG4gICAgICAgICAgc3RhdGVtZW50Tm9kZUIgPSBzdGF0ZW1lbnROb2RlLCAvLy9cbiAgICAgICAgICBzdWJzdGl0dXRpb25Ob2RlQSA9IG51bGwsXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZUEgPSBtZXRhdmFyaWFibGVOb2RlLCAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGVWZXJpZmllZEFnYWluc3RTdGF0ZW1lbnQgPSB1bmlmeU1ldGF2YXJpYWJsZUFnYWluc3RTdGF0ZW1lbnQobWV0YXZhcmlhYmxlTm9kZUEsIHN0YXRlbWVudE5vZGVCLCBzdWJzdGl0dXRpb25Ob2RlQSwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0QSwgbG9jYWxDb250ZXh0QiwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyaWZpZWRBaGVhZCA9IHRydWU7XG5cbiAgICAgICAgICAgIHJldHVybiB2ZXJpZmllZEFoZWFkO1xuICAgICAgICAgIH0pO1xuXG4gICAgcXVhbGlmaWVkU3RhdGVtZW50VW5pZmllZEFnYWluc3RSZWZlcmVuY2UgPSBtZXRhdmFyaWFibGVWZXJpZmllZEFnYWluc3RTdGF0ZW1lbnQ7IC8vL1xuICB9XG5cbiAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFVuaWZpZWRBZ2FpbnN0UmVmZXJlbmNlKSB7XG4gICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIHJlZmVyZW5jZS5gLCBxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcbiAgfVxuXG4gIHJldHVybiBxdWFsaWZpZWRTdGF0ZW1lbnRVbmlmaWVkQWdhaW5zdFJlZmVyZW5jZTtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5U3RhdGVkU3RhdGVtZW50KHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHN0YXRlZFN0YXRlbWVudFZlcmlmaWVkO1xuXG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcoc3RhdGVtZW50Tm9kZSk7XG5cbiAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlZCBzdGF0ZW1lbnQuLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICBjb25zdCB2ZXJpZnlTdGF0ZWRTdGF0ZW1lbnRGdW5jdGlvbnMgPSBbXG4gICAgdmVyaWZ5U3RhdGVkU3RhdGVtZW50QXNFcXVhbGl0eSxcbiAgICB2ZXJpZnlTdGF0ZWRTdGF0ZW1lbnRBc0p1ZGdlbWVudCxcbiAgICB2ZXJpZnlTdGF0ZWRTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb25cbiAgXTtcblxuICB2ZXJpZnlTdGF0ZWRTdGF0ZW1lbnRGdW5jdGlvbnMuZXZlcnkoKHZlcmlmeVN0YXRlZFN0YXRlbWVudEZ1bmN0aW9uKSA9PiB7IC8vL1xuICAgIGNvbnN0IHN0YXRlZFN0YXRlbWVudFZlcmlmaWVkID0gdmVyaWZ5U3RhdGVkU3RhdGVtZW50RnVuY3Rpb24oc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBpZiAoc3RhdGVkU3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgc3RhdGVkU3RhdGVtZW50VmVyaWZpZWQgPSB0cnVlOyAvLy9cblxuICBpZiAoc3RhdGVkU3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZWQgc3RhdGVtZW50LmAsIHN0YXRlbWVudE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlZFN0YXRlbWVudFZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlTdGF0ZWRTdGF0ZW1lbnRBc0VxdWFsaXR5KHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHN0YXRlZFN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSA9IHRydWU7IC8vL1xuXG4gIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IGVxdWFsaXR5Tm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpO1xuXG4gIGlmIChlcXVhbGl0eU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlZCBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGVxdWFsaXR5VmVyaWZpZWQgPSB2ZXJpZnlFcXVhbGl0eShlcXVhbGl0eU5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpO1xuXG4gICAgc3RhdGVkU3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5ID0gZXF1YWxpdHlWZXJpZmllZDsgLy8vXG5cbiAgICBpZiAoc3RhdGVkU3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5KSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZWQgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5LmAsIHN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZWRTdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHk7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVN0YXRlZFN0YXRlbWVudEFzSnVkZ2VtZW50KHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHN0YXRlZFN0YXRlbWVudFZlcmlmaWVkQXNKdWRnZW1lbnQgPSB0cnVlO1xuXG4gIGNvbnN0IGp1ZGdlbWVudE5vZGUgPSBqdWRnZW1lbnROb2RlUXVlcnkoc3RhdGVtZW50Tm9kZSk7XG5cbiAgaWYgKGp1ZGdlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlZCBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGp1ZGdlbWVudFZlcmlmaWVkID0gdmVyaWZ5SnVkZ2VtZW50KGp1ZGdlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpO1xuXG4gICAgc3RhdGVkU3RhdGVtZW50VmVyaWZpZWRBc0p1ZGdlbWVudCA9IGp1ZGdlbWVudFZlcmlmaWVkOyAgLy8vXG5cbiAgICBpZiAoc3RhdGVkU3RhdGVtZW50VmVyaWZpZWRBc0p1ZGdlbWVudCkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVkIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC5gLCBzdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVkU3RhdGVtZW50VmVyaWZpZWRBc0p1ZGdlbWVudDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5U3RhdGVkU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZlcmlmaWVkQXNUeXBlQXNzZXJ0aW9uID0gdHJ1ZTsgIC8vL1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25Ob2RlID0gdHlwZUFzc2VydGlvbk5vZGVRdWVyeShzdGF0ZW1lbnROb2RlKTtcblxuICBpZiAodHlwZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlZCBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi4uLmAsIHN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvblZlcmlmaWVkID0gdmVyaWZ5VHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uTm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBzdGF0ZW1lbnRWZXJpZmllZEFzVHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25WZXJpZmllZDsgLy8vXG5cbiAgICBpZiAoc3RhdGVtZW50VmVyaWZpZWRBc1R5cGVBc3NlcnRpb24pIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlZCBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi5gLCBzdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmVyaWZpZWRBc1R5cGVBc3NlcnRpb247XG59XG4iXSwibmFtZXMiOlsidmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwiZXF1YWxpdHlOb2RlUXVlcnkiLCJqdWRnZW1lbnROb2RlUXVlcnkiLCJtZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJ0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5IiwicXVhbGlmaWVkU3RhdGVtZW50Tm9kZSIsInN1YnN0aXR1dGlvbnMiLCJhc3NpZ25tZW50cyIsImxvY2FsQ29udGV4dCIsInF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkIiwicXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nIiwibm9kZUFzU3RyaW5nIiwidHJhY2UiLCJ1bmlmeVF1YWxpZmllZFN0YXRlbWVudEZ1bmN0aW9ucyIsInVuaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RSdWxlIiwidW5pZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdEF4aW9tIiwidW5pZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdExlbW1hIiwidW5pZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdFRoZW9yZW0iLCJ1bmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0Q29uamVjdHVyZSIsInVuaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RSZWZlcmVuY2UiLCJxdWFsaWZpZWRTdGF0ZW1lbnRVbmlmaWVkIiwic29tZSIsInVuaWZ5UXVhbGlmaWVkU3RhdGVtZW50RnVuY3Rpb24iLCJkZXJpdmVkIiwic3RhdGVtZW50Tm9kZSIsInN0YXRlZFN0YXRlbWVudFZlcmlmaWVkIiwidmVyaWZ5U3RhdGVkU3RhdGVtZW50IiwiZGVidWciLCJxdWFsaWZpZWRTdGF0ZW1lbnRVbmlmaWVkQWdhaW5zdFJ1bGUiLCJtZXRhdmFyaWFibGVOb2RlIiwicnVsZSIsImZpbmRSdWxlQnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwicnVsZU1hdGNoZXNTdGF0ZW1lbnQiLCJ1bmlmeVN0YXRlbWVudCIsInF1YWxpZmllZFN0YXRlbWVudFVuaWZpZWRBZ2FpbnN0QXhpb20iLCJheGlvbSIsImZpbmRBeGlvbUJ5TWV0YXZhcmlhYmxlTm9kZSIsImF4aW9tTWF0Y2hlc1N0YXRlbWVudCIsInF1YWxpZmllZFN0YXRlbWVudFVuaWZpZWRBZ2FpbnN0TGVtbWEiLCJsZW1tYSIsImZpbmRMZW1tYUJ5TWV0YXZhcmlhYmxlTm9kZSIsImxlbW1hTWF0Y2hlc1N0YXRlbWVudCIsInF1YWxpZmllZFN0YXRlbWVudFVuaWZpZWRBZ2FpbnN0VGhlb3JlbSIsInRoZW9yZW0iLCJmaW5kVGhlb3JlbUJ5TWV0YXZhcmlhYmxlTm9kZSIsInRoZW9yZW1NYXRjaGVzU3RhdGVtZW50IiwicXVhbGlmaWVkU3RhdGVtZW50VW5pZmllZEFnYWluc3RDb25qZWN0dXJlIiwiY29uamVjdHVyZSIsImZpbmRDb25qZWN0dXJlQnlNZXRhdmFyaWFibGVOb2RlIiwiY29uamVjdHVyZU1hdGNoZXNTdGF0ZW1lbnQiLCJxdWFsaWZpZWRTdGF0ZW1lbnRVbmlmaWVkQWdhaW5zdFJlZmVyZW5jZSIsIm1ldGF2YXJpYWJsZVByZXNlbnQiLCJpc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUiLCJsb2NhbENvbnRleHRBIiwibG9jYWxDb250ZXh0QiIsInN0YXRlbWVudE5vZGVCIiwic3Vic3RpdHV0aW9uTm9kZUEiLCJtZXRhdmFyaWFibGVOb2RlQSIsIm1ldGF2YXJpYWJsZVZlcmlmaWVkQWdhaW5zdFN0YXRlbWVudCIsInVuaWZ5TWV0YXZhcmlhYmxlQWdhaW5zdFN0YXRlbWVudCIsInZlcmlmaWVkQWhlYWQiLCJzdGF0ZW1lbnRTdHJpbmciLCJ2ZXJpZnlTdGF0ZWRTdGF0ZW1lbnRGdW5jdGlvbnMiLCJ2ZXJpZnlTdGF0ZWRTdGF0ZW1lbnRBc0VxdWFsaXR5IiwidmVyaWZ5U3RhdGVkU3RhdGVtZW50QXNKdWRnZW1lbnQiLCJ2ZXJpZnlTdGF0ZWRTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJldmVyeSIsInZlcmlmeVN0YXRlZFN0YXRlbWVudEZ1bmN0aW9uIiwic3RhdGVkU3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5IiwiZXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlWZXJpZmllZCIsInZlcmlmeUVxdWFsaXR5Iiwic3RhdGVkU3RhdGVtZW50VmVyaWZpZWRBc0p1ZGdlbWVudCIsImp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnRWZXJpZmllZCIsInZlcmlmeUp1ZGdlbWVudCIsInN0YXRlbWVudFZlcmlmaWVkQXNUeXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlQXNzZXJ0aW9uVmVyaWZpZWQiLCJ2ZXJpZnlUeXBlQXNzZXJ0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFlQTs7O2VBQXdCQTs7OytEQWJHO2dFQUNDOzJEQUNJO21GQUNjO3FCQUVwQjs7Ozs7O0FBRTFCLElBQU1DLHFCQUFxQkMsSUFBQUEsZ0JBQVMsRUFBQyxtQ0FDL0JDLG9CQUFvQkQsSUFBQUEsZ0JBQVMsRUFBQyx5QkFDOUJFLHFCQUFxQkYsSUFBQUEsZ0JBQVMsRUFBQywwQkFDL0JHLHdCQUF3QkgsSUFBQUEsZ0JBQVMsRUFBQyxnREFDbENJLHlCQUF5QkosSUFBQUEsZ0JBQVMsRUFBQztBQUUxQixTQUFTRix5QkFBeUJPLHNCQUFzQixFQUFFQyxhQUFhLEVBQUVDLFdBQVcsRUFBRUMsWUFBWTtJQUMvRyxJQUFJQztJQUVKLElBQU1DLDJCQUEyQkYsYUFBYUcsWUFBWSxDQUFDTjtJQUUzREcsYUFBYUksS0FBSyxDQUFDLEFBQUMsa0JBQTBDLE9BQXpCRiwwQkFBeUIsNkJBQTJCTDtJQUV6RixJQUFNUSxtQ0FBbUM7UUFDdkNDO1FBQ0FDO1FBQ0FDO1FBQ0FDO1FBQ0FDO1FBQ0FDO0tBQ0Q7SUFFRCxJQUFNQyw0QkFBNEJQLGlDQUFpQ1EsSUFBSSxDQUFDLFNBQUNDO1FBQ3ZFLElBQU1GLDRCQUE0QkUsZ0NBQWdDakIsd0JBQXdCQyxlQUFlRTtRQUV6RyxJQUFJWSwyQkFBMkI7WUFDN0IsT0FBTztRQUNUO0lBQ0Y7SUFFQSxJQUFJQSwyQkFBMkI7UUFDN0IsSUFBTUcsVUFBVSxPQUNWQyxnQkFBZ0J6QixtQkFBbUJNLHlCQUNuQ29CLDBCQUEwQkMsc0JBQXNCRixlQUFlakIsYUFBYWdCLFNBQVNmO1FB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
|
|
@@ -43,7 +43,7 @@ function verifyDerivedUnqualifiedStatement(unqualifiedStatementNode, assignments
|
|
|
43
43
|
if (derived) {
|
|
44
44
|
var statementNode = statementNodeQuery(unqualifiedStatementNode), unqualifiedStatementString = localContext.nodeAsString(unqualifiedStatementNode);
|
|
45
45
|
localContext.trace("Verifying the '".concat(unqualifiedStatementString, "' derived unqualified statement..."), unqualifiedStatementNode);
|
|
46
|
-
var statementUnified = localContext.unifyStatement(statementNode);
|
|
46
|
+
var statementUnified = localContext.unifyStatement(statementNode, localContext);
|
|
47
47
|
if (statementUnified) {
|
|
48
48
|
derivedUnqualifiedStatementVerified = true;
|
|
49
49
|
} else {
|
|
@@ -95,10 +95,7 @@ function verifyDerivedStatementAsEquality(statementNode, assignments, derived, l
|
|
|
95
95
|
if (equalityNode !== null) {
|
|
96
96
|
var statementString = localContext.nodeAsString(statementNode);
|
|
97
97
|
localContext.trace("Verifying the '".concat(statementString, "' derived statement as an equality..."), statementNode);
|
|
98
|
-
var equalityVerified = (0, _equality.default)(equalityNode, assignments, derived, localContext
|
|
99
|
-
var verifiedAhead = true;
|
|
100
|
-
return verifiedAhead;
|
|
101
|
-
});
|
|
98
|
+
var equalityVerified = (0, _equality.default)(equalityNode, assignments, derived, localContext);
|
|
102
99
|
derivedStatementVerifiedAsEquality = equalityVerified; ///
|
|
103
100
|
if (derivedStatementVerifiedAsEquality) {
|
|
104
101
|
localContext.debug("...verified the '".concat(statementString, "' derived statement as an equality."), statementNode);
|
|
@@ -135,4 +132,4 @@ function verifyDerivedStatementAsTypeAssertion(statementNode, assignments, deriv
|
|
|
135
132
|
return statementVerifiedAsTypeAssertion;
|
|
136
133
|
}
|
|
137
134
|
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50L3VucXVhbGlmaWVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgdmVyaWZ5RXF1YWxpdHkgZnJvbSBcIi4uLy4uL3ZlcmlmeS9lcXVhbGl0eVwiO1xuaW1wb3J0IHZlcmlmeUp1ZGdlbWVudCBmcm9tIFwiLi4vLi4vdmVyaWZ5L2p1ZGdlbWVudFwiO1xuaW1wb3J0IHZlcmlmeVN0YXRlbWVudCBmcm9tIFwiLi4vLi4vdmVyaWZ5L3N0YXRlbWVudFwiO1xuaW1wb3J0IHZlcmlmeVR5cGVBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvbi90eXBlXCI7XG5cbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvcXVlcnlcIjtcblxuY29uc3Qgc3RhdGVtZW50Tm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3VucXVhbGlmaWVkU3RhdGVtZW50L3N0YXRlbWVudCFcIiksXG4gICAgICBlcXVhbGl0eU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvZXF1YWxpdHkhXCIpLFxuICAgICAganVkZ2VtZW50Tm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC9qdWRnZW1lbnQhXCIpLFxuICAgICAgdHlwZUFzc2VydGlvbk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvdHlwZUFzc2VydGlvbiFcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZlcmlmeVVucXVhbGlmaWVkU3RhdGVtZW50KHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgdW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZDtcblxuICBjb25zdCB1bnF1YWxpZmllZFN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcodW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dW5xdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyB1bnF1YWxpZmllZCBzdGF0ZW1lbnQuLi5gLCB1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gIGNvbnN0IHZlcmlmeVVucXVhbGlmaWVkU3RhdGVtZW50RnVuY3Rpb25zID0gW1xuICAgIHZlcmlmeURlcml2ZWRVbnF1YWxpZmllZFN0YXRlbWVudCxcbiAgICB2ZXJpZnlTdGF0ZWRVbnF1YWxpZmllZFN0YXRlbWVudFxuICBdO1xuXG4gIHVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQgPSB2ZXJpZnlVbnF1YWxpZmllZFN0YXRlbWVudEZ1bmN0aW9ucy5zb21lKCh2ZXJpZnlVbnF1YWxpZmllZFN0YXRlbWVudEZ1bmN0aW9uKSA9PiB7XG4gICAgY29uc3QgdW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCA9IHZlcmlmeVVucXVhbGlmaWVkU3RhdGVtZW50RnVuY3Rpb24odW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgIGlmICh1bnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmICh1bnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dW5xdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyB1bnF1YWxpZmllZCBzdGF0ZW1lbnQuYCwgdW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcbiAgfVxuXG4gIHJldHVybiB1bnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlEZXJpdmVkVW5xdWFsaWZpZWRTdGF0ZW1lbnQodW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBkZXJpdmVkVW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCA9IGZhbHNlO1xuXG4gIGlmIChkZXJpdmVkKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGVRdWVyeSh1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIHVucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyh1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3VucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgZGVyaXZlZCB1bnF1YWxpZmllZCBzdGF0ZW1lbnQuLi5gLCB1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50VW5pZmllZCA9IGxvY2FsQ29udGV4dC51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnROb2RlKTtcblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVkKSB7XG4gICAgICBkZXJpdmVkVW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlUXVlcnkodW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICAgIGRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZCA9IHZlcmlmeURlcml2ZWRTdGF0ZW1lbnQoc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICAgIGRlcml2ZWRVbnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkID0gZGVyaXZlZFN0YXRlbWVudFZlcmlmaWVkOyAvLy9cbiAgICB9XG5cbiAgICBpZiAoZGVyaXZlZFVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3VucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgZGVyaXZlZCB1bnF1YWxpZmllZCBzdGF0ZW1lbnQuYCwgdW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVyaXZlZFVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVN0YXRlZFVucXVhbGlmaWVkU3RhdGVtZW50KHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgc3RhdGVkVW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCA9IGZhbHNlO1xuXG4gIGlmICghZGVyaXZlZCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlUXVlcnkodW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICB1bnF1YWxpZmllZFN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcodW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt1bnF1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHN0YXRlZCB1bnF1YWxpZmllZCBzdGF0ZW1lbnQuLi5gLCB1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50VmVyaWZpZWQgPSB2ZXJpZnlTdGF0ZW1lbnQoc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBzdGF0ZWRVbnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkID0gc3RhdGVtZW50VmVyaWZpZWQ7IC8vL1xuXG4gICAgaWYgKHN0YXRlZFVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3VucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgc3RhdGVkIHVucXVhbGlmaWVkIHN0YXRlbWVudC5gLCB1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZWRVbnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlEZXJpdmVkU3RhdGVtZW50KHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IGRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZDtcblxuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHN0YXRlbWVudE5vZGUpO1xuXG4gIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBkZXJpdmVkIHN0YXRlbWVudC4uLmAsIHN0YXRlbWVudE5vZGUpO1xuXG4gIGNvbnN0IHZlcmlmeURlcml2ZWRTdGF0ZW1lbnRGdW5jdGlvbnMgPSBbXG4gICAgdmVyaWZ5RGVyaXZlZFN0YXRlbWVudEFzRXF1YWxpdHksXG4gICAgdmVyaWZ5RGVyaXZlZFN0YXRlbWVudEFzSnVkZ2VtZW50LFxuICAgIHZlcmlmeURlcml2ZWRTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb25cbiAgXTtcblxuICBkZXJpdmVkU3RhdGVtZW50VmVyaWZpZWQgPSB2ZXJpZnlEZXJpdmVkU3RhdGVtZW50RnVuY3Rpb25zLmV2ZXJ5KCh2ZXJpZnlEZXJpdmVkU3RhdGVtZW50RnVuY3Rpb24pID0+IHsgIC8vL1xuICAgIGNvbnN0IGRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZCA9IHZlcmlmeURlcml2ZWRTdGF0ZW1lbnRGdW5jdGlvbihzdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgIGlmIChkZXJpdmVkU3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZCkge1xuICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIGRlcml2ZWQgc3RhdGVtZW50LmAsIHN0YXRlbWVudE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIGRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5RGVyaXZlZFN0YXRlbWVudEFzRXF1YWxpdHkoc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgZGVyaXZlZFN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSA9IHRydWU7IC8vL1xuXG4gIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IGVxdWFsaXR5Tm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpO1xuXG4gIGlmIChlcXVhbGl0eU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIGRlcml2ZWQgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5Li4uYCwgc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBjb25zdCBlcXVhbGl0eVZlcmlmaWVkID0gdmVyaWZ5RXF1YWxpdHkoZXF1YWxpdHlOb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0LCAoKSA9PiB7XG4gICAgICBjb25zdCB2ZXJpZmllZEFoZWFkID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHZlcmlmaWVkQWhlYWQ7XG4gICAgfSk7XG5cbiAgICBkZXJpdmVkU3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5ID0gZXF1YWxpdHlWZXJpZmllZDsgLy8vXG5cbiAgICBpZiAoZGVyaXZlZFN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgZGVyaXZlZCBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuYCwgc3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHk7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeURlcml2ZWRTdGF0ZW1lbnRBc0p1ZGdlbWVudChzdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBkZXJpdmVkU3RhdGVtZW50VmVyaWZpZWRBc0p1ZGdlbWVudCA9IHRydWU7XG5cbiAgY29uc3QganVkZ2VtZW50Tm9kZSA9IGp1ZGdlbWVudE5vZGVRdWVyeShzdGF0ZW1lbnROb2RlKTtcblxuICBpZiAoanVkZ2VtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgZGVyaXZlZCBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGp1ZGdlbWVudFZlcmlmaWVkID0gdmVyaWZ5SnVkZ2VtZW50KGp1ZGdlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpO1xuXG4gICAgZGVyaXZlZFN0YXRlbWVudFZlcmlmaWVkQXNKdWRnZW1lbnQgPSBqdWRnZW1lbnRWZXJpZmllZDsgIC8vL1xuXG4gICAgaWYgKGRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZEFzSnVkZ2VtZW50KSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBkZXJpdmVkIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC5gLCBzdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVyaXZlZFN0YXRlbWVudFZlcmlmaWVkQXNKdWRnZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeURlcml2ZWRTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24oc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmVyaWZpZWRBc1R5cGVBc3NlcnRpb24gPSB0cnVlOyAgLy8vXG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbk5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpO1xuXG4gIGlmICh0eXBlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgZGVyaXZlZCBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi4uLmAsIHN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvblZlcmlmaWVkID0gdmVyaWZ5VHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uTm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBzdGF0ZW1lbnRWZXJpZmllZEFzVHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25WZXJpZmllZDsgLy8vXG5cbiAgICBpZiAoc3RhdGVtZW50VmVyaWZpZWRBc1R5cGVBc3NlcnRpb24pIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIGRlcml2ZWQgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uYCwgc3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZlcmlmaWVkQXNUeXBlQXNzZXJ0aW9uO1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeVVucXVhbGlmaWVkU3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwiZXF1YWxpdHlOb2RlUXVlcnkiLCJqdWRnZW1lbnROb2RlUXVlcnkiLCJ0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5IiwidW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlIiwiYXNzaWdubWVudHMiLCJkZXJpdmVkIiwibG9jYWxDb250ZXh0IiwidW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCIsInVucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nIiwibm9kZUFzU3RyaW5nIiwidHJhY2UiLCJ2ZXJpZnlVbnF1YWxpZmllZFN0YXRlbWVudEZ1bmN0aW9ucyIsInZlcmlmeURlcml2ZWRVbnF1YWxpZmllZFN0YXRlbWVudCIsInZlcmlmeVN0YXRlZFVucXVhbGlmaWVkU3RhdGVtZW50Iiwic29tZSIsInZlcmlmeVVucXVhbGlmaWVkU3RhdGVtZW50RnVuY3Rpb24iLCJkZWJ1ZyIsImRlcml2ZWRVbnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkIiwic3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudFVuaWZpZWQiLCJ1bmlmeVN0YXRlbWVudCIsImRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZCIsInZlcmlmeURlcml2ZWRTdGF0ZW1lbnQiLCJzdGF0ZWRVbnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkIiwic3RhdGVtZW50VmVyaWZpZWQiLCJ2ZXJpZnlTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRTdHJpbmciLCJ2ZXJpZnlEZXJpdmVkU3RhdGVtZW50RnVuY3Rpb25zIiwidmVyaWZ5RGVyaXZlZFN0YXRlbWVudEFzRXF1YWxpdHkiLCJ2ZXJpZnlEZXJpdmVkU3RhdGVtZW50QXNKdWRnZW1lbnQiLCJ2ZXJpZnlEZXJpdmVkU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwiZXZlcnkiLCJ2ZXJpZnlEZXJpdmVkU3RhdGVtZW50RnVuY3Rpb24iLCJkZXJpdmVkU3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5IiwiZXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlWZXJpZmllZCIsInZlcmlmeUVxdWFsaXR5IiwidmVyaWZpZWRBaGVhZCIsImRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZEFzSnVkZ2VtZW50IiwianVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudFZlcmlmaWVkIiwidmVyaWZ5SnVkZ2VtZW50Iiwic3RhdGVtZW50VmVyaWZpZWRBc1R5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVBc3NlcnRpb25WZXJpZmllZCIsInZlcmlmeVR5cGVBc3NlcnRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWNBOzs7ZUFBd0JBOzs7K0RBWkc7Z0VBQ0M7Z0VBQ0E7MkRBQ0k7cUJBRU47Ozs7OztBQUUxQixJQUFNQyxxQkFBcUJDLElBQUFBLGdCQUFTLEVBQUMscUNBQy9CQyxvQkFBb0JELElBQUFBLGdCQUFTLEVBQUMseUJBQzlCRSxxQkFBcUJGLElBQUFBLGdCQUFTLEVBQUMsMEJBQy9CRyx5QkFBeUJILElBQUFBLGdCQUFTLEVBQUM7QUFFMUIsU0FBU0YsMkJBQTJCTSx3QkFBd0IsRUFBRUMsV0FBVyxFQUFFQyxPQUFPLEVBQUVDLFlBQVk7SUFDN0csSUFBSUM7SUFFSixJQUFNQyw2QkFBNkJGLGFBQWFHLFlBQVksQ0FBQ047SUFFN0RHLGFBQWFJLEtBQUssQ0FBQyxBQUFDLGtCQUE0QyxPQUEzQkYsNEJBQTJCLCtCQUE2Qkw7SUFFN0YsSUFBTVEsc0NBQXNDO1FBQzFDQztRQUNBQztLQUNEO0lBRUROLCtCQUErQkksb0NBQW9DRyxJQUFJLENBQUMsU0FBQ0M7UUFDdkUsSUFBTVIs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
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50L3VucXVhbGlmaWVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgdmVyaWZ5RXF1YWxpdHkgZnJvbSBcIi4uLy4uL3ZlcmlmeS9lcXVhbGl0eVwiO1xuaW1wb3J0IHZlcmlmeUp1ZGdlbWVudCBmcm9tIFwiLi4vLi4vdmVyaWZ5L2p1ZGdlbWVudFwiO1xuaW1wb3J0IHZlcmlmeVN0YXRlbWVudCBmcm9tIFwiLi4vLi4vdmVyaWZ5L3N0YXRlbWVudFwiO1xuaW1wb3J0IHZlcmlmeVR5cGVBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvbi90eXBlXCI7XG5cbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvcXVlcnlcIjtcblxuY29uc3Qgc3RhdGVtZW50Tm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3VucXVhbGlmaWVkU3RhdGVtZW50L3N0YXRlbWVudCFcIiksXG4gICAgICBlcXVhbGl0eU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvZXF1YWxpdHkhXCIpLFxuICAgICAganVkZ2VtZW50Tm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC9qdWRnZW1lbnQhXCIpLFxuICAgICAgdHlwZUFzc2VydGlvbk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvdHlwZUFzc2VydGlvbiFcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZlcmlmeVVucXVhbGlmaWVkU3RhdGVtZW50KHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgdW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZDtcblxuICBjb25zdCB1bnF1YWxpZmllZFN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcodW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dW5xdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyB1bnF1YWxpZmllZCBzdGF0ZW1lbnQuLi5gLCB1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gIGNvbnN0IHZlcmlmeVVucXVhbGlmaWVkU3RhdGVtZW50RnVuY3Rpb25zID0gW1xuICAgIHZlcmlmeURlcml2ZWRVbnF1YWxpZmllZFN0YXRlbWVudCxcbiAgICB2ZXJpZnlTdGF0ZWRVbnF1YWxpZmllZFN0YXRlbWVudFxuICBdO1xuXG4gIHVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQgPSB2ZXJpZnlVbnF1YWxpZmllZFN0YXRlbWVudEZ1bmN0aW9ucy5zb21lKCh2ZXJpZnlVbnF1YWxpZmllZFN0YXRlbWVudEZ1bmN0aW9uKSA9PiB7XG4gICAgY29uc3QgdW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCA9IHZlcmlmeVVucXVhbGlmaWVkU3RhdGVtZW50RnVuY3Rpb24odW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgIGlmICh1bnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmICh1bnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dW5xdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyB1bnF1YWxpZmllZCBzdGF0ZW1lbnQuYCwgdW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcbiAgfVxuXG4gIHJldHVybiB1bnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlEZXJpdmVkVW5xdWFsaWZpZWRTdGF0ZW1lbnQodW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBkZXJpdmVkVW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCA9IGZhbHNlO1xuXG4gIGlmIChkZXJpdmVkKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGVRdWVyeSh1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIHVucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyh1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3VucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgZGVyaXZlZCB1bnF1YWxpZmllZCBzdGF0ZW1lbnQuLi5gLCB1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50VW5pZmllZCA9IGxvY2FsQ29udGV4dC51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBsb2NhbENvbnRleHQpO1xuXG4gICAgaWYgKHN0YXRlbWVudFVuaWZpZWQpIHtcbiAgICAgIGRlcml2ZWRVbnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGVRdWVyeSh1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgICAgZGVyaXZlZFN0YXRlbWVudFZlcmlmaWVkID0gdmVyaWZ5RGVyaXZlZFN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgICAgZGVyaXZlZFVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQgPSBkZXJpdmVkU3RhdGVtZW50VmVyaWZpZWQ7IC8vL1xuICAgIH1cblxuICAgIGlmIChkZXJpdmVkVW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dW5xdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBkZXJpdmVkIHVucXVhbGlmaWVkIHN0YXRlbWVudC5gLCB1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkZXJpdmVkVW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5U3RhdGVkVW5xdWFsaWZpZWRTdGF0ZW1lbnQodW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBzdGF0ZWRVbnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkID0gZmFsc2U7XG5cbiAgaWYgKCFkZXJpdmVkKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGVRdWVyeSh1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIHVucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyh1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3VucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgc3RhdGVkIHVucXVhbGlmaWVkIHN0YXRlbWVudC4uLmAsIHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnRWZXJpZmllZCA9IHZlcmlmeVN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgIHN0YXRlZFVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQgPSBzdGF0ZW1lbnRWZXJpZmllZDsgLy8vXG5cbiAgICBpZiAoc3RhdGVkVW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dW5xdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZWQgdW5xdWFsaWZpZWQgc3RhdGVtZW50LmAsIHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlZFVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeURlcml2ZWRTdGF0ZW1lbnQoc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgZGVyaXZlZFN0YXRlbWVudFZlcmlmaWVkO1xuXG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcoc3RhdGVtZW50Tm9kZSk7XG5cbiAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIGRlcml2ZWQgc3RhdGVtZW50Li4uYCwgc3RhdGVtZW50Tm9kZSk7XG5cbiAgY29uc3QgdmVyaWZ5RGVyaXZlZFN0YXRlbWVudEZ1bmN0aW9ucyA9IFtcbiAgICB2ZXJpZnlEZXJpdmVkU3RhdGVtZW50QXNFcXVhbGl0eSxcbiAgICB2ZXJpZnlEZXJpdmVkU3RhdGVtZW50QXNKdWRnZW1lbnQsXG4gICAgdmVyaWZ5RGVyaXZlZFN0YXRlbWVudEFzVHlwZUFzc2VydGlvblxuICBdO1xuXG4gIGRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZCA9IHZlcmlmeURlcml2ZWRTdGF0ZW1lbnRGdW5jdGlvbnMuZXZlcnkoKHZlcmlmeURlcml2ZWRTdGF0ZW1lbnRGdW5jdGlvbikgPT4geyAgLy8vXG4gICAgY29uc3QgZGVyaXZlZFN0YXRlbWVudFZlcmlmaWVkID0gdmVyaWZ5RGVyaXZlZFN0YXRlbWVudEZ1bmN0aW9uKHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpO1xuXG4gICAgaWYgKGRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGVyaXZlZFN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgZGVyaXZlZCBzdGF0ZW1lbnQuYCwgc3RhdGVtZW50Tm9kZSk7XG4gIH1cblxuICByZXR1cm4gZGVyaXZlZFN0YXRlbWVudFZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlEZXJpdmVkU3RhdGVtZW50QXNFcXVhbGl0eShzdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBkZXJpdmVkU3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5ID0gdHJ1ZTsgLy8vXG5cbiAgY29uc3QgZXF1YWxpdHlOb2RlID0gZXF1YWxpdHlOb2RlUXVlcnkoc3RhdGVtZW50Tm9kZSk7XG5cbiAgaWYgKGVxdWFsaXR5Tm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgZGVyaXZlZCBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGVxdWFsaXR5VmVyaWZpZWQgPSB2ZXJpZnlFcXVhbGl0eShlcXVhbGl0eU5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpO1xuXG4gICAgZGVyaXZlZFN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSA9IGVxdWFsaXR5VmVyaWZpZWQ7IC8vL1xuXG4gICAgaWYgKGRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHkpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIGRlcml2ZWQgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5LmAsIHN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkZXJpdmVkU3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5O1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlEZXJpdmVkU3RhdGVtZW50QXNKdWRnZW1lbnQoc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgZGVyaXZlZFN0YXRlbWVudFZlcmlmaWVkQXNKdWRnZW1lbnQgPSB0cnVlO1xuXG4gIGNvbnN0IGp1ZGdlbWVudE5vZGUgPSBqdWRnZW1lbnROb2RlUXVlcnkoc3RhdGVtZW50Tm9kZSk7XG5cbiAgaWYgKGp1ZGdlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIGRlcml2ZWQgc3RhdGVtZW50IGFzIGEganVkZ2VtZW50Li4uYCwgc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBjb25zdCBqdWRnZW1lbnRWZXJpZmllZCA9IHZlcmlmeUp1ZGdlbWVudChqdWRnZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgIGRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZEFzSnVkZ2VtZW50ID0ganVkZ2VtZW50VmVyaWZpZWQ7ICAvLy9cblxuICAgIGlmIChkZXJpdmVkU3RhdGVtZW50VmVyaWZpZWRBc0p1ZGdlbWVudCkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgZGVyaXZlZCBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuYCwgc3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZEFzSnVkZ2VtZW50O1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlEZXJpdmVkU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZlcmlmaWVkQXNUeXBlQXNzZXJ0aW9uID0gdHJ1ZTsgIC8vL1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25Ob2RlID0gdHlwZUFzc2VydGlvbk5vZGVRdWVyeShzdGF0ZW1lbnROb2RlKTtcblxuICBpZiAodHlwZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIGRlcml2ZWQgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IHR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHZlcmlmeVR5cGVBc3NlcnRpb24odHlwZUFzc2VydGlvbk5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQpO1xuXG4gICAgc3RhdGVtZW50VmVyaWZpZWRBc1R5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQ7IC8vL1xuXG4gICAgaWYgKHN0YXRlbWVudFZlcmlmaWVkQXNUeXBlQXNzZXJ0aW9uKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBkZXJpdmVkIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLmAsIHN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWZXJpZmllZEFzVHlwZUFzc2VydGlvbjtcbn1cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlVbnF1YWxpZmllZFN0YXRlbWVudCIsInN0YXRlbWVudE5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsImVxdWFsaXR5Tm9kZVF1ZXJ5IiwianVkZ2VtZW50Tm9kZVF1ZXJ5IiwidHlwZUFzc2VydGlvbk5vZGVRdWVyeSIsInVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSIsImFzc2lnbm1lbnRzIiwiZGVyaXZlZCIsImxvY2FsQ29udGV4dCIsInVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQiLCJ1bnF1YWxpZmllZFN0YXRlbWVudFN0cmluZyIsIm5vZGVBc1N0cmluZyIsInRyYWNlIiwidmVyaWZ5VW5xdWFsaWZpZWRTdGF0ZW1lbnRGdW5jdGlvbnMiLCJ2ZXJpZnlEZXJpdmVkVW5xdWFsaWZpZWRTdGF0ZW1lbnQiLCJ2ZXJpZnlTdGF0ZWRVbnF1YWxpZmllZFN0YXRlbWVudCIsInNvbWUiLCJ2ZXJpZnlVbnF1YWxpZmllZFN0YXRlbWVudEZ1bmN0aW9uIiwiZGVidWciLCJkZXJpdmVkVW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCIsInN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRVbmlmaWVkIiwidW5pZnlTdGF0ZW1lbnQiLCJkZXJpdmVkU3RhdGVtZW50VmVyaWZpZWQiLCJ2ZXJpZnlEZXJpdmVkU3RhdGVtZW50Iiwic3RhdGVkVW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCIsInN0YXRlbWVudFZlcmlmaWVkIiwidmVyaWZ5U3RhdGVtZW50Iiwic3RhdGVtZW50U3RyaW5nIiwidmVyaWZ5RGVyaXZlZFN0YXRlbWVudEZ1bmN0aW9ucyIsInZlcmlmeURlcml2ZWRTdGF0ZW1lbnRBc0VxdWFsaXR5IiwidmVyaWZ5RGVyaXZlZFN0YXRlbWVudEFzSnVkZ2VtZW50IiwidmVyaWZ5RGVyaXZlZFN0YXRlbWVudEFzVHlwZUFzc2VydGlvbiIsImV2ZXJ5IiwidmVyaWZ5RGVyaXZlZFN0YXRlbWVudEZ1bmN0aW9uIiwiZGVyaXZlZFN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSIsImVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5VmVyaWZpZWQiLCJ2ZXJpZnlFcXVhbGl0eSIsImRlcml2ZWRTdGF0ZW1lbnRWZXJpZmllZEFzSnVkZ2VtZW50IiwianVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudFZlcmlmaWVkIiwidmVyaWZ5SnVkZ2VtZW50Iiwic3RhdGVtZW50VmVyaWZpZWRBc1R5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVBc3NlcnRpb25WZXJpZmllZCIsInZlcmlmeVR5cGVBc3NlcnRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWNBOzs7ZUFBd0JBOzs7K0RBWkc7Z0VBQ0M7Z0VBQ0E7MkRBQ0k7cUJBRU47Ozs7OztBQUUxQixJQUFNQyxxQkFBcUJDLElBQUFBLGdCQUFTLEVBQUMscUNBQy9CQyxvQkFBb0JELElBQUFBLGdCQUFTLEVBQUMseUJBQzlCRSxxQkFBcUJGLElBQUFBLGdCQUFTLEVBQUMsMEJBQy9CRyx5QkFBeUJILElBQUFBLGdCQUFTLEVBQUM7QUFFMUIsU0FBU0YsMkJBQTJCTSx3QkFBd0IsRUFBRUMsV0FBVyxFQUFFQyxPQUFPLEVBQUVDLFlBQVk7SUFDN0csSUFBSUM7SUFFSixJQUFNQyw2QkFBNkJGLGFBQWFHLFlBQVksQ0FBQ047SUFFN0RHLGFBQWFJLEtBQUssQ0FBQyxBQUFDLGtCQUE0QyxPQUEzQkYsNEJBQTJCLCtCQUE2Qkw7SUFFN0YsSUFBTVEsc0NBQXNDO1FBQzFDQztRQUNBQztLQUNEO0lBRUROLCtCQUErQkksb0NBQW9DRyxJQUFJLENBQUMsU0FBQ0M7UUFDdkUsSUFBTVIsK0JBQStCUSxtQ0FBbUNaLDBCQUEwQkMsYUFBYUMsU0FBU0M7UUFFeEgsSUFBSUMsOEJBQThCO1lBQ2hDLE9BQU87UUFDVDtJQUNGO0lBRUEsSUFBSUEsOEJBQThCO1FBQ2hDRCxhQUFhVSxLQUFLLENBQUMsQUFBQyxvQkFBOEMsT0FBM0JSLDRCQUEyQiw2QkFBMkJMO0lBQy9GO0lBRUEsT0FBT0k7QUFDVDtBQUVBLFNBQVNLLGtDQUFrQ1Qsd0JBQXdCLEVBQUVDLFdBQVcsRUFBRUMsT0FBTyxFQUFFQyxZQUFZO0lBQ3JHLElBQUlXLHNDQUFzQztJQUUxQyxJQUFJWixTQUFTO1FBQ1gsSUFBTWEsZ0JBQWdCcEIsbUJBQW1CSywyQkFDbkNLLDZCQUE2QkYsYUFBYUcsWUFBWSxDQUFDTjtRQUU3REcsYUFBYUksS0FBSyxDQUFDLEFBQUMsa0JBQTRDLE9BQTNCRiw0QkFBMkIsdUNBQXFDTDtRQUVyRyxJQUFNZ0IsbUJBQW1CYixhQUFhYyxjQUFjLENBQUNGLGVBQWVaO1FBRXBFLElBQUlhLGtCQUFrQjtZQUNwQkYsc0NBQXNDO1FBQ3hDLE9BQU87WUFDTCxJQUFNQyxpQkFBZ0JwQixtQkFBbUJLLDJCQUNuQ2tCLDJCQUEyQkMsdUJBQXVCSixnQkFBZWQsYUFBYUMsU0FBU0M7WUFFN0ZXLHNDQUFzQ0ksMEJBQTBCLEdBQUc7UUFDckU7UUFFQSxJQUFJSixxQ0FBcUM7WUFDdkNYLGFBQWFVLEtBQUssQ0FBQyxBQUFDLG9CQUE4QyxPQUEzQlIsNEJBQTJCLHFDQUFtQ0w7UUFDdkc7SUFDRjtJQUVBLE9BQU9jO0FBQ1Q7QUFFQSxTQUFTSixpQ0FBaUNWLHdCQUF3QixFQUFFQyxXQUFXLEVBQUVDLE9BQU8sRUFBRUMsWUFBWTtJQUNwRyxJQUFJaUIscUNBQXFDO0lBRXpDLElBQUksQ0FBQ2xCLFNBQVM7UUFDWixJQUFNYSxnQkFBZ0JwQixtQkFBbUJLLDJCQUNuQ0ssNkJBQTZCRixhQUFhRyxZQUFZLENBQUNOO1FBRTdERyxhQUFhSSxLQUFLLENBQUMsQUFBQyxrQkFBNEMsT0FBM0JGLDRCQUEyQixzQ0FBb0NMO1FBRXBHLElBQU1xQixvQkFBb0JDLElBQUFBLGtCQUFlLEVBQUNQLGVBQWVkLGFBQWFDLFNBQVNDO1FBRS9FaUIscUNBQXFDQyxtQkFBbUIsR0FBRztRQUUzRCxJQUFJRCxvQ0FBb0M7WUFDdENqQixhQUFhVSxLQUFLLENBQUMsQUFBQyxvQkFBOEMsT0FBM0JSLDRCQUEyQixvQ0FBa0NMO1FBQ3RHO0lBQ0Y7SUFFQSxPQUFPb0I7QUFDVDtBQUVBLFNBQVNELHVCQUF1QkosYUFBYSxFQUFFZCxXQUFXLEVBQUVDLE9BQU8sRUFBRUMsWUFBWTtJQUMvRSxJQUFJZTtJQUVKLElBQU1LLGtCQUFrQnBCLGFBQWFHLFlBQVksQ0FBQ1M7SUFFbERaLGFBQWFJLEtBQUssQ0FBQyxBQUFDLGtCQUFpQyxPQUFoQmdCLGlCQUFnQiwyQkFBeUJSO0lBRTlFLElBQU1TLGtDQUFrQztRQUN0Q0M7UUFDQUM7UUFDQUM7S0FDRDtJQUVEVCwyQkFBMkJNLGdDQUFnQ0ksS0FBSyxDQUFDLFNBQUNDO1FBQ2hFLElBQU1YLDJCQUEyQlcsK0JBQStCZCxlQUFlZCxhQUFhQyxTQUFTQztRQUVyRyxJQUFJZSwwQkFBMEI7WUFDNUIsT0FBTztRQUNUO0lBQ0Y7SUFFQSxJQUFJQSwwQkFBMEI7UUFDNUJmLGFBQWFVLEtBQUssQ0FBQyxBQUFDLG9CQUFtQyxPQUFoQlUsaUJBQWdCLHlCQUF1QlI7SUFDaEY7SUFFQSxPQUFPRztBQUNUO0FBRUEsU0FBU08saUNBQWlDVixhQUFhLEVBQUVkLFdBQVcsRUFBRUMsT0FBTyxFQUFFQyxZQUFZO0lBQ3pGLElBQUkyQixxQ0FBcUMsTUFBTSxHQUFHO0lBRWxELElBQU1DLGVBQWVsQyxrQkFBa0JrQjtJQUV2QyxJQUFJZ0IsaUJBQWlCLE1BQU07UUFDekIsSUFBTVIsa0JBQWtCcEIsYUFBYUcsWUFBWSxDQUFDUztRQUVsRFosYUFBYUksS0FBSyxDQUFDLEFBQUMsa0JBQWlDLE9BQWhCZ0IsaUJBQWdCLDBDQUF3Q1I7UUFFN0YsSUFBTWlCLG1CQUFtQkMsSUFBQUEsaUJBQWMsRUFBQ0YsY0FBYzlCLGFBQWFDLFNBQVNDO1FBRTVFMkIscUNBQXFDRSxrQkFBa0IsR0FBRztRQUUxRCxJQUFJRixvQ0FBb0M7WUFDdEMzQixhQUFhVSxLQUFLLENBQUMsQUFBQyxvQkFBbUMsT0FBaEJVLGlCQUFnQix3Q0FBc0NSO1FBQy9GO0lBQ0Y7SUFFQSxPQUFPZTtBQUNUO0FBRUEsU0FBU0osa0NBQWtDWCxhQUFhLEVBQUVkLFdBQVcsRUFBRUMsT0FBTyxFQUFFQyxZQUFZO0lBQzFGLElBQUkrQixzQ0FBc0M7SUFFMUMsSUFBTUMsZ0JBQWdCckMsbUJBQW1CaUI7SUFFekMsSUFBSW9CLGtCQUFrQixNQUFNO1FBQzFCLElBQU1aLGtCQUFrQnBCLGFBQWFHLFlBQVksQ0FBQ1M7UUFFbERaLGFBQWFJLEtBQUssQ0FBQyxBQUFDLGtCQUFpQyxPQUFoQmdCLGlCQUFnQiwwQ0FBd0NSO1FBRTdGLElBQU1xQixvQkFBb0JDLElBQUFBLGtCQUFlLEVBQUNGLGVBQWVsQyxhQUFhQyxTQUFTQztRQUUvRStCLHNDQUFzQ0UsbUJBQW9CLEdBQUc7UUFFN0QsSUFBSUYscUNBQXFDO1lBQ3ZDL0IsYUFBYVUsS0FBSyxDQUFDLEFBQUMsb0JBQW1DLE9BQWhCVSxpQkFBZ0Isd0NBQXNDUjtRQUMvRjtJQUNGO0lBRUEsT0FBT21CO0FBQ1Q7QUFFQSxTQUFTUCxzQ0FBc0NaLGFBQWEsRUFBRWQsV0FBVyxFQUFFQyxPQUFPLEVBQUVDLFlBQVk7SUFDOUYsSUFBSW1DLG1DQUFtQyxNQUFPLEdBQUc7SUFFakQsSUFBTUMsb0JBQW9CeEMsdUJBQXVCZ0I7SUFFakQsSUFBSXdCLHNCQUFzQixNQUFNO1FBQzlCLElBQU1oQixrQkFBa0JwQixhQUFhRyxZQUFZLENBQUNTO1FBRWxEWixhQUFhSSxLQUFLLENBQUMsQUFBQyxrQkFBaUMsT0FBaEJnQixpQkFBZ0IsK0NBQTZDUjtRQUVsRyxJQUFNeUIsd0JBQXdCQyxJQUFBQSxhQUFtQixFQUFDRixtQkFBbUJ0QyxhQUFhQyxTQUFTQztRQUUzRm1DLG1DQUFtQ0UsdUJBQXVCLEdBQUc7UUFFN0QsSUFBSUYsa0NBQWtDO1lBQ3BDbkMsYUFBYVUsS0FBSyxDQUFDLEFBQUMsb0JBQW1DLE9BQWhCVSxpQkFBZ0IsNkNBQTJDUjtRQUNwRztJQUNGO0lBRUEsT0FBT3VCO0FBQ1QifQ==
|