occam-verify-cli 1.0.587 → 1.0.602
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/context/ephemeral.js +74 -2
- package/lib/context/file/nominal.js +11 -9
- package/lib/context/liminal.js +161 -24
- package/lib/context/literal.js +8 -2
- package/lib/context/scoped.js +4 -28
- package/lib/context/synthetic.js +146 -0
- package/lib/context.js +170 -1
- package/lib/element/assertion/contained.js +21 -15
- package/lib/element/assertion/defined.js +45 -65
- package/lib/element/assertion/property.js +25 -19
- package/lib/element/assertion/satisfies.js +14 -8
- package/lib/element/assertion/subproof.js +12 -6
- package/lib/element/assertion.js +47 -1
- package/lib/element/assumption.js +12 -12
- package/lib/element/conclusion.js +2 -2
- package/lib/element/deduction.js +2 -2
- package/lib/element/frame.js +61 -29
- package/lib/element/judgement.js +7 -1
- package/lib/element/label.js +8 -8
- package/lib/element/metavariable.js +71 -59
- package/lib/element/procedureCall.js +24 -8
- package/lib/element/proof.js +43 -35
- package/lib/element/proofAssertion/premise.js +122 -97
- package/lib/element/proofAssertion/step.js +161 -115
- package/lib/element/proofAssertion/supposition.js +157 -118
- package/lib/element/proofAssertion.js +3 -3
- package/lib/element/reference.js +40 -7
- package/lib/element/rule.js +227 -95
- package/lib/element/signature.js +2 -1
- package/lib/element/statement.js +67 -34
- package/lib/element/substitution/frame.js +36 -16
- package/lib/element/substitution/reference.js +36 -16
- package/lib/element/substitution/statement.js +94 -55
- package/lib/element/substitution/term.js +36 -16
- package/lib/element/substitution.js +54 -17
- package/lib/element/substitutions.js +4 -276
- package/lib/element/term.js +60 -31
- package/lib/element/topLevelAssertion/axiom.js +13 -4
- package/lib/element/topLevelAssertion/conjecture.js +7 -2
- package/lib/element/topLevelAssertion/theorem.js +7 -2
- package/lib/element/topLevelAssertion.js +201 -134
- package/lib/element/topLevelMetaAssertion.js +310 -51
- package/lib/element/variable.js +15 -6
- package/lib/node/substitution/statement.js +33 -1
- package/lib/process/unify.js +6 -6
- package/lib/utilities/context.js +10 -25
- package/lib/utilities/element.js +34 -9
- package/lib/utilities/statement.js +1 -8
- package/lib/utilities/string.js +12 -1
- package/lib/utilities/substitutions.js +42 -16
- package/lib/utilities/unification.js +3 -1
- package/lib/utilities/validation.js +2 -2
- package/package.json +4 -4
- package/src/context/ephemeral.js +73 -1
- package/src/context/file/nominal.js +14 -11
- package/src/context/liminal.js +180 -25
- package/src/context/literal.js +3 -1
- package/src/context/scoped.js +3 -35
- package/src/context/synthetic.js +49 -0
- package/src/context.js +163 -1
- package/src/element/assertion/contained.js +28 -20
- package/src/element/assertion/defined.js +62 -34
- package/src/element/assertion/property.js +27 -19
- package/src/element/assertion/satisfies.js +15 -7
- package/src/element/assertion/subproof.js +13 -5
- package/src/element/assertion.js +35 -0
- package/src/element/assumption.js +5 -5
- package/src/element/conclusion.js +2 -4
- package/src/element/deduction.js +2 -4
- package/src/element/frame.js +71 -39
- package/src/element/judgement.js +2 -0
- package/src/element/label.js +4 -4
- package/src/element/metavariable.js +94 -75
- package/src/element/procedureCall.js +6 -6
- package/src/element/proof.js +6 -6
- package/src/element/proofAssertion/premise.js +101 -69
- package/src/element/proofAssertion/step.js +78 -39
- package/src/element/proofAssertion/supposition.js +141 -115
- package/src/element/proofAssertion.js +3 -2
- package/src/element/reference.js +52 -10
- package/src/element/rule.js +138 -76
- package/src/element/signature.js +2 -0
- package/src/element/statement.js +76 -45
- package/src/element/substitution/frame.js +44 -15
- package/src/element/substitution/reference.js +44 -15
- package/src/element/substitution/statement.js +124 -72
- package/src/element/substitution/term.js +43 -15
- package/src/element/substitution.js +55 -18
- package/src/element/substitutions.js +1 -258
- package/src/element/term.js +65 -34
- package/src/element/topLevelAssertion/axiom.js +1 -1
- package/src/element/topLevelAssertion/conjecture.js +1 -1
- package/src/element/topLevelAssertion/theorem.js +1 -1
- package/src/element/topLevelAssertion.js +128 -48
- package/src/element/topLevelMetaAssertion.js +86 -32
- package/src/element/variable.js +15 -5
- package/src/node/substitution/statement.js +33 -0
- package/src/process/unify.js +6 -8
- package/src/utilities/context.js +9 -8
- package/src/utilities/element.js +37 -10
- package/src/utilities/statement.js +0 -7
- package/src/utilities/string.js +14 -0
- package/src/utilities/substitutions.js +59 -17
- package/src/utilities/unification.js +4 -0
- package/src/utilities/validation.js +3 -1
|
@@ -73,7 +73,7 @@ function validateStatementAsMetavariable(statement, assignments, stated, context
|
|
|
73
73
|
statementValidatesAsMetavariableAndSubstitution = true;
|
|
74
74
|
var TermSubstitution = _elements.default.TermSubstitution, FrameSubstitution = _elements.default.FrameSubstitution, frameSubstitution = FrameSubstitution.fromStatement(statement, context), termSubstitution = TermSubstitution.fromStatement(statement, context), substitution = termSubstitution || frameSubstitution;
|
|
75
75
|
if (substitution !== null) {
|
|
76
|
-
var substitutionValidates = substitution.validate(
|
|
76
|
+
var generalContext = context, specificContext = context, substitutionValidates = substitution.validate(generalContext, specificContext);
|
|
77
77
|
if (!substitutionValidates) {
|
|
78
78
|
statementValidatesAsMetavariableAndSubstitution = false;
|
|
79
79
|
}
|
|
@@ -245,4 +245,4 @@ var validateStatements = [
|
|
|
245
245
|
validateStatementAsSatisfiesAssertion
|
|
246
246
|
];
|
|
247
247
|
|
|
248
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nLCBicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2luc3RhbmNlXCI7XG5pbXBvcnQgeyBlcXVhbGl0eUZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBqdWRnZW1lbnRGcm9tU3RhdGVtZW50LFxuICAgICAgICAgdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdGF0ZW1lbnRcIjtcblxuZnVuY3Rpb24gdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKSB7XG4gIGxldCB0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSA9IGZhbHNlO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgICB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgIGlmICh2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZSA9IHZhcmlhYmxlLmdldFR5cGUoKTtcblxuICAgICAgdGVybS5zZXRUeXBlKHR5cGUpO1xuXG4gICAgICBjb25zdCB2ZXJpZmllc0ZvcndhcmRzID0gdmFsaWRhdGVGb3J3YXJkcygpO1xuXG4gICAgICBpZiAodmVyaWZpZXNGb3J3YXJkcykge1xuICAgICAgICB0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlO1xufVxuXG5mdW5jdGlvbiB1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3JzKHRlcm0sIGNvbnRleHQsIHZhbGlkYXRlRm9yd2FyZHMpIHtcbiAgbGV0IHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycztcblxuICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBjb250ZXh0LmdldENvbnN0cnVjdG9ycygpO1xuXG4gIHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycyA9IGNvbnN0cnVjdG9ycy5zb21lKChjb25zdHJ1Y3RvcikgPT4ge1xuICAgIGNvbnN0IHVuaWZpZXNXaXRoQ29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvci51bmlmeVRlcm0odGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcyk7XG5cbiAgICBpZiAodW5pZmllc1dpdGhDb25zdHJ1Y3Rvcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzO1xufVxuXG5mdW5jdGlvbiB1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IodGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcykge1xuICBsZXQgdGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3I7XG5cbiAgY29uc3QgYnJhY2tldGVkQ29uc3RydWN0b3IgPSBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nKCk7XG5cbiAgdGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3IgPSBicmFja2V0ZWRDb25zdHJ1Y3Rvci51bmlmeVRlcm0odGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcyk7XG5cbiAgcmV0dXJuIHRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzTWV0YXZhcmlhYmxlKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24gPSBmYWxzZTtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRNZXRhdmFyaWFibGVOYW1lKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24gPSB0cnVlO1xuXG4gICAgICBjb25zdCB7IFRlcm1TdWJzdGl0dXRpb24sIEZyYW1lU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gRnJhbWVTdWJzdGl0dXRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpLFxuICAgICAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IFRlcm1TdWJzdGl0dXRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpLFxuICAgICAgICAgICAgc3Vic3RpdHV0aW9uID0gKHRlcm1TdWJzdGl0dXRpb24gfHwgZnJhbWVTdWJzdGl0dXRpb24pO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvblZhbGlkYXRlcyA9IHN1YnN0aXR1dGlvbi52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgICAgICBpZiAoIXN1YnN0aXR1dGlvblZhbGlkYXRlcykge1xuICAgICAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgbWV0YXZhcmlhYmxlLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbjtcbn1cblxuZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcnMoc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIHN0YXRlZCA9IHRydWU7ICAvLy9cblxuICBhc3NpZ25tZW50cyA9IG51bGw7IC8vL1xuXG4gIGNvbnN0IGNvbWJpbmF0b3JzID0gY29udGV4dC5nZXRDb21iaW5hdG9ycygpLFxuICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvcnMgPSBjb21iaW5hdG9ycy5zb21lKChjb21iaW5hdG9yKSA9PiB7XG4gICAgICBjb25zdCB1bmlmaWVzV2l0aENvbWJpbmF0b3IgPSBjb21iaW5hdG9yLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICAgIGlmICh1bmlmaWVzV2l0aENvbWJpbmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvcnM7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3Ioc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIHN0YXRlZCA9IHRydWU7ICAvLy9cblxuICBhc3NpZ25tZW50cyA9IG51bGw7IC8vL1xuXG4gIGNvbnN0IGJyYWNrZXRlZENvbWJpbmF0b3IgPSBicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmcoKSxcbiAgICAgICAgc3RhdGVtZW50VW5pZmllc1dpdGhCcmFja2V0ZWRDb21iaW5hdG9yID0gYnJhY2tldGVkQ29tYmluYXRvci51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzV2l0aEJyYWNrZXRlZENvbWJpbmF0b3I7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNFcXVhbGl0eShzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkgPSBmYWxzZTtcblxuICBjb25zdCBlcXVhbGl0eSA9IGVxdWFsaXR5RnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChlcXVhbGl0eSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS4uLmApO1xuXG4gICAgY29uc3QgZXF1YWxpdHlWYWxpZGF0ZXMgPSBlcXVhbGl0eS52YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkgPSBlcXVhbGl0eVZhbGlkYXRlczsgLy8vXG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNKdWRnZW1lbnQoc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCA9IGZhbHNlO1xuXG4gIGNvbnN0IGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoanVkZ2VtZW50ICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEganVkZ2VtZW50Li4uYCk7XG5cbiAgICBjb25zdCBqdWRnZW1lbnRWYWxpZGF0ZXMgPSBqdWRnZW1lbnQudmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCA9IGp1ZGdlbWVudFZhbGlkYXRlczsgIC8vL1xuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHR5cGVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvblZhbGlkYXRlcyA9IHR5cGVBc3NlcnRpb24udmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uVmFsaWRhdGVzOyAvLy9cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb247ICAvLy9cblxuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IGRlZmluZWRBc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChkZWZpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgZGVmaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IGRlZmluZWRBc3NlcnRpb25WYWxpZGF0ZXMgPSBkZWZpbmVkQXNzZXJ0aW9uLnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgdmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvblZhbGlkYXRlczsgLy8vXG5cbiAgICBpZiAodmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uKSB7XG4gICAgICBjb25zdCBhc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uOyAgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgZGVmaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvblZhbGlkYXRlcyA9IHByb3BlcnR5QXNzZXJ0aW9uLnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uVmFsaWRhdGVzOyAvLy9cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uKSB7XG4gICAgICBjb25zdCBhc3NlcnRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24oc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzdWJwcm9vZiBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uVmFsaWRhdGVzID0gc3VicHJvb2ZBc3NlcnRpb24udmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb25WYWxpZGF0ZXM7IC8vL1xuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzdWJwcm9vZiBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24oc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgY29udGFpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uVmFsaWRhdGVzID0gY29udGFpbmVkQXNzZXJ0aW9uLnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgdmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25WYWxpZGF0ZXM7IC8vL1xuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uKSB7XG4gICAgICBjb25zdCBhc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzQVN0YXRlbWVudHNTYXRpc2ZpZXNBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCBzYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHNhdGlzZmllc0Fzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHNhdGlzZmllcyBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHNhdGlzZmllc0Fzc2VydGlvblZhbGlkYXRlcyA9IHNhdGlzZmllc0Fzc2VydGlvbi52YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uVmFsaWRhdGVzOyAvLy9cblxuICAgIGlmICh2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbikge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzYXRpc2ZpZXMgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlVGVybXMgPSBbXG4gIHZhbGlkYXRlVGVybUFzVmFyaWFibGUsXG4gIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnMsXG4gIHVuaWZ5VGVybVdpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvclxuXTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlU3RhdGVtZW50cyA9IFtcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZSxcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcnMsXG4gIHVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3IsXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNFcXVhbGl0eSxcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0p1ZGdlbWVudCxcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNTdWJwcm9vZkFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1NhdGlzZmllc0Fzc2VydGlvblxuXTtcbiJdLCJuYW1lcyI6WyJ2YWxpZGF0ZVN0YXRlbWVudHMiLCJ2YWxpZGF0ZVRlcm1zIiwidmFsaWRhdGVUZXJtQXNWYXJpYWJsZSIsInRlcm0iLCJjb250ZXh0IiwidmFsaWRhdGVGb3J3YXJkcyIsInRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlIiwidGVybU5vZGUiLCJnZXROb2RlIiwidmFyaWFibGVOb2RlIiwiZ2V0VmFyaWFibGVOb2RlIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmFyaWFibGVJZGVudGlmaWVyIiwiZ2V0VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGUiLCJmaW5kVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllciIsInR5cGUiLCJnZXRUeXBlIiwic2V0VHlwZSIsInZlcmlmaWVzRm9yd2FyZHMiLCJkZWJ1ZyIsInVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnMiLCJ0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnMiLCJjb25zdHJ1Y3RvcnMiLCJnZXRDb25zdHJ1Y3RvcnMiLCJzb21lIiwiY29uc3RydWN0b3IiLCJ1bmlmaWVzV2l0aENvbnN0cnVjdG9yIiwidW5pZnlUZXJtIiwidW5pZnlUZXJtV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yIiwidGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbU5vdGhpbmciLCJ2YWxpZGF0ZVN0YXRlbWVudEFzTWV0YXZhcmlhYmxlIiwic3RhdGVtZW50IiwiYXNzaWdubWVudHMiLCJzdGF0ZWQiLCJzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbiIsInN0YXRlbWVudE5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsInN0YXRlbWVudFN0cmluZyIsIm1ldGF2YXJpYWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZSIsIlRlcm1TdWJzdGl0dXRpb24iLCJlbGVtZW50cyIsIkZyYW1lU3Vic3RpdHV0aW9uIiwiZnJhbWVTdWJzdGl0dXRpb24iLCJmcm9tU3RhdGVtZW50IiwidGVybVN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvblZhbGlkYXRlcyIsInZhbGlkYXRlIiwidW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcnMiLCJjb21iaW5hdG9ycyIsImdldENvbWJpbmF0b3JzIiwic3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9ycyIsImNvbWJpbmF0b3IiLCJ1bmlmaWVzV2l0aENvbWJpbmF0b3IiLCJ1bmlmeVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29tYmluYXRvckZyb21Ob3RoaW5nIiwic3RhdGVtZW50VW5pZmllc1dpdGhCcmFja2V0ZWRDb21iaW5hdG9yIiwidmFsaWRhdGVTdGF0ZW1lbnRBc0VxdWFsaXR5Iiwic3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSIsImVxdWFsaXR5IiwiZXF1YWxpdHlGcm9tU3RhdGVtZW50IiwiZXF1YWxpdHlWYWxpZGF0ZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzSnVkZ2VtZW50IiwidmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQiLCJqdWRnZW1lbnQiLCJqdWRnZW1lbnRGcm9tU3RhdGVtZW50IiwianVkZ2VtZW50VmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJ0eXBlQXNzZXJ0aW9uVmFsaWRhdGVzIiwiYXNzZXJ0aW9uIiwiYWRkQXNzZXJ0aW9uIiwidmFsaWRhdGVTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24iLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24iLCJkZWZpbmVkQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJkZWZpbmVkQXNzZXJ0aW9uVmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uIiwic3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwicHJvcGVydHlBc3NlcnRpb25WYWxpZGF0ZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24iLCJzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJzdWJwcm9vZkFzc2VydGlvblZhbGlkYXRlcyIsInZhbGlkYXRlU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24iLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJjb250YWluZWRBc3NlcnRpb25WYWxpZGF0ZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uIiwidmFsaWRhdGVzQVN0YXRlbWVudHNTYXRpc2ZpZXNBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50Iiwic2F0aXNmaWVzQXNzZXJ0aW9uVmFsaWRhdGVzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUEyVmFBO2VBQUFBOztRQU5BQztlQUFBQTs7OytEQW5WUTt3QkFFMkQ7eUJBUWhDOzs7Ozs7QUFFaEQsU0FBU0MsdUJBQXVCQyxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsZ0JBQWdCO0lBQzdELElBQUlDLDBCQUEwQjtJQUU5QixJQUFNQyxXQUFXSixLQUFLSyxPQUFPLElBQ3ZCQyxlQUFlRixTQUFTRyxlQUFlO0lBRTdDLElBQUlELGlCQUFpQixNQUFNO1FBQ3pCLElBQU1FLGFBQWFSLEtBQUtTLFNBQVM7UUFFakNSLFFBQVFTLEtBQUssQ0FBQyxBQUFDLG1CQUE2QixPQUFYRixZQUFXO1FBRTVDLElBQU1HLHFCQUFxQkwsYUFBYU0scUJBQXFCLElBQ3ZEQyxXQUFXWixRQUFRYSxnQ0FBZ0MsQ0FBQ0g7UUFFMUQsSUFBSUUsYUFBYSxNQUFNO1lBQ3JCLElBQU1FLE9BQU9GLFNBQVNHLE9BQU87WUFFN0JoQixLQUFLaUIsT0FBTyxDQUFDRjtZQUViLElBQU1HLG1CQUFtQmhCO1lBRXpCLElBQUlnQixrQkFBa0I7Z0JBQ3BCZiwwQkFBMEI7WUFDNUI7UUFDRjtRQUVBLElBQUlBLHlCQUF5QjtZQUMzQkYsUUFBUWtCLEtBQUssQ0FBQyxBQUFDLHFCQUErQixPQUFYWCxZQUFXO1FBQ2hEO0lBQ0Y7SUFFQSxPQUFPTDtBQUNUO0FBRUEsU0FBU2lCLDBCQUEwQnBCLElBQUks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
|
|
248
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nLCBicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2luc3RhbmNlXCI7XG5pbXBvcnQgeyBlcXVhbGl0eUZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBqdWRnZW1lbnRGcm9tU3RhdGVtZW50LFxuICAgICAgICAgdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdGF0ZW1lbnRcIjtcblxuZnVuY3Rpb24gdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKSB7XG4gIGxldCB0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSA9IGZhbHNlO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgICB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgIGlmICh2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZSA9IHZhcmlhYmxlLmdldFR5cGUoKTtcblxuICAgICAgdGVybS5zZXRUeXBlKHR5cGUpO1xuXG4gICAgICBjb25zdCB2ZXJpZmllc0ZvcndhcmRzID0gdmFsaWRhdGVGb3J3YXJkcygpO1xuXG4gICAgICBpZiAodmVyaWZpZXNGb3J3YXJkcykge1xuICAgICAgICB0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlO1xufVxuXG5mdW5jdGlvbiB1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3JzKHRlcm0sIGNvbnRleHQsIHZhbGlkYXRlRm9yd2FyZHMpIHtcbiAgbGV0IHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycztcblxuICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBjb250ZXh0LmdldENvbnN0cnVjdG9ycygpO1xuXG4gIHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycyA9IGNvbnN0cnVjdG9ycy5zb21lKChjb25zdHJ1Y3RvcikgPT4ge1xuICAgIGNvbnN0IHVuaWZpZXNXaXRoQ29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvci51bmlmeVRlcm0odGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcyk7XG5cbiAgICBpZiAodW5pZmllc1dpdGhDb25zdHJ1Y3Rvcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzO1xufVxuXG5mdW5jdGlvbiB1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IodGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcykge1xuICBsZXQgdGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3I7XG5cbiAgY29uc3QgYnJhY2tldGVkQ29uc3RydWN0b3IgPSBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nKCk7XG5cbiAgdGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3IgPSBicmFja2V0ZWRDb25zdHJ1Y3Rvci51bmlmeVRlcm0odGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcyk7XG5cbiAgcmV0dXJuIHRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzTWV0YXZhcmlhYmxlKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24gPSBmYWxzZTtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRNZXRhdmFyaWFibGVOYW1lKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24gPSB0cnVlO1xuXG4gICAgICBjb25zdCB7IFRlcm1TdWJzdGl0dXRpb24sIEZyYW1lU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gRnJhbWVTdWJzdGl0dXRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpLFxuICAgICAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IFRlcm1TdWJzdGl0dXRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpLFxuICAgICAgICAgICAgc3Vic3RpdHV0aW9uID0gKHRlcm1TdWJzdGl0dXRpb24gfHwgZnJhbWVTdWJzdGl0dXRpb24pO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGdlbmVyYWxDb250ZXh0ID0gY29udGV4dCwgLy8vXG4gICAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQsICAvLy9cbiAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uVmFsaWRhdGVzID0gc3Vic3RpdHV0aW9uLnZhbGlkYXRlKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIGlmICghc3Vic3RpdHV0aW9uVmFsaWRhdGVzKSB7XG4gICAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBtZXRhdmFyaWFibGUuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyhzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgc3RhdGVkID0gdHJ1ZTsgIC8vL1xuXG4gIGFzc2lnbm1lbnRzID0gbnVsbDsgLy8vXG5cbiAgY29uc3QgY29tYmluYXRvcnMgPSBjb250ZXh0LmdldENvbWJpbmF0b3JzKCksXG4gICAgc3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9ycyA9IGNvbWJpbmF0b3JzLnNvbWUoKGNvbWJpbmF0b3IpID0+IHtcbiAgICAgIGNvbnN0IHVuaWZpZXNXaXRoQ29tYmluYXRvciA9IGNvbWJpbmF0b3IudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHVuaWZpZXNXaXRoQ29tYmluYXRvcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9ycztcbn1cblxuZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoQnJhY2tldGVkQ29tYmluYXRvcihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgc3RhdGVkID0gdHJ1ZTsgIC8vL1xuXG4gIGFzc2lnbm1lbnRzID0gbnVsbDsgLy8vXG5cbiAgY29uc3QgYnJhY2tldGVkQ29tYmluYXRvciA9IGJyYWNrZXRlZENvbWJpbmF0b3JGcm9tTm90aGluZygpLFxuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aEJyYWNrZXRlZENvbWJpbmF0b3IgPSBicmFja2V0ZWRDb21iaW5hdG9yLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoQnJhY2tldGVkQ29tYmluYXRvcjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0VxdWFsaXR5KHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSA9IGZhbHNlO1xuXG4gIGNvbnN0IGVxdWFsaXR5ID0gZXF1YWxpdHlGcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGVxdWFsaXR5ICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5Li4uYCk7XG5cbiAgICBjb25zdCBlcXVhbGl0eVZhbGlkYXRlcyA9IGVxdWFsaXR5LnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSA9IGVxdWFsaXR5VmFsaWRhdGVzOyAvLy9cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0p1ZGdlbWVudChzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50ID0gZmFsc2U7XG5cbiAgY29uc3QganVkZ2VtZW50ID0ganVkZ2VtZW50RnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChqdWRnZW1lbnQgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IGp1ZGdlbWVudFZhbGlkYXRlcyA9IGp1ZGdlbWVudC52YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50ID0ganVkZ2VtZW50VmFsaWRhdGVzOyAgLy8vXG5cbiAgICBpZiAodmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEganVkZ2VtZW50LmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24oc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCB0eXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAodHlwZUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCB0eXBlQXNzZXJ0aW9uVmFsaWRhdGVzID0gdHlwZUFzc2VydGlvbi52YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25WYWxpZGF0ZXM7IC8vL1xuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbikge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbjsgIC8vL1xuXG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgZGVmaW5lZEFzc2VydGlvbiA9IGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGRlZmluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBkZWZpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgZGVmaW5lZEFzc2VydGlvblZhbGlkYXRlcyA9IGRlZmluZWRBc3NlcnRpb24udmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uVmFsaWRhdGVzOyAvLy9cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbiA9IGRlZmluZWRBc3NlcnRpb247ICAvLy9cblxuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBkZWZpbmVkIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24oc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgcHJvcGVydHlBc3NlcnRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAocHJvcGVydHlBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBwcm9wZXJ0eSBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uVmFsaWRhdGVzID0gcHJvcGVydHlBc3NlcnRpb24udmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb25WYWxpZGF0ZXM7IC8vL1xuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBwcm9wZXJ0eSBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNTdWJwcm9vZkFzc2VydGlvbihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25WYWxpZGF0ZXMgPSBzdWJwcm9vZkFzc2VydGlvbi52YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvblZhbGlkYXRlczsgLy8vXG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbikge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHN1YnByb29mIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChjb250YWluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBjb250YWluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb25WYWxpZGF0ZXMgPSBjb250YWluZWRBc3NlcnRpb24udmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvblZhbGlkYXRlczsgLy8vXG5cbiAgICBpZiAodmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgY29udGFpbmVkIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNTYXRpc2ZpZXNBc3NlcnRpb24oc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc2F0aXNmaWVzIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc2F0aXNmaWVzQXNzZXJ0aW9uVmFsaWRhdGVzID0gc2F0aXNmaWVzQXNzZXJ0aW9uLnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgdmFsaWRhdGVzQVN0YXRlbWVudHNTYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb25WYWxpZGF0ZXM7IC8vL1xuXG4gICAgaWYgKHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uKSB7XG4gICAgICBjb25zdCBhc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHNhdGlzZmllcyBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVUZXJtcyA9IFtcbiAgdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSxcbiAgdW5pZnlUZXJtV2l0aENvbnN0cnVjdG9ycyxcbiAgdW5pZnlUZXJtV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yXG5dO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVTdGF0ZW1lbnRzID0gW1xuICB2YWxpZGF0ZVN0YXRlbWVudEFzTWV0YXZhcmlhYmxlLFxuICB1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyxcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoQnJhY2tldGVkQ29tYmluYXRvcixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0VxdWFsaXR5LFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzSnVkZ2VtZW50LFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uXG5dO1xuIl0sIm5hbWVzIjpbInZhbGlkYXRlU3RhdGVtZW50cyIsInZhbGlkYXRlVGVybXMiLCJ2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlIiwidGVybSIsImNvbnRleHQiLCJ2YWxpZGF0ZUZvcndhcmRzIiwidGVybVZhbGlkYXRlc0FzVmFyaWFibGUiLCJ0ZXJtTm9kZSIsImdldE5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJnZXRWYXJpYWJsZU5vZGUiLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidHlwZSIsImdldFR5cGUiLCJzZXRUeXBlIiwidmVyaWZpZXNGb3J3YXJkcyIsImRlYnVnIiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9ycyIsInRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycyIsImNvbnN0cnVjdG9ycyIsImdldENvbnN0cnVjdG9ycyIsInNvbWUiLCJjb25zdHJ1Y3RvciIsInVuaWZpZXNXaXRoQ29uc3RydWN0b3IiLCJ1bmlmeVRlcm0iLCJ1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IiLCJ0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tTm90aGluZyIsInZhbGlkYXRlU3RhdGVtZW50QXNNZXRhdmFyaWFibGUiLCJzdGF0ZW1lbnQiLCJhc3NpZ25tZW50cyIsInN0YXRlZCIsInN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uIiwic3RhdGVtZW50Tm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwic3RhdGVtZW50U3RyaW5nIiwibWV0YXZhcmlhYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lIiwiVGVybVN1YnN0aXR1dGlvbiIsImVsZW1lbnRzIiwiRnJhbWVTdWJzdGl0dXRpb24iLCJmcmFtZVN1YnN0aXR1dGlvbiIsImZyb21TdGF0ZW1lbnQiLCJ0ZXJtU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJzdWJzdGl0dXRpb25WYWxpZGF0ZXMiLCJ2YWxpZGF0ZSIsInVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JzIiwiY29tYmluYXRvcnMiLCJnZXRDb21iaW5hdG9ycyIsInN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvcnMiLCJjb21iaW5hdG9yIiwidW5pZmllc1dpdGhDb21iaW5hdG9yIiwidW5pZnlTdGF0ZW1lbnQiLCJ1bmlmeVN0YXRlbWVudFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbWJpbmF0b3JGcm9tTm90aGluZyIsInN0YXRlbWVudFVuaWZpZXNXaXRoQnJhY2tldGVkQ29tYmluYXRvciIsInZhbGlkYXRlU3RhdGVtZW50QXNFcXVhbGl0eSIsInN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkiLCJlcXVhbGl0eSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudCIsImVxdWFsaXR5VmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnRBc0p1ZGdlbWVudCIsInZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50IiwianVkZ2VtZW50IiwianVkZ2VtZW50RnJvbVN0YXRlbWVudCIsImp1ZGdlbWVudFZhbGlkYXRlcyIsInZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwidHlwZUFzc2VydGlvblZhbGlkYXRlcyIsImFzc2VydGlvbiIsImFkZEFzc2VydGlvbiIsInZhbGlkYXRlU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbiIsImRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwiZGVmaW5lZEFzc2VydGlvblZhbGlkYXRlcyIsInZhbGlkYXRlU3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbiIsInN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInByb3BlcnR5QXNzZXJ0aW9uVmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Iiwic3VicHJvb2ZBc3NlcnRpb25WYWxpZGF0ZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwiY29udGFpbmVkQXNzZXJ0aW9uVmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnRBc1NhdGlzZmllc0Fzc2VydGlvbiIsInZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uIiwic2F0aXNmaWVzQXNzZXJ0aW9uIiwic2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInNhdGlzZmllc0Fzc2VydGlvblZhbGlkYXRlcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBNlZhQTtlQUFBQTs7UUFOQUM7ZUFBQUE7OzsrREFyVlE7d0JBRTJEO3lCQVFoQzs7Ozs7O0FBRWhELFNBQVNDLHVCQUF1QkMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLGdCQUFnQjtJQUM3RCxJQUFJQywwQkFBMEI7SUFFOUIsSUFBTUMsV0FBV0osS0FBS0ssT0FBTyxJQUN2QkMsZUFBZUYsU0FBU0csZUFBZTtJQUU3QyxJQUFJRCxpQkFBaUIsTUFBTTtRQUN6QixJQUFNRSxhQUFhUixLQUFLUyxTQUFTO1FBRWpDUixRQUFRUyxLQUFLLENBQUMsQUFBQyxtQkFBNkIsT0FBWEYsWUFBVztRQUU1QyxJQUFNRyxxQkFBcUJMLGFBQWFNLHFCQUFxQixJQUN2REMsV0FBV1osUUFBUWEsZ0NBQWdDLENBQUNIO1FBRTFELElBQUlFLGFBQWEsTUFBTTtZQUNyQixJQUFNRSxPQUFPRixTQUFTRyxPQUFPO1lBRTdCaEIsS0FBS2lCLE9BQU8sQ0FBQ0Y7WUFFYixJQUFNRyxtQkFBbUJoQjtZQUV6QixJQUFJZ0Is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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "occam-verify-cli",
|
|
3
3
|
"author": "James Smith",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.602",
|
|
5
5
|
"license": "MIT, Anti-996",
|
|
6
6
|
"homepage": "https://github.com/djalbat/occam-verify-cli",
|
|
7
7
|
"description": "Occam's Verifier",
|
|
@@ -13,12 +13,12 @@
|
|
|
13
13
|
"argumentative": "^2.0.36",
|
|
14
14
|
"necessary": "^17.0.9",
|
|
15
15
|
"occam-file-system": "^6.0.505",
|
|
16
|
-
"occam-furtle": "^3.0.
|
|
16
|
+
"occam-furtle": "^3.0.100",
|
|
17
17
|
"occam-grammars": "^1.3.510",
|
|
18
|
-
"occam-languages": "^0.0.
|
|
18
|
+
"occam-languages": "^0.0.73",
|
|
19
19
|
"occam-lexers": "^23.1.34",
|
|
20
20
|
"occam-model": "^1.0.494",
|
|
21
|
-
"occam-nominal": "^1.0.
|
|
21
|
+
"occam-nominal": "^1.0.35",
|
|
22
22
|
"occam-parsers": "^23.1.37"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
package/src/context/ephemeral.js
CHANGED
|
@@ -216,7 +216,7 @@ export default class EphemeralContext extends Context {
|
|
|
216
216
|
return reference;
|
|
217
217
|
}
|
|
218
218
|
|
|
219
|
-
findSubstitutionBySubstitutionNode(substitutionNode) {
|
|
219
|
+
findSubstitutionBySubstitutionNode(substitutionNode, generalContext, specificContext) {
|
|
220
220
|
const substitution = this.substitutions.find((substitution) => {
|
|
221
221
|
const substitutionNodeMatches = substitution.matchNode(substitutionNode);
|
|
222
222
|
|
|
@@ -228,6 +228,78 @@ export default class EphemeralContext extends Context {
|
|
|
228
228
|
return substitution;
|
|
229
229
|
}
|
|
230
230
|
|
|
231
|
+
isTermPresentByTermNode(termNode) {
|
|
232
|
+
const termPresent = this.terms.some((term) => {
|
|
233
|
+
const termNodeMatches = term.matchTermNode(termNode);
|
|
234
|
+
|
|
235
|
+
if (termNodeMatches) {
|
|
236
|
+
return true;
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
return termPresent;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
isFramePresentByFrameNode(frameNode) {
|
|
244
|
+
const framePresent = this.frames.some((frame) => {
|
|
245
|
+
const frameNodeMatches = frame.matchFrameNode(frameNode);
|
|
246
|
+
|
|
247
|
+
if (frameNodeMatches) {
|
|
248
|
+
return true;
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
return framePresent;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
isStatementPresentByStatementNode(statementNode) {
|
|
256
|
+
const statementPresent = this.statements.some((statement) => {
|
|
257
|
+
const statementNodeMatches = statement.matchStatementNode(statementNode);
|
|
258
|
+
|
|
259
|
+
if (statementNodeMatches) {
|
|
260
|
+
return true;
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
return statementPresent;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
isAssertionPresentByAssertionNode(assertionNode) {
|
|
268
|
+
const assertionPresent = this.assertions.some((assertion) => {
|
|
269
|
+
const assertionNodeMatches = assertion.matchAssertionNode(assertionNode);
|
|
270
|
+
|
|
271
|
+
if (assertionNodeMatches) {
|
|
272
|
+
return true;
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
return assertionPresent;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
isReferencePresentByReferenceNode(referenceNode) {
|
|
280
|
+
const referencePresent = this.references.some((reference) => {
|
|
281
|
+
const referenceNodeMatches = reference.matchReferenceNode(referenceNode);
|
|
282
|
+
|
|
283
|
+
if (referenceNodeMatches) {
|
|
284
|
+
return true;
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
|
|
288
|
+
return referencePresent;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
isSubstitutionPresentBySubstitutionNode(substitutionNode) {
|
|
292
|
+
const substitutionPresent = this.substitutions.some((substitution) => {
|
|
293
|
+
const substitutionNodeMatches = substitution.matchSubstitutionNode(substitutionNode);
|
|
294
|
+
|
|
295
|
+
if (substitutionNodeMatches) {
|
|
296
|
+
return true;
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
return substitutionPresent;
|
|
301
|
+
}
|
|
302
|
+
|
|
231
303
|
static fromNothing(context) {
|
|
232
304
|
const terms = [],
|
|
233
305
|
frames = [],
|
|
@@ -40,8 +40,8 @@ const { push, filter } = arrayUtilities,
|
|
|
40
40
|
{ nominalParserFromCombinedCustomGrammar } = parsersUtilities;
|
|
41
41
|
|
|
42
42
|
export default class NominalFileContext extends FileContext {
|
|
43
|
-
constructor(context, filePath, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables) {
|
|
44
|
-
super(context, filePath, tokens, node);
|
|
43
|
+
constructor(context, filePath, tokens, node, lexer, parser, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables) {
|
|
44
|
+
super(context, filePath, tokens, node, lexer, parser);
|
|
45
45
|
|
|
46
46
|
this.context = context;
|
|
47
47
|
this.filePath = filePath;
|
|
@@ -590,9 +590,9 @@ export default class NominalFileContext extends FileContext {
|
|
|
590
590
|
findLabelByMetavariable(metavariable) {
|
|
591
591
|
const labels = this.getLabels(),
|
|
592
592
|
label = labels.find((label) => {
|
|
593
|
-
const
|
|
593
|
+
const labelMetavariableComparesToMetavariable = label.compareMetavariable(metavariable);
|
|
594
594
|
|
|
595
|
-
if (
|
|
595
|
+
if (labelMetavariableComparesToMetavariable) {
|
|
596
596
|
return true;
|
|
597
597
|
}
|
|
598
598
|
}) || null;
|
|
@@ -606,10 +606,9 @@ export default class NominalFileContext extends FileContext {
|
|
|
606
606
|
const judgementSingular = judgement.isSingular();
|
|
607
607
|
|
|
608
608
|
if (judgementSingular) {
|
|
609
|
-
const
|
|
610
|
-
judgementMetavariableEqualToMetavariable = judgementMetavariable.isEqualTo(metavariable);
|
|
609
|
+
const judgementMetavariableComparesToMetavariable = judgement.compareMetavariable(metavariable);
|
|
611
610
|
|
|
612
|
-
if (
|
|
611
|
+
if (judgementMetavariableComparesToMetavariable) {
|
|
613
612
|
return true;
|
|
614
613
|
}
|
|
615
614
|
}
|
|
@@ -857,7 +856,9 @@ export default class NominalFileContext extends FileContext {
|
|
|
857
856
|
}
|
|
858
857
|
|
|
859
858
|
static fromFile(file, context) {
|
|
860
|
-
const
|
|
859
|
+
const lexer = null,
|
|
860
|
+
parser = null,
|
|
861
|
+
types = [],
|
|
861
862
|
rules = [],
|
|
862
863
|
axioms = [],
|
|
863
864
|
lemmas = [],
|
|
@@ -870,13 +871,15 @@ export default class NominalFileContext extends FileContext {
|
|
|
870
871
|
constructors = [],
|
|
871
872
|
metatheorems = [],
|
|
872
873
|
metavariables = [],
|
|
873
|
-
nominalFileContext = FileContext.
|
|
874
|
+
nominalFileContext = FileContext.fromFileLexerAndParser(NominalFileContext, file, lexer, parser, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables, context);
|
|
874
875
|
|
|
875
876
|
return nominalFileContext;
|
|
876
877
|
}
|
|
877
878
|
|
|
878
879
|
static fromFilePath(filePath, context) {
|
|
879
|
-
const
|
|
880
|
+
const lexer = null,
|
|
881
|
+
parser = null,
|
|
882
|
+
types = null,
|
|
880
883
|
rules = null,
|
|
881
884
|
axioms = null,
|
|
882
885
|
lemmas = null,
|
|
@@ -889,7 +892,7 @@ export default class NominalFileContext extends FileContext {
|
|
|
889
892
|
constructors = null,
|
|
890
893
|
metatheorems = null,
|
|
891
894
|
metavariables = null,
|
|
892
|
-
nominalFileContext = FileContext.
|
|
895
|
+
nominalFileContext = FileContext.fromFilePathLexerAndParser(NominalFileContext, filePath, lexer, parser, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables, context);
|
|
893
896
|
|
|
894
897
|
return nominalFileContext;
|
|
895
898
|
}
|
package/src/context/liminal.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { arrayUtilities } from "necessary";
|
|
4
|
+
import { metavariablesFromSubstitutions } from "../utilities/substitutions";
|
|
4
5
|
import { substitutionsStringFromSubstitutions } from "../utilities/string";
|
|
5
6
|
|
|
6
7
|
import Context from "../context";
|
|
7
8
|
|
|
8
|
-
const { compress } = arrayUtilities;
|
|
9
|
+
const { find, first, prune, compress } = arrayUtilities;
|
|
9
10
|
|
|
10
11
|
export default class LiminalContext extends Context {
|
|
11
12
|
constructor(context, substitutions) {
|
|
@@ -14,27 +15,50 @@ export default class LiminalContext extends Context {
|
|
|
14
15
|
this.substitutions = substitutions;
|
|
15
16
|
}
|
|
16
17
|
|
|
17
|
-
getSubstitutions() {
|
|
18
|
+
getSubstitutions(nested = true) {
|
|
18
19
|
let substitutions;
|
|
19
20
|
|
|
20
|
-
|
|
21
|
+
if (nested) {
|
|
22
|
+
const context = this.getContext();
|
|
21
23
|
|
|
22
|
-
|
|
24
|
+
substitutions = context.getSubstitutions();
|
|
23
25
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
substitutions = [ ///
|
|
27
|
+
...this.substitutions,
|
|
28
|
+
...substitutions
|
|
29
|
+
]
|
|
30
|
+
} else {
|
|
31
|
+
substitutions = this.substitutions;
|
|
32
|
+
}
|
|
28
33
|
|
|
29
34
|
return substitutions;
|
|
30
35
|
}
|
|
31
36
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
37
|
+
getNonTrivialSubstitutions(nested = true) {
|
|
38
|
+
const nonTrivialSubstitutions = this.findSubstitutions((substitution) => {
|
|
39
|
+
const substitutionNonTrivial = substitution.isNonTrivial();
|
|
40
|
+
|
|
41
|
+
if (substitutionNonTrivial) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
}, nested);
|
|
45
|
+
|
|
46
|
+
return nonTrivialSubstitutions;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
getSoleNonTrivialSubstitution(nested = true) {
|
|
50
|
+
let soleNonTrivialSubstitutions = null;
|
|
51
|
+
|
|
52
|
+
const nonTrivialSubstitutions = this.getNonTrivialSubstitutions(nested),
|
|
53
|
+
nonTrivialSubstitutionsLength = nonTrivialSubstitutions.length;
|
|
54
|
+
|
|
55
|
+
if (nonTrivialSubstitutionsLength === 1) {
|
|
56
|
+
const firstNonTrivkalSubstitution = first(nonTrivialSubstitutions);
|
|
57
|
+
|
|
58
|
+
soleNonTrivialSubstitutions = firstNonTrivkalSubstitution; ///
|
|
35
59
|
}
|
|
36
60
|
|
|
37
|
-
|
|
61
|
+
return soleNonTrivialSubstitutions;
|
|
38
62
|
}
|
|
39
63
|
|
|
40
64
|
addSubstitution(substitution) {
|
|
@@ -47,9 +71,9 @@ export default class LiminalContext extends Context {
|
|
|
47
71
|
];
|
|
48
72
|
|
|
49
73
|
compress(this.substitutions, (substitutionA, substitutionB) => {
|
|
50
|
-
const
|
|
74
|
+
const substitutionAEqualToSubstitutionB = substitutionA.isEqualTo(substitutionB);
|
|
51
75
|
|
|
52
|
-
if (!
|
|
76
|
+
if (!substitutionAEqualToSubstitutionB) {
|
|
53
77
|
return true;
|
|
54
78
|
}
|
|
55
79
|
});
|
|
@@ -77,7 +101,121 @@ export default class LiminalContext extends Context {
|
|
|
77
101
|
context.trace(`Added the '${substitutionsString}' substitutions to the context.`);
|
|
78
102
|
}
|
|
79
103
|
|
|
80
|
-
|
|
104
|
+
removeSubstitution(substitution) {
|
|
105
|
+
const context = this,
|
|
106
|
+
substitutionA = substitution, ///
|
|
107
|
+
substitutionString = substitution.getString();
|
|
108
|
+
|
|
109
|
+
prune(this.substitutions, (substitution) => {
|
|
110
|
+
const substitutionB = substitution,
|
|
111
|
+
substitutionAEqualTosubstitutionB = substitutionA.isEqualTo(substitutionB);
|
|
112
|
+
|
|
113
|
+
if (!substitutionAEqualTosubstitutionB) {
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
context.trace(`Removed the '${substitutionString}' substitution to the context.`);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
resolveSubstitutions(generalContext, specificContext) {
|
|
122
|
+
const substitutions = this.getSubstitutions(),
|
|
123
|
+
metavariables = metavariablesFromSubstitutions(substitutions, generalContext, specificContext);
|
|
124
|
+
|
|
125
|
+
metavariables.forEach((metavariable) => {
|
|
126
|
+
const complexSubstitutions = this.findComplexSubstitutionsByMetavariable(metavariable),
|
|
127
|
+
complexSubstitutionsResolved = complexSubstitutions.every((complexSubstitution) => {
|
|
128
|
+
const substitution = complexSubstitution, ///
|
|
129
|
+
resolved = substitution.isResolved();
|
|
130
|
+
|
|
131
|
+
if (!resolved) {
|
|
132
|
+
substitution.resolve(generalContext, specificContext);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
if (complexSubstitutionsResolved) {
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
areSubstitutionsResolved(generalContext, specificContext) {
|
|
143
|
+
const substitutions = this.getSubstitutions(),
|
|
144
|
+
metavariables = metavariablesFromSubstitutions(substitutions, generalContext, specificContext),
|
|
145
|
+
resolved = metavariables.every((metavariable) => {
|
|
146
|
+
const complexSubstitutions = this.findComplexSubstitutionsByMetavariable(metavariable),
|
|
147
|
+
complexSubstitutionsResolved = complexSubstitutions.every((complexSubstitution) => {
|
|
148
|
+
const complexSubstitutionResolved = complexSubstitution.isResolved();
|
|
149
|
+
|
|
150
|
+
if (complexSubstitutionResolved) {
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
if (complexSubstitutionsResolved) {
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
return resolved;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
commit(context) {
|
|
164
|
+
if (context === undefined) {
|
|
165
|
+
context = this.getContext();
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
context.addSubstitutions(this.substitutions);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
findSubstitution(callback, generalContext, specificContext) {
|
|
172
|
+
const substitutions = this.getSubstitutions(),
|
|
173
|
+
substitution = substitutions.find(callback, generalContext, specificContext);
|
|
174
|
+
|
|
175
|
+
return substitution;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
findSubstitutions(callback, nested = true) {
|
|
179
|
+
let substitutions;
|
|
180
|
+
|
|
181
|
+
substitutions = this.getSubstitutions(nested);
|
|
182
|
+
|
|
183
|
+
substitutions = find(substitutions, callback); ///
|
|
184
|
+
|
|
185
|
+
return substitutions;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
findSubstitutionByVariable(variable, generalContext, specifiContext) {
|
|
189
|
+
const substitution = this.findSubstitution((substitution) => {
|
|
190
|
+
const substitutionVariable = substitution.getVariable();
|
|
191
|
+
|
|
192
|
+
if (substitutionVariable !== null) {
|
|
193
|
+
const substitutionVariableEqualToVariable = substitutionVariable.isEqualTo(variable);
|
|
194
|
+
|
|
195
|
+
if (substitutionVariableEqualToVariable) {
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}) || null;
|
|
200
|
+
|
|
201
|
+
return substitution;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
findSubstitutionByMetavariable(metavariable, generalContext, specificContext) {
|
|
205
|
+
const substitution = this.findSubstitution((substitution) => { ///
|
|
206
|
+
const substitutionMetavariable = substitution.getMetavariable(generalContext, specificContext);
|
|
207
|
+
|
|
208
|
+
if (substitutionMetavariable !== null) {
|
|
209
|
+
const substitutionMetavvariableComparesToMetavariable = substitutionMetavariable.compare(metavariable);
|
|
210
|
+
|
|
211
|
+
if (substitutionMetavvariableComparesToMetavariable) {
|
|
212
|
+
return true;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}) || null;
|
|
216
|
+
|
|
217
|
+
return substitution;
|
|
218
|
+
}
|
|
81
219
|
|
|
82
220
|
findSimpleSubstitutionByMetavariable(metavariable) {
|
|
83
221
|
const simpleSubstitution = this.findSubstitution((substitution) => {
|
|
@@ -85,9 +223,9 @@ export default class LiminalContext extends Context {
|
|
|
85
223
|
|
|
86
224
|
if (substitutionSimple) {
|
|
87
225
|
const simpleSubstitution = substitution, ///
|
|
88
|
-
|
|
226
|
+
simpleSubstitutionMetavariableComparesToMetavariable = simpleSubstitution.compareMetavariable(metavariable);
|
|
89
227
|
|
|
90
|
-
if (
|
|
228
|
+
if (simpleSubstitutionMetavariableComparesToMetavariable) {
|
|
91
229
|
return true;
|
|
92
230
|
}
|
|
93
231
|
}
|
|
@@ -96,15 +234,32 @@ export default class LiminalContext extends Context {
|
|
|
96
234
|
return simpleSubstitution;
|
|
97
235
|
}
|
|
98
236
|
|
|
99
|
-
|
|
237
|
+
findComplexSubstitutionsByMetavariable(metavariable) {
|
|
238
|
+
const complexSubstitutions = this.findSubstitutions((substitution) => {
|
|
239
|
+
const substitutionComplex = substitution.isComplex();
|
|
240
|
+
|
|
241
|
+
if (substitutionComplex) {
|
|
242
|
+
const complexSubstitution = substitution, ///
|
|
243
|
+
complexSubstitutionMetavariableComparesToMetavariable = complexSubstitution.compareMetavariable(metavariable);
|
|
244
|
+
|
|
245
|
+
if (complexSubstitutionMetavariableComparesToMetavariable) {
|
|
246
|
+
return true;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
return complexSubstitutions;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
findSubstitutionByMetavariableAndSubstitution(metavariable, substitution, generalContet, specificContext) {
|
|
100
255
|
const substitutionA = substitution; ///
|
|
101
256
|
|
|
102
257
|
substitution = this.findSubstitution((substitution) => { ///
|
|
103
|
-
const
|
|
258
|
+
const substitutionMetavariablCompareslToMetavariable = substitution.compareMetavariable(metavariable);
|
|
104
259
|
|
|
105
|
-
if (
|
|
260
|
+
if (substitutionMetavariablCompareslToMetavariable) {
|
|
106
261
|
const substitutionB = substitution, ///
|
|
107
|
-
substitutionBSubstitutionComparesToSubstitutionA = substitutionB.
|
|
262
|
+
substitutionBSubstitutionComparesToSubstitutionA = substitutionB.compare(substitutionA);
|
|
108
263
|
|
|
109
264
|
if (substitutionBSubstitutionComparesToSubstitutionA) {
|
|
110
265
|
return true;
|
|
@@ -122,8 +277,8 @@ export default class LiminalContext extends Context {
|
|
|
122
277
|
return simpleSubstitutionPresent;
|
|
123
278
|
}
|
|
124
279
|
|
|
125
|
-
isSubstitutionPresentByMetavariableAndSubstitution(metavariable, substitution) {
|
|
126
|
-
substitution = this.findSubstitutionByMetavariableAndSubstitution(metavariable, substitution); ///
|
|
280
|
+
isSubstitutionPresentByMetavariableAndSubstitution(metavariable, substitution, generalContet, specificContext) {
|
|
281
|
+
substitution = this.findSubstitutionByMetavariableAndSubstitution(metavariable, substitution, generalContet, specificContext); ///
|
|
127
282
|
|
|
128
283
|
const substitutionPresent = (substitution !== null);
|
|
129
284
|
|
|
@@ -132,8 +287,8 @@ export default class LiminalContext extends Context {
|
|
|
132
287
|
|
|
133
288
|
static fromNothing(context) {
|
|
134
289
|
const substitutions = [],
|
|
135
|
-
|
|
290
|
+
liminalContext = new LiminalContext(context, substitutions);
|
|
136
291
|
|
|
137
|
-
return
|
|
292
|
+
return liminalContext;
|
|
138
293
|
}
|
|
139
294
|
}
|
package/src/context/literal.js
CHANGED