occam-nominal 1.0.334 → 1.0.340
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.js +5 -1
- package/lib/element/assertion/contained.js +4 -4
- package/lib/element/assertion/defined.js +3 -3
- package/lib/element/assertion/subproof.js +6 -6
- package/lib/element/assertion/type.js +3 -3
- package/lib/element/assumption.js +134 -111
- package/lib/element/combinator/bracketed.js +2 -2
- package/lib/element/constraint.js +114 -102
- package/lib/element/constructor/bracketed.js +3 -3
- package/lib/element/deduction.js +2 -2
- package/lib/element/equality.js +3 -3
- package/lib/element/frame.js +3 -3
- package/lib/element/goal.js +67 -57
- package/lib/element/hypothesis.js +2 -2
- package/lib/element/judgement.js +15 -16
- package/lib/element/label.js +25 -22
- package/lib/element/metaType.js +2 -2
- package/lib/element/metavariable.js +54 -45
- package/lib/element/parameter.js +2 -2
- package/lib/element/procedureCall.js +2 -2
- package/lib/element/procedureReference.js +2 -2
- package/lib/element/proofAssertion/step.js +7 -7
- package/lib/element/proofAssertion/supposition.js +2 -2
- package/lib/element/proofAssertion.js +2 -2
- package/lib/element/reference.js +27 -24
- package/lib/element/schema.js +165 -154
- package/lib/element/signature.js +2 -2
- package/lib/element/statement.js +7 -5
- package/lib/element/substitution/reference.js +22 -29
- package/lib/element/substitution/statement.js +5 -5
- package/lib/element/term.js +2 -2
- package/lib/element/typePrefix.js +2 -2
- package/lib/element/variable.js +2 -2
- package/lib/process/unification.js +41 -47
- package/lib/process/unify.js +10 -10
- package/lib/process/validate.js +6 -6
- package/lib/process/validation.js +13 -13
- package/package.json +9 -9
- package/src/context.js +6 -0
- package/src/element/assertion/contained.js +3 -3
- package/src/element/assertion/defined.js +2 -2
- package/src/element/assertion/subproof.js +5 -5
- package/src/element/assertion/type.js +2 -2
- package/src/element/assumption.js +158 -132
- package/src/element/combinator/bracketed.js +1 -1
- package/src/element/constraint.js +134 -125
- package/src/element/constructor/bracketed.js +2 -2
- package/src/element/deduction.js +1 -1
- package/src/element/equality.js +2 -2
- package/src/element/frame.js +2 -2
- package/src/element/goal.js +82 -74
- package/src/element/hypothesis.js +2 -2
- package/src/element/judgement.js +20 -22
- package/src/element/label.js +26 -25
- package/src/element/metaType.js +2 -2
- package/src/element/metavariable.js +70 -53
- package/src/element/parameter.js +2 -2
- package/src/element/procedureCall.js +2 -2
- package/src/element/procedureReference.js +2 -2
- package/src/element/proofAssertion/step.js +6 -6
- package/src/element/proofAssertion/supposition.js +1 -1
- package/src/element/proofAssertion.js +1 -1
- package/src/element/reference.js +28 -27
- package/src/element/schema.js +193 -195
- package/src/element/signature.js +2 -2
- package/src/element/statement.js +9 -5
- package/src/element/substitution/reference.js +22 -35
- package/src/element/substitution/statement.js +4 -4
- package/src/element/term.js +1 -1
- package/src/element/typePrefix.js +2 -2
- package/src/element/variable.js +1 -1
- package/src/process/unification.js +44 -59
- package/src/process/unify.js +9 -9
- package/src/process/validate.js +5 -5
- package/src/process/validation.js +12 -12
package/lib/element/equality.js
CHANGED
|
@@ -118,12 +118,12 @@ const _default = (0, _elements.define)(class Equality extends _occamlanguages.El
|
|
|
118
118
|
validateTerms(context, continuation) {
|
|
119
119
|
const equalityString = this.getString(); ///
|
|
120
120
|
context.trace(`Validating the '${equalityString}' equality's terms...`);
|
|
121
|
-
this.leftTerm.validate(context, (leftTerm, context)=>{
|
|
121
|
+
return this.leftTerm.validate(context, (leftTerm, context)=>{
|
|
122
122
|
if (leftTerm === null) {
|
|
123
123
|
const termsValidate = false;
|
|
124
124
|
return continuation(termsValidate);
|
|
125
125
|
}
|
|
126
|
-
this.rightTerm.validate(context, (rightTerm, context)=>{
|
|
126
|
+
return this.rightTerm.validate(context, (rightTerm, context)=>{
|
|
127
127
|
if (rightTerm === null) {
|
|
128
128
|
const termsValidate = false;
|
|
129
129
|
return continuation(termsValidate);
|
|
@@ -216,4 +216,4 @@ function rightTermFromEqualityNode(equalityNode, context) {
|
|
|
216
216
|
return rightTerm;
|
|
217
217
|
}
|
|
218
218
|
|
|
219
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2VxdWFsaXR5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBlcXVhdGVUZXJtcyB9IGZyb20gXCIuLi9wcm9jZXNzL2VxdWF0ZVwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlRXF1YWxpdHkgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHsgZXF1YWxpdHlBc3NpZ25tZW50RnJvbUVxdWFsaXR5LCBsZWZ0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5LCByaWdodFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eSB9IGZyb20gXCIuLi9wcm9jZXNzL2Fzc2lnblwiO1xuXG5jb25zdCB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBFcXVhbGl0eSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxlZnRUZXJtLCByaWdodFRlcm0pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5sZWZ0VGVybSA9IGxlZnRUZXJtO1xuICAgIHRoaXMucmlnaHRUZXJtID0gcmlnaHRUZXJtO1xuICB9XG5cbiAgZ2V0TGVmdFRlcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdFRlcm07XG4gIH1cblxuICBnZXRSaWdodFRlcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMucmlnaHRUZXJtO1xuICB9XG5cbiAgZ2V0RXF1YWxpdHlOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBlcXVhbGl0eU5kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5TmRlO1xuICB9XG5cbiAgZ2V0TGVmdFRlcm1Ob2RlKCkge1xuICAgIGNvbnN0IGxlZnRUZXJtTm9kZSA9IHRoaXMubGVmdFRlcm0uZ2V0Tm9kZSgpO1xuXG4gICAgcmV0dXJuIGxlZnRUZXJtTm9kZTtcbiAgfVxuXG4gIGdldFJpZ2h0VGVybU5vZGUoKSB7XG4gICAgY29uc3QgcmlnaHRUZXJtTm9kZSA9IHRoaXMucmlnaHRUZXJtLmdldE5vZGUoKTtcblxuICAgIHJldHVybiByaWdodFRlcm1Ob2RlO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICBsZXQgdHlwZTtcblxuICAgIGNvbnN0IGxlZnRUZXJtVHlwZSA9IHRoaXMubGVmdFRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgIHJpZ2h0VGVybVR5cGUgPSB0aGlzLnJpZ2h0VGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgbGVmdFRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mUmlnaHRUZXJtVHlwZSA9IGxlZnRUZXJtVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZihyaWdodFRlcm1UeXBlKSxcbiAgICAgICAgICByaWdodFRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mTGVmdFRlcm1UeXBlID0gcmlnaHRUZXJtVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZihsZWZ0VGVybVR5cGUpO1xuXG4gICAgaWYgKGxlZnRUZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZlJpZ2h0VGVybVR5cGUpIHtcbiAgICAgIHR5cGUgPSBsZWZ0VGVybVR5cGU7ICAvLy9cbiAgICB9XG5cbiAgICBpZiAocmlnaHRUZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZkxlZnRUZXJtVHlwZSkge1xuICAgICAgdHlwZSA9IHJpZ2h0VGVybVR5cGU7IC8vL1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZ2V0VGVybXMoKSB7XG4gICAgY29uc3QgdGVybXMgPSBbXG4gICAgICB0aGlzLmxlZnRUZXJtLFxuICAgICAgdGhpcy5yaWdodFRlcm1cbiAgICBdO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgbWF0Y2hFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IGVxdWFsaXR5Tm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBlcXVhbGl0eU5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5Tm9kZU1hdGNoZXM7XG4gIH1cblxuICBpc1JlZmxleGl2ZSgpIHtcbiAgICBjb25zdCBsZWZ0VGVybVN0cmluZyA9IHRoaXMubGVmdFRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcmlnaHRUZXJtU3RyaW5nID0gdGhpcy5yaWdodFRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcmVmbGV4aXZlID0gKGxlZnRUZXJtU3RyaW5nID09PSByaWdodFRlcm1TdHJpbmcpO1xuXG4gICAgcmV0dXJuIHJlZmxleGl2ZTtcbiAgfVxuXG4gIGlzRXF1YWxUbyhlcXVhbGl0eSkge1xuICAgIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IGVxdWFsaXR5LmdldE5vZGUoKSxcbiAgICAgICAgICBlcXVhbGl0eU5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBlcXVhbGl0eU5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGlzRXF1YWwoY29udGV4dCkge1xuICAgIGxldCBlcXVhbCA9IGZhbHNlO1xuXG4gICAgY29uc3QgdGVybXNFcXVhdGUgPSBlcXVhdGVUZXJtcyh0aGlzLmxlZnRUZXJtLCB0aGlzLnJpZ2h0VGVybSwgY29udGV4dCk7XG5cbiAgICBpZiAodGVybXNFcXVhdGUpIHtcbiAgICAgIGVxdWFsID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXF1YWw7XG4gIH1cblxuICBmaW5kVmFsaWRFcXVhbGl0eShjb250ZXh0KSB7XG4gICAgY29uc3QgZXF1YWxpdHlOb2RlID0gdGhpcy5nZXRFcXVhbGl0eU5vZGUoKSxcbiAgICAgICAgICBlcXVhbGl0eSA9IGNvbnRleHQuZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSxcbiAgICAgICAgICB2YWxpZEVxdWFsaXR5ID0gZXF1YWxpdHk7ICAvLy9cblxuICAgIHJldHVybiB2YWxpZEVxdWFsaXR5O1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgZXF1YWxpdHlTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkuLi5gKTtcblxuICAgIGNvbnN0IHZhbGlkRXF1YWxpdHkgPSB0aGlzLmZpbmRWYWxpZEVxdWFsaXR5KGNvbnRleHQpO1xuXG4gICAgaWYgKHZhbGlkRXF1YWxpdHkgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGVxdWFsaXR5ID0gdmFsaWRFcXVhbGl0eTsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IGlzIGFscmVhZHkgdmFsaWQuYCk7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oZXF1YWxpdHkpO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWRhdGVUZXJtcyhjb250ZXh0LCAodGVybXNWYWxpZGF0ZSkgPT4ge1xuICAgICAgaWYgKCF0ZXJtc1ZhbGlkYXRlKSB7XG4gICAgICAgIGNvbnN0IGVxdWFsaXR5ID0gbnVsbDtcblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGVxdWFsaXR5KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlblN0YXRlZCA9IHRoaXMudmFsaWRhdGVXaGVuU3RhdGVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVyaXZlZC5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gZXhpc3RzKFtcbiAgICAgICAgdmFsaWRhdGVzV2hlblN0YXRlZCxcbiAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWRcbiAgICAgIF0sIGNvbnRleHQsICh2YWxpZGF0ZXMpID0+IHtcbiAgICAgICAgbGV0IGVxdWFsaXR5ID0gbnVsbDtcblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgZXF1YWxpdHkgPSB0aGlzOyAgLy8vXG5cbiAgICAgICAgICB0aGlzLmFzc2lnbihjb250ZXh0KTtcblxuICAgICAgICAgIGNvbnRleHQuYWRkRXF1YWxpdHkoZXF1YWxpdHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oZXF1YWxpdHkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVRlcm1zKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGVxdWFsaXR5U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5J3MgdGVybXMuLi5gKTtcblxuICAgIHRoaXMubGVmdFRlcm0udmFsaWRhdGUoY29udGV4dCwgKGxlZnRUZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICBpZiAobGVmdFRlcm0gPT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgdGVybXNWYWxpZGF0ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybXNWYWxpZGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmlnaHRUZXJtLnZhbGlkYXRlKGNvbnRleHQsIChyaWdodFRlcm0sIGNvbnRleHQpID0+IHtcbiAgICAgICAgaWYgKHJpZ2h0VGVybSA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHRlcm1zVmFsaWRhdGUgPSBmYWxzZTtcblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybXNWYWxpZGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGVybXNWYWxpZGF0ZSA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGxlZnRUZXJtVHlwZSA9IGxlZnRUZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICAgICAgcmlnaHRUZXJtVHlwZSA9IHJpZ2h0VGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgICAgIGxlZnRUZXJtVHlwZUVxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZlJpZ2h0VGVybVR5cGUgPSBsZWZ0VGVybVR5cGUuaXNFcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2YocmlnaHRUZXJtVHlwZSk7XG5cbiAgICAgICAgaWYgKGxlZnRUZXJtVHlwZUVxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZlJpZ2h0VGVybVR5cGUpIHtcbiAgICAgICAgICB0ZXJtc1ZhbGlkYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0ZXJtc1ZhbGlkYXRlKSB7XG4gICAgICAgICAgdGhpcy5sZWZ0VGVybSA9IGxlZnRUZXJtO1xuXG4gICAgICAgICAgdGhpcy5yaWdodFRlcm0gPSByaWdodFRlcm07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGVybXNWYWxpZGF0ZSkge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSdzIHRlcm1zLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0ZXJtc1ZhbGlkYXRlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuU3RhdGVkKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHN0YXRlZCA9IGNvbnRleHQuaXNTdGF0ZWQoKTtcblxuICAgIGlmICghc3RhdGVkKSB7XG4gICAgICBjb25zdCB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzV2hlblN0YXRlZCk7XG4gICAgfVxuXG4gICAgbGV0IHZhbGlkYXRlc1doZW5TdGF0ZWQ7XG5cbiAgICBjb25zdCBlcXVhbGl0eVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBzdGF0ZWQgZXF1YWxpdHkuLi5gKTtcblxuICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0cnVlO1xuXG4gICAgaWYgKHZhbGlkYXRlc1doZW5TdGF0ZWQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBzdGF0ZWQgZXF1YWxpdHkuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlcml2ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKHN0YXRlZCkge1xuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgICAgY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5EZXJpdmVkKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCB2YWxpZGF0ZXNXaGVuRGVyaXZlZDtcblxuICAgIGNvbnN0IGVxdWFsaXR5U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGRlcml2ZWQgZXF1YWxpdHkuLi5gKTtcblxuICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdHJ1ZTsgIC8vL1xuXG4gICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZGVyaXZlZCBlcXVhbGl0eS5gKTtcbiAgICB9XG5cbiAgICBjb250aW51YXRpb24odmFsaWRhdGVzV2hlbkRlcml2ZWQpO1xuICB9XG5cbiAgYXNzaWduKGNvbnRleHQpIHtcbiAgICBjb25zdCBlcXVhbGl0eSA9IHRoaXMsICAvLy9cbiAgICAgICAgICBlcXVhbGl0eUFzc2lnbm1lbnQgPSBlcXVhbGl0eUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkoZXF1YWxpdHksIGNvbnRleHQpLFxuICAgICAgICAgIGxlZnRWYXJpYWJsZUFzc2lnbm1lbnQgPSBsZWZ0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5KGVxdWFsaXR5LCBjb250ZXh0KSxcbiAgICAgICAgICByaWdodFZhcmlhYmxlQXNzaWdubWVudCA9IHJpZ2h0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5KGVxdWFsaXR5LCBjb250ZXh0KTtcblxuICAgIGNvbnRleHQuYWRkQXNzaWdubWVudChlcXVhbGl0eUFzc2lnbm1lbnQpO1xuXG4gICAgY29udGV4dC5hZGRBc3NpZ25tZW50KGxlZnRWYXJpYWJsZUFzc2lnbm1lbnQpO1xuXG4gICAgY29udGV4dC5hZGRBc3NpZ25tZW50KHJpZ2h0VmFyaWFibGVBc3NpZ25tZW50KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJFcXVhbGl0eVwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIGVxdWFsaXR5Tm9kZSA9IGluc3RhbnRpYXRlRXF1YWxpdHkoc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG5vZGUgPSBlcXVhbGl0eU5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICBsZWZ0VGVybSA9IGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgY29uc3QgZXF1YWxpdHkgPSBuZXcgRXF1YWxpdHkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsZWZ0VGVybSwgcmlnaHRUZXJtKTtcblxuICAgICAgcmV0dXJuIGVxdWFsaXR5O1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgZXF1YWxpdHkgPSBlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG59KTtcblxuZnVuY3Rpb24gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsZWZ0VGVybU5vZGUgPSBlcXVhbGl0eU5vZGUuZ2V0TGVmdFRlcm1Ob2RlKCksXG4gICAgICAgIGxlZnRUZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUobGVmdFRlcm1Ob2RlKTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmZ1bmN0aW9uIHJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJpZ2h0VGVybU5vZGUgPSBlcXVhbGl0eU5vZGUuZ2V0TGVmdFRlcm1Ob2RlKCksXG4gICAgICAgIHJpZ2h0VGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG4iXSwibmFtZXMiOlsiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiRXF1YWxpdHkiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwibGVmdFRlcm0iLCJyaWdodFRlcm0iLCJnZXRMZWZ0VGVybSIsImdldFJpZ2h0VGVybSIsImdldEVxdWFsaXR5Tm9kZSIsImdldE5vZGUiLCJlcXVhbGl0eU5kZSIsImdldExlZnRUZXJtTm9kZSIsImxlZnRUZXJtTm9kZSIsImdldFJpZ2h0VGVybU5vZGUiLCJyaWdodFRlcm1Ob2RlIiwiZ2V0VHlwZSIsInR5cGUiLCJsZWZ0VGVybVR5cGUiLCJyaWdodFRlcm1UeXBlIiwibGVmdFRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mUmlnaHRUZXJtVHlwZSIsImlzRXF1YWxUb09yU3ViVHlwZU9mIiwicmlnaHRUZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZkxlZnRUZXJtVHlwZSIsImdldFRlcm1zIiwidGVybXMiLCJtYXRjaEVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5Tm9kZSIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwiZXF1YWxpdHlOb2RlTWF0Y2hlcyIsImlzUmVmbGV4aXZlIiwibGVmdFRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJyaWdodFRlcm1TdHJpbmciLCJyZWZsZXhpdmUiLCJpc0VxdWFsVG8iLCJlcXVhbGl0eSIsImVxdWFsVG8iLCJpc0VxdWFsIiwiZXF1YWwiLCJ0ZXJtc0VxdWF0ZSIsImVxdWF0ZVRlcm1zIiwiZmluZFZhbGlkRXF1YWxpdHkiLCJmaW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZSIsInZhbGlkRXF1YWxpdHkiLCJ2YWxpZGF0ZSIsImNvbnRpbnVhdGlvbiIsImVxdWFsaXR5U3RyaW5nIiwidHJhY2UiLCJkZWJ1ZyIsInZhbGlkYXRlVGVybXMiLCJ0ZXJtc1ZhbGlkYXRlIiwidmFsaWRhdGVzV2hlblN0YXRlZCIsInZhbGlkYXRlV2hlblN0YXRlZCIsImJpbmQiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJleGlzdHMiLCJ2YWxpZGF0ZXMiLCJhc3NpZ24iLCJhZGRFcXVhbGl0eSIsImxlZnRUZXJtVHlwZUVxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZlJpZ2h0VGVybVR5cGUiLCJpc0VxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZiIsInN0YXRlZCIsImlzU3RhdGVkIiwiZXF1YWxpdHlBc3NpZ25tZW50IiwiZXF1YWxpdHlBc3NpZ25tZW50RnJvbUVxdWFsaXR5IiwibGVmdFZhcmlhYmxlQXNzaWdubWVudCIsImxlZnRWYXJpYWJsZUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkiLCJyaWdodFZhcmlhYmxlQXNzaWdubWVudCIsInJpZ2h0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5IiwiYWRkQXNzaWdubWVudCIsInRvSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlRXF1YWxpdHkiLCJsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJyaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlIiwiZmluZFRlcm1CeVRlcm1Ob2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFjQTs7O2VBQUE7OztnQ0FaNkM7MEJBRXRCOzhCQUNBO3dCQUNLO3lCQUNBOzZCQUNRO3lCQUNNO3dCQUM4RTtBQUV4SCxNQUFNLEVBQUVBLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFOUUsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxpQkFBaUJDLHVCQUFPO0lBQ2xELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsUUFBUSxFQUFFQyxTQUFTLENBQUU7UUFDbEUsS0FB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
|
|
219
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2VxdWFsaXR5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBlcXVhdGVUZXJtcyB9IGZyb20gXCIuLi9wcm9jZXNzL2VxdWF0ZVwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlRXF1YWxpdHkgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHsgZXF1YWxpdHlBc3NpZ25tZW50RnJvbUVxdWFsaXR5LCBsZWZ0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5LCByaWdodFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eSB9IGZyb20gXCIuLi9wcm9jZXNzL2Fzc2lnblwiO1xuXG5jb25zdCB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBFcXVhbGl0eSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxlZnRUZXJtLCByaWdodFRlcm0pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5sZWZ0VGVybSA9IGxlZnRUZXJtO1xuICAgIHRoaXMucmlnaHRUZXJtID0gcmlnaHRUZXJtO1xuICB9XG5cbiAgZ2V0TGVmdFRlcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdFRlcm07XG4gIH1cblxuICBnZXRSaWdodFRlcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMucmlnaHRUZXJtO1xuICB9XG5cbiAgZ2V0RXF1YWxpdHlOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBlcXVhbGl0eU5kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5TmRlO1xuICB9XG5cbiAgZ2V0TGVmdFRlcm1Ob2RlKCkge1xuICAgIGNvbnN0IGxlZnRUZXJtTm9kZSA9IHRoaXMubGVmdFRlcm0uZ2V0Tm9kZSgpO1xuXG4gICAgcmV0dXJuIGxlZnRUZXJtTm9kZTtcbiAgfVxuXG4gIGdldFJpZ2h0VGVybU5vZGUoKSB7XG4gICAgY29uc3QgcmlnaHRUZXJtTm9kZSA9IHRoaXMucmlnaHRUZXJtLmdldE5vZGUoKTtcblxuICAgIHJldHVybiByaWdodFRlcm1Ob2RlO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICBsZXQgdHlwZTtcblxuICAgIGNvbnN0IGxlZnRUZXJtVHlwZSA9IHRoaXMubGVmdFRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgIHJpZ2h0VGVybVR5cGUgPSB0aGlzLnJpZ2h0VGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgbGVmdFRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mUmlnaHRUZXJtVHlwZSA9IGxlZnRUZXJtVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZihyaWdodFRlcm1UeXBlKSxcbiAgICAgICAgICByaWdodFRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mTGVmdFRlcm1UeXBlID0gcmlnaHRUZXJtVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZihsZWZ0VGVybVR5cGUpO1xuXG4gICAgaWYgKGxlZnRUZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZlJpZ2h0VGVybVR5cGUpIHtcbiAgICAgIHR5cGUgPSBsZWZ0VGVybVR5cGU7ICAvLy9cbiAgICB9XG5cbiAgICBpZiAocmlnaHRUZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZkxlZnRUZXJtVHlwZSkge1xuICAgICAgdHlwZSA9IHJpZ2h0VGVybVR5cGU7IC8vL1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZ2V0VGVybXMoKSB7XG4gICAgY29uc3QgdGVybXMgPSBbXG4gICAgICB0aGlzLmxlZnRUZXJtLFxuICAgICAgdGhpcy5yaWdodFRlcm1cbiAgICBdO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgbWF0Y2hFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IGVxdWFsaXR5Tm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBlcXVhbGl0eU5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5Tm9kZU1hdGNoZXM7XG4gIH1cblxuICBpc1JlZmxleGl2ZSgpIHtcbiAgICBjb25zdCBsZWZ0VGVybVN0cmluZyA9IHRoaXMubGVmdFRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcmlnaHRUZXJtU3RyaW5nID0gdGhpcy5yaWdodFRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcmVmbGV4aXZlID0gKGxlZnRUZXJtU3RyaW5nID09PSByaWdodFRlcm1TdHJpbmcpO1xuXG4gICAgcmV0dXJuIHJlZmxleGl2ZTtcbiAgfVxuXG4gIGlzRXF1YWxUbyhlcXVhbGl0eSkge1xuICAgIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IGVxdWFsaXR5LmdldE5vZGUoKSxcbiAgICAgICAgICBlcXVhbGl0eU5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBlcXVhbGl0eU5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGlzRXF1YWwoY29udGV4dCkge1xuICAgIGxldCBlcXVhbCA9IGZhbHNlO1xuXG4gICAgY29uc3QgdGVybXNFcXVhdGUgPSBlcXVhdGVUZXJtcyh0aGlzLmxlZnRUZXJtLCB0aGlzLnJpZ2h0VGVybSwgY29udGV4dCk7XG5cbiAgICBpZiAodGVybXNFcXVhdGUpIHtcbiAgICAgIGVxdWFsID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXF1YWw7XG4gIH1cblxuICBmaW5kVmFsaWRFcXVhbGl0eShjb250ZXh0KSB7XG4gICAgY29uc3QgZXF1YWxpdHlOb2RlID0gdGhpcy5nZXRFcXVhbGl0eU5vZGUoKSxcbiAgICAgICAgICBlcXVhbGl0eSA9IGNvbnRleHQuZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSxcbiAgICAgICAgICB2YWxpZEVxdWFsaXR5ID0gZXF1YWxpdHk7ICAvLy9cblxuICAgIHJldHVybiB2YWxpZEVxdWFsaXR5O1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgZXF1YWxpdHlTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkuLi5gKTtcblxuICAgIGNvbnN0IHZhbGlkRXF1YWxpdHkgPSB0aGlzLmZpbmRWYWxpZEVxdWFsaXR5KGNvbnRleHQpO1xuXG4gICAgaWYgKHZhbGlkRXF1YWxpdHkgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGVxdWFsaXR5ID0gdmFsaWRFcXVhbGl0eTsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IGlzIGFscmVhZHkgdmFsaWQuYCk7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oZXF1YWxpdHkpO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWRhdGVUZXJtcyhjb250ZXh0LCAodGVybXNWYWxpZGF0ZSkgPT4ge1xuICAgICAgaWYgKCF0ZXJtc1ZhbGlkYXRlKSB7XG4gICAgICAgIGNvbnN0IGVxdWFsaXR5ID0gbnVsbDtcblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGVxdWFsaXR5KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlblN0YXRlZCA9IHRoaXMudmFsaWRhdGVXaGVuU3RhdGVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVyaXZlZC5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gZXhpc3RzKFtcbiAgICAgICAgdmFsaWRhdGVzV2hlblN0YXRlZCxcbiAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWRcbiAgICAgIF0sIGNvbnRleHQsICh2YWxpZGF0ZXMpID0+IHtcbiAgICAgICAgbGV0IGVxdWFsaXR5ID0gbnVsbDtcblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgZXF1YWxpdHkgPSB0aGlzOyAgLy8vXG5cbiAgICAgICAgICB0aGlzLmFzc2lnbihjb250ZXh0KTtcblxuICAgICAgICAgIGNvbnRleHQuYWRkRXF1YWxpdHkoZXF1YWxpdHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oZXF1YWxpdHkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVRlcm1zKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGVxdWFsaXR5U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5J3MgdGVybXMuLi5gKTtcblxuICAgIHJldHVybiB0aGlzLmxlZnRUZXJtLnZhbGlkYXRlKGNvbnRleHQsIChsZWZ0VGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgaWYgKGxlZnRUZXJtID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHRlcm1zVmFsaWRhdGUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1zVmFsaWRhdGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5yaWdodFRlcm0udmFsaWRhdGUoY29udGV4dCwgKHJpZ2h0VGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgICBpZiAocmlnaHRUZXJtID09PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgdGVybXNWYWxpZGF0ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0ZXJtc1ZhbGlkYXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0ZXJtc1ZhbGlkYXRlID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbGVmdFRlcm1UeXBlID0gbGVmdFRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICByaWdodFRlcm1UeXBlID0gcmlnaHRUZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICAgICAgbGVmdFRlcm1UeXBlRXF1YWxUb1N1YlR5cGVPclN1cGVyVHlwZU9mUmlnaHRUZXJtVHlwZSA9IGxlZnRUZXJtVHlwZS5pc0VxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZihyaWdodFRlcm1UeXBlKTtcblxuICAgICAgICBpZiAobGVmdFRlcm1UeXBlRXF1YWxUb1N1YlR5cGVPclN1cGVyVHlwZU9mUmlnaHRUZXJtVHlwZSkge1xuICAgICAgICAgIHRlcm1zVmFsaWRhdGUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRlcm1zVmFsaWRhdGUpIHtcbiAgICAgICAgICB0aGlzLmxlZnRUZXJtID0gbGVmdFRlcm07XG5cbiAgICAgICAgICB0aGlzLnJpZ2h0VGVybSA9IHJpZ2h0VGVybTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0ZXJtc1ZhbGlkYXRlKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5J3MgdGVybXMuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1zVmFsaWRhdGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5TdGF0ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKCFzdGF0ZWQpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgICB9XG5cbiAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZDtcblxuICAgIGNvbnN0IGVxdWFsaXR5U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIHN0YXRlZCBlcXVhbGl0eS4uLmApO1xuXG4gICAgdmFsaWRhdGVzV2hlblN0YXRlZCA9IHRydWU7XG5cbiAgICBpZiAodmFsaWRhdGVzV2hlblN0YXRlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIHN0YXRlZCBlcXVhbGl0eS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5TdGF0ZWQpO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuRGVyaXZlZChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdGF0ZWQgPSBjb250ZXh0LmlzU3RhdGVkKCk7XG5cbiAgICBpZiAoc3RhdGVkKSB7XG4gICAgICBjb25zdCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gICAgICBjb250aW51YXRpb24odmFsaWRhdGVzV2hlbkRlcml2ZWQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkO1xuXG4gICAgY29uc3QgZXF1YWxpdHlTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZGVyaXZlZCBlcXVhbGl0eS4uLmApO1xuXG4gICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlOyAgLy8vXG5cbiAgICBpZiAodmFsaWRhdGVzV2hlbkRlcml2ZWQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBkZXJpdmVkIGVxdWFsaXR5LmApO1xuICAgIH1cblxuICAgIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCk7XG4gIH1cblxuICBhc3NpZ24oY29udGV4dCkge1xuICAgIGNvbnN0IGVxdWFsaXR5ID0gdGhpcywgIC8vL1xuICAgICAgICAgIGVxdWFsaXR5QXNzaWdubWVudCA9IGVxdWFsaXR5QXNzaWdubWVudEZyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCksXG4gICAgICAgICAgbGVmdFZhcmlhYmxlQXNzaWdubWVudCA9IGxlZnRWYXJpYWJsZUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkoZXF1YWxpdHksIGNvbnRleHQpLFxuICAgICAgICAgIHJpZ2h0VmFyaWFibGVBc3NpZ25tZW50ID0gcmlnaHRWYXJpYWJsZUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkoZXF1YWxpdHksIGNvbnRleHQpO1xuXG4gICAgY29udGV4dC5hZGRBc3NpZ25tZW50KGVxdWFsaXR5QXNzaWdubWVudCk7XG5cbiAgICBjb250ZXh0LmFkZEFzc2lnbm1lbnQobGVmdFZhcmlhYmxlQXNzaWdubWVudCk7XG5cbiAgICBjb250ZXh0LmFkZEFzc2lnbm1lbnQocmlnaHRWYXJpYWJsZUFzc2lnbm1lbnQpO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICBzdHJpbmcsXG4gICAgICBicmVha1BvaW50XG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkVxdWFsaXR5XCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICByZXR1cm4gaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgZXF1YWxpdHlOb2RlID0gaW5zdGFudGlhdGVFcXVhbGl0eShzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgbm9kZSA9IGVxdWFsaXR5Tm9kZSwgIC8vL1xuICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICByaWdodFRlcm0gPSByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICBjb25zdCBlcXVhbGl0eSA9IG5ldyBFcXVhbGl0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuXG4gICAgICByZXR1cm4gZXF1YWxpdHk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBlcXVhbGl0eSA9IGVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZXF1YWxpdHk7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxlZnRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRMZWZ0VGVybU5vZGUoKSxcbiAgICAgICAgbGVmdFRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZShsZWZ0VGVybU5vZGUpO1xuXG4gIHJldHVybiBsZWZ0VGVybTtcbn1cblxuZnVuY3Rpb24gcmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmlnaHRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRMZWZ0VGVybU5vZGUoKSxcbiAgICAgICAgcmlnaHRUZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUocmlnaHRUZXJtTm9kZSk7XG5cbiAgcmV0dXJuIHJpZ2h0VGVybTtcbn1cbiJdLCJuYW1lcyI6WyJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJFcXVhbGl0eSIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJsZWZ0VGVybSIsInJpZ2h0VGVybSIsImdldExlZnRUZXJtIiwiZ2V0UmlnaHRUZXJtIiwiZ2V0RXF1YWxpdHlOb2RlIiwiZ2V0Tm9kZSIsImVxdWFsaXR5TmRlIiwiZ2V0TGVmdFRlcm1Ob2RlIiwibGVmdFRlcm1Ob2RlIiwiZ2V0UmlnaHRUZXJtTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJnZXRUeXBlIiwidHlwZSIsImxlZnRUZXJtVHlwZSIsInJpZ2h0VGVybVR5cGUiLCJsZWZ0VGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZSaWdodFRlcm1UeXBlIiwiaXNFcXVhbFRvT3JTdWJUeXBlT2YiLCJyaWdodFRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mTGVmdFRlcm1UeXBlIiwiZ2V0VGVybXMiLCJ0ZXJtcyIsIm1hdGNoRXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlOb2RlIiwibm9kZU1hdGNoZXMiLCJtYXRjaE5vZGUiLCJlcXVhbGl0eU5vZGVNYXRjaGVzIiwiaXNSZWZsZXhpdmUiLCJsZWZ0VGVybVN0cmluZyIsImdldFN0cmluZyIsInJpZ2h0VGVybVN0cmluZyIsInJlZmxleGl2ZSIsImlzRXF1YWxUbyIsImVxdWFsaXR5IiwiZXF1YWxUbyIsImlzRXF1YWwiLCJlcXVhbCIsInRlcm1zRXF1YXRlIiwiZXF1YXRlVGVybXMiLCJmaW5kVmFsaWRFcXVhbGl0eSIsImZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlIiwidmFsaWRFcXVhbGl0eSIsInZhbGlkYXRlIiwiY29udGludWF0aW9uIiwiZXF1YWxpdHlTdHJpbmciLCJ0cmFjZSIsImRlYnVnIiwidmFsaWRhdGVUZXJtcyIsInRlcm1zVmFsaWRhdGUiLCJ2YWxpZGF0ZXNXaGVuU3RhdGVkIiwidmFsaWRhdGVXaGVuU3RhdGVkIiwiYmluZCIsInZhbGlkYXRlc1doZW5EZXJpdmVkIiwidmFsaWRhdGVXaGVuRGVyaXZlZCIsImV4aXN0cyIsInZhbGlkYXRlcyIsImFzc2lnbiIsImFkZEVxdWFsaXR5IiwibGVmdFRlcm1UeXBlRXF1YWxUb1N1YlR5cGVPclN1cGVyVHlwZU9mUmlnaHRUZXJtVHlwZSIsImlzRXF1YWxUb1N1YlR5cGVPclN1cGVyVHlwZU9mIiwic3RhdGVkIiwiaXNTdGF0ZWQiLCJlcXVhbGl0eUFzc2lnbm1lbnQiLCJlcXVhbGl0eUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkiLCJsZWZ0VmFyaWFibGVBc3NpZ25tZW50IiwibGVmdFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eSIsInJpZ2h0VmFyaWFibGVBc3NpZ25tZW50IiwicmlnaHRWYXJpYWJsZUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkiLCJhZGRBc3NpZ25tZW50IiwidG9KU09OIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVFcXVhbGl0eSIsImxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZSIsInJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJmcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUiLCJmaW5kVGVybUJ5VGVybU5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWNBOzs7ZUFBQTs7O2dDQVo2QzswQkFFdEI7OEJBQ0E7d0JBQ0s7eUJBQ0E7NkJBQ1E7eUJBQ007d0JBQzhFO0FBRXhILE1BQU0sRUFBRUEsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5RSxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGlCQUFpQkMsdUJBQU87SUFDbEQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxRQUFRLEVBQUVDLFNBQVMs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
|
package/lib/element/frame.js
CHANGED
|
@@ -134,7 +134,7 @@ const _default = (0, _elements.define)(class Frame extends _occamlanguages.Eleme
|
|
|
134
134
|
validateAssumption(assumption, assumptions, context, continuation) {
|
|
135
135
|
const frameString = this.getString(), assumptionString = assumption.getString();
|
|
136
136
|
context.trace(`Validating the '${frameString}' frame's '${assumptionString}' assumption.`);
|
|
137
|
-
assumption.validate(context, (assumption)=>{
|
|
137
|
+
return assumption.validate(context, (assumption)=>{
|
|
138
138
|
let assumptionValidates = false;
|
|
139
139
|
if (assumption !== null) {
|
|
140
140
|
assumptions.push(assumption);
|
|
@@ -172,7 +172,7 @@ const _default = (0, _elements.define)(class Frame extends _occamlanguages.Eleme
|
|
|
172
172
|
}
|
|
173
173
|
const frameString = this.getString(); ///
|
|
174
174
|
context.trace(`Validating the '${frameString}' frame's metavariable...`);
|
|
175
|
-
this.metavariable.validate(context, (metavariable)=>{
|
|
175
|
+
return this.metavariable.validate(context, (metavariable)=>{
|
|
176
176
|
let metavariableValidates = false;
|
|
177
177
|
if (metavariable !== null) {
|
|
178
178
|
const metaTypeName = _metaTypeNames.FRAME_META_TYPE_NAME, frameMetaType = context.findMetaTypeByMetaTypeName(metaTypeName), metavariableMetaTypeEqualToFrameMetaType = metavariable.isMetaTypeEqualTo(frameMetaType);
|
|
@@ -253,4 +253,4 @@ function assumptionsFromFrameNode(frameNode, context) {
|
|
|
253
253
|
return assumptions;
|
|
254
254
|
}
|
|
255
255
|
|
|
256
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2ZyYW1lLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGFsbCwgZXhpc3RzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlRnJhbWUgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgRlJBTUVfTUVUQV9UWVBFX05BTUUgfSBmcm9tIFwiLi4vbWV0YVR5cGVOYW1lc1wiO1xuaW1wb3J0IHsgbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IGV2ZXJ5IH0gPSBjb250aW51YXRpb25VdGlsaXRpZXMsXG4gICAgICB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBGcmFtZSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5hc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zO1xuICAgIHRoaXMubWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZ2V0QXNzdW1wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZ2V0RnJhbWVOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBmcmFtZU5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBmcmFtZU5vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOb2RlKCkge1xuICAgIGNvbnN0IGZyYW1lTm9kZSA9IHRoaXMuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IGZyYW1lTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZU5hbWUoKSB7XG4gICAgbGV0IG1ldGF2YXJpYWJsZU5hbWUgPSBudWxsO1xuXG4gICAgY29uc3Qgc2luZ3VsYXIgPSB0aGlzLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmIChzaW5ndWxhcikge1xuICAgICAgbWV0YXZhcmlhYmxlTmFtZSA9IHRoaXMubWV0YXZhcmlhYmxlLmdldE5hbWUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTmFtZTtcbiAgfVxuXG4gIGlzRXF1YWxUbyhmcmFtZSkge1xuICAgIGNvbnN0IGZyYW1lTm9kZSA9IGZyYW1lLmdldE5vZGUoKSxcbiAgICAgICAgICBmcmFtZU5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEZyYW1lTm9kZShmcmFtZU5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBmcmFtZU5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGlzSW1wbGljaXQoKSB7XG4gICAgY29uc3QgaW1wbGljaXQgPSAodGhpcy5tZXRhdmFyaWFibGUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGltcGxpY2l0O1xuICB9XG5cbiAgaXNTaW5ndWxhcigpIHtcbiAgICBjb25zdCBmcmFtZU5vZGUgPSB0aGlzLmdldEZyYW1lTm9kZSgpLFxuICAgICAgICAgIHNpbmd1bGFyID0gZnJhbWVOb2RlLmlzU2luZ3VsYXIoKTtcblxuICAgIHJldHVybiBzaW5ndWxhcjtcbiAgfVxuXG4gIGlzTWV0YXZhcmlhYmxlRGVmaW5lZChtZXRhdmFyaWFibGUpIHtcbiAgICBsZXQgbWV0YXZhcmlhYmxlRGVmaW5lZCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMubWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVBID0gbWV0YXZhcmlhYmxlLCAgLy8vXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVCID0gdGhpcy5tZXRhdmFyaWFibGUsXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVBRXF1YWxUb01ldGF2YXJpYWJsZUIgPSBtZXRhdmFyaWFibGVBLmlzRXF1YWxUbyhtZXRhdmFyaWFibGVCKTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZUFFcXVhbFRvTWV0YXZhcmlhYmxlQikge1xuICAgICAgICBtZXRhdmFyaWFibGVEZWZpbmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlRGVmaW5lZDtcbiAgfVxuXG4gIG1hdGNoRnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBmcmFtZU5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgZnJhbWVOb2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBmcmFtZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBsZXQgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gdGhpcy5tZXRhdmFyaWFibGUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcztcbiAgfVxuXG4gIGNvbXBhcmVQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG4gICAgbGV0IGNvbXBhcmVzVG9QYXJhbXRlciA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc2luZ3VsYXIgPSB0aGlzLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmIChzaW5ndWxhcikge1xuICAgICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlci5nZXROYW1lKCk7XG5cbiAgICAgIGlmIChwYXJhbWV0ZXJOYW1lICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSB0aGlzLmdldE1ldGF2YXJpYWJsZU5hbWUoKTtcblxuICAgICAgICBpZiAocGFyYW1ldGVyTmFtZSA9PT0gbWV0YXZhcmlhYmxlTmFtZSkge1xuICAgICAgICAgIGNvbXBhcmVzVG9QYXJhbXRlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1BhcmFtdGVyO1xuICB9XG5cbiAgZmluZFZhbGlkRnJhbWUoY29udGV4dCkge1xuICAgIGNvbnN0IGZyYW1lTm9kZSA9IHRoaXMuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgICAgZnJhbWUgPSBjb250ZXh0LmZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSksXG4gICAgICAgICAgdmFsaWRGcmFtZSA9IGZyYW1lOyAvLy9cblxuICAgIHJldHVybiB2YWxpZEZyYW1lO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgZnJhbWVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lLi4uYCk7XG5cbiAgICBjb25zdCB2YWxpZEZyYW1lID0gdGhpcy5maW5kVmFsaWRGcmFtZShjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZEZyYW1lICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBmcmFtZSA9IHZhbGlkRnJhbWU7IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi50aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSBpcyBhbHJlYWR5IHZhbGlkLmApO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGZyYW1lKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZGF0TWV0YXZhcmlhYmxlID0gdGhpcy52YWxpZGF0TWV0YXZhcmlhYmxlLmJpbmQodGhpcyksXG4gICAgICAgICAgdmFsaWRhdGVBc3N1bXB0aW9ucyA9IHRoaXMudmFsaWRhdGVBc3N1bXB0aW9ucy5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGFsbChbXG4gICAgICB2YWxpZGF0TWV0YXZhcmlhYmxlLFxuICAgICAgdmFsaWRhdGVBc3N1bXB0aW9uc1xuICAgIF0sIGNvbnRleHQsICh2YWxpZGF0ZXMpID0+IHtcbiAgICAgIGlmICghdmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lID0gbnVsbDtcblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGZyYW1lKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlblN0YXRlZCA9IHRoaXMudmFsaWRhdGVXaGVuU3RhdGVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVyaXZlZC5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gZXhpc3RzKFtcbiAgICAgICAgdmFsaWRhdGVzV2hlblN0YXRlZCxcbiAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWRcbiAgICAgIF0sIGNvbnRleHQsICh2YWxpZGF0ZXMpID0+IHtcbiAgICAgICAgbGV0IGZyYW1lID0gbnVsbDtcblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgZnJhbWUgPSB0aGlzOyAvLy9cblxuICAgICAgICAgIGNvbnRleHQuYWRkRnJhbWUoZnJhbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oZnJhbWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZUFzc3VtcHRpb24oYXNzdW1wdGlvbiwgYXNzdW1wdGlvbnMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGZyYW1lU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgLy8vXG4gICAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IGFzc3VtcHRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lJ3MgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24uYCk7XG5cbiAgICBhc3N1bXB0aW9uLnZhbGlkYXRlKGNvbnRleHQsIChhc3N1bXB0aW9uKSA9PiB7XG4gICAgICBsZXQgYXNzdW1wdGlvblZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICBpZiAoYXNzdW1wdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBhc3N1bXB0aW9ucy5wdXNoKGFzc3VtcHRpb24pO1xuXG4gICAgICAgIGFzc3VtcHRpb25WYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXNzdW1wdGlvblZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUncyAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbi5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihhc3N1bXB0aW9uVmFsaWRhdGVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlQXNzdW1wdGlvbnMoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvbnNMZW5ndGggPSB0aGlzLmFzc3VtcHRpb25zLmxlbmd0aDtcblxuICAgIGlmIChhc3N1bXB0aW9uc0xlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3QgYXNzdW1wdGlvbnNWYWxpZGF0ZSA9IHRydWU7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oYXNzdW1wdGlvbnNWYWxpZGF0ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgZnJhbWVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSdzIGFzc3VtcHRpb25zLi4uYCk7XG5cbiAgICBjb25zdCBhc3N1bXB0aW9ucyA9IFtdO1xuXG4gICAgcmV0dXJuIGV2ZXJ5KHRoaXMuYXNzdW1wdGlvbnMsIChhc3N1bXB0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFzc3VtcHRpb24oYXNzdW1wdGlvbiwgYXNzdW1wdGlvbnMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgKGFzc3VtcHRpb25zVmFsaWRhdGUpID0+IHtcbiAgICAgIGlmIChhc3N1bXB0aW9uc1ZhbGlkYXRlKSB7XG4gICAgICAgIHRoaXMuYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9ucztcblxuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUncyBhc3N1bXB0aW9ucy5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihhc3N1bXB0aW9uc1ZhbGlkYXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRNZXRhdmFyaWFibGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgaWYgKHRoaXMubWV0YXZhcmlhYmxlID09PSBudWxsKSB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVWYWxpZGF0ZXMgPSB0cnVlOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihtZXRhdmFyaWFibGVWYWxpZGF0ZXMpO1xuICAgIH1cblxuICAgIGNvbnN0IGZyYW1lU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lJ3MgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICB0aGlzLm1ldGF2YXJpYWJsZS52YWxpZGF0ZShjb250ZXh0LCAobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICBsZXQgbWV0YXZhcmlhYmxlVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgbWV0YVR5cGVOYW1lID0gRlJBTUVfTUVUQV9UWVBFX05BTUUsXG4gICAgICAgICAgICAgIGZyYW1lTWV0YVR5cGUgPSBjb250ZXh0LmZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSksXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU1ldGFUeXBlRXF1YWxUb0ZyYW1lTWV0YVR5cGUgPSBtZXRhdmFyaWFibGUuaXNNZXRhVHlwZUVxdWFsVG8oZnJhbWVNZXRhVHlwZSk7XG5cbiAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU1ldGFUeXBlRXF1YWxUb0ZyYW1lTWV0YVR5cGUpIHtcbiAgICAgICAgICB0aGlzLm1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZTsgLy8vXG5cbiAgICAgICAgICBtZXRhdmFyaWFibGVWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVWYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lJ3MgbWV0YXZhcmlhYmxlLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKG1ldGF2YXJpYWJsZVZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5TdGF0ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKCFzdGF0ZWQpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgICB9XG5cbiAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZDtcblxuICAgIGNvbnN0IGZyYW1lU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBzdGF0ZWQgZnJhbWUuLi5gKTtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoIXNpbmd1bGFyKSB7XG4gICAgICBjb25zdCB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gZmFsc2U7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtmcmFtZVN0cmluZ30nIHN0YXRlZCBmcmFtZSBtdXN0IGJlIHNpbmd1bGFyLmApO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5TdGF0ZWQpO1xuICAgIH1cblxuICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0cnVlO1xuXG4gICAgaWYgKHZhbGlkYXRlc1doZW5TdGF0ZWQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBzdGF0ZWQgZnJhbWUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlcml2ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKHN0YXRlZCkge1xuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCk7XG4gICAgfVxuXG4gICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkO1xuXG4gICAgY29uc3QgZnJhbWVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2ZyYW1lU3RyaW5nfScgZGVyaXZlZCBmcmFtZS4uLmApO1xuXG4gICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuXG4gICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBkZXJpdmVkIGZyYW1lLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzV2hlbkRlcml2ZWQpO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICBzdHJpbmcsXG4gICAgICBicmVha1BvaW50XG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkZyYW1lXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICByZXR1cm4gaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgZnJhbWVOb2RlID0gaW5zdGFudGlhdGVGcmFtZShzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgbm9kZSA9IGZyYW1lTm9kZSwgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgIGNvbnN0IGZyYW1lID0gbmV3IEZyYW1lKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZSk7XG5cbiAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbk5vZGVzID0gZnJhbWVOb2RlLmdldEFzc3VtcHRpb25Ob2RlcygpLFxuICAgICAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25Ob2Rlcy5tYXAoKGFzc3VtcHRpb25Ob2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgYXNzdW1wdGlvbiA9IGNvbnRleHQuZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKTtcblxuICAgICAgICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG4iXSwibmFtZXMiOlsiZXZlcnkiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJGcmFtZSIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJhc3N1bXB0aW9ucyIsIm1ldGF2YXJpYWJsZSIsImdldEFzc3VtcHRpb25zIiwiZ2V0TWV0YXZhcmlhYmxlIiwiZ2V0RnJhbWVOb2RlIiwiZ2V0Tm9kZSIsImZyYW1lTm9kZSIsImdldE1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJzaW5ndWxhciIsImlzU2luZ3VsYXIiLCJnZXROYW1lIiwiaXNFcXVhbFRvIiwiZnJhbWUiLCJmcmFtZU5vZGVNYXRjaGVzIiwibWF0Y2hGcmFtZU5vZGUiLCJlcXVhbFRvIiwiaXNJbXBsaWNpdCIsImltcGxpY2l0IiwiaXNNZXRhdmFyaWFibGVEZWZpbmVkIiwibWV0YXZhcmlhYmxlRGVmaW5lZCIsIm1ldGF2YXJpYWJsZUEiLCJtZXRhdmFyaWFibGVCIiwibWV0YXZhcmlhYmxlQUVxdWFsVG9NZXRhdmFyaWFibGVCIiwibm9kZU1hdGNoZXMiLCJtYXRjaE5vZGUiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsImNvbXBhcmVQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJjb21wYXJlc1RvUGFyYW10ZXIiLCJwYXJhbWV0ZXJOYW1lIiwiZmluZFZhbGlkRnJhbWUiLCJmaW5kRnJhbWVCeUZyYW1lTm9kZSIsInZhbGlkRnJhbWUiLCJ2YWxpZGF0ZSIsImNvbnRpbnVhdGlvbiIsImZyYW1lU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJkZWJ1ZyIsInZhbGlkYXRNZXRhdmFyaWFibGUiLCJiaW5kIiwidmFsaWRhdGVBc3N1bXB0aW9ucyIsImFsbCIsInZhbGlkYXRlcyIsInZhbGlkYXRlc1doZW5TdGF0ZWQiLCJ2YWxpZGF0ZVdoZW5TdGF0ZWQiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJleGlzdHMiLCJhZGRGcmFtZSIsInZhbGlkYXRlQXNzdW1wdGlvbiIsImFzc3VtcHRpb24iLCJhc3N1bXB0aW9uU3RyaW5nIiwiYXNzdW1wdGlvblZhbGlkYXRlcyIsInB1c2giLCJhc3N1bXB0aW9uc0xlbmd0aCIsImxlbmd0aCIsImFzc3VtcHRpb25zVmFsaWRhdGUiLCJtZXRhdmFyaWFibGVWYWxpZGF0ZXMiLCJtZXRhVHlwZU5hbWUiLCJGUkFNRV9NRVRBX1RZUEVfTkFNRSIsImZyYW1lTWV0YVR5cGUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsIm1ldGF2YXJpYWJsZU1ldGFUeXBlRXF1YWxUb0ZyYW1lTWV0YVR5cGUiLCJpc01ldGFUeXBlRXF1YWxUbyIsInN0YXRlZCIsImlzU3RhdGVkIiwidG9KU09OIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVGcmFtZSIsImFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUiLCJhc3N1bXB0aW9uTm9kZXMiLCJnZXRBc3N1bXB0aW9uTm9kZXMiLCJtYXAiLCJhc3N1bXB0aW9uTm9kZSIsImZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBY0E7OztlQUFBOzs7Z0NBWm9FOzBCQUU3Qzt5QkFDSzs4QkFDQTs2QkFDSzsrQkFDSTt5QkFDSztBQUUxQyxNQUFNLEVBQUVBLEtBQUssRUFBRSxHQUFHQyxxQ0FBcUIsRUFDakMsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5RSxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGNBQWNDLHVCQUFPO0lBQy9DLFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsV0FBVyxFQUFFQyxZQUFZLENBQUU7UUFDeEUsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLFdBQVcsR0FBR0E7UUFDbkIsSUFBSSxDQUFDQyxZQUFZLEdBQUdBO0lBQ3RCO0lBRUFDLGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxDQUFDRixXQUFXO0lBQ3pCO0lBRUFHLGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQ0YsWUFBWTtJQUMxQjtJQUVBRyxlQUFlO1FBQ2IsTUFBTU4sT0FBTyxJQUFJLENBQUNPLE9BQU8sSUFDbkJDLFlBQVlSLE1BQU0sR0FBRztRQUUzQixPQUFPUTtJQUNUO0lBRUFDLHNCQUFzQjtRQUNwQixNQUFNRCxZQUFZLElBQUksQ0FBQ0YsWUFBWSxJQUM3QkksbUJBQW1CRixVQUFVQyxtQkFBbUI7UUFFdEQsT0FBT0M7SUFDVDtJQUVBQyxzQkFBc0I7UUFDcEIsSUFBSUMsbUJBQW1CO1FBRXZCLE1BQU1DLFdBQVcsSUFBSSxDQUFDQyxVQUFVO1FBRWhDLElBQUlELFVBQVU7WUFDWkQsbUJBQW1CLElBQUksQ0FBQ1QsWUFBWSxDQUFDWSxPQUFPO1FBQzlDO1FBRUEsT0FBT0g7SUFDVDtJQUVBSSxVQUFVQyxLQUFLLEVBQUU7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
|
|
256
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2ZyYW1lLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGFsbCwgZXhpc3RzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlRnJhbWUgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgRlJBTUVfTUVUQV9UWVBFX05BTUUgfSBmcm9tIFwiLi4vbWV0YVR5cGVOYW1lc1wiO1xuaW1wb3J0IHsgbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IGV2ZXJ5IH0gPSBjb250aW51YXRpb25VdGlsaXRpZXMsXG4gICAgICB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBGcmFtZSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5hc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zO1xuICAgIHRoaXMubWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZ2V0QXNzdW1wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZ2V0RnJhbWVOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBmcmFtZU5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBmcmFtZU5vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOb2RlKCkge1xuICAgIGNvbnN0IGZyYW1lTm9kZSA9IHRoaXMuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IGZyYW1lTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZU5hbWUoKSB7XG4gICAgbGV0IG1ldGF2YXJpYWJsZU5hbWUgPSBudWxsO1xuXG4gICAgY29uc3Qgc2luZ3VsYXIgPSB0aGlzLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmIChzaW5ndWxhcikge1xuICAgICAgbWV0YXZhcmlhYmxlTmFtZSA9IHRoaXMubWV0YXZhcmlhYmxlLmdldE5hbWUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTmFtZTtcbiAgfVxuXG4gIGlzRXF1YWxUbyhmcmFtZSkge1xuICAgIGNvbnN0IGZyYW1lTm9kZSA9IGZyYW1lLmdldE5vZGUoKSxcbiAgICAgICAgICBmcmFtZU5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEZyYW1lTm9kZShmcmFtZU5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBmcmFtZU5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGlzSW1wbGljaXQoKSB7XG4gICAgY29uc3QgaW1wbGljaXQgPSAodGhpcy5tZXRhdmFyaWFibGUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGltcGxpY2l0O1xuICB9XG5cbiAgaXNTaW5ndWxhcigpIHtcbiAgICBjb25zdCBmcmFtZU5vZGUgPSB0aGlzLmdldEZyYW1lTm9kZSgpLFxuICAgICAgICAgIHNpbmd1bGFyID0gZnJhbWVOb2RlLmlzU2luZ3VsYXIoKTtcblxuICAgIHJldHVybiBzaW5ndWxhcjtcbiAgfVxuXG4gIGlzTWV0YXZhcmlhYmxlRGVmaW5lZChtZXRhdmFyaWFibGUpIHtcbiAgICBsZXQgbWV0YXZhcmlhYmxlRGVmaW5lZCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMubWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVBID0gbWV0YXZhcmlhYmxlLCAgLy8vXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVCID0gdGhpcy5tZXRhdmFyaWFibGUsXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVBRXF1YWxUb01ldGF2YXJpYWJsZUIgPSBtZXRhdmFyaWFibGVBLmlzRXF1YWxUbyhtZXRhdmFyaWFibGVCKTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZUFFcXVhbFRvTWV0YXZhcmlhYmxlQikge1xuICAgICAgICBtZXRhdmFyaWFibGVEZWZpbmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlRGVmaW5lZDtcbiAgfVxuXG4gIG1hdGNoRnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBmcmFtZU5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgZnJhbWVOb2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBmcmFtZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBsZXQgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gdGhpcy5tZXRhdmFyaWFibGUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcztcbiAgfVxuXG4gIGNvbXBhcmVQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG4gICAgbGV0IGNvbXBhcmVzVG9QYXJhbXRlciA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc2luZ3VsYXIgPSB0aGlzLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmIChzaW5ndWxhcikge1xuICAgICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlci5nZXROYW1lKCk7XG5cbiAgICAgIGlmIChwYXJhbWV0ZXJOYW1lICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSB0aGlzLmdldE1ldGF2YXJpYWJsZU5hbWUoKTtcblxuICAgICAgICBpZiAocGFyYW1ldGVyTmFtZSA9PT0gbWV0YXZhcmlhYmxlTmFtZSkge1xuICAgICAgICAgIGNvbXBhcmVzVG9QYXJhbXRlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1BhcmFtdGVyO1xuICB9XG5cbiAgZmluZFZhbGlkRnJhbWUoY29udGV4dCkge1xuICAgIGNvbnN0IGZyYW1lTm9kZSA9IHRoaXMuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgICAgZnJhbWUgPSBjb250ZXh0LmZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSksXG4gICAgICAgICAgdmFsaWRGcmFtZSA9IGZyYW1lOyAvLy9cblxuICAgIHJldHVybiB2YWxpZEZyYW1lO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgZnJhbWVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lLi4uYCk7XG5cbiAgICBjb25zdCB2YWxpZEZyYW1lID0gdGhpcy5maW5kVmFsaWRGcmFtZShjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZEZyYW1lICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBmcmFtZSA9IHZhbGlkRnJhbWU7IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi50aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSBpcyBhbHJlYWR5IHZhbGlkLmApO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGZyYW1lKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZGF0TWV0YXZhcmlhYmxlID0gdGhpcy52YWxpZGF0TWV0YXZhcmlhYmxlLmJpbmQodGhpcyksXG4gICAgICAgICAgdmFsaWRhdGVBc3N1bXB0aW9ucyA9IHRoaXMudmFsaWRhdGVBc3N1bXB0aW9ucy5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGFsbChbXG4gICAgICB2YWxpZGF0TWV0YXZhcmlhYmxlLFxuICAgICAgdmFsaWRhdGVBc3N1bXB0aW9uc1xuICAgIF0sIGNvbnRleHQsICh2YWxpZGF0ZXMpID0+IHtcbiAgICAgIGlmICghdmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lID0gbnVsbDtcblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGZyYW1lKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlblN0YXRlZCA9IHRoaXMudmFsaWRhdGVXaGVuU3RhdGVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVyaXZlZC5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gZXhpc3RzKFtcbiAgICAgICAgdmFsaWRhdGVzV2hlblN0YXRlZCxcbiAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWRcbiAgICAgIF0sIGNvbnRleHQsICh2YWxpZGF0ZXMpID0+IHtcbiAgICAgICAgbGV0IGZyYW1lID0gbnVsbDtcblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgZnJhbWUgPSB0aGlzOyAvLy9cblxuICAgICAgICAgIGNvbnRleHQuYWRkRnJhbWUoZnJhbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oZnJhbWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZUFzc3VtcHRpb24oYXNzdW1wdGlvbiwgYXNzdW1wdGlvbnMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGZyYW1lU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgLy8vXG4gICAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IGFzc3VtcHRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lJ3MgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24uYCk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbi52YWxpZGF0ZShjb250ZXh0LCAoYXNzdW1wdGlvbikgPT4ge1xuICAgICAgbGV0IGFzc3VtcHRpb25WYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKGFzc3VtcHRpb24gIT09IG51bGwpIHtcbiAgICAgICAgYXNzdW1wdGlvbnMucHVzaChhc3N1bXB0aW9uKTtcblxuICAgICAgICBhc3N1bXB0aW9uVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFzc3VtcHRpb25WYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lJ3MgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oYXNzdW1wdGlvblZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZUFzc3VtcHRpb25zKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGFzc3VtcHRpb25zTGVuZ3RoID0gdGhpcy5hc3N1bXB0aW9ucy5sZW5ndGg7XG5cbiAgICBpZiAoYXNzdW1wdGlvbnNMZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IGFzc3VtcHRpb25zVmFsaWRhdGUgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGFzc3VtcHRpb25zVmFsaWRhdGUpO1xuICAgIH1cblxuICAgIGNvbnN0IGZyYW1lU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUncyBhc3N1bXB0aW9ucy4uLmApO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvbnMgPSBbXTtcblxuICAgIHJldHVybiBldmVyeSh0aGlzLmFzc3VtcHRpb25zLCAoYXNzdW1wdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBc3N1bXB0aW9uKGFzc3VtcHRpb24sIGFzc3VtcHRpb25zLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0sIChhc3N1bXB0aW9uc1ZhbGlkYXRlKSA9PiB7XG4gICAgICBpZiAoYXNzdW1wdGlvbnNWYWxpZGF0ZSkge1xuICAgICAgICB0aGlzLmFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnM7XG5cbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lJ3MgYXNzdW1wdGlvbnMuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oYXNzdW1wdGlvbnNWYWxpZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0TWV0YXZhcmlhYmxlKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGlmICh0aGlzLm1ldGF2YXJpYWJsZSA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlVmFsaWRhdGVzID0gdHJ1ZTsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24obWV0YXZhcmlhYmxlVmFsaWRhdGVzKTtcbiAgICB9XG5cbiAgICBjb25zdCBmcmFtZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSdzIG1ldGF2YXJpYWJsZS4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlLnZhbGlkYXRlKGNvbnRleHQsIChtZXRhdmFyaWFibGUpID0+IHtcbiAgICAgIGxldCBtZXRhdmFyaWFibGVWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtZXRhVHlwZU5hbWUgPSBGUkFNRV9NRVRBX1RZUEVfTkFNRSxcbiAgICAgICAgICAgICAgZnJhbWVNZXRhVHlwZSA9IGNvbnRleHQuZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKSxcbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTWV0YVR5cGVFcXVhbFRvRnJhbWVNZXRhVHlwZSA9IG1ldGF2YXJpYWJsZS5pc01ldGFUeXBlRXF1YWxUbyhmcmFtZU1ldGFUeXBlKTtcblxuICAgICAgICBpZiAobWV0YXZhcmlhYmxlTWV0YVR5cGVFcXVhbFRvRnJhbWVNZXRhVHlwZSkge1xuICAgICAgICAgIHRoaXMubWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlOyAvLy9cblxuICAgICAgICAgIG1ldGF2YXJpYWJsZVZhbGlkYXRlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZVZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUncyBtZXRhdmFyaWFibGUuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24obWV0YXZhcmlhYmxlVmFsaWRhdGVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlblN0YXRlZChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdGF0ZWQgPSBjb250ZXh0LmlzU3RhdGVkKCk7XG5cbiAgICBpZiAoIXN0YXRlZCkge1xuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlblN0YXRlZCA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5TdGF0ZWQpO1xuICAgIH1cblxuICAgIGxldCB2YWxpZGF0ZXNXaGVuU3RhdGVkO1xuXG4gICAgY29uc3QgZnJhbWVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtmcmFtZVN0cmluZ30nIHN0YXRlZCBmcmFtZS4uLmApO1xuXG4gICAgY29uc3Qgc2luZ3VsYXIgPSB0aGlzLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmICghc2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSBmYWxzZTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2ZyYW1lU3RyaW5nfScgc3RhdGVkIGZyYW1lIG11c3QgYmUgc2luZ3VsYXIuYCk7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzV2hlblN0YXRlZCk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVzV2hlblN0YXRlZCA9IHRydWU7XG5cbiAgICBpZiAodmFsaWRhdGVzV2hlblN0YXRlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIHN0YXRlZCBmcmFtZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5TdGF0ZWQpO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuRGVyaXZlZChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdGF0ZWQgPSBjb250ZXh0LmlzU3RhdGVkKCk7XG5cbiAgICBpZiAoc3RhdGVkKSB7XG4gICAgICBjb25zdCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5EZXJpdmVkKTtcbiAgICB9XG5cbiAgICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQ7XG5cbiAgICBjb25zdCBmcmFtZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBkZXJpdmVkIGZyYW1lLi4uYCk7XG5cbiAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRydWU7XG5cbiAgICBpZiAodmFsaWRhdGVzV2hlbkRlcml2ZWQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGRlcml2ZWQgZnJhbWUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QganNvbiA9IHtcbiAgICAgIHN0cmluZyxcbiAgICAgIGJyZWFrUG9pbnRcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiRnJhbWVcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIHJldHVybiBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICBmcmFtZU5vZGUgPSBpbnN0YW50aWF0ZUZyYW1lKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gZnJhbWVOb2RlLCAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlKTtcblxuICAgICAgcmV0dXJuIGZyYW1lO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG59KTtcblxuZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9uTm9kZXMgPSBmcmFtZU5vZGUuZ2V0QXNzdW1wdGlvbk5vZGVzKCksXG4gICAgICAgIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbk5vZGVzLm1hcCgoYXNzdW1wdGlvbk5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBhc3N1bXB0aW9uID0gY29udGV4dC5maW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgICAgICAgcmV0dXJuIGFzc3VtcHRpb247XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBhc3N1bXB0aW9ucztcbn1cbiJdLCJuYW1lcyI6WyJldmVyeSIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkZyYW1lIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsImFzc3VtcHRpb25zIiwibWV0YXZhcmlhYmxlIiwiZ2V0QXNzdW1wdGlvbnMiLCJnZXRNZXRhdmFyaWFibGUiLCJnZXRGcmFtZU5vZGUiLCJnZXROb2RlIiwiZnJhbWVOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZSIsInNpbmd1bGFyIiwiaXNTaW5ndWxhciIsImdldE5hbWUiLCJpc0VxdWFsVG8iLCJmcmFtZSIsImZyYW1lTm9kZU1hdGNoZXMiLCJtYXRjaEZyYW1lTm9kZSIsImVxdWFsVG8iLCJpc0ltcGxpY2l0IiwiaW1wbGljaXQiLCJpc01ldGF2YXJpYWJsZURlZmluZWQiLCJtZXRhdmFyaWFibGVEZWZpbmVkIiwibWV0YXZhcmlhYmxlQSIsIm1ldGF2YXJpYWJsZUIiLCJtZXRhdmFyaWFibGVBRXF1YWxUb01ldGF2YXJpYWJsZUIiLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwiY29tcGFyZVBhcmFtZXRlciIsInBhcmFtZXRlciIsImNvbXBhcmVzVG9QYXJhbXRlciIsInBhcmFtZXRlck5hbWUiLCJmaW5kVmFsaWRGcmFtZSIsImZpbmRGcmFtZUJ5RnJhbWVOb2RlIiwidmFsaWRGcmFtZSIsInZhbGlkYXRlIiwiY29udGludWF0aW9uIiwiZnJhbWVTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlYnVnIiwidmFsaWRhdE1ldGF2YXJpYWJsZSIsImJpbmQiLCJ2YWxpZGF0ZUFzc3VtcHRpb25zIiwiYWxsIiwidmFsaWRhdGVzIiwidmFsaWRhdGVzV2hlblN0YXRlZCIsInZhbGlkYXRlV2hlblN0YXRlZCIsInZhbGlkYXRlc1doZW5EZXJpdmVkIiwidmFsaWRhdGVXaGVuRGVyaXZlZCIsImV4aXN0cyIsImFkZEZyYW1lIiwidmFsaWRhdGVBc3N1bXB0aW9uIiwiYXNzdW1wdGlvbiIsImFzc3VtcHRpb25TdHJpbmciLCJhc3N1bXB0aW9uVmFsaWRhdGVzIiwicHVzaCIsImFzc3VtcHRpb25zTGVuZ3RoIiwibGVuZ3RoIiwiYXNzdW1wdGlvbnNWYWxpZGF0ZSIsIm1ldGF2YXJpYWJsZVZhbGlkYXRlcyIsIm1ldGFUeXBlTmFtZSIsIkZSQU1FX01FVEFfVFlQRV9OQU1FIiwiZnJhbWVNZXRhVHlwZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwibWV0YXZhcmlhYmxlTWV0YVR5cGVFcXVhbFRvRnJhbWVNZXRhVHlwZSIsImlzTWV0YVR5cGVFcXVhbFRvIiwic3RhdGVkIiwiaXNTdGF0ZWQiLCJ0b0pTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZUZyYW1lIiwiYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlIiwibWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZSIsImFzc3VtcHRpb25Ob2RlcyIsImdldEFzc3VtcHRpb25Ob2RlcyIsIm1hcCIsImFzc3VtcHRpb25Ob2RlIiwiZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFjQTs7O2VBQUE7OztnQ0Fab0U7MEJBRTdDO3lCQUNLOzhCQUNBOzZCQUNLOytCQUNJO3lCQUNLO0FBRTFDLE1BQU0sRUFBRUEsS0FBSyxFQUFFLEdBQUdDLHFDQUFxQixFQUNqQyxFQUFFQyxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO01BRTlFLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsY0FBY0MsdUJBQU87SUFDL0MsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxXQUFXLEVBQUVDLFlBQVksQ0FBRTtRQUN4RSxLQUFLLENBQUNMLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsV0FBVyxHQUFHQTtRQUNuQixJQUFJLENBQUNDLFlBQVksR0FBR0E7SUFDdEI7SUFFQUMsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUNGLFdBQVc7SUFDekI7SUFFQUcsa0JBQWtCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDRixZQUFZO0lBQzFCO0lBRUFHLGVBQWU7UUFDYixNQUFNTixPQUFPLElBQUksQ0FBQ08sT0FBTyxJQUNuQkMsWUFBWVIsTUFBTSxHQUFHO1FBRTNCLE9BQU9RO0lBQ1Q7SUFFQUMsc0JBQXNCO1FBQ3BCLE1BQU1ELFlBQVksSUFBSSxDQUFDRixZQUFZLElBQzdCSSxtQkFBbUJGLFVBQVVDLG1CQUFtQjtRQUV0RCxPQUFPQztJQUNUO0lBRUFDLHNCQUFzQjtRQUNwQixJQUFJQyxtQkFBbUI7UUFFdkIsTUFBTUMsV0FBVyxJQUFJLENBQUNDLFVBQVU7UUFFaEMsSUFBSUQsVUFBVTtZQUNaRCxtQkFBbUIsSUFBSSxDQUFDVCxZQUFZLENBQUNZLE9BQU87UUFDOUM7UUFFQSxPQUFPSDtJQUNUO0lBRUFJLFVB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
|
package/lib/element/goal.js
CHANGED
|
@@ -55,7 +55,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
55
55
|
}
|
|
56
56
|
return newObj;
|
|
57
57
|
}
|
|
58
|
-
const {
|
|
58
|
+
const { clone } = _necessary.arrayUtilities, { each, filter } = _occamlanguages.continuationUtilities, { breakPointFromJSON, breakPointToBreakPointJSON } = _occamlanguages.breakPointUtilities;
|
|
59
59
|
const _default = (0, _elements.define)(class Goal extends _occamlanguages.Element {
|
|
60
60
|
constructor(context, string, node, breakPoint, reference, statement){
|
|
61
61
|
super(context, string, node, breakPoint);
|
|
@@ -136,7 +136,7 @@ const _default = (0, _elements.define)(class Goal extends _occamlanguages.Elemen
|
|
|
136
136
|
validateReference(context, continuation) {
|
|
137
137
|
const goalString = this.getString(); ///
|
|
138
138
|
context.trace(`Validating the '${goalString}' goal's reference...`);
|
|
139
|
-
this.reference.validate(context, (reference)=>{
|
|
139
|
+
return this.reference.validate(context, (reference)=>{
|
|
140
140
|
let referenceValidates = false;
|
|
141
141
|
if (reference !== null) {
|
|
142
142
|
this.reference = reference;
|
|
@@ -151,7 +151,7 @@ const _default = (0, _elements.define)(class Goal extends _occamlanguages.Elemen
|
|
|
151
151
|
validateStatement(context, continuation) {
|
|
152
152
|
const goalString = this.getString(); ///
|
|
153
153
|
context.trace(`Validating the '${goalString}' goal's statement...`);
|
|
154
|
-
this.statement.validate(context, (statement)=>{
|
|
154
|
+
return this.statement.validate(context, (statement)=>{
|
|
155
155
|
let statementValidates = false;
|
|
156
156
|
if (statement !== null) {
|
|
157
157
|
statementValidates = true;
|
|
@@ -189,85 +189,94 @@ const _default = (0, _elements.define)(class Goal extends _occamlanguages.Elemen
|
|
|
189
189
|
let schemas;
|
|
190
190
|
schemas = context.getSchemas();
|
|
191
191
|
schemas = clone(schemas); ///
|
|
192
|
-
filter(schemas, (schema)=>{
|
|
193
|
-
const label = schema.getLabel()
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
192
|
+
return filter(schemas, (schema, continuation)=>{
|
|
193
|
+
const label = schema.getLabel();
|
|
194
|
+
return this.unifyLabel(label, context, continuation);
|
|
195
|
+
}, ()=>{
|
|
196
|
+
return each(schemas, (schema, continuation)=>{
|
|
197
|
+
return this.unifySchema(schema, context, continuation);
|
|
198
|
+
}, (schemasUnifiy)=>{
|
|
199
|
+
if (schemasUnifiy) {
|
|
200
|
+
validatesWhenDerived = true;
|
|
201
|
+
}
|
|
202
|
+
if (validatesWhenDerived) {
|
|
203
|
+
context.debug(`...validated the '${goalString}' derived goal.`);
|
|
204
|
+
}
|
|
205
|
+
return continuation(validatesWhenDerived);
|
|
206
|
+
});
|
|
203
207
|
});
|
|
204
|
-
if (schemasUnifiy) {
|
|
205
|
-
validatesWhenDerived = true;
|
|
206
|
-
}
|
|
207
|
-
if (validatesWhenDerived) {
|
|
208
|
-
context.debug(`...validated the '${goalString}' derived goal.`);
|
|
209
|
-
}
|
|
210
|
-
return validatesWhenDerived;
|
|
211
208
|
}
|
|
212
|
-
unifyLabel(label, context) {
|
|
213
|
-
let labelUnifies;
|
|
209
|
+
unifyLabel(label, context, continuation) {
|
|
214
210
|
const goalString = this.getString(), labelString = label.getString();
|
|
215
211
|
context.trace(`Unifying the '${labelString}' label with the '${goalString}' goal...`);
|
|
216
212
|
(0, _context.reconcile)((context)=>{
|
|
217
|
-
|
|
213
|
+
return this.reference.unifyLabel(label, context, (labelUnifies)=>{
|
|
214
|
+
if (labelUnifies) {
|
|
215
|
+
context.debug(`...unified the '${labelString}' label with the '${goalString}' goal's reference.`);
|
|
216
|
+
}
|
|
217
|
+
return continuation(labelUnifies);
|
|
218
|
+
});
|
|
218
219
|
}, context);
|
|
219
|
-
if (labelUnifies) {
|
|
220
|
-
context.debug(`...unified the '${labelString}' label with the '${goalString}' goal's reference.`);
|
|
221
|
-
}
|
|
222
|
-
return labelUnifies;
|
|
223
220
|
}
|
|
224
|
-
unifySchema(schema, context) {
|
|
225
|
-
let schemaUnifies = false;
|
|
221
|
+
unifySchema(schema, context, continuation) {
|
|
226
222
|
const goalString = this.getString(), schemaString = schema.getString();
|
|
227
223
|
context.trace(`Unifying the '${schemaString}' schema with the '${goalString}' goal...`);
|
|
228
224
|
const generalContext = context; ///
|
|
229
225
|
(0, _context.reconcile)((context)=>{
|
|
230
|
-
const label = schema.getLabel()
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
226
|
+
const label = schema.getLabel();
|
|
227
|
+
return this.reference.unifyLabel(label, context, (labelUnifies)=>{
|
|
228
|
+
if (labelUnifies) {
|
|
229
|
+
const specificContext = context, schemaConditional = schema.isConditional(), subproofAssertion = subproofAssertionFromStatement(this.statement, context);
|
|
230
|
+
if (schemaConditional) {
|
|
231
|
+
if (subproofAssertion === null) {
|
|
232
|
+
const schemaUnifies = false;
|
|
233
|
+
return continuation(schemaUnifies);
|
|
234
|
+
}
|
|
235
|
+
return subproofAssertion.unifySchema(schema, generalContext, specificContext, (schemaUnifies)=>{
|
|
236
|
+
if (schemaUnifies) {
|
|
237
|
+
context.debug(`...unified the '${schemaString}' schema with the '${goalString}' goal.`);
|
|
238
|
+
}
|
|
239
|
+
return continuation(schemaUnifies);
|
|
240
|
+
});
|
|
241
|
+
}
|
|
234
242
|
if (subproofAssertion !== null) {
|
|
235
|
-
schemaUnifies =
|
|
243
|
+
const schemaUnifies = false;
|
|
244
|
+
return continuation(schemaUnifies);
|
|
236
245
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
246
|
+
const deduction = schema.getDeduction();
|
|
247
|
+
this.unifyDeduction(deduction, generalContext, specificContext, (deductionUnifies)=>{
|
|
248
|
+
let schemaUnifies = false;
|
|
240
249
|
if (deductionUnifies) {
|
|
241
250
|
schemaUnifies = true;
|
|
242
251
|
}
|
|
243
|
-
|
|
252
|
+
if (schemaUnifies) {
|
|
253
|
+
context.debug(`...unified the '${schemaString}' schema with the '${goalString}' goal.`);
|
|
254
|
+
}
|
|
255
|
+
return continuation(schemaUnifies);
|
|
256
|
+
});
|
|
244
257
|
}
|
|
245
|
-
}
|
|
258
|
+
});
|
|
246
259
|
}, context);
|
|
247
|
-
if (schemaUnifies) {
|
|
248
|
-
context.debug(`...unified the '${schemaString}' schema with the '${goalString}' goal.`);
|
|
249
|
-
}
|
|
250
|
-
return schemaUnifies;
|
|
251
260
|
}
|
|
252
|
-
unifyDeduction(deduction, generalContext, specificContext) {
|
|
253
|
-
let deductionUnifies;
|
|
261
|
+
unifyDeduction(deduction, generalContext, specificContext, continuation) {
|
|
254
262
|
const context = specificContext, goalString = this.getString(), deductionString = deduction.getString();
|
|
255
263
|
context.trace(`Unifying the '${deductionString}' deduction's statement with the '${goalString}' goal's '${goalString}' statement...`);
|
|
256
264
|
const statement = deduction.getStatement(), deductionContext = deduction.getContext(); ///
|
|
257
265
|
specificContext = deductionContext; ///
|
|
258
266
|
(0, _context.reconcile)((specificContext)=>{
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
267
|
+
return this.statement.unifyStatement(statement, generalContext, specificContext, (statementUnifies)=>{
|
|
268
|
+
let deductionUnifies = false;
|
|
269
|
+
if (statementUnifies) {
|
|
270
|
+
deductionUnifies = true;
|
|
271
|
+
specificContext.commit(context);
|
|
272
|
+
}
|
|
273
|
+
if (deductionUnifies) {
|
|
274
|
+
context.debug(`...unified the '${deductionString}' deduction's statement with the '${goalString}' goal's '${goalString}' statement.`);
|
|
275
|
+
}
|
|
276
|
+
return continuation(deductionUnifies);
|
|
277
|
+
});
|
|
264
278
|
}, specificContext);
|
|
265
|
-
if (deductionUnifies) {
|
|
266
|
-
context.debug(`...unified the '${deductionString}' deduction's statement with the '${goalString}' goal's '${goalString}' statement.`);
|
|
267
|
-
}
|
|
268
|
-
return deductionUnifies;
|
|
269
279
|
}
|
|
270
|
-
static name = "Goal";
|
|
271
280
|
toJSON() {
|
|
272
281
|
const string = this.getString();
|
|
273
282
|
let breakPoint;
|
|
@@ -280,6 +289,7 @@ const _default = (0, _elements.define)(class Goal extends _occamlanguages.Elemen
|
|
|
280
289
|
};
|
|
281
290
|
return json;
|
|
282
291
|
}
|
|
292
|
+
static name = "Goal";
|
|
283
293
|
static fromJSON(json, context) {
|
|
284
294
|
return (0, _context.instantiate)((context)=>{
|
|
285
295
|
const { string } = json, goalNode = (0, _instantiate.instantiateGoal)(string, context), node = goalNode, breakPoint = breakPointFromJSON(json), reference = referenceFromGoalNode(goalNode, context), statement = statementFromGoalNode(goalNode, context), goal = new Goal(context, string, node, breakPoint, reference, statement);
|
|
@@ -305,4 +315,4 @@ function subproofAssertionFromStatement(statement, context) {
|
|
|
305
315
|
return subproofAssertion;
|
|
306
316
|
}
|
|
307
317
|
|
|
308
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2dvYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGFsbCwgZXhpc3RzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlR29hbCB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyByZWNvbmNpbGUsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5cbmNvbnN0IHsgZWFjaCwgY2xvbmUsIGZpbHRlciB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBHb2FsIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgdGhpcy5zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRSZWZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldEdvYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBnb2FsTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBnb2FsTm9kZTtcbiAgfVxuXG4gIGdldFN0YXRlbWVudE5vZGUoKSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5nZXRTdGF0ZW1lbnROb2RlKCk7IH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7IHJldHVybiB0aGlzLnJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGlzRXF1YWxUbyhnb2FsKSB7XG4gICAgY29uc3QgZ29hbE5vZGUgPSBnb2FsLmdldE5vZGUoKSxcbiAgICAgICAgICBnb2FsTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoR29hbE5vZGUoZ29hbE5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBnb2FsTm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hHb2FsTm9kZShnb2FsTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBnb2FsTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBnb2FsTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gZ29hbE5vZGVNYXRjaGVzO1xuICB9XG5cbiAgZmluZFN1YnByb29mQXNzZXJ0aW9uKGNvbnRleHQpIHtcbiAgICBsZXQgc3VicHJvb2ZBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHRoaXMuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlKCk7XG5cbiAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IGNvbnRleHQuZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRWYWxpZEdvYWwoY29udGV4dCkge1xuICAgIGNvbnN0IGdvYWxOb2RlID0gdGhpcy5nZXRHb2FsTm9kZSgpLFxuICAgICAgICAgIGdvYWwgPSBjb250ZXh0LmZpbmRHb2FsQnlHb2FsTm9kZShnb2FsTm9kZSksXG4gICAgICAgICAgdmFsaWRHb2FsID0gZ29hbDsgIC8vL1xuXG4gICAgcmV0dXJuIHZhbGlkR29hbDtcbiAgfVxuXG4gIHZhbGlkYXRlKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGdvYWxTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtnb2FsU3RyaW5nfScgZ29hbC4uLmApO1xuXG4gICAgY29uc3QgdmFsaWRHb2FsID0gdGhpcy5maW5kVmFsaWRHb2FsKGNvbnRleHQpO1xuXG4gICAgaWYgKHZhbGlkR29hbCAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZ29hbCA9IHZhbGlkR29hbDsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHtnb2FsU3RyaW5nfScgZ29hbCBpcyBhbHJlYWR5IHZhbGlkLmApO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGdvYWwpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkYXRlU3RhdGVtZW50ID0gdGhpcy52YWxpZGF0ZVN0YXRlbWVudC5iaW5kKHRoaXMpLFxuICAgICAgICAgIHZhbGlkYXRlUmVmZXJlbmNlID0gdGhpcy52YWxpZGF0ZVJlZmVyZW5jZS5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGFsbChbXG4gICAgICB2YWxpZGF0ZVJlZmVyZW5jZSxcbiAgICAgIHZhbGlkYXRlU3RhdGVtZW50XG4gICAgXSwgY29udGV4dCwgKHZhbGlkYXRlcykgPT4ge1xuICAgICAgaWYgKCF2YWxpZGF0ZXMpIHtcbiAgICAgICAgY29uc3QgZ29hbCA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihnb2FsKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlblN0YXRlZCA9IHRoaXMudmFsaWRhdGVXaGVuU3RhdGVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVyaXZlZC5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gZXhpc3RzKFtcbiAgICAgICAgdmFsaWRhdGVzV2hlblN0YXRlZCxcbiAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWRcbiAgICAgIF0sIGNvbnRleHQsICh2YWxpZGF0ZXMpID0+IHtcbiAgICAgICAgbGV0IGdvYWwgPSBudWxsO1xuXG4gICAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgICBnb2FsID0gdGhpczsgLy8vXG5cbiAgICAgICAgICBjb250ZXh0LmFkZEdvYWwoZ29hbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtnb2FsU3RyaW5nfScgZ29hbC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oZ29hbCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlUmVmZXJlbmNlKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGdvYWxTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtnb2FsU3RyaW5nfScgZ29hbCdzIHJlZmVyZW5jZS4uLmApO1xuXG4gICAgdGhpcy5yZWZlcmVuY2UudmFsaWRhdGUoY29udGV4dCwgKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgbGV0IHJlZmVyZW5jZVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICBpZiAocmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlO1xuXG4gICAgICAgIHJlZmVyZW5jZVZhbGlkYXRlcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWZlcmVuY2VWYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtnb2FsU3RyaW5nfScgZ29hbCdzIHJlZmVyZW5jZS5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihyZWZlcmVuY2VWYWxpZGF0ZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVTdGF0ZW1lbnQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgZ29hbFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsJ3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICB0aGlzLnN0YXRlbWVudC52YWxpZGF0ZShjb250ZXh0LCAoc3RhdGVtZW50KSA9PiB7XG4gICAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsJ3Mgc3RhdGVtZW50LmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5TdGF0ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKCFzdGF0ZWQpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgICB9XG5cbiAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZDtcblxuICAgIGNvbnN0IGdvYWxTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtnb2FsU3RyaW5nfScgc3RhdGVkIGdvYWwuLi5gKTtcblxuICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0cnVlXG5cbiAgICBpZiAodmFsaWRhdGVzV2hlblN0YXRlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtnb2FsU3RyaW5nfScgc3RhdGVkIGdvYWwuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlcml2ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKHN0YXRlZCkge1xuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCk7XG4gICAgfVxuXG4gICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBnb2FsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Z29hbFN0cmluZ30nIGRlcml2ZWQgZ29hbC4uLmApO1xuXG4gICAgbGV0IHNjaGVtYXM7XG5cbiAgICBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKCk7XG5cbiAgICBzY2hlbWFzID0gY2xvbmUoc2NoZW1hcyk7IC8vL1xuXG4gICAgZmlsdGVyKHNjaGVtYXMsIChzY2hlbWEpID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsID0gc2NoZW1hLmdldExhYmVsKCksXG4gICAgICAgICAgICBsYWJlbFVuaWZpZXMgPSB0aGlzLnVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQpO1xuXG4gICAgICBpZiAobGFiZWxVbmlmaWVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2NoZW1hc1VuaWZpeSA9IGVhY2goc2NoZW1hcywgKHNjaGVtYSkgPT4ge1xuICAgICAgY29uc3Qgc2NoZW1hVW5pZmllcyA9IHRoaXMudW5pZnlTY2hlbWEoc2NoZW1hLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHNjaGVtYVVuaWZpZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoc2NoZW1hc1VuaWZpeSkge1xuICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtnb2FsU3RyaW5nfScgZGVyaXZlZCBnb2FsLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXNXaGVuRGVyaXZlZDtcbiAgfVxuXG4gIHVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQpIHtcbiAgICBsZXQgbGFiZWxVbmlmaWVzO1xuXG4gICAgY29uc3QgZ29hbFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2xhYmVsU3RyaW5nfScgbGFiZWwgd2l0aCB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwuLi5gKTtcblxuICAgIHJlY29uY2lsZSgoY29udGV4dCkgPT4ge1xuICAgICAgbGFiZWxVbmlmaWVzID0gdGhpcy5yZWZlcmVuY2UudW5pZnlMYWJlbChsYWJlbCwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAobGFiZWxVbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsJ3MgcmVmZXJlbmNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBsYWJlbFVuaWZpZXM7XG4gIH1cblxuICB1bmlmeVNjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgICBsZXQgc2NoZW1hVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgZ29hbFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc2NoZW1hU3RyaW5nID0gc2NoZW1hLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSB3aXRoIHRoZSAnJHtnb2FsU3RyaW5nfScgZ29hbC4uLmApO1xuXG4gICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsID0gc2NoZW1hLmdldExhYmVsKCksXG4gICAgICAgICAgICBsYWJlbFVuaWZpZXMgPSB0aGlzLnJlZmVyZW5jZS51bmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0KTtcblxuICAgICAgaWYgKGxhYmVsVW5pZmllcykge1xuICAgICAgICBjb25zdCBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0LCAgLy8vXG4gICAgICAgICAgICAgIHNjaGVtYUNvbmRpdGlvbmFsID0gc2NoZW1hLmlzQ29uZGl0aW9uYWwoKSxcbiAgICAgICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQodGhpcy5zdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChzY2hlbWFDb25kaXRpb25hbCkge1xuICAgICAgICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc2NoZW1hVW5pZmllcyA9IHN1YnByb29mQXNzZXJ0aW9uLnVuaWZ5U2NoZW1hKHNjaGVtYSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgZGVkdWN0aW9uID0gc2NoZW1hLmdldERlZHVjdGlvbigpLFxuICAgICAgICAgICAgICAgICAgZGVkdWN0aW9uVW5pZmllcyA9IHRoaXMudW5pZnlEZWR1Y3Rpb24oZGVkdWN0aW9uLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICAgICAgaWYgKGRlZHVjdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgICAgc2NoZW1hVW5pZmllcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAoc2NoZW1hVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzY2hlbWFVbmlmaWVzO1xuICB9XG5cbiAgdW5pZnlEZWR1Y3Rpb24oZGVkdWN0aW9uLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IGRlZHVjdGlvblVuaWZpZXM7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgZ29hbFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBkZWR1Y3Rpb25TdHJpbmcgPSBkZWR1Y3Rpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uJ3Mgc3RhdGVtZW50ICB3aXRoIHRoZSAnJHtnb2FsU3RyaW5nfScgZ29hbCdzICcke2dvYWxTdHJpbmd9JyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IGRlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBkZWR1Y3Rpb25Db250ZXh0ID0gZGVkdWN0aW9uLmdldENvbnRleHQoKTsgLy8vXG5cbiAgICBzcGVjaWZpY0NvbnRleHQgPSBkZWR1Y3Rpb25Db250ZXh0OyAvLy9cblxuICAgIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRVbmlmaWVzID0gdGhpcy5zdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgZGVkdWN0aW9uVW5pZmllcyA9IHRydWU7XG5cbiAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKGRlZHVjdGlvblVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbidzIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtnb2FsU3RyaW5nfScgZ29hbCdzICcke2dvYWxTdHJpbmd9JyBzdGF0ZW1lbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZHVjdGlvblVuaWZpZXM7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiR29hbFwiO1xuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIGdvYWxOb2RlID0gaW5zdGFudGlhdGVHb2FsKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gZ29hbE5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tR29hbE5vZGUoZ29hbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUdvYWxOb2RlKGdvYWxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIGdvYWwgPSBuZXcgR29hbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgc3RhdGVtZW50KTtcblxuICAgICAgcmV0dXJuIGdvYWw7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiByZWZlcmVuY2VGcm9tR29hbE5vZGUoZ29hbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGdvYWxOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IGNvbnRleHQuZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5mdW5jdGlvbiBzdGF0ZW1lbnRGcm9tR29hbE5vZGUoZ29hbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGdvYWxOb2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gY29udGV4dC5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mQXNzZXJ0aW9uO1xuXG4gIGNvbnN0IHsgU3VicHJvb2ZBc3NlcnRpb24gfSA9IGVsZW1lbnRzO1xuXG4gIHN1YnByb29mQXNzZXJ0aW9uID0gU3VicHJvb2ZBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIHN1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb24udmFsaWRhdGUoY29udGV4dCk7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cbiJdLCJuYW1lcyI6WyJlYWNoIiwiY2xvbmUiLCJmaWx0ZXIiLCJhcnJheVV0aWxpdGllcyIsImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkdvYWwiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwicmVmZXJlbmNlIiwic3RhdGVtZW50IiwiZ2V0UmVmZXJlbmNlIiwiZ2V0U3RhdGVtZW50IiwiZ2V0R29hbE5vZGUiLCJnZXROb2RlIiwiZ29hbE5vZGUiLCJnZXRTdGF0ZW1lbnROb2RlIiwiZ2V0TWV0YXZhcmlhYmxlIiwiaXNFcXVhbFRvIiwiZ29hbCIsImdvYWxOb2RlTWF0Y2hlcyIsIm1hdGNoR29hbE5vZGUiLCJlcXVhbFRvIiwibm9kZU1hdGNoZXMiLCJtYXRjaE5vZGUiLCJmaW5kU3VicHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiZmluZFZhbGlkR29hbCIsImZpbmRHb2FsQnlHb2FsTm9kZSIsInZhbGlkR29hbCIsInZhbGlkYXRlIiwiY29udGludWF0aW9uIiwiZ29hbFN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVidWciLCJ2YWxpZGF0ZVN0YXRlbWVudCIsImJpbmQiLCJ2YWxpZGF0ZVJlZmVyZW5jZSIsImFsbCIsInZhbGlkYXRlcyIsInZhbGlkYXRlc1doZW5TdGF0ZWQiLCJ2YWxpZGF0ZVdoZW5TdGF0ZWQiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJleGlzdHMiLCJhZGRHb2FsIiwicmVmZXJlbmNlVmFsaWRhdGVzIiwic3RhdGVtZW50VmFsaWRhdGVzIiwic3RhdGVkIiwiaXNTdGF0ZWQiLCJzY2hlbWFzIiwiZ2V0U2NoZW1hcyIsInNjaGVtYSIsImxhYmVsIiwiZ2V0TGFiZWwiLCJsYWJlbFVuaWZpZXMiLCJ1bmlmeUxhYmVsIiwic2NoZW1hc1VuaWZpeSIsInNjaGVtYVVuaWZpZXMiLCJ1bmlmeVNjaGVtYSIsImxhYmVsU3RyaW5nIiwicmVjb25jaWxlIiwic2NoZW1hU3RyaW5nIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJzY2hlbWFDb25kaXRpb25hbCIsImlzQ29uZGl0aW9uYWwiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJkZWR1Y3Rpb24iLCJnZXREZWR1Y3Rpb24iLCJkZWR1Y3Rpb25VbmlmaWVzIiwidW5pZnlEZWR1Y3Rpb24iLCJkZWR1Y3Rpb25TdHJpbmciLCJkZWR1Y3Rpb25Db250ZXh0IiwiZ2V0Q29udGV4dCIsInN0YXRlbWVudFVuaWZpZXMiLCJ1bmlmeVN0YXRlbWVudCIsImNvbW1pdCIsIm5hbWUiLCJ0b0pTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlR29hbCIsInJlZmVyZW5jZUZyb21Hb2FsTm9kZSIsInN0YXRlbWVudEZyb21Hb2FsTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwiZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJTdWJwcm9vZkFzc2VydGlvbiIsImVsZW1lbnRzIiwiZnJvbVN0YXRlbWVudCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBZUE7OztlQUFBOzs7MkJBYitCO2dDQUNjO2tFQUV4Qjs4QkFHTzs2QkFDSTt5QkFDTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|
|
318
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2dvYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcywgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgYWxsLCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVHb2FsIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHJlY29uY2lsZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBjbG9uZSB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGVhY2gsIGZpbHRlciB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgR29hbCBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgc3RhdGVtZW50KSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZTtcbiAgfVxuXG4gIGdldFN0YXRlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRHb2FsTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgZ29hbE5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gZ29hbE5vZGU7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnROb2RlKCkgeyByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuZ2V0U3RhdGVtZW50Tm9kZSgpOyB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlKCkgeyByZXR1cm4gdGhpcy5yZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlKCk7IH1cblxuICBpc0VxdWFsVG8oZ29hbCkge1xuICAgIGNvbnN0IGdvYWxOb2RlID0gZ29hbC5nZXROb2RlKCksXG4gICAgICAgICAgZ29hbE5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEdvYWxOb2RlKGdvYWxOb2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gZ29hbE5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIG1hdGNoR29hbE5vZGUoZ29hbE5vZGUpIHtcbiAgICBjb25zdCBub2RlID0gZ29hbE5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgZ29hbE5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGdvYWxOb2RlTWF0Y2hlcztcbiAgfVxuXG4gIGZpbmRTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0KSB7XG4gICAgbGV0IHN1YnByb29mQXNzZXJ0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSB0aGlzLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpO1xuXG4gICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSBjb250ZXh0LmZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG4gIH1cblxuICBmaW5kVmFsaWRHb2FsKGNvbnRleHQpIHtcbiAgICBjb25zdCBnb2FsTm9kZSA9IHRoaXMuZ2V0R29hbE5vZGUoKSxcbiAgICAgICAgICBnb2FsID0gY29udGV4dC5maW5kR29hbEJ5R29hbE5vZGUoZ29hbE5vZGUpLFxuICAgICAgICAgIHZhbGlkR29hbCA9IGdvYWw7ICAvLy9cblxuICAgIHJldHVybiB2YWxpZEdvYWw7XG4gIH1cblxuICB2YWxpZGF0ZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBnb2FsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwuLi5gKTtcblxuICAgIGNvbnN0IHZhbGlkR29hbCA9IHRoaXMuZmluZFZhbGlkR29hbChjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZEdvYWwgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGdvYWwgPSB2YWxpZEdvYWw7IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi50aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwgaXMgYWxyZWFkeSB2YWxpZC5gKTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihnb2FsKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZVJlZmVyZW5jZSA9IHRoaXMudmFsaWRhdGVSZWZlcmVuY2UuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVSZWZlcmVuY2UsXG4gICAgICB2YWxpZGF0ZVN0YXRlbWVudFxuICAgIF0sIGNvbnRleHQsICh2YWxpZGF0ZXMpID0+IHtcbiAgICAgIGlmICghdmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IGdvYWwgPSBudWxsO1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oZ29hbCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0aGlzLnZhbGlkYXRlV2hlblN0YXRlZC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQsXG4gICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkXG4gICAgICBdLCBjb250ZXh0LCAodmFsaWRhdGVzKSA9PiB7XG4gICAgICAgIGxldCBnb2FsID0gbnVsbDtcblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgZ29hbCA9IHRoaXM7IC8vL1xuXG4gICAgICAgICAgY29udGV4dC5hZGRHb2FsKGdvYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGdvYWwpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVJlZmVyZW5jZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBnb2FsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwncyByZWZlcmVuY2UuLi5gKTtcblxuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZS52YWxpZGF0ZShjb250ZXh0LCAocmVmZXJlbmNlKSA9PiB7XG4gICAgICBsZXQgcmVmZXJlbmNlVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG5cbiAgICAgICAgcmVmZXJlbmNlVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlZmVyZW5jZVZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsJ3MgcmVmZXJlbmNlLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHJlZmVyZW5jZVZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBnb2FsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwncyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudC52YWxpZGF0ZShjb250ZXh0LCAoc3RhdGVtZW50KSA9PiB7XG4gICAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsJ3Mgc3RhdGVtZW50LmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5TdGF0ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKCFzdGF0ZWQpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgICB9XG5cbiAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZDtcblxuICAgIGNvbnN0IGdvYWxTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtnb2FsU3RyaW5nfScgc3RhdGVkIGdvYWwuLi5gKTtcblxuICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0cnVlXG5cbiAgICBpZiAodmFsaWRhdGVzV2hlblN0YXRlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtnb2FsU3RyaW5nfScgc3RhdGVkIGdvYWwuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlcml2ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKHN0YXRlZCkge1xuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCk7XG4gICAgfVxuXG4gICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBnb2FsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Z29hbFN0cmluZ30nIGRlcml2ZWQgZ29hbC4uLmApO1xuXG4gICAgbGV0IHNjaGVtYXM7XG5cbiAgICBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKCk7XG5cbiAgICBzY2hlbWFzID0gY2xvbmUoc2NoZW1hcyk7IC8vL1xuXG4gICAgcmV0dXJuIGZpbHRlcihzY2hlbWFzLCAoc2NoZW1hLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsID0gc2NoZW1hLmdldExhYmVsKCk7XG5cbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgKCkgPT4ge1xuICAgICAgcmV0dXJuIGVhY2goc2NoZW1hcywgKHNjaGVtYSwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnVuaWZ5U2NoZW1hKHNjaGVtYSwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICAgIH0sIChzY2hlbWFzVW5pZml5KSA9PiB7XG4gICAgICAgIGlmIChzY2hlbWFzVW5pZml5KSB7XG4gICAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtnb2FsU3RyaW5nfScgZGVyaXZlZCBnb2FsLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGdvYWxTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAgLy8vXG4gICAgICAgICAgbGFiZWxTdHJpbmcgPSBsYWJlbC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsLi4uYCk7XG5cbiAgICByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZS51bmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0LCAobGFiZWxVbmlmaWVzKSA9PiB7XG4gICAgICAgIGlmIChsYWJlbFVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsJ3MgcmVmZXJlbmNlLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihsYWJlbFVuaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeVNjaGVtYShzY2hlbWEsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGdvYWxTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLFxuICAgICAgICAgIHNjaGVtYVN0cmluZyA9IHNjaGVtYS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEgd2l0aCB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwuLi5gKTtcblxuICAgIGNvbnN0IGdlbmVyYWxDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBsYWJlbCA9IHNjaGVtYS5nZXRMYWJlbCgpO1xuXG4gICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2UudW5pZnlMYWJlbChsYWJlbCwgY29udGV4dCwgKGxhYmVsVW5pZmllcykgPT4ge1xuICAgICAgICBpZiAobGFiZWxVbmlmaWVzKSB7XG4gICAgICAgICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICAgIHNjaGVtYUNvbmRpdGlvbmFsID0gc2NoZW1hLmlzQ29uZGl0aW9uYWwoKSxcbiAgICAgICAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCh0aGlzLnN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoc2NoZW1hQ29uZGl0aW9uYWwpIHtcbiAgICAgICAgICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBjb25zdCBzY2hlbWFVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzY2hlbWFVbmlmaWVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uLnVuaWZ5U2NoZW1hKHNjaGVtYSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHNjaGVtYVVuaWZpZXMpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHNjaGVtYVVuaWZpZXMpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEgd2l0aCB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwuYCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHNjaGVtYVVuaWZpZXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzY2hlbWFVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc2NoZW1hVW5pZmllcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZGVkdWN0aW9uID0gc2NoZW1hLmdldERlZHVjdGlvbigpO1xuXG4gICAgICAgICAgdGhpcy51bmlmeURlZHVjdGlvbihkZWR1Y3Rpb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChkZWR1Y3Rpb25VbmlmaWVzKSA9PiB7XG4gICAgICAgICAgICBsZXQgc2NoZW1hVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoZGVkdWN0aW9uVW5pZmllcykge1xuICAgICAgICAgICAgICBzY2hlbWFVbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNjaGVtYVVuaWZpZXMpIHtcbiAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHNjaGVtYVVuaWZpZXMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5RGVkdWN0aW9uKGRlZHVjdGlvbiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGdvYWxTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAgLy8vXG4gICAgICAgICAgZGVkdWN0aW9uU3RyaW5nID0gZGVkdWN0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbidzIHN0YXRlbWVudCAgd2l0aCB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwncyAnJHtnb2FsU3RyaW5nfScgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBkZWR1Y3Rpb24uZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgZGVkdWN0aW9uQ29udGV4dCA9IGRlZHVjdGlvbi5nZXRDb250ZXh0KCk7IC8vL1xuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gZGVkdWN0aW9uQ29udGV4dDsgLy8vXG5cbiAgICByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50LnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHN0YXRlbWVudFVuaWZpZXMpID0+IHtcbiAgICAgICAgbGV0IGRlZHVjdGlvblVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgICAgIGRlZHVjdGlvblVuaWZpZXMgPSB0cnVlO1xuXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWR1Y3Rpb25VbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uJ3Mgc3RhdGVtZW50IHdpdGggdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsJ3MgJyR7Z29hbFN0cmluZ30nIHN0YXRlbWVudC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oZGVkdWN0aW9uVW5pZmllcyk7XG4gICAgICB9KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICBzdHJpbmcsXG4gICAgICBicmVha1BvaW50XG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkdvYWxcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIHJldHVybiBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICBnb2FsTm9kZSA9IGluc3RhbnRpYXRlR29hbChzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgbm9kZSA9IGdvYWxOb2RlLCAgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUdvYWxOb2RlKGdvYWxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Hb2FsTm9kZShnb2FsTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICBnb2FsID0gbmV3IEdvYWwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG5cbiAgICAgIHJldHVybiBnb2FsO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG59KTtcblxuZnVuY3Rpb24gcmVmZXJlbmNlRnJvbUdvYWxOb2RlKGdvYWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBnb2FsTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSBjb250ZXh0LmZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZnVuY3Rpb24gc3RhdGVtZW50RnJvbUdvYWxOb2RlKGdvYWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBnb2FsTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5mdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZkFzc2VydGlvbjtcblxuICBjb25zdCB7IFN1YnByb29mQXNzZXJ0aW9uIH0gPSBlbGVtZW50cztcblxuICBzdWJwcm9vZkFzc2VydGlvbiA9IFN1YnByb29mQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uLnZhbGlkYXRlKGNvbnRleHQpOyAgLy8vXG4gIH1cblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG59XG4iXSwibmFtZXMiOlsiY2xvbmUiLCJhcnJheVV0aWxpdGllcyIsImVhY2giLCJmaWx0ZXIiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJHb2FsIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInJlZmVyZW5jZSIsInN0YXRlbWVudCIsImdldFJlZmVyZW5jZSIsImdldFN0YXRlbWVudCIsImdldEdvYWxOb2RlIiwiZ2V0Tm9kZSIsImdvYWxOb2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImdldE1ldGF2YXJpYWJsZSIsImlzRXF1YWxUbyIsImdvYWwiLCJnb2FsTm9kZU1hdGNoZXMiLCJtYXRjaEdvYWxOb2RlIiwiZXF1YWxUbyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwiZmluZFN1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb24iLCJzdGF0ZW1lbnROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZSIsImZpbmRWYWxpZEdvYWwiLCJmaW5kR29hbEJ5R29hbE5vZGUiLCJ2YWxpZEdvYWwiLCJ2YWxpZGF0ZSIsImNvbnRpbnVhdGlvbiIsImdvYWxTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlYnVnIiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJiaW5kIiwidmFsaWRhdGVSZWZlcmVuY2UiLCJhbGwiLCJ2YWxpZGF0ZXMiLCJ2YWxpZGF0ZXNXaGVuU3RhdGVkIiwidmFsaWRhdGVXaGVuU3RhdGVkIiwidmFsaWRhdGVzV2hlbkRlcml2ZWQiLCJ2YWxpZGF0ZVdoZW5EZXJpdmVkIiwiZXhpc3RzIiwiYWRkR29hbCIsInJlZmVyZW5jZVZhbGlkYXRlcyIsInN0YXRlbWVudFZhbGlkYXRlcyIsInN0YXRlZCIsImlzU3RhdGVkIiwic2NoZW1hcyIsImdldFNjaGVtYXMiLCJzY2hlbWEiLCJsYWJlbCIsImdldExhYmVsIiwidW5pZnlMYWJlbCIsInVuaWZ5U2NoZW1hIiwic2NoZW1hc1VuaWZpeSIsImxhYmVsU3RyaW5nIiwicmVjb25jaWxlIiwibGFiZWxVbmlmaWVzIiwic2NoZW1hU3RyaW5nIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJzY2hlbWFDb25kaXRpb25hbCIsImlzQ29uZGl0aW9uYWwiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJzY2hlbWFVbmlmaWVzIiwiZGVkdWN0aW9uIiwiZ2V0RGVkdWN0aW9uIiwidW5pZnlEZWR1Y3Rpb24iLCJkZWR1Y3Rpb25VbmlmaWVzIiwiZGVkdWN0aW9uU3RyaW5nIiwiZGVkdWN0aW9uQ29udGV4dCIsImdldENvbnRleHQiLCJ1bmlmeVN0YXRlbWVudCIsInN0YXRlbWVudFVuaWZpZXMiLCJjb21taXQiLCJ0b0pTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZUdvYWwiLCJyZWZlcmVuY2VGcm9tR29hbE5vZGUiLCJzdGF0ZW1lbnRGcm9tR29hbE5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIiwiU3VicHJvb2ZBc3NlcnRpb24iLCJlbGVtZW50cyIsImZyb21TdGF0ZW1lbnQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWdCQTs7O2VBQUE7OzsyQkFkK0I7Z0NBQ3FDO2tFQUUvQzs4QkFHTzs2QkFDSTt5QkFDTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXZDLE1BQU0sRUFBRUEsS0FBSyxFQUFFLEdBQUdDLHlCQUFjLEVBQzFCLEVBQUVDLElBQUksRUFBRUMsTUFBTSxFQUFFLEdBQUdDLHFDQUFxQixFQUN4QyxFQUFFQyxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO01BRTlFLFdBQWVDLElBQUFBLGdC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
|