occam-verify-cli 1.0.857 → 1.0.859

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.
@@ -9,6 +9,9 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
+ get assumptionStringFromReferenceAndStatement () {
13
+ return assumptionStringFromReferenceAndStatement;
14
+ },
12
15
  get equivalenceStringFromTerms () {
13
16
  return equivalenceStringFromTerms;
14
17
  },
@@ -21,8 +24,8 @@ _export(exports, {
21
24
  get labelsStringFromLabels () {
22
25
  return labelsStringFromLabels;
23
26
  },
24
- get metaLevelAssumptionStringFromStatementAndReference () {
25
- return metaLevelAssumptionStringFromStatementAndReference;
27
+ get metaLevelAssumptionStringFromReferenceAndStatement () {
28
+ return metaLevelAssumptionStringFromReferenceAndStatement;
26
29
  },
27
30
  get parametersStringFromParameters () {
28
31
  return parametersStringFromParameters;
@@ -151,6 +154,10 @@ function termSubstitutionStringFromTermAndVariable(term, variable) {
151
154
  const termString = term.getString(), variableString = variable.getString(), termSubstitutionString = `[${termString} for ${variableString}]`;
152
155
  return termSubstitutionString;
153
156
  }
157
+ function assumptionStringFromReferenceAndStatement(reference, statement) {
158
+ const referenceString = reference.getString(), statementString = statement.getString(), assumptionString = `${referenceString} :: ${statementString}`;
159
+ return assumptionString;
160
+ }
154
161
  function rulsStringFromLabelsPremisesAndConclusion(labels, premises, conclusion) {
155
162
  const conclusionString = conclusion.getString(), premisesString = premisesStringFromPremises(premises), labelsString = labelsStringFromLabels(labels), ruleString = premisesString !== null ? `${labelsString} :: [${premisesString}]...${conclusionString}` : `${labelsString} :: ${conclusionString}`;
156
163
  return ruleString;
@@ -167,7 +174,7 @@ function frameSubstitutionStringFromFrameAndMetavariable(frame, metavariable) {
167
174
  const frameString = frame.getString(), metavariableString = metavariable.getString(), string = `[${frameString} for [${metavariableString}]]`;
168
175
  return string;
169
176
  }
170
- function metaLevelAssumptionStringFromStatementAndReference(statement, reference) {
177
+ function metaLevelAssumptionStringFromReferenceAndStatement(reference, statement) {
171
178
  const statementString = statement.getString(), referneceString = reference.getString(), metaLevelAssumptionString = `${referneceString} :: ${statementString}`;
172
179
  return metaLevelAssumptionString;
173
180
  }
@@ -202,4 +209,4 @@ function statementSubstitutionStringFromStatementMetavariableAndSubstitution(sta
202
209
  return statementSubstitutionString;
203
210
  }
204
211
 
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc1N0cmluZ0Zyb21UZXJtcyh0ZXJtcykge1xuICBjb25zdCB0ZXJtc1N0cmluZyA9IHRlcm1zLnJlZHVjZSgodGVybXNTdHJpbmcsIHRlcm0pID0+IHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIHRlcm1zU3RyaW5nID0gKHRlcm1zU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgYCR7dGVybXNTdHJpbmd9LCAke3Rlcm1TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgdGVybVN0cmluZztcblxuICAgIHJldHVybiB0ZXJtc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHRlcm1zU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzU3RyaW5nRnJvbUxhYmVscyhsYWJlbHMpIHtcbiAgY29uc3QgbGFiZWxzU3RyaW5nID0gbGFiZWxzLnJlZHVjZSgobGFiZWxzU3RyaW5nLCBsYWJlbCkgPT4ge1xuICAgIGNvbnN0IGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCk7XG5cbiAgICBsYWJlbHNTdHJpbmcgPSAobGFiZWxzU3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICBsYWJlbFN0cmluZzogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSwgJHtsYWJlbFN0cmluZ31gO1xuXG4gICAgcmV0dXJuIGxhYmVsc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIGxhYmVsc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzU3RyaW5nRnJvbVByZW1pc2VzKHByZW1pc2VzKSB7XG4gIGNvbnN0IHByZW1pc2VzU3RyaW5nID0gcHJlbWlzZXMucmVkdWNlKChwcmVtaXNlc1N0cmluZywgcHJlbWlzZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSBwcmVtaXNlLmdldFN0cmluZygpO1xuXG4gICAgcHJlbWlzZXNTdHJpbmcgPSAocHJlbWlzZXNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgYCR7cHJlbWlzZXNTdHJpbmd9LCAke3ByZW1pc2VTdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgcHJlbWlzZVN0cmluZzsgIC8vL1xuXG4gICAgcmV0dXJuIHByZW1pc2VzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gcHJlbWlzZXNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzU3RyaW5nRnJvbUh5cG90aGVzZXMoaHlwb3RoZXNlcykge1xuICBjb25zdCBoeXBvdGhlc2VzU3RyaW5nID0gaHlwb3RoZXNlcy5yZWR1Y2UoKGh5cG90aGVzZXNTdHJpbmcsIGh5cG90aGVzaXMpID0+IHtcbiAgICBjb25zdCBoeXBvdGhlc2lzU3RyaW5nID0gaHlwb3RoZXNpcy5nZXRTdHJpbmcoKTtcblxuICAgIGh5cG90aGVzZXNTdHJpbmcgPSAoaHlwb3RoZXNlc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtoeXBvdGhlc2VzU3RyaW5nfSwgJHtoeXBvdGhlc2lzU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5cG90aGVzaXNTdHJpbmc7ICAvLy9cblxuICAgIHJldHVybiBoeXBvdGhlc2VzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gaHlwb3RoZXNlc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNTdHJpbmdGcm9tU3VwZXJUeXBlcyhzdXBlclR5cGVzKSB7XG4gIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpLFxuICAgICAgICBzdXBlclR5cGVzU3RyaW5nID0gc3VwZXJUeXBlcy5yZWR1Y2UoKHN1cGVyVHlwZXNTdHJpbmcsIHN1cGVyVHlwZSkgPT4ge1xuICAgICAgICAgIGlmIChzdXBlclR5cGUgIT09IGJhc2VUeXBlKSB7XG4gICAgICAgICAgICBjb25zdCBzdXBlclR5cGVTdHJpbmcgPSBzdXBlclR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgICAgIHN1cGVyVHlwZXNTdHJpbmcgPSAoc3VwZXJUeXBlc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCcke3N1cGVyVHlwZVN0cmluZ30nYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3N1cGVyVHlwZXNTdHJpbmd9LCAnJHtzdXBlclR5cGVTdHJpbmd9J2A7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN1cGVyVHlwZXNTdHJpbmc7XG4gICAgICAgIH0sIG51bGwpO1xuXG4gIHJldHVybiBzdXBlclR5cGVzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc1N0cmluZ0Zyb21QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgcGFyYW1ldGVyc1N0cmluZyA9IHBhcmFtZXRlcnMucmVkdWNlKChwYXJhbWV0ZXJzU3RyaW5nLCBwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJTdHJpbmcgPSBwYXJhbWV0ZXIuZ2V0U3RyaW5nKCk7XG5cbiAgICBwYXJhbWV0ZXJzU3RyaW5nID0gKHBhcmFtZXRlcnNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJTdHJpbmcgOiAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7cGFyYW1ldGVyc1N0cmluZ30sICR7cGFyYW1ldGVyU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucykge1xuICBjb25zdCBzdXBwb3NpdGlvbnNTdHJpbmcgPSBzdXBwb3NpdGlvbnMucmVkdWNlKChzdXBwb3NpdGlvbnNTdHJpbmcsIHN1cHBvc2l0aW9uKSA9PiB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIHN1cHBvc2l0aW9uc1N0cmluZyA9IChzdXBwb3NpdGlvbnNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3NpdGlvblN0cmluZzogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3N1cHBvc2l0aW9uc1N0cmluZ30sICR7c3VwcG9zaXRpb25TdHJpbmd9YDtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbnNTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVTdHJpbmdGcm9tVGVybXModGVybXMpIHtcbiAgY29uc3QgdGVybXNTdHJpbmcgPSB0ZXJtc1N0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgIHNpZ25hdHVyZVN0cmluZyA9IGBbJHt0ZXJtc1N0cmluZ31dYDtcblxuICByZXR1cm4gc2lnbmF0dXJlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXModGVybXMpIHtcbiAgY29uc3QgdGVybXNTdHJpbmcgPSB0ZXJtc1N0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgIGVxdWl2YWxlbmNlU3RyaW5nID0gYFske3Rlcm1zU3RyaW5nfV1gO1xuXG4gIHJldHVybiBlcXVpdmFsZW5jZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSkge1xuICBjb25zdCB0eXBlU3RyaW5nID0gbm9taW5hbFR5cGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIHR5cGVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVRlcm1BbmRWYXJpYWJsZSh0ZXJtLCB2YXJpYWJsZSkge1xuICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdmFyaWFibGVTdHJpbmcgPSB2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdGVybVN1YnN0aXR1dGlvblN0cmluZyA9IGBbJHt0ZXJtU3RyaW5nfSBmb3IgJHt2YXJpYWJsZVN0cmluZ31dYDtcblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uKGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pIHtcbiAgY29uc3QgY29uY2x1c2lvblN0cmluZyA9IGNvbmNsdXNpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIHByZW1pc2VzU3RyaW5nID0gcHJlbWlzZXNTdHJpbmdGcm9tUHJlbWlzZXMocHJlbWlzZXMpLFxuICAgICAgICBsYWJlbHNTdHJpbmcgPSBsYWJlbHNTdHJpbmdGcm9tTGFiZWxzKGxhYmVscyksXG4gICAgICAgIHJ1bGVTdHJpbmcgPSAocHJlbWlzZXNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSA6OiBbJHtwcmVtaXNlc1N0cmluZ31dLi4uJHtjb25jbHVzaW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsc1N0cmluZ30gOjogJHtjb25jbHVzaW9uU3RyaW5nfWA7XG5cbiAgcmV0dXJuIHJ1bGVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbihoeXBvdGhlc2VzLCBheGlvbSwgbGVtbWEsIHRoZW9yZW0sIGNvbmplY3R1cmUpIHtcbiAgY29uc3QgdG9wTGV2ZWxBc3NlcnRpb24gPSAoYXhpb20gfHwgbGVtbWEgfHwgdGhlb3JlbSB8fCBjb25qZWN0dXJlKSxcbiAgICAgICAgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbEFzc2VydGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgaHlwb3RoZXNlc1N0cmluZyA9IGh5cG90aGVzZXNTdHJpbmdGcm9tSHlwb3RoZXNlcyhoeXBvdGhlc2VzKSxcbiAgICAgICAgc2VjdGlvblN0cmluZyA9ICh0b3BMZXZlbEFzc2VydGlvblN0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgWyR7aHlwb3RoZXNlc1N0cmluZ31dOjo6ICR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYFske2h5cG90aGVzZXNTdHJpbmd9XTo6OiBgO1xuXG4gIHJldHVybiBzZWN0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbihzdXBwb3NpdGlvbnMsIHN1YkRlcml2YXRpb24pIHtcbiAgY29uc3QgbGFzdFN0ZXAgPSBzdWJEZXJpdmF0aW9uLmdldExhc3RTdGVwKCksXG4gICAgICAgIHN1cHBvc2l0aW9uc1N0cmluZyA9IHN1cHBvc2l0aW9uc1N0cmluZ0Zyb21TdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zKSxcbiAgICAgICAgbGFzdFN0ZXBTdHJpbmcgPSBsYXN0U3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3VicHJvb2ZTdHJpbmcgPSBgWyR7c3VwcG9zaXRpb25zU3RyaW5nfV0uLi4ke2xhc3RTdGVwU3RyaW5nfWA7XG5cbiAgcmV0dXJuIHN1YnByb29mU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25TdHJpbmdGcm9tRnJhbWVBbmRNZXRhdmFyaWFibGUoZnJhbWUsIG1ldGF2YXJpYWJsZSkge1xuICBjb25zdCBmcmFtZVN0cmluZyA9IGZyYW1lLmdldFN0cmluZygpLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN0cmluZyA9IGBbJHtmcmFtZVN0cmluZ30gZm9yIFske21ldGF2YXJpYWJsZVN0cmluZ31dXWA7XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmdGcm9tU3RhdGVtZW50QW5kUmVmZXJlbmNlKHN0YXRlbWVudCwgcmVmZXJlbmNlKSB7XG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgcmVmZXJuZWNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpLFxuICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nID0gYCR7cmVmZXJuZWNlU3RyaW5nfSA6OiAke3N0YXRlbWVudFN0cmluZ31gO1xuXG4gIHJldHVybiBtZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzKHByb2NlZHVyZVJlZmVyZW5jZSwgcGFyYW1ldGVycykge1xuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VOYW1lID0gcHJvY2VkdXJlUmVmZXJlbmNlLmdldE5hbWUoKSxcbiAgICAgICAgcGFyYW1ldGVyc1N0cmluZyA9IHBhcmFtZXRlcnNTdHJpbmdGcm9tUGFyYW1ldGVycyhwYXJhbWV0ZXJzKSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbFN0cmluZyA9IGBAJHtwcm9jZWR1cmVSZWZlcmVuY2VOYW1lfSgke3BhcmFtZXRlcnNTdHJpbmd9KWA7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGxTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50QW5kTWV0YXZhcmlhYmxlKHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlKSB7XG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmcgPSBgWyR7c3RhdGVtZW50U3RyaW5nfSBmb3IgJHttZXRhdmFyaWFibGVTdHJpbmd9XWA7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21SZWZlcmVuY2VBbmRNZXRhdmFyaWFibGUocmVmZXJlbmNlLCBtZXRhdmFyaWFibGUpIHtcbiAgY29uc3QgcmVmZXJlbmNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZyA9IGBbJHtyZWZlcmVuY2VTdHJpbmd9IGZvciAke21ldGF2YXJpYWJsZVN0cmluZ31dYDtcblxuICByZXR1cm4gcmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pIHtcbiAgbGV0IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nO1xuXG4gIGNvbnN0IHN1cHBvc2l0aW9uc1N0cmluZyA9IHN1cHBvc2l0aW9uc1N0cmluZ0Zyb21TdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zKSxcbiAgICAgICAgZGVkdWN0aW9uU3RyaW5nID0gZGVkdWN0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBsYWJlbHNTdHJpbmcgPSBsYWJlbHNTdHJpbmdGcm9tTGFiZWxzKGxhYmVscyk7XG5cbiAgaWYgKGxhYmVsc1N0cmluZyAhPT0gbnVsbCkge1xuICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gKHN1cHBvc2l0aW9uc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsc1N0cmluZ30gOjogWyR7c3VwcG9zaXRpb25zU3RyaW5nfV0uLi4ke2RlZHVjdGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsc1N0cmluZ30gOjogJHtkZWR1Y3Rpb25TdHJpbmd9YDtcbiAgfSBlbHNlIHtcbiAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IChzdXBwb3NpdGlvbnNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgWyR7c3VwcG9zaXRpb25zU3RyaW5nfV0uLi4ke2RlZHVjdGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWR1Y3Rpb25TdHJpbmc7XG4gIH1cblxuICByZXR1cm4gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSB7XG4gIGNvbnN0IGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCksXG4gICAgICAgIGRlZHVjdGlvblN0cmluZyA9IGRlZHVjdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zU3RyaW5nID0gc3VwcG9zaXRpb25zU3RyaW5nRnJvbVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMpLFxuICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSAoc3VwcG9zaXRpb25zU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbFN0cmluZ30gOjogWyR7c3VwcG9zaXRpb25zU3RyaW5nfV0uLi4ke2RlZHVjdGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxTdHJpbmd9IDo6ICR7ZGVkdWN0aW9uU3RyaW5nfWA7XG5cbiAgcmV0dXJuIHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZ0Zyb21TdGF0ZW1lbnRNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24oc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbikge1xuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3Vic3RpdHV0aW9uU3RyaW5nID0gc3Vic3RpdHV0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmcgPSBgWyR7c3RhdGVtZW50U3RyaW5nfSBmb3IgJHttZXRhdmFyaWFibGVTdHJpbmd9JHtzdWJzdGl0dXRpb25TdHJpbmd9XWA7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZztcbn1cbiJdLCJuYW1lcyI6WyJlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyIsImZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nRnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlIiwiaHlwb3RoZXNlc1N0cmluZ0Zyb21IeXBvdGhlc2VzIiwibGFiZWxzU3RyaW5nRnJvbUxhYmVscyIsIm1ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmdGcm9tU3RhdGVtZW50QW5kUmVmZXJlbmNlIiwicGFyYW1ldGVyc1N0cmluZ0Zyb21QYXJhbWV0ZXJzIiwicHJlbWlzZXNTdHJpbmdGcm9tUHJlbWlzZXMiLCJwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMiLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmdGcm9tUmVmZXJlbmNlQW5kTWV0YXZhcmlhYmxlIiwicnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24iLCJzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbiIsInNpZ25hdHVyZVN0cmluZ0Zyb21UZXJtcyIsInN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZ0Zyb21TdGF0ZW1lbnRBbmRNZXRhdmFyaWFibGUiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50TWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uIiwic3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbiIsInN1cGVyVHlwZXNTdHJpbmdGcm9tU3VwZXJUeXBlcyIsInN1cHBvc2l0aW9uc1N0cmluZ0Zyb21TdXBwb3NpdGlvbnMiLCJ0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVRlcm1BbmRWYXJpYWJsZSIsInRlcm1zU3RyaW5nRnJvbVRlcm1zIiwidG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwidHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUiLCJ0ZXJtcyIsInRlcm1zU3RyaW5nIiwicmVkdWNlIiwidGVybSIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJsYWJlbHMiLCJsYWJlbHNTdHJpbmciLCJsYWJlbCIsImxhYmVsU3RyaW5nIiwicHJlbWlzZXMiLCJwcmVtaXNlc1N0cmluZyIsInByZW1pc2UiLCJwcmVtaXNlU3RyaW5nIiwiaHlwb3RoZXNlcyIsImh5cG90aGVzZXNTdHJpbmciLCJoeXBvdGhlc2lzIiwiaHlwb3RoZXNpc1N0cmluZyIsInN1cGVyVHlwZXMiLCJiYXNlVHlwZSIsImJhc2VUeXBlRnJvbU5vdGhpbmciLCJzdXBlclR5cGVzU3RyaW5nIiwic3VwZXJUeXBlIiwic3VwZXJUeXBlU3RyaW5nIiwicGFyYW1ldGVycyIsInBhcmFtZXRlcnNTdHJpbmciLCJwYXJhbWV0ZXIiLCJwYXJhbWV0ZXJTdHJpbmciLCJzdXBwb3NpdGlvbnMiLCJzdXBwb3NpdGlvbnNTdHJpbmciLCJzdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uU3RyaW5nIiwic2lnbmF0dXJlU3RyaW5nIiwiZXF1aXZhbGVuY2VTdHJpbmciLCJub21pbmFsVHlwZU5hbWUiLCJ0eXBlU3RyaW5nIiwidmFyaWFibGUiLCJ2YXJpYWJsZVN0cmluZyIsInRlcm1TdWJzdGl0dXRpb25TdHJpbmciLCJjb25jbHVzaW9uIiwiY29uY2x1c2lvblN0cmluZyIsInJ1bGVTdHJpbmciLCJheGlvbSIsImxlbW1hIiwidGhlb3JlbSIsImNvbmplY3R1cmUiLCJ0b3BMZXZlbEFzc2VydGlvbiIsInRvcExldmVsQXNzZXJ0aW9uU3RyaW5nIiwic2VjdGlvblN0cmluZyIsInN1YkRlcml2YXRpb24iLCJsYXN0U3RlcCIsImdldExhc3RTdGVwIiwibGFzdFN0ZXBTdHJpbmciLCJzdWJwcm9vZlN0cmluZyIsImZyYW1lIiwibWV0YXZhcmlhYmxlIiwiZnJhbWVTdHJpbmciLCJtZXRhdmFyaWFibGVTdHJpbmciLCJzdHJpbmciLCJzdGF0ZW1lbnQiLCJyZWZlcmVuY2UiLCJzdGF0ZW1lbnRTdHJpbmciLCJyZWZlcm5lY2VTdHJpbmciLCJtZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nIiwicHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlUmVmZXJlbmNlTmFtZSIsImdldE5hbWUiLCJwcm9jZWR1cmVDYWxsU3RyaW5nIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nIiwicmVmZXJlbmNlU3RyaW5nIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nIiwiZGVkdWN0aW9uIiwiZGVkdWN0aW9uU3RyaW5nIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nIiwic3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uU3RyaW5nIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFnSGdCQTtlQUFBQTs7UUFvREFDO2VBQUFBOztRQXRIQUM7ZUFBQUE7O1FBNUJBQztlQUFBQTs7UUEwSkFDO2VBQUFBOztRQS9GQUM7ZUFBQUE7O1FBN0NBQztlQUFBQTs7UUFvSkFDO2VBQUFBOztRQWdCQUM7ZUFBQUE7O1FBL0RBQztlQUFBQTs7UUFXQUM7ZUFBQUE7O1FBdkNBQztlQUFBQTs7UUFtRkFDO2VBQUFBOztRQStDQUM7ZUFBQUE7O1FBaEZBQztlQUFBQTs7UUEvRkFDO2VBQUFBOztRQStCQUM7ZUFBQUE7O1FBa0NBQztlQUFBQTs7UUF6SEFDO2VBQUFBOztRQXdNQUM7ZUFBQUE7O1FBb0JBQztlQUFBQTs7UUF6R0FDO2VBQUFBOzs7c0JBckhvQjtBQUU3QixTQUFTSCxxQkFBcUJJLEtBQUs7SUFDeEMsTUFBTUMsY0FBY0QsTUFBTUUsTUFBTSxDQUFDLENBQUNELGFBQWFFO1FBQzdDLE1BQU1DLGFBQWFELEtBQUtFLFNBQVM7UUFFakNKLGNBQWMsQUFBQ0EsZ0JBQWdCLE9BQ2hCLEdBQUdBLFlB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
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc1N0cmluZ0Zyb21UZXJtcyh0ZXJtcykge1xuICBjb25zdCB0ZXJtc1N0cmluZyA9IHRlcm1zLnJlZHVjZSgodGVybXNTdHJpbmcsIHRlcm0pID0+IHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIHRlcm1zU3RyaW5nID0gKHRlcm1zU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgYCR7dGVybXNTdHJpbmd9LCAke3Rlcm1TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgdGVybVN0cmluZztcblxuICAgIHJldHVybiB0ZXJtc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHRlcm1zU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzU3RyaW5nRnJvbUxhYmVscyhsYWJlbHMpIHtcbiAgY29uc3QgbGFiZWxzU3RyaW5nID0gbGFiZWxzLnJlZHVjZSgobGFiZWxzU3RyaW5nLCBsYWJlbCkgPT4ge1xuICAgIGNvbnN0IGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCk7XG5cbiAgICBsYWJlbHNTdHJpbmcgPSAobGFiZWxzU3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICBsYWJlbFN0cmluZzogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSwgJHtsYWJlbFN0cmluZ31gO1xuXG4gICAgcmV0dXJuIGxhYmVsc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIGxhYmVsc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzU3RyaW5nRnJvbVByZW1pc2VzKHByZW1pc2VzKSB7XG4gIGNvbnN0IHByZW1pc2VzU3RyaW5nID0gcHJlbWlzZXMucmVkdWNlKChwcmVtaXNlc1N0cmluZywgcHJlbWlzZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSBwcmVtaXNlLmdldFN0cmluZygpO1xuXG4gICAgcHJlbWlzZXNTdHJpbmcgPSAocHJlbWlzZXNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgYCR7cHJlbWlzZXNTdHJpbmd9LCAke3ByZW1pc2VTdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgcHJlbWlzZVN0cmluZzsgIC8vL1xuXG4gICAgcmV0dXJuIHByZW1pc2VzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gcHJlbWlzZXNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzU3RyaW5nRnJvbUh5cG90aGVzZXMoaHlwb3RoZXNlcykge1xuICBjb25zdCBoeXBvdGhlc2VzU3RyaW5nID0gaHlwb3RoZXNlcy5yZWR1Y2UoKGh5cG90aGVzZXNTdHJpbmcsIGh5cG90aGVzaXMpID0+IHtcbiAgICBjb25zdCBoeXBvdGhlc2lzU3RyaW5nID0gaHlwb3RoZXNpcy5nZXRTdHJpbmcoKTtcblxuICAgIGh5cG90aGVzZXNTdHJpbmcgPSAoaHlwb3RoZXNlc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtoeXBvdGhlc2VzU3RyaW5nfSwgJHtoeXBvdGhlc2lzU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5cG90aGVzaXNTdHJpbmc7ICAvLy9cblxuICAgIHJldHVybiBoeXBvdGhlc2VzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gaHlwb3RoZXNlc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNTdHJpbmdGcm9tU3VwZXJUeXBlcyhzdXBlclR5cGVzKSB7XG4gIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpLFxuICAgICAgICBzdXBlclR5cGVzU3RyaW5nID0gc3VwZXJUeXBlcy5yZWR1Y2UoKHN1cGVyVHlwZXNTdHJpbmcsIHN1cGVyVHlwZSkgPT4ge1xuICAgICAgICAgIGlmIChzdXBlclR5cGUgIT09IGJhc2VUeXBlKSB7XG4gICAgICAgICAgICBjb25zdCBzdXBlclR5cGVTdHJpbmcgPSBzdXBlclR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgICAgIHN1cGVyVHlwZXNTdHJpbmcgPSAoc3VwZXJUeXBlc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCcke3N1cGVyVHlwZVN0cmluZ30nYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3N1cGVyVHlwZXNTdHJpbmd9LCAnJHtzdXBlclR5cGVTdHJpbmd9J2A7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN1cGVyVHlwZXNTdHJpbmc7XG4gICAgICAgIH0sIG51bGwpO1xuXG4gIHJldHVybiBzdXBlclR5cGVzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc1N0cmluZ0Zyb21QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgcGFyYW1ldGVyc1N0cmluZyA9IHBhcmFtZXRlcnMucmVkdWNlKChwYXJhbWV0ZXJzU3RyaW5nLCBwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJTdHJpbmcgPSBwYXJhbWV0ZXIuZ2V0U3RyaW5nKCk7XG5cbiAgICBwYXJhbWV0ZXJzU3RyaW5nID0gKHBhcmFtZXRlcnNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJTdHJpbmcgOiAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7cGFyYW1ldGVyc1N0cmluZ30sICR7cGFyYW1ldGVyU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucykge1xuICBjb25zdCBzdXBwb3NpdGlvbnNTdHJpbmcgPSBzdXBwb3NpdGlvbnMucmVkdWNlKChzdXBwb3NpdGlvbnNTdHJpbmcsIHN1cHBvc2l0aW9uKSA9PiB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIHN1cHBvc2l0aW9uc1N0cmluZyA9IChzdXBwb3NpdGlvbnNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3NpdGlvblN0cmluZzogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3N1cHBvc2l0aW9uc1N0cmluZ30sICR7c3VwcG9zaXRpb25TdHJpbmd9YDtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbnNTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVTdHJpbmdGcm9tVGVybXModGVybXMpIHtcbiAgY29uc3QgdGVybXNTdHJpbmcgPSB0ZXJtc1N0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgIHNpZ25hdHVyZVN0cmluZyA9IGBbJHt0ZXJtc1N0cmluZ31dYDtcblxuICByZXR1cm4gc2lnbmF0dXJlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXModGVybXMpIHtcbiAgY29uc3QgdGVybXNTdHJpbmcgPSB0ZXJtc1N0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgIGVxdWl2YWxlbmNlU3RyaW5nID0gYFske3Rlcm1zU3RyaW5nfV1gO1xuXG4gIHJldHVybiBlcXVpdmFsZW5jZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSkge1xuICBjb25zdCB0eXBlU3RyaW5nID0gbm9taW5hbFR5cGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIHR5cGVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVRlcm1BbmRWYXJpYWJsZSh0ZXJtLCB2YXJpYWJsZSkge1xuICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdmFyaWFibGVTdHJpbmcgPSB2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdGVybVN1YnN0aXR1dGlvblN0cmluZyA9IGBbJHt0ZXJtU3RyaW5nfSBmb3IgJHt2YXJpYWJsZVN0cmluZ31dYDtcblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25TdHJpbmdGcm9tUmVmZXJlbmNlQW5kU3RhdGVtZW50KHJlZmVyZW5jZSwgc3RhdGVtZW50KSB7XG4gIGNvbnN0IHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICBhc3N1bXB0aW9uU3RyaW5nID0gYCR7cmVmZXJlbmNlU3RyaW5nfSA6OiAke3N0YXRlbWVudFN0cmluZ31gO1xuXG4gIHJldHVybiBhc3N1bXB0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24obGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbikge1xuICBjb25zdCBjb25jbHVzaW9uU3RyaW5nID0gY29uY2x1c2lvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgcHJlbWlzZXNTdHJpbmcgPSBwcmVtaXNlc1N0cmluZ0Zyb21QcmVtaXNlcyhwcmVtaXNlcyksXG4gICAgICAgIGxhYmVsc1N0cmluZyA9IGxhYmVsc1N0cmluZ0Zyb21MYWJlbHMobGFiZWxzKSxcbiAgICAgICAgcnVsZVN0cmluZyA9IChwcmVtaXNlc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbHNTdHJpbmd9IDo6IFske3ByZW1pc2VzU3RyaW5nfV0uLi4ke2NvbmNsdXNpb25TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSA6OiAke2NvbmNsdXNpb25TdHJpbmd9YDtcblxuICByZXR1cm4gcnVsZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY3Rpb25TdHJpbmdGcm9tSHlwb3RoZXNlc1RvcExldmVsQXNzZXJ0aW9uKGh5cG90aGVzZXMsIGF4aW9tLCBsZW1tYSwgdGhlb3JlbSwgY29uamVjdHVyZSkge1xuICBjb25zdCB0b3BMZXZlbEFzc2VydGlvbiA9IChheGlvbSB8fCBsZW1tYSB8fCB0aGVvcmVtIHx8IGNvbmplY3R1cmUpLFxuICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBoeXBvdGhlc2VzU3RyaW5nID0gaHlwb3RoZXNlc1N0cmluZ0Zyb21IeXBvdGhlc2VzKGh5cG90aGVzZXMpLFxuICAgICAgICBzZWN0aW9uU3RyaW5nID0gKHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBbJHtoeXBvdGhlc2VzU3RyaW5nfV06OjogJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgWyR7aHlwb3RoZXNlc1N0cmluZ31dOjo6IGA7XG5cbiAgcmV0dXJuIHNlY3Rpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uKHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbikge1xuICBjb25zdCBsYXN0U3RlcCA9IHN1YkRlcml2YXRpb24uZ2V0TGFzdFN0ZXAoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zU3RyaW5nID0gc3VwcG9zaXRpb25zU3RyaW5nRnJvbVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMpLFxuICAgICAgICBsYXN0U3RlcFN0cmluZyA9IGxhc3RTdGVwLmdldFN0cmluZygpLFxuICAgICAgICBzdWJwcm9vZlN0cmluZyA9IGBbJHtzdXBwb3NpdGlvbnNTdHJpbmd9XS4uLiR7bGFzdFN0ZXBTdHJpbmd9YDtcblxuICByZXR1cm4gc3VicHJvb2ZTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21GcmFtZUFuZE1ldGF2YXJpYWJsZShmcmFtZSwgbWV0YXZhcmlhYmxlKSB7XG4gIGNvbnN0IGZyYW1lU3RyaW5nID0gZnJhbWUuZ2V0U3RyaW5nKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3RyaW5nID0gYFske2ZyYW1lU3RyaW5nfSBmb3IgWyR7bWV0YXZhcmlhYmxlU3RyaW5nfV1dYDtcblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YUxldmVsQXNzdW1wdGlvblN0cmluZ0Zyb21SZWZlcmVuY2VBbmRTdGF0ZW1lbnQocmVmZXJlbmNlLCBzdGF0ZW1lbnQpIHtcbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICByZWZlcm5lY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCksXG4gICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmcgPSBgJHtyZWZlcm5lY2VTdHJpbmd9IDo6ICR7c3RhdGVtZW50U3RyaW5nfWA7XG5cbiAgcmV0dXJuIG1ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMocHJvY2VkdXJlUmVmZXJlbmNlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZU5hbWUgPSBwcm9jZWR1cmVSZWZlcmVuY2UuZ2V0TmFtZSgpLFxuICAgICAgICBwYXJhbWV0ZXJzU3RyaW5nID0gcGFyYW1ldGVyc1N0cmluZ0Zyb21QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nID0gYEAke3Byb2NlZHVyZVJlZmVyZW5jZU5hbWV9KCR7cGFyYW1ldGVyc1N0cmluZ30pYDtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbFN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZ0Zyb21TdGF0ZW1lbnRBbmRNZXRhdmFyaWFibGUoc3RhdGVtZW50LCBtZXRhdmFyaWFibGUpIHtcbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZyA9IGBbJHtzdGF0ZW1lbnRTdHJpbmd9IGZvciAke21ldGF2YXJpYWJsZVN0cmluZ31dYDtcblxuICByZXR1cm4gc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVJlZmVyZW5jZUFuZE1ldGF2YXJpYWJsZShyZWZlcmVuY2UsIG1ldGF2YXJpYWJsZSkge1xuICBjb25zdCByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nID0gYFske3JlZmVyZW5jZVN0cmluZ30gZm9yICR7bWV0YXZhcmlhYmxlU3RyaW5nfV1gO1xuXG4gIHJldHVybiByZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbikge1xuICBsZXQgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmc7XG5cbiAgY29uc3Qgc3VwcG9zaXRpb25zU3RyaW5nID0gc3VwcG9zaXRpb25zU3RyaW5nRnJvbVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMpLFxuICAgICAgICBkZWR1Y3Rpb25TdHJpbmcgPSBkZWR1Y3Rpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIGxhYmVsc1N0cmluZyA9IGxhYmVsc1N0cmluZ0Zyb21MYWJlbHMobGFiZWxzKTtcblxuICBpZiAobGFiZWxzU3RyaW5nICE9PSBudWxsKSB7XG4gICAgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSAoc3VwcG9zaXRpb25zU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSA6OiBbJHtzdXBwb3NpdGlvbnNTdHJpbmd9XS4uLiR7ZGVkdWN0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSA6OiAke2RlZHVjdGlvblN0cmluZ31gO1xuICB9IGVsc2Uge1xuICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gKHN1cHBvc2l0aW9uc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBbJHtzdXBwb3NpdGlvbnNTdHJpbmd9XS4uLiR7ZGVkdWN0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZHVjdGlvblN0cmluZztcbiAgfVxuXG4gIHJldHVybiB0b3BMZXZlbEFzc2VydGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pIHtcbiAgY29uc3QgbGFiZWxTdHJpbmcgPSBsYWJlbC5nZXRTdHJpbmcoKSxcbiAgICAgICAgZGVkdWN0aW9uU3RyaW5nID0gZGVkdWN0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBzdXBwb3NpdGlvbnNTdHJpbmcgPSBzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucyksXG4gICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyA9IChzdXBwb3NpdGlvbnNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsU3RyaW5nfSA6OiBbJHtzdXBwb3NpdGlvbnNTdHJpbmd9XS4uLiR7ZGVkdWN0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbFN0cmluZ30gOjogJHtkZWR1Y3Rpb25TdHJpbmd9YDtcblxuICByZXR1cm4gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nRnJvbVN0YXRlbWVudE1ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbihzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSwgc3Vic3RpdHV0aW9uKSB7XG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBzdWJzdGl0dXRpb25TdHJpbmcgPSBzdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZyA9IGBbJHtzdGF0ZW1lbnRTdHJpbmd9IGZvciAke21ldGF2YXJpYWJsZVN0cmluZ30ke3N1YnN0aXR1dGlvblN0cmluZ31dYDtcblxuICByZXR1cm4gc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nO1xufVxuIl0sIm5hbWVzIjpbImFzc3VtcHRpb25TdHJpbmdGcm9tUmVmZXJlbmNlQW5kU3RhdGVtZW50IiwiZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXMiLCJmcmFtZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21GcmFtZUFuZE1ldGF2YXJpYWJsZSIsImh5cG90aGVzZXNTdHJpbmdGcm9tSHlwb3RoZXNlcyIsImxhYmVsc1N0cmluZ0Zyb21MYWJlbHMiLCJtZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nRnJvbVJlZmVyZW5jZUFuZFN0YXRlbWVudCIsInBhcmFtZXRlcnNTdHJpbmdGcm9tUGFyYW1ldGVycyIsInByZW1pc2VzU3RyaW5nRnJvbVByZW1pc2VzIiwicHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVJlZmVyZW5jZUFuZE1ldGF2YXJpYWJsZSIsInJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uIiwic2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzVG9wTGV2ZWxBc3NlcnRpb24iLCJzaWduYXR1cmVTdHJpbmdGcm9tVGVybXMiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50QW5kTWV0YXZhcmlhYmxlIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nRnJvbVN0YXRlbWVudE1ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbiIsInN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24iLCJzdXBlclR5cGVzU3RyaW5nRnJvbVN1cGVyVHlwZXMiLCJzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zIiwidGVybVN1YnN0aXR1dGlvblN0cmluZ0Zyb21UZXJtQW5kVmFyaWFibGUiLCJ0ZXJtc1N0cmluZ0Zyb21UZXJtcyIsInRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsInRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsInR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lIiwidGVybXMiLCJ0ZXJtc1N0cmluZyIsInJlZHVjZSIsInRlcm0iLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwibGFiZWxzIiwibGFiZWxzU3RyaW5nIiwibGFiZWwiLCJsYWJlbFN0cmluZyIsInByZW1pc2VzIiwicHJlbWlzZXNTdHJpbmciLCJwcmVtaXNlIiwicHJlbWlzZVN0cmluZyIsImh5cG90aGVzZXMiLCJoeXBvdGhlc2VzU3RyaW5nIiwiaHlwb3RoZXNpcyIsImh5cG90aGVzaXNTdHJpbmciLCJzdXBlclR5cGVzIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwic3VwZXJUeXBlc1N0cmluZyIsInN1cGVyVHlwZSIsInN1cGVyVHlwZVN0cmluZyIsInBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzU3RyaW5nIiwicGFyYW1ldGVyIiwicGFyYW1ldGVyU3RyaW5nIiwic3VwcG9zaXRpb25zIiwic3VwcG9zaXRpb25zU3RyaW5nIiwic3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvblN0cmluZyIsInNpZ25hdHVyZVN0cmluZyIsImVxdWl2YWxlbmNlU3RyaW5nIiwibm9taW5hbFR5cGVOYW1lIiwidHlwZVN0cmluZyIsInZhcmlhYmxlIiwidmFyaWFibGVTdHJpbmciLCJ0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nIiwicmVmZXJlbmNlIiwic3RhdGVtZW50IiwicmVmZXJlbmNlU3RyaW5nIiwic3RhdGVtZW50U3RyaW5nIiwiYXNzdW1wdGlvblN0cmluZyIsImNvbmNsdXNpb24iLCJjb25jbHVzaW9uU3RyaW5nIiwicnVsZVN0cmluZyIsImF4aW9tIiwibGVtbWEiLCJ0aGVvcmVtIiwiY29uamVjdHVyZSIsInRvcExldmVsQXNzZXJ0aW9uIiwidG9wTGV2ZWxBc3NlcnRpb25TdHJpbmciLCJzZWN0aW9uU3RyaW5nIiwic3ViRGVyaXZhdGlvbiIsImxhc3RTdGVwIiwiZ2V0TGFzdFN0ZXAiLCJsYXN0U3RlcFN0cmluZyIsInN1YnByb29mU3RyaW5nIiwiZnJhbWUiLCJtZXRhdmFyaWFibGUiLCJmcmFtZVN0cmluZyIsIm1ldGF2YXJpYWJsZVN0cmluZyIsInN0cmluZyIsInJlZmVybmVjZVN0cmluZyIsIm1ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmciLCJwcm9jZWR1cmVSZWZlcmVuY2UiLCJwcm9jZWR1cmVSZWZlcmVuY2VOYW1lIiwiZ2V0TmFtZSIsInByb2NlZHVyZUNhbGxTdHJpbmciLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmciLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmciLCJkZWR1Y3Rpb24iLCJkZWR1Y3Rpb25TdHJpbmciLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmciLCJzdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25TdHJpbmciXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQXFJZ0JBO2VBQUFBOztRQXJCQUM7ZUFBQUE7O1FBNERBQztlQUFBQTs7UUE5SEFDO2VBQUFBOztRQTVCQUM7ZUFBQUE7O1FBa0tBQztlQUFBQTs7UUF2R0FDO2VBQUFBOztRQTdD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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.857",
4
+ "version": "1.0.859",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-verify-cli",
7
7
  "description": "Occam's Verifier",
@@ -646,12 +646,30 @@ export default class NominalFileContext extends FileContext {
646
646
  return declaredMetavariable;
647
647
  }
648
648
 
649
+ findTermByTermNode(termNode) {
650
+ const term = null;
651
+
652
+ return term;
653
+ }
654
+
655
+ findStatementByStatementNode(statementNode) {
656
+ const statement = null;
657
+
658
+ return statement;
659
+ }
660
+
649
661
  findSubstitutionByVariableNode(variableNode) {
650
662
  const substitution = null;
651
663
 
652
664
  return substitution;
653
665
  }
654
666
 
667
+ findMetavariableByMetavariableNode(metavariableNode) {
668
+ const metavariable = null;
669
+
670
+ return metavariable;
671
+ }
672
+
655
673
  findSubstitutionByMetavariableNode(metavariableNode) {
656
674
  const substitution = null;
657
675
 
@@ -70,7 +70,7 @@ export default class LiminalContext extends Context {
70
70
  derivedSubstitutionA = derivedSubstitution, ///
71
71
  derivedSubstitutionString = derivedSubstitution.getString();
72
72
 
73
- context.trace(`Adding the '${derivedSubstitutionString}' derivedSubstitution to the liminal context...`);
73
+ context.trace(`Adding the '${derivedSubstitutionString}' derived substitution to the liminal context...`);
74
74
 
75
75
  const derivedSubstitutionB = this.derivedSubstitutions.find((derivedSubstitution) => {
76
76
  const derivedSubstitutionB = derivedSubstitution, ///
@@ -82,12 +82,12 @@ export default class LiminalContext extends Context {
82
82
  }) || null;
83
83
 
84
84
  if (derivedSubstitutionB !== null) {
85
- context.debug(`The '${derivedSubstitutionString}' derivedSubstitution has already been added to the liminal context.`);
85
+ context.debug(`The '${derivedSubstitutionString}' derived substitution has already been added to the liminal context.`);
86
86
  } else {
87
87
  this.derivedSubstitutions.push(derivedSubstitution);
88
88
  }
89
89
 
90
- context.debug(`...added the '${derivedSubstitutionString}' derivedSubstitution to the liminal context.`);
90
+ context.debug(`...added the '${derivedSubstitutionString}' derived substitution to the liminal context.`);
91
91
  }
92
92
 
93
93
  addDerivedSubstitutions(derivedSubstitutions) {
@@ -491,6 +491,10 @@ export default class MnemicContext extends Context {
491
491
  ///
492
492
  }
493
493
 
494
+ addDerivedSubstitutions(derivedSubstitutions) {
495
+ ///
496
+ }
497
+
494
498
  findVariableByVariableNode(variableNode) {
495
499
  const variableIdentifier = variableNode.getVariableIdentifier(),
496
500
  declaredVariable = this.findDeclaredVariableByVariableIdentifier(variableIdentifier),
@@ -18,7 +18,7 @@ import { compressTerms,
18
18
  const { push } = arrayUtilities;
19
19
 
20
20
  export default class SynopticContext extends Context {
21
- constructor(context, terms, frames, equalities, judgements, assertions, statements, references, assumptions, metavariables, substitutions) {
21
+ constructor(context, terms, frames, equalities, judgements, assertions, statements, references, assumptions, metavariables, substitutions, derivedSubstitutions) {
22
22
  super(context);
23
23
 
24
24
  this.terms = terms;
@@ -31,6 +31,7 @@ export default class SynopticContext extends Context {
31
31
  this.assumptions = assumptions;
32
32
  this.metavariables = metavariables;
33
33
  this.substitutions = substitutions;
34
+ this.derivedSubstitutions = derivedSubstitutions;
34
35
  }
35
36
 
36
37
  getTerms(terms = []) {
@@ -133,6 +134,14 @@ export default class SynopticContext extends Context {
133
134
  return substitutions;
134
135
  }
135
136
 
137
+ getDerivedSubstitutions(derivedSubstitutions = []) {
138
+ push(derivedSubstitutions, this.derivedSubstitutions);
139
+
140
+ this.context.getDerivedSubstitutions(derivedSubstitutions);
141
+
142
+ return derivedSubstitutions;
143
+ }
144
+
136
145
  findTermByTermNode(termNode) {
137
146
  const terms = this.getTerms(),
138
147
  term = terms.find((term) => {
@@ -288,7 +297,8 @@ export default class SynopticContext extends Context {
288
297
  assumptions = assumptionsFromContexts(contexts),
289
298
  metavariables = metavariablesFromContexts(contexts),
290
299
  substitutions = substitutionsFromContexts(contexts),
291
- synopticContext = new SynopticContext(context, terms, frames, equalities, judgements, assertions, statements, references, assumptions, metavariables, substitutions);
300
+ derivedSubstitutions = derivedSubstitutionsFromContexts(contexts),
301
+ synopticContext = new SynopticContext(context, terms, frames, equalities, judgements, assertions, statements, references, assumptions, metavariables, substitutions, derivedSubstitutions);
292
302
 
293
303
  return synopticContext;
294
304
  }
@@ -413,3 +423,13 @@ function substitutionsFromContexts(contexts) {
413
423
 
414
424
  return substitutions;
415
425
  }
426
+
427
+ function derivedSubstitutionsFromContexts(contexts) {
428
+ const derivedSubstitutions = [];
429
+
430
+ contexts.forEach((context) => {
431
+ context.getDerivedSubstitutions(derivedSubstitutions);
432
+ });
433
+
434
+ return derivedSubstitutions;
435
+ }
package/src/context.js CHANGED
@@ -600,6 +600,12 @@ export default class Context extends ContextBase {
600
600
  context.addSubstitutions(substitutions);
601
601
  }
602
602
 
603
+ addDerivedSubstitutions(derivedSubstitutions) {
604
+ const context = this.getContext();
605
+
606
+ context.addDerivedSubstitutions(derivedSubstitutions);
607
+ }
608
+
603
609
  addTerm(term) {
604
610
  const context = this.getContext();
605
611
 
@@ -3,10 +3,12 @@
3
3
  import { Element } from "occam-languages";
4
4
 
5
5
  import { define } from "../../elements";
6
+ import { unifyStatement } from "../../process/unify";
7
+ import { stripBracketsFromStatement } from "../../utilities/brackets";
6
8
  import { instantiateMetaLevelAssumption } from "../../process/instantiate";
7
9
  import { metaLevelAssumptionFromMetaLevelAssumptionNode } from "../../utilities/element";
8
- import { metaLevelAssumptionStringFromStatementAndReference } from "../../utilities/string";
9
- import { ablate, attempt, descend, serialise, unserialise, instantiate } from "../../utilities/context";
10
+ import { metaLevelAssumptionStringFromReferenceAndStatement } from "../../utilities/string";
11
+ import { join, ablate, attempt, descend, reconcile, serialise, unserialise, instantiate } from "../../utilities/context";
10
12
 
11
13
  export default define(class MetaLevelAssumption extends Element {
12
14
  constructor(context, string, node, lineIndex, reference, statement) {
@@ -198,6 +200,85 @@ export default define(class MetaLevelAssumption extends Element {
198
200
  return validatesWhenDerived;
199
201
  }
200
202
 
203
+ unifyAssumption(assumption, context) {
204
+ let assumptionUnifies;
205
+
206
+ const assumptionString = assumption.getString(), ///
207
+ metaLevelAssumptionString = this.getString();
208
+
209
+ context.trace(`Unifying the '${assumptionString}' assumption with the '${metaLevelAssumptionString}' meta-level assumption...`);
210
+
211
+ const metaLevelAssumptionContext = this.getContext(), ///
212
+ assumptionContext = assumption.getContext(),
213
+ specificContext = assumptionContext, ///
214
+ generalContext = metaLevelAssumptionContext; ///
215
+
216
+ join((specificContext) => {
217
+ reconcile((specificContext) => {
218
+ const reference = assumption.getReference(),
219
+ referneceUnifies = this.unifyReference(reference, generalContext, specificContext);
220
+
221
+ if (referneceUnifies) {
222
+ const statement = assumption.getStatement(),
223
+ statementUnifieds = this.unifyStatement(statement, generalContext, specificContext);
224
+
225
+ if (statementUnifieds) {
226
+ specificContext.commit(context);
227
+
228
+ assumptionUnifies = true;
229
+ }
230
+ }
231
+ }, specificContext);
232
+ }, specificContext, context);
233
+
234
+ if (assumptionUnifies) {
235
+ context.debug(`...unified the '${assumptionString}' assumption with the '${metaLevelAssumptionString}' meta-level assumption...`);
236
+ }
237
+
238
+ return assumptionUnifies;
239
+ }
240
+
241
+ unifyReference(reference, generalContext, specificContext) {
242
+ let referenceUnifies;
243
+
244
+ const context = specificContext, ///
245
+ referenceString = reference.getString(),
246
+ metaLevelAssumptionString = this.getString(); ///
247
+
248
+ context.trace(`Unifying the '${referenceString}' reference with the '${metaLevelAssumptionString}' meta-level assumption's reference...`);
249
+
250
+ const metavariable = this.getMetavariable();
251
+
252
+ referenceUnifies = metavariable.unifyReference(reference, generalContext, specificContext);
253
+
254
+ if (referenceUnifies) {
255
+ context.debug(`..unified the '${referenceString}' with the '${metaLevelAssumptionString}' meta-level assumption's reference.`);
256
+ }
257
+
258
+ return referenceUnifies;
259
+ }
260
+
261
+ unifyStatement(statement, generalContext, specificContext) {
262
+ let statementUnifies;
263
+
264
+ const context = specificContext, ///
265
+ statementString = statement.getString(),
266
+ metaLevelAssumptionString = this.getString(); ///
267
+
268
+ context.trace(`Unifying the '${statementString}' statement with the '${metaLevelAssumptionString}' meta-level assumption's statement...`);
269
+
270
+ const generalStatement = stripBracketsFromStatement(this.statement, context), ///
271
+ specificStatement = stripBracketsFromStatement(statement, context); ///
272
+
273
+ statementUnifies = unifyStatement(generalStatement, specificStatement, generalContext, specificContext);
274
+
275
+ if (statementUnifies) {
276
+ context.debug(`...unified the '${statementString}' statement with the '${metaLevelAssumptionString}' meta-level assumption's statement.`);
277
+ }
278
+
279
+ return statementUnifies;
280
+ }
281
+
201
282
  toJSON() {
202
283
  const context = this.getContext();
203
284
 
@@ -239,9 +320,9 @@ export default define(class MetaLevelAssumption extends Element {
239
320
 
240
321
  ablate((context) => {
241
322
  instantiate((context) => {
242
- const statement = step.getStatement(),
243
- reference = step.getReference(),
244
- metaLevelAssumptionString = metaLevelAssumptionStringFromStatementAndReference(statement, reference),
323
+ const reference = step.getReference(),
324
+ statement = step.getStatement(),
325
+ metaLevelAssumptionString = metaLevelAssumptionStringFromReferenceAndStatement(reference, statement),
245
326
  string = metaLevelAssumptionString, ///
246
327
  metaLevelAssumptionNode = instantiateMetaLevelAssumption(string, context);
247
328
 
@@ -3,9 +3,8 @@
3
3
  import { Element } from "occam-languages";
4
4
 
5
5
  import { define } from "../elements";
6
- import { unifyAssumption } from "../process/unify";
6
+ import { instantiate } from "../utilities/context";
7
7
  import { instantiateAssumption } from "../process/instantiate";
8
- import { join, reconcile, instantiate } from "../utilities/context";
9
8
 
10
9
  export default define(class Assumption extends Element {
11
10
  constructor(context, string, node, lineIndex, reference, statement) {
@@ -202,45 +201,6 @@ export default define(class Assumption extends Element {
202
201
  return validatesWhenDerived;
203
202
  }
204
203
 
205
- unifyMetaLevelAssumption(metaLevelAssumption, context) {
206
- let metaLevelAssumptionUnifies;
207
-
208
- const assumptionString = this.getString(), ///
209
- metaLevelAssumptionString = metaLevelAssumption.getString();
210
-
211
- context.trace(`Unifying the '${metaLevelAssumptionString}' meta-level assumption with the '${assumptionString}' assumption...`);
212
-
213
- const metaLevelAssumptionContext = metaLevelAssumption.getContext(),
214
- assumptionContext = this.getContext(),
215
- generalContext = assumptionContext, ///
216
- specificContext = metaLevelAssumptionContext; ///
217
-
218
- join((specificContext) => {
219
- reconcile((specificContext) => {
220
- const generalAssumption = this, ///
221
- specificAssumption = metaLevelAssumption, ///
222
- assumptionUnifies = unifyAssumption(generalAssumption, specificAssumption, generalContext, specificContext);
223
-
224
- if (assumptionUnifies) {
225
- const assumption = this, ///
226
- specificContextQualifies = specificContext.qualify(assumption, metaLevelAssumption);
227
-
228
- if (specificContextQualifies) {
229
- specificContext.commit(context);
230
-
231
- metaLevelAssumptionUnifies = true;
232
- }
233
- }
234
- }, specificContext);
235
- }, specificContext, context);
236
-
237
- if (metaLevelAssumptionUnifies) {
238
- context.debug(`...unified the '${metaLevelAssumptionString}' meta-level assumption with the '${assumptionString}' assumption.`);
239
- }
240
-
241
- return metaLevelAssumptionUnifies;
242
- }
243
-
244
204
  unifyTopLevelMetaAssertion(topLevelMetaAssertion, context) {
245
205
  let topLevelMetaAssertionUnifies;
246
206
 
@@ -292,7 +252,7 @@ export default define(class Assumption extends Element {
292
252
  }
293
253
 
294
254
  static fromJSON(json, context) {
295
- const assumption = instantiate((context) => {
255
+ return instantiate((context) => {
296
256
  const { string, lineIndex } = json,
297
257
  assumptionNode = instantiateAssumption(string, context),
298
258
  node = assumptionNode, ///
@@ -302,8 +262,6 @@ export default define(class Assumption extends Element {
302
262
 
303
263
  return assumption;
304
264
  }, context);
305
-
306
- return assumption;
307
265
  }
308
266
  });
309
267
 
@@ -90,30 +90,28 @@ export default define(class Judgement extends Element {
90
90
  } else {
91
91
  let validates = false;
92
92
 
93
- reconcile((context) => {
94
- const frameValidates = this.validateFrame(context);
93
+ const frameValidates = this.validateFrame(context);
95
94
 
96
- if (frameValidates) {
97
- const assumptionValidates = this.validateAssumption(context);
95
+ if (frameValidates) {
96
+ const assumptionValidates = this.validateAssumption(context);
98
97
 
99
- if (assumptionValidates) {
100
- const stated = context.isStated();
98
+ if (assumptionValidates) {
99
+ const stated = context.isStated();
101
100
 
102
- let validatesWhenStated = false,
103
- validatesWhenDerived = false;
101
+ let validatesWhenStated = false,
102
+ validatesWhenDerived = false;
104
103
 
105
- if (stated) {
106
- validatesWhenStated = this.validateWhenStated(context);
107
- } else {
108
- validatesWhenDerived = this.validateWhenDerived(context);
109
- }
104
+ if (stated) {
105
+ validatesWhenStated = this.validateWhenStated(context);
106
+ } else {
107
+ validatesWhenDerived = this.validateWhenDerived(context);
108
+ }
110
109
 
111
- if (validatesWhenStated || validatesWhenDerived) {
112
- validates = true;
113
- }
110
+ if (validatesWhenStated || validatesWhenDerived) {
111
+ validates = true;
114
112
  }
115
113
  }
116
- }, context);
114
+ }
117
115
 
118
116
  if (validates) {
119
117
  judgement = this; ///
@@ -196,26 +194,28 @@ export default define(class Judgement extends Element {
196
194
 
197
195
  context.trace(`Validating the '${judgementString}' derived judgement...`);
198
196
 
199
- const assumptions = this.getAssumptions(),
200
- topLevelMetaAssertion = this.getTopLevelMetaAssertion(),
201
- metaLevelAssumptions = topLevelMetaAssertion.getMetaLevelAssumptions(),
202
- metaLevelAssumptionsUnify = metaLevelAssumptions.every((metaLevelAssumption) => {
203
- const metaLevelAssumptionUnifies = assumptions.some((assumption) => {
204
- const metaLevelAssumptionUnifies = assumption.unifyMetaLevelAssumption(metaLevelAssumption, context);
197
+ reconcile((context) => {
198
+ const assumptions = this.getAssumptions(),
199
+ topLevelMetaAssertion = this.getTopLevelMetaAssertion(),
200
+ metaLevelAssumptions = topLevelMetaAssertion.getMetaLevelAssumptions(),
201
+ metaLevelAssumptionsUnify = metaLevelAssumptions.every((metaLevelAssumption) => {
202
+ const assumptionUnifies = assumptions.some((assumption) => {
203
+ const assumptionUnifies = metaLevelAssumption.unifyAssumption(assumption, context);
205
204
 
206
- if (metaLevelAssumptionUnifies) {
205
+ if (assumptionUnifies) {
206
+ return true;
207
+ }
208
+ });
209
+
210
+ if (assumptionUnifies) {
207
211
  return true;
208
212
  }
209
213
  });
210
214
 
211
- if (metaLevelAssumptionUnifies) {
212
- return true;
213
- }
214
- });
215
-
216
- if (metaLevelAssumptionsUnify) {
217
- validatesWhenDerived = true;
218
- }
215
+ if (metaLevelAssumptionsUnify) {
216
+ validatesWhenDerived = true;
217
+ }
218
+ }, context);
219
219
 
220
220
  if (validatesWhenDerived) {
221
221
  context.debug(`...validated the '${judgementString}' derived judgement.`);
@@ -355,6 +355,10 @@ export default define(class Metavariable extends Element {
355
355
 
356
356
  frameSubstitution.validate(generalContext, specificContext);
357
357
 
358
+ const derivedSubstitution = frameSubstitution; ///
359
+
360
+ specificContext.addDerivedSubstitution(derivedSubstitution);
361
+
358
362
  frameUnifies = true;
359
363
  }
360
364
  }
@@ -407,6 +411,10 @@ export default define(class Metavariable extends Element {
407
411
 
408
412
  statementSubstitution.validate(substitution, generalContext, specificContext);
409
413
 
414
+ const derivedSubstitution = statementSubstitution; ///
415
+
416
+ specificContext.addDerivedSubstitution(derivedSubstitution);
417
+
410
418
  statementUnifies = true;
411
419
  }
412
420
  }
@@ -452,6 +460,10 @@ export default define(class Metavariable extends Element {
452
460
 
453
461
  referenceSubstitution.validate(generalContext, specificContext);
454
462
 
463
+ const derivedSubstitution = referenceSubstitution; ///
464
+
465
+ specificContext.addDerivedSubstitution(derivedSubstitution);
466
+
455
467
  referenceUnifies = true;
456
468
  }
457
469
  }
@@ -83,24 +83,6 @@ export default define(class StatementSubstitution extends Substitution {
83
83
  return comparesToParameter;
84
84
  }
85
85
 
86
- compareSubstitution(substitution) {
87
- let comparesToSubstitution = false;
88
-
89
- if (false) {
90
- ///
91
- } else if ((this.substitution === null) && (substitution === null)){
92
- comparesToSubstitution = true;
93
- } else if ((this.substitution !== null) && (substitution !== null)){
94
- const substitutionEqualToSubstituion = this.substitution.isEqualTo(substitution);
95
-
96
- if (substitutionEqualToSubstituion) {
97
- comparesToSubstitution = true;
98
- }
99
- }
100
-
101
- return comparesToSubstitution;
102
- }
103
-
104
86
  validate(substitution, generalContext, specificContext) {
105
87
  let statementSubstitution = null;
106
88
 
@@ -292,9 +274,9 @@ export default define(class StatementSubstitution extends Substitution {
292
274
  if (replacementStatementUnifies) {
293
275
  const nested = false,
294
276
  context = specificContext, ///
295
- soleNonTrivialSubstitution = context.getSoleNonTrivialSubstitution(nested);
277
+ soleNonTrivialDerivedSubstitution = context.getSoleNonTrivialDerivedSubstitution(nested);
296
278
 
297
- substitution = soleNonTrivialSubstitution; ///
279
+ substitution = soleNonTrivialDerivedSubstitution; ///
298
280
  }
299
281
  }, specificContext);
300
282
 
@@ -156,6 +156,10 @@ export default define(class Variable extends Element {
156
156
 
157
157
  termSubstitution.validate(generalContext, specificContext);
158
158
 
159
+ const derivedSubstitution = termSubstitution; ///
160
+
161
+ specificContext.addDerivedSubstitution(derivedSubstitution);
162
+
159
163
  termUnifies = true;
160
164
  }
161
165
  }