occam-nominal 1.0.554 → 1.0.558

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.
@@ -829,4 +829,4 @@ function findMetaTypeByName(name, context) {
829
829
  return metaType;
830
830
  }
831
831
 
832
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvanNvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IE1uZW1pY0NvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvbW5lbWljXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyB0eXBlIH0gPSBqc29uO1xuXG4gIGlmICh0eXBlICE9PSBudWxsKSB7XG4gICAganNvbiA9IHR5cGU7ICAvLy9cblxuICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgIG5hbWUgPSBzdHJpbmc7ICAvLy9cblxuICAgIHR5cGUgPSBmaW5kVHlwZUJ5TmFtZShuYW1lLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGxhYmVsIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBsYWJlbEpTT04gPSBsYWJlbDsgIC8vL1xuXG4gIGpzb24gPSBsYWJlbEpTT047IC8vL1xuXG4gIGxhYmVsID0gTGFiZWwuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IG1ldGFUeXBlIH0gPSBqc29uO1xuXG4gIGlmIChtZXRhVHlwZSAhPT0gbnVsbCkge1xuICAgIGpzb24gPSBtZXRhVHlwZTsgIC8vL1xuXG4gICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgbmFtZSA9IHN0cmluZzsgIC8vL1xuXG4gICAgbWV0YVR5cGUgPSBmaW5kTWV0YVR5cGVCeU5hbWUobmFtZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YVR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGRlZHVjdGlvbiB9ID0ganNvbjtcblxuICBjb25zdCB7IERlZHVjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIGRlZHVjdGlvbkpTT04gPSBkZWR1Y3Rpb247ICAvLy9cblxuICBqc29uID0gZGVkdWN0aW9uSlNPTjsgIC8vL1xuXG4gIGRlZHVjdGlvbiA9IERlZHVjdGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBzaWduYXR1cmUgPSBudWxsIH0gPSBqc29uO1xuXG4gIGlmIChzaWduYXR1cmUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgc2lnbmF0dXJlSlNPTiA9IHNpZ25hdHVyZTsgIC8vL1xuXG4gICAganNvbiA9IHNpZ25hdHVyZUpTT047IC8vL1xuXG4gICAgc2lnbmF0dXJlID0gU2lnbmF0dXJlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGNvbmNsdXNpb24gfSA9IGpzb247XG5cbiAgY29uc3QgeyBDb25jbHVzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgY29uY2x1c2lvbkpTT04gPSBjb25jbHVzaW9uOyAgLy8vXG5cbiAganNvbiA9IGNvbmNsdXNpb25KU09OOyAgLy8vXG5cbiAgY29uY2x1c2lvbiA9IENvbmNsdXNpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgY29uc3QgeyBwcm92aXNpb25hbCB9ID0ganNvbjtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtbmVtaWNDb250ZXh0RnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBjb25zdCByZWxlYXNlQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICh7IGNvbnRleHQgfSA9IGpzb24pO1xuXG4gIGpzb24gPSBjb250ZXh0OyAvLy9cblxuICBjb250ZXh0ID0gcmVsZWFzZUNvbnRleHQ7IC8vL1xuXG4gIGNvbnN0IG1uZW1pY0NvbnRleHQgPSBNbmVtaWNDb250ZXh0LmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIHJldHVybiBtbmVtaWNDb250ZXh0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZXNGcm9tSlNPTihqc29uLCB0eXBlcywgY29udGV4dCkge1xuICBjb25zdCB7IHR5cGVzOiB0eXBlc0pTT04gfSA9IGpzb247XG5cbiAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cztcblxuICB0eXBlc0pTT04uZm9yRWFjaCgodHlwZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gdHlwZUpTT04sICAvLy9cbiAgICAgICAgICB0eXBlID0gVHlwZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHR5cGVzLnB1c2godHlwZSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHRlcm1zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgVGVybSB9ID0gZWxlbWVudHMsXG4gICAgdGVybXNKU09OID0gdGVybXM7IC8vL1xuXG4gIHRlcm1zID0gdGVybXNKU09OLm1hcCgodGVybUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gdGVybUpTT04sICAvLy9cbiAgICAgIHRlcm0gPSBUZXJtLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmtzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBsaW5rcyB9ID0ganNvbjtcblxuICBjb25zdCB7IExpbmsgfSA9IGVsZW1lbnRzLFxuICAgICAgICBsaW5rc0pTT04gPSBsaW5rczsgLy8vXG5cbiAgbGlua3MgPSBsaW5rc0pTT04ubWFwKChsaW5rSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBsaW5rSlNPTiwgIC8vL1xuICAgICAgICAgIGxpbmsgPSBMaW5rLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGxpbms7XG4gIH0pO1xuXG4gIHJldHVybiBsaW5rcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBydWxlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFJ1bGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBydWxlc0pTT04gPSBydWxlczsgLy8vXG5cbiAgcnVsZXMgPSBydWxlc0pTT04ubWFwKChydWxlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBydWxlSlNPTiwgIC8vL1xuICAgICAgICAgIHJ1bGUgPSBSdWxlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH0pO1xuXG4gIHJldHVybiBydWxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgZnJhbWVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgRnJhbWUgfSA9IGVsZW1lbnRzLFxuICAgIGZyYW1lc0pTT04gPSBmcmFtZXM7IC8vL1xuXG4gIGZyYW1lcyA9IGZyYW1lc0pTT04ubWFwKChmcmFtZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gZnJhbWVKU09OLCAgLy8vXG4gICAgICAgICAgZnJhbWUgPSBGcmFtZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBmcmFtZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZyYW1lcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgbGFiZWxzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBsYWJlbHNKU09OID0gbGFiZWxzOyAgLy8vXG5cbiAgbGFiZWxzID0gbGFiZWxzSlNPTi5tYXAoKGxhYmVsSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBsYWJlbEpTT04sIC8vL1xuICAgICAgICAgIGxhYmVsID0gTGFiZWwuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbGFiZWw7XG4gIH0pO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlvbXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGF4aW9tcyB9ID0ganNvbjtcblxuICBjb25zdCB7IEF4aW9tIH0gPSBlbGVtZW50cyxcbiAgICAgICAgYXhpb21zSlNPTiA9IGF4aW9tczsgLy8vXG5cbiAgYXhpb21zID0gYXhpb21zSlNPTi5tYXAoKGF4aW9tSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBheGlvbUpTT04sICAvLy9cbiAgICAgICAgICBheGlvbSA9IEF4aW9tLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGF4aW9tO1xuICB9KTtcblxuICByZXR1cm4gYXhpb21zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NoZW1hc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgc2NoZW1hcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFNjaGVtYSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHNjaGVtYXNKU09OID0gc2NoZW1hczsgLy8vXG5cbiAgc2NoZW1hcyA9IHNjaGVtYXNKU09OLm1hcCgoc2NoZW1hSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBzY2hlbWFKU09OLCAgLy8vXG4gICAgICBzY2hlbWEgPSBTY2hlbWEuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc2NoZW1hO1xuICB9KTtcblxuICByZXR1cm4gc2NoZW1hcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBwcmVtaXNlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFByZW1pc2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwcmVtaXNlc0pTT04gPSBwcmVtaXNlczsgIC8vL1xuXG4gIHByZW1pc2VzID0gcHJlbWlzZXNKU09OLm1hcCgocHJlbWlzZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gcHJlbWlzZUpTT04sIC8vL1xuICAgICAgICAgIHByZW1pc2UgPSBQcmVtaXNlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByZW1pc2U7XG4gIH0pO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoZW9yZW1zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyB0aGVvcmVtcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFRoZW9yZW0gfSA9IGVsZW1lbnRzLFxuICAgICAgICB0aGVvcmVtc0pTT04gPSB0aGVvcmVtczsgLy8vXG5cbiAgdGhlb3JlbXMgPSB0aGVvcmVtc0pTT04ubWFwKCh0aGVvcmVtSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB0aGVvcmVtSlNPTiwgIC8vL1xuICAgICAgICAgIHRoZW9yZW0gPSBUaGVvcmVtLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRoZW9yZW07XG4gIH0pO1xuXG4gIHJldHVybiB0aGVvcmVtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsaXRpZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGVxdWFsaXRpZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBFcXVhbGl0eSB9ID0gZWxlbWVudHMsXG4gICAgZXF1YWxpdGllc0pTT04gPSBlcXVhbGl0aWVzOyAvLy9cblxuICBlcXVhbGl0aWVzID0gZXF1YWxpdGllc0pTT04ubWFwKChlcXVhbGl0eUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gZXF1YWxpdHlKU09OLCAgLy8vXG4gICAgICBlcXVhbGl0eSA9IEVxdWFsaXR5LmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9KTtcblxuICByZXR1cm4gZXF1YWxpdGllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHByb3BlcnRpZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBQcm9wZXJ0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByb3BlcnRpZXNKU09OID0gcHJvcGVydGllczsgLy8vXG5cbiAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNKU09OLm1hcCgocHJvcGVydHlKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHByb3BlcnR5SlNPTiwgIC8vL1xuICAgICAgICAgIHByb3BlcnR5ID0gUHJvcGVydHkuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJvcGVydHk7XG4gIH0pO1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4TmFtZUZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgY29uc3QgeyBwcmVmaXhOYW1lIH0gPSBqc29uO1xuXG4gIHJldHVybiBwcmVmaXhOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgY29uc3QgeyBzdXBlclR5cGVzOiBzdXBlclR5cGVzSlNPTiB9ID0ganNvbjtcblxuICBjb25zdCBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0pTT04ubWFwKChzdXBlclR5cGVKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHN1cGVyVHlwZUpTT04sICAvLy9cbiAgICAgIHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgbmFtZSA9IHN0cmluZywgIC8vL1xuICAgICAgdHlwZSA9IGZpbmRUeXBlQnlOYW1lKG5hbWUsIGNvbnRleHQpLFxuICAgICAgc3VwZXJUeXBlID0gdHlwZTsgLy8vXG5cbiAgICByZXR1cm4gc3VwZXJUeXBlO1xuICB9KTtcblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGh5cG90aGVzZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBIeXBvdGhlc2lzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgaHlwb3RoZXNlc0pTT04gPSBoeXBvdGhlc2VzOyAgLy8vXG5cbiAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNKU09OLm1hcCgoaHlwb3RoZXNpc0pTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gaHlwb3RoZXNpc0pTT04sIC8vL1xuICAgICAgICAgIGh5cG90aGVzaXMgPSBIeXBvdGhlc2lzLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXM7XG4gIH0pO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgc3RhdGVtZW50cyB9ID0ganNvbjtcblxuICBjb25zdCB7IFN0YXRlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIHN0YXRlbWVudHNKU09OID0gc3RhdGVtZW50czsgLy8vXG5cbiAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNKU09OLm1hcCgoc3RhdGVtZW50SlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBzdGF0ZW1lbnRKU09OLCAgLy8vXG4gICAgICAgICAgc3RhdGVtZW50ID0gU3RhdGVtZW50LmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBhc3NlcnRpb25zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgVHlwZUFzc2VydGlvbiwgU2NoZW1hQXNzZXJ0aW9uLCBEZWZpbmVkQXNzZXJ0aW9uLCBQcm9wZXJ0eUFzc2VydGlvbiwgU3VicHJvb2ZBc3NlcnRpb24sIENvbnRhaW5lZEFzc2VydGlvbiwgU2lnbmF0dXJlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgYXNzZXJ0aW9uc0pTT04gPSBhc3NlcnRpb25zOyAvLy9cblxuICBhc3NlcnRpb25zID0gYXNzZXJ0aW9uc0pTT04ubWFwKChhc3NlcnRpb25KU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGFzc2VydGlvbkpTT04sICAvLy9cbiAgICAgICAgICBhc3NlcnRpb24gPSBUeXBlQXNzZXJ0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpXG4gICAgICAgICAgICAgICAgICAgfHwgU2NoZW1hQXNzZXJ0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpXG4gICAgICAgICAgICAgICAgICAgfHwgRGVmaW5lZEFzc2VydGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KVxuICAgICAgICAgICAgICAgICAgIHx8IFByb3BlcnR5QXNzZXJ0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpXG4gICAgICAgICAgICAgICAgICAgfHwgU3VicHJvb2ZBc3NlcnRpb24uZnJvbUpTT04oanNvbiwgY29udGV4dClcbiAgICAgICAgICAgICAgICAgICB8fCBDb250YWluZWRBc3NlcnRpb24uZnJvbUpTT04oanNvbiwgY29udGV4dClcbiAgICAgICAgICAgICAgICAgICB8fCBTaWduYXR1cmVBc3NlcnRpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9uO1xuICB9KTtcblxuICByZXR1cm4gYXNzZXJ0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRvcnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGdlbmVyYXRvcnMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBHZW5lcmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBnZW5lcmF0b3JzSlNPTiA9IGdlbmVyYXRvcnM7IC8vL1xuXG4gIGdlbmVyYXRvcnMgPSBnZW5lcmF0b3JzSlNPTi5tYXAoKGdlbmVyYXRvckpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gZ2VuZXJhdG9ySlNPTiwgIC8vL1xuICAgICAgICAgIGdlbmVyYXRvciA9IEdlbmVyYXRvci5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH0pO1xuXG4gIHJldHVybiBnZW5lcmF0b3JzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGNvbmplY3R1cmVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgQ29uamVjdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGNvbmplY3R1cmVzSlNPTiA9IGNvbmplY3R1cmVzOyAvLy9cblxuICBjb25qZWN0dXJlcyA9IGNvbmplY3R1cmVzSlNPTi5tYXAoKGNvbmplY3R1cmVKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGNvbmplY3R1cmVKU09OLCAgLy8vXG4gICAgICAgICAgY29uamVjdHVyZSA9IENvbmplY3R1cmUuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29uamVjdHVyZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmplY3R1cmVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvcnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGNvbWJpbmF0b3JzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgQ29tYmluYXRvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIGNvbWJpbmF0b3JzSlNPTiA9IGNvbWJpbmF0b3JzOyAvLy9cblxuICBjb21iaW5hdG9ycyA9IGNvbWJpbmF0b3JzSlNPTi5tYXAoKGNvbWJpbmF0b3JKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGNvbWJpbmF0b3JKU09OLCAgLy8vXG4gICAgICAgICAgY29tYmluYXRvciA9IENvbWJpbmF0b3IuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29tYmluYXRvcjtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3JzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGFzc3VtcHRpb25zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgQXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgYXNzdW1wdGlvbnNKU09OID0gYXNzdW1wdGlvbnM7IC8vL1xuXG4gIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNKU09OLm1hcCgoYXNzdW1wdGlvbkpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gYXNzdW1wdGlvbkpTT04sICAvLy9cbiAgICAgICAgICBhc3N1bXB0aW9uID0gQXNzdW1wdGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJhaW50c0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgY29uc3RyYWludHMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBDb25zdHJhaW50IH0gPSBlbGVtZW50cyxcbiAgICBjb25zdHJhaW50c0pTT04gPSBjb25zdHJhaW50czsgLy8vXG5cbiAgY29uc3RyYWludHMgPSBjb25zdHJhaW50c0pTT04ubWFwKChjb25zdHJhaW50SlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBjb25zdHJhaW50SlNPTiwgIC8vL1xuICAgICAgY29uc3RyYWludCA9IENvbnN0cmFpbnQuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29uc3RyYWludDtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbnN0cmFpbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeGVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyB0eXBlUHJlZml4ZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBUeXBlUHJlZml4IH0gPSBlbGVtZW50cyxcbiAgICAgICAgdHlwZVByZWZpeGVzSlNPTiA9IHR5cGVQcmVmaXhlczsgLy8vXG5cbiAgdHlwZVByZWZpeGVzID0gdHlwZVByZWZpeGVzSlNPTi5tYXAoKHR5cGVQcmVmaXhKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHR5cGVQcmVmaXhKU09OLCAgLy8vXG4gICAgICAgICAgdHlwZVByZWZpeCA9IFR5cGVQcmVmaXguZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdHlwZVByZWZpeDtcbiAgfSk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXhlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgY29uc3RydWN0b3JzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgQ29uc3RydWN0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjb25zdHJ1Y3RvcnNKU09OID0gY29uc3RydWN0b3JzOyAvLy9cblxuICBjb25zdHJ1Y3RvcnMgPSBjb25zdHJ1Y3RvcnNKU09OLm1hcCgoY29uc3RydWN0b3JKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGNvbnN0cnVjdG9ySlNPTiwgIC8vL1xuICAgICAgICAgIGNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3IuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3I7XG4gIH0pO1xuXG4gIHJldHVybiBjb25zdHJ1Y3RvcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHN1cHBvc2l0aW9ucyB9ID0ganNvbjtcblxuICBjb25zdCB7IFN1cHBvc2l0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgc3VwcG9zaXRpb25zSlNPTiA9IHN1cHBvc2l0aW9uczsgIC8vL1xuXG4gIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0pTT04ubWFwKChzdXBwb3NpdGlvbkpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gc3VwcG9zaXRpb25KU09OLCAvLy9cbiAgICAgICAgICBzdXBwb3NpdGlvbiA9IFN1cHBvc2l0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uO1xuICB9KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RpdHV0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgc3Vic3RpdHV0aW9ucyB9ID0ganNvbjsgIC8vL1xuXG4gIGNvbnN0IHN1YnN0aXR1dGlvbnNKU09OID0gc3Vic3RpdHV0aW9uczsgLy8vXG5cbiAgc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnNKU09OLm1hcCgoc3Vic3RpdHV0aW9uSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBzdWJzdGl0dXRpb25KU09OLCAgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uRnJvbVN1YnN0aXR1dGlvbkpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9KTtcblxuICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IG1ldGF2YXJpYWJsZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBNZXRhdmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhdmFyaWFibGVzSlNPTiA9IG1ldGF2YXJpYWJsZXM7IC8vL1xuXG4gIG1ldGF2YXJpYWJsZXMgPSBtZXRhdmFyaWFibGVzSlNPTi5tYXAoKG1ldGF2YXJpYWJsZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gbWV0YXZhcmlhYmxlSlNPTiwgIC8vL1xuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IE1ldGF2YXJpYWJsZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH0pO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW5lbWljQ29udGV4dHNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlbGVhc2VDb250ZXh0ID0gY29udGV4dDsgLy8vXG5cbiAgY29uc3QgeyBjb250ZXh0cyB9ID0ganNvbjtcblxuICBjb25zdCBtbmVtaWNDb250ZXh0cyA9IGNvbnRleHRzLm1hcCgoY29udGV4dCkgPT4ge1xuICAgIGpzb24gPSBjb250ZXh0OyAvLy9cblxuICAgIGNvbnRleHQgPSByZWxlYXNlQ29udGV4dDsgLy8vXG5cbiAgICBjb25zdCBtbmVtaWNDb250ZXh0ID0gTW5lbWljQ29udGV4dC5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBtbmVtaWNDb250ZXh0OyAgLy8vXG4gIH0pO1xuXG4gIHJldHVybiBtbmVtaWNDb250ZXh0cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmVkVmFyaWFibGVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBkZWNsYXJlZFZhcmlhYmxlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXNKU09OID0gZGVjbGFyZWRWYXJpYWJsZXM7IC8vL1xuXG4gIGRlY2xhcmVkVmFyaWFibGVzID0gZGVjbGFyZWRWYXJpYWJsZXNKU09OLm1hcCgoZGVjbGFyZWRWYXJpYWJsZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gZGVjbGFyZWRWYXJpYWJsZUpTT04sICAvLy9cbiAgICAgICAgICB2YXJpYWJsZSA9IFZhcmlhYmxlLmZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGUgPSB2YXJpYWJsZTsgIC8vL1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGU7XG4gIH0pO1xuXG4gIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmVkTWV0YXZhcmlhYmxlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgZGVjbGFyZWRNZXRhdmFyaWFibGVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTiA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlczsgLy8vXG5cbiAgZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gZGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTi5tYXAoKGRlY2xhcmVkTWV0YXZhcmlhYmxlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBkZWNsYXJlZE1ldGF2YXJpYWJsZUpTT04sICAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBNZXRhdmFyaWFibGUuZnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGU7ICAvLy9cblxuICAgIHJldHVybiBkZWNsYXJlZE1ldGF2YXJpYWJsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRlY2xhcmVkTWV0YXZhcmlhYmxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVUb1R5cGVKU09OKHR5cGUpIHtcbiAgbGV0IHR5cGVKU09OID0gbnVsbDtcblxuICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGFicmlkZ2VkID0gdHJ1ZTtcblxuICAgIHR5cGVKU09OID0gdHlwZS50b0pTT04oYWJyaWRnZWQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxUb0xhYmVsSlNPTihsYWJlbCkge1xuICBjb25zdCBsYWJlbEpTT04gPSBsYWJlbC50b0pTT04oKTtcblxuICByZXR1cm4gbGFiZWxKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVUb01ldGFUeXBlSlNPTihtZXRhVHlwZSkge1xuICBjb25zdCBtZXRhVHlwZUpTT04gPSAobWV0YVR5cGUgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhVHlwZS50b0pTT04oKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gIHJldHVybiBtZXRhVHlwZUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04oZGVkdWN0aW9uKSB7XG4gIGNvbnN0IGRlZHVjdGlvbkpTT04gPSBkZWR1Y3Rpb24udG9KU09OKCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbkpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVUb1NpZ25hdHVyZUpTT04oc2lnbmF0dXJlKSB7XG4gIGNvbnN0IHNpZ25hdHVyZUpTT04gPSAoc2lnbmF0dXJlICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZS50b0pTT04oKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDtcblxuICByZXR1cm4gc2lnbmF0dXJlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Ub0NvbmNsdXNpb25KU09OKGNvbmNsdXNpb24pIHtcbiAgY29uc3QgY29uY2x1c2lvbkpTT04gPSBjb25jbHVzaW9uLnRvSlNPTigpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsVG9Qcm92aXNpb25hbEpTT04ocHJvdmlzaW9uYWwpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWxKU09OID0gcHJvdmlzaW9uYWw7ICAvLy9cblxuICByZXR1cm4gcHJvdmlzaW9uYWxKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW5lbWljQ29udGV4dFRvTW5lbWljQ29udGV4dEpTT04obW5lbWljQ29udGV4dCkge1xuICBjb25zdCBtbmVtaWNDb250ZXh0SlNPTiA9IG1uZW1pY0NvbnRleHQudG9KU09OKCk7XG5cbiAgcmV0dXJuIG1uZW1pY0NvbnRleHRKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RpdHV0aW9uRnJvbVN1YnN0aXR1dGlvbkpTT04oanNvbiwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm1TdWJzdGl0dXRpb24sIEZyYW1lU3Vic3RpdHV0aW9uLCBTdGF0ZW1lbnRTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBzdWJzdGl0dXRpb24gPSBUZXJtU3Vic3RpdHV0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpIHx8IEZyYW1lU3Vic3RpdHV0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpIHx8IFN0YXRlbWVudFN1YnN0aXR1dGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZXNUb1R5cGVzSlNPTih0eXBlcykge1xuICBjb25zdCB0eXBlc0pTT04gPSB0eXBlcy5tYXAoKHR5cGUpID0+IHtcbiAgICBjb25zdCB0eXBlSlNPTiA9IHR5cGUudG9KU09OKCk7XG5cbiAgICByZXR1cm4gdHlwZUpTT047XG4gIH0pO1xuXG4gIHJldHVybiB0eXBlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc1RvVGVybXNKU09OKHRlcm1zKSB7XG4gIGNvbnN0IHRlcm1zSlNPTiA9IHRlcm1zLm1hcCgodGVybSkgPT4ge1xuICAgIGNvbnN0IHRlcm1KU09OID0gdGVybS50b0pTT04oKTtcblxuICAgIHJldHVybiB0ZXJtSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmtzVG9MaW5rc0pTT04obGlua3MpIHtcbiAgY29uc3QgbGlua3NKU09OID0gbGlua3MubWFwKChsaW5rKSA9PiB7XG4gICAgY29uc3QgbGlua0pTT04gPSBsaW5rLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGxpbmtKU09OO1xuICB9KTtcblxuICByZXR1cm4gbGlua3NKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNUb1J1bGVzSlNPTihydWxlcykge1xuICBjb25zdCBydWxlc0pTT04gPSBydWxlcy5tYXAoKHJ1bGUpID0+IHtcbiAgICBjb25zdCBydWxlSlNPTiA9IHJ1bGUudG9KU09OKCk7XG5cbiAgICByZXR1cm4gcnVsZUpTT047XG4gIH0pO1xuXG4gIHJldHVybiBydWxlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNUb0xhYmVsc0pTT04obGFiZWxzKSB7XG4gIGNvbnN0IGxhYmVsc0pTT04gPSBsYWJlbHMubWFwKChsYWJlbCkgPT4ge1xuICAgIGNvbnN0IGxhYmVsSlNPTiA9IGxhYmVsLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGxhYmVsSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGxhYmVsc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZXNUb0ZyYW1lc0pTT04oZnJhbWVzKSB7XG4gIGNvbnN0IGZyYW1lc0pTT04gPSBmcmFtZXMubWFwKChmcmFtZSkgPT4ge1xuICAgIGNvbnN0IGZyYW1lSlNPTiA9IGZyYW1lLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGZyYW1lSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGZyYW1lc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlvbXNUb0F4aW9tc0pTT04oYXhpb21zKSB7XG4gIGNvbnN0IGF4aW9tc0pTT04gPSBheGlvbXMubWFwKChheGlvbSkgPT4ge1xuICAgIGNvbnN0IGF4aW9tSlNPTiA9IGF4aW9tLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGF4aW9tSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGF4aW9tc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2hlbWFzVG9TY2hlbWFzSlNPTihzY2hlbWFzKSB7XG4gIGNvbnN0IHNjaGVtYXNKU09OID0gc2NoZW1hcy5tYXAoKHNjaGVtYSkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYUpTT04gPSBzY2hlbWEudG9KU09OKCk7XG5cbiAgICByZXR1cm4gc2NoZW1hSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHNjaGVtYXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZXNUb1ByZW1pc2VzSlNPTihwcmVtaXNlcykge1xuICBjb25zdCBwcmVtaXNlc0pTT04gPSBwcmVtaXNlcy5tYXAoKHByZW1pc2UpID0+IHtcbiAgICBjb25zdCBwcmVtaXNlSlNPTiA9IHByZW1pc2UudG9KU09OKCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZUpTT047XG4gIH0pO1xuXG4gIHJldHVybiBwcmVtaXNlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtc1RvVGhlb3JlbXNKU09OKHRoZW9yZW1zKSB7XG4gIGNvbnN0IHRoZW9yZW1zSlNPTiA9IHRoZW9yZW1zLm1hcCgodGhlb3JlbSkgPT4ge1xuICAgIGNvbnN0IHRoZW9yZW1KU09OID0gdGhlb3JlbS50b0pTT04oKTtcblxuICAgIHJldHVybiB0aGVvcmVtSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHRoZW9yZW1zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNUb0h5cG90aGVzZXNKU09OKGh5cG90aGVzZXMpIHtcbiAgY29uc3QgaHlwb3RoZXNlc0pTT04gPSBoeXBvdGhlc2VzLm1hcCgoaHlwb3RoZXNpcykgPT4ge1xuICAgIGNvbnN0IGh5cG90aGVzaXNKU09OID0gaHlwb3RoZXNpcy50b0pTT04oKTtcblxuICAgIHJldHVybiBoeXBvdGhlc2lzSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGh5cG90aGVzZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4bmFtZVRvUHJldml4TmFtZUpTT04ocHJlZml4bmFtZSkge1xuICBjb25zdCBwcmVmaXhOYW1lSlNPTiA9IHByZWZpeG5hbWU7ICAvLy9cblxuICByZXR1cm4gcHJlZml4TmFtZUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzVG9TdXBlclR5cGVzSlNPTihzdXBlclR5cGVzKSB7XG4gIGNvbnN0IHN1cGVyVHlwZXNKU09OID0gc3VwZXJUeXBlcy5tYXAoKHN1cGVyVHlwZSkgPT4ge1xuICAgIGNvbnN0IGFicmlkZ2VkID0gdHJ1ZSxcbiAgICAgIHN1cGVyVHlwZUpTT04gPSBzdXBlclR5cGUudG9KU09OKGFicmlkZ2VkKTtcblxuICAgIHJldHVybiBzdXBlclR5cGVKU09OO1xuICB9KTtcblxuICByZXR1cm4gc3VwZXJUeXBlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0aWVzVG9Qcm9wZXJ0aWVzSlNPTihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IHByb3BlcnRpZXNKU09OID0gcHJvcGVydGllcy5tYXAoKHByb3BlcnR5KSA9PiB7XG4gICAgY29uc3QgcHJvcGVydHlKU09OID0gcHJvcGVydHkudG9KU09OKCk7XG5cbiAgICByZXR1cm4gcHJvcGVydHlKU09OO1xuICB9KTtcblxuICByZXR1cm4gcHJvcGVydGllc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0aWVzVG9FcXVhbGl0aWVzSlNPTihlcXVhbGl0aWVzKSB7XG4gIGNvbnN0IGVxdWFsaXRpZXNKU09OID0gZXF1YWxpdGllcy5tYXAoKGVxdWFsaXR5KSA9PiB7XG4gICAgY29uc3QgZXF1YWxpdHlKU09OID0gZXF1YWxpdHkudG9KU09OKCk7XG5cbiAgICByZXR1cm4gZXF1YWxpdHlKU09OO1xuICB9KTtcblxuICByZXR1cm4gZXF1YWxpdGllc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzVG9TdGF0ZW1lbnRzSlNPTihzdGF0ZW1lbnRzKSB7XG4gIGNvbnN0IHN0YXRlbWVudHNKU09OID0gc3RhdGVtZW50cy5tYXAoKHN0YXRlbWVudCkgPT4ge1xuICAgIGNvbnN0IHN0YXRlbWVudEpTT04gPSBzdGF0ZW1lbnQudG9KU09OKCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50SlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0aW9uc1RvQXNzZXJ0aW9uc0pTT04oYXNzZXJ0aW9ucykge1xuICBjb25zdCBhc3NlcnRpb25zSlNPTiA9IGFzc2VydGlvbnMubWFwKChhc3NlcnRpb24pID0+IHtcbiAgICBjb25zdCBhc3NlcnRpb25KU09OID0gYXNzZXJ0aW9uLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbkpTT047XG4gIH0pO1xuXG4gIHJldHVybiBhc3NlcnRpb25zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRvcnNUb0dlbmVyYXRvcnNKU09OKGdlbmVyYXRvcnMpIHtcbiAgY29uc3QgZ2VuZXJhdG9yc0pTT04gPSBnZW5lcmF0b3JzLm1hcCgoZ2VuZXJhdG9yKSA9PiB7XG4gICAgY29uc3QgZ2VuZXJhdG9ySlNPTiA9IGdlbmVyYXRvci50b0pTT04oKTtcblxuICAgIHJldHVybiBnZW5lcmF0b3JKU09OO1xuICB9KTtcblxuICByZXR1cm4gZ2VuZXJhdG9yc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJhaW50c1RvQ29uc3RyYWludHNKU09OKGNvbnN0cmFpbnRzKSB7XG4gIGNvbnN0IGNvbnN0cmFpbnRzSlNPTiA9IGNvbnN0cmFpbnRzLm1hcCgoY29uc3RyYWludCkgPT4ge1xuICAgIGNvbnN0IGNvbnN0cmFpbnRKU09OID0gY29uc3RyYWludC50b0pTT04oKTtcblxuICAgIHJldHVybiBjb25zdHJhaW50SlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbnN0cmFpbnRzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmplY3R1cmVzVG9Db25qZWN0dXJlc0pTT04oY29uamVjdHVyZXMpIHtcbiAgY29uc3QgY29uamVjdHVyZXNKU09OID0gY29uamVjdHVyZXMubWFwKChjb25qZWN0dXJlKSA9PiB7XG4gICAgY29uc3QgY29uamVjdHVyZUpTT04gPSBjb25qZWN0dXJlLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGNvbmplY3R1cmVKU09OO1xuICB9KTtcblxuICByZXR1cm4gY29uamVjdHVyZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvcnNUb0NvbWJpbmF0b3JzSlNPTihjb21iaW5hdG9ycykge1xuICBjb25zdCBjb21iaW5hdG9yc0pTT04gPSBjb21iaW5hdG9ycy5tYXAoKGNvbWJpbmF0b3IpID0+IHtcbiAgICBjb25zdCBjb21iaW5hdG9ySlNPTiA9IGNvbWJpbmF0b3IudG9KU09OKCk7XG5cbiAgICByZXR1cm4gY29tYmluYXRvckpTT047XG4gIH0pO1xuXG4gIHJldHVybiBjb21iaW5hdG9yc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc1RvQXNzdW1wdGlvbnNKU09OKGFzc3VtcHRpb25zKSB7XG4gIGNvbnN0IGFzc3VtcHRpb25zSlNPTiA9IGFzc3VtcHRpb25zLm1hcCgoYXNzdW1wdGlvbikgPT4ge1xuICAgIGNvbnN0IGFzc3VtcHRpb25KU09OID0gYXNzdW1wdGlvbi50b0pTT04oKTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTihzdXBwb3NpdGlvbnMpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25zSlNPTiA9IHN1cHBvc2l0aW9ucy5tYXAoKHN1cHBvc2l0aW9uKSA9PiB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25KU09OID0gc3VwcG9zaXRpb24udG9KU09OKCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb25KU09OO1xuICB9KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yc1RvQ29uc3RydWN0b3JzSlNPTihjb25zdHJ1Y3RvcnMpIHtcbiAgY29uc3QgY29uc3RydWN0b3JzSlNPTiA9IGNvbnN0cnVjdG9ycy5tYXAoKGNvbnN0cnVjdG9yKSA9PiB7XG4gICAgY29uc3QgY29uc3RydWN0b3JKU09OID0gY29uc3RydWN0b3IudG9KU09OKCk7XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3JKU09OO1xuICB9KTtcblxuICByZXR1cm4gY29uc3RydWN0b3JzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhlc1RvVHlwZVByZWZpeGVzSlNPTih0eXBlUHJlZml4ZXMpIHtcbiAgY29uc3QgdHlwZVByZWZpeGVzSlNPTiA9IHR5cGVQcmVmaXhlcy5tYXAoKHR5cGVQcmVmaXgpID0+IHtcbiAgICBjb25zdCB0eXBlUHJlZml4SlNPTiA9IHR5cGVQcmVmaXgudG9KU09OKCk7XG5cbiAgICByZXR1cm4gdHlwZVByZWZpeEpTT047XG4gIH0pO1xuXG4gIHJldHVybiB0eXBlUHJlZml4ZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RpdHV0aW9uc1RvU3Vic3RpdHV0aW9uc0pTT04oc3Vic3RpdHV0aW9ucykge1xuICBjb25zdCBzdWJzdGl0dXRpb25zSlNPTiA9IHN1YnN0aXR1dGlvbnMubWFwKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25KU09OID0gc3Vic3RpdHV0aW9uLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbkpTT047XG4gIH0pO1xuXG4gIHJldHVybiBzdWJzdGl0dXRpb25zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZXNUb01ldGF2YXJpYWJsZXNKU09OKG1ldGF2YXJpYWJsZXMpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlc0pTT04gPSBtZXRhdmFyaWFibGVzLm1hcCgobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlSlNPTiA9IG1ldGF2YXJpYWJsZS50b0pTT04oKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVKU09OO1xuICB9KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtbmVtaWNDb250ZXh0c1RvTW5lbWljQ29udGV4dHNKU09OKG1uZW1pY0NvbnRleHRzKSB7XG4gIGNvbnN0IG1uZW1pY0NvbnRleHRzSlNPTiA9IG1uZW1pY0NvbnRleHRzLm1hcCgobW5lbWljQ29udGV4dCkgPT4ge1xuICAgIGNvbnN0IG1uZW1pY0NvbnRleHRKU09OID0gbW5lbWljQ29udGV4dC50b0pTT04oKTtcblxuICAgIHJldHVybiBtbmVtaWNDb250ZXh0SlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIG1uZW1pY0NvbnRleHRzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmVkVmFyaWFibGVzVG9EZWNsYXJlZFZhcmlhYmxlc0pTT04oZGVjbGFyZWRWYXJpYWJsZXMpIHtcbiAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZXNKU09OID0gZGVjbGFyZWRWYXJpYWJsZXMubWFwKChkZWNsYXJlZFZhcmlhYmxlKSA9PiB7XG4gICAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZUpTT04gPSBkZWNsYXJlZFZhcmlhYmxlLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGVKU09OO1xuICB9KTtcblxuICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyZWRNZXRhdmFyaWFibGVzVG9EZWNsYXJlZE1ldGF2YXJpYWJsZXNKU09OKGRlY2xhcmVkTWV0YXZhcmlhYmxlcykge1xuICBjb25zdCBkZWNsYXJlZE1ldGF2YXJpYWJsZXNKU09OID0gZGVjbGFyZWRNZXRhdmFyaWFibGVzLm1hcCgoZGVjbGFyZWRNZXRhdmFyaWFibGUpID0+IHtcbiAgICBjb25zdCBkZWNsYXJlZE1ldGF2YXJpYWJsZUpTT04gPSBkZWNsYXJlZE1ldGF2YXJpYWJsZS50b0pTT04oKTtcblxuICAgIHJldHVybiBkZWNsYXJlZE1ldGF2YXJpYWJsZUpTT047XG4gIH0pO1xuXG4gIHJldHVybiBkZWNsYXJlZE1ldGF2YXJpYWJsZXNKU09OO1xufVxuXG5mdW5jdGlvbiBmaW5kVHlwZUJ5TmFtZShuYW1lLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOYW1lID0gbmFtZSwgIC8vL1xuICAgICAgICB0eXBlID0gY29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5mdW5jdGlvbiBmaW5kTWV0YVR5cGVCeU5hbWUobmFtZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhVHlwZU5hbWUgPSBuYW1lLCAgLy8vXG4gICAgICAgIG1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpO1xuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cbiJdLCJuYW1lcyI6WyJhc3NlcnRpb25zRnJvbUpTT04iLCJhc3NlcnRpb25zVG9Bc3NlcnRpb25zSlNPTiIsImFzc3VtcHRpb25zRnJvbUpTT04iLCJhc3N1bXB0aW9uc1RvQXNzdW1wdGlvbnNKU09OIiwiYXhpb21zRnJvbUpTT04iLCJheGlvbXNUb0F4aW9tc0pTT04iLCJjb21iaW5hdG9yc0Zyb21KU09OIiwiY29tYmluYXRvcnNUb0NvbWJpbmF0b3JzSlNPTiIsImNvbmNsdXNpb25Gcm9tSlNPTiIsImNvbmNsdXNpb25Ub0NvbmNsdXNpb25KU09OIiwiY29uamVjdHVyZXNGcm9tSlNPTiIsImNvbmplY3R1cmVzVG9Db25qZWN0dXJlc0pTT04iLCJjb25zdHJhaW50c0Zyb21KU09OIiwiY29uc3RyYWludHNUb0NvbnN0cmFpbnRzSlNPTiIsImNvbnN0cnVjdG9yc0Zyb21KU09OIiwiY29uc3RydWN0b3JzVG9Db25zdHJ1Y3RvcnNKU09OIiwiZGVjbGFyZWRNZXRhdmFyaWFibGVzRnJvbUpTT04iLCJkZWNsYXJlZE1ldGF2YXJpYWJsZXNUb0RlY2xhcmVkTWV0YXZhcmlhYmxlc0pTT04iLCJkZWNsYXJlZFZhcmlhYmxlc0Zyb21KU09OIiwiZGVjbGFyZWRWYXJpYWJsZXNUb0RlY2xhcmVkVmFyaWFibGVzSlNPTiIsImRlZHVjdGlvbkZyb21KU09OIiwiZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OIiwiZXF1YWxpdGllc0Zyb21KU09OIiwiZXF1YWxpdGllc1RvRXF1YWxpdGllc0pTT04iLCJmcmFtZXNGcm9tSlNPTiIsImZyYW1lc1RvRnJhbWVzSlNPTiIsImdlbmVyYXRvcnNGcm9tSlNPTiIsImdlbmVyYXRvcnNUb0dlbmVyYXRvcnNKU09OIiwiaHlwb3RoZXNlc0Zyb21KU09OIiwiaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04iLCJsYWJlbEZyb21KU09OIiwibGFiZWxUb0xhYmVsSlNPTiIsImxhYmVsc0Zyb21KU09OIiwibGFiZWxzVG9MYWJlbHNKU09OIiwibGlua3NGcm9tSlNPTiIsImxpbmtzVG9MaW5rc0pTT04iLCJtZXRhVHlwZUZyb21KU09OIiwibWV0YVR5cGVUb01ldGFUeXBlSlNPTiIsIm1ldGF2YXJpYWJsZXNGcm9tSlNPTiIsIm1ldGF2YXJpYWJsZXNUb01ldGF2YXJpYWJsZXNKU09OIiwibW5lbWljQ29udGV4dEZyb21KU09OIiwibW5lbWljQ29udGV4dFRvTW5lbWljQ29udGV4dEpTT04iLCJtbmVtaWNDb250ZXh0c0Zyb21KU09OIiwibW5lbWljQ29udGV4dHNUb01uZW1pY0NvbnRleHRzSlNPTiIsInByZWZpeE5hbWVGcm9tSlNPTiIsInByZWZpeG5hbWVUb1ByZXZpeE5hbWVKU09OIiwicHJlbWlzZXNGcm9tSlNPTiIsInByZW1pc2VzVG9QcmVtaXNlc0pTT04iLCJwcm9wZXJ0aWVzRnJvbUpTT04iLCJwcm9wZXJ0aWVzVG9Qcm9wZXJ0aWVzSlNPTiIsInByb3Zpc2lvbmFsRnJvbUpTT04iLCJwcm92aXNpb25hbFRvUHJvdmlzaW9uYWxKU09OIiwicnVsZXNGcm9tSlNPTiIsInJ1bGVzVG9SdWxlc0pTT04iLCJzY2hlbWFzRnJvbUpTT04iLCJzY2hlbWFzVG9TY2hlbWFzSlNPTiIsInNpZ25hdHVyZUZyb21KU09OIiwic2lnbmF0dXJlVG9TaWduYXR1cmVKU09OIiwic3RhdGVtZW50c0Zyb21KU09OIiwic3RhdGVtZW50c1RvU3RhdGVtZW50c0pTT04iLCJzdWJzdGl0dXRpb25Gcm9tU3Vic3RpdHV0aW9uSlNPTiIsInN1YnN0aXR1dGlvbnNGcm9tSlNPTiIsInN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OIiwic3VwZXJUeXBlc0Zyb21KU09OIiwic3VwZXJUeXBlc1RvU3VwZXJUeXBlc0pTT04iLCJzdXBwb3NpdGlvbnNGcm9tSlNPTiIsInN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTiIsInRlcm1zRnJvbUpTT04iLCJ0ZXJtc1RvVGVybXNKU09OIiwidGhlb3JlbXNGcm9tSlNPTiIsInRoZW9yZW1zVG9UaGVvcmVtc0pTT04iLCJ0eXBlRnJvbUpTT04iLCJ0eXBlUHJlZml4ZXNGcm9tSlNPTiIsInR5cGVQcmVmaXhlc1RvVHlwZVByZWZpeGVzSlNPTiIsInR5cGVUb1R5cGVKU09OIiwidHlwZXNGcm9tSlNPTiIsInR5cGVzVG9UeXBlc0pTT04iLCJqc29uIiwiY29udGV4dCIsInR5cGUiLCJzdHJpbmciLCJuYW1lIiwiZmluZFR5cGVCeU5hbWUiLCJsYWJlbCIsIkxhYmVsIiwiZWxlbWVudHMiLCJsYWJlbEpTT04iLCJmcm9tSlNPTiIsIm1ldGFUeXBlIiwiZmluZE1ldGFUeXBlQnlOYW1lIiwiZGVkdWN0aW9uIiwiRGVkdWN0aW9uIiwiZGVkdWN0aW9uSlNPTiIsInNpZ25hdHVyZSIsIlNpZ25hdHVyZSIsInNpZ25hdHVyZUpTT04iLCJjb25jbHVzaW9uIiwiQ29uY2x1c2lvbiIsImNvbmNsdXNpb25KU09OIiwicHJvdmlzaW9uYWwiLCJyZWxlYXNlQ29udGV4dCIsIm1uZW1pY0NvbnRleHQiLCJNbmVtaWNDb250ZXh0IiwidHlwZXMiLCJ0eXBlc0pTT04iLCJUeXBlIiwiZm9yRWFjaCIsInR5cGVKU09OIiwicHVzaCIsInRlcm1zIiwiVGVybSIsInRlcm1zSlNPTiIsIm1hcCIsInRlcm1KU09OIiwidGVybSIsImxpbmtzIiwiTGluayIsImxpbmtzSlNPTiIsImxpbmtKU09OIiwibGluayIsInJ1bGVzIiwiUnVsZSIsInJ1bGVzSlNPTiIsInJ1bGVKU09OIiwicnVsZSIsImZyYW1lcyIsIkZyYW1lIiwiZnJhbWVzSlNPTiIsImZyYW1lSlNPTiIsImZyYW1lIiwibGFiZWxzIiwibGFiZWxzSlNPTiIsImF4aW9tcyIsIkF4aW9tIiwiYXhpb21zSlNPTiIsImF4aW9tSlNPTiIsImF4aW9tIiwic2NoZW1hcyIsIlNjaGVtYSIsInNjaGVtYXNKU09OIiwic2NoZW1hSlNPTiIsInNjaGVtYSIsInByZW1pc2VzIiwiUHJlbWlzZSIsInByZW1pc2VzSlNPTiIsInByZW1pc2VKU09OIiwicHJlbWlzZSIsInRoZW9yZW1zIiwiVGhlb3JlbSIsInRoZW9yZW1zSlNPTiIsInRoZW9yZW1KU09OIiwidGhlb3JlbSIsImVxdWFsaXRpZXMiLCJFcXVhbGl0eSIsImVxdWFsaXRpZXNKU09OIiwiZXF1YWxpdHlKU09OIiwiZXF1YWxpdHkiLCJwcm9wZXJ0aWVzIiwiUHJvcGVydHkiLCJwcm9wZXJ0aWVzSlNPTiIsInByb3BlcnR5SlNPTiIsInByb3BlcnR5IiwicHJlZml4TmFtZSIsInN1cGVyVHlwZXMiLCJzdXBlclR5cGVzSlNPTiIsInN1cGVyVHlwZUpTT04iLCJzdXBlclR5cGUiLCJoeXBvdGhlc2VzIiwiSHlwb3RoZXNpcyIsImh5cG90aGVzZXNKU09OIiwiaHlwb3RoZXNpc0pTT04iLCJoeXBvdGhlc2lzIiwic3RhdGVtZW50cyIsIlN0YXRlbWVudCIsInN0YXRlbWVudHNKU09OIiwic3RhdGVtZW50SlNPTiIsInN0YXRlbWVudCIsImFzc2VydGlvbnMiLCJUeXBlQXNzZXJ0aW9uIiwiU2NoZW1hQXNzZXJ0aW9uIiwiRGVmaW5lZEFzc2VydGlvbiIsIlByb3BlcnR5QXNzZXJ0aW9uIiwiU3VicHJvb2ZBc3NlcnRpb24iLCJDb250YWluZWRBc3NlcnRpb24iLCJTaWduYXR1cmVBc3NlcnRpb24iLCJhc3NlcnRpb25zSlNPTiIsImFzc2VydGlvbkpTT04iLCJhc3NlcnRpb24iLCJnZW5lcmF0b3JzIiwiR2VuZXJhdG9yIiwiZ2VuZXJhdG9yc0pTT04iLCJnZW5lcmF0b3JKU09OIiwiZ2VuZXJhdG9yIiwiY29uamVjdHVyZXMiLCJDb25qZWN0dXJlIiwiY29uamVjdHVyZXNKU09OIiwiY29uamVjdHVyZUpTT04iLCJjb25qZWN0dXJlIiwiY29tYmluYXRvcnMiLCJDb21iaW5hdG9yIiwiY29tYmluYXRvcnNKU09OIiwiY29tYmluYXRvckpTT04iLCJjb21iaW5hdG9yIiwiYXNzdW1wdGlvbnMiLCJBc3N1bXB0aW9uIiwiYXNzdW1wdGlvbnNKU09OIiwiYXNzdW1wdGlvbkpTT04iLCJhc3N1bXB0aW9uIiwiY29uc3RyYWludHMiLCJDb25zdHJhaW50IiwiY29uc3RyYWludHNKU09OIiwiY29uc3RyYWludEpTT04iLCJjb25zdHJhaW50IiwidHlwZVByZWZpeGVzIiwiVHlwZVByZWZpeCIsInR5cGVQcmVmaXhlc0pTT04iLCJ0eXBlUHJlZml4SlNPTiIsInR5cGVQcmVmaXgiLCJjb25zdHJ1Y3RvcnMiLCJDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yc0pTT04iLCJjb25zdHJ1Y3RvckpTT04iLCJjb25zdHJ1Y3RvciIsInN1cHBvc2l0aW9ucyIsIlN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25zSlNPTiIsInN1cHBvc2l0aW9uSlNPTiIsInN1cHBvc2l0aW9uIiwic3Vic3RpdHV0aW9ucyIsInN1YnN0aXR1dGlvbnNKU09OIiwic3Vic3RpdHV0aW9uSlNPTiIsInN1YnN0aXR1dGlvbiIsIm1ldGF2YXJpYWJsZXMiLCJNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVzSlNPTiIsIm1ldGF2YXJpYWJsZUpTT04iLCJtZXRhdmFyaWFibGUiLCJjb250ZXh0cyIsIm1uZW1pY0NvbnRleHRzIiwiZGVjbGFyZWRWYXJpYWJsZXMiLCJWYXJpYWJsZSIsImRlY2xhcmVkVmFyaWFibGVzSlNPTiIsImRlY2xhcmVkVmFyaWFibGVKU09OIiwidmFyaWFibGUiLCJkZWNsYXJlZFZhcmlhYmxlIiwiZGVjbGFyZWRNZXRhdmFyaWFibGVzIiwiZGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTiIsImRlY2xhcmVkTWV0YXZhcmlhYmxlSlNPTiIsImRlY2xhcmVkTWV0YXZhcmlhYmxlIiwiYWJyaWRnZWQiLCJ0b0pTT04iLCJtZXRhVHlwZUpTT04iLCJwcm92aXNpb25hbEpTT04iLCJtbmVtaWNDb250ZXh0SlNPTiIsIlRlcm1TdWJzdGl0dXRpb24iLCJGcmFtZVN1YnN0aXR1dGlvbiIsIlN0YXRlbWVudFN1YnN0aXR1dGlvbiIsInByZWZpeG5hbWUiLCJwcmVmaXhOYW1lSlNPTiIsIm1uZW1pY0NvbnRleHRzSlNPTiIsInR5cGVOYW1lIiwiZmluZFR5cGVCeVR5cGVOYW1lIiwibWV0YVR5cGVOYW1lIiwiZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQWdXZ0JBO2VBQUFBOztRQXVjQUM7ZUFBQUE7O1FBallBQztlQUFBQTs7UUFtYkFDO2VBQUFBOztRQS9vQkFDO2VBQUFBOztRQTRmQUM7ZUFBQUE7O1FBaFRBQztlQUFBQTs7UUF5YkFDO2VBQUFBOztRQW53QkFDO2VBQUFBOztRQXFpQkFDO2VBQUFBOztRQTNPQUM7ZUFBQUE7O1FBK2JBQztlQUFBQTs7UUEvWUFDO2VBQUFBOztRQXFZQUM7ZUFBQUE7O1FBcldBQztlQUFBQTs7UUF1WkFDO2VBQUFBOztRQXJUQUM7ZUFBQUE7O1FBaVhBQztlQUFBQTs7UUFsWUFDO2VBQUFBOztRQXdYQUM7ZUFBQUE7O1FBLzJCQUM7ZUFBQUE7O1FBbWpCQUM7ZUFBQUE7O1FBelZBQztlQUFBQTs7UUF5Z0JBQztlQUFBQTs7UUF6bUJBQztlQUFBQTs7UUFraEJBQztlQUFBQTs7UUF0VUFDO2VBQUFBOztRQTJiQUM7ZUFBQUE7O1FBamZBQztlQUFBQTs7UUE4YUFDO2VBQUFBOztRQTF0QkFDO2VBQUFBOztRQWlrQkFDO2VBQUFBOztRQTNaQUM7ZUFBQUE7O1FBd2ZBQztlQUFBQTs7UUF4aUJBQztlQUFBQTs7UUFvaEJBQztlQUFBQTs7UUE3bkJBQztlQUFBQTs7UUEwakJBQztlQUFBQTs7UUF0RkFDO2VBQUFBOztRQXNZQUM7ZUFBQUE7O1FBNXlCQUM7ZUFBQUE7O1FBOGhCQUM7ZUFBQUE7O1FBeEdBQztlQUFBQTs7UUFnWUFDO2VBQUFBOztRQTNtQkFDO2VBQUFBOztRQThjQUM7ZUFBQUE7O1FBOWdCQUM7ZUFBQUE7O1FBZ2ZBQztlQUFBQTs7UUFoY0FDO2VBQUFBOztRQStlQUM7ZUFBQUE7O1FBaHJCQUM7ZUFBQUE7O1FBOGhCQUM7ZUFBQUE7O1FBN2RBQztlQUFBQTs7UUE4Z0JBQztlQUFBQTs7UUE5Y0FDO2VBQUFBOztRQXNmQUM7ZUFBQUE7O1FBbnBC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
832
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvanNvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IE1uZW1pY0NvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvbW5lbWljXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyB0eXBlIH0gPSBqc29uO1xuXG4gIGlmICh0eXBlICE9PSBudWxsKSB7XG4gICAganNvbiA9IHR5cGU7ICAvLy9cblxuICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgIG5hbWUgPSBzdHJpbmc7ICAvLy9cblxuICAgIHR5cGUgPSBmaW5kVHlwZUJ5TmFtZShuYW1lLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGxhYmVsIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBsYWJlbEpTT04gPSBsYWJlbDsgIC8vL1xuXG4gIGpzb24gPSBsYWJlbEpTT047IC8vL1xuXG4gIGxhYmVsID0gTGFiZWwuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IG1ldGFUeXBlIH0gPSBqc29uO1xuXG4gIGlmIChtZXRhVHlwZSAhPT0gbnVsbCkge1xuICAgIGpzb24gPSBtZXRhVHlwZTsgIC8vL1xuXG4gICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgbmFtZSA9IHN0cmluZzsgIC8vL1xuXG4gICAgbWV0YVR5cGUgPSBmaW5kTWV0YVR5cGVCeU5hbWUobmFtZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YVR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGRlZHVjdGlvbiB9ID0ganNvbjtcblxuICBjb25zdCB7IERlZHVjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIGRlZHVjdGlvbkpTT04gPSBkZWR1Y3Rpb247ICAvLy9cblxuICBqc29uID0gZGVkdWN0aW9uSlNPTjsgIC8vL1xuXG4gIGRlZHVjdGlvbiA9IERlZHVjdGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBzaWduYXR1cmUgPSBudWxsIH0gPSBqc29uO1xuXG4gIGlmIChzaWduYXR1cmUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgc2lnbmF0dXJlSlNPTiA9IHNpZ25hdHVyZTsgIC8vL1xuXG4gICAganNvbiA9IHNpZ25hdHVyZUpTT047IC8vL1xuXG4gICAgc2lnbmF0dXJlID0gU2lnbmF0dXJlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGNvbmNsdXNpb24gfSA9IGpzb247XG5cbiAgY29uc3QgeyBDb25jbHVzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgY29uY2x1c2lvbkpTT04gPSBjb25jbHVzaW9uOyAgLy8vXG5cbiAganNvbiA9IGNvbmNsdXNpb25KU09OOyAgLy8vXG5cbiAgY29uY2x1c2lvbiA9IENvbmNsdXNpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgY29uc3QgeyBwcm92aXNpb25hbCB9ID0ganNvbjtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtbmVtaWNDb250ZXh0RnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBjb25zdCByZWxlYXNlQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICh7IGNvbnRleHQgfSA9IGpzb24pO1xuXG4gIGpzb24gPSBjb250ZXh0OyAvLy9cblxuICBjb250ZXh0ID0gcmVsZWFzZUNvbnRleHQ7IC8vL1xuXG4gIGNvbnN0IG1uZW1pY0NvbnRleHQgPSBNbmVtaWNDb250ZXh0LmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIHJldHVybiBtbmVtaWNDb250ZXh0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZXNGcm9tSlNPTihqc29uLCB0eXBlcywgY29udGV4dCkge1xuICBjb25zdCB7IHR5cGVzOiB0eXBlc0pTT04gfSA9IGpzb247XG5cbiAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cztcblxuICB0eXBlc0pTT04uZm9yRWFjaCgodHlwZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gdHlwZUpTT04sICAvLy9cbiAgICAgICAgICB0eXBlID0gVHlwZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHR5cGVzLnB1c2godHlwZSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHRlcm1zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgVGVybSB9ID0gZWxlbWVudHMsXG4gICAgdGVybXNKU09OID0gdGVybXM7IC8vL1xuXG4gIHRlcm1zID0gdGVybXNKU09OLm1hcCgodGVybUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gdGVybUpTT04sICAvLy9cbiAgICAgIHRlcm0gPSBUZXJtLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmtzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBsaW5rcyB9ID0ganNvbjtcblxuICBjb25zdCB7IExpbmsgfSA9IGVsZW1lbnRzLFxuICAgICAgICBsaW5rc0pTT04gPSBsaW5rczsgLy8vXG5cbiAgbGlua3MgPSBsaW5rc0pTT04ubWFwKChsaW5rSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBsaW5rSlNPTiwgIC8vL1xuICAgICAgICAgIGxpbmsgPSBMaW5rLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGxpbms7XG4gIH0pO1xuXG4gIHJldHVybiBsaW5rcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBydWxlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFJ1bGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBydWxlc0pTT04gPSBydWxlczsgLy8vXG5cbiAgcnVsZXMgPSBydWxlc0pTT04ubWFwKChydWxlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBydWxlSlNPTiwgIC8vL1xuICAgICAgICAgIHJ1bGUgPSBSdWxlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH0pO1xuXG4gIHJldHVybiBydWxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgZnJhbWVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgRnJhbWUgfSA9IGVsZW1lbnRzLFxuICAgIGZyYW1lc0pTT04gPSBmcmFtZXM7IC8vL1xuXG4gIGZyYW1lcyA9IGZyYW1lc0pTT04ubWFwKChmcmFtZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gZnJhbWVKU09OLCAgLy8vXG4gICAgICAgICAgZnJhbWUgPSBGcmFtZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBmcmFtZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZyYW1lcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgbGFiZWxzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBsYWJlbHNKU09OID0gbGFiZWxzOyAgLy8vXG5cbiAgbGFiZWxzID0gbGFiZWxzSlNPTi5tYXAoKGxhYmVsSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBsYWJlbEpTT04sIC8vL1xuICAgICAgICAgIGxhYmVsID0gTGFiZWwuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbGFiZWw7XG4gIH0pO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlvbXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGF4aW9tcyB9ID0ganNvbjtcblxuICBjb25zdCB7IEF4aW9tIH0gPSBlbGVtZW50cyxcbiAgICAgICAgYXhpb21zSlNPTiA9IGF4aW9tczsgLy8vXG5cbiAgYXhpb21zID0gYXhpb21zSlNPTi5tYXAoKGF4aW9tSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBheGlvbUpTT04sICAvLy9cbiAgICAgICAgICBheGlvbSA9IEF4aW9tLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGF4aW9tO1xuICB9KTtcblxuICByZXR1cm4gYXhpb21zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NoZW1hc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgc2NoZW1hcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFNjaGVtYSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHNjaGVtYXNKU09OID0gc2NoZW1hczsgLy8vXG5cbiAgc2NoZW1hcyA9IHNjaGVtYXNKU09OLm1hcCgoc2NoZW1hSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBzY2hlbWFKU09OLCAgLy8vXG4gICAgICBzY2hlbWEgPSBTY2hlbWEuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc2NoZW1hO1xuICB9KTtcblxuICByZXR1cm4gc2NoZW1hcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBwcmVtaXNlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFByZW1pc2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwcmVtaXNlc0pTT04gPSBwcmVtaXNlczsgIC8vL1xuXG4gIHByZW1pc2VzID0gcHJlbWlzZXNKU09OLm1hcCgocHJlbWlzZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gcHJlbWlzZUpTT04sIC8vL1xuICAgICAgICAgIHByZW1pc2UgPSBQcmVtaXNlLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByZW1pc2U7XG4gIH0pO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoZW9yZW1zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyB0aGVvcmVtcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFRoZW9yZW0gfSA9IGVsZW1lbnRzLFxuICAgICAgICB0aGVvcmVtc0pTT04gPSB0aGVvcmVtczsgLy8vXG5cbiAgdGhlb3JlbXMgPSB0aGVvcmVtc0pTT04ubWFwKCh0aGVvcmVtSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB0aGVvcmVtSlNPTiwgIC8vL1xuICAgICAgICAgIHRoZW9yZW0gPSBUaGVvcmVtLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRoZW9yZW07XG4gIH0pO1xuXG4gIHJldHVybiB0aGVvcmVtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsaXRpZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGVxdWFsaXRpZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBFcXVhbGl0eSB9ID0gZWxlbWVudHMsXG4gICAgZXF1YWxpdGllc0pTT04gPSBlcXVhbGl0aWVzOyAvLy9cblxuICBlcXVhbGl0aWVzID0gZXF1YWxpdGllc0pTT04ubWFwKChlcXVhbGl0eUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gZXF1YWxpdHlKU09OLCAgLy8vXG4gICAgICBlcXVhbGl0eSA9IEVxdWFsaXR5LmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9KTtcblxuICByZXR1cm4gZXF1YWxpdGllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHByb3BlcnRpZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBQcm9wZXJ0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByb3BlcnRpZXNKU09OID0gcHJvcGVydGllczsgLy8vXG5cbiAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNKU09OLm1hcCgocHJvcGVydHlKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHByb3BlcnR5SlNPTiwgIC8vL1xuICAgICAgICAgIHByb3BlcnR5ID0gUHJvcGVydHkuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJvcGVydHk7XG4gIH0pO1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4TmFtZUZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgY29uc3QgeyBwcmVmaXhOYW1lIH0gPSBqc29uO1xuXG4gIHJldHVybiBwcmVmaXhOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgY29uc3QgeyBzdXBlclR5cGVzOiBzdXBlclR5cGVzSlNPTiB9ID0ganNvbjtcblxuICBjb25zdCBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0pTT04ubWFwKChzdXBlclR5cGVKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHN1cGVyVHlwZUpTT04sICAvLy9cbiAgICAgIHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgbmFtZSA9IHN0cmluZywgIC8vL1xuICAgICAgdHlwZSA9IGZpbmRUeXBlQnlOYW1lKG5hbWUsIGNvbnRleHQpLFxuICAgICAgc3VwZXJUeXBlID0gdHlwZTsgLy8vXG5cbiAgICByZXR1cm4gc3VwZXJUeXBlO1xuICB9KTtcblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGh5cG90aGVzZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBIeXBvdGhlc2lzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgaHlwb3RoZXNlc0pTT04gPSBoeXBvdGhlc2VzOyAgLy8vXG5cbiAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNKU09OLm1hcCgoaHlwb3RoZXNpc0pTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gaHlwb3RoZXNpc0pTT04sIC8vL1xuICAgICAgICAgIGh5cG90aGVzaXMgPSBIeXBvdGhlc2lzLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXM7XG4gIH0pO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgc3RhdGVtZW50cyB9ID0ganNvbjtcblxuICBjb25zdCB7IFN0YXRlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIHN0YXRlbWVudHNKU09OID0gc3RhdGVtZW50czsgLy8vXG5cbiAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNKU09OLm1hcCgoc3RhdGVtZW50SlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBzdGF0ZW1lbnRKU09OLCAgLy8vXG4gICAgICAgICAgc3RhdGVtZW50ID0gU3RhdGVtZW50LmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBhc3NlcnRpb25zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgVHlwZUFzc2VydGlvbiwgU2NoZW1hQXNzZXJ0aW9uLCBEZWZpbmVkQXNzZXJ0aW9uLCBQcm9wZXJ0eUFzc2VydGlvbiwgU3VicHJvb2ZBc3NlcnRpb24sIENvbnRhaW5lZEFzc2VydGlvbiwgU2lnbmF0dXJlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgYXNzZXJ0aW9uc0pTT04gPSBhc3NlcnRpb25zOyAvLy9cblxuICBhc3NlcnRpb25zID0gYXNzZXJ0aW9uc0pTT04ubWFwKChhc3NlcnRpb25KU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGFzc2VydGlvbkpTT04sICAvLy9cbiAgICAgICAgICBhc3NlcnRpb24gPSBUeXBlQXNzZXJ0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpXG4gICAgICAgICAgICAgICAgICAgfHwgU2NoZW1hQXNzZXJ0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpXG4gICAgICAgICAgICAgICAgICAgfHwgRGVmaW5lZEFzc2VydGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KVxuICAgICAgICAgICAgICAgICAgIHx8IFByb3BlcnR5QXNzZXJ0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpXG4gICAgICAgICAgICAgICAgICAgfHwgU3VicHJvb2ZBc3NlcnRpb24uZnJvbUpTT04oanNvbiwgY29udGV4dClcbiAgICAgICAgICAgICAgICAgICB8fCBDb250YWluZWRBc3NlcnRpb24uZnJvbUpTT04oanNvbiwgY29udGV4dClcbiAgICAgICAgICAgICAgICAgICB8fCBTaWduYXR1cmVBc3NlcnRpb24uZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9uO1xuICB9KTtcblxuICByZXR1cm4gYXNzZXJ0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRvcnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGdlbmVyYXRvcnMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBHZW5lcmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBnZW5lcmF0b3JzSlNPTiA9IGdlbmVyYXRvcnM7IC8vL1xuXG4gIGdlbmVyYXRvcnMgPSBnZW5lcmF0b3JzSlNPTi5tYXAoKGdlbmVyYXRvckpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gZ2VuZXJhdG9ySlNPTiwgIC8vL1xuICAgICAgICAgIGdlbmVyYXRvciA9IEdlbmVyYXRvci5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH0pO1xuXG4gIHJldHVybiBnZW5lcmF0b3JzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGNvbmplY3R1cmVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgQ29uamVjdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGNvbmplY3R1cmVzSlNPTiA9IGNvbmplY3R1cmVzOyAvLy9cblxuICBjb25qZWN0dXJlcyA9IGNvbmplY3R1cmVzSlNPTi5tYXAoKGNvbmplY3R1cmVKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGNvbmplY3R1cmVKU09OLCAgLy8vXG4gICAgICAgICAgY29uamVjdHVyZSA9IENvbmplY3R1cmUuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29uamVjdHVyZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmplY3R1cmVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvcnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGNvbWJpbmF0b3JzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgQ29tYmluYXRvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIGNvbWJpbmF0b3JzSlNPTiA9IGNvbWJpbmF0b3JzOyAvLy9cblxuICBjb21iaW5hdG9ycyA9IGNvbWJpbmF0b3JzSlNPTi5tYXAoKGNvbWJpbmF0b3JKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGNvbWJpbmF0b3JKU09OLCAgLy8vXG4gICAgICAgICAgY29tYmluYXRvciA9IENvbWJpbmF0b3IuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29tYmluYXRvcjtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3JzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IGFzc3VtcHRpb25zIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgQXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgYXNzdW1wdGlvbnNKU09OID0gYXNzdW1wdGlvbnM7IC8vL1xuXG4gIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNKU09OLm1hcCgoYXNzdW1wdGlvbkpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gYXNzdW1wdGlvbkpTT04sICAvLy9cbiAgICAgICAgICBhc3N1bXB0aW9uID0gQXNzdW1wdGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJhaW50c0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgY29uc3RyYWludHMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBDb25zdHJhaW50IH0gPSBlbGVtZW50cyxcbiAgICBjb25zdHJhaW50c0pTT04gPSBjb25zdHJhaW50czsgLy8vXG5cbiAgY29uc3RyYWludHMgPSBjb25zdHJhaW50c0pTT04ubWFwKChjb25zdHJhaW50SlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBjb25zdHJhaW50SlNPTiwgIC8vL1xuICAgICAgY29uc3RyYWludCA9IENvbnN0cmFpbnQuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29uc3RyYWludDtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbnN0cmFpbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeGVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyB0eXBlUHJlZml4ZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBUeXBlUHJlZml4IH0gPSBlbGVtZW50cyxcbiAgICAgICAgdHlwZVByZWZpeGVzSlNPTiA9IHR5cGVQcmVmaXhlczsgLy8vXG5cbiAgdHlwZVByZWZpeGVzID0gdHlwZVByZWZpeGVzSlNPTi5tYXAoKHR5cGVQcmVmaXhKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHR5cGVQcmVmaXhKU09OLCAgLy8vXG4gICAgICAgICAgdHlwZVByZWZpeCA9IFR5cGVQcmVmaXguZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdHlwZVByZWZpeDtcbiAgfSk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXhlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgY29uc3RydWN0b3JzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgQ29uc3RydWN0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjb25zdHJ1Y3RvcnNKU09OID0gY29uc3RydWN0b3JzOyAvLy9cblxuICBjb25zdHJ1Y3RvcnMgPSBjb25zdHJ1Y3RvcnNKU09OLm1hcCgoY29uc3RydWN0b3JKU09OKSA9PiB7XG4gICAgY29uc3QganNvbiA9IGNvbnN0cnVjdG9ySlNPTiwgIC8vL1xuICAgICAgICAgIGNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3IuZnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3I7XG4gIH0pO1xuXG4gIHJldHVybiBjb25zdHJ1Y3RvcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IHN1cHBvc2l0aW9ucyB9ID0ganNvbjtcblxuICBjb25zdCB7IFN1cHBvc2l0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgc3VwcG9zaXRpb25zSlNPTiA9IHN1cHBvc2l0aW9uczsgIC8vL1xuXG4gIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0pTT04ubWFwKChzdXBwb3NpdGlvbkpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gc3VwcG9zaXRpb25KU09OLCAvLy9cbiAgICAgICAgICBzdXBwb3NpdGlvbiA9IFN1cHBvc2l0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uO1xuICB9KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RpdHV0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgc3Vic3RpdHV0aW9ucyB9ID0ganNvbjsgIC8vL1xuXG4gIGNvbnN0IHN1YnN0aXR1dGlvbnNKU09OID0gc3Vic3RpdHV0aW9uczsgLy8vXG5cbiAgc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnNKU09OLm1hcCgoc3Vic3RpdHV0aW9uSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBzdWJzdGl0dXRpb25KU09OLCAgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uRnJvbVN1YnN0aXR1dGlvbkpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9KTtcblxuICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGxldCB7IG1ldGF2YXJpYWJsZXMgfSA9IGpzb247XG5cbiAgY29uc3QgeyBNZXRhdmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhdmFyaWFibGVzSlNPTiA9IG1ldGF2YXJpYWJsZXM7IC8vL1xuXG4gIG1ldGF2YXJpYWJsZXMgPSBtZXRhdmFyaWFibGVzSlNPTi5tYXAoKG1ldGF2YXJpYWJsZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gbWV0YXZhcmlhYmxlSlNPTiwgIC8vL1xuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IE1ldGF2YXJpYWJsZS5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH0pO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW5lbWljQ29udGV4dHNGcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlbGVhc2VDb250ZXh0ID0gY29udGV4dDsgLy8vXG5cbiAgY29uc3QgeyBjb250ZXh0cyB9ID0ganNvbjtcblxuICBjb25zdCBtbmVtaWNDb250ZXh0cyA9IGNvbnRleHRzLm1hcCgoY29udGV4dCkgPT4ge1xuICAgIGpzb24gPSBjb250ZXh0OyAvLy9cblxuICAgIGNvbnRleHQgPSByZWxlYXNlQ29udGV4dDsgLy8vXG5cbiAgICBjb25zdCBtbmVtaWNDb250ZXh0ID0gTW5lbWljQ29udGV4dC5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBtbmVtaWNDb250ZXh0OyAgLy8vXG4gIH0pO1xuXG4gIHJldHVybiBtbmVtaWNDb250ZXh0cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmVkVmFyaWFibGVzRnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICBsZXQgeyBkZWNsYXJlZFZhcmlhYmxlcyB9ID0ganNvbjtcblxuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXNKU09OID0gZGVjbGFyZWRWYXJpYWJsZXM7IC8vL1xuXG4gIGRlY2xhcmVkVmFyaWFibGVzID0gZGVjbGFyZWRWYXJpYWJsZXNKU09OLm1hcCgoZGVjbGFyZWRWYXJpYWJsZUpTT04pID0+IHtcbiAgICBjb25zdCBqc29uID0gZGVjbGFyZWRWYXJpYWJsZUpTT04sICAvLy9cbiAgICAgICAgICB2YXJpYWJsZSA9IFZhcmlhYmxlLmZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGUgPSB2YXJpYWJsZTsgIC8vL1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGU7XG4gIH0pO1xuXG4gIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmVkTWV0YXZhcmlhYmxlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgbGV0IHsgZGVjbGFyZWRNZXRhdmFyaWFibGVzIH0gPSBqc29uO1xuXG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTiA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlczsgLy8vXG5cbiAgZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gZGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTi5tYXAoKGRlY2xhcmVkTWV0YXZhcmlhYmxlSlNPTikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBkZWNsYXJlZE1ldGF2YXJpYWJsZUpTT04sICAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBNZXRhdmFyaWFibGUuZnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGU7ICAvLy9cblxuICAgIHJldHVybiBkZWNsYXJlZE1ldGF2YXJpYWJsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRlY2xhcmVkTWV0YXZhcmlhYmxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVUb1R5cGVKU09OKHR5cGUpIHtcbiAgbGV0IHR5cGVKU09OID0gbnVsbDtcblxuICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGFicmlkZ2VkID0gdHJ1ZTtcblxuICAgIHR5cGVKU09OID0gdHlwZS50b0pTT04oYWJyaWRnZWQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxUb0xhYmVsSlNPTihsYWJlbCkge1xuICBjb25zdCBsYWJlbEpTT04gPSBsYWJlbC50b0pTT04oKTtcblxuICByZXR1cm4gbGFiZWxKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVUb01ldGFUeXBlSlNPTihtZXRhVHlwZSkge1xuICBjb25zdCBtZXRhVHlwZUpTT04gPSAobWV0YVR5cGUgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhVHlwZS50b0pTT04oKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gIHJldHVybiBtZXRhVHlwZUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04oZGVkdWN0aW9uKSB7XG4gIGNvbnN0IGRlZHVjdGlvbkpTT04gPSBkZWR1Y3Rpb24udG9KU09OKCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbkpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVUb1NpZ25hdHVyZUpTT04oc2lnbmF0dXJlKSB7XG4gIGNvbnN0IHNpZ25hdHVyZUpTT04gPSAoc2lnbmF0dXJlICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZS50b0pTT04oKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDtcblxuICByZXR1cm4gc2lnbmF0dXJlSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Ub0NvbmNsdXNpb25KU09OKGNvbmNsdXNpb24pIHtcbiAgY29uc3QgY29uY2x1c2lvbkpTT04gPSBjb25jbHVzaW9uLnRvSlNPTigpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsVG9Qcm92aXNpb25hbEpTT04ocHJvdmlzaW9uYWwpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWxKU09OID0gcHJvdmlzaW9uYWw7ICAvLy9cblxuICByZXR1cm4gcHJvdmlzaW9uYWxKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW5lbWljQ29udGV4dFRvTW5lbWljQ29udGV4dEpTT04obW5lbWljQ29udGV4dCkge1xuICBjb25zdCBtbmVtaWNDb250ZXh0SlNPTiA9IG1uZW1pY0NvbnRleHQudG9KU09OKCk7XG5cbiAgcmV0dXJuIG1uZW1pY0NvbnRleHRKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RpdHV0aW9uRnJvbVN1YnN0aXR1dGlvbkpTT04oanNvbiwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm1TdWJzdGl0dXRpb24sIEZyYW1lU3Vic3RpdHV0aW9uLCBTdGF0ZW1lbnRTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBzdWJzdGl0dXRpb24gPSBUZXJtU3Vic3RpdHV0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpXG4gICAgICAgICAgICAgICAgICAgIHx8IEZyYW1lU3Vic3RpdHV0aW9uLmZyb21KU09OKGpzb24sIGNvbnRleHQpXG4gICAgICAgICAgICAgICAgICAgIHx8IFN0YXRlbWVudFN1YnN0aXR1dGlvbi5mcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZXNUb1R5cGVzSlNPTih0eXBlcykge1xuICBjb25zdCB0eXBlc0pTT04gPSB0eXBlcy5tYXAoKHR5cGUpID0+IHtcbiAgICBjb25zdCB0eXBlSlNPTiA9IHR5cGUudG9KU09OKCk7XG5cbiAgICByZXR1cm4gdHlwZUpTT047XG4gIH0pO1xuXG4gIHJldHVybiB0eXBlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc1RvVGVybXNKU09OKHRlcm1zKSB7XG4gIGNvbnN0IHRlcm1zSlNPTiA9IHRlcm1zLm1hcCgodGVybSkgPT4ge1xuICAgIGNvbnN0IHRlcm1KU09OID0gdGVybS50b0pTT04oKTtcblxuICAgIHJldHVybiB0ZXJtSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmtzVG9MaW5rc0pTT04obGlua3MpIHtcbiAgY29uc3QgbGlua3NKU09OID0gbGlua3MubWFwKChsaW5rKSA9PiB7XG4gICAgY29uc3QgbGlua0pTT04gPSBsaW5rLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGxpbmtKU09OO1xuICB9KTtcblxuICByZXR1cm4gbGlua3NKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNUb1J1bGVzSlNPTihydWxlcykge1xuICBjb25zdCBydWxlc0pTT04gPSBydWxlcy5tYXAoKHJ1bGUpID0+IHtcbiAgICBjb25zdCBydWxlSlNPTiA9IHJ1bGUudG9KU09OKCk7XG5cbiAgICByZXR1cm4gcnVsZUpTT047XG4gIH0pO1xuXG4gIHJldHVybiBydWxlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNUb0xhYmVsc0pTT04obGFiZWxzKSB7XG4gIGNvbnN0IGxhYmVsc0pTT04gPSBsYWJlbHMubWFwKChsYWJlbCkgPT4ge1xuICAgIGNvbnN0IGxhYmVsSlNPTiA9IGxhYmVsLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGxhYmVsSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGxhYmVsc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZXNUb0ZyYW1lc0pTT04oZnJhbWVzKSB7XG4gIGNvbnN0IGZyYW1lc0pTT04gPSBmcmFtZXMubWFwKChmcmFtZSkgPT4ge1xuICAgIGNvbnN0IGZyYW1lSlNPTiA9IGZyYW1lLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGZyYW1lSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGZyYW1lc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlvbXNUb0F4aW9tc0pTT04oYXhpb21zKSB7XG4gIGNvbnN0IGF4aW9tc0pTT04gPSBheGlvbXMubWFwKChheGlvbSkgPT4ge1xuICAgIGNvbnN0IGF4aW9tSlNPTiA9IGF4aW9tLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGF4aW9tSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGF4aW9tc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2hlbWFzVG9TY2hlbWFzSlNPTihzY2hlbWFzKSB7XG4gIGNvbnN0IHNjaGVtYXNKU09OID0gc2NoZW1hcy5tYXAoKHNjaGVtYSkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYUpTT04gPSBzY2hlbWEudG9KU09OKCk7XG5cbiAgICByZXR1cm4gc2NoZW1hSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHNjaGVtYXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZXNUb1ByZW1pc2VzSlNPTihwcmVtaXNlcykge1xuICBjb25zdCBwcmVtaXNlc0pTT04gPSBwcmVtaXNlcy5tYXAoKHByZW1pc2UpID0+IHtcbiAgICBjb25zdCBwcmVtaXNlSlNPTiA9IHByZW1pc2UudG9KU09OKCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZUpTT047XG4gIH0pO1xuXG4gIHJldHVybiBwcmVtaXNlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtc1RvVGhlb3JlbXNKU09OKHRoZW9yZW1zKSB7XG4gIGNvbnN0IHRoZW9yZW1zSlNPTiA9IHRoZW9yZW1zLm1hcCgodGhlb3JlbSkgPT4ge1xuICAgIGNvbnN0IHRoZW9yZW1KU09OID0gdGhlb3JlbS50b0pTT04oKTtcblxuICAgIHJldHVybiB0aGVvcmVtSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHRoZW9yZW1zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNUb0h5cG90aGVzZXNKU09OKGh5cG90aGVzZXMpIHtcbiAgY29uc3QgaHlwb3RoZXNlc0pTT04gPSBoeXBvdGhlc2VzLm1hcCgoaHlwb3RoZXNpcykgPT4ge1xuICAgIGNvbnN0IGh5cG90aGVzaXNKU09OID0gaHlwb3RoZXNpcy50b0pTT04oKTtcblxuICAgIHJldHVybiBoeXBvdGhlc2lzSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGh5cG90aGVzZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4bmFtZVRvUHJldml4TmFtZUpTT04ocHJlZml4bmFtZSkge1xuICBjb25zdCBwcmVmaXhOYW1lSlNPTiA9IHByZWZpeG5hbWU7ICAvLy9cblxuICByZXR1cm4gcHJlZml4TmFtZUpTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzVG9TdXBlclR5cGVzSlNPTihzdXBlclR5cGVzKSB7XG4gIGNvbnN0IHN1cGVyVHlwZXNKU09OID0gc3VwZXJUeXBlcy5tYXAoKHN1cGVyVHlwZSkgPT4ge1xuICAgIGNvbnN0IGFicmlkZ2VkID0gdHJ1ZSxcbiAgICAgIHN1cGVyVHlwZUpTT04gPSBzdXBlclR5cGUudG9KU09OKGFicmlkZ2VkKTtcblxuICAgIHJldHVybiBzdXBlclR5cGVKU09OO1xuICB9KTtcblxuICByZXR1cm4gc3VwZXJUeXBlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0aWVzVG9Qcm9wZXJ0aWVzSlNPTihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IHByb3BlcnRpZXNKU09OID0gcHJvcGVydGllcy5tYXAoKHByb3BlcnR5KSA9PiB7XG4gICAgY29uc3QgcHJvcGVydHlKU09OID0gcHJvcGVydHkudG9KU09OKCk7XG5cbiAgICByZXR1cm4gcHJvcGVydHlKU09OO1xuICB9KTtcblxuICByZXR1cm4gcHJvcGVydGllc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0aWVzVG9FcXVhbGl0aWVzSlNPTihlcXVhbGl0aWVzKSB7XG4gIGNvbnN0IGVxdWFsaXRpZXNKU09OID0gZXF1YWxpdGllcy5tYXAoKGVxdWFsaXR5KSA9PiB7XG4gICAgY29uc3QgZXF1YWxpdHlKU09OID0gZXF1YWxpdHkudG9KU09OKCk7XG5cbiAgICByZXR1cm4gZXF1YWxpdHlKU09OO1xuICB9KTtcblxuICByZXR1cm4gZXF1YWxpdGllc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzVG9TdGF0ZW1lbnRzSlNPTihzdGF0ZW1lbnRzKSB7XG4gIGNvbnN0IHN0YXRlbWVudHNKU09OID0gc3RhdGVtZW50cy5tYXAoKHN0YXRlbWVudCkgPT4ge1xuICAgIGNvbnN0IHN0YXRlbWVudEpTT04gPSBzdGF0ZW1lbnQudG9KU09OKCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50SlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0aW9uc1RvQXNzZXJ0aW9uc0pTT04oYXNzZXJ0aW9ucykge1xuICBjb25zdCBhc3NlcnRpb25zSlNPTiA9IGFzc2VydGlvbnMubWFwKChhc3NlcnRpb24pID0+IHtcbiAgICBjb25zdCBhc3NlcnRpb25KU09OID0gYXNzZXJ0aW9uLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbkpTT047XG4gIH0pO1xuXG4gIHJldHVybiBhc3NlcnRpb25zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRvcnNUb0dlbmVyYXRvcnNKU09OKGdlbmVyYXRvcnMpIHtcbiAgY29uc3QgZ2VuZXJhdG9yc0pTT04gPSBnZW5lcmF0b3JzLm1hcCgoZ2VuZXJhdG9yKSA9PiB7XG4gICAgY29uc3QgZ2VuZXJhdG9ySlNPTiA9IGdlbmVyYXRvci50b0pTT04oKTtcblxuICAgIHJldHVybiBnZW5lcmF0b3JKU09OO1xuICB9KTtcblxuICByZXR1cm4gZ2VuZXJhdG9yc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJhaW50c1RvQ29uc3RyYWludHNKU09OKGNvbnN0cmFpbnRzKSB7XG4gIGNvbnN0IGNvbnN0cmFpbnRzSlNPTiA9IGNvbnN0cmFpbnRzLm1hcCgoY29uc3RyYWludCkgPT4ge1xuICAgIGNvbnN0IGNvbnN0cmFpbnRKU09OID0gY29uc3RyYWludC50b0pTT04oKTtcblxuICAgIHJldHVybiBjb25zdHJhaW50SlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbnN0cmFpbnRzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmplY3R1cmVzVG9Db25qZWN0dXJlc0pTT04oY29uamVjdHVyZXMpIHtcbiAgY29uc3QgY29uamVjdHVyZXNKU09OID0gY29uamVjdHVyZXMubWFwKChjb25qZWN0dXJlKSA9PiB7XG4gICAgY29uc3QgY29uamVjdHVyZUpTT04gPSBjb25qZWN0dXJlLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGNvbmplY3R1cmVKU09OO1xuICB9KTtcblxuICByZXR1cm4gY29uamVjdHVyZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvcnNUb0NvbWJpbmF0b3JzSlNPTihjb21iaW5hdG9ycykge1xuICBjb25zdCBjb21iaW5hdG9yc0pTT04gPSBjb21iaW5hdG9ycy5tYXAoKGNvbWJpbmF0b3IpID0+IHtcbiAgICBjb25zdCBjb21iaW5hdG9ySlNPTiA9IGNvbWJpbmF0b3IudG9KU09OKCk7XG5cbiAgICByZXR1cm4gY29tYmluYXRvckpTT047XG4gIH0pO1xuXG4gIHJldHVybiBjb21iaW5hdG9yc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc1RvQXNzdW1wdGlvbnNKU09OKGFzc3VtcHRpb25zKSB7XG4gIGNvbnN0IGFzc3VtcHRpb25zSlNPTiA9IGFzc3VtcHRpb25zLm1hcCgoYXNzdW1wdGlvbikgPT4ge1xuICAgIGNvbnN0IGFzc3VtcHRpb25KU09OID0gYXNzdW1wdGlvbi50b0pTT04oKTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uSlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTihzdXBwb3NpdGlvbnMpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25zSlNPTiA9IHN1cHBvc2l0aW9ucy5tYXAoKHN1cHBvc2l0aW9uKSA9PiB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25KU09OID0gc3VwcG9zaXRpb24udG9KU09OKCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb25KU09OO1xuICB9KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yc1RvQ29uc3RydWN0b3JzSlNPTihjb25zdHJ1Y3RvcnMpIHtcbiAgY29uc3QgY29uc3RydWN0b3JzSlNPTiA9IGNvbnN0cnVjdG9ycy5tYXAoKGNvbnN0cnVjdG9yKSA9PiB7XG4gICAgY29uc3QgY29uc3RydWN0b3JKU09OID0gY29uc3RydWN0b3IudG9KU09OKCk7XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3JKU09OO1xuICB9KTtcblxuICByZXR1cm4gY29uc3RydWN0b3JzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhlc1RvVHlwZVByZWZpeGVzSlNPTih0eXBlUHJlZml4ZXMpIHtcbiAgY29uc3QgdHlwZVByZWZpeGVzSlNPTiA9IHR5cGVQcmVmaXhlcy5tYXAoKHR5cGVQcmVmaXgpID0+IHtcbiAgICBjb25zdCB0eXBlUHJlZml4SlNPTiA9IHR5cGVQcmVmaXgudG9KU09OKCk7XG5cbiAgICByZXR1cm4gdHlwZVByZWZpeEpTT047XG4gIH0pO1xuXG4gIHJldHVybiB0eXBlUHJlZml4ZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RpdHV0aW9uc1RvU3Vic3RpdHV0aW9uc0pTT04oc3Vic3RpdHV0aW9ucykge1xuICBjb25zdCBzdWJzdGl0dXRpb25zSlNPTiA9IHN1YnN0aXR1dGlvbnMubWFwKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25KU09OID0gc3Vic3RpdHV0aW9uLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbkpTT047XG4gIH0pO1xuXG4gIHJldHVybiBzdWJzdGl0dXRpb25zSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZXNUb01ldGF2YXJpYWJsZXNKU09OKG1ldGF2YXJpYWJsZXMpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlc0pTT04gPSBtZXRhdmFyaWFibGVzLm1hcCgobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlSlNPTiA9IG1ldGF2YXJpYWJsZS50b0pTT04oKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVKU09OO1xuICB9KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlc0pTT047XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtbmVtaWNDb250ZXh0c1RvTW5lbWljQ29udGV4dHNKU09OKG1uZW1pY0NvbnRleHRzKSB7XG4gIGNvbnN0IG1uZW1pY0NvbnRleHRzSlNPTiA9IG1uZW1pY0NvbnRleHRzLm1hcCgobW5lbWljQ29udGV4dCkgPT4ge1xuICAgIGNvbnN0IG1uZW1pY0NvbnRleHRKU09OID0gbW5lbWljQ29udGV4dC50b0pTT04oKTtcblxuICAgIHJldHVybiBtbmVtaWNDb250ZXh0SlNPTjtcbiAgfSk7XG5cbiAgcmV0dXJuIG1uZW1pY0NvbnRleHRzSlNPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmVkVmFyaWFibGVzVG9EZWNsYXJlZFZhcmlhYmxlc0pTT04oZGVjbGFyZWRWYXJpYWJsZXMpIHtcbiAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZXNKU09OID0gZGVjbGFyZWRWYXJpYWJsZXMubWFwKChkZWNsYXJlZFZhcmlhYmxlKSA9PiB7XG4gICAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZUpTT04gPSBkZWNsYXJlZFZhcmlhYmxlLnRvSlNPTigpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGVKU09OO1xuICB9KTtcblxuICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZXNKU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyZWRNZXRhdmFyaWFibGVzVG9EZWNsYXJlZE1ldGF2YXJpYWJsZXNKU09OKGRlY2xhcmVkTWV0YXZhcmlhYmxlcykge1xuICBjb25zdCBkZWNsYXJlZE1ldGF2YXJpYWJsZXNKU09OID0gZGVjbGFyZWRNZXRhdmFyaWFibGVzLm1hcCgoZGVjbGFyZWRNZXRhdmFyaWFibGUpID0+IHtcbiAgICBjb25zdCBkZWNsYXJlZE1ldGF2YXJpYWJsZUpTT04gPSBkZWNsYXJlZE1ldGF2YXJpYWJsZS50b0pTT04oKTtcblxuICAgIHJldHVybiBkZWNsYXJlZE1ldGF2YXJpYWJsZUpTT047XG4gIH0pO1xuXG4gIHJldHVybiBkZWNsYXJlZE1ldGF2YXJpYWJsZXNKU09OO1xufVxuXG5mdW5jdGlvbiBmaW5kVHlwZUJ5TmFtZShuYW1lLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOYW1lID0gbmFtZSwgIC8vL1xuICAgICAgICB0eXBlID0gY29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5mdW5jdGlvbiBmaW5kTWV0YVR5cGVCeU5hbWUobmFtZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhVHlwZU5hbWUgPSBuYW1lLCAgLy8vXG4gICAgICAgIG1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpO1xuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cbiJdLCJuYW1lcyI6WyJhc3NlcnRpb25zRnJvbUpTT04iLCJhc3NlcnRpb25zVG9Bc3NlcnRpb25zSlNPTiIsImFzc3VtcHRpb25zRnJvbUpTT04iLCJhc3N1bXB0aW9uc1RvQXNzdW1wdGlvbnNKU09OIiwiYXhpb21zRnJvbUpTT04iLCJheGlvbXNUb0F4aW9tc0pTT04iLCJjb21iaW5hdG9yc0Zyb21KU09OIiwiY29tYmluYXRvcnNUb0NvbWJpbmF0b3JzSlNPTiIsImNvbmNsdXNpb25Gcm9tSlNPTiIsImNvbmNsdXNpb25Ub0NvbmNsdXNpb25KU09OIiwiY29uamVjdHVyZXNGcm9tSlNPTiIsImNvbmplY3R1cmVzVG9Db25qZWN0dXJlc0pTT04iLCJjb25zdHJhaW50c0Zyb21KU09OIiwiY29uc3RyYWludHNUb0NvbnN0cmFpbnRzSlNPTiIsImNvbnN0cnVjdG9yc0Zyb21KU09OIiwiY29uc3RydWN0b3JzVG9Db25zdHJ1Y3RvcnNKU09OIiwiZGVjbGFyZWRNZXRhdmFyaWFibGVzRnJvbUpTT04iLCJkZWNsYXJlZE1ldGF2YXJpYWJsZXNUb0RlY2xhcmVkTWV0YXZhcmlhYmxlc0pTT04iLCJkZWNsYXJlZFZhcmlhYmxlc0Zyb21KU09OIiwiZGVjbGFyZWRWYXJpYWJsZXNUb0RlY2xhcmVkVmFyaWFibGVzSlNPTiIsImRlZHVjdGlvbkZyb21KU09OIiwiZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OIiwiZXF1YWxpdGllc0Zyb21KU09OIiwiZXF1YWxpdGllc1RvRXF1YWxpdGllc0pTT04iLCJmcmFtZXNGcm9tSlNPTiIsImZyYW1lc1RvRnJhbWVzSlNPTiIsImdlbmVyYXRvcnNGcm9tSlNPTiIsImdlbmVyYXRvcnNUb0dlbmVyYXRvcnNKU09OIiwiaHlwb3RoZXNlc0Zyb21KU09OIiwiaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04iLCJsYWJlbEZyb21KU09OIiwibGFiZWxUb0xhYmVsSlNPTiIsImxhYmVsc0Zyb21KU09OIiwibGFiZWxzVG9MYWJlbHNKU09OIiwibGlua3NGcm9tSlNPTiIsImxpbmtzVG9MaW5rc0pTT04iLCJtZXRhVHlwZUZyb21KU09OIiwibWV0YVR5cGVUb01ldGFUeXBlSlNPTiIsIm1ldGF2YXJpYWJsZXNGcm9tSlNPTiIsIm1ldGF2YXJpYWJsZXNUb01ldGF2YXJpYWJsZXNKU09OIiwibW5lbWljQ29udGV4dEZyb21KU09OIiwibW5lbWljQ29udGV4dFRvTW5lbWljQ29udGV4dEpTT04iLCJtbmVtaWNDb250ZXh0c0Zyb21KU09OIiwibW5lbWljQ29udGV4dHNUb01uZW1pY0NvbnRleHRzSlNPTiIsInByZWZpeE5hbWVGcm9tSlNPTiIsInByZWZpeG5hbWVUb1ByZXZpeE5hbWVKU09OIiwicHJlbWlzZXNGcm9tSlNPTiIsInByZW1pc2VzVG9QcmVtaXNlc0pTT04iLCJwcm9wZXJ0aWVzRnJvbUpTT04iLCJwcm9wZXJ0aWVzVG9Qcm9wZXJ0aWVzSlNPTiIsInByb3Zpc2lvbmFsRnJvbUpTT04iLCJwcm92aXNpb25hbFRvUHJvdmlzaW9uYWxKU09OIiwicnVsZXNGcm9tSlNPTiIsInJ1bGVzVG9SdWxlc0pTT04iLCJzY2hlbWFzRnJvbUpTT04iLCJzY2hlbWFzVG9TY2hlbWFzSlNPTiIsInNpZ25hdHVyZUZyb21KU09OIiwic2lnbmF0dXJlVG9TaWduYXR1cmVKU09OIiwic3RhdGVtZW50c0Zyb21KU09OIiwic3RhdGVtZW50c1RvU3RhdGVtZW50c0pTT04iLCJzdWJzdGl0dXRpb25Gcm9tU3Vic3RpdHV0aW9uSlNPTiIsInN1YnN0aXR1dGlvbnNGcm9tSlNPTiIsInN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OIiwic3VwZXJUeXBlc0Zyb21KU09OIiwic3VwZXJUeXBlc1RvU3VwZXJUeXBlc0pTT04iLCJzdXBwb3NpdGlvbnNGcm9tSlNPTiIsInN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTiIsInRlcm1zRnJvbUpTT04iLCJ0ZXJtc1RvVGVybXNKU09OIiwidGhlb3JlbXNGcm9tSlNPTiIsInRoZW9yZW1zVG9UaGVvcmVtc0pTT04iLCJ0eXBlRnJvbUpTT04iLCJ0eXBlUHJlZml4ZXNGcm9tSlNPTiIsInR5cGVQcmVmaXhlc1RvVHlwZVByZWZpeGVzSlNPTiIsInR5cGVUb1R5cGVKU09OIiwidHlwZXNGcm9tSlNPTiIsInR5cGVzVG9UeXBlc0pTT04iLCJqc29uIiwiY29udGV4dCIsInR5cGUiLCJzdHJpbmciLCJuYW1lIiwiZmluZFR5cGVCeU5hbWUiLCJsYWJlbCIsIkxhYmVsIiwiZWxlbWVudHMiLCJsYWJlbEpTT04iLCJmcm9tSlNPTiIsIm1ldGFUeXBlIiwiZmluZE1ldGFUeXBlQnlOYW1lIiwiZGVkdWN0aW9uIiwiRGVkdWN0aW9uIiwiZGVkdWN0aW9uSlNPTiIsInNpZ25hdHVyZSIsIlNpZ25hdHVyZSIsInNpZ25hdHVyZUpTT04iLCJjb25jbHVzaW9uIiwiQ29uY2x1c2lvbiIsImNvbmNsdXNpb25KU09OIiwicHJvdmlzaW9uYWwiLCJyZWxlYXNlQ29udGV4dCIsIm1uZW1pY0NvbnRleHQiLCJNbmVtaWNDb250ZXh0IiwidHlwZXMiLCJ0eXBlc0pTT04iLCJUeXBlIiwiZm9yRWFjaCIsInR5cGVKU09OIiwicHVzaCIsInRlcm1zIiwiVGVybSIsInRlcm1zSlNPTiIsIm1hcCIsInRlcm1KU09OIiwidGVybSIsImxpbmtzIiwiTGluayIsImxpbmtzSlNPTiIsImxpbmtKU09OIiwibGluayIsInJ1bGVzIiwiUnVsZSIsInJ1bGVzSlNPTiIsInJ1bGVKU09OIiwicnVsZSIsImZyYW1lcyIsIkZyYW1lIiwiZnJhbWVzSlNPTiIsImZyYW1lSlNPTiIsImZyYW1lIiwibGFiZWxzIiwibGFiZWxzSlNPTiIsImF4aW9tcyIsIkF4aW9tIiwiYXhpb21zSlNPTiIsImF4aW9tSlNPTiIsImF4aW9tIiwic2NoZW1hcyIsIlNjaGVtYSIsInNjaGVtYXNKU09OIiwic2NoZW1hSlNPTiIsInNjaGVtYSIsInByZW1pc2VzIiwiUHJlbWlzZSIsInByZW1pc2VzSlNPTiIsInByZW1pc2VKU09OIiwicHJlbWlzZSIsInRoZW9yZW1zIiwiVGhlb3JlbSIsInRoZW9yZW1zSlNPTiIsInRoZW9yZW1KU09OIiwidGhlb3JlbSIsImVxdWFsaXRpZXMiLCJFcXVhbGl0eSIsImVxdWFsaXRpZXNKU09OIiwiZXF1YWxpdHlKU09OIiwiZXF1YWxpdHkiLCJwcm9wZXJ0aWVzIiwiUHJvcGVydHkiLCJwcm9wZXJ0aWVzSlNPTiIsInByb3BlcnR5SlNPTiIsInByb3BlcnR5IiwicHJlZml4TmFtZSIsInN1cGVyVHlwZXMiLCJzdXBlclR5cGVzSlNPTiIsInN1cGVyVHlwZUpTT04iLCJzdXBlclR5cGUiLCJoeXBvdGhlc2VzIiwiSHlwb3RoZXNpcyIsImh5cG90aGVzZXNKU09OIiwiaHlwb3RoZXNpc0pTT04iLCJoeXBvdGhlc2lzIiwic3RhdGVtZW50cyIsIlN0YXRlbWVudCIsInN0YXRlbWVudHNKU09OIiwic3RhdGVtZW50SlNPTiIsInN0YXRlbWVudCIsImFzc2VydGlvbnMiLCJUeXBlQXNzZXJ0aW9uIiwiU2NoZW1hQXNzZXJ0aW9uIiwiRGVmaW5lZEFzc2VydGlvbiIsIlByb3BlcnR5QXNzZXJ0aW9uIiwiU3VicHJvb2ZBc3NlcnRpb24iLCJDb250YWluZWRBc3NlcnRpb24iLCJTaWduYXR1cmVBc3NlcnRpb24iLCJhc3NlcnRpb25zSlNPTiIsImFzc2VydGlvbkpTT04iLCJhc3NlcnRpb24iLCJnZW5lcmF0b3JzIiwiR2VuZXJhdG9yIiwiZ2VuZXJhdG9yc0pTT04iLCJnZW5lcmF0b3JKU09OIiwiZ2VuZXJhdG9yIiwiY29uamVjdHVyZXMiLCJDb25qZWN0dXJlIiwiY29uamVjdHVyZXNKU09OIiwiY29uamVjdHVyZUpTT04iLCJjb25qZWN0dXJlIiwiY29tYmluYXRvcnMiLCJDb21iaW5hdG9yIiwiY29tYmluYXRvcnNKU09OIiwiY29tYmluYXRvckpTT04iLCJjb21iaW5hdG9yIiwiYXNzdW1wdGlvbnMiLCJBc3N1bXB0aW9uIiwiYXNzdW1wdGlvbnNKU09OIiwiYXNzdW1wdGlvbkpTT04iLCJhc3N1bXB0aW9uIiwiY29uc3RyYWludHMiLCJDb25zdHJhaW50IiwiY29uc3RyYWludHNKU09OIiwiY29uc3RyYWludEpTT04iLCJjb25zdHJhaW50IiwidHlwZVByZWZpeGVzIiwiVHlwZVByZWZpeCIsInR5cGVQcmVmaXhlc0pTT04iLCJ0eXBlUHJlZml4SlNPTiIsInR5cGVQcmVmaXgiLCJjb25zdHJ1Y3RvcnMiLCJDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yc0pTT04iLCJjb25zdHJ1Y3RvckpTT04iLCJjb25zdHJ1Y3RvciIsInN1cHBvc2l0aW9ucyIsIlN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25zSlNPTiIsInN1cHBvc2l0aW9uSlNPTiIsInN1cHBvc2l0aW9uIiwic3Vic3RpdHV0aW9ucyIsInN1YnN0aXR1dGlvbnNKU09OIiwic3Vic3RpdHV0aW9uSlNPTiIsInN1YnN0aXR1dGlvbiIsIm1ldGF2YXJpYWJsZXMiLCJNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVzSlNPTiIsIm1ldGF2YXJpYWJsZUpTT04iLCJtZXRhdmFyaWFibGUiLCJjb250ZXh0cyIsIm1uZW1pY0NvbnRleHRzIiwiZGVjbGFyZWRWYXJpYWJsZXMiLCJWYXJpYWJsZSIsImRlY2xhcmVkVmFyaWFibGVzSlNPTiIsImRlY2xhcmVkVmFyaWFibGVKU09OIiwidmFyaWFibGUiLCJkZWNsYXJlZFZhcmlhYmxlIiwiZGVjbGFyZWRNZXRhdmFyaWFibGVzIiwiZGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTiIsImRlY2xhcmVkTWV0YXZhcmlhYmxlSlNPTiIsImRlY2xhcmVkTWV0YXZhcmlhYmxlIiwiYWJyaWRnZWQiLCJ0b0pTT04iLCJtZXRhVHlwZUpTT04iLCJwcm92aXNpb25hbEpTT04iLCJtbmVtaWNDb250ZXh0SlNPTiIsIlRlcm1TdWJzdGl0dXRpb24iLCJGcmFtZVN1YnN0aXR1dGlvbiIsIlN0YXRlbWVudFN1YnN0aXR1dGlvbiIsInByZWZpeG5hbWUiLCJwcmVmaXhOYW1lSlNPTiIsIm1uZW1pY0NvbnRleHRzSlNPTiIsInR5cGVOYW1lIiwiZmluZFR5cGVCeVR5cGVOYW1lIiwibWV0YVR5cGVOYW1lIiwiZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQWdXZ0JBO2VBQUFBOztRQXljQUM7ZUFBQUE7O1FBbllBQztlQUFBQTs7UUFxYkFDO2VBQUFBOztRQWpwQkFDO2VBQUFBOztRQThmQUM7ZUFBQUE7O1FBbFRBQztlQUFBQTs7UUEyYkFDO2VBQUFBOztRQXJ3QkFDO2VBQUFBOztRQXFpQkFDO2VBQUFBOztRQTNPQUM7ZUFBQUE7O1FBaWNBQztlQUFBQTs7UUFqWkFDO2VBQUFBOztRQXVZQUM7ZUFBQUE7O1FBdldBQztlQUFBQTs7UUF5WkFDO2VBQUFBOztRQXZUQUM7ZUFBQUE7O1FBbVhBQztlQUFBQTs7UUFwWUFDO2VBQUFBOztRQTBYQUM7ZUFBQUE7O1FBajNCQUM7ZUFBQUE7O1FBbWpCQUM7ZUFBQUE7O1FBelZBQztlQUFBQTs7UUEyZ0JBQztlQUFBQTs7UUEzbUJBQztlQUFBQTs7UUFvaEJBQztlQUFBQTs7UUF4VUFDO2VBQUFBOztRQTZiQUM7ZUFBQUE7O1FBbmZBQztlQUFBQTs7UUFnYkFDO2VBQUFBOztRQTV0QkFDO2VBQUFBOztRQWlrQkFDO2VBQUFBOztRQTNaQUM7ZUFBQUE7O1FBMGZBQztlQUFBQTs7UUExaUJBQztlQUFBQTs7UUFzaEJBQztlQUFBQTs7UUEvbkJBQztlQUFBQTs7UUEwakJBQztlQUFBQTs7UUF0RkFDO2VBQUFBOztRQXdZQUM7ZUFBQUE7O1FBOXlCQUM7ZUFBQUE7O1FBOGhCQUM7ZUFBQUE7O1FBeEdBQztlQUFBQTs7UUFrWUFDO2VBQUFBOztRQTdtQkFDO2VBQUFBOztRQWdkQUM7ZUFBQUE7O1FBaGhCQUM7ZUFBQUE7O1FBa2ZBQztlQUFBQTs7UUFsY0FDO2VBQUFBOztRQWlmQUM7ZUFBQUE7O1FBbHJCQUM7ZUFBQUE7O1FBOGhCQUM7ZUFBQUE7O1FBN2RBQztlQUFBQTs7UUFnaEJB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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-nominal",
3
3
  "author": "James Smith",
4
- "version": "1.0.554",
4
+ "version": "1.0.558",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-nominal",
7
7
  "description": "Occam's Nominal language.",
@@ -11,9 +11,9 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "necessary": "^17.6.3",
14
- "occam-furtle": "^3.0.503",
14
+ "occam-furtle": "^3.0.504",
15
15
  "occam-grammar-utilities": "^8.1.25",
16
- "occam-languages": "^3.0.71",
16
+ "occam-languages": "^3.0.72",
17
17
  "occam-query": "^4.1.208"
18
18
  },
19
19
  "devDependencies": {
@@ -27,9 +27,9 @@
27
27
  "juxtapose": "^4.0.143",
28
28
  "lively-cli": "^3.0.3",
29
29
  "occam-lexers": "^23.2.10",
30
- "occam-model": "^1.0.587",
30
+ "occam-model": "^1.0.588",
31
31
  "occam-parsers": "^23.2.15",
32
- "occam-server": "^7.0.87",
32
+ "occam-server": "^7.0.88",
33
33
  "watchful-cli": "^1.7.102"
34
34
  },
35
35
  "scripts": {
@@ -3,12 +3,11 @@
3
3
  import { Element, breakPointUtilities, continuationUtilities } from "occam-languages";
4
4
 
5
5
  import { define } from "../elements";
6
- import { instantiate } from "../utilities/context";
7
- import { join, reconcile } from "../utilities/context";
8
6
  import { isDerived, isDeclared } from "../utilities/state";
9
7
  import { instantiateAssumption } from "../process/instantiate";
8
+ import { join, isolate, reconcile, instantiate } from "../utilities/context";
10
9
 
11
- const { all, exists, backwardsEvery } = continuationUtilities,
10
+ const { all, some, exists, backwardsEvery } = continuationUtilities,
12
11
  { breakPointFromJSON, breakPointToBreakPointJSON } = breakPointUtilities;
13
12
 
14
13
  export default define(class Assumption extends Element {
@@ -120,16 +119,18 @@ export default define(class Assumption extends Element {
120
119
 
121
120
  context.trace(`Validating the '${assumptionString}' declared assumption...`);
122
121
 
123
- ///
122
+ const schemas = context.getSchemas();
124
123
 
125
- context.debug(`...validated the '${assumptionString}' declared assumption.`);
124
+ return some(schemas, (schema, context, forward, back) => {
125
+ return this.unifySchema(schema, context, forward, back);
126
+ }, context, (context, back) => {
127
+ context.debug(`...validated the '${assumptionString}' declared assumption.`);
126
128
 
127
- return forward(state, context, back);
129
+ return forward(state, context, back);
130
+ }, back);
128
131
  }
129
132
 
130
133
  validateWhenDerived(state, context, forward, back) {
131
- let validatesWhenDerived = false;
132
-
133
134
  const derived = isDerived(state);
134
135
 
135
136
  if (!derived) {
@@ -140,29 +141,11 @@ export default define(class Assumption extends Element {
140
141
 
141
142
  context.trace(`Validating the '${assumptionString}' derived assumption...`);
142
143
 
143
- const schemas = context.getSchemas();
144
-
145
- validatesWhenDerived = some(schemas, (schema, context) => {
146
- let success = false;
147
-
148
- this.unifySchema(schema, context, (schemaUnifies) => {
149
- if (schemaUnifies) {
150
- success = true;
151
- }
152
- });
153
-
154
- return success;
155
- }, context, (context) => true); ///
156
-
157
- if (validatesWhenDerived) {
158
- validatesWhenDerived = continuation(state, context);
159
- }
144
+ ///
160
145
 
161
- if (validatesWhenDerived) {
162
- context.debug(`...validated the '${assumptionString}' derived assumption.`);
163
- }
146
+ context.debug(`...validated the '${assumptionString}' derived assumption.`);
164
147
 
165
- return validatesWhenDerived;
148
+ return forward(state, context, back);
166
149
  }
167
150
 
168
151
  validateLink(state, context, forward, back) {
@@ -199,56 +182,40 @@ export default define(class Assumption extends Element {
199
182
 
200
183
  context.trace(`Unifying the '${schemaString}' schema with the '${assumptionString}' assumption...`);
201
184
 
202
- const generalContext = context; ///
185
+ return isolate((schema, context, forward, back) => {
186
+ const generalContext = context; ///
203
187
 
204
- return reconcile((context) => {
205
- const label = schema.getLabel();
188
+ return reconcile((context) => {
189
+ const label = schema.getLabel();
206
190
 
207
- return this.link.unifyLabel(label, context, (labelUnifies) => {
208
- const specificContext = context; ///
191
+ return this.link.unifyLabel(label, context, (context, back) => {
192
+ const specificContext = context; ///
209
193
 
210
- if (!labelUnifies) {
211
- const schemaUnifies = false;
194
+ const deduction = schema.getDeduction(),
195
+ deducedStatement = this.findDeducedStatement(context);
212
196
 
213
- return continuation(schemaUnifies);
214
- }
197
+ return this.unifyDeduction(deduction, deducedStatement, generalContext, specificContext, (generalContext, specificContext, back) => {
198
+ const conditional = this.isConditional(),
199
+ schemaConditional = schema.isConditional();
215
200
 
216
- const deduction = schema.getDeduction(),
217
- deducedStatement = this.findDeducedStatement(context);
201
+ if (conditional !== schemaConditional) {
202
+ context.trace(`Either the '${schemaString}' schema is unconditional whilst the '${assumptionString}' assumption is conditional or vice verse.`);
218
203
 
219
- return this.unifyDeduction(deduction, deducedStatement, generalContext, specificContext, (deductionUnifies) => {
220
- let schemaUnifies = false;
221
-
222
- if (!deductionUnifies) {
223
- return continuation(schemaUnifies);
224
- }
225
-
226
- const conditional = this.isConditional(),
227
- schemaConditional = schema.isConditional();
228
-
229
- if (conditional !== schemaConditional) {
230
- context.trace(`Either the '${schemaString}' schema is unconditional whilst the '${assumptionString}' assumption is conditional or vice verse.`);
231
-
232
- return continuation(schemaUnifies);
233
- }
234
-
235
- const suppositions = schema.getSuppositions(),
236
- supposedStatements = this.findSupposedStatements(context);
237
-
238
- return this.unifySuppositions(suppositions, supposedStatements, generalContext, specificContext, (suppositionsUnify) => {
239
- if (suppositionsUnify) {
240
- schemaUnifies = true;
204
+ return back();
241
205
  }
242
206
 
243
- if (schemaUnifies) {
244
- context.debug(`...unified the '${schemaString}' schema with the '${assumptionString}' assumption.`);
245
- }
207
+ const suppositions = schema.getSuppositions(),
208
+ supposedStatements = this.findSupposedStatements(context);
246
209
 
247
- return continuation(schemaUnifies);
248
- });
249
- });
250
- });
251
- }, context);
210
+ return this.unifySuppositions(suppositions, supposedStatements, generalContext, specificContext, forward, back);
211
+ }, back);
212
+ }, back);
213
+ }, context);
214
+ }, schema, context, (schema, context, back) => {
215
+ context.debug(`...unified the '${schemaString}' schema with the '${assumptionString}' assumption.`);
216
+
217
+ return forward(context, back);
218
+ }, back);
252
219
  }
253
220
 
254
221
  unifyDeduction(deduction, deducedStatement, generalContext, specificContext, forward, back) {
@@ -306,16 +273,10 @@ export default define(class Assumption extends Element {
306
273
  supposedStatementsLength = supposedStatements.length;
307
274
 
308
275
  if (suppositionsLength !== supposedStatementsLength) {
309
- const suppositionsUnify = false;
310
-
311
- return continuation(suppositionsUnify);
276
+ return back();
312
277
  }
313
278
 
314
- let index = suppositionsLength; ///
315
-
316
- return backwardsEvery(suppositions, (supposition, forward, back) => {
317
- index--;
318
-
279
+ return backwardsEvery(suppositions, (supposition, forward, back, index) => {
319
280
  const supposedStatement = supposedStatements[index];
320
281
 
321
282
  return this.unifySupposition(supposition, supposedStatement, generalContext, specificContext, forward, back);
@@ -173,19 +173,11 @@ export default define(class Link extends Element {
173
173
 
174
174
  context.trace(`Unifying the '${metavariableString}' metavariable with the '${linkString}' link...`);
175
175
 
176
- return this.metavariable.unifyMetavariableIntrinsically(metavariable, generalContext, specificContext, (metavariableUnifiesIntrinsically) => {
177
- let metavariableUnifies = false;
176
+ return this.metavariable.unifyMetavariableIntrinsically(metavariable, generalContext, specificContext, (generalContext, specificContext, back) => {
177
+ context.debug(`...unified the '${metavariableString}' metavariable with the '${linkString}' link.`);
178
178
 
179
- if (metavariableUnifiesIntrinsically) {
180
- metavariableUnifies = true;
181
- }
182
-
183
- if (metavariableUnifies) {
184
- context.debug(`...unified the '${metavariableString}' metavariable with the '${linkString}' link.`);
185
- }
186
-
187
- return continuation(metavariableUnifies);
188
- });
179
+ return forward(generalContext, specificContext, back);
180
+ }, back);
189
181
  }
190
182
 
191
183
  toJSON() {
@@ -10,8 +10,8 @@ import { dischargeStatements } from "../process/discharge";
10
10
  import { instantiateStatement } from "../process/instantiate";
11
11
  import { substitutionFromStatementNode } from "../utilities/element";
12
12
 
13
- const { all, some, exists } = continuationUtilities,
14
- { breakPointFromJSON, breakPointToBreakPointJSON } = breakPointUtilities;
13
+ const { unbreakable } = breakPointUtilities,
14
+ { all, some, exists } = continuationUtilities;
15
15
 
16
16
  export default define(class Statement extends Element {
17
17
  constructor(context, string, node, breakPoint, substitution) {
@@ -266,7 +266,7 @@ export default define(class Statement extends Element {
266
266
  return comparesToParamter;
267
267
  }
268
268
 
269
- validate(state, context, forward, back) {
269
+ validate = unbreakable( function(state, context, forward, back) {
270
270
  let statement;
271
271
 
272
272
  const statementString = this.getString(); ///
@@ -290,7 +290,7 @@ export default define(class Statement extends Element {
290
290
 
291
291
  return forward(statement, context, back);
292
292
  }, back);
293
- }
293
+ });
294
294
 
295
295
  discharge(generalContext, specificContext, forward, back) {
296
296
  const context = specificContext, ///
@@ -429,17 +429,8 @@ export default define(class Statement extends Element {
429
429
 
430
430
  const string = this.getString();
431
431
 
432
- let breakPoint;
433
-
434
- breakPoint = this.getBreakPoint();
435
-
436
- const breakPointJSON = breakPointToBreakPointJSON(breakPoint);
437
-
438
- breakPoint = breakPointJSON; ///
439
-
440
432
  json = {
441
- string,
442
- breakPoint
433
+ string
443
434
  };
444
435
 
445
436
  return json;
@@ -454,7 +445,7 @@ export default define(class Statement extends Element {
454
445
  const { string } = json,
455
446
  statementNode = instantiateStatement(string, context),
456
447
  node = statementNode, ///
457
- breakPoint = breakPointFromJSON(json),
448
+ breakPoint = null,
458
449
  substitution = substitutionFromStatementNode(statementNode, context);
459
450
 
460
451
  context = null;
@@ -146,9 +146,7 @@ export default define(class Subproof extends Element {
146
146
  const suppositionsLength = this.suppositions.length;
147
147
 
148
148
  if (suppositionsLength === 0) {
149
- const suppositionsVerify = true; ///
150
-
151
- return continuation(suppositionsVerify, context);
149
+ return back();
152
150
  }
153
151
 
154
152
  const subproofString = this.getString(); ///
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import { arrayUtilities } from "necessary";
4
- import { Element, continuationUtilities } from "occam-languages";
4
+ import { Element, breakPointUtilities, continuationUtilities } from "occam-languages";
5
5
 
6
6
  import { define } from "../elements";
7
7
  import { instantiate } from "../utilities/context";
@@ -12,7 +12,8 @@ import { validateTerms, validateTermAsVariable } from "../process/validation";
12
12
  import { typeFromJSON, typeToTypeJSON, provisionalFromJSON, provisionalToProvisionalJSON } from "../utilities/json";
13
13
 
14
14
  const { filter } = arrayUtilities,
15
- { exists } = continuationUtilities;
15
+ { exists } = continuationUtilities,
16
+ { unbreakable } = breakPointUtilities;
16
17
 
17
18
  export default define(class Term extends Element {
18
19
  constructor(context, string, node, breakPoint, type, provisional) {
@@ -180,7 +181,7 @@ export default define(class Term extends Element {
180
181
  return term;
181
182
  }
182
183
 
183
- validate(state, context, forward, back) {
184
+ validate = unbreakable(function (state, context, forward, back) {
184
185
  let term;
185
186
 
186
187
  const termString = this.getString(); ///
@@ -204,7 +205,7 @@ export default define(class Term extends Element {
204
205
 
205
206
  return forward(term, context, back);
206
207
  }, back);
207
- }
208
+ });
208
209
 
209
210
  validateGivenType(strict, type, state, context, forward, back) {
210
211
  if (back === undefined) {
@@ -1310,13 +1310,6 @@ export function leftTermFromEqualityNode(equalityNode, context) {
1310
1310
  return leftTerm;
1311
1311
  }
1312
1312
 
1313
- export function termsFromEquivalenceNode(equivalenceNode, context) {
1314
- const termNodes = equivalenceNode.getTermNodes(),
1315
- terms = termsFromTermNodes(termNodes, context);
1316
-
1317
- return terms;
1318
- }
1319
-
1320
1313
  export function nameFromMetavariableNode(metavariableNode, context) {
1321
1314
  const metametavariableName = metavariableNode.getMetavariableName(),
1322
1315
  name = metametavariableName; ///
@@ -643,7 +643,9 @@ export function mnemicContextToMnemicContextJSON(mnemicContext) {
643
643
 
644
644
  export function substitutionFromSubstitutionJSON(json, context) {
645
645
  const { TermSubstitution, FrameSubstitution, StatementSubstitution } = elements,
646
- substitution = TermSubstitution.fromJSON(json, context) || FrameSubstitution.fromJSON(json, context) || StatementSubstitution.fromJSON(json, context);
646
+ substitution = TermSubstitution.fromJSON(json, context)
647
+ || FrameSubstitution.fromJSON(json, context)
648
+ || StatementSubstitution.fromJSON(json, context);
647
649
 
648
650
  return substitution;
649
651
  }