occam-verify-cli 1.0.314 → 1.0.316
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/context/file.js +29 -6
- package/lib/context/release.js +1 -43
- package/lib/dom/declaration/complexType.js +13 -57
- package/lib/dom/declaration/simpleType.js +10 -10
- package/lib/utilities/json.js +24 -1
- package/package.json +6 -6
- package/src/context/file.js +33 -4
- package/src/context/release.js +0 -20
- package/src/dom/declaration/complexType.js +14 -47
- package/src/dom/declaration/simpleType.js +9 -9
- package/src/utilities/json.js +28 -0
package/lib/utilities/json.js
CHANGED
|
@@ -174,6 +174,12 @@ _export(exports, {
|
|
|
174
174
|
get theoremsToTheoremsJSON () {
|
|
175
175
|
return theoremsToTheoremsJSON;
|
|
176
176
|
},
|
|
177
|
+
get typeAliasesFromJSON () {
|
|
178
|
+
return typeAliasesFromJSON;
|
|
179
|
+
},
|
|
180
|
+
get typeAliasesToTypeAliasesJSON () {
|
|
181
|
+
return typeAliasesToTypeAliasesJSON;
|
|
182
|
+
},
|
|
177
183
|
get typeFromJSON () {
|
|
178
184
|
return typeFromJSON;
|
|
179
185
|
},
|
|
@@ -409,6 +415,15 @@ function combinatorsFromJSON(json, context) {
|
|
|
409
415
|
});
|
|
410
416
|
return combinators;
|
|
411
417
|
}
|
|
418
|
+
function typeAliasesFromJSON(json, context) {
|
|
419
|
+
var typeAliases = json.typeAliases;
|
|
420
|
+
var TypeAlias = _dom.default.TypeAlias, typeAliasesJSON = typeAliases; ///
|
|
421
|
+
typeAliases = typeAliasesJSON.map(function(typeAliasJSON) {
|
|
422
|
+
var _$json = typeAliasJSON, typeAlias = TypeAlias.fromJSON(_$json, context);
|
|
423
|
+
return typeAlias;
|
|
424
|
+
});
|
|
425
|
+
return typeAliases;
|
|
426
|
+
}
|
|
412
427
|
function constructorsFromJSON(json, context) {
|
|
413
428
|
var constructors = json.constructors;
|
|
414
429
|
var Constructor = _dom.default.Constructor, constructorsJSON = constructors; ///
|
|
@@ -605,6 +620,14 @@ function propertiesToPropertiesJSON(properties) {
|
|
|
605
620
|
});
|
|
606
621
|
return propertiesJSON;
|
|
607
622
|
}
|
|
623
|
+
function typeAliasesToTypeAliasesJSON(typeAliases) {
|
|
624
|
+
var typeAliasesJSON = typeAliases.map(function(typeAlias) {
|
|
625
|
+
var typeAliasJSON = typeAlias.toJSON();
|
|
626
|
+
typeAlias = typeAliasJSON; ///
|
|
627
|
+
return typeAlias;
|
|
628
|
+
});
|
|
629
|
+
return typeAliasesJSON;
|
|
630
|
+
}
|
|
608
631
|
function conjecturesToConjecturesJSON(conjectures) {
|
|
609
632
|
var conjecturesJSON = conjectures.map(function(conjecture) {
|
|
610
633
|
var conjectureJSON = conjecture.toJSON();
|
|
@@ -660,4 +683,4 @@ function metavariablesToMetavariablesJSON(metavariables) {
|
|
|
660
683
|
return metavariablesJSON;
|
|
661
684
|
}
|
|
662
685
|
|
|
663
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvanNvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGRvbSBmcm9tIFwiLi4vZG9tXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyB0ZXJtIH0gPSBqc29uO1xuXG4gIGNvbnN0IHRlcm1KU09OID0gdGVybTsgIC8vL1xuXG4gIGpzb24gPSB0ZXJtSlNPTjsgIC8vL1xuXG4gIGNvbnN0IHsgVGVybSB9ID0gZG9tO1xuXG4gIHRlcm0gPSBUZXJtLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgdHlwZSB9ID0ganNvbjtcblxuICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgbmFtZSB9ID0gdHlwZSxcbiAgICAgICAgICB0eXBlTmFtZSA9IG5hbWU7ICAvLy9cblxuICAgIHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFUeXBlRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBtZXRhVHlwZSB9ID0ganNvbjtcblxuICBpZiAobWV0YVR5cGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IG5hbWUgfSA9IG1ldGFUeXBlLFxuICAgICAgICAgIG1ldGFUeXBlTmFtZSA9IG5hbWU7ICAvLy9cblxuICAgIG1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGFUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBzdGF0ZW1lbnQgPSBudWxsIH0gPSBqc29uO1xuXG4gIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFN0YXRlbWVudCB9ID0gZG9tLFxuICAgICAgICAgIHN0YXRlbWVudEpTT04gPSBzdGF0ZW1lbnQ7ICAvLy9cblxuICAgIGpzb24gPSBzdGF0ZW1lbnRKU09OOyAvLy9cblxuICAgIHN0YXRlbWVudCA9IFN0YXRlbWVudC5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHJlZmVyZW5jZSB9ID0ganNvbjtcblxuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZG9tLFxuICAgICAgICByZWZlcmVuY2VKU09OID0gcmVmZXJlbmNlOyAgLy8vXG5cbiAganNvbiA9IHJlZmVyZW5jZUpTT047ICAvLy9cblxuICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgZGVkdWN0aW9uIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgRGVkdWN0aW9uIH0gPSBkb20sXG4gICAgICAgIGRlZHVjdGlvbkpTT04gPSBkZWR1Y3Rpb247ICAvLy9cblxuICBqc29uID0gZGVkdWN0aW9uSlNPTjsgIC8vL1xuXG4gIGRlZHVjdGlvbiA9IERlZHVjdGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBzaWduYXR1cmUgPSBudWxsIH0gPSBqc29uO1xuXG4gIGlmIChzaWduYXR1cmUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZG9tLFxuICAgICAgICAgIHNpZ25hdHVyZUpTT04gPSBzaWduYXR1cmU7ICAvLy9cblxuICAgIGpzb24gPSBzaWduYXR1cmVKU09OOyAvLy9cblxuICAgIHNpZ25hdHVyZSA9IFNpZ25hdHVyZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jbHVzaW9uRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBjb25jbHVzaW9uIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgQ29uY2x1c2lvbiB9ID0gZG9tLFxuICAgICAgICBjb25jbHVzaW9uSlNPTiA9IGNvbmNsdXNpb247ICAvLy9cblxuICBqc29uID0gY29uY2x1c2lvbkpTT047ICAvLy9cblxuICBjb25jbHVzaW9uID0gQ29uY2x1c2lvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29uY2x1c2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgbWV0YXZhcmlhYmxlIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBkb20sXG4gICAgICAgIG1ldGF2YXJpYWJsZUpTT04gPSBtZXRhdmFyaWFibGU7ICAvLy9cblxuICBqc29uID0gbWV0YXZhcmlhYmxlSlNPTjsgLy8vXG5cbiAgbWV0YXZhcmlhYmxlID0gTWV0YXZhcmlhYmxlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBwcm9jZWR1cmVDYWxsID0gbnVsbCB9ID0ganNvbjtcblxuICBpZiAocHJvY2VkdXJlQ2FsbCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgUHJvY2VkdXJlQ2FsbCB9ID0gZG9tLFxuICAgICAgICAgIHByb2NlZHVyZUNhbGxKU09OID0gcHJvY2VkdXJlQ2FsbDsgIC8vL1xuXG4gICAganNvbiA9IHByb2NlZHVyZUNhbGxKU09OOyAvLy9cblxuICAgIHByb2NlZHVyZUNhbGwgPSBQcm9jZWR1cmVDYWxsLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlc0Zyb21KU09OKGpzb24sIHR5cGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgdHlwZXM6IHR5cGVzSlNPTiB9ID0ganNvbjtcblxuICBjb25zdCB7IFR5cGUgfSA9IGRvbTtcblxuICB0eXBlc0pTT04uZm9yRWFjaCgodHlwZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gdHlwZUpTT04sICAvLy9cbiAgICAgICAgICB0eXBlID0gVHlwZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHR5cGVzLnB1c2godHlwZSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHRlcm1zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgVGVybSB9ID0gZG9tLFxuICAgICAgICB0ZXJtc0pTT04gPSB0ZXJtczsgLy8vXG5cbiAgdGVybXMgPSB0ZXJtc0pTT04ubWFwKCh0ZXJtSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB0ZXJtSlNPTiwgIC8vL1xuICAgICAgICAgIHRlcm0gPSBUZXJtLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBydWxlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFJ1bGUgfSA9IGRvbSxcbiAgICBydWxlc0pTT04gPSBydWxlczsgLy8vXG5cbiAgcnVsZXMgPSBydWxlc0pTT04ubWFwKChydWxlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBydWxlSlNPTiwgIC8vL1xuICAgICAgcnVsZSA9IFJ1bGUuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJ1bGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGxhYmVsIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTGFiZWwgfSA9IGRvbSxcbiAgICAgICAgbGFiZWxKU09OID0gbGFiZWw7ICAvLy9cblxuICBqc29uID0gbGFiZWxKU09OOyAvLy9cblxuICBsYWJlbCA9IExhYmVsLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgbGFiZWxzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTGFiZWwgfSA9IGRvbSxcbiAgICAgICAgbGFiZWxzSlNPTiA9IGxhYmVsczsgIC8vL1xuXG4gIGxhYmVscyA9IGxhYmVsc0pTT04ubWFwKChsYWJlbEpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gbGFiZWxKU09OLCAvLy9cbiAgICAgICAgICBsYWJlbCA9IExhYmVsLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGxhYmVsO1xuICB9KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpb21zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBheGlvbXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBBeGlvbSB9ID0gZG9tLFxuICAgICAgICBheGlvbXNKU09OID0gYXhpb21zOyAvLy9cblxuICBheGlvbXMgPSBheGlvbXNKU09OLm1hcCgoYXhpb21KU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGF4aW9tSlNPTiwgIC8vL1xuICAgICAgICAgIGF4aW9tID0gQXhpb20uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gYXhpb207XG4gIH0pO1xuXG4gIHJldHVybiBheGlvbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcHJlbWlzZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBQcmVtaXNlIH0gPSBkb20sXG4gICAgICAgIHByZW1pc2VzSlNPTiA9IHByZW1pc2VzOyAgLy8vXG5cbiAgcHJlbWlzZXMgPSBwcmVtaXNlc0pTT04ubWFwKChwcmVtaXNlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBwcmVtaXNlSlNPTiwgLy8vXG4gICAgICAgICAgcHJlbWlzZSA9IFByZW1pc2UuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHByZW1pc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHRoZW9yZW1zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgVGhlb3JlbSB9ID0gZG9tLFxuICAgICAgICB0aGVvcmVtc0pTT04gPSB0aGVvcmVtczsgLy8vXG5cbiAgdGhlb3JlbXMgPSB0aGVvcmVtc0pTT04ubWFwKCh0aGVvcmVtSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB0aGVvcmVtSlNPTiwgIC8vL1xuICAgICAgICAgIHRoZW9yZW0gPSBUaGVvcmVtLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRoZW9yZW07XG4gIH0pO1xuXG4gIHJldHVybiB0aGVvcmVtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgdmFyaWFibGVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGRvbSxcbiAgICAgICAgdmFyaWFibGVzSlNPTiA9IHZhcmlhYmxlczsgLy8vXG5cbiAgdmFyaWFibGVzID0gdmFyaWFibGVzSlNPTi5tYXAoKHZhcmlhYmxlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB2YXJpYWJsZUpTT04sICAvLy9cbiAgICAgICAgICB2YXJpYWJsZSA9IFZhcmlhYmxlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9KTtcblxuICByZXR1cm4gdmFyaWFibGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydGllc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcHJvcGVydGllcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFByb3BlcnR5IH0gPSBkb20sXG4gICAgICAgIHByb3BlcnRpZXNKU09OID0gcHJvcGVydGllczsgLy8vXG5cbiAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNKU09OLm1hcCgocHJvcGVydHlKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHByb3BlcnR5SlNPTiwgIC8vL1xuICAgICAgICAgIHByb3BlcnR5ID0gUHJvcGVydHkuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJvcGVydHk7XG4gIH0pO1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgY29uc3QgeyBzdXBlclR5cGVzOiBzdXBlclR5cGVzSlNPTiB9ID0ganNvbjtcblxuICBjb25zdCBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0pTT04ubWFwKChzdXBlclR5cGVKU09OKSA9PiB7XG4gICAgICAgICAgY29uc3QganNvbiA9IHN1cGVyVHlwZUpTT04sICAvLy9cbiAgICAgICAgICAgICAgICB7IG5hbWUgfSA9IGpzb24sXG4gICAgICAgICAgICAgICAgc3VwZXJUeXBlTmFtZSA9IG5hbWUsICAvLy9cbiAgICAgICAgICAgICAgICBzdXBlclR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlUeXBlTmFtZShzdXBlclR5cGVOYW1lKTtcblxuICAgICAgICAgIHJldHVybiBzdXBlclR5cGU7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdXBlclR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgaHlwb3RoZXNlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IEh5cG90aGVzaXMgfSA9IGRvbSxcbiAgICAgICAgaHlwb3RoZXNlc0pTT04gPSBoeXBvdGhlc2VzOyAgLy8vXG5cbiAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNKU09OLm1hcCgoaHlwb3RoZXNpc0pTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gaHlwb3RoZXNpc0pTT04sIC8vL1xuICAgICAgICAgIGh5cG90aGVzaXMgPSBIeXBvdGhlc2lzLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXM7XG4gIH0pO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcGFyYW1ldGVycyB9ID0ganNvbjtcblxuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZG9tLFxuICAgICAgICBwYXJhbWV0ZXJzSlNPTiA9IHBhcmFtZXRlcnM7IC8vL1xuXG4gIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzSlNPTi5tYXAoKHBhcmFtZXRlckpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gcGFyYW1ldGVySlNPTiwgIC8vL1xuICAgICAgICAgIHBhcmFtZXRlciA9IFBhcmFtZXRlci5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gIH0pO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGNvbmplY3R1cmVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgQ29uamVjdHVyZSB9ID0gZG9tLFxuICAgICAgICBjb25qZWN0dXJlc0pTT04gPSBjb25qZWN0dXJlczsgLy8vXG5cbiAgY29uamVjdHVyZXMgPSBjb25qZWN0dXJlc0pTT04ubWFwKChjb25qZWN0dXJlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBjb25qZWN0dXJlSlNPTiwgIC8vL1xuICAgICAgICAgIGNvbmplY3R1cmUgPSBDb25qZWN0dXJlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGNvbmplY3R1cmU7XG4gIH0pO1xuXG4gIHJldHVybiBjb25qZWN0dXJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBjb21iaW5hdG9ycyB9ID0ganNvbjtcblxuICBjb25zdCB7IENvbWJpbmF0b3IgfSA9IGRvbSxcbiAgICAgICAgY29tYmluYXRvcnNKU09OID0gY29tYmluYXRvcnM7IC8vL1xuXG4gIGNvbWJpbmF0b3JzID0gY29tYmluYXRvcnNKU09OLm1hcCgoY29tYmluYXRvckpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gY29tYmluYXRvckpTT04sICAvLy9cbiAgICAgICAgICBjb21iaW5hdG9yID0gQ29tYmluYXRvci5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBjb21iaW5hdG9yO1xuICB9KTtcblxuICByZXR1cm4gY29tYmluYXRvcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvcnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGNvbnN0cnVjdG9ycyB9ID0ganNvbjtcblxuICBjb25zdCB7IENvbnN0cnVjdG9yIH0gPSBkb20sXG4gICAgICAgIGNvbnN0cnVjdG9yc0pTT04gPSBjb25zdHJ1Y3RvcnM7IC8vL1xuXG4gIGNvbnN0cnVjdG9ycyA9IGNvbnN0cnVjdG9yc0pTT04ubWFwKChjb25zdHJ1Y3RvckpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gY29uc3RydWN0b3JKU09OLCAgLy8vXG4gICAgICAgICAgY29uc3RydWN0b3IgPSBDb25zdHJ1Y3Rvci5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBjb25zdHJ1Y3RvcjtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9ycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF0aGVvcmVtc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgbWV0YXRoZW9yZW1zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTWV0YXRoZW9yZW0gfSA9IGRvbSxcbiAgICAgICAgbWV0YXRoZW9yZW1zSlNPTiA9IG1ldGF0aGVvcmVtczsgLy8vXG5cbiAgbWV0YXRoZW9yZW1zID0gbWV0YXRoZW9yZW1zSlNPTi5tYXAoKG1ldGF0aGVvcmVtSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBtZXRhdGhlb3JlbUpTT04sICAvLy9cbiAgICAgICAgICBtZXRhdGhlb3JlbSA9IE1ldGF0aGVvcmVtLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG1ldGF0aGVvcmVtO1xuICB9KTtcblxuICByZXR1cm4gbWV0YXRoZW9yZW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBzdXBwb3NpdGlvbnMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBTdXBwb3NpdGlvbiB9ID0gZG9tLFxuICAgICAgICBzdXBwb3NpdGlvbnNKU09OID0gc3VwcG9zaXRpb25zOyAgLy8vXG5cbiAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zSlNPTi5tYXAoKHN1cHBvc2l0aW9uSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBzdXBwb3NpdGlvbkpTT04sIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9uID0gU3VwcG9zaXRpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb247XG4gIH0pO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBzdWJzdGl0dXRpb25zID0gW10gfSA9IGpzb247ICAvLy9cblxuICBjb25zdCB7IFN0YXRlbWVudFN1YnN0aXR1dGlvbiB9ID0gZG9tLFxuICAgICAgICBzdWJzdGl0dXRpb25zSlNPTiA9IHN1YnN0aXR1dGlvbnMsICAvLy9cbiAgICAgICAgU3Vic3RpdHV0aW9uID0gU3RhdGVtZW50U3Vic3RpdHV0aW9uOyAvLy9cblxuICBzdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9uc0pTT04ubWFwKChzdWJzdGl0dXRpb25KU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHN1YnN0aXR1dGlvbkpTT04sICAvLy9cbiAgICAgICAgICBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9KTtcblxuICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IG1ldGF2YXJpYWJsZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBNZXRhdmFyaWFibGUgfSA9IGRvbSxcbiAgICAgICAgbWV0YXZhcmlhYmxlc0pTT04gPSBtZXRhdmFyaWFibGVzOyAvLy9cblxuICBtZXRhdmFyaWFibGVzID0gbWV0YXZhcmlhYmxlc0pTT04ubWFwKChtZXRhdmFyaWFibGVKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IG1ldGF2YXJpYWJsZUpTT04sICAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBNZXRhdmFyaWFibGUuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbW1hc0Zyb21Ob3RoaW5nKCkge1xuICBjb25zdCBsZW1tYXMgPSBbXTtcblxuICByZXR1cm4gbGVtbWFzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YUxlbW1hc0Zyb21Ob3RoaW5nKCkge1xuICBjb25zdCBtZXRhTGVtbWFzID0gW107XG5cbiAgcmV0dXJuIG1ldGFMZW1tYXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtVG9UZXJtSlNPTih0ZXJtKSB7XG4gIGNvbnN0IHRlcm1KU09OID0gdGVybS50b0pTT04oKTtcblxuICByZXR1cm4gdGVybUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlVG9UeXBlSlNPTih0eXBlKSB7XG4gIGNvbnN0IHR5cGVKU09OID0gKHR5cGUgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgIHR5cGUudG9KU09OKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gIHJldHVybiB0eXBlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsVG9MYWJlbEpTT04obGFiZWwpIHtcbiAgY29uc3QgbGFiZWxKU09OID0gbGFiZWwudG9KU09OKCk7XG5cbiAgcmV0dXJuIGxhYmVsSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFUeXBlVG9NZXRhVHlwZUpTT04obWV0YVR5cGUpIHtcbiAgY29uc3QgbWV0YVR5cGVKU09OID0gKG1ldGFUeXBlICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgbWV0YVR5cGUudG9KU09OKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDtcbiAgcmV0dXJuIG1ldGFUeXBlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudFRvU3RhdGVtZW50SlNPTihzdGF0ZW1lbnQpIHtcbiAgbGV0IHN0YXRlbWVudEpTT04gPSBudWxsO1xuXG4gIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnRKU09OID0gc3RhdGVtZW50LnRvSlNPTigpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudEpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04oZGVkdWN0aW9uKSB7XG4gIGNvbnN0IGRlZHVjdGlvbkpTT04gPSBkZWR1Y3Rpb24udG9KU09OKCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbkpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVUb1NpZ25hdHVyZUpTT04oc2lnbmF0dXJlKSB7XG4gIGxldCBzaWduYXR1cmVKU09OID0gbnVsbDtcblxuICBpZiAoc2lnbmF0dXJlICE9PSBudWxsKSB7XG4gICAgc2lnbmF0dXJlSlNPTiA9IHNpZ25hdHVyZS50b0pTT04oKTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmVKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2x1c2lvblRvQ29uY2x1c2lvbkpTT04oY29uY2x1c2lvbikge1xuICBjb25zdCBjb25jbHVzaW9uSlNPTiA9IGNvbmNsdXNpb24udG9KU09OKCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb25KU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlVG9NZXRhdmFyaWFibGVKU09OKG1ldGF2YXJpYWJsZSkge1xuICBjb25zdCBtZXRhdmFyaWFibGVKU09OID0gbWV0YXZhcmlhYmxlLnRvSlNPTigpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGVKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbFRvUHJvY2VkdXJlQ2FsbEpTT04ocHJvY2VkdXJlQ2FsbCkge1xuICBsZXQgcHJvY2VkdXJlQ2FsbEpTT04gPSBudWxsO1xuXG4gIGlmIChwcm9jZWR1cmVDYWxsICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbEpTT04gPSBwcm9jZWR1cmVDYWxsLnRvSlNPTigpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGxKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZXNUb1R5cGVzSlNPTih0eXBlcykge1xuICBjb25zdCB0eXBlc0pTT04gPSB0eXBlcy5tYXAoKHR5cGUpID0+IHtcbiAgICBjb25zdCB0eXBlSlNPTiA9IHR5cGUudG9KU09OKCk7XG5cbiAgICB0eXBlID0gdHlwZUpTT047IC8vL1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH0pO1xuXG4gIHJldHVybiB0eXBlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc1RvVGVybXNKU09OKHRlcm1zKSB7XG4gIGNvbnN0IHRlcm1zSlNPTiA9IHRlcm1zLm1hcCgodGVybSkgPT4ge1xuICAgIGNvbnN0IHRlcm1KU09OID0gdGVybS50b0pTT04oKTtcblxuICAgIHRlcm0gPSB0ZXJtSlNPTjsgLy8vXG5cbiAgICByZXR1cm4gdGVybTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzVG9SdWxlc0pTT04ocnVsZXMpIHtcbiAgY29uc3QgcnVsZXNKU09OID0gcnVsZXMubWFwKChydWxlKSA9PiB7XG4gICAgY29uc3QgcnVsZUpTT04gPSBydWxlLnRvSlNPTigpO1xuXG4gICAgcnVsZSA9IHJ1bGVKU09OOyAvLy9cblxuICAgIHJldHVybiBydWxlO1xuICB9KTtcblxuICByZXR1cm4gcnVsZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzVG9MYWJlbHNKU09OKGxhYmVscykge1xuICBjb25zdCBsYWJlbHNKU09OID0gbGFiZWxzLm1hcCgobGFiZWwpID0+IHtcbiAgICBjb25zdCBsYWJlbEpTT04gPSBsYWJlbC50b0pTT04oKTtcblxuICAgIHJldHVybiBsYWJlbEpTT047XG4gIH0pO1xuXG4gIHJldHVybiBsYWJlbHNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpb21zVG9BeGlvbXNKU09OKGF4aW9tcykge1xuICBjb25zdCBheGlvbXNKU09OID0gYXhpb21zLm1hcCgoYXhpb20pID0+IHtcbiAgICBjb25zdCBheGlvbUpTT04gPSBheGlvbS50b0pTT04oKTtcblxuICAgIGF4aW9tID0gYXhpb21KU09OOyAvLy9cblxuICAgIHJldHVybiBheGlvbTtcbiAgfSk7XG5cbiAgcmV0dXJuIGF4aW9tc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc1RvUHJlbWlzZXNKU09OKHByZW1pc2VzKSB7XG4gIGNvbnN0IHByZW1pc2VzSlNPTiA9IHByZW1pc2VzLm1hcCgocHJlbWlzZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2VKU09OID0gcHJlbWlzZS50b0pTT04oKTtcblxuICAgIHJldHVybiBwcmVtaXNlSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHByZW1pc2VzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoZW9yZW1zVG9UaGVvcmVtc0pTT04odGhlb3JlbXMpIHtcbiAgY29uc3QgdGhlb3JlbXNKU09OID0gdGhlb3JlbXMubWFwKCh0aGVvcmVtKSA9PiB7XG4gICAgY29uc3QgdGhlb3JlbUpTT04gPSB0aGVvcmVtLnRvSlNPTigpO1xuXG4gICAgdGhlb3JlbSA9IHRoZW9yZW1KU09OOyAvLy9cblxuICAgIHJldHVybiB0aGVvcmVtO1xuICB9KTtcblxuICByZXR1cm4gdGhlb3JlbXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVzVG9WYXJpYWJsZXNKU09OKHZhcmlhYmxlcykge1xuICBjb25zdCB2YXJpYWJsZXNKU09OID0gdmFyaWFibGVzLm1hcCgodmFyaWFibGUpID0+IHtcbiAgICBjb25zdCB2YXJpYWJsZUpTT04gPSB2YXJpYWJsZS50b0pTT04oKTtcblxuICAgIHZhcmlhYmxlID0gdmFyaWFibGVKU09OOyAgLy8vXG5cbiAgICByZXR1cm4gdmFyaWFibGU7XG4gIH0pO1xuXG4gIHJldHVybiB2YXJpYWJsZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04oaHlwb3RoZXNlcykge1xuICBjb25zdCBoeXBvdGhlc2VzSlNPTiA9IGh5cG90aGVzZXMubWFwKChoeXBvdGhlc2lzKSA9PiB7XG4gICAgY29uc3QgaHlwb3RoZXNpc0pTT04gPSBoeXBvdGhlc2lzLnRvSlNPTigpO1xuXG4gICAgaHlwb3RoZXNpcyA9IGh5cG90aGVzaXNKU09OOyAvLy9cblxuICAgIHJldHVybiBoeXBvdGhlc2lzO1xuICB9KTtcblxuICByZXR1cm4gaHlwb3RoZXNlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzVG9TdXBlclR5cGVzSlNPTihzdXBlclR5cGVzKSB7XG4gIGNvbnN0IHN1cGVyVHlwZXNKU09OID0gc3VwZXJUeXBlcy5tYXAoKHN1cGVyVHlwZSkgPT4ge1xuICAgIGNvbnN0IHN1cGVyVHlwZUpTT04gPSBzdXBlclR5cGUudG9KU09OKCk7XG5cbiAgICBzdXBlclR5cGUgPSBzdXBlclR5cGVKU09OOyAvLy9cblxuICAgIHJldHVybiBzdXBlclR5cGU7XG4gIH0pO1xuXG4gIHJldHVybiBzdXBlclR5cGVzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNUb1BhcmFtZXRlcnNKU09OKHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgcGFyYW1ldGVyc0pTT04gPSBwYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVySlNPTiA9IHBhcmFtZXRlci50b0pTT04oKTtcblxuICAgIHBhcmFtZXRlciA9IHBhcmFtZXRlckpTT047ICAvLy9cblxuICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gIH0pO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNUb1Byb3BlcnRpZXNKU09OKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgcHJvcGVydGllc0pTT04gPSBwcm9wZXJ0aWVzLm1hcCgocHJvcGVydHkpID0+IHtcbiAgICBjb25zdCBwcm9wZXJ0eUpTT04gPSBwcm9wZXJ0eS50b0pTT04oKTtcblxuICAgIHByb3BlcnR5ID0gcHJvcGVydHlKU09OOyAgLy8vXG5cbiAgICByZXR1cm4gcHJvcGVydHk7XG4gIH0pO1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmplY3R1cmVzVG9Db25qZWN0dXJlc0pTT04oY29uamVjdHVyZXMpIHtcbiAgY29uc3QgY29uamVjdHVyZXNKU09OID0gY29uamVjdHVyZXMubWFwKChjb25qZWN0dXJlKSA9PiB7XG4gICAgY29uc3QgY29uamVjdHVyZUpTT04gPSBjb25qZWN0dXJlLnRvSlNPTigpO1xuXG4gICAgY29uamVjdHVyZSA9IGNvbmplY3R1cmVKU09OOyAvLy9cblxuICAgIHJldHVybiBjb25qZWN0dXJlO1xuICB9KTtcblxuICByZXR1cm4gY29uamVjdHVyZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvcnNUb0NvbWJpbmF0b3JzSlNPTihjb21iaW5hdG9ycykge1xuICBjb25zdCBjb21iaW5hdG9yc0pTT04gPSBjb21iaW5hdG9ycy5tYXAoKGNvbWJpbmF0b3IpID0+IHtcbiAgICBjb25zdCBjb21iaW5hdG9ySlNPTiA9IGNvbWJpbmF0b3IudG9KU09OKCk7XG5cbiAgICBjb21iaW5hdG9yID0gY29tYmluYXRvckpTT047IC8vL1xuXG4gICAgcmV0dXJuIGNvbWJpbmF0b3I7XG4gIH0pO1xuXG4gIHJldHVybiBjb21iaW5hdG9yc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04oc3VwcG9zaXRpb25zKSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uc0pTT04gPSBzdXBwb3NpdGlvbnMubWFwKChzdXBwb3NpdGlvbikgPT4ge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uSlNPTiA9IHN1cHBvc2l0aW9uLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9uc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvcnNUb0NvbnN0cnVjdG9yc0pTT04oY29uc3RydWN0b3JzKSB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yc0pTT04gPSBjb25zdHJ1Y3RvcnMubWFwKChjb25zdHJ1Y3RvcikgPT4ge1xuICAgIGNvbnN0IGNvbnN0cnVjdG9ySlNPTiA9IGNvbnN0cnVjdG9yLnRvSlNPTigpO1xuXG4gICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvckpTT047ICAvLy9cblxuICAgIHJldHVybiBjb25zdHJ1Y3RvcjtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdGhlb3JlbXNUb01ldGF0aGVvcmVtc0pTT04obWV0YXRoZW9yZW1zKSB7XG4gIGNvbnN0IG1ldGF0aGVvcmVtc0pTT04gPSBtZXRhdGhlb3JlbXMubWFwKChtZXRhdGhlb3JlbSkgPT4ge1xuICAgIGNvbnN0IG1ldGF0aGVvcmVtSlNPTiA9IG1ldGF0aGVvcmVtLnRvSlNPTigpO1xuXG4gICAgbWV0YXRoZW9yZW0gPSBtZXRhdGhlb3JlbUpTT047IC8vL1xuXG4gICAgcmV0dXJuIG1ldGF0aGVvcmVtO1xuICB9KTtcblxuICByZXR1cm4gbWV0YXRoZW9yZW1zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OKHN1YnN0aXR1dGlvbnMpIHtcbiAgY29uc3Qgc3Vic3RpdHV0aW9uc0pTT04gPSBzdWJzdGl0dXRpb25zLm1hcFN1YnN0aXR1dGlvbigoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uSlNPTiA9IHN1YnN0aXR1dGlvbi50b0pTT04oKTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb25KU09OO1xuICB9KTtcblxuICByZXR1cm4gc3Vic3RpdHV0aW9uc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVzVG9NZXRhdmFyaWFibGVzSlNPTihtZXRhdmFyaWFibGVzKSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZXNKU09OID0gbWV0YXZhcmlhYmxlcy5tYXAoKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZUpTT04gPSBtZXRhdmFyaWFibGUudG9KU09OKCk7XG5cbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVKU09OOyAgLy8vXG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlc0pTT047XG59XG4iXSwibmFtZXMiOlsiYXhpb21zRnJvbUpTT04iLCJheGlvbXNUb0F4aW9tc0pTT04iLCJjb21iaW5hdG9yc0Zyb21KU09OIiwiY29tYmluYXRvcnNUb0NvbWJpbmF0b3JzSlNPTiIsImNvbmNsdXNpb25Gcm9tSlNPTiIsImNvbmNsdXNpb25Ub0NvbmNsdXNpb25KU09OIiwiY29uamVjdHVyZXNGcm9tSlNPTiIsImNvbmplY3R1cmVzVG9Db25qZWN0dXJlc0pTT04iLCJjb25zdHJ1Y3RvcnNGcm9tSlNPTiIsImNvbnN0cnVjdG9yc1RvQ29uc3RydWN0b3JzSlNPTiIsImRlZHVjdGlvbkZyb21KU09OIiwiZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OIiwiaHlwb3RoZXNlc0Zyb21KU09OIiwiaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04iLCJsYWJlbEZyb21KU09OIiwibGFiZWxUb0xhYmVsSlNPTiIsImxhYmVsc0Zyb21KU09OIiwibGFiZWxzVG9MYWJlbHNKU09OIiwibGVtbWFzRnJvbU5vdGhpbmciLCJtZXRhTGVtbWFzRnJvbU5vdGhpbmciLCJtZXRhVHlwZUZyb21KU09OIiwibWV0YVR5cGVUb01ldGFUeXBlSlNPTiIsIm1ldGF0aGVvcmVtc0Zyb21KU09OIiwibWV0YXRoZW9yZW1zVG9NZXRhdGhlb3JlbXNKU09OIiwibWV0YXZhcmlhYmxlRnJvbUpTT04iLCJtZXRhdmFyaWFibGVUb01ldGF2YXJpYWJsZUpTT04iLCJtZXRhdmFyaWFibGVzRnJvbUpTT04iLCJtZXRhdmFyaWFibGVzVG9NZXRhdmFyaWFibGVzSlNPTiIsInBhcmFtZXRlcnNGcm9tSlNPTiIsInBhcmFtZXRlcnNUb1BhcmFtZXRlcnNKU09OIiwicHJlbWlzZXNGcm9tSlNPTiIsInByZW1pc2VzVG9QcmVtaXNlc0pTT04iLCJwcm9jZWR1cmVDYWxsRnJvbUpTT04iLCJwcm9jZWR1cmVDYWxsVG9Qcm9jZWR1cmVDYWxsSlNPTiIsInByb3BlcnRpZXNGcm9tSlNPTiIsInByb3BlcnRpZXNUb1Byb3BlcnRpZXNKU09OIiwicmVmZXJlbmNlRnJvbUpTT04iLCJydWxlc0Zyb21KU09OIiwicnVsZXNUb1J1bGVzSlNPTiIsInNpZ25hdHVyZUZyb21KU09OIiwic2lnbmF0dXJlVG9TaWduYXR1cmVKU09OIiwic3RhdGVtZW50RnJvbUpTT04iLCJzdGF0ZW1lbnRUb1N0YXRlbWVudEpTT04iLCJzdWJzdGl0dXRpb25zRnJvbUpTT04iLCJzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTiIsInN1cGVyVHlwZXNGcm9tSlNPTiIsInN1cGVyVHlwZXNUb1N1cGVyVHlwZXNKU09OIiwic3VwcG9zaXRpb25zRnJvbUpTT04iLCJzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04iLCJ0ZXJtRnJvbUpTT04iLCJ0ZXJtVG9UZXJtSlNPTiIsInRlcm1zRnJvbUpTT04iLCJ0ZXJtc1RvVGVybXNKU09OIiwidGhlb3JlbXNGcm9tSlNPTiIsInRoZW9yZW1zVG9UaGVvcmVtc0pTT04iLCJ0eXBlRnJvbUpTT04iLCJ0eXBlVG9UeXBlSlNPTiIsInR5cGVzRnJvbUpTT04iLCJ0eXBlc1RvVHlwZXNKU09OIiwidmFyaWFibGVzRnJvbUpTT04iLCJ2YXJpYWJsZXNUb1ZhcmlhYmxlc0pTT04iLCJqc29uIiwiY29udGV4dCIsInRlcm0iLCJ0ZXJtSlNPTiIsIlRlcm0iLCJkb20iLCJmcm9tSlNPTiIsInR5cGUiLCJuYW1lIiwidHlwZU5hbWUiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJtZXRhVHlwZSIsIm1ldGFUeXBlTmFtZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwic3RhdGVtZW50IiwiU3RhdGVtZW50Iiwic3RhdGVtZW50SlNPTiIsInJlZmVyZW5jZSIsIlJlZmVyZW5jZSIsInJlZmVyZW5jZUpTT04iLCJkZWR1Y3Rpb24iLCJEZWR1Y3Rpb24iLCJkZWR1Y3Rpb25KU09OIiwic2lnbmF0dXJlIiwiU2lnbmF0dXJlIiwic2lnbmF0dXJlSlNPTiIsImNvbmNsdXNpb24iLCJDb25jbHVzaW9uIiwiY29uY2x1c2lvbkpTT04iLCJtZXRhdmFyaWFibGUiLCJNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVKU09OIiwicHJvY2VkdXJlQ2FsbCIsIlByb2NlZHVyZUNhbGwiLCJwcm9jZWR1cmVDYWxsSlNPTiIsInR5cGVzIiwidHlwZXNKU09OIiwiVHlwZSIsImZvckVhY2giLCJ0eXBlSlNPTiIsInB1c2giLCJ0ZXJtcyIsInRlcm1zSlNPTiIsIm1hcCIsInJ1bGVzIiwiUnVsZSIsInJ1bGVzSlNPTiIsInJ1bGVKU09OIiwicnVsZSIsImxhYmVsIiwiTGFiZWwiLCJsYWJlbEpTT04iLCJsYWJlbHMiLCJsYWJlbHNKU09OIiwiYXhpb21zIiwiQXhpb20iLCJheGlvbXNKU09OIiwiYXhpb21KU09OIiwiYXhpb20iLCJwcmVtaXNlcyIsIlByZW1pc2UiLCJwcmVtaXNlc0pTT04iLCJwcmVtaXNlSlNPTiIsInByZW1pc2UiLCJ0aGVvcmVtcyIsIlRoZW9yZW0iLCJ0aGVvcmVtc0pTT04iLCJ0aGVvcmVtSlNPTiIsInRoZW9yZW0iLCJ2YXJpYWJsZXMiLCJWYXJpYWJsZSIsInZhcmlhYmxlc0pTT04iLCJ2YXJpYWJsZUpTT04iLCJ2YXJpYWJsZSIsInByb3BlcnRpZXMiLCJQcm9wZXJ0eSIsInByb3BlcnRpZXNKU09OIiwicHJvcGVydHlKU09OIiwicHJvcGVydHkiLCJzdXBlclR5cGVzIiwic3VwZXJUeXBlc0pTT04iLCJzdXBlclR5cGVKU09OIiwic3VwZXJUeXBlTmFtZSIsInN1cGVyVHlwZSIsImh5cG90aGVzZXMiLCJIeXBvdGhlc2lzIiwiaHlwb3RoZXNlc0pTT04iLCJoeXBvdGhlc2lzSlNPTiIsImh5cG90aGVzaXMiLCJwYXJhbWV0ZXJzIiwiUGFyYW1ldGVyIiwicGFyYW1ldGVyc0pTT04iLCJwYXJhbWV0ZXJKU09OIiwicGFyYW1ldGVyIiwiY29uamVjdHVyZXMiLCJDb25qZWN0dXJlIiwiY29uamVjdHVyZXNKU09OIiwiY29uamVjdHVyZUpTT04iLCJjb25qZWN0dXJlIiwiY29tYmluYXRvcnMiLCJDb21iaW5hdG9yIiwiY29tYmluYXRvcnNKU09OIiwiY29tYmluYXRvckpTT04iLCJjb21iaW5hdG9yIiwiY29uc3RydWN0b3JzIiwiQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvcnNKU09OIiwiY29uc3RydWN0b3JKU09OIiwiY29uc3RydWN0b3IiLCJtZXRhdGhlb3JlbXMiLCJNZXRhdGhlb3JlbSIsIm1ldGF0aGVvcmVtc0pTT04iLCJtZXRhdGhlb3JlbUpTT04iLCJtZXRhdGhlb3JlbSIsInN1cHBvc2l0aW9ucyIsIlN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25zSlNPTiIsInN1cHBvc2l0aW9uSlNPTiIsInN1cHBvc2l0aW9uIiwic3Vic3RpdHV0aW9ucyIsIlN0YXRlbWVudFN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbnNKU09OIiwiU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uSlNPTiIsInN1YnN0aXR1dGlvbiIsIm1ldGF2YXJpYWJsZXMiLCJtZXRhdmFyaWFibGVzSlNPTiIsImxlbW1hcyIsIm1ldGFMZW1tYXMiLCJ0b0pTT04iLCJtZXRhVHlwZUpTT04iLCJtYXBTdWJzdGl0dXRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQXVOZ0JBO2VBQUFBOztRQXFYQUM7ZUFBQUE7O1FBdE9BQztlQUFBQTs7UUFnVkFDO2VBQUFBOztRQWxsQkFDO2VBQUFBOztRQW9hQUM7ZUFBQUE7O1FBbExBQztlQUFBQTs7UUFvVkFDO2VBQUFBOztRQXBUQUM7ZUFBQUE7O1FBc1ZBQztlQUFBQTs7UUFwb0JBQztlQUFBQTs7UUFnYkFDO2VBQUFBOztRQWxNQUM7ZUFBQUE7O1FBb1VBQztlQUFBQTs7UUFoY0FDO2VBQUFBOztRQXVTQUM7ZUFBQUE7O1FBMVJBQztlQUFBQTs7UUEyWEFDO2VBQUFBOztRQTNIQUM7ZUFBQUE7O1FBTUFDO2VBQUFBOztRQTlhQUM7ZUFBQUE7O1FBd2NBQztlQUFBQTs7UUFqR0FDO2VBQUFBOztRQWtWQUM7ZUFBQUE7O1FBdm1CQUM7ZUFBQUE7O1FBNlpBQztlQUFBQTs7UUF2RkFDO2VBQUFBOztRQXVUQUM7ZUFBQUE7O1FBeGFBQztlQUFBQTs7UUE0VUFDO2VBQUFBOztRQTNhQUM7ZUFBQUE7O1FBaVhBQztlQUFBQTs7UUExZEFDO2VBQUFBOztRQXNaQUM7ZUFBQUE7O1FBN1BBQztlQUFBQTs7UUF1WUFDO2VBQUFBOztRQW5tQkFDO2VBQUFBOztRQStHQUM7ZUFBQUE7O1FBNFlBQztlQUFBQTs7UUFqZUFDO2VBQUFBOztRQXlhQUM7ZUFBQUE7O1FBbGRBQztlQUFBQTs7UUFrY0FDO2VBQUFBOztRQXhFQUM7ZUFBQUE7O1FBOFRBQztlQUFBQTs7UUE3YkFDO2VBQUFBOztRQStWQUM7ZUFBQUE7O1FBaFBBQztlQUFBQTs7UUE0U0FDO2VBQUFBOztRQTlyQkFDO2VBQUFBOztRQStjQUM7ZUFBQUE7O1FBelRBQztlQUFBQTs7UUFnWkFDO2VBQUFBOztRQW5UQUM7ZUFB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
|
|
686
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvanNvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGRvbSBmcm9tIFwiLi4vZG9tXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyB0ZXJtIH0gPSBqc29uO1xuXG4gIGNvbnN0IHRlcm1KU09OID0gdGVybTsgIC8vL1xuXG4gIGpzb24gPSB0ZXJtSlNPTjsgIC8vL1xuXG4gIGNvbnN0IHsgVGVybSB9ID0gZG9tO1xuXG4gIHRlcm0gPSBUZXJtLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgdHlwZSB9ID0ganNvbjtcblxuICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgbmFtZSB9ID0gdHlwZSxcbiAgICAgICAgICB0eXBlTmFtZSA9IG5hbWU7ICAvLy9cblxuICAgIHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFUeXBlRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBtZXRhVHlwZSB9ID0ganNvbjtcblxuICBpZiAobWV0YVR5cGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IG5hbWUgfSA9IG1ldGFUeXBlLFxuICAgICAgICAgIG1ldGFUeXBlTmFtZSA9IG5hbWU7ICAvLy9cblxuICAgIG1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGFUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBzdGF0ZW1lbnQgPSBudWxsIH0gPSBqc29uO1xuXG4gIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFN0YXRlbWVudCB9ID0gZG9tLFxuICAgICAgICAgIHN0YXRlbWVudEpTT04gPSBzdGF0ZW1lbnQ7ICAvLy9cblxuICAgIGpzb24gPSBzdGF0ZW1lbnRKU09OOyAvLy9cblxuICAgIHN0YXRlbWVudCA9IFN0YXRlbWVudC5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHJlZmVyZW5jZSB9ID0ganNvbjtcblxuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZG9tLFxuICAgICAgICByZWZlcmVuY2VKU09OID0gcmVmZXJlbmNlOyAgLy8vXG5cbiAganNvbiA9IHJlZmVyZW5jZUpTT047ICAvLy9cblxuICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgZGVkdWN0aW9uIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgRGVkdWN0aW9uIH0gPSBkb20sXG4gICAgICAgIGRlZHVjdGlvbkpTT04gPSBkZWR1Y3Rpb247ICAvLy9cblxuICBqc29uID0gZGVkdWN0aW9uSlNPTjsgIC8vL1xuXG4gIGRlZHVjdGlvbiA9IERlZHVjdGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBzaWduYXR1cmUgPSBudWxsIH0gPSBqc29uO1xuXG4gIGlmIChzaWduYXR1cmUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZG9tLFxuICAgICAgICAgIHNpZ25hdHVyZUpTT04gPSBzaWduYXR1cmU7ICAvLy9cblxuICAgIGpzb24gPSBzaWduYXR1cmVKU09OOyAvLy9cblxuICAgIHNpZ25hdHVyZSA9IFNpZ25hdHVyZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jbHVzaW9uRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBjb25jbHVzaW9uIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgQ29uY2x1c2lvbiB9ID0gZG9tLFxuICAgICAgICBjb25jbHVzaW9uSlNPTiA9IGNvbmNsdXNpb247ICAvLy9cblxuICBqc29uID0gY29uY2x1c2lvbkpTT047ICAvLy9cblxuICBjb25jbHVzaW9uID0gQ29uY2x1c2lvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29uY2x1c2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgbWV0YXZhcmlhYmxlIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBkb20sXG4gICAgICAgIG1ldGF2YXJpYWJsZUpTT04gPSBtZXRhdmFyaWFibGU7ICAvLy9cblxuICBqc29uID0gbWV0YXZhcmlhYmxlSlNPTjsgLy8vXG5cbiAgbWV0YXZhcmlhYmxlID0gTWV0YXZhcmlhYmxlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBwcm9jZWR1cmVDYWxsID0gbnVsbCB9ID0ganNvbjtcblxuICBpZiAocHJvY2VkdXJlQ2FsbCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgUHJvY2VkdXJlQ2FsbCB9ID0gZG9tLFxuICAgICAgICAgIHByb2NlZHVyZUNhbGxKU09OID0gcHJvY2VkdXJlQ2FsbDsgIC8vL1xuXG4gICAganNvbiA9IHByb2NlZHVyZUNhbGxKU09OOyAvLy9cblxuICAgIHByb2NlZHVyZUNhbGwgPSBQcm9jZWR1cmVDYWxsLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlc0Zyb21KU09OKGpzb24sIHR5cGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgdHlwZXM6IHR5cGVzSlNPTiB9ID0ganNvbjtcblxuICBjb25zdCB7IFR5cGUgfSA9IGRvbTtcblxuICB0eXBlc0pTT04uZm9yRWFjaCgodHlwZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gdHlwZUpTT04sICAvLy9cbiAgICAgICAgICB0eXBlID0gVHlwZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHR5cGVzLnB1c2godHlwZSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHRlcm1zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgVGVybSB9ID0gZG9tLFxuICAgICAgICB0ZXJtc0pTT04gPSB0ZXJtczsgLy8vXG5cbiAgdGVybXMgPSB0ZXJtc0pTT04ubWFwKCh0ZXJtSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB0ZXJtSlNPTiwgIC8vL1xuICAgICAgICAgIHRlcm0gPSBUZXJtLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBydWxlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFJ1bGUgfSA9IGRvbSxcbiAgICBydWxlc0pTT04gPSBydWxlczsgLy8vXG5cbiAgcnVsZXMgPSBydWxlc0pTT04ubWFwKChydWxlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBydWxlSlNPTiwgIC8vL1xuICAgICAgcnVsZSA9IFJ1bGUuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJ1bGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGxhYmVsIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTGFiZWwgfSA9IGRvbSxcbiAgICAgICAgbGFiZWxKU09OID0gbGFiZWw7ICAvLy9cblxuICBqc29uID0gbGFiZWxKU09OOyAvLy9cblxuICBsYWJlbCA9IExhYmVsLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgbGFiZWxzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTGFiZWwgfSA9IGRvbSxcbiAgICAgICAgbGFiZWxzSlNPTiA9IGxhYmVsczsgIC8vL1xuXG4gIGxhYmVscyA9IGxhYmVsc0pTT04ubWFwKChsYWJlbEpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gbGFiZWxKU09OLCAvLy9cbiAgICAgICAgICBsYWJlbCA9IExhYmVsLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGxhYmVsO1xuICB9KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpb21zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBheGlvbXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBBeGlvbSB9ID0gZG9tLFxuICAgICAgICBheGlvbXNKU09OID0gYXhpb21zOyAvLy9cblxuICBheGlvbXMgPSBheGlvbXNKU09OLm1hcCgoYXhpb21KU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGF4aW9tSlNPTiwgIC8vL1xuICAgICAgICAgIGF4aW9tID0gQXhpb20uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gYXhpb207XG4gIH0pO1xuXG4gIHJldHVybiBheGlvbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcHJlbWlzZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBQcmVtaXNlIH0gPSBkb20sXG4gICAgICAgIHByZW1pc2VzSlNPTiA9IHByZW1pc2VzOyAgLy8vXG5cbiAgcHJlbWlzZXMgPSBwcmVtaXNlc0pTT04ubWFwKChwcmVtaXNlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBwcmVtaXNlSlNPTiwgLy8vXG4gICAgICAgICAgcHJlbWlzZSA9IFByZW1pc2UuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHByZW1pc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHRoZW9yZW1zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgVGhlb3JlbSB9ID0gZG9tLFxuICAgICAgICB0aGVvcmVtc0pTT04gPSB0aGVvcmVtczsgLy8vXG5cbiAgdGhlb3JlbXMgPSB0aGVvcmVtc0pTT04ubWFwKCh0aGVvcmVtSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB0aGVvcmVtSlNPTiwgIC8vL1xuICAgICAgICAgIHRoZW9yZW0gPSBUaGVvcmVtLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRoZW9yZW07XG4gIH0pO1xuXG4gIHJldHVybiB0aGVvcmVtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgdmFyaWFibGVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGRvbSxcbiAgICAgICAgdmFyaWFibGVzSlNPTiA9IHZhcmlhYmxlczsgLy8vXG5cbiAgdmFyaWFibGVzID0gdmFyaWFibGVzSlNPTi5tYXAoKHZhcmlhYmxlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB2YXJpYWJsZUpTT04sICAvLy9cbiAgICAgICAgICB2YXJpYWJsZSA9IFZhcmlhYmxlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9KTtcblxuICByZXR1cm4gdmFyaWFibGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydGllc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcHJvcGVydGllcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFByb3BlcnR5IH0gPSBkb20sXG4gICAgICAgIHByb3BlcnRpZXNKU09OID0gcHJvcGVydGllczsgLy8vXG5cbiAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNKU09OLm1hcCgocHJvcGVydHlKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHByb3BlcnR5SlNPTiwgIC8vL1xuICAgICAgICAgIHByb3BlcnR5ID0gUHJvcGVydHkuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJvcGVydHk7XG4gIH0pO1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgY29uc3QgeyBzdXBlclR5cGVzOiBzdXBlclR5cGVzSlNPTiB9ID0ganNvbjtcblxuICBjb25zdCBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0pTT04ubWFwKChzdXBlclR5cGVKU09OKSA9PiB7XG4gICAgICAgICAgY29uc3QganNvbiA9IHN1cGVyVHlwZUpTT04sICAvLy9cbiAgICAgICAgICAgICAgICB7IG5hbWUgfSA9IGpzb24sXG4gICAgICAgICAgICAgICAgc3VwZXJUeXBlTmFtZSA9IG5hbWUsICAvLy9cbiAgICAgICAgICAgICAgICBzdXBlclR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlUeXBlTmFtZShzdXBlclR5cGVOYW1lKTtcblxuICAgICAgICAgIHJldHVybiBzdXBlclR5cGU7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdXBlclR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgaHlwb3RoZXNlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IEh5cG90aGVzaXMgfSA9IGRvbSxcbiAgICAgICAgaHlwb3RoZXNlc0pTT04gPSBoeXBvdGhlc2VzOyAgLy8vXG5cbiAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNKU09OLm1hcCgoaHlwb3RoZXNpc0pTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gaHlwb3RoZXNpc0pTT04sIC8vL1xuICAgICAgICAgIGh5cG90aGVzaXMgPSBIeXBvdGhlc2lzLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXM7XG4gIH0pO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgcGFyYW1ldGVycyB9ID0ganNvbjtcblxuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZG9tLFxuICAgICAgICBwYXJhbWV0ZXJzSlNPTiA9IHBhcmFtZXRlcnM7IC8vL1xuXG4gIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzSlNPTi5tYXAoKHBhcmFtZXRlckpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gcGFyYW1ldGVySlNPTiwgIC8vL1xuICAgICAgICAgIHBhcmFtZXRlciA9IFBhcmFtZXRlci5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gIH0pO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGNvbmplY3R1cmVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgQ29uamVjdHVyZSB9ID0gZG9tLFxuICAgICAgICBjb25qZWN0dXJlc0pTT04gPSBjb25qZWN0dXJlczsgLy8vXG5cbiAgY29uamVjdHVyZXMgPSBjb25qZWN0dXJlc0pTT04ubWFwKChjb25qZWN0dXJlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBjb25qZWN0dXJlSlNPTiwgIC8vL1xuICAgICAgICAgIGNvbmplY3R1cmUgPSBDb25qZWN0dXJlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGNvbmplY3R1cmU7XG4gIH0pO1xuXG4gIHJldHVybiBjb25qZWN0dXJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBjb21iaW5hdG9ycyB9ID0ganNvbjtcblxuICBjb25zdCB7IENvbWJpbmF0b3IgfSA9IGRvbSxcbiAgICAgICAgY29tYmluYXRvcnNKU09OID0gY29tYmluYXRvcnM7IC8vL1xuXG4gIGNvbWJpbmF0b3JzID0gY29tYmluYXRvcnNKU09OLm1hcCgoY29tYmluYXRvckpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gY29tYmluYXRvckpTT04sICAvLy9cbiAgICAgICAgICBjb21iaW5hdG9yID0gQ29tYmluYXRvci5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBjb21iaW5hdG9yO1xuICB9KTtcblxuICByZXR1cm4gY29tYmluYXRvcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQWxpYXNlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgdHlwZUFsaWFzZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBUeXBlQWxpYXMgfSA9IGRvbSxcbiAgICAgICAgdHlwZUFsaWFzZXNKU09OID0gdHlwZUFsaWFzZXM7IC8vL1xuXG4gIHR5cGVBbGlhc2VzID0gdHlwZUFsaWFzZXNKU09OLm1hcCgodHlwZUFsaWFzSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB0eXBlQWxpYXNKU09OLCAgLy8vXG4gICAgICAgICAgdHlwZUFsaWFzID0gVHlwZUFsaWFzLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHR5cGVBbGlhcztcbiAgfSk7XG5cbiAgcmV0dXJuIHR5cGVBbGlhc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBjb25zdHJ1Y3RvcnMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBDb25zdHJ1Y3RvciB9ID0gZG9tLFxuICAgICAgICBjb25zdHJ1Y3RvcnNKU09OID0gY29uc3RydWN0b3JzOyAvLy9cblxuICBjb25zdHJ1Y3RvcnMgPSBjb25zdHJ1Y3RvcnNKU09OLm1hcCgoY29uc3RydWN0b3JKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGNvbnN0cnVjdG9ySlNPTiwgIC8vL1xuICAgICAgICAgIGNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3IuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3I7XG4gIH0pO1xuXG4gIHJldHVybiBjb25zdHJ1Y3RvcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdGhlb3JlbXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IG1ldGF0aGVvcmVtcyB9ID0ganNvbjtcblxuICBjb25zdCB7IE1ldGF0aGVvcmVtIH0gPSBkb20sXG4gICAgICAgIG1ldGF0aGVvcmVtc0pTT04gPSBtZXRhdGhlb3JlbXM7IC8vL1xuXG4gIG1ldGF0aGVvcmVtcyA9IG1ldGF0aGVvcmVtc0pTT04ubWFwKChtZXRhdGhlb3JlbUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gbWV0YXRoZW9yZW1KU09OLCAgLy8vXG4gICAgICAgICAgbWV0YXRoZW9yZW0gPSBNZXRhdGhlb3JlbS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBtZXRhdGhlb3JlbTtcbiAgfSk7XG5cbiAgcmV0dXJuIG1ldGF0aGVvcmVtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgc3VwcG9zaXRpb25zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgU3VwcG9zaXRpb24gfSA9IGRvbSxcbiAgICAgICAgc3VwcG9zaXRpb25zSlNPTiA9IHN1cHBvc2l0aW9uczsgIC8vL1xuXG4gIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0pTT04ubWFwKChzdXBwb3NpdGlvbkpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gc3VwcG9zaXRpb25KU09OLCAvLy9cbiAgICAgICAgICBzdXBwb3NpdGlvbiA9IFN1cHBvc2l0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uO1xuICB9KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RpdHV0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgc3Vic3RpdHV0aW9ucyA9IFtdIH0gPSBqc29uOyAgLy8vXG5cbiAgY29uc3QgeyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24gfSA9IGRvbSxcbiAgICAgICAgc3Vic3RpdHV0aW9uc0pTT04gPSBzdWJzdGl0dXRpb25zLCAgLy8vXG4gICAgICAgIFN1YnN0aXR1dGlvbiA9IFN0YXRlbWVudFN1YnN0aXR1dGlvbjsgLy8vXG5cbiAgc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnNKU09OLm1hcCgoc3Vic3RpdHV0aW9uSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBzdWJzdGl0dXRpb25KU09OLCAgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gU3Vic3RpdHV0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN1YnN0aXR1dGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBtZXRhdmFyaWFibGVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBkb20sXG4gICAgICAgIG1ldGF2YXJpYWJsZXNKU09OID0gbWV0YXZhcmlhYmxlczsgLy8vXG5cbiAgbWV0YXZhcmlhYmxlcyA9IG1ldGF2YXJpYWJsZXNKU09OLm1hcCgobWV0YXZhcmlhYmxlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBtZXRhdmFyaWFibGVKU09OLCAgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gTWV0YXZhcmlhYmxlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYXNGcm9tTm90aGluZygpIHtcbiAgY29uc3QgbGVtbWFzID0gW107XG5cbiAgcmV0dXJuIGxlbW1hcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZW1tYXNGcm9tTm90aGluZygpIHtcbiAgY29uc3QgbWV0YUxlbW1hcyA9IFtdO1xuXG4gIHJldHVybiBtZXRhTGVtbWFzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVRvVGVybUpTT04odGVybSkge1xuICBjb25zdCB0ZXJtSlNPTiA9IHRlcm0udG9KU09OKCk7XG5cbiAgcmV0dXJuIHRlcm1KU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVRvVHlwZUpTT04odHlwZSkge1xuICBjb25zdCB0eXBlSlNPTiA9ICh0eXBlICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICB0eXBlLnRvSlNPTigpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgbnVsbDtcblxuICByZXR1cm4gdHlwZUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbFRvTGFiZWxKU09OKGxhYmVsKSB7XG4gIGNvbnN0IGxhYmVsSlNPTiA9IGxhYmVsLnRvSlNPTigpO1xuXG4gIHJldHVybiBsYWJlbEpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhVHlwZVRvTWV0YVR5cGVKU09OKG1ldGFUeXBlKSB7XG4gIGNvbnN0IG1ldGFUeXBlSlNPTiA9IChtZXRhVHlwZSAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFUeXBlLnRvSlNPTigpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG4gIHJldHVybiBtZXRhVHlwZUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRUb1N0YXRlbWVudEpTT04oc3RhdGVtZW50KSB7XG4gIGxldCBzdGF0ZW1lbnRKU09OID0gbnVsbDtcblxuICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50SlNPTiA9IHN0YXRlbWVudC50b0pTT04oKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OKGRlZHVjdGlvbikge1xuICBjb25zdCBkZWR1Y3Rpb25KU09OID0gZGVkdWN0aW9uLnRvSlNPTigpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb25KU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlVG9TaWduYXR1cmVKU09OKHNpZ25hdHVyZSkge1xuICBsZXQgc2lnbmF0dXJlSlNPTiA9IG51bGw7XG5cbiAgaWYgKHNpZ25hdHVyZSAhPT0gbnVsbCkge1xuICAgIHNpZ25hdHVyZUpTT04gPSBzaWduYXR1cmUudG9KU09OKCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmF0dXJlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Ub0NvbmNsdXNpb25KU09OKGNvbmNsdXNpb24pIHtcbiAgY29uc3QgY29uY2x1c2lvbkpTT04gPSBjb25jbHVzaW9uLnRvSlNPTigpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZVRvTWV0YXZhcmlhYmxlSlNPTihtZXRhdmFyaWFibGUpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlSlNPTiA9IG1ldGF2YXJpYWJsZS50b0pTT04oKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxUb1Byb2NlZHVyZUNhbGxKU09OKHByb2NlZHVyZUNhbGwpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGxKU09OID0gbnVsbDtcblxuICBpZiAocHJvY2VkdXJlQ2FsbCAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZUNhbGxKU09OID0gcHJvY2VkdXJlQ2FsbC50b0pTT04oKTtcbiAgfVxuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVzVG9UeXBlc0pTT04odHlwZXMpIHtcbiAgY29uc3QgdHlwZXNKU09OID0gdHlwZXMubWFwKCh0eXBlKSA9PiB7XG4gICAgY29uc3QgdHlwZUpTT04gPSB0eXBlLnRvSlNPTigpO1xuXG4gICAgdHlwZSA9IHR5cGVKU09OOyAvLy9cblxuICAgIHJldHVybiB0eXBlO1xuICB9KTtcblxuICByZXR1cm4gdHlwZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNUb1Rlcm1zSlNPTih0ZXJtcykge1xuICBjb25zdCB0ZXJtc0pTT04gPSB0ZXJtcy5tYXAoKHRlcm0pID0+IHtcbiAgICBjb25zdCB0ZXJtSlNPTiA9IHRlcm0udG9KU09OKCk7XG5cbiAgICB0ZXJtID0gdGVybUpTT047IC8vL1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc1RvUnVsZXNKU09OKHJ1bGVzKSB7XG4gIGNvbnN0IHJ1bGVzSlNPTiA9IHJ1bGVzLm1hcCgocnVsZSkgPT4ge1xuICAgIGNvbnN0IHJ1bGVKU09OID0gcnVsZS50b0pTT04oKTtcblxuICAgIHJ1bGUgPSBydWxlSlNPTjsgLy8vXG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJ1bGVzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc1RvTGFiZWxzSlNPTihsYWJlbHMpIHtcbiAgY29uc3QgbGFiZWxzSlNPTiA9IGxhYmVscy5tYXAoKGxhYmVsKSA9PiB7XG4gICAgY29uc3QgbGFiZWxKU09OID0gbGFiZWwudG9KU09OKCk7XG5cbiAgICByZXR1cm4gbGFiZWxKU09OO1xuICB9KTtcblxuICByZXR1cm4gbGFiZWxzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tc1RvQXhpb21zSlNPTihheGlvbXMpIHtcbiAgY29uc3QgYXhpb21zSlNPTiA9IGF4aW9tcy5tYXAoKGF4aW9tKSA9PiB7XG4gICAgY29uc3QgYXhpb21KU09OID0gYXhpb20udG9KU09OKCk7XG5cbiAgICBheGlvbSA9IGF4aW9tSlNPTjsgLy8vXG5cbiAgICByZXR1cm4gYXhpb207XG4gIH0pO1xuXG4gIHJldHVybiBheGlvbXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZXNUb1ByZW1pc2VzSlNPTihwcmVtaXNlcykge1xuICBjb25zdCBwcmVtaXNlc0pTT04gPSBwcmVtaXNlcy5tYXAoKHByZW1pc2UpID0+IHtcbiAgICBjb25zdCBwcmVtaXNlSlNPTiA9IHByZW1pc2UudG9KU09OKCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZUpTT047XG4gIH0pO1xuXG4gIHJldHVybiBwcmVtaXNlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtc1RvVGhlb3JlbXNKU09OKHRoZW9yZW1zKSB7XG4gIGNvbnN0IHRoZW9yZW1zSlNPTiA9IHRoZW9yZW1zLm1hcCgodGhlb3JlbSkgPT4ge1xuICAgIGNvbnN0IHRoZW9yZW1KU09OID0gdGhlb3JlbS50b0pTT04oKTtcblxuICAgIHRoZW9yZW0gPSB0aGVvcmVtSlNPTjsgLy8vXG5cbiAgICByZXR1cm4gdGhlb3JlbTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRoZW9yZW1zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlc1RvVmFyaWFibGVzSlNPTih2YXJpYWJsZXMpIHtcbiAgY29uc3QgdmFyaWFibGVzSlNPTiA9IHZhcmlhYmxlcy5tYXAoKHZhcmlhYmxlKSA9PiB7XG4gICAgY29uc3QgdmFyaWFibGVKU09OID0gdmFyaWFibGUudG9KU09OKCk7XG5cbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlSlNPTjsgIC8vL1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9KTtcblxuICByZXR1cm4gdmFyaWFibGVzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNUb0h5cG90aGVzZXNKU09OKGh5cG90aGVzZXMpIHtcbiAgY29uc3QgaHlwb3RoZXNlc0pTT04gPSBoeXBvdGhlc2VzLm1hcCgoaHlwb3RoZXNpcykgPT4ge1xuICAgIGNvbnN0IGh5cG90aGVzaXNKU09OID0gaHlwb3RoZXNpcy50b0pTT04oKTtcblxuICAgIGh5cG90aGVzaXMgPSBoeXBvdGhlc2lzSlNPTjsgLy8vXG5cbiAgICByZXR1cm4gaHlwb3RoZXNpcztcbiAgfSk7XG5cbiAgcmV0dXJuIGh5cG90aGVzZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc1RvU3VwZXJUeXBlc0pTT04oc3VwZXJUeXBlcykge1xuICBjb25zdCBzdXBlclR5cGVzSlNPTiA9IHN1cGVyVHlwZXMubWFwKChzdXBlclR5cGUpID0+IHtcbiAgICBjb25zdCBzdXBlclR5cGVKU09OID0gc3VwZXJUeXBlLnRvSlNPTigpO1xuXG4gICAgc3VwZXJUeXBlID0gc3VwZXJUeXBlSlNPTjsgLy8vXG5cbiAgICByZXR1cm4gc3VwZXJUeXBlO1xuICB9KTtcblxuICByZXR1cm4gc3VwZXJUeXBlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzVG9QYXJhbWV0ZXJzSlNPTihwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHBhcmFtZXRlcnNKU09OID0gcGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlckpTT04gPSBwYXJhbWV0ZXIudG9KU09OKCk7XG5cbiAgICBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJKU09OOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyYW1ldGVyO1xuICB9KTtcblxuICByZXR1cm4gcGFyYW1ldGVyc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0aWVzVG9Qcm9wZXJ0aWVzSlNPTihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IHByb3BlcnRpZXNKU09OID0gcHJvcGVydGllcy5tYXAoKHByb3BlcnR5KSA9PiB7XG4gICAgY29uc3QgcHJvcGVydHlKU09OID0gcHJvcGVydHkudG9KU09OKCk7XG5cbiAgICBwcm9wZXJ0eSA9IHByb3BlcnR5SlNPTjsgIC8vL1xuXG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9KTtcblxuICByZXR1cm4gcHJvcGVydGllc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQWxpYXNlc1RvVHlwZUFsaWFzZXNKU09OKHR5cGVBbGlhc2VzKSB7XG4gIGNvbnN0IHR5cGVBbGlhc2VzSlNPTiA9IHR5cGVBbGlhc2VzLm1hcCgodHlwZUFsaWFzKSA9PiB7XG4gICAgY29uc3QgdHlwZUFsaWFzSlNPTiA9IHR5cGVBbGlhcy50b0pTT04oKTtcblxuICAgIHR5cGVBbGlhcyA9IHR5cGVBbGlhc0pTT047IC8vL1xuXG4gICAgcmV0dXJuIHR5cGVBbGlhcztcbiAgfSk7XG5cbiAgcmV0dXJuIHR5cGVBbGlhc2VzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmplY3R1cmVzVG9Db25qZWN0dXJlc0pTT04oY29uamVjdHVyZXMpIHtcbiAgY29uc3QgY29uamVjdHVyZXNKU09OID0gY29uamVjdHVyZXMubWFwKChjb25qZWN0dXJlKSA9PiB7XG4gICAgY29uc3QgY29uamVjdHVyZUpTT04gPSBjb25qZWN0dXJlLnRvSlNPTigpO1xuXG4gICAgY29uamVjdHVyZSA9IGNvbmplY3R1cmVKU09OOyAvLy9cblxuICAgIHJldHVybiBjb25qZWN0dXJlO1xuICB9KTtcblxuICByZXR1cm4gY29uamVjdHVyZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvcnNUb0NvbWJpbmF0b3JzSlNPTihjb21iaW5hdG9ycykge1xuICBjb25zdCBjb21iaW5hdG9yc0pTT04gPSBjb21iaW5hdG9ycy5tYXAoKGNvbWJpbmF0b3IpID0+IHtcbiAgICBjb25zdCBjb21iaW5hdG9ySlNPTiA9IGNvbWJpbmF0b3IudG9KU09OKCk7XG5cbiAgICBjb21iaW5hdG9yID0gY29tYmluYXRvckpTT047IC8vL1xuXG4gICAgcmV0dXJuIGNvbWJpbmF0b3I7XG4gIH0pO1xuXG4gIHJldHVybiBjb21iaW5hdG9yc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04oc3VwcG9zaXRpb25zKSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uc0pTT04gPSBzdXBwb3NpdGlvbnMubWFwKChzdXBwb3NpdGlvbikgPT4ge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uSlNPTiA9IHN1cHBvc2l0aW9uLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9uc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvcnNUb0NvbnN0cnVjdG9yc0pTT04oY29uc3RydWN0b3JzKSB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yc0pTT04gPSBjb25zdHJ1Y3RvcnMubWFwKChjb25zdHJ1Y3RvcikgPT4ge1xuICAgIGNvbnN0IGNvbnN0cnVjdG9ySlNPTiA9IGNvbnN0cnVjdG9yLnRvSlNPTigpO1xuXG4gICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvckpTT047ICAvLy9cblxuICAgIHJldHVybiBjb25zdHJ1Y3RvcjtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdGhlb3JlbXNUb01ldGF0aGVvcmVtc0pTT04obWV0YXRoZW9yZW1zKSB7XG4gIGNvbnN0IG1ldGF0aGVvcmVtc0pTT04gPSBtZXRhdGhlb3JlbXMubWFwKChtZXRhdGhlb3JlbSkgPT4ge1xuICAgIGNvbnN0IG1ldGF0aGVvcmVtSlNPTiA9IG1ldGF0aGVvcmVtLnRvSlNPTigpO1xuXG4gICAgbWV0YXRoZW9yZW0gPSBtZXRhdGhlb3JlbUpTT047IC8vL1xuXG4gICAgcmV0dXJuIG1ldGF0aGVvcmVtO1xuICB9KTtcblxuICByZXR1cm4gbWV0YXRoZW9yZW1zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OKHN1YnN0aXR1dGlvbnMpIHtcbiAgY29uc3Qgc3Vic3RpdHV0aW9uc0pTT04gPSBzdWJzdGl0dXRpb25zLm1hcFN1YnN0aXR1dGlvbigoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uSlNPTiA9IHN1YnN0aXR1dGlvbi50b0pTT04oKTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb25KU09OO1xuICB9KTtcblxuICByZXR1cm4gc3Vic3RpdHV0aW9uc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVzVG9NZXRhdmFyaWFibGVzSlNPTihtZXRhdmFyaWFibGVzKSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZXNKU09OID0gbWV0YXZhcmlhYmxlcy5tYXAoKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZUpTT04gPSBtZXRhdmFyaWFibGUudG9KU09OKCk7XG5cbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVKU09OOyAgLy8vXG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlc0pTT047XG59XG4iXSwibmFtZXMiOlsiYXhpb21zRnJvbUpTT04iLCJheGlvbXNUb0F4aW9tc0pTT04iLCJjb21iaW5hdG9yc0Zyb21KU09OIiwiY29tYmluYXRvcnNUb0NvbWJpbmF0b3JzSlNPTiIsImNvbmNsdXNpb25Gcm9tSlNPTiIsImNvbmNsdXNpb25Ub0NvbmNsdXNpb25KU09OIiwiY29uamVjdHVyZXNGcm9tSlNPTiIsImNvbmplY3R1cmVzVG9Db25qZWN0dXJlc0pTT04iLCJjb25zdHJ1Y3RvcnNGcm9tSlNPTiIsImNvbnN0cnVjdG9yc1RvQ29uc3RydWN0b3JzSlNPTiIsImRlZHVjdGlvbkZyb21KU09OIiwiZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OIiwiaHlwb3RoZXNlc0Zyb21KU09OIiwiaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04iLCJsYWJlbEZyb21KU09OIiwibGFiZWxUb0xhYmVsSlNPTiIsImxhYmVsc0Zyb21KU09OIiwibGFiZWxzVG9MYWJlbHNKU09OIiwibGVtbWFzRnJvbU5vdGhpbmciLCJtZXRhTGVtbWFzRnJvbU5vdGhpbmciLCJtZXRhVHlwZUZyb21KU09OIiwibWV0YVR5cGVUb01ldGFUeXBlSlNPTiIsIm1ldGF0aGVvcmVtc0Zyb21KU09OIiwibWV0YXRoZW9yZW1zVG9NZXRhdGhlb3JlbXNKU09OIiwibWV0YXZhcmlhYmxlRnJvbUpTT04iLCJtZXRhdmFyaWFibGVUb01ldGF2YXJpYWJsZUpTT04iLCJtZXRhdmFyaWFibGVzRnJvbUpTT04iLCJtZXRhdmFyaWFibGVzVG9NZXRhdmFyaWFibGVzSlNPTiIsInBhcmFtZXRlcnNGcm9tSlNPTiIsInBhcmFtZXRlcnNUb1BhcmFtZXRlcnNKU09OIiwicHJlbWlzZXNGcm9tSlNPTiIsInByZW1pc2VzVG9QcmVtaXNlc0pTT04iLCJwcm9jZWR1cmVDYWxsRnJvbUpTT04iLCJwcm9jZWR1cmVDYWxsVG9Qcm9jZWR1cmVDYWxsSlNPTiIsInByb3BlcnRpZXNGcm9tSlNPTiIsInByb3BlcnRpZXNUb1Byb3BlcnRpZXNKU09OIiwicmVmZXJlbmNlRnJvbUpTT04iLCJydWxlc0Zyb21KU09OIiwicnVsZXNUb1J1bGVzSlNPTiIsInNpZ25hdHVyZUZyb21KU09OIiwic2lnbmF0dXJlVG9TaWduYXR1cmVKU09OIiwic3RhdGVtZW50RnJvbUpTT04iLCJzdGF0ZW1lbnRUb1N0YXRlbWVudEpTT04iLCJzdWJzdGl0dXRpb25zRnJvbUpTT04iLCJzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTiIsInN1cGVyVHlwZXNGcm9tSlNPTiIsInN1cGVyVHlwZXNUb1N1cGVyVHlwZXNKU09OIiwic3VwcG9zaXRpb25zRnJvbUpTT04iLCJzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04iLCJ0ZXJtRnJvbUpTT04iLCJ0ZXJtVG9UZXJtSlNPTiIsInRlcm1zRnJvbUpTT04iLCJ0ZXJtc1RvVGVybXNKU09OIiwidGhlb3JlbXNGcm9tSlNPTiIsInRoZW9yZW1zVG9UaGVvcmVtc0pTT04iLCJ0eXBlQWxpYXNlc0Zyb21KU09OIiwidHlwZUFsaWFzZXNUb1R5cGVBbGlhc2VzSlNPTiIsInR5cGVGcm9tSlNPTiIsInR5cGVUb1R5cGVKU09OIiwidHlwZXNGcm9tSlNPTiIsInR5cGVzVG9UeXBlc0pTT04iLCJ2YXJpYWJsZXNGcm9tSlNPTiIsInZhcmlhYmxlc1RvVmFyaWFibGVzSlNPTiIsImpzb24iLCJjb250ZXh0IiwidGVybSIsInRlcm1KU09OIiwiVGVybSIsImRvbSIsImZyb21KU09OIiwidHlwZSIsIm5hbWUiLCJ0eXBlTmFtZSIsImZpbmRUeXBlQnlUeXBlTmFtZSIsIm1ldGFUeXBlIiwibWV0YVR5cGVOYW1lIiwiZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUiLCJzdGF0ZW1lbnQiLCJTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRKU09OIiwicmVmZXJlbmNlIiwiUmVmZXJlbmNlIiwicmVmZXJlbmNlSlNPTiIsImRlZHVjdGlvbiIsIkRlZHVjdGlvbiIsImRlZHVjdGlvbkpTT04iLCJzaWduYXR1cmUiLCJTaWduYXR1cmUiLCJzaWduYXR1cmVKU09OIiwiY29uY2x1c2lvbiIsIkNvbmNsdXNpb24iLCJjb25jbHVzaW9uSlNPTiIsIm1ldGF2YXJpYWJsZSIsIk1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZUpTT04iLCJwcm9jZWR1cmVDYWxsIiwiUHJvY2VkdXJlQ2FsbCIsInByb2NlZHVyZUNhbGxKU09OIiwidHlwZXMiLCJ0eXBlc0pTT04iLCJUeXBlIiwiZm9yRWFjaCIsInR5cGVKU09OIiwicHVzaCIsInRlcm1zIiwidGVybXNKU09OIiwibWFwIiwicnVsZXMiLCJSdWxlIiwicnVsZXNKU09OIiwicnVsZUpTT04iLCJydWxlIiwibGFiZWwiLCJMYWJlbCIsImxhYmVsSlNPTiIsImxhYmVscyIsImxhYmVsc0pTT04iLCJheGlvbXMiLCJBeGlvbSIsImF4aW9tc0pTT04iLCJheGlvbUpTT04iLCJheGlvbSIsInByZW1pc2VzIiwiUHJlbWlzZSIsInByZW1pc2VzSlNPTiIsInByZW1pc2VKU09OIiwicHJlbWlzZSIsInRoZW9yZW1zIiwiVGhlb3JlbSIsInRoZW9yZW1zSlNPTiIsInRoZW9yZW1KU09OIiwidGhlb3JlbSIsInZhcmlhYmxlcyIsIlZhcmlhYmxlIiwidmFyaWFibGVzSlNPTiIsInZhcmlhYmxlSlNPTiIsInZhcmlhYmxlIiwicHJvcGVydGllcyIsIlByb3BlcnR5IiwicHJvcGVydGllc0pTT04iLCJwcm9wZXJ0eUpTT04iLCJwcm9wZXJ0eSIsInN1cGVyVHlwZXMiLCJzdXBlclR5cGVzSlNPTiIsInN1cGVyVHlwZUpTT04iLCJzdXBlclR5cGVOYW1lIiwic3VwZXJUeXBlIiwiaHlwb3RoZXNlcyIsIkh5cG90aGVzaXMiLCJoeXBvdGhlc2VzSlNPTiIsImh5cG90aGVzaXNKU09OIiwiaHlwb3RoZXNpcyIsInBhcmFtZXRlcnMiLCJQYXJhbWV0ZXIiLCJwYXJhbWV0ZXJzSlNPTiIsInBhcmFtZXRlckpTT04iLCJwYXJhbWV0ZXIiLCJjb25qZWN0dXJlcyIsIkNvbmplY3R1cmUiLCJjb25qZWN0dXJlc0pTT04iLCJjb25qZWN0dXJlSlNPTiIsImNvbmplY3R1cmUiLCJjb21iaW5hdG9ycyIsIkNvbWJpbmF0b3IiLCJjb21iaW5hdG9yc0pTT04iLCJjb21iaW5hdG9ySlNPTiIsImNvbWJpbmF0b3IiLCJ0eXBlQWxpYXNlcyIsIlR5cGVBbGlhcyIsInR5cGVBbGlhc2VzSlNPTiIsInR5cGVBbGlhc0pTT04iLCJ0eXBlQWxpYXMiLCJjb25zdHJ1Y3RvcnMiLCJDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yc0pTT04iLCJjb25zdHJ1Y3RvckpTT04iLCJjb25zdHJ1Y3RvciIsIm1ldGF0aGVvcmVtcyIsIk1ldGF0aGVvcmVtIiwibWV0YXRoZW9yZW1zSlNPTiIsIm1ldGF0aGVvcmVtSlNPTiIsIm1ldGF0aGVvcmVtIiwic3VwcG9zaXRpb25zIiwiU3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbnNKU09OIiwic3VwcG9zaXRpb25KU09OIiwic3VwcG9zaXRpb24iLCJzdWJzdGl0dXRpb25zIiwiU3RhdGVtZW50U3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uc0pTT04iLCJTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25KU09OIiwic3Vic3RpdHV0aW9uIiwibWV0YXZhcmlhYmxlcyIsIm1ldGF2YXJpYWJsZXNKU09OIiwibGVtbWFzIiwibWV0YUxlbW1hcyIsInRvSlNPTiIsIm1ldGFUeXBlSlNPTiIsIm1hcFN1YnN0aXR1dGlvbiJdLCJtYXBwaW5n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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "occam-verify-cli",
|
|
3
3
|
"author": "James Smith",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.316",
|
|
5
5
|
"license": "MIT, Anti-996",
|
|
6
6
|
"homepage": "https://github.com/djalbat/occam-verify-cli",
|
|
7
7
|
"description": "Occam's Verifier",
|
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"argumentative": "^2.0.32",
|
|
14
14
|
"necessary": "^15.0.1",
|
|
15
|
-
"occam-custom-grammars": "^5.0.
|
|
16
|
-
"occam-entities": "^1.0.
|
|
17
|
-
"occam-file-system": "^6.0.
|
|
18
|
-
"occam-furtle": "^2.0.
|
|
19
|
-
"occam-grammars": "^1.3.
|
|
15
|
+
"occam-custom-grammars": "^5.0.1278",
|
|
16
|
+
"occam-entities": "^1.0.408",
|
|
17
|
+
"occam-file-system": "^6.0.423",
|
|
18
|
+
"occam-furtle": "^2.0.228",
|
|
19
|
+
"occam-grammars": "^1.3.366",
|
|
20
20
|
"occam-lexers": "^23.1.3",
|
|
21
21
|
"occam-parsers": "^23.1.5",
|
|
22
22
|
"occam-query": "^4.1.110"
|
package/src/context/file.js
CHANGED
|
@@ -19,22 +19,24 @@ import { typesFromJSON,
|
|
|
19
19
|
axiomsToAxiomsJSON,
|
|
20
20
|
conjecturesFromJSON,
|
|
21
21
|
combinatorsFromJSON,
|
|
22
|
+
typeAliasesFromJSON,
|
|
22
23
|
constructorsFromJSON,
|
|
23
24
|
metatheoremsFromJSON,
|
|
24
25
|
metavariablesFromJSON,
|
|
25
26
|
metaLemmasFromNothing,
|
|
26
27
|
theoremsToTheoremsJSON,
|
|
27
28
|
variablesToVariablesJSON,
|
|
29
|
+
typeAliasesToTypeAliasesJSON,
|
|
28
30
|
conjecturesToConjecturesJSON,
|
|
29
31
|
combinatorsToCombinatorsJSON,
|
|
30
32
|
constructorsToConstructorsJSON,
|
|
31
33
|
metatheoremsToMetatheoremsJSON,
|
|
32
34
|
metavariablesToMetavariablesJSON } from "../utilities/json";
|
|
33
35
|
|
|
34
|
-
const { push, filter } = arrayUtilities;
|
|
36
|
+
const { push, first, filter } = arrayUtilities;
|
|
35
37
|
|
|
36
38
|
export default class FileContext {
|
|
37
|
-
constructor(releaseContext, filePath, lineIndex, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, constructors, metatheorems, metavariables) {
|
|
39
|
+
constructor(releaseContext, filePath, lineIndex, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typeAliases, constructors, metatheorems, metavariables) {
|
|
38
40
|
this.releaseContext = releaseContext;
|
|
39
41
|
this.filePath = filePath;
|
|
40
42
|
this.lineIndex = lineIndex;
|
|
@@ -49,6 +51,7 @@ export default class FileContext {
|
|
|
49
51
|
this.metaLemmas = metaLemmas;
|
|
50
52
|
this.conjectures = conjectures;
|
|
51
53
|
this.combinators = combinators;
|
|
54
|
+
this.typeAliases = typeAliases;
|
|
52
55
|
this.constructors = constructors;
|
|
53
56
|
this.metatheorems = metatheorems;
|
|
54
57
|
this.metavariables = metavariables;
|
|
@@ -274,6 +277,10 @@ export default class FileContext {
|
|
|
274
277
|
return combinators;
|
|
275
278
|
}
|
|
276
279
|
|
|
280
|
+
getTypeAliases(includeRelease = true) {
|
|
281
|
+
return this.typeAliases;
|
|
282
|
+
}
|
|
283
|
+
|
|
277
284
|
getConstructors(includeRelease = true) {
|
|
278
285
|
const constructors = [];
|
|
279
286
|
|
|
@@ -312,6 +319,20 @@ export default class FileContext {
|
|
|
312
319
|
return fileContext;
|
|
313
320
|
}
|
|
314
321
|
|
|
322
|
+
getTypeAlias() {
|
|
323
|
+
let typeAlias = null;
|
|
324
|
+
|
|
325
|
+
const typeAliasesLength = this.typeAliases.length;
|
|
326
|
+
|
|
327
|
+
if (typeAliasesLength === 1) {
|
|
328
|
+
const firstTypeAlias = first(this.typeAliases);
|
|
329
|
+
|
|
330
|
+
typeAlias = firstTypeAlias; ///
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
return typeAlias;
|
|
334
|
+
}
|
|
335
|
+
|
|
315
336
|
addType(type) {
|
|
316
337
|
this.types.push(type);
|
|
317
338
|
}
|
|
@@ -862,6 +883,7 @@ export default class FileContext {
|
|
|
862
883
|
this.metaLemmas = [];
|
|
863
884
|
this.conjectures = [];
|
|
864
885
|
this.combinators = [];
|
|
886
|
+
this.typeAliases = [];
|
|
865
887
|
this.constructors = [];
|
|
866
888
|
this.metatheorems = [];
|
|
867
889
|
this.metavariables = [];
|
|
@@ -907,6 +929,8 @@ export default class FileContext {
|
|
|
907
929
|
|
|
908
930
|
this.combinators = combinatorsFromJSON(json, fileContext);
|
|
909
931
|
|
|
932
|
+
this.typeAliases = typeAliasesFromJSON(json, fileContext);
|
|
933
|
+
|
|
910
934
|
this.constructors = constructorsFromJSON(json, fileContext);
|
|
911
935
|
|
|
912
936
|
this.metatheorems = metatheoremsFromJSON(json, fileContext);
|
|
@@ -922,6 +946,7 @@ export default class FileContext {
|
|
|
922
946
|
variablesJSON = variablesToVariablesJSON(this.variables),
|
|
923
947
|
conjecturesJSON = conjecturesToConjecturesJSON(this.conjectures),
|
|
924
948
|
combinatorsJSON = combinatorsToCombinatorsJSON(this.combinators),
|
|
949
|
+
typeAliasesJSON = typeAliasesToTypeAliasesJSON(this.typeAliases),
|
|
925
950
|
constructorsJSON = constructorsToConstructorsJSON(this.constructors),
|
|
926
951
|
metatheoremsJSON = metatheoremsToMetatheoremsJSON(this.metatheorems),
|
|
927
952
|
metavariablesJSON = metavariablesToMetavariablesJSON(this.metavariables),
|
|
@@ -933,6 +958,7 @@ export default class FileContext {
|
|
|
933
958
|
variables = variablesJSON, ///
|
|
934
959
|
conjectures = conjecturesJSON, ///
|
|
935
960
|
combinators = combinatorsJSON, ///
|
|
961
|
+
typeAliases = typeAliasesJSON, ///
|
|
936
962
|
constructors = constructorsJSON, ///
|
|
937
963
|
metatheorems = metatheoremsJSON, ///
|
|
938
964
|
metavariables = metavariablesJSON, ///
|
|
@@ -945,6 +971,7 @@ export default class FileContext {
|
|
|
945
971
|
variables,
|
|
946
972
|
conjectures,
|
|
947
973
|
combinators,
|
|
974
|
+
typeAliases,
|
|
948
975
|
constructors,
|
|
949
976
|
metatheorems,
|
|
950
977
|
metavariables
|
|
@@ -967,10 +994,11 @@ export default class FileContext {
|
|
|
967
994
|
metaLemmas = [],
|
|
968
995
|
conjectures = [],
|
|
969
996
|
combinators = [],
|
|
997
|
+
typeAliases = [],
|
|
970
998
|
constructors = [],
|
|
971
999
|
metatheorems = [],
|
|
972
1000
|
metavariables = [],
|
|
973
|
-
fileContext = new FileContext(releaseContext, filePath, lineIndex, tokens, node, types, rules, axioms, lemmas, variables, metaLemmas,
|
|
1001
|
+
fileContext = new FileContext(releaseContext, filePath, lineIndex, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typeAliases, constructors, metatheorems, metavariables);
|
|
974
1002
|
|
|
975
1003
|
return fileContext;
|
|
976
1004
|
}
|
|
@@ -988,10 +1016,11 @@ export default class FileContext {
|
|
|
988
1016
|
metaLemmas = null,
|
|
989
1017
|
conjectures = null,
|
|
990
1018
|
combinators = null,
|
|
1019
|
+
typeAliases = null,
|
|
991
1020
|
constructors = null,
|
|
992
1021
|
metatheorems = null,
|
|
993
1022
|
metavariables = null,
|
|
994
|
-
fileContext = new FileContext(releaseContext, filePath, lineIndex, node, types, rules, axioms, lemmas, variables, metaLemmas,
|
|
1023
|
+
fileContext = new FileContext(releaseContext, filePath, lineIndex, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typeAliases, constructors, metatheorems, metavariables);
|
|
995
1024
|
|
|
996
1025
|
fileContext.initialise(json);
|
|
997
1026
|
|
package/src/context/release.js
CHANGED
|
@@ -10,7 +10,6 @@ import FileContext from "../context/file";
|
|
|
10
10
|
import NominalLexer from "../nominal/lexer";
|
|
11
11
|
import NominalParser from "../nominal/parser";
|
|
12
12
|
|
|
13
|
-
import { objectType } from "../dom/type";
|
|
14
13
|
import { frameMetaType, referenceMetaType, statementMetaType } from "../dom/metaType";
|
|
15
14
|
import { customGrammarFromNameAndEntries, combinedCustomGrammarFromReleaseContexts } from "../utilities/customGrammar";
|
|
16
15
|
|
|
@@ -378,25 +377,6 @@ export default class ReleaseContext {
|
|
|
378
377
|
this.fileContexts.push(fileContext);
|
|
379
378
|
}
|
|
380
379
|
|
|
381
|
-
findTypeByTypeName(typeName) {
|
|
382
|
-
let types = this.getTypes();
|
|
383
|
-
|
|
384
|
-
types = [
|
|
385
|
-
...types,
|
|
386
|
-
objectType
|
|
387
|
-
];
|
|
388
|
-
|
|
389
|
-
const type = types.find((type) => {
|
|
390
|
-
const typeNameMatches = type.matchTypeName(typeName);
|
|
391
|
-
|
|
392
|
-
if (typeNameMatches) {
|
|
393
|
-
return true;
|
|
394
|
-
}
|
|
395
|
-
}) || null;
|
|
396
|
-
|
|
397
|
-
return type;
|
|
398
|
-
}
|
|
399
|
-
|
|
400
380
|
getReleaseName() {
|
|
401
381
|
const name = this.getName(),
|
|
402
382
|
releaseName = name; ///
|
|
@@ -32,20 +32,6 @@ export default domAssigned(class ComplexTypeDeclaration {
|
|
|
32
32
|
|
|
33
33
|
getReleaseContext() { return this.context.getReleaseContext(); }
|
|
34
34
|
|
|
35
|
-
getReleaseTypes() {
|
|
36
|
-
const includeDependencies = false,
|
|
37
|
-
includeRelease = false,
|
|
38
|
-
releaseContext = this.getReleaseContext(),
|
|
39
|
-
contextTypes = this.context.getTypes(includeRelease),
|
|
40
|
-
releaseContextTypes = releaseContext.getTypes(includeDependencies),
|
|
41
|
-
releaseTypes = [
|
|
42
|
-
...contextTypes,
|
|
43
|
-
...releaseContextTypes
|
|
44
|
-
];
|
|
45
|
-
|
|
46
|
-
return releaseTypes;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
35
|
verify() {
|
|
50
36
|
let verifies = false;
|
|
51
37
|
|
|
@@ -79,28 +65,21 @@ export default domAssigned(class ComplexTypeDeclaration {
|
|
|
79
65
|
verifyType() {
|
|
80
66
|
let typeVerifies = false;
|
|
81
67
|
|
|
82
|
-
const
|
|
68
|
+
const typeString = this.type.getString();
|
|
83
69
|
|
|
84
|
-
this.context.trace(`Verifying the '${
|
|
70
|
+
this.context.trace(`Verifying the '${typeString}' complex type...`, this.node);
|
|
85
71
|
|
|
86
72
|
const typeName = this.type.getName(),
|
|
87
|
-
|
|
88
|
-
typePresent = releaseTypes.some((releaseType) => {
|
|
89
|
-
const releaseTypeNameMatches = releaseType.matchTypeName(typeName);
|
|
90
|
-
|
|
91
|
-
if (releaseTypeNameMatches) {
|
|
92
|
-
return true;
|
|
93
|
-
}
|
|
94
|
-
});
|
|
73
|
+
typePresent = this.context.isTypePresentByTypeName(typeName);
|
|
95
74
|
|
|
96
75
|
if (typePresent) {
|
|
97
|
-
this.context.debug(`The
|
|
76
|
+
this.context.debug(`The '${typeString}' type is already present in the package.`, this.node);
|
|
98
77
|
} else {
|
|
99
78
|
typeVerifies = true;
|
|
100
79
|
}
|
|
101
80
|
|
|
102
81
|
if (typeVerifies) {
|
|
103
|
-
this.context.debug(`...verified the '${
|
|
82
|
+
this.context.debug(`...verified the '${typeString}' complex type.`, this.node);
|
|
104
83
|
}
|
|
105
84
|
|
|
106
85
|
return typeVerifies;
|
|
@@ -136,27 +115,23 @@ export default domAssigned(class ComplexTypeDeclaration {
|
|
|
136
115
|
|
|
137
116
|
superTypes = this.type.getSuperTypes();
|
|
138
117
|
|
|
139
|
-
const
|
|
140
|
-
superTypesLength = superTypes.length;
|
|
118
|
+
const superTypesLength = superTypes.length;
|
|
141
119
|
|
|
142
120
|
if (superTypesLength === 0) {
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
if (type === null) {
|
|
146
|
-
const superType = objectType; ///
|
|
121
|
+
const superType = objectType; ///
|
|
147
122
|
|
|
148
|
-
|
|
149
|
-
}
|
|
123
|
+
superTypes.push(superType);
|
|
150
124
|
}
|
|
151
125
|
|
|
152
|
-
const
|
|
126
|
+
const typeName = this.type.getName(),
|
|
127
|
+
typeBasic = this.type.isBasic(),
|
|
153
128
|
typeString = this.type.getString();
|
|
154
129
|
|
|
155
130
|
if (typeBasic) {
|
|
156
131
|
superTypesVerify = true;
|
|
157
132
|
|
|
158
|
-
this.context.trace(`The '${typeString}' type is basic
|
|
159
|
-
} else
|
|
133
|
+
this.context.trace(`The '${typeString}' complex type is basic.`, this.node)
|
|
134
|
+
} else {
|
|
160
135
|
const superTypeNames = superTypes.map((superType) => {
|
|
161
136
|
const superTypeName = superType.getName();
|
|
162
137
|
|
|
@@ -165,15 +140,8 @@ export default domAssigned(class ComplexTypeDeclaration {
|
|
|
165
140
|
superTypeNamesIncludesTypeName = superTypeNames.includes(typeName);
|
|
166
141
|
|
|
167
142
|
if (superTypeNamesIncludesTypeName) {
|
|
168
|
-
this.context.trace(`The '${typeName}' type cannot be a super-type `, this.node);
|
|
143
|
+
this.context.trace(`The '${typeName}' complex type cannot be a super-type `, this.node);
|
|
169
144
|
} else {
|
|
170
|
-
if (superTypesLength === 0) {
|
|
171
|
-
const type = this.context.findTypeByTypeName(typeName),
|
|
172
|
-
superType = type; ///
|
|
173
|
-
|
|
174
|
-
superTypes.push(superType);
|
|
175
|
-
}
|
|
176
|
-
|
|
177
145
|
superTypesVerify = superTypes.every((superType) => {
|
|
178
146
|
const superTypeVerifies = this.verifySuperType(superType);
|
|
179
147
|
|
|
@@ -191,8 +159,7 @@ export default domAssigned(class ComplexTypeDeclaration {
|
|
|
191
159
|
return superType;
|
|
192
160
|
});
|
|
193
161
|
|
|
194
|
-
const
|
|
195
|
-
string = stringFromTypeNameNameAndSuperTypes(typeName, superTypes);
|
|
162
|
+
const string = stringFromTypeNameNameAndSuperTypes(typeName, superTypes);
|
|
196
163
|
|
|
197
164
|
this.type.setString(string);
|
|
198
165
|
|
|
@@ -35,7 +35,7 @@ export default domAssigned(class SimpleTypeDeclaration {
|
|
|
35
35
|
|
|
36
36
|
const typeDeclarationString = this.getString(); ///
|
|
37
37
|
|
|
38
|
-
this.context.trace(`Verifying the '${typeDeclarationString}' type declaration
|
|
38
|
+
this.context.trace(`Verifying the '${typeDeclarationString}' simple type declaration...`, this.node);
|
|
39
39
|
|
|
40
40
|
const typeVerifies = this.verifyType();
|
|
41
41
|
|
|
@@ -50,7 +50,7 @@ export default domAssigned(class SimpleTypeDeclaration {
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
if (verifies) {
|
|
53
|
-
this.context.debug(`...verified the '${typeDeclarationString}' type declaration.`, this.node);
|
|
53
|
+
this.context.debug(`...verified the '${typeDeclarationString}' simple type declaration.`, this.node);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
return verifies;
|
|
@@ -61,19 +61,19 @@ export default domAssigned(class SimpleTypeDeclaration {
|
|
|
61
61
|
|
|
62
62
|
const typeString = this.type.getString();
|
|
63
63
|
|
|
64
|
-
this.context.trace(`Verifying the '${typeString}' type
|
|
64
|
+
this.context.trace(`Verifying the '${typeString}' simple type...`, this.node);
|
|
65
65
|
|
|
66
66
|
const typeName = this.type.getName(),
|
|
67
67
|
typePresent = this.context.isTypePresentByTypeName(typeName);
|
|
68
68
|
|
|
69
69
|
if (typePresent) {
|
|
70
|
-
this.context.debug(`The
|
|
70
|
+
this.context.debug(`The '${typeString}' type is already present.`, this.node);
|
|
71
71
|
} else {
|
|
72
72
|
typeVerifies = true;
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
if (typeVerifies) {
|
|
76
|
-
this.context.debug(`...verified the '${typeString}' type.`, this.node);
|
|
76
|
+
this.context.debug(`...verified the '${typeString}' simple type.`, this.node);
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
return typeVerifies;
|
|
@@ -84,7 +84,7 @@ export default domAssigned(class SimpleTypeDeclaration {
|
|
|
84
84
|
|
|
85
85
|
const superTypeString = superType.getString();
|
|
86
86
|
|
|
87
|
-
this.context.trace(`Verifying the '${superTypeString}' super-type
|
|
87
|
+
this.context.trace(`Verifying the '${superTypeString}' super-type...`, this.node);
|
|
88
88
|
|
|
89
89
|
const superTypeName = superType.getName(),
|
|
90
90
|
superTypePresent = this.context.isTypePresentByTypeName(superTypeName);
|
|
@@ -103,7 +103,7 @@ export default domAssigned(class SimpleTypeDeclaration {
|
|
|
103
103
|
verifySuperTypes() {
|
|
104
104
|
let superTypesVerify = false;
|
|
105
105
|
|
|
106
|
-
this.context.trace(`Verifying the super-types
|
|
106
|
+
this.context.trace(`Verifying the super-types...`, this.node);
|
|
107
107
|
|
|
108
108
|
let superTypes;
|
|
109
109
|
|
|
@@ -124,7 +124,7 @@ export default domAssigned(class SimpleTypeDeclaration {
|
|
|
124
124
|
if (typeBasic) {
|
|
125
125
|
superTypesVerify = true;
|
|
126
126
|
|
|
127
|
-
this.context.trace(`The '${typeString}' type is basic.`, this.node)
|
|
127
|
+
this.context.trace(`The '${typeString}' simple type is basic.`, this.node)
|
|
128
128
|
} else {
|
|
129
129
|
const superTypeNames = superTypes.map((superType) => {
|
|
130
130
|
const superTypeName = superType.getName();
|
|
@@ -134,7 +134,7 @@ export default domAssigned(class SimpleTypeDeclaration {
|
|
|
134
134
|
superTypeNamesIncludesTypeName = superTypeNames.includes(typeName);
|
|
135
135
|
|
|
136
136
|
if (superTypeNamesIncludesTypeName) {
|
|
137
|
-
this.context.trace(`The '${typeName}' type cannot be a super-type
|
|
137
|
+
this.context.trace(`The '${typeName}' simple type cannot be a super-type `, this.node);
|
|
138
138
|
} else {
|
|
139
139
|
superTypesVerify = superTypes.every((superType) => {
|
|
140
140
|
const superTypeVerifies = this.verifySuperType(superType);
|