occam-nominal 1.0.332 → 1.0.333
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/element/rule.js
CHANGED
|
@@ -162,7 +162,7 @@ const _default = (0, _elements.define)(class Rule extends _occamlanguages.Elemen
|
|
|
162
162
|
const stepAndSubproofOrProofAssertionsUnify = false;
|
|
163
163
|
return continuation(stepAndSubproofOrProofAssertionsUnify);
|
|
164
164
|
}
|
|
165
|
-
this.unifySubproofOrProofAssertionsWithPremises(subproofOrProofAssertions, context, (subproofOrProofAssertionsUnifiesWithPremises)=>{
|
|
165
|
+
return this.unifySubproofOrProofAssertionsWithPremises(subproofOrProofAssertions, context, (subproofOrProofAssertionsUnifiesWithPremises)=>{
|
|
166
166
|
let stepAndSubproofOrProofAssertionsUnify = false;
|
|
167
167
|
if (subproofOrProofAssertionsUnifiesWithPremises) {
|
|
168
168
|
const derivedSubstitutionsResolved = context.areDerivedSubstitutionsResolved();
|
|
@@ -215,4 +215,4 @@ const _default = (0, _elements.define)(class Rule extends _occamlanguages.Elemen
|
|
|
215
215
|
}
|
|
216
216
|
});
|
|
217
217
|
|
|
218
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3J1bGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcywgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBhbGwgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBlbmNsb3NlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBsYWJlbHNGcm9tSlNPTiwgcHJlbWlzZXNGcm9tSlNPTiwgY29uY2x1c2lvbkZyb21KU09OLCBsYWJlbHNUb0xhYmVsc0pTT04sIHByZW1pc2VzVG9QcmVtaXNlc0pTT04sIGNvbmNsdXNpb25Ub0NvbmNsdXNpb25KU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgcmV2ZXJzZSB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGV2ZXJ5LCBleHRyYWN0LCBmb3J3YXJkc0V2ZXJ5LCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha2FibGUsIGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBSdWxlIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcHJvb2YsIGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5wcm9vZiA9IHByb29mO1xuICAgIHRoaXMubGFiZWxzID0gbGFiZWxzO1xuICAgIHRoaXMucHJlbWlzZXMgPSBwcmVtaXNlcztcbiAgICB0aGlzLmNvbmNsdXNpb24gPSBjb25jbHVzaW9uO1xuICB9XG5cbiAgZ2V0TGFiZWxzKCkge1xuICAgIHJldHVybiB0aGlzLmxhYmVscztcbiAgfVxuXG4gIGdldFByZW1pc2VzKCkge1xuICAgIHJldHVybiB0aGlzLnByZW1pc2VzO1xuICB9XG5cbiAgZ2V0UHJvb2YoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvb2Y7XG4gIH1cblxuICBnZXRDb25jbHVzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmNsdXNpb247XG4gIH1cblxuICBnZXRSdWxlTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgcnVsZU5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gcnVsZU5vZGU7XG4gIH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gdGhpcy5sYWJlbHMuc29tZSgobGFiZWwpID0+IHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gbGFiZWwubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXM7XG4gIH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHJ1bGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUuLi5gKTtcblxuICAgIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHZlcmlmeVByb29mID0gdGhpcy52ZXJpZnlQcm9vZi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmVyaWZ5TGFiZWxzID0gdGhpcy52ZXJpZnlMYWJlbHMuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZlcmlmeVByZW1pc2VzID0gdGhpcy52ZXJpZnlQcmVtaXNlcy5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmVyaWZ5Q29uY2x1c2lvbiA9IHRoaXMudmVyaWZ5Q29uY2x1c2lvbi5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gYWxsKFtcbiAgICAgICAgdmVyaWZ5TGFiZWxzLFxuICAgICAgICB2ZXJpZnlQcmVtaXNlcyxcbiAgICAgICAgdmVyaWZ5Q29uY2x1c2lvbixcbiAgICAgICAgdmVyaWZ5UHJvb2ZcbiAgICAgIF0sIGNvbnRleHQsICh2ZXJpZmllcykgPT4ge1xuICAgICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgICBjb25zdCBydWxlID0gdGhpczsgIC8vL1xuXG4gICAgICAgICAgY29udGV4dC5hZGRSdWxlKHJ1bGUpO1xuXG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2ZXJpZmllcyk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfSk7XG5cbiAgdmVyaWZ5TGFiZWxzKGNvbnRleHQsIGNvbm50aW51YXRpb24pIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzIGxhYmVscy4uLmApO1xuXG4gICAgcmV0dXJuIGV2ZXJ5KHRoaXMubGFiZWxzLCAobGFiZWwsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudmVyaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgKGxhYmVsc1ZlcmlmeSkgPT4ge1xuICAgICAgaWYgKGxhYmVsc1ZlcmlmeSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyBsYWJlbHMuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb25udGludWF0aW9uKGxhYmVsc1ZlcmlmeSk7XG4gICAgfSk7XG4gIH1cblxuICB2ZXJpZnlMYWJlbChsYWJlbCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgcnVsZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke2xhYmVsU3RyaW5nfScgbGFiZWwuLi5gKTtcblxuICAgIHJldHVybiBsYWJlbC52ZXJpZnkoKGxhYmVsVmVyaWZpZXMpID0+IHtcbiAgICAgIGlmIChsYWJlbFZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke2xhYmVsU3RyaW5nfScgbGFiZWwuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24obGFiZWxWZXJpZmllcyk7XG4gICAgfSk7XG4gIH1cblxuICB2ZXJpZnlQcm9vZihjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBpZiAodGhpcy5wcm9vZiA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgcHJvb2ZWZXJpZmllcyA9IHRydWU7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24ocHJvb2ZWZXJpZmllcyk7XG4gICAgfVxuXG4gICAgY29uc3QgcnVsZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyBwcm9vZi4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5jb25jbHVzaW9uLmdldFN0YXRlbWVudCgpO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvb2YudmVyaWZ5KHN0YXRlbWVudCwgY29udGV4dCwgKHByb29mVmVyaWZpZXMpID0+IHtcbiAgICAgIGlmIChwcm9vZlZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzIHByb29mLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHByb29mVmVyaWZpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5UHJlbWlzZShwcmVtaXNlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIHByZW1pc2VTdHJpbmcgPSBwcmVtaXNlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLi4uYCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZS52ZXJpZnkoY29udGV4dCwgKHByZW1pc2VWZXJpZmllcykgPT4ge1xuICAgICAgaWYgKHByZW1pc2VWZXJpZmllcykge1xuICAgICAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24gPSBwcmVtaXNlOyAgLy8vL1xuXG4gICAgICAgIGNvbnRleHQuYXNzaWduQXNzaWdubWVudHMoKTtcblxuICAgICAgICBjb250ZXh0LmFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJlbWlzZVZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHByZW1pc2VWZXJpZmllcyk7XG4gICAgfSk7XG4gIH1cblxuICB2ZXJpZnlQcmVtaXNlcyhjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzIHByZW1pc2VzLi4uYCk7XG5cbiAgICByZXR1cm4gZm9yd2FyZHNFdmVyeSh0aGlzLnByZW1pc2VzLCAocHJlbWlzZSwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJpZnlQcmVtaXNlKHByZW1pc2UsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgKHByZW1pc2VzVmVyaWZ5KSA9PiB7XG4gICAgICBpZiAocHJlbWlzZXNWZXJpZnkpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgcHJlbWlzZXMuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24ocHJlbWlzZXNWZXJpZnkpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5Q29uY2x1c2lvbihjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIGNvbmNsdXNpb25TdHJpbmcgPSB0aGlzLmNvbmNsdXNpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgJyR7Y29uY2x1c2lvblN0cmluZ30nIGNvbmNsdXNpb24uLi5gKTtcblxuICAgIHJldHVybiB0aGlzLmNvbmNsdXNpb24udmVyaWZ5KGNvbnRleHQsIChjb25jbHVzaW9uVmVyaWZpZXMpID0+IHtcbiAgICAgIGlmIChjb25jbHVzaW9uVmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgJyR7Y29uY2x1c2lvblN0cmluZ30nIGNvbmNsdXNpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oY29uY2x1c2lvblZlcmlmaWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5U3RlcFdpdGhDb25jbHVzaW9uKHN0ZXAsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHJ1bGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLFxuICAgICAgICAgIHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpLFxuICAgICAgICAgIGNvbmNsdXNpb25TdHJpbmcgPSB0aGlzLmNvbmNsdXNpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyAnJHtjb25jbHVzaW9uU3RyaW5nfScgY29uY2x1c2lvbi4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuY29uY2x1c2lvbi51bmlmeVN0ZXAoc3RlcCwgY29udGV4dCwgKHN0ZXBVbmlmaWVzKSA9PiB7XG4gICAgICBsZXQgc3RlcFVuaWZpZXNXaXRoQ29uY2x1c2lvbiA9IGZhbHNlO1xuXG4gICAgICBpZiAoc3RlcFVuaWZpZXMpIHtcbiAgICAgICAgc3RlcFVuaWZpZXNXaXRoQ29uY2x1c2lvbiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc1dpdGhDb25jbHVzaW9uKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgJyR7Y29uY2x1c2lvblN0cmluZ30nIGNvbmNsdXNpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNXaXRoQ29uY2x1c2lvbik7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeVN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN0ZXAsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIHJldHVybiB0aGlzLnVuaWZ5U3RlcFdpdGhDb25jbHVzaW9uKHN0ZXAsIGNvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbmNsdXNpb24pID0+IHtcbiAgICAgIGlmICghc3RhdGVtZW50VW5pZmllc1dpdGhDb25jbHVzaW9uKSB7XG4gICAgICAgIGNvbnN0IHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhQcmVtaXNlcyhzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0LCAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoUHJlbWlzZXMpID0+IHtcbiAgICAgICAgbGV0IHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkgPSBmYWxzZTtcblxuICAgICAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoUHJlbWlzZXMpIHtcbiAgICAgICAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkID0gY29udGV4dC5hcmVEZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkKCk7XG5cbiAgICAgICAgICBpZiAoZGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCkge1xuICAgICAgICAgICAgc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFByZW1pc2Uoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgcHJlbWlzZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgcmV0dXJuIGV4dHJhY3Qoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbiwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gcHJlbWlzZS51bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbiA9IG51bGwpID0+IHtcbiAgICAgIGlmIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoUHJlbWlzZSA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRleHQucmVzb2x2ZURlcml2ZWRTdWJzdGl0dXRpb25zKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFByZW1pc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZW1pc2UudW5pZnlJbmRlcGVuZGVudGx5KGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNXaXRoUHJlbWlzZXMoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IHJldmVyc2Uoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyk7IC8vL1xuXG4gICAgcmV0dXJuIGJhY2t3YXJkc0V2ZXJ5KHRoaXMucHJlbWlzZXMsIChwcmVtaXNlLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhQcmVtaXNlKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIHByZW1pc2UsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgY29udGludWF0aW9uKTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBsYWJlbHNKU09OID0gbGFiZWxzVG9MYWJlbHNKU09OKHRoaXMubGFiZWxzKSxcbiAgICAgICAgICBwcmVtaXNlc0pTT04gPSBwcmVtaXNlc1RvUHJlbWlzZXNKU09OKHRoaXMucHJlbWlzZXMpLFxuICAgICAgICAgIGNvbmNsdXNpb25KU09OID0gY29uY2x1c2lvblRvQ29uY2x1c2lvbkpTT04odGhpcy5jb25jbHVzaW9uKSxcbiAgICAgICAgICBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBsYWJlbHMgPSBsYWJlbHNKU09OLCAgLy8vXG4gICAgICAgICAgcHJlbWlzZXMgPSBwcmVtaXNlc0pTT04sICAvLy9cbiAgICAgICAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkpTT04sICAvLy9cbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgYnJlYWtQb2ludCxcbiAgICAgICAgICAgIGxhYmVscyxcbiAgICAgICAgICAgIHByZW1pc2VzLFxuICAgICAgICAgICAgY29uY2x1c2lvblxuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJSdWxlXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICBub2RlID0gbnVsbCxcbiAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIHByZW1pc2VzID0gcHJlbWlzZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIHByb29mID0gbnVsbCxcbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBwcm9vZiwgbGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbik7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsicmV2ZXJzZSIsImFycmF5VXRpbGl0aWVzIiwiZXZlcnkiLCJleHRyYWN0IiwiZm9yd2FyZHNFdmVyeSIsImJhY2t3YXJkc0V2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiYnJlYWthYmxlIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiUnVsZSIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJwcm9vZiIsImxhYmVscyIsInByZW1pc2VzIiwiY29uY2x1c2lvbiIsImdldExhYmVscyIsImdldFByZW1pc2VzIiwiZ2V0UHJvb2YiLCJnZXRDb25jbHVzaW9uIiwiZ2V0UnVsZU5vZGUiLCJnZXROb2RlIiwicnVsZU5vZGUiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJzb21lIiwibGFiZWwiLCJ2ZXJpZnkiLCJjb250aW51YXRpb24iLCJydWxlU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJlbmNsb3NlIiwidmVyaWZ5UHJvb2YiLCJiaW5kIiwidmVyaWZ5TGFiZWxzIiwidmVyaWZ5UHJlbWlzZXMiLCJ2ZXJpZnlDb25jbHVzaW9uIiwiYWxsIiwidmVyaWZpZXMiLCJydWxlIiwiYWRkUnVsZSIsImRlYnVnIiwiY29ubnRpbnVhdGlvbiIsInZlcmlmeUxhYmVsIiwibGFiZWxzVmVyaWZ5IiwibGFiZWxTdHJpbmciLCJsYWJlbFZlcmlmaWVzIiwicHJvb2ZWZXJpZmllcyIsInN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsInZlcmlmeVByZW1pc2UiLCJwcmVtaXNlIiwicHJlbWlzZVN0cmluZyIsInByZW1pc2VWZXJpZmllcyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsImFzc2lnbkFzc2lnbm1lbnRzIiwiYWRkU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwicHJlbWlzZXNWZXJpZnkiLCJjb25jbHVzaW9uU3RyaW5nIiwiY29uY2x1c2lvblZlcmlmaWVzIiwidW5pZnlTdGVwV2l0aENvbmNsdXNpb24iLCJzdGVwIiwic3RlcFN0cmluZyIsInVuaWZ5U3RlcCIsInN0ZXBVbmlmaWVzIiwic3RlcFVuaWZpZXNXaXRoQ29uY2x1c2lvbiIsInVuaWZ5U3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3RhdGVtZW50VW5pZmllc1dpdGhDb25jbHVzaW9uIiwic3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSIsInVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhQcmVtaXNlcyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFByZW1pc2VzIiwiZGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCIsImFyZURlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQiLCJ1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNXaXRoUHJlbWlzZSIsInVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoUHJlbWlzZSIsInJlc29sdmVEZXJpdmVkU3Vic3RpdHV0aW9ucyIsInVuaWZ5SW5kZXBlbmRlbnRseSIsInRvSlNPTiIsImxhYmVsc0pTT04iLCJsYWJlbHNUb0xhYmVsc0pTT04iLCJwcmVtaXNlc0pTT04iLCJwcmVtaXNlc1RvUHJlbWlzZXNKU09OIiwiY29uY2x1c2lvbkpTT04iLCJjb25jbHVzaW9uVG9Db25jbHVzaW9uSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJsYWJlbHNGcm9tSlNPTiIsInByZW1pc2VzRnJvbUpTT04iLCJjb25jbHVzaW9uRnJvbUpTT04iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWNBOzs7ZUFBQTs7OzJCQVorQjtnQ0FDcUM7OEJBRWhEOzBCQUNHO3lCQUNDO3NCQUNxSDtBQUU3SSxNQUFNLEVBQUVBLE9BQU8sRUFBRSxHQUFHQyx5QkFBYyxFQUM1QixFQUFFQyxLQUFLLEVBQUVDLE9BQU8sRUFBRUMsYUFBYSxFQUFFQyxjQUFjLEVBQUUsR0FBR0MscUNBQXFCLEVBQ3pFLEVBQUVDLFNBQVMsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUV6RixXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGFBQWFDLHVCQUFPO0lBQzlDLFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsS0FBSyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsVUFBVSxDQUFFO1FBQ2xGLEtBQUssQ0FBQ1AsU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxRQUFRLEdBQUdBO1FBQ2hCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtJQUNwQjtJQUVBQyxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUNILE1BQU07SUFDcEI7SUFFQUksY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDSCxRQUFRO0lBQ3RCO0lBRUFJLFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQ04sS0FBSztJQUNuQjtJQUVBTyxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQ0osVUFBVTtJQUN4QjtJQUVBSyxjQUFjO1FBQ1osTUFBTVYsT0FBTyxJQUFJLENBQUNXLE9BQU8sSUFDbkJDLFdBQVdaLE1BQU8sR0FBRztRQUUzQixPQUFPWTtJQUNUO0lBRUFDLHNCQUFzQkMsZ0JBQWdCLEVBQUU7UUFDdEMsTUFBTUMsMEJBQTBCLElBQUksQ0FBQ1osTUFBTSxDQUFDYSxJQUFJLENBQUMsQ0FBQ0M7WUFDaEQsTUFBTUYsMEJBQTBCRSxNQUFNSixxQkFBcUIsQ0FBQ0M7WUFFNUQsSUFBSUMseUJBQXlCO2dCQUMzQixPQUFPO1lBQ1Q7UUFDRjtRQUVBLE9BQU9BO0lBQ1Q7SUFFQUcsU0FBUzNCLFVBQVUsU0FBVU8sT0FBTyxFQUFFcUIsWUFBWTtRQUNoRCxNQUFNQyxhQUFhLElBQUksQ0FBQ0MsU0FBUyxJQUFJLEdBQUc7UUFFeEN2QixRQUFRd0IsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFRixXQUFXLFNBQVMsQ0FBQztRQUVyREcsSUFBQUEsZ0JBQU8sRUFBQyxDQUFDekI7WUFDUCxNQUFNMEIsY0FBYyxJQUFJLENBQUNBLFdBQVcsQ0FBQ0MsSUFBSSxDQUFDLElBQUksR0FDeENDLGVBQWUsSUFBSSxDQUFDQSxZQUFZLENBQUNELElBQUksQ0FBQyxJQUFJLEdBQzFDRSxpQkFBaUIsSUFBSSxDQUFDQSxjQUFjLENBQUNGLElBQUksQ0FBQyxJQUFJLEdBQzlDRyxtQkFBbUIsSUFBSSxDQUFDQSxnQkFBZ0IsQ0FBQ0gsSUFBSSxDQUFDLElBQUk7WUFFeEQsT0FBT0ksSUFBQUEsaUJBQUcsRUFBQztnQkFDVEg7Z0JBQ0FDO2dCQUNBQztnQkFDQUo7YUFDRCxFQUFFMUIsU0FBUyxDQUFDZ0M7Z0JBQ1gsSUFBSUEsVUFBVTtvQkFDWixNQUFNQyxPQUFPLElBQUksRUFBRyxHQUFHO29CQUV2QmpDLFFBQVFrQyxPQUFPLENBQUNEO29CQUVoQmpDLFFBQVFtQyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRWIsV0FBVyxPQUFPLENBQUM7Z0JBQ3ZEO2dCQUVBLE9BQU9ELGFBQWFXO1lBQ3RCO1FBQ0YsR0FBR2hDO0lBQ0wsR0FBRztJQUVINEIsYUFBYTVCLE9BQU8sRUFBRW9DLGFBQWEsRUFBRTtRQUNuQyxNQUFNZCxhQUFhLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFekN2QixRQUFRd0IsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFRixXQUFXLGtCQUFrQixDQUFDO1FBRTlELE9BQU9sQyxNQUFNLElBQUksQ0FBQ2lCLE1BQU0sRUFBRSxDQUFDYyxPQUFPRTtZQUNoQyxPQUFPLElBQUksQ0FBQ2dCLFdBQVcsQ0FBQ2xCLE9BQU9uQixTQUFTcUI7UUFDMUMsR0FBRyxDQUFDaUI7WUFDRixJQUFJQSxjQUFjO2dCQUNoQnRDLFFBQVFtQyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRWIsV0FBVyxnQkFBZ0IsQ0FBQztZQUNoRTtZQUVBLE9BQU9jLGNBQWNFO1FBQ3ZCO0lBQ0Y7SUFFQUQsWUFBWWxCLEtBQUssRUFBRW5CLE9BQU8sRUFBRXFCLFlBQVksRUFBRTtRQUN4QyxNQUFNQyxhQUFhLElBQUksQ0FBQ0MsU0FBUyxJQUMzQmdCLGNBQWNwQixNQUFNSSxTQUFTO1FBRW5DdkIsUUFBUXdCLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRUYsV0FBVyxVQUFVLEVBQUVpQixZQUFZLFVBQVUsQ0FBQztRQUU5RSxPQUFPcEIsTUFBTUMsTUFBTSxDQUFDLENBQUNvQjtZQUNuQixJQUFJQSxlQUFlO2dCQUNqQnhDLFFBQVFtQyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRWIsV0FBVyxVQUFVLEVBQUVpQixZQUFZLFFBQVEsQ0FBQztZQUNoRjtZQUVBLE9BQU9sQixhQUFhbUI7UUFDdEI7SUFDRjtJQUVBZCxZQUFZMUIsT0FBTyxFQUFFcUIsWUFBWSxFQUFFO1FBQ2pDLElBQUksSUFBSSxDQUFDakIsS0FBSyxLQUFLLE1BQU07WUFDdkIsTUFBTXFDLGdCQUFnQjtZQUV0QixPQUFPcEIsYUFBYW9CO1FBQ3RCO1FBRUEsTUFBTW5CLGFBQWEsSUFBSSxDQUFDQyxTQUFTLElBQUssR0FBRztRQUV6Q3ZCLFFBQVF3QixLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUVGLFdBQVcsaUJBQWlCLENBQUM7UUFFN0QsTUFBTW9CLFlBQVksSUFBSSxDQUFDbkMsVUFBVSxDQUFDb0MsWUFBWTtRQUU5QyxPQUFPLElBQUksQ0FBQ3ZDLEtBQUssQ0FBQ2dCLE1BQU0sQ0FBQ3NCLFdBQVcxQyxTQUFTLENBQUN5QztZQUM1QyxJQUFJQSxlQUFlO2dCQUNqQnpDLFFBQVFtQyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRWIsV0FBVyxlQUFlLENBQUM7WUFDL0Q7WUFFQSxPQUFPRCxhQUFhb0I7UUFDdEI7SUFDRjtJQUVBRyxjQUFjQyxPQUFPLEVBQUU3QyxPQUFPLEVBQUVxQixZQUFZLEVBQUU7UUFDNUMsTUFBTUMsYUFBYSxJQUFJLENBQUNDLFNBQVMsSUFDM0J1QixnQkFBZ0JELFFBQVF0QixTQUFTO1FBRXZDdkIsUUFBUXdCLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRUYsV0FBVyxVQUFVLEVBQUV3QixjQUFjLFlBQVksQ0FBQztRQUVsRixPQUFPRCxRQUFRekIsTUFBTSxDQUFDcEIsU0FBUyxDQUFDK0M7WUFDOUIsSUFBSUEsaUJBQWlCO2dCQUNuQixNQUFNQywyQkFBMkJILFNBQVUsSUFBSTtnQkFFL0M3QyxRQUFRaUQsaUJBQWlCO2dCQUV6QmpELFFBQVFrRCwyQkFBMkIsQ0FBQ0Y7WUFDdEM7WUFFQSxJQUFJRCxpQkFBaUI7Z0JBQ25CL0MsUUFBUW1DLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFYixXQUFXLFVBQVUsRUFBRXdCLGNBQWMsVUFBVSxDQUFDO1lBQ3BGO1lBRUEsT0FBT3pCLGFBQWEwQjtRQUN0QjtJQUNGO0lBRUFsQixlQUFlN0IsT0FBTyxFQUFFcUIsWUFBWSxFQUFFO1FBQ3BDLE1BQU1DLGFBQWEsSUFBSSxDQUFDQyxTQUFTLElBQUssR0FBRztRQUV6Q3ZCLFFBQVF3QixLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUVGLFdBQVcsb0JBQW9CLENBQUM7UUFFaEUsT0FBT2hDLGNBQWMsSUFBSSxDQUFDZ0IsUUFBUSxFQUFFLENBQUN1QyxTQUFTeEI7WUFDNUMsT0FBTyxJQUFJLENBQUN1QixhQUFhLENBQUNDLFNBQVM3QyxTQUFTcUI7UUFDOUMsR0FBRyxDQUFDOEI7WUFDRixJQUFJQSxnQkFBZ0I7Z0JBQ2xCbkQsUUFBUW1DLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFYixXQUFXLGtCQUFrQixDQUFDO1lBQ2xFO1lBRUEsT0FBT0QsYUFBYThCO1FBQ3RCO0lBQ0Y7SUFFQXJCLGlCQUFpQjlCLE9BQU8sRUFBRXFCLFlBQVksRUFBRTtRQUN0QyxNQUFNQyxhQUFhLElBQUksQ0FBQ0MsU0FBUyxJQUMzQjZCLG1CQUFtQixJQUFJLENBQUM3QyxVQUFVLENBQUNnQixTQUFTO1FBRWxEdkIsUUFBUXdCLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRUYsV0FBVyxVQUFVLEVBQUU4QixpQkFBaUIsZUFBZSxDQUFDO1FBRXhGLE9BQU8sSUFBSSxDQUFDN0MsVUFBVSxDQUFDYSxNQUFNLENBQUNwQixTQUFTLENBQUNxRDtZQUN0QyxJQUFJQSxvQkFBb0I7Z0JBQ3RCckQsUUFBUW1DLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFYixXQUFXLFVBQVUsRUFBRThCLGlCQUFpQixhQUFhLENBQUM7WUFDMUY7WUFFQSxPQUFPL0IsYUFBYWdDO1FBQ3RCO0lBQ0Y7SUFFQUMsd0JBQXdCQyxJQUFJLEVBQUV2RCxPQUFPLEVBQUVxQixZQUFZLEVBQUU7UUFDbkQsTUFBTUMsYUFBYSxJQUFJLENBQUNDLFNBQVMsSUFDM0JpQyxhQUFhRCxLQUFLaEMsU0FBUyxJQUMzQjZCLG1CQUFtQixJQUFJLENBQUM3QyxVQUFVLENBQUNnQixTQUFTO1FBRWxEdkIsUUFBUXdCLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRWdDLFdBQVcsaUJBQWlCLEVBQUVsQyxXQUFXLFVBQVUsRUFBRThCLGlCQUFpQixlQUFlLENBQUM7UUFFckgsT0FBTyxJQUFJLENBQUM3QyxVQUFVLENBQUNrRCxTQUFTLENBQUNGLE1BQU12RCxTQUFTLENBQUMwRDtZQUMvQyxJQUFJQyw0QkFBNEI7WUFFaEMsSUFBSUQsYUFBYTtnQkFDZkMsNEJBQTRCO1lBQzlCO1lBRUEsSUFBSUEsMkJBQTJCO2dCQUM3QjNELFFBQVFtQyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRXFCLFdBQVcsaUJBQWlCLEVBQUVsQyxXQUFXLFVBQVUsRUFBRThCLGlCQUFpQixhQUFhLENBQUM7WUFDdkg7WUFFQSxPQUFPL0IsYUFBYXNDO1FBQ3RCO0lBQ0Y7SUFFQUMsc0NBQXNDTCxJQUFJLEVBQUVNLHlCQUF5QixFQUFFN0QsT0FBTyxFQUFFcUIsWUFBWSxFQUFFO1FBQzVGLE9BQU8sSUFBSSxDQUFDaUMsdUJBQXVCLENBQUNDLE1BQU12RCxTQUFTLENBQUM4RDtZQUNsRCxJQUFJLENBQUNBLGdDQUFnQztnQkFDbkMsTUFBTUMsd0NBQXdDO2dCQUU5QyxPQUFPMUMsYUFBYTBDO1lBQ3RCO1lBRUEsSUFBSSxDQUFDQywwQ0FBMEMsQ0FBQ0gsMkJBQTJCN0QsU0FBUyxDQUFDaUU7Z0JBQ25GLElBQUlGLHdDQUF3QztnQkFFNUMsSUFBSUUsOENBQThDO29CQUNoRCxNQUFNQywrQkFBK0JsRSxRQUFRbUUsK0JBQStCO29CQUU1RSxJQUFJRCw4QkFBOEI7d0JBQ2hDSCx3Q0FBd0M7b0JBQzFDO2dCQUNGO2dCQUVBLE9BQU8xQyxhQUFhMEM7WUFDdEI7UUFDRjtJQUNGO0lBRUFLLDBDQUEwQ1AseUJBQXlCLEVBQUVoQixPQUFPLEVBQUU3QyxPQUFPLEVBQUVxQixZQUFZLEVBQUU7UUFDbkcsT0FBT2hDLFFBQVF3RSwyQkFBMkIsQ0FBQ2IsMEJBQTBCM0I7WUFDbkUsT0FBT3dCLFFBQVF3Qiw2QkFBNkIsQ0FBQ3JCLDBCQUEwQmhELFNBQVNxQjtRQUNsRixHQUFHLENBQUMyQiwyQkFBMkIsSUFBSTtZQUNqQyxJQUFJQSw2QkFBNkIsTUFBTTtnQkFDckMsTUFBTXNCLDhDQUE4QztnQkFFcEQsT0FBT3RFLFFBQVF1RSwyQkFBMkIsQ0FBQztvQkFDekMsT0FBT2xELGFBQWFpRDtnQkFDdEI7WUFDRjtZQUVBLE9BQU96QixRQUFRMkIsa0JBQWtCLENBQUN4RSxTQUFTcUI7UUFDN0M7SUFDRjtJQUVBMkMsMkNBQTJDSCx5QkFBeUIsRUFBRTdELE9BQU8sRUFBRXFCLFlBQVksRUFBRTtRQUMzRndDLDRCQUE0QjNFLFFBQVEyRSw0QkFBNEIsR0FBRztRQUVuRSxPQUFPdEUsZUFBZSxJQUFJLENBQUNlLFFBQVEsRUFBRSxDQUFDdUMsU0FBU3hCO1lBQzdDLE9BQU8sSUFBSSxDQUFDK0MseUNBQXlDLENBQUNQLDJCQUEyQmhCLFNBQVM3QyxTQUFTcUI7UUFDckcsR0FBR0E7SUFDTDtJQUVBb0QsU0FBUztRQUNQLE1BQU1DLGFBQWFDLElBQUFBLHdCQUFrQixFQUFDLElBQUksQ0FBQ3RFLE1BQU0sR0FDM0N1RSxlQUFlQyxJQUFBQSw0QkFBc0IsRUFBQyxJQUFJLENBQUN2RSxRQUFRLEdBQ25Ed0UsaUJBQWlCQyxJQUFBQSxnQ0FBMEIsRUFBQyxJQUFJLENBQUN4RSxVQUFVLEdBQzNETixTQUFTLElBQUksQ0FBQ3NCLFNBQVM7UUFFN0IsSUFBSXBCO1FBRUpBLGFBQWEsSUFBSSxDQUFDNkUsYUFBYTtRQUUvQixNQUFNQyxpQkFBaUJ0RiwyQkFBMkJRO1FBRWxEQSxhQUFhOEUsZ0JBQWlCLEdBQUc7UUFFakMsTUFBTTVFLFNBQVNxRSxZQUNUcEUsV0FBV3NFLGNBQ1hyRSxhQUFhdUUsZ0JBQ2JJLE9BQU87WUFDTGpGO1lBQ0FFO1lBQ0FFO1lBQ0FDO1lBQ0FDO1FBQ0Y7UUFFTixPQUFPMkU7SUFDVDtJQUVBLE9BQU9DLE9BQU8sT0FBTztJQUVyQixPQUFPQyxTQUFTRixJQUFJLEVBQUVsRixPQUFPLEVBQUU7UUFDN0IsTUFBTSxFQUFFQyxNQUFNLEVBQUUsR0FBR2lGLE1BQ2JoRixPQUFPLE1BQ1BDLGFBQWFULG1CQUFtQndGLE9BQ2hDN0UsU0FBU2dGLElBQUFBLG9CQUFjLEVBQUNILE1BQU1sRixVQUM5Qk0sV0FBV2dGLElBQUFBLHNCQUFnQixFQUFDSixNQUFNbEYsVUFDbENPLGFBQWFnRixJQUFBQSx3QkFBa0IsRUFBQ0wsTUFBTWxGLFVBQ3RDSSxRQUFRLE1BQ1I2QixPQUFPLElBQUluQyxLQUFLRSxTQUFTQyxRQUFRQyxNQUFNQyxZQUFZQyxPQUFPQyxRQUFRQyxVQUFVQztRQUVsRixPQUFPMEI7SUFDVDtBQUNGIn0=
|
|
218
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3J1bGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcywgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBhbGwgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBlbmNsb3NlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBsYWJlbHNGcm9tSlNPTiwgcHJlbWlzZXNGcm9tSlNPTiwgY29uY2x1c2lvbkZyb21KU09OLCBsYWJlbHNUb0xhYmVsc0pTT04sIHByZW1pc2VzVG9QcmVtaXNlc0pTT04sIGNvbmNsdXNpb25Ub0NvbmNsdXNpb25KU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgcmV2ZXJzZSB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGV2ZXJ5LCBleHRyYWN0LCBmb3J3YXJkc0V2ZXJ5LCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha2FibGUsIGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBSdWxlIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcHJvb2YsIGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5wcm9vZiA9IHByb29mO1xuICAgIHRoaXMubGFiZWxzID0gbGFiZWxzO1xuICAgIHRoaXMucHJlbWlzZXMgPSBwcmVtaXNlcztcbiAgICB0aGlzLmNvbmNsdXNpb24gPSBjb25jbHVzaW9uO1xuICB9XG5cbiAgZ2V0TGFiZWxzKCkge1xuICAgIHJldHVybiB0aGlzLmxhYmVscztcbiAgfVxuXG4gIGdldFByZW1pc2VzKCkge1xuICAgIHJldHVybiB0aGlzLnByZW1pc2VzO1xuICB9XG5cbiAgZ2V0UHJvb2YoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvb2Y7XG4gIH1cblxuICBnZXRDb25jbHVzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmNsdXNpb247XG4gIH1cblxuICBnZXRSdWxlTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgcnVsZU5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gcnVsZU5vZGU7XG4gIH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gdGhpcy5sYWJlbHMuc29tZSgobGFiZWwpID0+IHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gbGFiZWwubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXM7XG4gIH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHJ1bGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUuLi5gKTtcblxuICAgIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHZlcmlmeVByb29mID0gdGhpcy52ZXJpZnlQcm9vZi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmVyaWZ5TGFiZWxzID0gdGhpcy52ZXJpZnlMYWJlbHMuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZlcmlmeVByZW1pc2VzID0gdGhpcy52ZXJpZnlQcmVtaXNlcy5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmVyaWZ5Q29uY2x1c2lvbiA9IHRoaXMudmVyaWZ5Q29uY2x1c2lvbi5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gYWxsKFtcbiAgICAgICAgdmVyaWZ5TGFiZWxzLFxuICAgICAgICB2ZXJpZnlQcmVtaXNlcyxcbiAgICAgICAgdmVyaWZ5Q29uY2x1c2lvbixcbiAgICAgICAgdmVyaWZ5UHJvb2ZcbiAgICAgIF0sIGNvbnRleHQsICh2ZXJpZmllcykgPT4ge1xuICAgICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgICBjb25zdCBydWxlID0gdGhpczsgIC8vL1xuXG4gICAgICAgICAgY29udGV4dC5hZGRSdWxlKHJ1bGUpO1xuXG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2ZXJpZmllcyk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfSk7XG5cbiAgdmVyaWZ5TGFiZWxzKGNvbnRleHQsIGNvbm50aW51YXRpb24pIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzIGxhYmVscy4uLmApO1xuXG4gICAgcmV0dXJuIGV2ZXJ5KHRoaXMubGFiZWxzLCAobGFiZWwsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudmVyaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgKGxhYmVsc1ZlcmlmeSkgPT4ge1xuICAgICAgaWYgKGxhYmVsc1ZlcmlmeSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyBsYWJlbHMuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb25udGludWF0aW9uKGxhYmVsc1ZlcmlmeSk7XG4gICAgfSk7XG4gIH1cblxuICB2ZXJpZnlMYWJlbChsYWJlbCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgcnVsZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke2xhYmVsU3RyaW5nfScgbGFiZWwuLi5gKTtcblxuICAgIHJldHVybiBsYWJlbC52ZXJpZnkoKGxhYmVsVmVyaWZpZXMpID0+IHtcbiAgICAgIGlmIChsYWJlbFZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke2xhYmVsU3RyaW5nfScgbGFiZWwuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24obGFiZWxWZXJpZmllcyk7XG4gICAgfSk7XG4gIH1cblxuICB2ZXJpZnlQcm9vZihjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBpZiAodGhpcy5wcm9vZiA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgcHJvb2ZWZXJpZmllcyA9IHRydWU7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24ocHJvb2ZWZXJpZmllcyk7XG4gICAgfVxuXG4gICAgY29uc3QgcnVsZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyBwcm9vZi4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5jb25jbHVzaW9uLmdldFN0YXRlbWVudCgpO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvb2YudmVyaWZ5KHN0YXRlbWVudCwgY29udGV4dCwgKHByb29mVmVyaWZpZXMpID0+IHtcbiAgICAgIGlmIChwcm9vZlZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzIHByb29mLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHByb29mVmVyaWZpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5UHJlbWlzZShwcmVtaXNlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIHByZW1pc2VTdHJpbmcgPSBwcmVtaXNlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLi4uYCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZS52ZXJpZnkoY29udGV4dCwgKHByZW1pc2VWZXJpZmllcykgPT4ge1xuICAgICAgaWYgKHByZW1pc2VWZXJpZmllcykge1xuICAgICAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24gPSBwcmVtaXNlOyAgLy8vL1xuXG4gICAgICAgIGNvbnRleHQuYXNzaWduQXNzaWdubWVudHMoKTtcblxuICAgICAgICBjb250ZXh0LmFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJlbWlzZVZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHByZW1pc2VWZXJpZmllcyk7XG4gICAgfSk7XG4gIH1cblxuICB2ZXJpZnlQcmVtaXNlcyhjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzIHByZW1pc2VzLi4uYCk7XG5cbiAgICByZXR1cm4gZm9yd2FyZHNFdmVyeSh0aGlzLnByZW1pc2VzLCAocHJlbWlzZSwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJpZnlQcmVtaXNlKHByZW1pc2UsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgKHByZW1pc2VzVmVyaWZ5KSA9PiB7XG4gICAgICBpZiAocHJlbWlzZXNWZXJpZnkpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgcHJlbWlzZXMuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24ocHJlbWlzZXNWZXJpZnkpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5Q29uY2x1c2lvbihjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIGNvbmNsdXNpb25TdHJpbmcgPSB0aGlzLmNvbmNsdXNpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgJyR7Y29uY2x1c2lvblN0cmluZ30nIGNvbmNsdXNpb24uLi5gKTtcblxuICAgIHJldHVybiB0aGlzLmNvbmNsdXNpb24udmVyaWZ5KGNvbnRleHQsIChjb25jbHVzaW9uVmVyaWZpZXMpID0+IHtcbiAgICAgIGlmIChjb25jbHVzaW9uVmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgJyR7Y29uY2x1c2lvblN0cmluZ30nIGNvbmNsdXNpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oY29uY2x1c2lvblZlcmlmaWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5U3RlcFdpdGhDb25jbHVzaW9uKHN0ZXAsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHJ1bGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLFxuICAgICAgICAgIHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpLFxuICAgICAgICAgIGNvbmNsdXNpb25TdHJpbmcgPSB0aGlzLmNvbmNsdXNpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyAnJHtjb25jbHVzaW9uU3RyaW5nfScgY29uY2x1c2lvbi4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuY29uY2x1c2lvbi51bmlmeVN0ZXAoc3RlcCwgY29udGV4dCwgKHN0ZXBVbmlmaWVzKSA9PiB7XG4gICAgICBsZXQgc3RlcFVuaWZpZXNXaXRoQ29uY2x1c2lvbiA9IGZhbHNlO1xuXG4gICAgICBpZiAoc3RlcFVuaWZpZXMpIHtcbiAgICAgICAgc3RlcFVuaWZpZXNXaXRoQ29uY2x1c2lvbiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc1dpdGhDb25jbHVzaW9uKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgJyR7Y29uY2x1c2lvblN0cmluZ30nIGNvbmNsdXNpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNXaXRoQ29uY2x1c2lvbik7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeVN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN0ZXAsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIHJldHVybiB0aGlzLnVuaWZ5U3RlcFdpdGhDb25jbHVzaW9uKHN0ZXAsIGNvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbmNsdXNpb24pID0+IHtcbiAgICAgIGlmICghc3RhdGVtZW50VW5pZmllc1dpdGhDb25jbHVzaW9uKSB7XG4gICAgICAgIGNvbnN0IHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy51bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNXaXRoUHJlbWlzZXMoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgY29udGV4dCwgKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFByZW1pc2VzKSA9PiB7XG4gICAgICAgIGxldCBzdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFByZW1pc2VzKSB7XG4gICAgICAgICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCA9IGNvbnRleHQuYXJlRGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCgpO1xuXG4gICAgICAgICAgaWYgKGRlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQpIHtcbiAgICAgICAgICAgIHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhQcmVtaXNlKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIHByZW1pc2UsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIHJldHVybiBleHRyYWN0KHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24sIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHByZW1pc2UudW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24oc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0sIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24gPSBudWxsKSA9PiB7XG4gICAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFByZW1pc2UgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBjb250ZXh0LnJlc29sdmVEZXJpdmVkU3Vic3RpdHV0aW9ucygoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhQcmVtaXNlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmVtaXNlLnVuaWZ5SW5kZXBlbmRlbnRseShjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFByZW1pc2VzKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSByZXZlcnNlKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMpOyAvLy9cblxuICAgIHJldHVybiBiYWNrd2FyZHNFdmVyeSh0aGlzLnByZW1pc2VzLCAocHJlbWlzZSwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy51bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNXaXRoUHJlbWlzZShzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBwcmVtaXNlLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0sIGNvbnRpbnVhdGlvbik7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgbGFiZWxzSlNPTiA9IGxhYmVsc1RvTGFiZWxzSlNPTih0aGlzLmxhYmVscyksXG4gICAgICAgICAgcHJlbWlzZXNKU09OID0gcHJlbWlzZXNUb1ByZW1pc2VzSlNPTih0aGlzLnByZW1pc2VzKSxcbiAgICAgICAgICBjb25jbHVzaW9uSlNPTiA9IGNvbmNsdXNpb25Ub0NvbmNsdXNpb25KU09OKHRoaXMuY29uY2x1c2lvbiksXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QgbGFiZWxzID0gbGFiZWxzSlNPTiwgIC8vL1xuICAgICAgICAgIHByZW1pc2VzID0gcHJlbWlzZXNKU09OLCAgLy8vXG4gICAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25KU09OLCAgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIGJyZWFrUG9pbnQsXG4gICAgICAgICAgICBsYWJlbHMsXG4gICAgICAgICAgICBwcmVtaXNlcyxcbiAgICAgICAgICAgIGNvbmNsdXNpb25cbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiUnVsZVwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgbm9kZSA9IG51bGwsXG4gICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBwcm9vZiA9IG51bGwsXG4gICAgICAgICAgcnVsZSA9IG5ldyBSdWxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcHJvb2YsIGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbInJldmVyc2UiLCJhcnJheVV0aWxpdGllcyIsImV2ZXJ5IiwiZXh0cmFjdCIsImZvcndhcmRzRXZlcnkiLCJiYWNrd2FyZHNFdmVyeSIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsImJyZWFrYWJsZSIsImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIlJ1bGUiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwicHJvb2YiLCJsYWJlbHMiLCJwcmVtaXNlcyIsImNvbmNsdXNpb24iLCJnZXRMYWJlbHMiLCJnZXRQcmVtaXNlcyIsImdldFByb29mIiwiZ2V0Q29uY2x1c2lvbiIsImdldFJ1bGVOb2RlIiwiZ2V0Tm9kZSIsInJ1bGVOb2RlIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwic29tZSIsImxhYmVsIiwidmVyaWZ5IiwiY29udGludWF0aW9uIiwicnVsZVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZW5jbG9zZSIsInZlcmlmeVByb29mIiwiYmluZCIsInZlcmlmeUxhYmVscyIsInZlcmlmeVByZW1pc2VzIiwidmVyaWZ5Q29uY2x1c2lvbiIsImFsbCIsInZlcmlmaWVzIiwicnVsZSIsImFkZFJ1bGUiLCJkZWJ1ZyIsImNvbm50aW51YXRpb24iLCJ2ZXJpZnlMYWJlbCIsImxhYmVsc1ZlcmlmeSIsImxhYmVsU3RyaW5nIiwibGFiZWxWZXJpZmllcyIsInByb29mVmVyaWZpZXMiLCJzdGF0ZW1lbnQiLCJnZXRTdGF0ZW1lbnQiLCJ2ZXJpZnlQcmVtaXNlIiwicHJlbWlzZSIsInByZW1pc2VTdHJpbmciLCJwcmVtaXNlVmVyaWZpZXMiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24iLCJhc3NpZ25Bc3NpZ25tZW50cyIsImFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInByZW1pc2VzVmVyaWZ5IiwiY29uY2x1c2lvblN0cmluZyIsImNvbmNsdXNpb25WZXJpZmllcyIsInVuaWZ5U3RlcFdpdGhDb25jbHVzaW9uIiwic3RlcCIsInN0ZXBTdHJpbmciLCJ1bmlmeVN0ZXAiLCJzdGVwVW5pZmllcyIsInN0ZXBVbmlmaWVzV2l0aENvbmNsdXNpb24iLCJ1bmlmeVN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsInN0YXRlbWVudFVuaWZpZXNXaXRoQ29uY2x1c2lvbiIsInN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkiLCJ1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNXaXRoUHJlbWlzZXMiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhQcmVtaXNlcyIsImRlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQiLCJhcmVEZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkIiwidW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFByZW1pc2UiLCJ1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFByZW1pc2UiLCJyZXNvbHZlRGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJ1bmlmeUluZGVwZW5kZW50bHkiLCJ0b0pTT04iLCJsYWJlbHNKU09OIiwibGFiZWxzVG9MYWJlbHNKU09OIiwicHJlbWlzZXNKU09OIiwicHJlbWlzZXNUb1ByZW1pc2VzSlNPTiIsImNvbmNsdXNpb25KU09OIiwiY29uY2x1c2lvblRvQ29uY2x1c2lvbkpTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwibGFiZWxzRnJvbUpTT04iLCJwcmVtaXNlc0Zyb21KU09OIiwiY29uY2x1c2lvbkZyb21KU09OIl0sIm1hcHBpbmdzIjoi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
|
|
@@ -159,36 +159,32 @@ class TopLevelAssertion extends _occamlanguages.Element {
|
|
|
159
159
|
return continuation(suppositionsVerify);
|
|
160
160
|
});
|
|
161
161
|
}
|
|
162
|
-
dischargeHypothesis(hypothesis, context) {
|
|
163
|
-
let hypothesisDischarges;
|
|
164
|
-
this.break(context);
|
|
162
|
+
dischargeHypothesis(hypothesis, context, continuation) {
|
|
165
163
|
const hypothesisString = hypothesis.getString(), topLevelAssertionString = this.getString(); ///
|
|
166
164
|
context.trace(`Discharding the '${topLevelAssertionString}' top level assertion's '${hypothesisString}' hypothesis...`);
|
|
167
|
-
|
|
168
|
-
if (hypothesisDischarges) {
|
|
169
|
-
context.trace(`...discharges the '${topLevelAssertionString}' top level assertion's '${hypothesisString}' hypothesis.`);
|
|
170
|
-
}
|
|
171
|
-
return hypothesisDischarges;
|
|
172
|
-
}
|
|
173
|
-
dischargeHypotheses(context) {
|
|
174
|
-
const hypotheses = this.getHypotheses(), hypothesesDischarge = every(hypotheses, (hypothesis)=>{
|
|
175
|
-
const hypothesisDischarges = this.dischargeHypothesis(hypothesis, context);
|
|
165
|
+
hypothesis.discharge(context, (hypothesisDischarges)=>{
|
|
176
166
|
if (hypothesisDischarges) {
|
|
177
|
-
|
|
167
|
+
context.trace(`...discharges the '${topLevelAssertionString}' top level assertion's '${hypothesisString}' hypothesis.`);
|
|
178
168
|
}
|
|
169
|
+
return continuation(hypothesisDischarges);
|
|
179
170
|
});
|
|
180
|
-
|
|
171
|
+
}
|
|
172
|
+
dischargeHypotheses(context, continuation) {
|
|
173
|
+
const hypotheses = this.getHypotheses();
|
|
174
|
+
every(hypotheses, (hypothesis, continuation)=>{
|
|
175
|
+
this.dischargeHypothesis(hypothesis, context, continuation);
|
|
176
|
+
}, continuation);
|
|
181
177
|
}
|
|
182
178
|
unifyStepWithDeduction(step, context, continuation) {
|
|
183
|
-
const ruleString = this.getString(), stepString = step.getString(),
|
|
184
|
-
context.trace(`Unifying the '${stepString}' step with the '${ruleString}' rule's '${
|
|
185
|
-
return this.
|
|
179
|
+
const ruleString = this.getString(), stepString = step.getString(), deductionString = this.deduction.getString();
|
|
180
|
+
context.trace(`Unifying the '${stepString}' step with the '${ruleString}' rule's '${deductionString}' deduction...`);
|
|
181
|
+
return this.deduction.unifyStep(step, context, (stepUnifies)=>{
|
|
186
182
|
let stepUnifiesWithDeduction = false;
|
|
187
183
|
if (stepUnifies) {
|
|
188
184
|
stepUnifiesWithDeduction = true;
|
|
189
185
|
}
|
|
190
186
|
if (stepUnifiesWithDeduction) {
|
|
191
|
-
context.debug(`...unified the '${stepString}' step with the '${ruleString}' rule's '${
|
|
187
|
+
context.debug(`...unified the '${stepString}' step with the '${ruleString}' rule's '${deductionString}' deduction.`);
|
|
192
188
|
}
|
|
193
189
|
return continuation(stepUnifiesWithDeduction);
|
|
194
190
|
});
|
|
@@ -199,20 +195,21 @@ class TopLevelAssertion extends _occamlanguages.Element {
|
|
|
199
195
|
const stepAndSubproofOrProofAssertionsUnify = false;
|
|
200
196
|
return continuation(stepAndSubproofOrProofAssertionsUnify);
|
|
201
197
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
}
|
|
207
|
-
this.unifySubproofOrProofAssertionsWithSuppositions(subproofOrProofAssertions, context, (subproofOrProofAssertionsUnifiesWithSuppositions)=>{
|
|
208
|
-
let stepAndSubproofOrProofAssertionsUnify = false;
|
|
209
|
-
if (subproofOrProofAssertionsUnifiesWithSuppositions) {
|
|
210
|
-
const derivedSubstitutionsResolved = context.areDerivedSubstitutionsResolved();
|
|
211
|
-
if (derivedSubstitutionsResolved) {
|
|
212
|
-
stepAndSubproofOrProofAssertionsUnify = true;
|
|
213
|
-
}
|
|
198
|
+
return this.dischargeHypotheses(context, (hypothesesDischarge)=>{
|
|
199
|
+
if (!hypothesesDischarge) {
|
|
200
|
+
const stepAndSubproofOrProofAssertionsUnify = false;
|
|
201
|
+
return continuation(stepAndSubproofOrProofAssertionsUnify);
|
|
214
202
|
}
|
|
215
|
-
return
|
|
203
|
+
return this.unifySubproofOrProofAssertionsWithSuppositions(subproofOrProofAssertions, context, (subproofOrProofAssertionsUnifiesWithSuppositions)=>{
|
|
204
|
+
let stepAndSubproofOrProofAssertionsUnify = false;
|
|
205
|
+
if (subproofOrProofAssertionsUnifiesWithSuppositions) {
|
|
206
|
+
const derivedSubstitutionsResolved = context.areDerivedSubstitutionsResolved();
|
|
207
|
+
if (derivedSubstitutionsResolved) {
|
|
208
|
+
stepAndSubproofOrProofAssertionsUnify = true;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return continuation(stepAndSubproofOrProofAssertionsUnify);
|
|
212
|
+
});
|
|
216
213
|
});
|
|
217
214
|
});
|
|
218
215
|
}
|
|
@@ -258,4 +255,4 @@ class TopLevelAssertion extends _occamlanguages.Element {
|
|
|
258
255
|
}
|
|
259
256
|
}
|
|
260
257
|
|
|
261
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3RvcExldmVsQXNzZXJ0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgYWxsIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IGVuY2xvc2UgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBsYWJlbHNGcm9tSlNPTixcbiAgICAgICAgIGRlZHVjdGlvbkZyb21KU09OLFxuICAgICAgICAgc2lnbmF0dXJlRnJvbUpTT04sXG4gICAgICAgICBsYWJlbHNUb0xhYmVsc0pTT04sXG4gICAgICAgICBoeXBvdGhlc2VzRnJvbUpTT04sXG4gICAgICAgICBzdXBwb3NpdGlvbnNGcm9tSlNPTixcbiAgICAgICAgIGRlZHVjdGlvblRvRGVkdWN0aW9uSlNPTixcbiAgICAgICAgIHNpZ25hdHVyZVRvU2lnbmF0dXJlSlNPTixcbiAgICAgICAgIGh5cG90aGVzZXNUb0h5cG90aGVzZXNKU09OLFxuICAgICAgICAgc3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgcmV2ZXJzZSB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGV2ZXJ5LCBleHRyYWN0LCBmb3J3YXJkc0V2ZXJ5LCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb3BMZXZlbEFzc2VydGlvbiBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5sYWJlbHMgPSBsYWJlbHM7XG4gICAgdGhpcy5zdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnM7XG4gICAgdGhpcy5kZWR1Y3Rpb24gPSBkZWR1Y3Rpb247XG4gICAgdGhpcy5wcm9vZiA9IHByb29mO1xuICAgIHRoaXMuc2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuICAgIHRoaXMuaHlwb3RoZXNlcyA9IGh5cG90aGVzZXM7XG4gIH1cblxuICBnZXRMYWJlbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWxzO1xuICB9XG5cbiAgZ2V0U3VwcG9zaXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnN1cHBvc2l0aW9ucztcbiAgfVxuXG4gIGdldERlZHVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kZWR1Y3Rpb247XG4gIH1cblxuICBnZXRQcm9vZigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9vZjtcbiAgfVxuXG4gIGdldFNpZ25hdHVyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zaWduYXR1cmU7XG4gIH1cblxuICBnZXRIeXBvdGhlc2VzKCkge1xuICAgIHJldHVybiB0aGlzLmh5cG90aGVzZXM7XG4gIH1cblxuICBzZXRIeXBvdGhlc2VzKGh5cG90aGVzZXMpIHtcbiAgICB0aGlzLmh5cG90aGVzZXMgPSBoeXBvdGhlc2VzO1xuICB9XG5cbiAgZ2V0U3VwcG9zaXRpb24oaW5kZXgpIHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbiA9IHRoaXMuc3VwcG9zaXRpb25zW2luZGV4XSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uO1xuICB9XG5cbiAgaXNTYXRpc2ZpYWJsZSgpIHtcbiAgICBjb25zdCBzYXRpc2ZpYWJsZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHNhdGlzZmlhYmxlO1xuICB9XG5cbiAgaXNIeXBvdGhldGljYWwoKSB7XG4gICAgY29uc3QgaHlwb3RoZXNlc0xlbmd0aCA9IHRoaXMuaHlwb3RoZXNlcy5sZW5ndGgsXG4gICAgICAgICAgaHlwb3RoZXRpY2FsID0gKGh5cG90aGVzZXNMZW5ndGggPiAwKTtcblxuICAgIHJldHVybiBoeXBvdGhldGljYWw7XG4gIH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gdGhpcy5sYWJlbHMuc29tZSgobGFiZWwpID0+IHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gbGFiZWwubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXM7XG4gIH1cblxuICB2ZXJpZnlFeChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHZlcmlmeVByb29mID0gdGhpcy52ZXJpZnlQcm9vZi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmVyaWZ5TGFiZWxzID0gdGhpcy52ZXJpZnlMYWJlbHMuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZlcmlmeURlZHVjdGlvbiA9IHRoaXMudmVyaWZ5RGVkdWN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMgPSB0aGlzLnZlcmlmeVN1cHBvc2l0aW9ucy5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gYWxsKFtcbiAgICAgICAgdmVyaWZ5TGFiZWxzLFxuICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMsXG4gICAgICAgIHZlcmlmeURlZHVjdGlvbixcbiAgICAgICAgdmVyaWZ5UHJvb2ZcbiAgICAgIF0sIGNvbnRleHQsICh2ZXJpZmllcykgPT4ge1xuICAgICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2ZXJpZmllcyk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHZlcmlmeUxhYmVscyhjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uJ3MgbGFiZWxzLi4uYCk7XG5cbiAgICByZXR1cm4gZXZlcnkodGhpcy5sYWJlbHMsIChsYWJlbCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJpZnlMYWJlbChsYWJlbCwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9LCAobGFiZWxzVmVyaWZ5KSA9PiB7XG4gICAgICBpZiAobGFiZWxzVmVyaWZ5KSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyBsYWJlbHMuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24obGFiZWxzVmVyaWZ5KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbidzICcke2xhYmVsU3RyaW5nfScgbGFiZWwuLi5gKTtcblxuICAgIHJldHVybiBsYWJlbC52ZXJpZnkoKGxhYmVsVmVyaWZpZXMpID0+IHtcbiAgICAgIGlmIChsYWJlbFZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyAnJHtsYWJlbFN0cmluZ30nIGxhYmVsLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGxhYmVsVmVyaWZpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5UHJvb2YoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgaWYgKHRoaXMucHJvb2YgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHByb29mVmVyaWZpZXMgPSB0cnVlOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihwcm9vZlZlcmlmaWVzKTtcbiAgICB9XG5cbiAgICBjb25zdCB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uJ3MgcHJvb2YuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuZGVkdWN0aW9uLmdldFN0YXRlbWVudCgpO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvb2YudmVyaWZ5KHN0YXRlbWVudCwgY29udGV4dCwgKHByb29mVmVyaWZpZXMpID0+IHtcbiAgICAgIGlmIChwcm9vZlZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyBwcm9vZi5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihwcm9vZlZlcmlmaWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeURlZHVjdGlvbihjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBkZWR1Y3Rpb25TdHJpbmcgPSB0aGlzLmRlZHVjdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24uLi5gKTtcblxuICAgIHJldHVybiB0aGlzLmRlZHVjdGlvbi52ZXJpZnkoY29udGV4dCwgKGRlZHVjdGlvblZlcmlmaWVzKSA9PiB7XG4gICAgICBpZiAoZGVkdWN0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbidzICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihkZWR1Y3Rpb25WZXJpZmllcyk7XG4gICAgfSk7XG4gIH1cblxuICB2ZXJpZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uJ3MgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uLnZlcmlmeShjb250ZXh0LCAoc3VwcG9zaXRpb25WZXJpZmllcykgPT4ge1xuICAgICAgaWYgKHN1cHBvc2l0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uID0gc3VwcG9zaXRpb247ICAvLy8vXG5cbiAgICAgICAgY29udGV4dC5hc3NpZ25Bc3NpZ25tZW50cygpO1xuXG4gICAgICAgIGNvbnRleHQuYWRkU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdXBwb3NpdGlvblZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cHBvc2l0aW9uVmVyaWZpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5U3VwcG9zaXRpb25zKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyBzdXBwb3NpdGlvbnMuLi5gKTtcblxuICAgIHJldHVybiBmb3J3YXJkc0V2ZXJ5KHRoaXMuc3VwcG9zaXRpb25zLCAoc3VwcG9zaXRpb24sIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudmVyaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgKHN1cHBvc2l0aW9uc1ZlcmlmeSkgPT4ge1xuICAgICAgaWYgKHN1cHBvc2l0aW9uc1ZlcmlmeSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uJ3Mgc3VwcG9zaXRpb25zLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cHBvc2l0aW9uc1ZlcmlmeSk7XG4gICAgfSk7XG4gIH1cblxuICBkaXNjaGFyZ2VIeXBvdGhlc2lzKGh5cG90aGVzaXMsIGNvbnRleHQpIHtcbiAgICBsZXQgaHlwb3RoZXNpc0Rpc2NoYXJnZXM7XG5cbiAgICB0aGlzLmJyZWFrKGNvbnRleHQpO1xuXG4gICAgY29uc3QgaHlwb3RoZXNpc1N0cmluZyA9IGh5cG90aGVzaXMuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYERpc2NoYXJkaW5nIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcy4uLmApO1xuXG4gICAgaHlwb3RoZXNpc0Rpc2NoYXJnZXMgPSBoeXBvdGhlc2lzLmRpc2NoYXJnZShjb250ZXh0KTtcblxuICAgIGlmIChoeXBvdGhlc2lzRGlzY2hhcmdlcykge1xuICAgICAgY29udGV4dC50cmFjZShgLi4uZGlzY2hhcmdlcyB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uJ3MgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh5cG90aGVzaXNEaXNjaGFyZ2VzO1xuICB9XG5cbiAgZGlzY2hhcmdlSHlwb3RoZXNlcyhjb250ZXh0KSB7XG4gICAgY29uc3QgaHlwb3RoZXNlcyA9IHRoaXMuZ2V0SHlwb3RoZXNlcygpLFxuICAgICAgICAgIGh5cG90aGVzZXNEaXNjaGFyZ2UgPSBldmVyeShoeXBvdGhlc2VzLCAoaHlwb3RoZXNpcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgaHlwb3RoZXNpc0Rpc2NoYXJnZXMgPSB0aGlzLmRpc2NoYXJnZUh5cG90aGVzaXMoaHlwb3RoZXNpcywgY29udGV4dCk7XG5cbiAgICAgICAgICAgIGlmIChoeXBvdGhlc2lzRGlzY2hhcmdlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiBoeXBvdGhlc2VzRGlzY2hhcmdlO1xuICB9XG5cbiAgdW5pZnlTdGVwV2l0aERlZHVjdGlvbihzdGVwLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBjb25jbHVzaW9uU3RyaW5nID0gdGhpcy5jb25jbHVzaW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgJyR7Y29uY2x1c2lvblN0cmluZ30nIGNvbmNsdXNpb24uLi5gKTtcblxuICAgIHJldHVybiB0aGlzLmNvbmNsdXNpb24udW5pZnlTdGVwKHN0ZXAsIGNvbnRleHQsIChzdGVwVW5pZmllcykgPT4ge1xuICAgICAgbGV0IHN0ZXBVbmlmaWVzV2l0aERlZHVjdGlvbiA9IGZhbHNlO1xuXG4gICAgICBpZiAoc3RlcFVuaWZpZXMpIHtcbiAgICAgICAgc3RlcFVuaWZpZXNXaXRoRGVkdWN0aW9uID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0ZXBVbmlmaWVzV2l0aERlZHVjdGlvbikge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB3aXRoIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke2NvbmNsdXNpb25TdHJpbmd9JyBjb25jbHVzaW9uLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzV2l0aERlZHVjdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeVN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN0ZXAsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIHJldHVybiB0aGlzLnVuaWZ5U3RlcFdpdGhEZWR1Y3Rpb24oc3RlcCwgY29udGV4dCwgKHN0YXRlbWVudFVuaWZpZXNXaXRoRGVkdWN0aW9uKSA9PiB7XG4gICAgICBpZiAoIXN0YXRlbWVudFVuaWZpZXNXaXRoRGVkdWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBoeXBvdGhlc2VzRGlzY2hhcmdlID0gdGhpcy5kaXNjaGFyZ2VIeXBvdGhlc2VzKGNvbnRleHQpO1xuXG4gICAgICBpZiAoaHlwb3RoZXNlc0Rpc2NoYXJnZSkge1xuICAgICAgICBjb25zdCBzdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy51bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNXaXRoU3VwcG9zaXRpb25zKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQsIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhTdXBwb3NpdGlvbnMpID0+IHtcbiAgICAgICAgbGV0IHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkgPSBmYWxzZTtcblxuICAgICAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoU3VwcG9zaXRpb25zKSB7XG4gICAgICAgICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCA9IGNvbnRleHQuYXJlRGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCgpO1xuXG4gICAgICAgICAgaWYgKGRlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQpIHtcbiAgICAgICAgICAgIHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhTdXBwb3NpdGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBzdXBwb3NpdGlvbiwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgcmV0dXJuIGV4dHJhY3Qoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbiwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gc3VwcG9zaXRpb24udW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24oc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0sIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24gPSBudWxsKSA9PiB7XG4gICAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gY29udGV4dC5yZXNvbHZlRGVyaXZlZFN1YnN0aXR1dGlvbnMoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoU3VwcG9zaXRpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN1cHBvc2l0aW9uLnVuaWZ5SW5kZXBlbmRlbnRseShjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFN1cHBvc2l0aW9ucyhzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gcmV2ZXJzZShzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKTsgLy8vXG5cbiAgICByZXR1cm4gYmFja3dhcmRzRXZlcnkodGhpcy5zdXBwb3NpdGlvbnMsIChzdXBwb3NpdGlvbiwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy51bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNXaXRoU3VwcG9zaXRpb24oc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgc3VwcG9zaXRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgY29udGludWF0aW9uKTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBsYWJlbHNKU09OID0gbGFiZWxzVG9MYWJlbHNKU09OKHRoaXMubGFiZWxzKSxcbiAgICAgICAgICBkZWR1Y3Rpb25KU09OID0gZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OKHRoaXMuZGVkdWN0aW9uKSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnNKU09OID0gc3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OKHRoaXMuc3VwcG9zaXRpb25zKSxcbiAgICAgICAgICBzaWduYXR1cmVKU09OID0gc2lnbmF0dXJlVG9TaWduYXR1cmVKU09OKHRoaXMuc2lnbmF0dXJlKSxcbiAgICAgICAgICBoeXBvdGhlc2VzSlNPTiA9IGh5cG90aGVzZXNUb0h5cG90aGVzZXNKU09OKHRoaXMuaHlwb3RoZXNlcyksXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QgbGFiZWxzID0gbGFiZWxzSlNPTiwgIC8vL1xuICAgICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkpTT04sICAvLy9cbiAgICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNKU09OLCAgLy8vXG4gICAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlSlNPTiwgIC8vL1xuICAgICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzSlNPTiwgIC8vL1xuICAgICAgICAgIGpzb24gPSB7XG4gICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICBicmVha1BvaW50LFxuICAgICAgICAgICAgbGFiZWxzLFxuICAgICAgICAgICAgZGVkdWN0aW9uLFxuICAgICAgICAgICAgc3VwcG9zaXRpb25zLFxuICAgICAgICAgICAgc2lnbmF0dXJlLFxuICAgICAgICAgICAgaHlwb3RoZXNlc1xuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihDbGFzcywganNvbiwgY29udGV4dCkge1xuICAgIGNvbnN0IGxhYmVscyA9IGxhYmVsc0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzaWduYXR1cmUsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc2VydGlvblN0cmluZywgLy8vXG4gICAgICAgICAgbm9kZSA9IG51bGwsXG4gICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICBwcm9vZiA9IG51bGwsXG4gICAgICAgICAgdG9wTGV2ZWxBc3NlcnRpb24gPSBuZXcgQ2xhc3MoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICAgIHJldHVybiB0b3BMZXZlbEFzc2VydGlvbjtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlRvcExldmVsQXNzZXJ0aW9uIiwicmV2ZXJzZSIsImFycmF5VXRpbGl0aWVzIiwiZXZlcnkiLCJleHRyYWN0IiwiZm9yd2FyZHNFdmVyeSIsImJhY2t3YXJkc0V2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsImxhYmVscyIsInN1cHBvc2l0aW9ucyIsImRlZHVjdGlvbiIsInByb29mIiwic2lnbmF0dXJlIiwiaHlwb3RoZXNlcyIsImdldExhYmVscyIsImdldFN1cHBvc2l0aW9ucyIsImdldERlZHVjdGlvbiIsImdldFByb29mIiwiZ2V0U2lnbmF0dXJlIiwiZ2V0SHlwb3RoZXNlcyIsInNldEh5cG90aGVzZXMiLCJnZXRTdXBwb3NpdGlvbiIsImluZGV4Iiwic3VwcG9zaXRpb24iLCJpc1NhdGlzZmlhYmxlIiwic2F0aXNmaWFibGUiLCJpc0h5cG90aGV0aWNhbCIsImh5cG90aGVzZXNMZW5ndGgiLCJsZW5ndGgiLCJoeXBvdGhldGljYWwiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJzb21lIiwibGFiZWwiLCJ2ZXJpZnlFeCIsImNvbnRpbnVhdGlvbiIsInRvcExldmVsQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJlbmNsb3NlIiwidmVyaWZ5UHJvb2YiLCJiaW5kIiwidmVyaWZ5TGFiZWxzIiwidmVyaWZ5RGVkdWN0aW9uIiwidmVyaWZ5U3VwcG9zaXRpb25zIiwiYWxsIiwidmVyaWZpZXMiLCJkZWJ1ZyIsInZlcmlmeUxhYmVsIiwibGFiZWxzVmVyaWZ5IiwibGFiZWxTdHJpbmciLCJ2ZXJpZnkiLCJsYWJlbFZlcmlmaWVzIiwicHJvb2ZWZXJpZmllcyIsInN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsImRlZHVjdGlvblN0cmluZyIsImRlZHVjdGlvblZlcmlmaWVzIiwidmVyaWZ5U3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvblN0cmluZyIsInN1cHBvc2l0aW9uVmVyaWZpZXMiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24iLCJhc3NpZ25Bc3NpZ25tZW50cyIsImFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInN1cHBvc2l0aW9uc1ZlcmlmeSIsImRpc2NoYXJnZUh5cG90aGVzaXMiLCJoeXBvdGhlc2lzIiwiaHlwb3RoZXNpc0Rpc2NoYXJnZXMiLCJicmVhayIsImh5cG90aGVzaXNTdHJpbmciLCJkaXNjaGFyZ2UiLCJkaXNjaGFyZ2VIeXBvdGhlc2VzIiwiaHlwb3RoZXNlc0Rpc2NoYXJnZSIsInVuaWZ5U3RlcFdpdGhEZWR1Y3Rpb24iLCJzdGVwIiwicnVsZVN0cmluZyIsInN0ZXBTdHJpbmciLCJjb25jbHVzaW9uU3RyaW5nIiwiY29uY2x1c2lvbiIsInVuaWZ5U3RlcCIsInN0ZXBVbmlmaWVzIiwic3RlcFVuaWZpZXNXaXRoRGVkdWN0aW9uIiwidW5pZnlTdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aERlZHVjdGlvbiIsInN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkiLCJ1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNXaXRoU3VwcG9zaXRpb25zIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoU3VwcG9zaXRpb25zIiwiZGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCIsImFyZURlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQiLCJ1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNXaXRoU3VwcG9zaXRpb24iLCJ1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9uIiwicmVzb2x2ZURlcml2ZWRTdWJzdGl0dXRpb25zIiwidW5pZnlJbmRlcGVuZGVudGx5IiwidG9KU09OIiwibGFiZWxzSlNPTiIsImxhYmVsc1RvTGFiZWxzSlNPTiIsImRlZHVjdGlvbkpTT04iLCJkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04iLCJzdXBwb3NpdGlvbnNKU09OIiwic3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OIiwic2lnbmF0dXJlSlNPTiIsInNpZ25hdHVyZVRvU2lnbmF0dXJlSlNPTiIsImh5cG90aGVzZXNKU09OIiwiaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJDbGFzcyIsImxhYmVsc0Zyb21KU09OIiwiZGVkdWN0aW9uRnJvbUpTT04iLCJzdXBwb3NpdGlvbnNGcm9tSlNPTiIsInNpZ25hdHVyZUZyb21KU09OIiwiaHlwb3RoZXNlc0Zyb21KU09OIiwidG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwidG9wTGV2ZWxBc3NlcnRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQXVCQTs7O2VBQXFCQTs7OzJCQXJCVTtnQ0FDcUM7OEJBRWhEO3lCQUNJO3dCQUMyRDtzQkFVcEM7QUFFL0MsTUFBTSxFQUFFQyxPQUFPLEVBQUUsR0FBR0MseUJBQWMsRUFDNUIsRUFBRUMsS0FBSyxFQUFFQyxPQUFPLEVBQUVDLGFBQWEsRUFBRUMsY0FBYyxFQUFFLEdBQUdDLHFDQUFxQixFQUN6RSxFQUFFQyxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO0FBRS9ELE1BQU1WLDBCQUEwQlcsdUJBQU87SUFDcEQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxNQUFNLEVBQUVDLFlBQVksRUFBRUMsU0FBUyxFQUFFQyxLQUFLLEVBQUVDLFNBQVMsRUFBRUMsVUFBVSxDQUFFO1FBQzVHLEtBQUssQ0FBQ1QsU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxZQUFZLEdBQUdBO1FBQ3BCLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtRQUNqQixJQUFJLENBQUNDLEtBQUssR0FBR0E7UUFDYixJQUFJLENBQUNDLFNBQVMsR0FBR0E7UUFDakIsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO0lBQ3BCO0lBRUFDLFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQ04sTUFBTTtJQUNwQjtJQUVBTyxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUNOLFlBQVk7SUFDMUI7SUFFQU8sZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDTixTQUFT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
|
|
258
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3RvcExldmVsQXNzZXJ0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgYWxsIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IGVuY2xvc2UgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBsYWJlbHNGcm9tSlNPTixcbiAgICAgICAgIGRlZHVjdGlvbkZyb21KU09OLFxuICAgICAgICAgc2lnbmF0dXJlRnJvbUpTT04sXG4gICAgICAgICBsYWJlbHNUb0xhYmVsc0pTT04sXG4gICAgICAgICBoeXBvdGhlc2VzRnJvbUpTT04sXG4gICAgICAgICBzdXBwb3NpdGlvbnNGcm9tSlNPTixcbiAgICAgICAgIGRlZHVjdGlvblRvRGVkdWN0aW9uSlNPTixcbiAgICAgICAgIHNpZ25hdHVyZVRvU2lnbmF0dXJlSlNPTixcbiAgICAgICAgIGh5cG90aGVzZXNUb0h5cG90aGVzZXNKU09OLFxuICAgICAgICAgc3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgcmV2ZXJzZSB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGV2ZXJ5LCBleHRyYWN0LCBmb3J3YXJkc0V2ZXJ5LCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb3BMZXZlbEFzc2VydGlvbiBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5sYWJlbHMgPSBsYWJlbHM7XG4gICAgdGhpcy5zdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnM7XG4gICAgdGhpcy5kZWR1Y3Rpb24gPSBkZWR1Y3Rpb247XG4gICAgdGhpcy5wcm9vZiA9IHByb29mO1xuICAgIHRoaXMuc2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuICAgIHRoaXMuaHlwb3RoZXNlcyA9IGh5cG90aGVzZXM7XG4gIH1cblxuICBnZXRMYWJlbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWxzO1xuICB9XG5cbiAgZ2V0U3VwcG9zaXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnN1cHBvc2l0aW9ucztcbiAgfVxuXG4gIGdldERlZHVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kZWR1Y3Rpb247XG4gIH1cblxuICBnZXRQcm9vZigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9vZjtcbiAgfVxuXG4gIGdldFNpZ25hdHVyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zaWduYXR1cmU7XG4gIH1cblxuICBnZXRIeXBvdGhlc2VzKCkge1xuICAgIHJldHVybiB0aGlzLmh5cG90aGVzZXM7XG4gIH1cblxuICBzZXRIeXBvdGhlc2VzKGh5cG90aGVzZXMpIHtcbiAgICB0aGlzLmh5cG90aGVzZXMgPSBoeXBvdGhlc2VzO1xuICB9XG5cbiAgZ2V0U3VwcG9zaXRpb24oaW5kZXgpIHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbiA9IHRoaXMuc3VwcG9zaXRpb25zW2luZGV4XSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uO1xuICB9XG5cbiAgaXNTYXRpc2ZpYWJsZSgpIHtcbiAgICBjb25zdCBzYXRpc2ZpYWJsZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHNhdGlzZmlhYmxlO1xuICB9XG5cbiAgaXNIeXBvdGhldGljYWwoKSB7XG4gICAgY29uc3QgaHlwb3RoZXNlc0xlbmd0aCA9IHRoaXMuaHlwb3RoZXNlcy5sZW5ndGgsXG4gICAgICAgICAgaHlwb3RoZXRpY2FsID0gKGh5cG90aGVzZXNMZW5ndGggPiAwKTtcblxuICAgIHJldHVybiBoeXBvdGhldGljYWw7XG4gIH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gdGhpcy5sYWJlbHMuc29tZSgobGFiZWwpID0+IHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gbGFiZWwubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXM7XG4gIH1cblxuICB2ZXJpZnlFeChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHZlcmlmeVByb29mID0gdGhpcy52ZXJpZnlQcm9vZi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmVyaWZ5TGFiZWxzID0gdGhpcy52ZXJpZnlMYWJlbHMuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZlcmlmeURlZHVjdGlvbiA9IHRoaXMudmVyaWZ5RGVkdWN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMgPSB0aGlzLnZlcmlmeVN1cHBvc2l0aW9ucy5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gYWxsKFtcbiAgICAgICAgdmVyaWZ5TGFiZWxzLFxuICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMsXG4gICAgICAgIHZlcmlmeURlZHVjdGlvbixcbiAgICAgICAgdmVyaWZ5UHJvb2ZcbiAgICAgIF0sIGNvbnRleHQsICh2ZXJpZmllcykgPT4ge1xuICAgICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2ZXJpZmllcyk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHZlcmlmeUxhYmVscyhjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uJ3MgbGFiZWxzLi4uYCk7XG5cbiAgICByZXR1cm4gZXZlcnkodGhpcy5sYWJlbHMsIChsYWJlbCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJpZnlMYWJlbChsYWJlbCwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9LCAobGFiZWxzVmVyaWZ5KSA9PiB7XG4gICAgICBpZiAobGFiZWxzVmVyaWZ5KSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyBsYWJlbHMuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24obGFiZWxzVmVyaWZ5KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbidzICcke2xhYmVsU3RyaW5nfScgbGFiZWwuLi5gKTtcblxuICAgIHJldHVybiBsYWJlbC52ZXJpZnkoKGxhYmVsVmVyaWZpZXMpID0+IHtcbiAgICAgIGlmIChsYWJlbFZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyAnJHtsYWJlbFN0cmluZ30nIGxhYmVsLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGxhYmVsVmVyaWZpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5UHJvb2YoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgaWYgKHRoaXMucHJvb2YgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHByb29mVmVyaWZpZXMgPSB0cnVlOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihwcm9vZlZlcmlmaWVzKTtcbiAgICB9XG5cbiAgICBjb25zdCB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uJ3MgcHJvb2YuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuZGVkdWN0aW9uLmdldFN0YXRlbWVudCgpO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvb2YudmVyaWZ5KHN0YXRlbWVudCwgY29udGV4dCwgKHByb29mVmVyaWZpZXMpID0+IHtcbiAgICAgIGlmIChwcm9vZlZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyBwcm9vZi5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihwcm9vZlZlcmlmaWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeURlZHVjdGlvbihjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBkZWR1Y3Rpb25TdHJpbmcgPSB0aGlzLmRlZHVjdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24uLi5gKTtcblxuICAgIHJldHVybiB0aGlzLmRlZHVjdGlvbi52ZXJpZnkoY29udGV4dCwgKGRlZHVjdGlvblZlcmlmaWVzKSA9PiB7XG4gICAgICBpZiAoZGVkdWN0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbidzICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihkZWR1Y3Rpb25WZXJpZmllcyk7XG4gICAgfSk7XG4gIH1cblxuICB2ZXJpZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uJ3MgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uLnZlcmlmeShjb250ZXh0LCAoc3VwcG9zaXRpb25WZXJpZmllcykgPT4ge1xuICAgICAgaWYgKHN1cHBvc2l0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uID0gc3VwcG9zaXRpb247ICAvLy8vXG5cbiAgICAgICAgY29udGV4dC5hc3NpZ25Bc3NpZ25tZW50cygpO1xuXG4gICAgICAgIGNvbnRleHQuYWRkU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdXBwb3NpdGlvblZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cHBvc2l0aW9uVmVyaWZpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5U3VwcG9zaXRpb25zKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24ncyBzdXBwb3NpdGlvbnMuLi5gKTtcblxuICAgIHJldHVybiBmb3J3YXJkc0V2ZXJ5KHRoaXMuc3VwcG9zaXRpb25zLCAoc3VwcG9zaXRpb24sIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudmVyaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgKHN1cHBvc2l0aW9uc1ZlcmlmeSkgPT4ge1xuICAgICAgaWYgKHN1cHBvc2l0aW9uc1ZlcmlmeSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uJ3Mgc3VwcG9zaXRpb25zLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cHBvc2l0aW9uc1ZlcmlmeSk7XG4gICAgfSk7XG4gIH1cblxuICBkaXNjaGFyZ2VIeXBvdGhlc2lzKGh5cG90aGVzaXMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGh5cG90aGVzaXNTdHJpbmcgPSBoeXBvdGhlc2lzLmdldFN0cmluZygpLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBEaXNjaGFyZGluZyB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uJ3MgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMuLi5gKTtcblxuICAgIGh5cG90aGVzaXMuZGlzY2hhcmdlKGNvbnRleHQsIChoeXBvdGhlc2lzRGlzY2hhcmdlcykgPT4ge1xuICAgICAgaWYgKGh5cG90aGVzaXNEaXNjaGFyZ2VzKSB7XG4gICAgICAgIGNvbnRleHQudHJhY2UoYC4uLmRpc2NoYXJnZXMgdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbidzICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGh5cG90aGVzaXNEaXNjaGFyZ2VzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRpc2NoYXJnZUh5cG90aGVzZXMoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgaHlwb3RoZXNlcyA9IHRoaXMuZ2V0SHlwb3RoZXNlcygpO1xuXG4gICAgZXZlcnkoaHlwb3RoZXNlcywgKGh5cG90aGVzaXMsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgdGhpcy5kaXNjaGFyZ2VIeXBvdGhlc2lzKGh5cG90aGVzaXMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgY29udGludWF0aW9uKTtcbiAgfVxuXG4gIHVuaWZ5U3RlcFdpdGhEZWR1Y3Rpb24oc3RlcCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgcnVsZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgZGVkdWN0aW9uU3RyaW5nID0gdGhpcy5kZWR1Y3Rpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24uLi5gKTtcblxuICAgIHJldHVybiB0aGlzLmRlZHVjdGlvbi51bmlmeVN0ZXAoc3RlcCwgY29udGV4dCwgKHN0ZXBVbmlmaWVzKSA9PiB7XG4gICAgICBsZXQgc3RlcFVuaWZpZXNXaXRoRGVkdWN0aW9uID0gZmFsc2U7XG5cbiAgICAgIGlmIChzdGVwVW5pZmllcykge1xuICAgICAgICBzdGVwVW5pZmllc1dpdGhEZWR1Y3Rpb24gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RlcFVuaWZpZXNXaXRoRGVkdWN0aW9uKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3J1bGVTdHJpbmd9JyBydWxlJ3MgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBVbmlmaWVzV2l0aERlZHVjdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeVN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN0ZXAsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIHJldHVybiB0aGlzLnVuaWZ5U3RlcFdpdGhEZWR1Y3Rpb24oc3RlcCwgY29udGV4dCwgKHN0YXRlbWVudFVuaWZpZXNXaXRoRGVkdWN0aW9uKSA9PiB7XG4gICAgICBpZiAoIXN0YXRlbWVudFVuaWZpZXNXaXRoRGVkdWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5kaXNjaGFyZ2VIeXBvdGhlc2VzKGNvbnRleHQsIChoeXBvdGhlc2VzRGlzY2hhcmdlKSA9PiB7XG4gICAgICAgIGlmICghaHlwb3RoZXNlc0Rpc2NoYXJnZSkge1xuICAgICAgICAgIGNvbnN0IHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkgPSBmYWxzZTtcblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy51bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNXaXRoU3VwcG9zaXRpb25zKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQsIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhTdXBwb3NpdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCA9IGNvbnRleHQuYXJlRGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCgpO1xuXG4gICAgICAgICAgICBpZiAoZGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCkge1xuICAgICAgICAgICAgICBzdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFN1cHBvc2l0aW9uKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIHN1cHBvc2l0aW9uLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICByZXR1cm4gZXh0cmFjdChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIHJldHVybiBzdXBwb3NpdGlvbi51bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbiA9IG51bGwpID0+IHtcbiAgICAgIGlmIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZpZXNXaXRoU3VwcG9zaXRpb24gPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBjb250ZXh0LnJlc29sdmVEZXJpdmVkU3Vic3RpdHV0aW9ucygoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhTdXBwb3NpdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3VwcG9zaXRpb24udW5pZnlJbmRlcGVuZGVudGx5KGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNXaXRoU3VwcG9zaXRpb25zKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSByZXZlcnNlKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMpOyAvLy9cblxuICAgIHJldHVybiBiYWNrd2FyZHNFdmVyeSh0aGlzLnN1cHBvc2l0aW9ucywgKHN1cHBvc2l0aW9uLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1dpdGhTdXBwb3NpdGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBzdXBwb3NpdGlvbiwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9LCBjb250aW51YXRpb24pO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGxhYmVsc0pTT04gPSBsYWJlbHNUb0xhYmVsc0pTT04odGhpcy5sYWJlbHMpLFxuICAgICAgICAgIGRlZHVjdGlvbkpTT04gPSBkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04odGhpcy5kZWR1Y3Rpb24pLFxuICAgICAgICAgIHN1cHBvc2l0aW9uc0pTT04gPSBzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04odGhpcy5zdXBwb3NpdGlvbnMpLFxuICAgICAgICAgIHNpZ25hdHVyZUpTT04gPSBzaWduYXR1cmVUb1NpZ25hdHVyZUpTT04odGhpcy5zaWduYXR1cmUpLFxuICAgICAgICAgIGh5cG90aGVzZXNKU09OID0gaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04odGhpcy5oeXBvdGhlc2VzKSxcbiAgICAgICAgICBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBsYWJlbHMgPSBsYWJlbHNKU09OLCAgLy8vXG4gICAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uSlNPTiwgIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0pTT04sICAvLy9cbiAgICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVKU09OLCAgLy8vXG4gICAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNKU09OLCAgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIGJyZWFrUG9pbnQsXG4gICAgICAgICAgICBsYWJlbHMsXG4gICAgICAgICAgICBkZWR1Y3Rpb24sXG4gICAgICAgICAgICBzdXBwb3NpdGlvbnMsXG4gICAgICAgICAgICBzaWduYXR1cmUsXG4gICAgICAgICAgICBoeXBvdGhlc2VzXG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKENsYXNzLCBqc29uLCBjb250ZXh0KSB7XG4gICAgY29uc3QgbGFiZWxzID0gbGFiZWxzRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICAgIHN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgICBub2RlID0gbnVsbCxcbiAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgIHByb29mID0gbnVsbCxcbiAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvbiA9IG5ldyBDbGFzcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gICAgcmV0dXJuIHRvcExldmVsQXNzZXJ0aW9uO1xuICB9XG59XG4iXSwibmFtZXMiOlsiVG9wTGV2ZWxBc3NlcnRpb24iLCJyZXZlcnNlIiwiYXJyYXlVdGlsaXRpZXMiLCJldmVyeSIsImV4dHJhY3QiLCJmb3J3YXJkc0V2ZXJ5IiwiYmFja3dhcmRzRXZlcnkiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwibGFiZWxzIiwic3VwcG9zaXRpb25zIiwiZGVkdWN0aW9uIiwicHJvb2YiLCJzaWduYXR1cmUiLCJoeXBvdGhlc2VzIiwiZ2V0TGFiZWxzIiwiZ2V0U3VwcG9zaXRpb25zIiwiZ2V0RGVkdWN0aW9uIiwiZ2V0UHJvb2YiLCJnZXRTaWduYXR1cmUiLCJnZXRIeXBvdGhlc2VzIiwic2V0SHlwb3RoZXNlcyIsImdldFN1cHBvc2l0aW9uIiwiaW5kZXgiLCJzdXBwb3NpdGlvbiIsImlzU2F0aXNmaWFibGUiLCJzYXRpc2ZpYWJsZSIsImlzSHlwb3RoZXRpY2FsIiwiaHlwb3RoZXNlc0xlbmd0aCIsImxlbmd0aCIsImh5cG90aGV0aWNhbCIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsInNvbWUiLCJsYWJlbCIsInZlcmlmeUV4IiwiY29udGludWF0aW9uIiwidG9wTGV2ZWxBc3NlcnRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImVuY2xvc2UiLCJ2ZXJpZnlQcm9vZiIsImJpbmQiLCJ2ZXJpZnlMYWJlbHMiLCJ2ZXJpZnlEZWR1Y3Rpb24iLCJ2ZXJpZnlTdXBwb3NpdGlvbnMiLCJhbGwiLCJ2ZXJpZmllcyIsImRlYnVnIiwidmVyaWZ5TGFiZWwiLCJsYWJlbHNWZXJpZnkiLCJsYWJlbFN0cmluZyIsInZlcmlmeSIsImxhYmVsVmVyaWZpZXMiLCJwcm9vZlZlcmlmaWVzIiwic3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiZGVkdWN0aW9uU3RyaW5nIiwiZGVkdWN0aW9uVmVyaWZpZXMiLCJ2ZXJpZnlTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uU3RyaW5nIiwic3VwcG9zaXRpb25WZXJpZmllcyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsImFzc2lnbkFzc2lnbm1lbnRzIiwiYWRkU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwic3VwcG9zaXRpb25zVmVyaWZ5IiwiZGlzY2hhcmdlSHlwb3RoZXNpcyIsImh5cG90aGVzaXMiLCJoeXBvdGhlc2lzU3RyaW5nIiwiZGlzY2hhcmdlIiwiaHlwb3RoZXNpc0Rpc2NoYXJnZXMiLCJkaXNjaGFyZ2VIeXBvdGhlc2VzIiwidW5pZnlTdGVwV2l0aERlZHVjdGlvbiIsInN0ZXAiLCJydWxlU3RyaW5nIiwic3RlcFN0cmluZyIsInVuaWZ5U3RlcCIsInN0ZXBVbmlmaWVzIiwic3RlcFVuaWZpZXNXaXRoRGVkdWN0aW9uIiwidW5pZnlTdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aERlZHVjdGlvbiIsInN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkiLCJoeXBvdGhlc2VzRGlzY2hhcmdlIiwidW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFN1cHBvc2l0aW9ucyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucyIsImRlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQiLCJhcmVEZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkIiwidW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zV2l0aFN1cHBvc2l0aW9uIiwidW5pZnlTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZmllc1dpdGhTdXBwb3NpdGlvbiIsInJlc29sdmVEZXJpdmVkU3Vic3RpdHV0aW9ucyIsInVuaWZ5SW5kZXBlbmRlbnRseSIsInRvSlNPTiIsImxhYmVsc0pTT04iLCJsYWJlbHNUb0xhYmVsc0pTT04iLCJkZWR1Y3Rpb25KU09OIiwiZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OIiwic3VwcG9zaXRpb25zSlNPTiIsInN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTiIsInNpZ25hdHVyZUpTT04iLCJzaWduYXR1cmVUb1NpZ25hdHVyZUpTT04iLCJoeXBvdGhlc2VzSlNPTiIsImh5cG90aGVzZXNUb0h5cG90aGVzZXNKU09OIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsImZyb21KU09OIiwiQ2xhc3MiLCJsYWJlbHNGcm9tSlNPTiIsImRlZHVjdGlvbkZyb21KU09OIiwic3VwcG9zaXRpb25zRnJvbUpTT04iLCJzaWduYXR1cmVGcm9tSlNPTiIsImh5cG90aGVzZXNGcm9tSlNPTiIsInRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBv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
|
package/package.json
CHANGED
package/src/element/rule.js
CHANGED
|
@@ -224,7 +224,7 @@ export default define(class Rule extends Element {
|
|
|
224
224
|
return continuation(stepAndSubproofOrProofAssertionsUnify);
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
-
this.unifySubproofOrProofAssertionsWithPremises(subproofOrProofAssertions, context, (subproofOrProofAssertionsUnifiesWithPremises) => {
|
|
227
|
+
return this.unifySubproofOrProofAssertionsWithPremises(subproofOrProofAssertions, context, (subproofOrProofAssertionsUnifiesWithPremises) => {
|
|
228
228
|
let stepAndSubproofOrProofAssertionsUnify = false;
|
|
229
229
|
|
|
230
230
|
if (subproofOrProofAssertionsUnifiesWithPremises) {
|
|
@@ -225,46 +225,37 @@ export default class TopLevelAssertion extends Element {
|
|
|
225
225
|
});
|
|
226
226
|
}
|
|
227
227
|
|
|
228
|
-
dischargeHypothesis(hypothesis, context) {
|
|
229
|
-
let hypothesisDischarges;
|
|
230
|
-
|
|
231
|
-
this.break(context);
|
|
232
|
-
|
|
228
|
+
dischargeHypothesis(hypothesis, context, continuation) {
|
|
233
229
|
const hypothesisString = hypothesis.getString(),
|
|
234
230
|
topLevelAssertionString = this.getString(); ///
|
|
235
231
|
|
|
236
232
|
context.trace(`Discharding the '${topLevelAssertionString}' top level assertion's '${hypothesisString}' hypothesis...`);
|
|
237
233
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
}
|
|
234
|
+
hypothesis.discharge(context, (hypothesisDischarges) => {
|
|
235
|
+
if (hypothesisDischarges) {
|
|
236
|
+
context.trace(`...discharges the '${topLevelAssertionString}' top level assertion's '${hypothesisString}' hypothesis.`);
|
|
237
|
+
}
|
|
243
238
|
|
|
244
|
-
|
|
239
|
+
return continuation(hypothesisDischarges);
|
|
240
|
+
});
|
|
245
241
|
}
|
|
246
242
|
|
|
247
|
-
dischargeHypotheses(context) {
|
|
248
|
-
const hypotheses = this.getHypotheses()
|
|
249
|
-
hypothesesDischarge = every(hypotheses, (hypothesis) => {
|
|
250
|
-
const hypothesisDischarges = this.dischargeHypothesis(hypothesis, context);
|
|
251
|
-
|
|
252
|
-
if (hypothesisDischarges) {
|
|
253
|
-
return true;
|
|
254
|
-
}
|
|
255
|
-
});
|
|
243
|
+
dischargeHypotheses(context, continuation) {
|
|
244
|
+
const hypotheses = this.getHypotheses();
|
|
256
245
|
|
|
257
|
-
|
|
246
|
+
every(hypotheses, (hypothesis, continuation) => {
|
|
247
|
+
this.dischargeHypothesis(hypothesis, context, continuation);
|
|
248
|
+
}, continuation);
|
|
258
249
|
}
|
|
259
250
|
|
|
260
251
|
unifyStepWithDeduction(step, context, continuation) {
|
|
261
252
|
const ruleString = this.getString(),
|
|
262
253
|
stepString = step.getString(),
|
|
263
|
-
|
|
254
|
+
deductionString = this.deduction.getString();
|
|
264
255
|
|
|
265
|
-
context.trace(`Unifying the '${stepString}' step with the '${ruleString}' rule's '${
|
|
256
|
+
context.trace(`Unifying the '${stepString}' step with the '${ruleString}' rule's '${deductionString}' deduction...`);
|
|
266
257
|
|
|
267
|
-
return this.
|
|
258
|
+
return this.deduction.unifyStep(step, context, (stepUnifies) => {
|
|
268
259
|
let stepUnifiesWithDeduction = false;
|
|
269
260
|
|
|
270
261
|
if (stepUnifies) {
|
|
@@ -272,7 +263,7 @@ export default class TopLevelAssertion extends Element {
|
|
|
272
263
|
}
|
|
273
264
|
|
|
274
265
|
if (stepUnifiesWithDeduction) {
|
|
275
|
-
context.debug(`...unified the '${stepString}' step with the '${ruleString}' rule's '${
|
|
266
|
+
context.debug(`...unified the '${stepString}' step with the '${ruleString}' rule's '${deductionString}' deduction.`);
|
|
276
267
|
}
|
|
277
268
|
|
|
278
269
|
return continuation(stepUnifiesWithDeduction);
|
|
@@ -287,26 +278,26 @@ export default class TopLevelAssertion extends Element {
|
|
|
287
278
|
return continuation(stepAndSubproofOrProofAssertionsUnify);
|
|
288
279
|
}
|
|
289
280
|
|
|
290
|
-
|
|
281
|
+
return this.dischargeHypotheses(context, (hypothesesDischarge) => {
|
|
282
|
+
if (!hypothesesDischarge) {
|
|
283
|
+
const stepAndSubproofOrProofAssertionsUnify = false;
|
|
291
284
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
return continuation(stepAndSubproofOrProofAssertionsUnify);
|
|
296
|
-
}
|
|
285
|
+
return continuation(stepAndSubproofOrProofAssertionsUnify);
|
|
286
|
+
}
|
|
297
287
|
|
|
298
|
-
|
|
299
|
-
|
|
288
|
+
return this.unifySubproofOrProofAssertionsWithSuppositions(subproofOrProofAssertions, context, (subproofOrProofAssertionsUnifiesWithSuppositions) => {
|
|
289
|
+
let stepAndSubproofOrProofAssertionsUnify = false;
|
|
300
290
|
|
|
301
|
-
|
|
302
|
-
|
|
291
|
+
if (subproofOrProofAssertionsUnifiesWithSuppositions) {
|
|
292
|
+
const derivedSubstitutionsResolved = context.areDerivedSubstitutionsResolved();
|
|
303
293
|
|
|
304
|
-
|
|
305
|
-
|
|
294
|
+
if (derivedSubstitutionsResolved) {
|
|
295
|
+
stepAndSubproofOrProofAssertionsUnify = true;
|
|
296
|
+
}
|
|
306
297
|
}
|
|
307
|
-
}
|
|
308
298
|
|
|
309
|
-
|
|
299
|
+
return continuation(stepAndSubproofOrProofAssertionsUnify);
|
|
300
|
+
});
|
|
310
301
|
});
|
|
311
302
|
});
|
|
312
303
|
}
|