occam-nominal 1.0.516 → 1.0.520

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.
Files changed (39) hide show
  1. package/lib/element/assertion/contained.js +4 -4
  2. package/lib/element/assertion/defined.js +4 -4
  3. package/lib/element/assertion/schema.js +12 -7
  4. package/lib/element/assertion/signature.js +17 -13
  5. package/lib/element/assertion/type.js +4 -4
  6. package/lib/element/claim/axiom.js +31 -1
  7. package/lib/element/claim/conjecture.js +31 -1
  8. package/lib/element/claim/lemma.js +31 -1
  9. package/lib/element/claim/theorem.js +31 -1
  10. package/lib/element/claim.js +13 -30
  11. package/lib/element/fact/premise.js +19 -19
  12. package/lib/element/fact/supposition.js +24 -18
  13. package/lib/element/fact.js +9 -9
  14. package/lib/element/procedureCall.js +4 -4
  15. package/lib/element/resolution/conclusion.js +5 -5
  16. package/lib/element/resolution/deduction.js +5 -5
  17. package/lib/element/rule.js +39 -25
  18. package/lib/element/statement.js +20 -20
  19. package/lib/process/unification.js +16 -33
  20. package/package.json +10 -10
  21. package/src/element/assertion/contained.js +3 -3
  22. package/src/element/assertion/defined.js +3 -3
  23. package/src/element/assertion/schema.js +19 -10
  24. package/src/element/assertion/signature.js +25 -17
  25. package/src/element/assertion/type.js +3 -3
  26. package/src/element/claim/axiom.js +42 -0
  27. package/src/element/claim/conjecture.js +42 -0
  28. package/src/element/claim/lemma.js +42 -0
  29. package/src/element/claim/theorem.js +42 -0
  30. package/src/element/claim.js +12 -35
  31. package/src/element/fact/premise.js +21 -21
  32. package/src/element/fact/supposition.js +29 -21
  33. package/src/element/fact.js +8 -8
  34. package/src/element/procedureCall.js +3 -3
  35. package/src/element/resolution/conclusion.js +4 -4
  36. package/src/element/resolution/deduction.js +4 -4
  37. package/src/element/rule.js +51 -31
  38. package/src/element/statement.js +21 -21
  39. package/src/process/unification.js +15 -48
@@ -58,6 +58,36 @@ const _default = (0, _elements.define)(class Axiom extends _claim.default {
58
58
  return back();
59
59
  });
60
60
  });
61
+ apply = breakable(function(step, factOrSubproofs, context, forward, back) {
62
+ forward = cut(forward, back); ///
63
+ const axiomString = this.getString(); ///
64
+ context.trace(`Applying the '${axiomString}' axiom...`);
65
+ return isolate((step, factOrSubproofs, context, forward, back)=>{
66
+ const applyDeduction = this.applyDeduction.bind(this), applySuppositions = this.applySuppositions.bind(this);
67
+ return (0, _context.reconcile)((context)=>{
68
+ return all([
69
+ applyDeduction,
70
+ applySuppositions
71
+ ], step, factOrSubproofs, context, (step, factOrSubproofs, context, back)=>{
72
+ const complexSubstitutionsUnsolved = context.areComplexSubstitutionsUnsolved();
73
+ if (complexSubstitutionsUnsolved) {
74
+ context.debug(`There are unsolved complex substitutions.`);
75
+ return back();
76
+ }
77
+ return forward(back);
78
+ }, back);
79
+ }, context);
80
+ }, step, factOrSubproofs, context, (step, factOrSubproofs, context, back)=>{
81
+ context.debug(`...applied the '${axiomString}' axiom.`);
82
+ return forward(context, back);
83
+ }, (exception)=>{
84
+ if (exception) {
85
+ return back(exception);
86
+ }
87
+ context.trace(`Unable to apply the '${axiomString}' axiom.`);
88
+ return back();
89
+ });
90
+ });
61
91
  verifySignature(context, forward, back) {
62
92
  const satisfiable = this.isSatisfiable();
63
93
  if (!satisfiable) {
@@ -190,4 +220,4 @@ const _default = (0, _elements.define)(class Axiom extends _claim.default {
190
220
  }
191
221
  });
192
222
 
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2NsYWltL2F4aW9tLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBDbGFpbSBmcm9tIFwiLi4vY2xhaW1cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyB0ZXJtc1N0cmluZ0Zyb21UZXJtcyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBqb2luLCBlbmNsb3NlLCByZWNvbmNpbGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBicmVha2FibGUgfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXMsXG4gICAgICB7IGN1dCwgYWxsLCBpc29sYXRlLCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQXhpb20gZXh0ZW5kcyBDbGFpbSB7XG4gIGdldEF4aW9tTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgYXhpb21Ob2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gYXhpb21Ob2RlO1xuICB9XG5cbiAgaXNTYXRpc2ZpYWJsZSgpIHtcbiAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLmdldFNpZ25hdHVyZSgpLFxuICAgICAgICAgIHNhdGlzZmlhYmxlID0gKHNpZ25hdHVyZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc2F0aXNmaWFibGU7XG4gIH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBmb3J3YXJkID0gY3V0KGZvcndhcmQsIGJhY2spOyAvLy9cblxuICAgIGNvbnN0IGF4aW9tU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLi4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgdmVyaWZ5UHJvb2YgPSB0aGlzLnZlcmlmeVByb29mLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeUxhYmVscyA9IHRoaXMudmVyaWZ5TGFiZWxzLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeVNpZ25hdHVyZSA9IHRoaXMudmVyaWZ5U2lnbmF0dXJlLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeURlZHVjdGlvbiA9IHRoaXMudmVyaWZ5RGVkdWN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeVN1cHBvc2l0aW9ucyA9IHRoaXMudmVyaWZ5U3VwcG9zaXRpb25zLmJpbmQodGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGFsbChbXG4gICAgICAgICAgdmVyaWZ5TGFiZWxzLFxuICAgICAgICAgIHZlcmlmeVNpZ25hdHVyZSxcbiAgICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMsXG4gICAgICAgICAgdmVyaWZ5RGVkdWN0aW9uLFxuICAgICAgICAgIHZlcmlmeVByb29mXG4gICAgICAgIF0sIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IGF4aW9tID0gdGhpczsgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXhpb20oYXhpb20pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICByZXR1cm4gYmFjayhleGNlcHRpb24pO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH0pO1xuICB9KTtcblxuICB2ZXJpZnlTaWduYXR1cmUoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHNhdGlzZmlhYmxlID0gdGhpcy5pc1NhdGlzZmlhYmxlKCk7XG5cbiAgICBpZiAoIXNhdGlzZmlhYmxlKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLmdldFNpZ25hdHVyZSgpLFxuICAgICAgICAgIGF4aW9tU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20ncyBzaWduYXR1cmUuLi5gKTtcblxuICAgIHJldHVybiBzaWduYXR1cmUudmVyaWZ5KGNvbnRleHQsIChiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi52ZXJpZmllZCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbSdzIHNpZ25hdHVyZS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeVRlcm1zKHRlcm1zLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgcXVvdGVkID0gdHJ1ZSxcbiAgICAgICAgICB0ZXJtc1N0cmluZyA9IHRlcm1zU3RyaW5nRnJvbVRlcm1zKHRlcm1zLCBxdW90ZWQpLFxuICAgICAgICAgIGF4aW9tU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJHt0ZXJtc1N0cmluZ30gdGVybXMgd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS4uLmApO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gdGhpcy5nZXRTaWduYXR1cmUoKTtcblxuICAgIHJldHVybiBzaWduYXR1cmUudW5pZnlUZXJtcyh0ZXJtcywgY29udGV4dCwgKHRlcm1zVW5pZnkpID0+IHtcbiAgICAgIGlmICh0ZXJtc1VuaWZ5KSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICR7dGVybXNTdHJpbmd9IHRlcm1zIHdpdGggdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20uLi5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0ZXJtc1VuaWZ5KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5Q2xhaW0oY2xhaW0sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgY2xhaW1VbmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBheGlvbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIGNsYWltU3RyaW5nID0gY2xhaW0uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSB3aXRoIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLi4uYCk7XG5cbiAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBkZWR1Y3Rpb24gPSBjbGFpbS5nZXREZWR1Y3Rpb24oKTtcblxuICAgICAgcmV0dXJuIHRoaXMudW5pZnlEZWR1Y3Rpb24oZGVkdWN0aW9uLCBjb250ZXh0LCAoZGVkdWN0aW9uVW5pZmllcykgPT4ge1xuICAgICAgICBpZiAoIWRlZHVjdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGNsYWltVW5pZmllcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdXBwb3NpdGlvbnMgPSBjbGFpbS5nZXRTdXBwb3NpdGlvbnMoKTtcblxuICAgICAgICByZXR1cm4gdGhpcy51bmlmeVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMsIGNvbnRleHQsIChzdXBwb3NpdGlvbnNVbmlmeSkgPT4ge1xuICAgICAgICAgIGlmIChzdXBwb3NpdGlvbnNVbmlmeSkge1xuICAgICAgICAgICAgY2xhaW1VbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY2xhaW1VbmlmaWVzKSB7XG4gICAgICAgICAgICBjb250ZXh0LmNvbW1pdCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjbGFpbVVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0gd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGNsYWltVW5pZmllcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeURlZHVjdGlvbihkZWR1Y3Rpb24sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgZGVkdWN0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgZ2VuZXJhbERlZHVjdGlvbiA9IHRoaXMuZ2V0RGVkdWN0aW9uKCksIC8vL1xuICAgICAgICAgIHNwZWNpZmljRGVkdWN0aW9uID0gZGVkdWN0aW9uLCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbERlZHVjdGlvblN0cmluZyA9IGdlbmVyYWxEZWR1Y3Rpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3BlY2lmaWNEZWR1Y3Rpb25TdHJpbmcgPSBzcGVjaWZpY0RlZHVjdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzcGVjaWZpY0RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbiB3aXRoIHRoZSAnJHtnZW5lcmFsRGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzcGVjaWZpY0RlZHVjdGlvbkNvbnRleHQgPSBzcGVjaWZpY0RlZHVjdGlvbi5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ2VuZXJhbERlZHVjdGlvbkNvbnRleHQgPSBnZW5lcmFsRGVkdWN0aW9uLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBzcGVjaWZpY0RlZHVjdGlvbkNvbnRleHQsICAvLy9cbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGdlbmVyYWxEZWR1Y3Rpb25Db250ZXh0OyAvLy9cblxuICAgIHJldHVybiBqb2luKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBzdGF0ZW1lbnQgPSBzcGVjaWZpY0RlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKTtcblxuICAgICAgICBkZWR1Y3Rpb24gPSBnZW5lcmFsRGVkdWN0aW9uOyAvLy9cblxuICAgICAgICByZXR1cm4gZGVkdWN0aW9uLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHN0YXRlbWVudFVuaWZpZXMpID0+IHtcbiAgICAgICAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgICAgICAgZGVkdWN0aW9uVW5pZmllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGRlZHVjdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGRlZHVjdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3NwZWNpZmljRGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uIHdpdGggdGhlICcke2dlbmVyYWxEZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24uYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihkZWR1Y3Rpb25VbmlmaWVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeVN1cHBvc2l0aW9uKHNwZWNpZmljU3VwcG9zaXRpb24sIGdlbmVyYWxTdXBwb3NpdGlvbiwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBzdXBwb3NpdGlvblVuaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGdlbmVyYWxTdXBwb3NpdGlvblN0cmluZyA9IGdlbmVyYWxTdXBwb3NpdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzcGVjaWZpY1N1cHBvc2l0aW9uU3RyaW5nID0gc3BlY2lmaWNTdXBwb3NpdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzcGVjaWZpY1N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7Z2VuZXJhbFN1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24uLi5gKTtcblxuICAgIGNvbnN0IHNwZWNpZmljU3VwcG9zaXRpb25Db250ZXh0ID0gc3BlY2lmaWNTdXBwb3NpdGlvbi5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ2VuZXJhbFN1cHBvc2l0aW9uQ29udGV4dCA9IGdlbmVyYWxTdXBwb3NpdGlvbi5nZXRDb250ZXh0KCksXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gc3BlY2lmaWNTdXBwb3NpdGlvbkNvbnRleHQsICAvLy9cbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGdlbmVyYWxTdXBwb3NpdGlvbkNvbnRleHQ7IC8vL1xuXG4gICAgcmV0dXJuIGpvaW4oKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHNwZWNpZmljU3VwcG9zaXRpb24uZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgICAgIHN1cHBvc2l0aW9uID0gZ2VuZXJhbFN1cHBvc2l0aW9uOyAvLy9cblxuICAgICAgICByZXR1cm4gc3VwcG9zaXRpb24udW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3RhdGVtZW50VW5pZmllcykgPT4ge1xuICAgICAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgICBzdXBwb3NpdGlvblVuaWZpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdXBwb3NpdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1cHBvc2l0aW9uVW5pZmllcykge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3BlY2lmaWNTdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uIHdpdGggdGhlICcke2dlbmVyYWxTdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLmApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VwcG9zaXRpb25VbmlmaWVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgc3VwcG9zaXRpb25zVW5pZnkgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNwZWNpZmljU3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zLCAgLy8vXG4gICAgICAgICAgc3BlY2lmaWNTdXBwb3NpdGlvbnNMZW5ndGggPSBzcGVjaWZpY1N1cHBvc2l0aW9ucy5sZW5ndGg7XG5cbiAgICBzdXBwb3NpdGlvbnMgPSB0aGlzLmdldFN1cHBvc2l0aW9ucygpO1xuXG4gICAgY29uc3QgZ2VuZXJhbFN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9ucywgLy8vXG4gICAgICAgICAgZ2VuZXJhbFN1cHBvc2l0aW9uc0xlbmd0aCA9IGdlbmVyYWxTdXBwb3NpdGlvbnMubGVuZ3RoO1xuXG4gICAgaWYgKGdlbmVyYWxTdXBwb3NpdGlvbnNMZW5ndGggIT09IHNwZWNpZmljU3VwcG9zaXRpb25zTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cHBvc2l0aW9uc1VuaWZ5KTtcbiAgICB9XG5cbiAgICBsZXQgaW5kZXggPSBzcGVjaWZpY1N1cHBvc2l0aW9uc0xlbmd0aDtcblxuICAgIHJldHVybiBiYWNrd2FyZHNFdmVyeShnZW5lcmFsU3VwcG9zaXRpb25zLCAoZ2VuZXJhbFN1cHBvc2l0aW9uLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIGluZGV4LS07XG5cbiAgICAgIGNvbnN0IHNwZWNpZmljU3VwcG9zaXRpb24gPSBzcGVjaWZpY1N1cHBvc2l0aW9uc1tpbmRleF07XG5cbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VwcG9zaXRpb24oc3BlY2lmaWNTdXBwb3NpdGlvbiwgZ2VuZXJhbFN1cHBvc2l0aW9uLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0sIGNvbnRpbnVhdGlvbik7XG4gIH1cblxuICB1bmlmeVNpZ25hdHVyZUFzc2VydGlvbihzaWduYXR1cmVBc3NlcnRpb24sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgc2lnbmF0dXJlQXNzZXJ0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgYXhpb21TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSBzaWduYXR1cmVBc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbiB3aXRoIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLi4uYCk7XG5cbiAgICBjb25zdCB0ZXJtcyA9IHNpZ25hdHVyZUFzc2VydGlvbi5nZXRUZXJtcygpLFxuICAgICAgICAgIHNpZ25hdHVyZSA9IHRoaXMuZ2V0U2lnbmF0dXJlKCk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlLnVuaWZ5VGVybXModGVybXMsIGNvbnRleHQsICh0ZXJtc1VuaWZ5KSA9PiB7XG4gICAgICBpZiAodGVybXNVbmlmeSkge1xuICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25VbmlmaWVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hdHVyZUFzc2VydGlvblVuaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbiB3aXRoIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHNpZ25hdHVyZUFzc2VydGlvblVuaWZpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkF4aW9tXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHsgcmV0dXJuIENsYWltLmZyb21KU09OKEF4aW9tLCBqc29uLCBjb250ZXh0KTsgfVxufSk7XG4iXSwibmFtZXMiOlsiYnJlYWthYmxlIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImN1dCIsImFsbCIsImlzb2xhdGUiLCJiYWNrd2FyZHNFdmVyeSIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsImRlZmluZSIsIkF4aW9tIiwiQ2xhaW0iLCJnZXRBeGlvbU5vZGUiLCJub2RlIiwiZ2V0Tm9kZSIsImF4aW9tTm9kZSIsImlzU2F0aXNmaWFibGUiLCJzaWduYXR1cmUiLCJnZXRTaWduYXR1cmUiLCJzYXRpc2ZpYWJsZSIsInZlcmlmeSIsImNvbnRleHQiLCJmb3J3YXJkIiwiYmFjayIsImF4aW9tU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJlbmNsb3NlIiwidmVyaWZ5UHJvb2YiLCJiaW5kIiwidmVyaWZ5TGFiZWxzIiwidmVyaWZ5U2lnbmF0dXJlIiwidmVyaWZ5RGVkdWN0aW9uIiwidmVyaWZ5U3VwcG9zaXRpb25zIiwiYXhpb20iLCJhZGRBeGlvbSIsImRlYnVnIiwiZXhjZXB0aW9uIiwidW5pZnlUZXJtcyIsInRlcm1zIiwicXVvdGVkIiwidGVybXNTdHJpbmciLCJ0ZXJtc1N0cmluZ0Zyb21UZXJtcyIsInRlcm1zVW5pZnkiLCJjb250aW51YXRpb24iLCJ1bmlmeUNsYWltIiwiY2xhaW0iLCJjbGFpbVVuaWZpZXMiLCJjbGFpbVN0cmluZyIsInJlY29uY2lsZSIsImRlZHVjdGlvbiIsImdldERlZHVjdGlvbiIsInVuaWZ5RGVkdWN0aW9uIiwiZGVkdWN0aW9uVW5pZmllcyIsInN1cHBvc2l0aW9ucyIsImdldFN1cHBvc2l0aW9ucyIsInVuaWZ5U3VwcG9zaXRpb25zIiwic3VwcG9zaXRpb25zVW5pZnkiLCJjb21taXQiLCJnZW5lcmFsRGVkdWN0aW9uIiwic3BlY2lmaWNEZWR1Y3Rpb24iLCJnZW5lcmFsRGVkdWN0aW9uU3RyaW5nIiwic3BlY2lmaWNEZWR1Y3Rpb25TdHJpbmciLCJzcGVjaWZpY0RlZHVjdGlvbkNvbnRleHQiLCJnZXRDb250ZXh0IiwiZ2VuZXJhbERlZHVjdGlvbkNvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJnZW5lcmFsQ29udGV4dCIsImpvaW4iLCJzdGF0ZW1lbnQiLCJnZXRTdGF0ZW1lbnQiLCJ1bmlmeVN0YXRlbWVudCIsInN0YXRlbWVudFVuaWZpZXMiLCJ1bmlmeVN1cHBvc2l0aW9uIiwic3BlY2lmaWNTdXBwb3NpdGlvbiIsImdlbmVyYWxTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uVW5pZmllcyIsImdlbmVyYWxTdXBwb3NpdGlvblN0cmluZyIsInNwZWNpZmljU3VwcG9zaXRpb25TdHJpbmciLCJzcGVjaWZpY1N1cHBvc2l0aW9uQ29udGV4dCIsImdlbmVyYWxTdXBwb3NpdGlvbkNvbnRleHQiLCJzdXBwb3NpdGlvbiIsInNwZWNpZmljU3VwcG9zaXRpb25zIiwic3BlY2lmaWNTdXBwb3NpdGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJnZW5lcmFsU3VwcG9zaXRpb25zIiwiZ2VuZXJhbFN1cHBvc2l0aW9uc0xlbmd0aCIsImluZGV4IiwidW5pZnlTaWduYXR1cmVBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb25VbmlmaWVzIiwic2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0VGVybXMiLCJuYW1lIiwiZnJvbUpTT04iLCJqc29uIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFhQTs7O2VBQUE7OztnQ0FYMkQ7OERBRXpDOzBCQUVLO3dCQUNjO3lCQUNJOzs7Ozs7QUFFekMsTUFBTSxFQUFFQSxTQUFTLEVBQUUsR0FBR0MsbUNBQW1CLEVBQ25DLEVBQUVDLEdBQUcsRUFBRUMsR0FBRyxF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
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2NsYWltL2F4aW9tLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBDbGFpbSBmcm9tIFwiLi4vY2xhaW1cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyB0ZXJtc1N0cmluZ0Zyb21UZXJtcyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBqb2luLCBlbmNsb3NlLCByZWNvbmNpbGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBicmVha2FibGUgfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXMsXG4gICAgICB7IGN1dCwgYWxsLCBpc29sYXRlLCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQXhpb20gZXh0ZW5kcyBDbGFpbSB7XG4gIGdldEF4aW9tTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgYXhpb21Ob2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gYXhpb21Ob2RlO1xuICB9XG5cbiAgaXNTYXRpc2ZpYWJsZSgpIHtcbiAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLmdldFNpZ25hdHVyZSgpLFxuICAgICAgICAgIHNhdGlzZmlhYmxlID0gKHNpZ25hdHVyZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc2F0aXNmaWFibGU7XG4gIH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBmb3J3YXJkID0gY3V0KGZvcndhcmQsIGJhY2spOyAvLy9cblxuICAgIGNvbnN0IGF4aW9tU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLi4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgdmVyaWZ5UHJvb2YgPSB0aGlzLnZlcmlmeVByb29mLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeUxhYmVscyA9IHRoaXMudmVyaWZ5TGFiZWxzLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeVNpZ25hdHVyZSA9IHRoaXMudmVyaWZ5U2lnbmF0dXJlLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeURlZHVjdGlvbiA9IHRoaXMudmVyaWZ5RGVkdWN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeVN1cHBvc2l0aW9ucyA9IHRoaXMudmVyaWZ5U3VwcG9zaXRpb25zLmJpbmQodGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGFsbChbXG4gICAgICAgICAgdmVyaWZ5TGFiZWxzLFxuICAgICAgICAgIHZlcmlmeVNpZ25hdHVyZSxcbiAgICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMsXG4gICAgICAgICAgdmVyaWZ5RGVkdWN0aW9uLFxuICAgICAgICAgIHZlcmlmeVByb29mXG4gICAgICAgIF0sIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IGF4aW9tID0gdGhpczsgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXhpb20oYXhpb20pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICByZXR1cm4gYmFjayhleGNlcHRpb24pO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH0pO1xuICB9KTtcblxuICBhcHBseSA9IGJyZWFrYWJsZShmdW5jdGlvbiAoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgZm9yd2FyZCA9IGN1dChmb3J3YXJkLCBiYWNrKTsgLy8vXG5cbiAgICBjb25zdCBheGlvbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYEFwcGx5aW5nIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLi4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCBhcHBseURlZHVjdGlvbiA9IHRoaXMuYXBwbHlEZWR1Y3Rpb24uYmluZCh0aGlzKSxcbiAgICAgICAgYXBwbHlTdXBwb3NpdGlvbnMgPSB0aGlzLmFwcGx5U3VwcG9zaXRpb25zLmJpbmQodGhpcyk7XG5cbiAgICAgIHJldHVybiByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgcmV0dXJuIGFsbChbXG4gICAgICAgICAgYXBwbHlEZWR1Y3Rpb24sXG4gICAgICAgICAgYXBwbHlTdXBwb3NpdGlvbnNcbiAgICAgICAgXSwgc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCAoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCA9IGNvbnRleHQuYXJlQ29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCgpO1xuXG4gICAgICAgICAgaWYgKGNvbXBsZXhTdWJzdGl0dXRpb25zVW5zb2x2ZWQpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYFRoZXJlIGFyZSB1bnNvbHZlZCBjb21wbGV4IHN1YnN0aXR1dGlvbnMuYCk7XG5cbiAgICAgICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgY29udGV4dClcbiAgICB9LCBzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIChzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmFwcGxpZWQgdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIChleGNlcHRpb24pID0+IHtcbiAgICAgIGlmIChleGNlcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC50cmFjZShgVW5hYmxlIHRvIGFwcGx5IHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH0pO1xuICB9KTtcblxuICB2ZXJpZnlTaWduYXR1cmUoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHNhdGlzZmlhYmxlID0gdGhpcy5pc1NhdGlzZmlhYmxlKCk7XG5cbiAgICBpZiAoIXNhdGlzZmlhYmxlKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLmdldFNpZ25hdHVyZSgpLFxuICAgICAgICAgIGF4aW9tU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20ncyBzaWduYXR1cmUuLi5gKTtcblxuICAgIHJldHVybiBzaWduYXR1cmUudmVyaWZ5KGNvbnRleHQsIChiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi52ZXJpZmllZCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbSdzIHNpZ25hdHVyZS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeVRlcm1zKHRlcm1zLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgcXVvdGVkID0gdHJ1ZSxcbiAgICAgICAgICB0ZXJtc1N0cmluZyA9IHRlcm1zU3RyaW5nRnJvbVRlcm1zKHRlcm1zLCBxdW90ZWQpLFxuICAgICAgICAgIGF4aW9tU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJHt0ZXJtc1N0cmluZ30gdGVybXMgd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS4uLmApO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gdGhpcy5nZXRTaWduYXR1cmUoKTtcblxuICAgIHJldHVybiBzaWduYXR1cmUudW5pZnlUZXJtcyh0ZXJtcywgY29udGV4dCwgKHRlcm1zVW5pZnkpID0+IHtcbiAgICAgIGlmICh0ZXJtc1VuaWZ5KSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICR7dGVybXNTdHJpbmd9IHRlcm1zIHdpdGggdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20uLi5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0ZXJtc1VuaWZ5KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5Q2xhaW0oY2xhaW0sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgY2xhaW1VbmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBheGlvbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIGNsYWltU3RyaW5nID0gY2xhaW0uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSB3aXRoIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLi4uYCk7XG5cbiAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBkZWR1Y3Rpb24gPSBjbGFpbS5nZXREZWR1Y3Rpb24oKTtcblxuICAgICAgcmV0dXJuIHRoaXMudW5pZnlEZWR1Y3Rpb24oZGVkdWN0aW9uLCBjb250ZXh0LCAoZGVkdWN0aW9uVW5pZmllcykgPT4ge1xuICAgICAgICBpZiAoIWRlZHVjdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGNsYWltVW5pZmllcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdXBwb3NpdGlvbnMgPSBjbGFpbS5nZXRTdXBwb3NpdGlvbnMoKTtcblxuICAgICAgICByZXR1cm4gdGhpcy51bmlmeVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMsIGNvbnRleHQsIChzdXBwb3NpdGlvbnNVbmlmeSkgPT4ge1xuICAgICAgICAgIGlmIChzdXBwb3NpdGlvbnNVbmlmeSkge1xuICAgICAgICAgICAgY2xhaW1VbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY2xhaW1VbmlmaWVzKSB7XG4gICAgICAgICAgICBjb250ZXh0LmNvbW1pdCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjbGFpbVVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0gd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGNsYWltVW5pZmllcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeURlZHVjdGlvbihkZWR1Y3Rpb24sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgZGVkdWN0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgZ2VuZXJhbERlZHVjdGlvbiA9IHRoaXMuZ2V0RGVkdWN0aW9uKCksIC8vL1xuICAgICAgICAgIHNwZWNpZmljRGVkdWN0aW9uID0gZGVkdWN0aW9uLCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbERlZHVjdGlvblN0cmluZyA9IGdlbmVyYWxEZWR1Y3Rpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3BlY2lmaWNEZWR1Y3Rpb25TdHJpbmcgPSBzcGVjaWZpY0RlZHVjdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzcGVjaWZpY0RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbiB3aXRoIHRoZSAnJHtnZW5lcmFsRGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzcGVjaWZpY0RlZHVjdGlvbkNvbnRleHQgPSBzcGVjaWZpY0RlZHVjdGlvbi5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ2VuZXJhbERlZHVjdGlvbkNvbnRleHQgPSBnZW5lcmFsRGVkdWN0aW9uLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBzcGVjaWZpY0RlZHVjdGlvbkNvbnRleHQsICAvLy9cbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGdlbmVyYWxEZWR1Y3Rpb25Db250ZXh0OyAvLy9cblxuICAgIHJldHVybiBqb2luKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBzdGF0ZW1lbnQgPSBzcGVjaWZpY0RlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKTtcblxuICAgICAgICBkZWR1Y3Rpb24gPSBnZW5lcmFsRGVkdWN0aW9uOyAvLy9cblxuICAgICAgICByZXR1cm4gZGVkdWN0aW9uLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHN0YXRlbWVudFVuaWZpZXMpID0+IHtcbiAgICAgICAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgICAgICAgZGVkdWN0aW9uVW5pZmllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGRlZHVjdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGRlZHVjdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3NwZWNpZmljRGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uIHdpdGggdGhlICcke2dlbmVyYWxEZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24uYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihkZWR1Y3Rpb25VbmlmaWVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeVN1cHBvc2l0aW9uKHNwZWNpZmljU3VwcG9zaXRpb24sIGdlbmVyYWxTdXBwb3NpdGlvbiwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBzdXBwb3NpdGlvblVuaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGdlbmVyYWxTdXBwb3NpdGlvblN0cmluZyA9IGdlbmVyYWxTdXBwb3NpdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzcGVjaWZpY1N1cHBvc2l0aW9uU3RyaW5nID0gc3BlY2lmaWNTdXBwb3NpdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzcGVjaWZpY1N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7Z2VuZXJhbFN1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24uLi5gKTtcblxuICAgIGNvbnN0IHNwZWNpZmljU3VwcG9zaXRpb25Db250ZXh0ID0gc3BlY2lmaWNTdXBwb3NpdGlvbi5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ2VuZXJhbFN1cHBvc2l0aW9uQ29udGV4dCA9IGdlbmVyYWxTdXBwb3NpdGlvbi5nZXRDb250ZXh0KCksXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gc3BlY2lmaWNTdXBwb3NpdGlvbkNvbnRleHQsICAvLy9cbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGdlbmVyYWxTdXBwb3NpdGlvbkNvbnRleHQ7IC8vL1xuXG4gICAgcmV0dXJuIGpvaW4oKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHNwZWNpZmljU3VwcG9zaXRpb24uZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgICAgIHN1cHBvc2l0aW9uID0gZ2VuZXJhbFN1cHBvc2l0aW9uOyAvLy9cblxuICAgICAgICByZXR1cm4gc3VwcG9zaXRpb24udW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3RhdGVtZW50VW5pZmllcykgPT4ge1xuICAgICAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgICBzdXBwb3NpdGlvblVuaWZpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdXBwb3NpdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1cHBvc2l0aW9uVW5pZmllcykge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3BlY2lmaWNTdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uIHdpdGggdGhlICcke2dlbmVyYWxTdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLmApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VwcG9zaXRpb25VbmlmaWVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgc3VwcG9zaXRpb25zVW5pZnkgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNwZWNpZmljU3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zLCAgLy8vXG4gICAgICAgICAgc3BlY2lmaWNTdXBwb3NpdGlvbnNMZW5ndGggPSBzcGVjaWZpY1N1cHBvc2l0aW9ucy5sZW5ndGg7XG5cbiAgICBzdXBwb3NpdGlvbnMgPSB0aGlzLmdldFN1cHBvc2l0aW9ucygpO1xuXG4gICAgY29uc3QgZ2VuZXJhbFN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9ucywgLy8vXG4gICAgICAgICAgZ2VuZXJhbFN1cHBvc2l0aW9uc0xlbmd0aCA9IGdlbmVyYWxTdXBwb3NpdGlvbnMubGVuZ3RoO1xuXG4gICAgaWYgKGdlbmVyYWxTdXBwb3NpdGlvbnNMZW5ndGggIT09IHNwZWNpZmljU3VwcG9zaXRpb25zTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cHBvc2l0aW9uc1VuaWZ5KTtcbiAgICB9XG5cbiAgICBsZXQgaW5kZXggPSBzcGVjaWZpY1N1cHBvc2l0aW9uc0xlbmd0aDtcblxuICAgIHJldHVybiBiYWNrd2FyZHNFdmVyeShnZW5lcmFsU3VwcG9zaXRpb25zLCAoZ2VuZXJhbFN1cHBvc2l0aW9uLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIGluZGV4LS07XG5cbiAgICAgIGNvbnN0IHNwZWNpZmljU3VwcG9zaXRpb24gPSBzcGVjaWZpY1N1cHBvc2l0aW9uc1tpbmRleF07XG5cbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VwcG9zaXRpb24oc3BlY2lmaWNTdXBwb3NpdGlvbiwgZ2VuZXJhbFN1cHBvc2l0aW9uLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0sIGNvbnRpbnVhdGlvbik7XG4gIH1cblxuICB1bmlmeVNpZ25hdHVyZUFzc2VydGlvbihzaWduYXR1cmVBc3NlcnRpb24sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgc2lnbmF0dXJlQXNzZXJ0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgYXhpb21TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSBzaWduYXR1cmVBc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbiB3aXRoIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLi4uYCk7XG5cbiAgICBjb25zdCB0ZXJtcyA9IHNpZ25hdHVyZUFzc2VydGlvbi5nZXRUZXJtcygpLFxuICAgICAgICAgIHNpZ25hdHVyZSA9IHRoaXMuZ2V0U2lnbmF0dXJlKCk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlLnVuaWZ5VGVybXModGVybXMsIGNvbnRleHQsICh0ZXJtc1VuaWZ5KSA9PiB7XG4gICAgICBpZiAodGVybXNVbmlmeSkge1xuICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25VbmlmaWVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hdHVyZUFzc2VydGlvblVuaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbiB3aXRoIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHNpZ25hdHVyZUFzc2VydGlvblVuaWZpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkF4aW9tXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHsgcmV0dXJuIENsYWltLmZyb21KU09OKEF4aW9tLCBqc29uLCBjb250ZXh0KTsgfVxufSk7XG4iXSwibmFtZXMiOlsiYnJlYWthYmxlIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImN1dCIsImFsbCIsImlzb2xhdGUiLCJiYWNrd2FyZHNFdmVyeSIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsImRlZmluZSIsIkF4aW9tIiwiQ2xhaW0iLCJnZXRBeGlvbU5vZGUiLCJub2RlIiwiZ2V0Tm9kZSIsImF4aW9tTm9kZSIsImlzU2F0aXNmaWFibGUiLCJzaWduYXR1cmUiLCJnZXRTaWduYXR1cmUiLCJzYXRpc2ZpYWJsZSIsInZlcmlmeSIsImNvbnRleHQiLCJmb3J3YXJkIiwiYmFjayIsImF4aW9tU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJlbmNsb3NlIiwidmVyaWZ5UHJvb2YiLCJiaW5kIiwidmVyaWZ5TGFiZWxzIiwidmVyaWZ5U2lnbmF0dXJlIiwidmVyaWZ5RGVkdWN0aW9uIiwidmVyaWZ5U3VwcG9zaXRpb25zIiwiYXhpb20iLCJhZGRBeGlvbSIsImRlYnVnIiwiZXhjZXB0aW9uIiwiYXBwbHkiLCJzdGVwIiwiZmFjdE9yU3VicHJvb2ZzIiwiYXBwbHlEZWR1Y3Rpb24iLCJhcHBseVN1cHBvc2l0aW9ucyIsInJlY29uY2lsZSIsImNvbXBsZXhTdWJzdGl0dXRpb25zVW5zb2x2ZWQiLCJhcmVDb21wbGV4U3Vic3RpdHV0aW9uc1Vuc29sdmVkIiwidW5pZnlUZXJtcyIsInRlcm1zIiwicXVvdGVkIiwidGVybXNTdHJpbmciLCJ0ZXJtc1N0cmluZ0Zyb21UZXJtcyIsInRlcm1zVW5pZnkiLCJjb250aW51YXRpb24iLCJ1bmlmeUNsYWltIiwiY2xhaW0iLCJjbGFpbVVuaWZpZXMiLCJjbGFpbVN0cmluZyIsImRlZHVjdGlvbiIsImdldERlZHVjdGlvbiIsInVuaWZ5RGVkdWN0aW9uIiwiZGVkdWN0aW9uVW5pZmllcyIsInN1cHBvc2l0aW9ucyIsImdldFN1cHBvc2l0aW9ucyIsInVuaWZ5U3VwcG9zaXRpb25zIiwic3VwcG9zaXRpb25zVW5pZnkiLCJjb21taXQiLCJnZW5lcmFsRGVkdWN0aW9uIiwic3BlY2lmaWNEZWR1Y3Rpb24iLCJnZW5lcmFsRGVkdWN0aW9uU3RyaW5nIiwic3BlY2lmaWNEZWR1Y3Rpb25TdHJpbmciLCJzcGVjaWZpY0RlZHVjdGlvbkNvbnRleHQiLCJnZXRDb250ZXh0IiwiZ2VuZXJhbERlZHVjdGlvbkNvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJnZW5lcmFsQ29udGV4dCIsImpvaW4iLCJzdGF0ZW1lbnQiLCJnZXRTdGF0ZW1lbnQiLCJ1bmlmeVN0YXRlbWVudCIsInN0YXRlbWVudFVuaWZpZXMiLCJ1bmlmeVN1cHBvc2l0aW9uIiwic3BlY2lmaWNTdXBwb3NpdGlvbiIsImdlbmVyYWxTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uVW5pZmllcyIsImdlbmVyYWxTdXBwb3NpdGlvblN0cmluZyIsInNwZWNpZmljU3VwcG9zaXRpb25TdHJpbmciLCJzcGVjaWZpY1N1cHBvc2l0aW9uQ29udGV4dCIsImdlbmVyYWxTdXBwb3NpdGlvbkNvbnRleHQiLCJzdXBwb3NpdGlvbiIsInNwZWNpZmljU3VwcG9zaXRpb25zIiwic3BlY2lmaWNTdXBwb3NpdGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJnZW5lcmFsU3VwcG9zaXRpb25zIiwiZ2VuZXJhbFN1cHBvc2l0aW9uc0xlbmd0aCIsImluZGV4IiwidW5pZnlTaWduYXR1cmVBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb25VbmlmaWVzIiwic2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0VGVybXMiLCJuYW1lIiwiZnJvbUpTT04iLCJqc29uIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFhQTs7O2VBQUE7OztnQ0FYMkQ7OERBRXpDOzBCQUVLO3dCQUNjO3lCQUNJOzs7Ozs7QUFFekMsTUFBTSxFQUFFQSxTQUFTLEVBQUUsR0FBR0MsbUNBQW1CLEVBQ25DLEVBQUVDLEdBQUcsRUFBRUMsR0FBRyxFQUFFQyxPQUFPLEVBQUVDLGNBQWMsRUFBRSxHQUFHQyxxQ0FBcUI7TUFFbkUsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxjQUFjQyxjQUFLO0lBQzdDQyxlQUFlO1FBQ2IsTUFBTUMsT0FBTyxJQUFJLENBQUNDLE9BQU8sSUFDbkJDLFlBQVlGLE1BQU0sR0FBRztRQUUzQixPQUFPRTtJQUNUO0lBRUFDLGdCQUFnQjtRQUNkLE1BQU1DLFlBQVksSUFBSSxDQUFDQyxZQUFZLElBQzdCQyxjQUFlRixjQUFjO1FBRW5DLE9BQU9FO0lBQ1Q7SUFFQUMsU0FBU2xCLFVBQVUsU0FBVW1CLE9BQU8sRUFBRUMsT0FBTyxFQUFFQyxJQUFJO1FB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
@@ -52,10 +52,40 @@ const _default = (0, _elements.define)(class Conjecture extends _claim.default {
52
52
  return back();
53
53
  });
54
54
  });
55
+ apply = breakable(function(step, factOrSubproofs, context, forward, back) {
56
+ forward = cut(forward, back); ///
57
+ const conjectureString = this.getString(); ///
58
+ context.trace(`Applying the '${conjectureString}' conjecture...`);
59
+ return isolate((step, factOrSubproofs, context, forward, back)=>{
60
+ const applyDeduction = this.applyDeduction.bind(this), applySuppositions = this.applySuppositions.bind(this);
61
+ return reconcile((context)=>{
62
+ return all([
63
+ applyDeduction,
64
+ applySuppositions
65
+ ], step, factOrSubproofs, context, (step, factOrSubproofs, context, back)=>{
66
+ const complexSubstitutionsUnsolved = context.areComplexSubstitutionsUnsolved();
67
+ if (complexSubstitutionsUnsolved) {
68
+ context.debug(`There are unsolved complex substitutions.`);
69
+ return back();
70
+ }
71
+ return forward(back);
72
+ }, back);
73
+ }, context);
74
+ }, step, factOrSubproofs, context, (step, factOrSubproofs, context, back)=>{
75
+ context.debug(`...applied the '${conjectureString}' conjecture.`);
76
+ return forward(context, back);
77
+ }, (exception)=>{
78
+ if (exception) {
79
+ return back(exception);
80
+ }
81
+ context.trace(`Unable to apply the '${conjectureString}' conjecture.`);
82
+ return back();
83
+ });
84
+ });
55
85
  static name = "Conjecture";
56
86
  static fromJSON(json, context) {
57
87
  return _claim.default.fromJSON(Conjecture, json, context);
58
88
  }
59
89
  });
60
90
 
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2NsYWltL2NvbmplY3R1cmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IENsYWltIGZyb20gXCIuLi9jbGFpbVwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGVuY2xvc2UgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBicmVha2FibGUgfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXMsXG4gICAgICB7IGN1dCwgYWxsLCBpc29sYXRlIH0gPSBjb250aW51YXRpb25VdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBDb25qZWN0dXJlIGV4dGVuZHMgQ2xhaW0ge1xuICBnZXRDb25qZWN0dXJlTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgY29uamVjdHVyZU5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gY29uamVjdHVyZU5vZGU7XG4gIH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBmb3J3YXJkID0gY3V0KGZvcndhcmQsIGJhY2spOyAvLy9cblxuICAgIGNvbnN0IGNvbmplY3R1cmVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NvbmplY3R1cmVTdHJpbmd9JyBjb25qZWN0dXJlLi4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgdmVyaWZ5UHJvb2YgPSB0aGlzLnZlcmlmeVByb29mLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeUxhYmVscyA9IHRoaXMudmVyaWZ5TGFiZWxzLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeURlZHVjdGlvbiA9IHRoaXMudmVyaWZ5RGVkdWN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeVN1cHBvc2l0aW9ucyA9IHRoaXMudmVyaWZ5U3VwcG9zaXRpb25zLmJpbmQodGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGFsbChbXG4gICAgICAgICAgdmVyaWZ5TGFiZWxzLFxuICAgICAgICAgIHZlcmlmeVN1cHBvc2l0aW9ucyxcbiAgICAgICAgICB2ZXJpZnlEZWR1Y3Rpb24sXG4gICAgICAgICAgdmVyaWZ5UHJvb2ZcbiAgICAgICAgXSwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICByZXR1cm4gZm9yd2FyZChiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29uc3QgY29uamVjdHVyZSA9IHRoaXM7IC8vL1xuXG4gICAgICBjb250ZXh0LmFkZENvbmplY3R1cmUoY29uamVjdHVyZSk7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjb25qZWN0dXJlU3RyaW5nfScgY29uamVjdHVyZS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICByZXR1cm4gYmFjayhleGNlcHRpb24pO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHtjb25qZWN0dXJlU3RyaW5nfScgY29uamVjdHVyZS5gKTtcblxuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgc3RhdGljIG5hbWUgPSBcIkNvbmplY3R1cmVcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkgeyByZXR1cm4gQ2xhaW0uZnJvbUpTT04oQ29uamVjdHVyZSwganNvbiwgY29udGV4dCk7IH1cbn0pO1xuIl0sIm5hbWVzIjpbImJyZWFrYWJsZSIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJjdXQiLCJhbGwiLCJpc29sYXRlIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiQ29uamVjdHVyZSIsIkNsYWltIiwiZ2V0Q29uamVjdHVyZU5vZGUiLCJub2RlIiwiZ2V0Tm9kZSIsImNvbmplY3R1cmVOb2RlIiwidmVyaWZ5IiwiY29udGV4dCIsImZvcndhcmQiLCJiYWNrIiwiY29uamVjdHVyZVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZW5jbG9zZSIsInZlcmlmeVByb29mIiwiYmluZCIsInZlcmlmeUxhYmVscyIsInZlcmlmeURlZHVjdGlvbiIsInZlcmlmeVN1cHBvc2l0aW9ucyIsImNvbmplY3R1cmUiLCJhZGRDb25qZWN0dXJlIiwiZGVidWciLCJleGNlcHRpb24iLCJuYW1lIiwiZnJvbUpTT04iLCJqc29uIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFZQTs7O2VBQUE7OztnQ0FWMkQ7OERBRXpDOzBCQUVLO3lCQUNDOzs7Ozs7QUFFeEIsTUFBTSxFQUFFQSxTQUFTLEVBQUUsR0FBR0MsbUNBQW1CLEVBQ25DLEVBQUVDLEdBQUcsRUFBRUMsR0FBRyxFQUFFQyxPQUFPLEVBQUUsR0FBR0MscUNBQXFCO01BRW5ELFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsbUJBQW1CQyxjQUFLO0lBQ2xEQyxvQkFBb0I7UUFDbEIsTUFBTUMsT0FBTyxJQUFJLENBQUNDLE9BQU8sSUFDbkJDLGlCQUFpQkYsTUFBTyxHQUFHO1FBRWpDLE9BQU9FO0lBQ1Q7SUFFQUMsU0FBU2IsVUFBVSxTQUFVYyxPQUFPLEVBQUVDLE9BQU8sRUFBRUMsSUFBSTtRQUNqREQsVUFBVWIsSUFBSWEsU0FBU0MsT0FBTyxHQUFHO1FBRWpDLE1BQU1DLG1CQUFtQixJQUFJLENBQUNDLFNBQVMsSUFBSyxHQUFHO1FBRS9DSixRQUFRSyxLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUVGLGlCQUFpQixlQUFlLENBQUM7UUFFakUsT0FBT2IsUUFBUSxDQUFDVSxTQUFTQyxTQUFTQztZQUNoQyxPQUFPSSxJQUFBQSxnQkFBTyxFQUFDLENBQUNOO2dCQUNkLE1BQU1PLGNBQWMsSUFBSSxDQUFDQSxXQUFXLENBQUNDLElBQUksQ0FBQyxJQUFJLEdBQ3hDQyxlQUFlLElBQUksQ0FBQ0EsWUFBWSxDQUFDRCxJQUFJLENBQUMsSUFBSSxHQUMxQ0Usa0JBQWtCLElBQUksQ0FBQ0EsZUFBZSxDQUFDRixJQUFJLENBQUMsSUFBSSxHQUNoREcscUJBQXFCLElBQUksQ0FBQ0Esa0JBQWtCLENBQUNILElBQUksQ0FBQyxJQUFJO2dCQUU1RCxPQUFPbkIsSUFBSTtvQkFDVG9CO29CQUNBRTtvQkFDQUQ7b0JBQ0FIO2lCQUNELEVBQUVQLFNBQVMsQ0FBQ0EsU0FBU0U7b0JBQ3BCLE9BQU9ELFFBQVFDO2dCQUNqQixHQUFHQTtZQUNMLEdBQUdGO1FBQ0wsR0FBR0EsU0FBUyxDQUFDQSxTQUFTRTtZQUNwQixNQUFNVSxhQUFhLElBQUksRUFBRSxHQUFHO1lBRTVCWixRQUFRYSxhQUFhLENBQUNEO1lBRXRCWixRQUFRYyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRVgsaUJBQWlCLGFBQWEsQ0FBQztZQUVqRSxPQUFPRixRQUFRRCxTQUFTRTtRQUMxQixHQUFHLENBQUNhO1lBQ0YsSUFBSUEsV0FBVztnQkFDYixPQUFPYixLQUFLYTtZQUNkO1lBRUFmLFFBQVFLLEtBQUssQ0FBQyxDQUFDLHNCQUFzQixFQUFFRixpQkFBaUIsYUFBYSxDQUFDO1lBRXRFLE9BQU9EO1FBQ1Q7SUFDRixHQUFHO0lBRUgsT0FBT2MsT0FBTyxhQUFhO0lBRTNCLE9BQU9DLFNBQVNDLElBQUksRUFBRWxCLE9BQU8sRUFBRTtRQUFFLE9BQU9OLGNBQUssQ0FBQ3VCLFFBQVEsQ0FBQ3hCLFlBQVl5QixNQUFNbEI7SUFBVTtBQUNyRiJ9
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2NsYWltL2NvbmplY3R1cmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IENsYWltIGZyb20gXCIuLi9jbGFpbVwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGVuY2xvc2UgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBicmVha2FibGUgfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXMsXG4gICAgICB7IGN1dCwgYWxsLCBpc29sYXRlIH0gPSBjb250aW51YXRpb25VdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBDb25qZWN0dXJlIGV4dGVuZHMgQ2xhaW0ge1xuICBnZXRDb25qZWN0dXJlTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgY29uamVjdHVyZU5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gY29uamVjdHVyZU5vZGU7XG4gIH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBmb3J3YXJkID0gY3V0KGZvcndhcmQsIGJhY2spOyAvLy9cblxuICAgIGNvbnN0IGNvbmplY3R1cmVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NvbmplY3R1cmVTdHJpbmd9JyBjb25qZWN0dXJlLi4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgdmVyaWZ5UHJvb2YgPSB0aGlzLnZlcmlmeVByb29mLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeUxhYmVscyA9IHRoaXMudmVyaWZ5TGFiZWxzLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeURlZHVjdGlvbiA9IHRoaXMudmVyaWZ5RGVkdWN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeVN1cHBvc2l0aW9ucyA9IHRoaXMudmVyaWZ5U3VwcG9zaXRpb25zLmJpbmQodGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGFsbChbXG4gICAgICAgICAgdmVyaWZ5TGFiZWxzLFxuICAgICAgICAgIHZlcmlmeVN1cHBvc2l0aW9ucyxcbiAgICAgICAgICB2ZXJpZnlEZWR1Y3Rpb24sXG4gICAgICAgICAgdmVyaWZ5UHJvb2ZcbiAgICAgICAgXSwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICByZXR1cm4gZm9yd2FyZChiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29uc3QgY29uamVjdHVyZSA9IHRoaXM7IC8vL1xuXG4gICAgICBjb250ZXh0LmFkZENvbmplY3R1cmUoY29uamVjdHVyZSk7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjb25qZWN0dXJlU3RyaW5nfScgY29uamVjdHVyZS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICByZXR1cm4gYmFjayhleGNlcHRpb24pO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHtjb25qZWN0dXJlU3RyaW5nfScgY29uamVjdHVyZS5gKTtcblxuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgYXBwbHkgPSBicmVha2FibGUoZnVuY3Rpb24gKHN0ZXAsIGZhY3RPclN1YnByb29mcywgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGZvcndhcmQgPSBjdXQoZm9yd2FyZCwgYmFjayk7IC8vL1xuXG4gICAgY29uc3QgY29uamVjdHVyZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYEFwcGx5aW5nIHRoZSAnJHtjb25qZWN0dXJlU3RyaW5nfScgY29uamVjdHVyZS4uLmApO1xuXG4gICAgcmV0dXJuIGlzb2xhdGUoKHN0ZXAsIGZhY3RPclN1YnByb29mcywgY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgY29uc3QgYXBwbHlEZWR1Y3Rpb24gPSB0aGlzLmFwcGx5RGVkdWN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgIGFwcGx5U3VwcG9zaXRpb25zID0gdGhpcy5hcHBseVN1cHBvc2l0aW9ucy5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiBhbGwoW1xuICAgICAgICAgIGFwcGx5RGVkdWN0aW9uLFxuICAgICAgICAgIGFwcGx5U3VwcG9zaXRpb25zXG4gICAgICAgIF0sIHN0ZXAsIGZhY3RPclN1YnByb29mcywgY29udGV4dCwgKHN0ZXAsIGZhY3RPclN1YnByb29mcywgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbXBsZXhTdWJzdGl0dXRpb25zVW5zb2x2ZWQgPSBjb250ZXh0LmFyZUNvbXBsZXhTdWJzdGl0dXRpb25zVW5zb2x2ZWQoKTtcblxuICAgICAgICAgIGlmIChjb21wbGV4U3Vic3RpdHV0aW9uc1Vuc29sdmVkKSB7XG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKGBUaGVyZSBhcmUgdW5zb2x2ZWQgY29tcGxleCBzdWJzdGl0dXRpb25zLmApO1xuXG4gICAgICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIGNvbnRleHQpXG4gICAgfSwgc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCAoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5hcHBsaWVkIHRoZSAnJHtjb25qZWN0dXJlU3RyaW5nfScgY29uamVjdHVyZS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICByZXR1cm4gYmFjayhleGNlcHRpb24pO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmFibGUgdG8gYXBwbHkgdGhlICcke2NvbmplY3R1cmVTdHJpbmd9JyBjb25qZWN0dXJlLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH0pO1xuICB9KTtcblxuICBzdGF0aWMgbmFtZSA9IFwiQ29uamVjdHVyZVwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7IHJldHVybiBDbGFpbS5mcm9tSlNPTihDb25qZWN0dXJlLCBqc29uLCBjb250ZXh0KTsgfVxufSk7XG4iXSwibmFtZXMiOlsiYnJlYWthYmxlIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImN1dCIsImFsbCIsImlzb2xhdGUiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJkZWZpbmUiLCJDb25qZWN0dXJlIiwiQ2xhaW0iLCJnZXRDb25qZWN0dXJlTm9kZSIsIm5vZGUiLCJnZXROb2RlIiwiY29uamVjdHVyZU5vZGUiLCJ2ZXJpZnkiLCJjb250ZXh0IiwiZm9yd2FyZCIsImJhY2siLCJjb25qZWN0dXJlU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJlbmNsb3NlIiwidmVyaWZ5UHJvb2YiLCJiaW5kIiwidmVyaWZ5TGFiZWxzIiwidmVyaWZ5RGVkdWN0aW9uIiwidmVyaWZ5U3VwcG9zaXRpb25zIiwiY29uamVjdHVyZSIsImFkZENvbmplY3R1cmUiLCJkZWJ1ZyIsImV4Y2VwdGlvbiIsImFwcGx5Iiwic3RlcCIsImZhY3RPclN1YnByb29mcyIsImFwcGx5RGVkdWN0aW9uIiwiYXBwbHlTdXBwb3NpdGlvbnMiLCJyZWNvbmNpbGUiLCJjb21wbGV4U3Vic3RpdHV0aW9uc1Vuc29sdmVkIiwiYXJlQ29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVlBOzs7ZUFBQTs7O2dDQVYyRDs4REFFekM7MEJBRUs7eUJBQ0M7Ozs7OztBQUV4QixNQUFNLEVBQUVBLFNBQVMsRUFBRSxHQUFHQyxtQ0FBbUIsRUFDbkMsRUFBRUMsR0FBRyxFQUFFQyxHQUFHLEVBQUVDLE9BQU8sRUFBRSxHQUFHQyxxQ0FBcUI7TUFFbkQsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxtQkFBbUJDLGNBQUs7SUFDbERDLG9CQUFvQjtRQUNsQixNQUFNQyxPQUFPLElBQUksQ0FBQ0MsT0FBTyxJQUNuQkMsaUJBQWlCRixNQUFPLEdBQUc7UUFFakMsT0FBT0U7SUFDVDtJQUVBQyxTQUFTYixVQUFVLFNBQVVjLE9BQU8sRUFBRUMsT0FBTyxFQUFFQyxJQUFJO1FBQ2pERCxVQUFVYixJQUFJYSxTQUFTQyxPQUFPLEdBQUc7UUFFakMsTUFBTUMsbUJBQW1CLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFL0NKLFFBQVFLLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRUYsaUJBQWlCLGVBQWUsQ0FBQztRQUVqRSxPQUFPYixRQUFRLENBQUNVLFNBQVNDLFNBQVNDO1lBQ2hDLE9BQU9JLElB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
@@ -52,7 +52,37 @@ const _default = (0, _elements.define)(class Lemma extends _claim.default {
52
52
  return back();
53
53
  });
54
54
  });
55
+ apply = breakable(function(step, factOrSubproofs, context, forward, back) {
56
+ forward = cut(forward, back); ///
57
+ const lemmaString = this.getString(); ///
58
+ context.trace(`Applying the '${lemmaString}' lemma...`);
59
+ return isolate((step, factOrSubproofs, context, forward, back)=>{
60
+ const applyDeduction = this.applyDeduction.bind(this), applySuppositions = this.applySuppositions.bind(this);
61
+ return reconcile((context)=>{
62
+ return all([
63
+ applyDeduction,
64
+ applySuppositions
65
+ ], step, factOrSubproofs, context, (step, factOrSubproofs, context, back)=>{
66
+ const complexSubstitutionsUnsolved = context.areComplexSubstitutionsUnsolved();
67
+ if (complexSubstitutionsUnsolved) {
68
+ context.debug(`There are unsolved complex substitutions.`);
69
+ return back();
70
+ }
71
+ return forward(back);
72
+ }, back);
73
+ }, context);
74
+ }, step, factOrSubproofs, context, (step, factOrSubproofs, context, back)=>{
75
+ context.debug(`...applied the '${lemmaString}' lemma.`);
76
+ return forward(context, back);
77
+ }, (exception)=>{
78
+ if (exception) {
79
+ return back(exception);
80
+ }
81
+ context.trace(`Unable to apply the '${lemmaString}' lemma.`);
82
+ return back();
83
+ });
84
+ });
55
85
  static name = "Lemma";
56
86
  });
57
87
 
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2NsYWltL2xlbW1hLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBDbGFpbSBmcm9tIFwiLi4vY2xhaW1cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBlbmNsb3NlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5cbmNvbnN0IHsgYnJlYWthYmxlIH0gPSBicmVha1BvaW50VXRpbGl0aWVzLFxuICAgICAgeyBjdXQsIGFsbCwgaXNvbGF0ZSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgTGVtbWEgZXh0ZW5kcyBDbGFpbSB7XG4gIGdldExlbW1hTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgbGVtbWFOb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gbGVtbWFOb2RlO1xuICB9XG5cbiAgdmVyaWZ5ID0gYnJlYWthYmxlKGZ1bmN0aW9uIChjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgZm9yd2FyZCA9IGN1dChmb3J3YXJkLCBiYWNrKTsgLy8vXG5cbiAgICBjb25zdCBsZW1tYVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7bGVtbWFTdHJpbmd9JyBsZW1tYS4uLmApO1xuXG4gICAgcmV0dXJuIGlzb2xhdGUoKGNvbnRleHQsIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIHJldHVybiBlbmNsb3NlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHZlcmlmeVByb29mID0gdGhpcy52ZXJpZnlQcm9vZi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICB2ZXJpZnlMYWJlbHMgPSB0aGlzLnZlcmlmeUxhYmVscy5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICB2ZXJpZnlEZWR1Y3Rpb24gPSB0aGlzLnZlcmlmeURlZHVjdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMgPSB0aGlzLnZlcmlmeVN1cHBvc2l0aW9ucy5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHJldHVybiBhbGwoW1xuICAgICAgICAgIHZlcmlmeUxhYmVscyxcbiAgICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMsXG4gICAgICAgICAgdmVyaWZ5RGVkdWN0aW9uLFxuICAgICAgICAgIHZlcmlmeVByb29mXG4gICAgICAgIF0sIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IGxlbW1hID0gdGhpczsgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkTGVtbWEobGVtbWEpO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7bGVtbWFTdHJpbmd9JyBsZW1tYS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICByZXR1cm4gYmFjayhleGNlcHRpb24pO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHtsZW1tYVN0cmluZ30nIGxlbW1hLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH0pO1xuICB9KTtcblxuICBzdGF0aWMgbmFtZSA9IFwiTGVtbWFcIjtcbn0pO1xuIl0sIm5hbWVzIjpbImJyZWFrYWJsZSIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJjdXQiLCJhbGwiLCJpc29sYXRlIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiTGVtbWEiLCJDbGFpbSIsImdldExlbW1hTm9kZSIsIm5vZGUiLCJnZXROb2RlIiwibGVtbWFOb2RlIiwidmVyaWZ5IiwiY29udGV4dCIsImZvcndhcmQiLCJiYWNrIiwibGVtbWFTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImVuY2xvc2UiLCJ2ZXJpZnlQcm9vZiIsImJpbmQiLCJ2ZXJpZnlMYWJlbHMiLCJ2ZXJpZnlEZWR1Y3Rpb24iLCJ2ZXJpZnlTdXBwb3NpdGlvbnMiLCJsZW1tYSIsImFkZExlbW1hIiwiZGVidWciLCJleGNlcHRpb24iLCJuYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFZQTs7O2VBQUE7OztnQ0FWMkQ7OERBRXpDOzBCQUVLO3lCQUNDOzs7Ozs7QUFFeEIsTUFBTSxFQUFFQSxTQUFTLEVBQUUsR0FBR0MsbUNBQW1CLEVBQ25DLEVBQUVDLEdBQUcsRUFBRUMsR0FBRyxFQUFFQyxPQUFPLEVBQUUsR0FBR0MscUNBQXFCO01BRW5ELFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsY0FBY0MsY0FBSztJQUM3Q0MsZUFBZTtRQUNiLE1BQU1DLE9BQU8sSUFBSSxDQUFDQyxPQUFPLElBQ25CQyxZQUFZRixNQUFNLEdBQUc7UUFFM0IsT0FBT0U7SUFDVDtJQUVBQyxTQUFTYixVQUFVLFNBQVVjLE9BQU8sRUFBRUMsT0FBTyxFQUFFQyxJQUFJO1FBQ2pERCxVQUFVYixJQUFJYSxTQUFTQyxPQUFPLEdBQUc7UUFFakMsTUFBTUMsY0FBYyxJQUFJLENBQUNDLFNBQVMsSUFBSyxHQUFHO1FBRTFDSixRQUFRSyxLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUVGLFlBQVksVUFBVSxDQUFDO1FBRXZELE9BQU9iLFFBQVEsQ0FBQ1UsU0FBU0MsU0FBU0M7WUFDaEMsT0FBT0ksSUFBQUEsZ0JBQU8sRUFBQyxDQUFDTjtnQkFDZCxNQUFNTyxjQUFjLElBQUksQ0FBQ0EsV0FBVyxDQUFDQyxJQUFJLENBQUMsSUFBSSxHQUN4Q0MsZUFBZSxJQUFJLENBQUNBLFlBQVksQ0FBQ0QsSUFBSSxDQUFDLElBQUksR0FDMUNFLGtCQUFrQixJQUFJLENBQUNBLGVBQWUsQ0FBQ0YsSUFBSSxDQUFDLElBQUksR0FDaERHLHFCQUFxQixJQUFJLENBQUNBLGtCQUFrQixDQUFDSCxJQUFJLENBQUMsSUFBSTtnQkFFNUQsT0FBT25CLElBQUk7b0JBQ1RvQjtvQkFDQUU7b0JBQ0FEO29CQUNBSDtpQkFDRCxFQUFFUCxTQUFTLENBQUNBLFNBQVNFO29CQUNwQixPQUFPRCxRQUFRQztnQkFDakIsR0FBR0E7WUFDTCxHQUFHRjtRQUNMLEdBQUdBLFNBQVMsQ0FBQ0EsU0FBU0U7WUFDcEIsTUFBTVUsUUFBUSxJQUFJLEVBQUUsR0FBRztZQUV2QlosUUFBUWEsUUFBUSxDQUFDRDtZQUVqQlosUUFBUWMsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUVYLFlBQVksUUFBUSxDQUFDO1lBRXZELE9BQU9GLFFBQVFELFNBQVNFO1FBQzFCLEdBQUcsQ0FBQ2E7WUFDRixJQUFJQSxXQUFXO2dCQUNiLE9BQU9iLEtBQUthO1lBQ2Q7WUFFQWYsUUFBUUssS0FBSyxDQUFDLENBQUMsc0JBQXNCLEVBQUVGLFlBQVksUUFBUSxDQUFDO1lBRTVELE9BQU9EO1FBQ1Q7SUFDRixHQUFHO0lBRUgsT0FBT2MsT0FBTyxRQUFRO0FBQ3hCIn0=
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2NsYWltL2xlbW1hLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBDbGFpbSBmcm9tIFwiLi4vY2xhaW1cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBlbmNsb3NlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5cbmNvbnN0IHsgYnJlYWthYmxlIH0gPSBicmVha1BvaW50VXRpbGl0aWVzLFxuICAgICAgeyBjdXQsIGFsbCwgaXNvbGF0ZSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgTGVtbWEgZXh0ZW5kcyBDbGFpbSB7XG4gIGdldExlbW1hTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgbGVtbWFOb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gbGVtbWFOb2RlO1xuICB9XG5cbiAgdmVyaWZ5ID0gYnJlYWthYmxlKGZ1bmN0aW9uIChjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgZm9yd2FyZCA9IGN1dChmb3J3YXJkLCBiYWNrKTsgLy8vXG5cbiAgICBjb25zdCBsZW1tYVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7bGVtbWFTdHJpbmd9JyBsZW1tYS4uLmApO1xuXG4gICAgcmV0dXJuIGlzb2xhdGUoKGNvbnRleHQsIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIHJldHVybiBlbmNsb3NlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHZlcmlmeVByb29mID0gdGhpcy52ZXJpZnlQcm9vZi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICB2ZXJpZnlMYWJlbHMgPSB0aGlzLnZlcmlmeUxhYmVscy5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICB2ZXJpZnlEZWR1Y3Rpb24gPSB0aGlzLnZlcmlmeURlZHVjdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMgPSB0aGlzLnZlcmlmeVN1cHBvc2l0aW9ucy5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHJldHVybiBhbGwoW1xuICAgICAgICAgIHZlcmlmeUxhYmVscyxcbiAgICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMsXG4gICAgICAgICAgdmVyaWZ5RGVkdWN0aW9uLFxuICAgICAgICAgIHZlcmlmeVByb29mXG4gICAgICAgIF0sIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IGxlbW1hID0gdGhpczsgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkTGVtbWEobGVtbWEpO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7bGVtbWFTdHJpbmd9JyBsZW1tYS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICByZXR1cm4gYmFjayhleGNlcHRpb24pO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHtsZW1tYVN0cmluZ30nIGxlbW1hLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH0pO1xuICB9KTtcblxuICBhcHBseSA9IGJyZWFrYWJsZShmdW5jdGlvbiAoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgZm9yd2FyZCA9IGN1dChmb3J3YXJkLCBiYWNrKTsgLy8vXG5cbiAgICBjb25zdCBsZW1tYVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYEFwcGx5aW5nIHRoZSAnJHtsZW1tYVN0cmluZ30nIGxlbW1hLi4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCBhcHBseURlZHVjdGlvbiA9IHRoaXMuYXBwbHlEZWR1Y3Rpb24uYmluZCh0aGlzKSxcbiAgICAgICAgYXBwbHlTdXBwb3NpdGlvbnMgPSB0aGlzLmFwcGx5U3VwcG9zaXRpb25zLmJpbmQodGhpcyk7XG5cbiAgICAgIHJldHVybiByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgcmV0dXJuIGFsbChbXG4gICAgICAgICAgYXBwbHlEZWR1Y3Rpb24sXG4gICAgICAgICAgYXBwbHlTdXBwb3NpdGlvbnNcbiAgICAgICAgXSwgc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCAoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCA9IGNvbnRleHQuYXJlQ29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCgpO1xuXG4gICAgICAgICAgaWYgKGNvbXBsZXhTdWJzdGl0dXRpb25zVW5zb2x2ZWQpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYFRoZXJlIGFyZSB1bnNvbHZlZCBjb21wbGV4IHN1YnN0aXR1dGlvbnMuYCk7XG5cbiAgICAgICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgY29udGV4dClcbiAgICB9LCBzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIChzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmFwcGxpZWQgdGhlICcke2xlbW1hU3RyaW5nfScgbGVtbWEuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIChleGNlcHRpb24pID0+IHtcbiAgICAgIGlmIChleGNlcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC50cmFjZShgVW5hYmxlIHRvIGFwcGx5IHRoZSAnJHtsZW1tYVN0cmluZ30nIGxlbW1hLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH0pO1xuICB9KTtcblxuICBzdGF0aWMgbmFtZSA9IFwiTGVtbWFcIjtcbn0pO1xuIl0sIm5hbWVzIjpbImJyZWFrYWJsZSIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJjdXQiLCJhbGwiLCJpc29sYXRlIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiTGVtbWEiLCJDbGFpbSIsImdldExlbW1hTm9kZSIsIm5vZGUiLCJnZXROb2RlIiwibGVtbWFOb2RlIiwidmVyaWZ5IiwiY29udGV4dCIsImZvcndhcmQiLCJiYWNrIiwibGVtbWFTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImVuY2xvc2UiLCJ2ZXJpZnlQcm9vZiIsImJpbmQiLCJ2ZXJpZnlMYWJlbHMiLCJ2ZXJpZnlEZWR1Y3Rpb24iLCJ2ZXJpZnlTdXBwb3NpdGlvbnMiLCJsZW1tYSIsImFkZExlbW1hIiwiZGVidWciLCJleGNlcHRpb24iLCJhcHBseSIsInN0ZXAiLCJmYWN0T3JTdWJwcm9vZnMiLCJhcHBseURlZHVjdGlvbiIsImFwcGx5U3VwcG9zaXRpb25zIiwicmVjb25jaWxlIiwiY29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCIsImFyZUNvbXBsZXhTdWJzdGl0dXRpb25zVW5zb2x2ZWQiLCJuYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFZQTs7O2VBQUE7OztnQ0FWMkQ7OERBRXpDOzBCQUVLO3lCQUNDOzs7Ozs7QUFFeEIsTUFBTSxFQUFFQSxTQUFTLEVBQUUsR0FBR0MsbUNBQW1CLEVBQ25DLEVBQUVDLEdBQUcsRUFBRUMsR0FBRyxFQUFFQyxPQUFPLEVBQUUsR0FBR0MscUNBQXFCO01BRW5ELFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsY0FBY0MsY0FBSztJQUM3Q0MsZUFBZTtRQUNiLE1BQU1DLE9BQU8sSUFBSSxDQUFDQyxPQUFPLElBQ25CQyxZQUFZRixNQUFNLEdBQUc7UUFFM0IsT0FBT0U7SUFDVDtJQUVBQyxTQUFTYixVQUFVLFNBQVVjLE9BQU8sRUFBRUMsT0FBTyxFQUFFQyxJQUFJO1FBQ2pERCxVQUFVYixJQUFJYSxTQUFTQyxPQUFPLEdBQUc7UUFFakMsTUFBTUMsY0FBYyxJQUFJLENBQUNDLFNBQVMsSUFBSyxHQUFHO1FBRTFDSixRQUFRSyxLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUVGLFlBQVksVUFBVSxDQUFDO1FBRXZELE9BQU9iLFFBQVEsQ0FBQ1UsU0FBU0MsU0FBU0M7WUFDaEMsT0FBT0ksSUFBQUEsZ0JBQU8sRUFBQyxDQUFDTjtnQkFDZCxNQUFNTyxjQUFjLElBQUksQ0FBQ0EsV0FBVyxDQUFDQyxJQUFJLENBQUMsSUFBSSxHQUN4Q0MsZUFBZSxJQUFJLENBQUNBLFlBQVksQ0FBQ0QsSUFBSSxDQUFDLElBQUksR0FDMUNFLGtCQUFrQixJQUFJLENBQUNBLGVBQWUsQ0FBQ0YsSUFBSSxDQUFDLElBQUksR0FDaERHLHFCQUFxQixJQUFJLENBQUNBLGtCQUFrQixDQUFDSCxJQUFJLENBQUMsSUFBSTtnQkFFNUQsT0FBT25CLElBQUk7b0JBQ1RvQjtvQkFDQUU7b0JBQ0FEO29CQUNBSDtpQkFDRCxFQUFFUCxTQUFTLENBQUNBLFNBQVNFO29CQUNwQixPQUFPRCxRQUFRQztnQkFDakIsR0FBR0E7WUFDTCxHQUFHRjtRQUNMLEdBQUdBLFNBQVMsQ0FBQ0EsU0FBU0U7WUFDcEIsTUFBTVUsUUFBUSxJQUFJLEVBQUUsR0FBRztZQUV2QlosUUFBUWEsUUFBUSxDQUFDRDtZQUVqQlosUUFBUWMsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUVYLFlBQVksUUFBUSxDQUFDO1lBRXZELE9BQU9GLFFBQVFELFNBQVNFO1FBQzFCLEdBQUcsQ0FBQ2E7WUFDRixJQUFJQSxXQUFXO2dCQUNiLE9BQU9iLEtBQUthO1lBQ2Q7WUFFQWYsUUFBUUssS0FBSyxDQUFDLENBQUMsc0JBQXNCLEVBQUVGLFlBQVksUUFBUSxDQUFDO1lBRTVELE9BQU9EO1FBQ1Q7SUFDRixHQUFHO0lBRUhjLFFBQVE5QixVQUFVLFNBQVUrQixJQUFJLEVBQUVDLGVBQWUsRUFBRWxCLE9BQU8sRUFBRUMsT0FBTyxFQUFFQyxJQUFJO1FBQ3ZFRCxVQUFVYixJQUFJYSxTQUFTQyxPQUFPLEdBQUc7UUFFakMsTUFBTUMsY0FBYyxJQUFJLENBQUNDLFNBQVMsSUFBSyxHQUFHO1FBRTFDSixRQUFRSyxLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUVGLFlBQVksVUFBVSxDQUFDO1FBRXRELE9BQU9iLFFBQVEsQ0FBQzJCLE1BQU1DLGlCQUFpQmxCLFNBQVNDLFNBQVNDO1lBQ3ZELE1BQU1pQixpQkFBaUIsSUFBSSxDQUFDQSxjQUFjLENBQUNYLElBQUksQ0FBQyxJQUFJLEdBQ2xEWSxvQkFBb0IsSUFBSSxDQUFDQSxpQkFBaUIsQ0FBQ1osSUFBSSxDQUFDLElBQUk7WUFFdEQsT0FBT2EsVUFBVSxDQUFDckI7Z0JBQ2hCLE9BQU9YLElBQUk7b0JBQ1Q4QjtvQkFDQUM7aUJBQ0QsRUFBRUgsTUFBTUMsaUJBQWlCbEIsU0FBUyxDQUFDaUIsTUFBTUMsaUJBQWlCbEIsU0FBU0U7b0JBQ2xFLE1BQU1vQiwrQkFBK0J0QixRQUFRdUIsK0JBQStCO29CQUU1RSxJQUFJRCw4QkFBOEI7d0JBQ2hDdEIsUUFBUWMsS0FBSyxDQUFDLENBQUMseUNBQXlDLENBQUM7d0JBRXpELE9BQU9aO29CQUNUO29CQUVBLE9BQU9ELFFBQVFDO2dCQUNqQixHQUFHQTtZQUNMLEdBQUdGO1FBQ0wsR0FBR2lCLE1BQU1DLGlCQUFpQmxCLFNBQVMsQ0FBQ2lCLE1BQU1DLGlCQUFpQmxCLFNBQVNFO1lBQ2xFRixRQUFRYyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRVgsWUFBWSxRQUFRLENBQUM7WUFFdEQsT0FBT0YsUUFBUUQsU0FBU0U7UUFDMUIsR0FBRyxDQUFDYTtZQUNGLElBQUlBLFdBQVc7Z0JBQ2IsT0FBT2IsS0FBS2E7WUFDZDtZQUVBZixRQUFRSyxLQUFLLENBQUMsQ0FBQyxxQkFBcUIsRUFBRUYsWUFBWSxRQUFRLENBQUM7WUFFM0QsT0FBT0Q7UUFDVDtJQUNGLEdBQUc7SUFFSCxPQUFPc0IsT0FBTyxRQUFRO0FBQ3hCIn0=
@@ -52,10 +52,40 @@ const _default = (0, _elements.define)(class Theorem extends _claim.default {
52
52
  return back();
53
53
  });
54
54
  });
55
+ apply = breakable(function(step, factOrSubproofs, context, forward, back) {
56
+ forward = cut(forward, back); ///
57
+ const theoremString = this.getString(); ///
58
+ context.trace(`Applying the '${theoremString}' theorem...`);
59
+ return isolate((step, factOrSubproofs, context, forward, back)=>{
60
+ const applyDeduction = this.applyDeduction.bind(this), applySuppositions = this.applySuppositions.bind(this);
61
+ return reconcile((context)=>{
62
+ return all([
63
+ applyDeduction,
64
+ applySuppositions
65
+ ], step, factOrSubproofs, context, (step, factOrSubproofs, context, back)=>{
66
+ const complexSubstitutionsUnsolved = context.areComplexSubstitutionsUnsolved();
67
+ if (complexSubstitutionsUnsolved) {
68
+ context.debug(`There are unsolved complex substitutions.`);
69
+ return back();
70
+ }
71
+ return forward(back);
72
+ }, back);
73
+ }, context);
74
+ }, step, factOrSubproofs, context, (step, factOrSubproofs, context, back)=>{
75
+ context.debug(`...applied the '${theoremString}' theorem.`);
76
+ return forward(context, back);
77
+ }, (exception)=>{
78
+ if (exception) {
79
+ return back(exception);
80
+ }
81
+ context.trace(`Unable to apply the '${claimString}' claim.`);
82
+ return back();
83
+ });
84
+ });
55
85
  static name = "Theorem";
56
86
  static fromJSON(json, context) {
57
87
  return _claim.default.fromJSON(Theorem, json, context);
58
88
  }
59
89
  });
60
90
 
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2NsYWltL3RoZW9yZW0uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IENsYWltIGZyb20gXCIuLi9jbGFpbVwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGVuY2xvc2UgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBicmVha2FibGUgfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXMsXG4gICAgICB7IGN1dCwgYWxsLCBpc29sYXRlIH0gPSBjb250aW51YXRpb25VdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBUaGVvcmVtIGV4dGVuZHMgQ2xhaW0ge1xuICBnZXRUaG9lcmVtTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgdGhlb3JlbU5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiB0aGVvcmVtTm9kZTtcbiAgfVxuXG4gIHZlcmlmeSA9IGJyZWFrYWJsZShmdW5jdGlvbiAoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGZvcndhcmQgPSBjdXQoZm9yd2FyZCwgYmFjayk7IC8vL1xuXG4gICAgY29uc3QgdGhlb3JlbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dGhlb3JlbVN0cmluZ30nIHRoZW9yZW0uLi5gKTtcblxuICAgIHJldHVybiBpc29sYXRlKChjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICByZXR1cm4gZW5jbG9zZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB2ZXJpZnlQcm9vZiA9IHRoaXMudmVyaWZ5UHJvb2YuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgdmVyaWZ5TGFiZWxzID0gdGhpcy52ZXJpZnlMYWJlbHMuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgdmVyaWZ5RGVkdWN0aW9uID0gdGhpcy52ZXJpZnlEZWR1Y3Rpb24uYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgdmVyaWZ5U3VwcG9zaXRpb25zID0gdGhpcy52ZXJpZnlTdXBwb3NpdGlvbnMuYmluZCh0aGlzKTtcblxuICAgICAgICByZXR1cm4gYWxsKFtcbiAgICAgICAgICB2ZXJpZnlMYWJlbHMsXG4gICAgICAgICAgdmVyaWZ5U3VwcG9zaXRpb25zLFxuICAgICAgICAgIHZlcmlmeURlZHVjdGlvbixcbiAgICAgICAgICB2ZXJpZnlQcm9vZlxuICAgICAgICBdLCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCB0aGVvcmVtID0gdGhpczsgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkVGhlb3JlbSh0aGVvcmVtKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3RoZW9yZW1TdHJpbmd9JyB0aGVvcmVtLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCAoZXhjZXB0aW9uKSA9PiB7XG4gICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuYWJsZSB0byB2ZXJpZnkgdGhlICcke3RoZW9yZW1TdHJpbmd9JyB0aGVvcmVtLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH0pO1xuICB9KTtcblxuICBzdGF0aWMgbmFtZSA9IFwiVGhlb3JlbVwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7IHJldHVybiBDbGFpbS5mcm9tSlNPTihUaGVvcmVtLCBqc29uLCBjb250ZXh0KTsgfVxufSk7XG4iXSwibmFtZXMiOlsiYnJlYWthYmxlIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImN1dCIsImFsbCIsImlzb2xhdGUiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJkZWZpbmUiLCJUaGVvcmVtIiwiQ2xhaW0iLCJnZXRUaG9lcmVtTm9kZSIsIm5vZGUiLCJnZXROb2RlIiwidGhlb3JlbU5vZGUiLCJ2ZXJpZnkiLCJjb250ZXh0IiwiZm9yd2FyZCIsImJhY2siLCJ0aGVvcmVtU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJlbmNsb3NlIiwidmVyaWZ5UHJvb2YiLCJiaW5kIiwidmVyaWZ5TGFiZWxzIiwidmVyaWZ5RGVkdWN0aW9uIiwidmVyaWZ5U3VwcG9zaXRpb25zIiwidGhlb3JlbSIsImFkZFRoZW9yZW0iLCJkZWJ1ZyIsImV4Y2VwdGlvbiIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVlBOzs7ZUFBQTs7O2dDQVYyRDs4REFFekM7MEJBRUs7eUJBQ0M7Ozs7OztBQUV4QixNQUFNLEVBQUVBLFNBQVMsRUFBRSxHQUFHQyxtQ0FBbUIsRUFDbkMsRUFBRUMsR0FBRyxFQUFFQyxHQUFHLEVBQUVDLE9BQU8sRUFBRSxHQUFHQyxxQ0FBcUI7TUFFbkQsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxnQkFBZ0JDLGNBQUs7SUFDL0NDLGlCQUFpQjtRQUNmLE1BQU1DLE9BQU8sSUFBSSxDQUFDQyxPQUFPLElBQ25CQyxjQUFjRixNQUFNLEdBQUc7UUFFN0IsT0FBT0U7SUFDVDtJQUVBQyxTQUFTYixVQUFVLFNBQVVjLE9BQU8sRUFBRUMsT0FBTyxFQUFFQyxJQUFJO1FBQ2pERCxVQUFVYixJQUFJYSxTQUFTQyxPQUFPLEdBQUc7UUFFakMsTUFBTUMsZ0JBQWdCLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFNUNKLFFBQVFLLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRUYsY0FBYyxZQUFZLENBQUM7UUFFM0QsT0FBT2IsUUFBUSxDQUFDVSxTQUFTQyxTQUFTQztZQUNoQyxPQUFPSSxJQUFBQSxnQkFBTyxFQUFDLENBQUNOO2dCQUNkLE1BQU1PLGNBQWMsSUFBSSxDQUFDQSxXQUFXLENBQUNDLElBQUksQ0FBQyxJQUFJLEdBQ3hDQyxlQUFlLElBQUksQ0FBQ0EsWUFBWSxDQUFDRCxJQUFJLENBQUMsSUFBSSxHQUMxQ0Usa0JBQWtCLElBQUksQ0FBQ0EsZUFBZSxDQUFDRixJQUFJLENBQUMsSUFBSSxHQUNoREcscUJBQXFCLElBQUksQ0FBQ0Esa0JBQWtCLENBQUNILElBQUksQ0FBQyxJQUFJO2dCQUU1RCxPQUFPbkIsSUFBSTtvQkFDVG9CO29CQUNBRTtvQkFDQUQ7b0JBQ0FIO2lCQUNELEVBQUVQLFNBQVMsQ0FBQ0EsU0FBU0U7b0JBQ3BCLE9BQU9ELFFBQVFDO2dCQUNqQixHQUFHQTtZQUNMLEdBQUdGO1FBQ0wsR0FBR0EsU0FBUyxDQUFDQSxTQUFTRTtZQUNwQixNQUFNVSxVQUFVLElBQUksRUFBRSxHQUFHO1lBRXpCWixRQUFRYSxVQUFVLENBQUNEO1lBRW5CWixRQUFRYyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRVgsY0FBYyxVQUFVLENBQUM7WUFFM0QsT0FBT0YsUUFBUUQsU0FBU0U7UUFDMUIsR0FBRyxDQUFDYTtZQUNGLElBQUlBLFdBQVc7Z0JBQ2IsT0FBT2IsS0FBS2E7WUFDZDtZQUVBZixRQUFRSyxLQUFLLENBQUMsQ0FBQyxzQkFBc0IsRUFBRUYsY0FBYyxVQUFVLENBQUM7WUFFaEUsT0FBT0Q7UUFDVDtJQUNGLEdBQUc7SUFFSCxPQUFPYyxPQUFPLFVBQVU7SUFFeEIsT0FBT0MsU0FBU0MsSUFBSSxFQUFFbEIsT0FBTyxFQUFFO1FBQUUsT0FBT04sY0FBSyxDQUFDdUIsUUFBUSxDQUFDeEIsU0FBU3lCLE1BQU1sQjtJQUFVO0FBQ2xGIn0=
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2NsYWltL3RoZW9yZW0uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IENsYWltIGZyb20gXCIuLi9jbGFpbVwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGVuY2xvc2UgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBicmVha2FibGUgfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXMsXG4gICAgICB7IGN1dCwgYWxsLCBpc29sYXRlIH0gPSBjb250aW51YXRpb25VdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBUaGVvcmVtIGV4dGVuZHMgQ2xhaW0ge1xuICBnZXRUaG9lcmVtTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgdGhlb3JlbU5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiB0aGVvcmVtTm9kZTtcbiAgfVxuXG4gIHZlcmlmeSA9IGJyZWFrYWJsZShmdW5jdGlvbiAoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGZvcndhcmQgPSBjdXQoZm9yd2FyZCwgYmFjayk7IC8vL1xuXG4gICAgY29uc3QgdGhlb3JlbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dGhlb3JlbVN0cmluZ30nIHRoZW9yZW0uLi5gKTtcblxuICAgIHJldHVybiBpc29sYXRlKChjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICByZXR1cm4gZW5jbG9zZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB2ZXJpZnlQcm9vZiA9IHRoaXMudmVyaWZ5UHJvb2YuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgdmVyaWZ5TGFiZWxzID0gdGhpcy52ZXJpZnlMYWJlbHMuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgdmVyaWZ5RGVkdWN0aW9uID0gdGhpcy52ZXJpZnlEZWR1Y3Rpb24uYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgdmVyaWZ5U3VwcG9zaXRpb25zID0gdGhpcy52ZXJpZnlTdXBwb3NpdGlvbnMuYmluZCh0aGlzKTtcblxuICAgICAgICByZXR1cm4gYWxsKFtcbiAgICAgICAgICB2ZXJpZnlMYWJlbHMsXG4gICAgICAgICAgdmVyaWZ5U3VwcG9zaXRpb25zLFxuICAgICAgICAgIHZlcmlmeURlZHVjdGlvbixcbiAgICAgICAgICB2ZXJpZnlQcm9vZlxuICAgICAgICBdLCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCB0aGVvcmVtID0gdGhpczsgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkVGhlb3JlbSh0aGVvcmVtKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3RoZW9yZW1TdHJpbmd9JyB0aGVvcmVtLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCAoZXhjZXB0aW9uKSA9PiB7XG4gICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuYWJsZSB0byB2ZXJpZnkgdGhlICcke3RoZW9yZW1TdHJpbmd9JyB0aGVvcmVtLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH0pO1xuICB9KTtcblxuICBhcHBseSA9IGJyZWFrYWJsZShmdW5jdGlvbiAoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgZm9yd2FyZCA9IGN1dChmb3J3YXJkLCBiYWNrKTsgLy8vXG5cbiAgICBjb25zdCB0aGVvcmVtU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgQXBwbHlpbmcgdGhlICcke3RoZW9yZW1TdHJpbmd9JyB0aGVvcmVtLi4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCBhcHBseURlZHVjdGlvbiA9IHRoaXMuYXBwbHlEZWR1Y3Rpb24uYmluZCh0aGlzKSxcbiAgICAgICAgYXBwbHlTdXBwb3NpdGlvbnMgPSB0aGlzLmFwcGx5U3VwcG9zaXRpb25zLmJpbmQodGhpcyk7XG5cbiAgICAgIHJldHVybiByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgcmV0dXJuIGFsbChbXG4gICAgICAgICAgYXBwbHlEZWR1Y3Rpb24sXG4gICAgICAgICAgYXBwbHlTdXBwb3NpdGlvbnNcbiAgICAgICAgXSwgc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCAoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCA9IGNvbnRleHQuYXJlQ29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCgpO1xuXG4gICAgICAgICAgaWYgKGNvbXBsZXhTdWJzdGl0dXRpb25zVW5zb2x2ZWQpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYFRoZXJlIGFyZSB1bnNvbHZlZCBjb21wbGV4IHN1YnN0aXR1dGlvbnMuYCk7XG5cbiAgICAgICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgY29udGV4dClcbiAgICB9LCBzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIChzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmFwcGxpZWQgdGhlICcke3RoZW9yZW1TdHJpbmd9JyB0aGVvcmVtLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCAoZXhjZXB0aW9uKSA9PiB7XG4gICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuYWJsZSB0byBhcHBseSB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbS5gKTtcblxuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgc3RhdGljIG5hbWUgPSBcIlRoZW9yZW1cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkgeyByZXR1cm4gQ2xhaW0uZnJvbUpTT04oVGhlb3JlbSwganNvbiwgY29udGV4dCk7IH1cbn0pO1xuIl0sIm5hbWVzIjpbImJyZWFrYWJsZSIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJjdXQiLCJhbGwiLCJpc29sYXRlIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiVGhlb3JlbSIsIkNsYWltIiwiZ2V0VGhvZXJlbU5vZGUiLCJub2RlIiwiZ2V0Tm9kZSIsInRoZW9yZW1Ob2RlIiwidmVyaWZ5IiwiY29udGV4dCIsImZvcndhcmQiLCJiYWNrIiwidGhlb3JlbVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZW5jbG9zZSIsInZlcmlmeVByb29mIiwiYmluZCIsInZlcmlmeUxhYmVscyIsInZlcmlmeURlZHVjdGlvbiIsInZlcmlmeVN1cHBvc2l0aW9ucyIsInRoZW9yZW0iLCJhZGRUaGVvcmVtIiwiZGVidWciLCJleGNlcHRpb24iLCJhcHBseSIsInN0ZXAiLCJmYWN0T3JTdWJwcm9vZnMiLCJhcHBseURlZHVjdGlvbiIsImFwcGx5U3VwcG9zaXRpb25zIiwicmVjb25jaWxlIiwiY29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCIsImFyZUNvbXBsZXhTdWJzdGl0dXRpb25zVW5zb2x2ZWQiLCJjbGFpbVN0cmluZyIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVlBOzs7ZUFBQTs7O2dDQVYyRDs4REFFekM7MEJBRUs7eUJBQ0M7Ozs7OztBQUV4QixNQUFNLEVBQUVBLFNBQVMsRUFBRSxHQUFHQyxtQ0FBbUIsRUFDbkMsRUFBRUMsR0FBRyxFQUFFQyxHQUFHLEVBQUVDLE9BQU8sRUFBRSxHQUFHQyxxQ0FBcUI7TUFFbkQsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxnQkFBZ0JDLGNBQUs7SUFDL0NDLGlCQUFpQjtRQUNmLE1BQU1DLE9BQU8sSUFBSSxDQUFDQyxPQUFPLElBQ25CQyxjQUFjRixNQUFNLEdBQUc7UUFFN0IsT0FBT0U7SUFDVDtJQUVBQyxTQUFTYixVQUFVLFNBQVVjLE9BQU8sRUFBRUMsT0FBTyxFQUFFQyxJQUFJO1FBQ2pERCxVQUFVYixJQUFJYSxTQUFTQyxPQUFPLEdBQUc7UUFFakMsTUFBTUMsZ0JBQWdCLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFNUNKLFFBQVFLLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRUYsY0FBYyxZQUFZLENBQUM7UUFFM0QsT0FBT2IsUUFBUSxDQUFDVSxTQUFTQyxTQUFTQztZQUNoQyxPQUFPSSxJQUFBQSxnQkFBTyxFQUFDLENBQUNOO2dCQUNkLE1BQU1PLGNBQWMsSUFBSSxDQUFDQSxXQUFXLENBQUNDLElBQUksQ0FBQyxJQUFJLEdBQ3hDQyxlQUFlLElBQUksQ0FBQ0EsWUFBWSxDQUFDRCxJQUFJLENBQUMsSUFBSSxHQUMxQ0Usa0JBQWtCLElBQUksQ0FBQ0EsZUFBZSxDQUFDRixJQUFJLENBQUMsSUFBSSxHQUNoREcscUJBQXFCLElBQUksQ0FBQ0Esa0JBQWtCLENBQUNILElBQUksQ0FBQyxJQUFJO2dCQUU1RCxPQUFPbkIsSUFBSTtvQkFDVG9CO29CQUNBRTtvQkFDQUQ7b0JBQ0FIO2lCQUNELEVBQUVQLFNBQVMsQ0FBQ0EsU0FBU0U7b0JBQ3BCLE9BQU9ELFFBQVFDO2dCQUNqQixHQUFHQTtZQUNMLEdBQUdGO1FBQ0wsR0FBR0EsU0FBUyxDQUFDQSxTQUFTRTtZQUNwQixNQUFNVSxVQUFVLElBQUksRUFBRSxHQUFHO1lBRXpCWixRQUFRYSxVQUFVLENBQUNEO1lBRW5CWixRQUFRYyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRVgsY0FBYyxVQUFVLENBQUM7WUFFM0QsT0FBT0YsUUFBUUQsU0FBU0U7UUFDMUIsR0FBRyxDQUFDYTtZQUNGLElBQUlBLFdBQVc7Z0JBQ2IsT0FBT2IsS0FBS2E7WUFDZDtZQUVBZixRQUFRSyxLQUFLLENBQUMsQ0FBQyxzQkFBc0IsRUFBRUYsY0FBYyxVQUFVLENBQUM7WUFFaEUsT0FBT0Q7UUFDVDtJQUNGLEdBQUc7SUFFSGMsUUFBUTlCLFVBQVUsU0FBVStCLElBQUksRUFBRUMsZUFBZSxFQUFFbEIsT0FBTyxFQUFFQyxPQUFPLEVBQUVDLElBQUk7UUFDdkVELFVBQVViLElBQUlhLFNBQVNDLE9BQU8sR0FBRztRQUVqQyxNQUFNQyxnQkFBZ0IsSUFBSSxDQUFDQyxTQUFTLElBQUssR0FBRztRQUU1Q0osUUFBUUssS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFRixjQUFjLFlBQVksQ0FBQztRQUUxRCxPQUFPYixRQUFRLENBQUMyQixNQUFNQyxpQkFBaUJsQixTQUFTQyxTQUFTQztZQUN2RCxNQUFNaUIsaUJBQWlCLElBQUksQ0FBQ0EsY0FBYyxDQUFDWCxJQUFJLENBQUMsSUFBSSxHQUNsRFksb0JBQW9CLElBQUksQ0FBQ0EsaUJBQWlCLENBQUNaLElBQUksQ0FBQyxJQUFJO1lBRXRELE9BQU9hLFVBQVUsQ0FBQ3JCO2dCQUNoQixPQUFPWCxJQUFJO29CQUNUOEI7b0JBQ0FDO2lCQUNELEVBQUVILE1BQU1DLGlCQUFpQmxCLFNBQVMsQ0FBQ2lCLE1BQU1DLGlCQUFpQmxCLFNBQVNFO29CQUNsRSxNQUFNb0IsK0JBQStCdEIsUUFBUXVCLCtCQUErQjtvQkFFNUUsSUFBSUQsOEJBQThCO3dCQUNoQ3RCLFFBQVFjLEtBQUssQ0FBQyxDQUFDLHlDQUF5QyxDQUFDO3dCQUV6RCxPQUFPWjtvQkFDVDtvQkFFQSxPQUFPRCxRQUFRQztnQkFDakIsR0FBR0E7WUFDTCxHQUFHRjtRQUNMLEdBQUdpQixNQUFNQyxpQkFBaUJsQixTQUFTLENBQUNpQixNQUFNQyxpQkFBaUJsQixTQUFTRTtZQUNsRUYsUUFBUWMsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVYLGNBQWMsVUFBVSxDQUFDO1lBRTFELE9BQU9GLFFBQVFELFNBQVNFO1FBQzFCLEdBQUcsQ0FBQ2E7WUFDRixJQUFJQSxXQUFXO2dCQUNiLE9BQU9iLEtBQUthO1lBQ2Q7WUFFQWYsUUFBUUssS0FBSyxDQUFDLENBQUMscUJBQXFCLEVBQUVtQixZQUFZLFFBQVEsQ0FBQztZQUUzRCxPQUFPdEI7UUFDVDtJQUNGLEdBQUc7SUFFSCxPQUFPdUIsT0FBTyxVQUFVO0lBRXhCLE9BQU9DLFNBQVNDLElBQUksRUFBRTNCLE9BQU8sRUFBRTtRQUFFLE9BQU9OLGNBQUssQ0FBQ2dDLFFBQVEsQ0FBQ2pDLFNBQVNrQyxNQUFNM0I7SUFBVTtBQUNsRiJ9
@@ -10,10 +10,9 @@ Object.defineProperty(exports, "default", {
10
10
  });
11
11
  const _necessary = require("necessary");
12
12
  const _occamlanguages = require("occam-languages");
13
- const _context = require("../utilities/context");
14
13
  const _string = require("../utilities/string");
15
14
  const _json = require("../utilities/json");
16
- const { reverse } = _necessary.arrayUtilities, { every, extract, forwardsEvery, backwardsEvery } = _occamlanguages.continuationUtilities, { breakable, breakPointFromJSON, breakPointToBreakPointJSON } = _occamlanguages.breakPointUtilities;
15
+ const { reverse } = _necessary.arrayUtilities, { every, extract, forwardsEvery, backwardsEvery } = _occamlanguages.continuationUtilities, { breakPointFromJSON, breakPointToBreakPointJSON } = _occamlanguages.breakPointUtilities;
17
16
  class Claim extends _occamlanguages.Element {
18
17
  constructor(context, string, node, breakPoint, labels, suppositions, deduction, proof, signature, hypotheses){
19
18
  super(context, string, node, breakPoint);
@@ -66,22 +65,6 @@ class Claim extends _occamlanguages.Element {
66
65
  });
67
66
  return metavariableNodeMatches;
68
67
  }
69
- unifyStepAndFactOrSubproofs = breakable(function(step, factOrSubproofs, context, forward, back) {
70
- const specificContext = context; ///
71
- return (0, _context.reconcile)((context)=>{
72
- return this.unifyStepWithDeduction(step, context, (context, back)=>{
73
- return this.unifyFactOrSubproofsWithSuppositions(factOrSubproofs, context, (context, back)=>{
74
- const complexSubstitutionsUnsolved = context.areComplexSubstitutionsUnsolved();
75
- if (complexSubstitutionsUnsolved) {
76
- context.debug(`Unable to unify the step and fact or subproofs because thre are unsolved complex substitutions.`);
77
- return back();
78
- }
79
- context = specificContext; ///
80
- return forward(context, back);
81
- }, back);
82
- }, back);
83
- }, context);
84
- });
85
68
  verifyLabels(context, forward, back) {
86
69
  const claimString = this.getString(); ///
87
70
  context.trace(`Verifying the '${claimString}' claim's labels...`);
@@ -174,17 +157,17 @@ class Claim extends _occamlanguages.Element {
174
157
  return continuation(hypothesesDischarged, context);
175
158
  });
176
159
  }
177
- unifyStepWithDeduction(step, context, forward, back) {
160
+ applyDeduction(step, factOrSubproofs, context, forward, back) {
178
161
  const stepString = step.getString(), claimString = this.getString(), deductionString = this.deduction.getString();
179
- context.trace(`Unifying the '${stepString}' step with the '${claimString}' claim's '${deductionString}' deduction...`);
180
- return this.deduction.unifyStep(step, context, (context, back)=>{
181
- context.debug(`...unified the '${stepString}' step with the '${claimString}' claim's '${deductionString}' deduction.`);
182
- return forward(context, back);
162
+ context.trace(`Applying the '${claimString}' claim's '${deductionString}' deduction to the '${stepString}' step...`);
163
+ return this.deduction.apply(step, context, (context, back)=>{
164
+ context.debug(`...applied the '${claimString}' claim's '${deductionString}' deduction to the '${stepString}' step.`);
165
+ return forward(step, factOrSubproofs, context, back);
183
166
  }, back);
184
167
  }
185
- unifyFactOrSubproofsWithSupposition(factOrSubproofs, supposition, context, forward, back) {
168
+ applySupposition(factOrSubproofs, supposition, context, forward, back) {
186
169
  return extract(factOrSubproofs, (factOrSubproof, forward, back)=>{
187
- return supposition.unifyFactOrSubproof(factOrSubproof, context, forward, back);
170
+ return supposition.apply(factOrSubproof, context, forward, back);
188
171
  }, (factOrSubproofs, factOrSubproof, context, back)=>{
189
172
  return context.solveInferredSubstitutions((back)=>{
190
173
  return forward(factOrSubproofs, context, back);
@@ -193,17 +176,17 @@ class Claim extends _occamlanguages.Element {
193
176
  if (exception) {
194
177
  return back(exception);
195
178
  }
196
- return supposition.unifyIndependently(context, (context, back)=>{
179
+ return supposition.applyIndependently(context, (context, back)=>{
197
180
  return forward(factOrSubproofs, context, back);
198
181
  }, back);
199
182
  });
200
183
  }
201
- unifyFactOrSubproofsWithSuppositions(factOrSubproofs, context, forward, back) {
184
+ applySuppositions(step, factOrSubproofs, context, forward, back) {
202
185
  factOrSubproofs = reverse(factOrSubproofs); ///
203
186
  return backwardsEvery(this.suppositions, (supposition, factOrSubproofs, context, forward, back)=>{
204
- return this.unifyFactOrSubproofsWithSupposition(factOrSubproofs, supposition, context, forward, back);
187
+ return this.applySupposition(factOrSubproofs, supposition, context, forward, back);
205
188
  }, factOrSubproofs, context, (factOrSubproofs, context, back)=>{
206
- return forward(context, back);
189
+ return forward(step, factOrSubproofs, context, back);
207
190
  }, back);
208
191
  }
209
192
  toJSON() {
@@ -231,4 +214,4 @@ class Claim extends _occamlanguages.Element {
231
214
  }
232
215
  }
233
216
 
234
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NsYWltLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgcmVjb25jaWxlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBjbGFpbVN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgbGFiZWxzRnJvbUpTT04sXG4gICAgICAgICBkZWR1Y3Rpb25Gcm9tSlNPTixcbiAgICAgICAgIHNpZ25hdHVyZUZyb21KU09OLFxuICAgICAgICAgbGFiZWxzVG9MYWJlbHNKU09OLFxuICAgICAgICAgaHlwb3RoZXNlc0Zyb21KU09OLFxuICAgICAgICAgc3VwcG9zaXRpb25zRnJvbUpTT04sXG4gICAgICAgICBkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04sXG4gICAgICAgICBzaWduYXR1cmVUb1NpZ25hdHVyZUpTT04sXG4gICAgICAgICBoeXBvdGhlc2VzVG9IeXBvdGhlc2VzSlNPTixcbiAgICAgICAgIHN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvanNvblwiO1xuXG5jb25zdCB7IHJldmVyc2UgfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBldmVyeSwgZXh0cmFjdCwgZm9yd2FyZHNFdmVyeSwgYmFja3dhcmRzRXZlcnkgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWthYmxlLCBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbGFpbSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5sYWJlbHMgPSBsYWJlbHM7XG4gICAgdGhpcy5zdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnM7XG4gICAgdGhpcy5kZWR1Y3Rpb24gPSBkZWR1Y3Rpb247XG4gICAgdGhpcy5wcm9vZiA9IHByb29mO1xuICAgIHRoaXMuc2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuICAgIHRoaXMuaHlwb3RoZXNlcyA9IGh5cG90aGVzZXM7XG4gIH1cblxuICBnZXRMYWJlbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWxzO1xuICB9XG5cbiAgZ2V0U3VwcG9zaXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnN1cHBvc2l0aW9ucztcbiAgfVxuXG4gIGdldERlZHVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kZWR1Y3Rpb247XG4gIH1cblxuICBnZXRQcm9vZigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9vZjtcbiAgfVxuXG4gIGdldFNpZ25hdHVyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zaWduYXR1cmU7XG4gIH1cblxuICBnZXRIeXBvdGhlc2VzKCkge1xuICAgIHJldHVybiB0aGlzLmh5cG90aGVzZXM7XG4gIH1cblxuICBzZXRIeXBvdGhlc2VzKGh5cG90aGVzZXMpIHtcbiAgICB0aGlzLmh5cG90aGVzZXMgPSBoeXBvdGhlc2VzO1xuICB9XG5cbiAgZ2V0U3VwcG9zaXRpb24oaW5kZXgpIHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbiA9IHRoaXMuc3VwcG9zaXRpb25zW2luZGV4XSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uO1xuICB9XG5cbiAgaXNTYXRpc2ZpYWJsZSgpIHtcbiAgICBjb25zdCBzYXRpc2ZpYWJsZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHNhdGlzZmlhYmxlO1xuICB9XG5cbiAgaXNIeXBvdGhldGljYWwoKSB7XG4gICAgY29uc3QgaHlwb3RoZXNlc0xlbmd0aCA9IHRoaXMuaHlwb3RoZXNlcy5sZW5ndGgsXG4gICAgICAgICAgaHlwb3RoZXRpY2FsID0gKGh5cG90aGVzZXNMZW5ndGggPiAwKTtcblxuICAgIHJldHVybiBoeXBvdGhldGljYWw7XG4gIH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gdGhpcy5sYWJlbHMuc29tZSgobGFiZWwpID0+IHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gbGFiZWwubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXM7XG4gIH1cblxuICB1bmlmeVN0ZXBBbmRGYWN0T3JTdWJwcm9vZnMgPSBicmVha2FibGUoZnVuY3Rpb24gKHN0ZXAsIGZhY3RPclN1YnByb29mcywgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgIHJldHVybiByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3RlcFdpdGhEZWR1Y3Rpb24oc3RlcCwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlGYWN0T3JTdWJwcm9vZnNXaXRoU3VwcG9zaXRpb25zKGZhY3RPclN1YnByb29mcywgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICBjb25zdCBjb21wbGV4U3Vic3RpdHV0aW9uc1Vuc29sdmVkID0gY29udGV4dC5hcmVDb21wbGV4U3Vic3RpdHV0aW9uc1Vuc29sdmVkKCk7XG5cbiAgICAgICAgICBpZiAoY29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCkge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgVW5hYmxlIHRvIHVuaWZ5IHRoZSBzdGVwIGFuZCBmYWN0IG9yIHN1YnByb29mcyBiZWNhdXNlIHRocmUgYXJlIHVuc29sdmVkIGNvbXBsZXggc3Vic3RpdHV0aW9ucy5gKTtcblxuICAgICAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9LCBiYWNrKTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfSk7XG5cbiAgdmVyaWZ5TGFiZWxzKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzIGxhYmVscy4uLmApO1xuXG4gICAgY29uc3QgdmVyaWZ5TGFiZWwgPSB0aGlzLnZlcmlmeUxhYmVsLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gZXZlcnkodGhpcy5sYWJlbHMsIHZlcmlmeUxhYmVsLCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyBsYWJlbHMuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmVyaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpLFxuICAgICAgICAgIGNsYWltU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyAnJHtsYWJlbFN0cmluZ30nIGxhYmVsLi4uYCk7XG5cbiAgICByZXR1cm4gbGFiZWwudmVyaWZ5KGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke2xhYmVsU3RyaW5nfScgbGFiZWwuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmVyaWZ5UHJvb2YoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGlmICh0aGlzLnByb29mID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzIHByb29mLi4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmRlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKTtcblxuICAgIHJldHVybiB0aGlzLnByb29mLnZlcmlmeShzdGF0ZW1lbnQsIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzIHByb29mLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZlcmlmeURlZHVjdGlvbihjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY2xhaW1TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBkZWR1Y3Rpb25TdHJpbmcgPSB0aGlzLmRlZHVjdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuZGVkdWN0aW9uLnZlcmlmeShjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmVyaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9uU3RyaW5nID0gc3VwcG9zaXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb24udmVyaWZ5KGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmVyaWZ5U3VwcG9zaXRpb25zKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbnNMZW5ndGggPSB0aGlzLnN1cHBvc2l0aW9ucy5sZW5ndGg7XG5cbiAgICBpZiAoc3VwcG9zaXRpb25zTGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzIHN1cHBvc2l0aW9ucy4uLmApO1xuXG4gICAgcmV0dXJuIGZvcndhcmRzRXZlcnkodGhpcy5zdXBwb3NpdGlvbnMsIChzdXBwb3NpdGlvbiwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudmVyaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IGZhY3RPclN1YnByb29mID0gc3VwcG9zaXRpb247IC8vL1xuXG4gICAgICAgIGNvbnRleHQuYWRkRmFjdE9yU3VicHJvb2YoZmFjdE9yU3VicHJvb2YpO1xuXG4gICAgICAgIGNvbnRleHQuYXNzaWduQXNzaWdubWVudHMoKTtcblxuICAgICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICAgIH0sIGJhY2spO1xuICAgIH0sIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzIHN1cHBvc2l0aW9ucy5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICBkaXNjaGFyZ2VIeXBvdGhlc2lzKGh5cG90aGVzaXMsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBkZWJ1Z2dlclxuXG4gICAgY29uc3QgY2xhaW1TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBoeXBvdGhlc2lzU3RyaW5nID0gaHlwb3RoZXNpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYERpc2NoYXJnaW5nIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMuLi5gKTtcblxuICAgIHJldHVybiBoeXBvdGhlc2lzLmRpc2NoYXJnZShjb250ZXh0LCAoaHlwb3RoZXNpc0Rpc2NoYXJnZXMsIGNvbnRleHQpID0+IHtcbiAgICAgIGlmIChoeXBvdGhlc2lzRGlzY2hhcmdlcykge1xuICAgICAgICBjb250ZXh0LnRyYWNlKGAuLi5kaXNjaGFyZ2VzIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oaHlwb3RoZXNpc0Rpc2NoYXJnZXMsIGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgZGlzY2hhcmdlSHlwb3RoZXNlcyhjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgZGVidWdnZXJcblxuICAgIGNvbnN0IGh5cG90aGVzZXMgPSB0aGlzLmdldEh5cG90aGVzZXMoKSxcbiAgICAgICAgIGh5cG90aGVzZXNMZW5ndGggPSBoeXBvdGhlc2VzLmxlbmd0aDtcblxuICAgIGlmIChoeXBvdGhlc2VzTGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCBoeXBvdGhlc2VzRGlzY2hhcmdlZCA9IHRydWU7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oaHlwb3RoZXNlc0Rpc2NoYXJnZWQsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYWltU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBEaXNjaGFyZ2luZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzIGh5cG90aGVzZXMuLi5gKTtcblxuICAgIGNvbnN0IGRpc2NoYXJnZUh5cG90aGVzaXMgPSB0aGlzLmRpc2NoYXJnZUh5cG90aGVzaXMuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBldmVyeShoeXBvdGhlc2VzLCBkaXNjaGFyZ2VIeXBvdGhlc2lzLCBjb250ZXh0LCAoaHlwb3RoZXNlc0Rpc2NoYXJnZWQpID0+IHtcbiAgICAgIGlmIChoeXBvdGhlc2VzRGlzY2hhcmdlZCkge1xuICAgICAgICBjb250ZXh0LnRyYWNlKGAuLi5kaXNjaGFyZ2VkIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgaHlwb3RoZXNlcy5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihoeXBvdGhlc2VzRGlzY2hhcmdlZCwgY29udGV4dCk7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeVN0ZXBXaXRoRGVkdWN0aW9uKHN0ZXAsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgZGVkdWN0aW9uU3RyaW5nID0gdGhpcy5kZWR1Y3Rpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuZGVkdWN0aW9uLnVuaWZ5U3RlcChzdGVwLCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeUZhY3RPclN1YnByb29mc1dpdGhTdXBwb3NpdGlvbihmYWN0T3JTdWJwcm9vZnMsIHN1cHBvc2l0aW9uLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgcmV0dXJuIGV4dHJhY3QoZmFjdE9yU3VicHJvb2ZzLFxuICAgICAgKGZhY3RPclN1YnByb29mLCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICAgIHJldHVybiBzdXBwb3NpdGlvbi51bmlmeUZhY3RPclN1YnByb29mKGZhY3RPclN1YnByb29mLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKTtcbiAgICAgIH0sIChmYWN0T3JTdWJwcm9vZnMsIGZhY3RPclN1YnByb29mLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgIHJldHVybiBjb250ZXh0LnNvbHZlSW5mZXJyZWRTdWJzdGl0dXRpb25zKChiYWNrKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9LCAoZXhjZXB0aW9uKSA9PiB7XG4gICAgICAgIGlmKGV4Y2VwdGlvbikge1xuICAgICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VwcG9zaXRpb24udW5pZnlJbmRlcGVuZGVudGx5KGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHVuaWZ5RmFjdE9yU3VicHJvb2ZzV2l0aFN1cHBvc2l0aW9ucyhmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBmYWN0T3JTdWJwcm9vZnMgPSByZXZlcnNlKGZhY3RPclN1YnByb29mcyk7IC8vL1xuXG4gICAgcmV0dXJuIGJhY2t3YXJkc0V2ZXJ5KHRoaXMuc3VwcG9zaXRpb25zLCAoc3VwcG9zaXRpb24sIGZhY3RPclN1YnByb29mcywgY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudW5pZnlGYWN0T3JTdWJwcm9vZnNXaXRoU3VwcG9zaXRpb24oZmFjdE9yU3VicHJvb2ZzLCBzdXBwb3NpdGlvbiwgY29udGV4dCwgZm9yd2FyZCwgYmFjayk7XG4gICAgfSwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCAoZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBsZXQganNvbjtcblxuICAgIGNvbnN0IGxhYmVsc0pTT04gPSBsYWJlbHNUb0xhYmVsc0pTT04odGhpcy5sYWJlbHMpLFxuICAgICAgICAgIGRlZHVjdGlvbkpTT04gPSBkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04odGhpcy5kZWR1Y3Rpb24pLFxuICAgICAgICAgIHN1cHBvc2l0aW9uc0pTT04gPSBzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04odGhpcy5zdXBwb3NpdGlvbnMpLFxuICAgICAgICAgIHNpZ25hdHVyZUpTT04gPSBzaWduYXR1cmVUb1NpZ25hdHVyZUpTT04odGhpcy5zaWduYXR1cmUpLFxuICAgICAgICAgIGh5cG90aGVzZXNKU09OID0gaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04odGhpcy5oeXBvdGhlc2VzKSxcbiAgICAgICAgICBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBsYWJlbHMgPSBsYWJlbHNKU09OLCAgLy8vXG4gICAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uSlNPTiwgIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0pTT04sICAvLy9cbiAgICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVKU09OLCAgLy8vXG4gICAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNKU09OOyAgLy8vXG5cbiAgICBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludCxcbiAgICAgIGxhYmVscyxcbiAgICAgIGRlZHVjdGlvbixcbiAgICAgIHN1cHBvc2l0aW9ucyxcbiAgICAgIHNpZ25hdHVyZSxcbiAgICAgIGh5cG90aGVzZXNcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oQ2xhc3MsIGpzb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCBsYWJlbHMgPSBsYWJlbHNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIGNsYWltU3RyaW5nID0gY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgICAgc3RyaW5nID0gY2xhaW1TdHJpbmcsIC8vL1xuICAgICAgICAgIG5vZGUgPSBudWxsLFxuICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgcHJvb2YgPSBudWxsLFxuICAgICAgICAgIGNsYWltID0gbmV3IENsYXNzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgICByZXR1cm4gY2xhaW07XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJDbGFpbSIsInJldmVyc2UiLCJhcnJheVV0aWxpdGllcyIsImV2ZXJ5IiwiZXh0cmFjdCIsImZvcndhcmRzRXZlcnkiLCJiYWNrd2FyZHNFdmVyeSIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsImJyZWFrYWJsZSIsImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJsYWJlbHMiLCJzdXBwb3NpdGlvbnMiLCJkZWR1Y3Rpb24iLCJwcm9vZiIsInNpZ25hdHVyZSIsImh5cG90aGVzZXMiLCJnZXRMYWJlbHMiLCJnZXRTdXBwb3NpdGlvbnMiLCJnZXREZWR1Y3Rpb24iLCJnZXRQcm9vZiIsImdldFNpZ25hdHVyZSIsImdldEh5cG90aGVzZXMiLCJzZXRIeXBvdGhlc2VzIiwiZ2V0U3VwcG9zaXRpb24iLCJpbmRleCIsInN1cHBvc2l0aW9uIiwiaXNTYXRpc2ZpYWJsZSIsInNhdGlzZmlhYmxlIiwiaXNIeXBvdGhldGljYWwiLCJoeXBvdGhlc2VzTGVuZ3RoIiwibGVuZ3RoIiwiaHlwb3RoZXRpY2FsIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwic29tZSIsImxhYmVsIiwidW5pZnlTdGVwQW5kRmFjdE9yU3VicHJvb2ZzIiwic3RlcCIsImZhY3RPclN1YnByb29mcyIsImZvcndhcmQiLCJiYWNrIiwic3BlY2lmaWNDb250ZXh0IiwicmVjb25jaWxlIiwidW5pZnlTdGVwV2l0aERlZHVjdGlvbiIsInVuaWZ5RmFjdE9yU3VicHJvb2ZzV2l0aFN1cHBvc2l0aW9ucyIsImNvbXBsZXhTdWJzdGl0dXRpb25zVW5zb2x2ZWQiLCJhcmVDb21wbGV4U3Vic3RpdHV0aW9uc1Vuc29sdmVkIiwiZGVidWciLCJ2ZXJpZnlMYWJlbHMiLCJjbGFpbVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmVyaWZ5TGFiZWwiLCJiaW5kIiwibGFiZWxTdHJpbmciLCJ2ZXJpZnkiLCJ2ZXJpZnlQcm9vZiIsInN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsInZlcmlmeURlZHVjdGlvbiIsImRlZHVjdGlvblN0cmluZyIsInZlcmlmeVN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25TdHJpbmciLCJ2ZXJpZnlTdXBwb3NpdGlvbnMiLCJzdXBwb3NpdGlvbnNMZW5ndGgiLCJmYWN0T3JTdWJwcm9vZiIsImFkZEZhY3RPclN1YnByb29mIiwiYXNzaWduQXNzaWdubWVudHMiLCJkaXNjaGFyZ2VIeXBvdGhlc2lzIiwiaHlwb3RoZXNpcyIsImh5cG90aGVzaXNTdHJpbmciLCJkaXNjaGFyZ2UiLCJoeXBvdGhlc2lzRGlzY2hhcmdlcyIsImNvbnRpbnVhdGlvbiIsImRpc2NoYXJnZUh5cG90aGVzZXMiLCJoeXBvdGhlc2VzRGlzY2hhcmdlZCIsInN0ZXBTdHJpbmciLCJ1bmlmeVN0ZXAiLCJ1bmlmeUZhY3RPclN1YnByb29mc1dpdGhTdXBwb3NpdGlvbiIsInVuaWZ5RmFjdE9yU3VicHJvb2YiLCJzb2x2ZUluZmVycmVkU3Vic3RpdHV0aW9ucyIsImV4Y2VwdGlvbiIsInVuaWZ5SW5kZXBlbmRlbnRseSIsInRvSlNPTiIsImpzb24iLCJsYWJlbHNKU09OIiwibGFiZWxzVG9MYWJlbHNKU09OIiwiZGVkdWN0aW9uSlNPTiIsImRlZHVjdGlvblRvRGVkdWN0aW9uSlNPTiIsInN1cHBvc2l0aW9uc0pTT04iLCJzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04iLCJzaWduYXR1cmVKU09OIiwic2lnbmF0dXJlVG9TaWduYXR1cmVKU09OIiwiaHlwb3RoZXNlc0pTT04iLCJoeXBvdGhlc2VzVG9IeXBvdGhlc2VzSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImZyb21KU09OIiwiQ2xhc3MiLCJsYWJlbHNGcm9tSlNPTiIsImRlZHVjdGlvbkZyb21KU09OIiwic3VwcG9zaXRpb25zRnJvbUpTT04iLCJzaWduYXR1cmVGcm9tSlNPTiIsImh5cG90aGVzZXNGcm9tSlNPTiIsImNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsImNsYWltIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFzQkE7OztlQUFxQkE7OzsyQkFwQlU7Z0NBQ3FDO3lCQUUxQzt3QkFDNkM7c0JBVXhCO0FBRS9DLE1BQU0sRUFBRUMsT0FBTyxFQUFFLEdBQUdDLHlCQUFjLEVBQzVCLEVBQUVD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
217
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NsYWltLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IGxhYmVsc0Zyb21KU09OLFxuICAgICAgICAgZGVkdWN0aW9uRnJvbUpTT04sXG4gICAgICAgICBzaWduYXR1cmVGcm9tSlNPTixcbiAgICAgICAgIGxhYmVsc1RvTGFiZWxzSlNPTixcbiAgICAgICAgIGh5cG90aGVzZXNGcm9tSlNPTixcbiAgICAgICAgIHN1cHBvc2l0aW9uc0Zyb21KU09OLFxuICAgICAgICAgZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OLFxuICAgICAgICAgc2lnbmF0dXJlVG9TaWduYXR1cmVKU09OLFxuICAgICAgICAgaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04sXG4gICAgICAgICBzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcblxuY29uc3QgeyByZXZlcnNlIH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgZXZlcnksIGV4dHJhY3QsIGZvcndhcmRzRXZlcnksIGJhY2t3YXJkc0V2ZXJ5IH0gPSBjb250aW51YXRpb25VdGlsaXRpZXMsXG4gICAgICB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENsYWltIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcykge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLmxhYmVscyA9IGxhYmVscztcbiAgICB0aGlzLnN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9ucztcbiAgICB0aGlzLmRlZHVjdGlvbiA9IGRlZHVjdGlvbjtcbiAgICB0aGlzLnByb29mID0gcHJvb2Y7XG4gICAgdGhpcy5zaWduYXR1cmUgPSBzaWduYXR1cmU7XG4gICAgdGhpcy5oeXBvdGhlc2VzID0gaHlwb3RoZXNlcztcbiAgfVxuXG4gIGdldExhYmVscygpIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbHM7XG4gIH1cblxuICBnZXRTdXBwb3NpdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VwcG9zaXRpb25zO1xuICB9XG5cbiAgZ2V0RGVkdWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmRlZHVjdGlvbjtcbiAgfVxuXG4gIGdldFByb29mKCkge1xuICAgIHJldHVybiB0aGlzLnByb29mO1xuICB9XG5cbiAgZ2V0U2lnbmF0dXJlKCkge1xuICAgIHJldHVybiB0aGlzLnNpZ25hdHVyZTtcbiAgfVxuXG4gIGdldEh5cG90aGVzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHlwb3RoZXNlcztcbiAgfVxuXG4gIHNldEh5cG90aGVzZXMoaHlwb3RoZXNlcykge1xuICAgIHRoaXMuaHlwb3RoZXNlcyA9IGh5cG90aGVzZXM7XG4gIH1cblxuICBnZXRTdXBwb3NpdGlvbihpbmRleCkge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uID0gdGhpcy5zdXBwb3NpdGlvbnNbaW5kZXhdIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb247XG4gIH1cblxuICBpc1NhdGlzZmlhYmxlKCkge1xuICAgIGNvbnN0IHNhdGlzZmlhYmxlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gc2F0aXNmaWFibGU7XG4gIH1cblxuICBpc0h5cG90aGV0aWNhbCgpIHtcbiAgICBjb25zdCBoeXBvdGhlc2VzTGVuZ3RoID0gdGhpcy5oeXBvdGhlc2VzLmxlbmd0aCxcbiAgICAgICAgICBoeXBvdGhldGljYWwgPSAoaHlwb3RoZXNlc0xlbmd0aCA+IDApO1xuXG4gICAgcmV0dXJuIGh5cG90aGV0aWNhbDtcbiAgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSB0aGlzLmxhYmVscy5zb21lKChsYWJlbCkgPT4ge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBsYWJlbC5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcztcbiAgfVxuXG4gIHZlcmlmeUxhYmVscyhjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY2xhaW1TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyBsYWJlbHMuLi5gKTtcblxuICAgIGNvbnN0IHZlcmlmeUxhYmVsID0gdGhpcy52ZXJpZnlMYWJlbC5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGV2ZXJ5KHRoaXMubGFiZWxzLCB2ZXJpZnlMYWJlbCwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgbGFiZWxzLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZlcmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgbGFiZWxTdHJpbmcgPSBsYWJlbC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbC4uLmApO1xuXG4gICAgcmV0dXJuIGxhYmVsLnZlcmlmeShjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyAnJHtsYWJlbFN0cmluZ30nIGxhYmVsLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZlcmlmeVByb29mKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBpZiAodGhpcy5wcm9vZiA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgY2xhaW1TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyBwcm9vZi4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5kZWR1Y3Rpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9vZi52ZXJpZnkoc3RhdGVtZW50LCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyBwcm9vZi5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2ZXJpZnlEZWR1Y3Rpb24oY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNsYWltU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgLy8vXG4gICAgICAgICAgZGVkdWN0aW9uU3RyaW5nID0gdGhpcy5kZWR1Y3Rpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24uLi5gKTtcblxuICAgIHJldHVybiB0aGlzLmRlZHVjdGlvbi52ZXJpZnkoY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZlcmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY2xhaW1TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBzdXBwb3NpdGlvblN0cmluZyA9IHN1cHBvc2l0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uLnZlcmlmeShjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZlcmlmeVN1cHBvc2l0aW9ucyhjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25zTGVuZ3RoID0gdGhpcy5zdXBwb3NpdGlvbnMubGVuZ3RoO1xuXG4gICAgaWYgKHN1cHBvc2l0aW9uc0xlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgY2xhaW1TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyBzdXBwb3NpdGlvbnMuLi5gKTtcblxuICAgIHJldHVybiBmb3J3YXJkc0V2ZXJ5KHRoaXMuc3VwcG9zaXRpb25zLCAoc3VwcG9zaXRpb24sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnZlcmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICBjb25zdCBmYWN0T3JTdWJwcm9vZiA9IHN1cHBvc2l0aW9uOyAvLy9cblxuICAgICAgICBjb250ZXh0LmFkZEZhY3RPclN1YnByb29mKGZhY3RPclN1YnByb29mKTtcblxuICAgICAgICBjb250ZXh0LmFzc2lnbkFzc2lnbm1lbnRzKCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgICB9LCBiYWNrKTtcbiAgICB9LCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyBzdXBwb3NpdGlvbnMuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgZGlzY2hhcmdlSHlwb3RoZXNpcyhoeXBvdGhlc2lzLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgZGVidWdnZXJcblxuICAgIGNvbnN0IGNsYWltU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgLy8vXG4gICAgICAgICAgaHlwb3RoZXNpc1N0cmluZyA9IGh5cG90aGVzaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBEaXNjaGFyZ2luZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLi4uYCk7XG5cbiAgICByZXR1cm4gaHlwb3RoZXNpcy5kaXNjaGFyZ2UoY29udGV4dCwgKGh5cG90aGVzaXNEaXNjaGFyZ2VzLCBjb250ZXh0KSA9PiB7XG4gICAgICBpZiAoaHlwb3RoZXNpc0Rpc2NoYXJnZXMpIHtcbiAgICAgICAgY29udGV4dC50cmFjZShgLi4uZGlzY2hhcmdlcyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGh5cG90aGVzaXNEaXNjaGFyZ2VzLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGRpc2NoYXJnZUh5cG90aGVzZXMoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGRlYnVnZ2VyXG5cbiAgICBjb25zdCBoeXBvdGhlc2VzID0gdGhpcy5nZXRIeXBvdGhlc2VzKCksXG4gICAgICAgICBoeXBvdGhlc2VzTGVuZ3RoID0gaHlwb3RoZXNlcy5sZW5ndGg7XG5cbiAgICBpZiAoaHlwb3RoZXNlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3QgaHlwb3RoZXNlc0Rpc2NoYXJnZWQgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGh5cG90aGVzZXNEaXNjaGFyZ2VkLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgRGlzY2hhcmdpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyBoeXBvdGhlc2VzLi4uYCk7XG5cbiAgICBjb25zdCBkaXNjaGFyZ2VIeXBvdGhlc2lzID0gdGhpcy5kaXNjaGFyZ2VIeXBvdGhlc2lzLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gZXZlcnkoaHlwb3RoZXNlcywgZGlzY2hhcmdlSHlwb3RoZXNpcywgY29udGV4dCwgKGh5cG90aGVzZXNEaXNjaGFyZ2VkKSA9PiB7XG4gICAgICBpZiAoaHlwb3RoZXNlc0Rpc2NoYXJnZWQpIHtcbiAgICAgICAgY29udGV4dC50cmFjZShgLi4uZGlzY2hhcmdlZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzIGh5cG90aGVzZXMuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oaHlwb3RoZXNlc0Rpc2NoYXJnZWQsIGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwbHlEZWR1Y3Rpb24oc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgY2xhaW1TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLFxuICAgICAgICAgIGRlZHVjdGlvblN0cmluZyA9IHRoaXMuZGVkdWN0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQXBwbHlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24gdG8gdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5kZWR1Y3Rpb24uYXBwbHkoc3RlcCwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmFwcGxpZWQgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24gdG8gdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgYXBwbHlTdXBwb3NpdGlvbihmYWN0T3JTdWJwcm9vZnMsIHN1cHBvc2l0aW9uLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgcmV0dXJuIGV4dHJhY3QoZmFjdE9yU3VicHJvb2ZzLFxuICAgICAgKGZhY3RPclN1YnByb29mLCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICAgIHJldHVybiBzdXBwb3NpdGlvbi5hcHBseShmYWN0T3JTdWJwcm9vZiwgY29udGV4dCwgZm9yd2FyZCwgYmFjayk7XG4gICAgICB9LCAoZmFjdE9yU3VicHJvb2ZzLCBmYWN0T3JTdWJwcm9vZiwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICByZXR1cm4gY29udGV4dC5zb2x2ZUluZmVycmVkU3Vic3RpdHV0aW9ucygoYmFjaykgPT4ge1xuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGZhY3RPclN1YnByb29mcywgY29udGV4dCwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZihleGNlcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gYmFjayhleGNlcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1cHBvc2l0aW9uLmFwcGx5SW5kZXBlbmRlbnRseShjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGZhY3RPclN1YnByb29mcywgY29udGV4dCwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBhcHBseVN1cHBvc2l0aW9ucyhzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBmYWN0T3JTdWJwcm9vZnMgPSByZXZlcnNlKGZhY3RPclN1YnByb29mcyk7IC8vL1xuXG4gICAgcmV0dXJuIGJhY2t3YXJkc0V2ZXJ5KHRoaXMuc3VwcG9zaXRpb25zLCAoc3VwcG9zaXRpb24sIGZhY3RPclN1YnByb29mcywgY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwbHlTdXBwb3NpdGlvbihmYWN0T3JTdWJwcm9vZnMsIHN1cHBvc2l0aW9uLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKTtcbiAgICB9LCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIChmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHJldHVybiBmb3J3YXJkKHN0ZXAsIGZhY3RPclN1YnByb29mcywgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgbGV0IGpzb247XG5cbiAgICBjb25zdCBsYWJlbHNKU09OID0gbGFiZWxzVG9MYWJlbHNKU09OKHRoaXMubGFiZWxzKSxcbiAgICAgICAgICBkZWR1Y3Rpb25KU09OID0gZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OKHRoaXMuZGVkdWN0aW9uKSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnNKU09OID0gc3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OKHRoaXMuc3VwcG9zaXRpb25zKSxcbiAgICAgICAgICBzaWduYXR1cmVKU09OID0gc2lnbmF0dXJlVG9TaWduYXR1cmVKU09OKHRoaXMuc2lnbmF0dXJlKSxcbiAgICAgICAgICBoeXBvdGhlc2VzSlNPTiA9IGh5cG90aGVzZXNUb0h5cG90aGVzZXNKU09OKHRoaXMuaHlwb3RoZXNlcyksXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QgbGFiZWxzID0gbGFiZWxzSlNPTiwgIC8vL1xuICAgICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkpTT04sICAvLy9cbiAgICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNKU09OLCAgLy8vXG4gICAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlSlNPTiwgIC8vL1xuICAgICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzSlNPTjsgIC8vL1xuXG4gICAganNvbiA9IHtcbiAgICAgIHN0cmluZyxcbiAgICAgIGJyZWFrUG9pbnQsXG4gICAgICBsYWJlbHMsXG4gICAgICBkZWR1Y3Rpb24sXG4gICAgICBzdXBwb3NpdGlvbnMsXG4gICAgICBzaWduYXR1cmUsXG4gICAgICBoeXBvdGhlc2VzXG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKENsYXNzLCBqc29uLCBjb250ZXh0KSB7XG4gICAgY29uc3QgbGFiZWxzID0gbGFiZWxzRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBjbGFpbVN0cmluZyA9IGNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICAgIHN0cmluZyA9IGNsYWltU3RyaW5nLCAvLy9cbiAgICAgICAgICBub2RlID0gbnVsbCxcbiAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgIHByb29mID0gbnVsbCxcbiAgICAgICAgICBjbGFpbSA9IG5ldyBDbGFzcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gICAgcmV0dXJuIGNsYWltO1xuICB9XG59XG4iXSwibmFtZXMiOlsiQ2xhaW0iLCJyZXZlcnNlIiwiYXJyYXlVdGlsaXRpZXMiLCJldmVyeSIsImV4dHJhY3QiLCJmb3J3YXJkc0V2ZXJ5IiwiYmFja3dhcmRzRXZlcnkiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwibGFiZWxzIiwic3VwcG9zaXRpb25zIiwiZGVkdWN0aW9uIiwicHJvb2YiLCJzaWduYXR1cmUiLCJoeXBvdGhlc2VzIiwiZ2V0TGFiZWxzIiwiZ2V0U3VwcG9zaXRpb25zIiwiZ2V0RGVkdWN0aW9uIiwiZ2V0UHJvb2YiLCJnZXRTaWduYXR1cmUiLCJnZXRIeXBvdGhlc2VzIiwic2V0SHlwb3RoZXNlcyIsImdldFN1cHBvc2l0aW9uIiwiaW5kZXgiLCJzdXBwb3NpdGlvbiIsImlzU2F0aXNmaWFibGUiLCJzYXRpc2ZpYWJsZSIsImlzSHlwb3RoZXRpY2FsIiwiaHlwb3RoZXNlc0xlbmd0aCIsImxlbmd0aCIsImh5cG90aGV0aWNhbCIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsInNvbWUiLCJsYWJlbCIsInZlcmlmeUxhYmVscyIsImZvcndhcmQiLCJiYWNrIiwiY2xhaW1TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZlcmlmeUxhYmVsIiwiYmluZCIsImRlYnVnIiwibGFiZWxTdHJpbmciLCJ2ZXJpZnkiLCJ2ZXJpZnlQcm9vZiIsInN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsInZlcmlmeURlZHVjdGlvbiIsImRlZHVjdGlvblN0cmluZyIsInZlcmlmeVN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25TdHJpbmciLCJ2ZXJpZnlTdXBwb3NpdGlvbnMiLCJzdXBwb3NpdGlvbnNMZW5ndGgiLCJmYWN0T3JTdWJwcm9vZiIsImFkZEZhY3RPclN1YnByb29mIiwiYXNzaWduQXNzaWdubWVudHMiLCJkaXNjaGFyZ2VIeXBvdGhlc2lzIiwiaHlwb3RoZXNpcyIsImh5cG90aGVzaXNTdHJpbmciLCJkaXNjaGFyZ2UiLCJoeXBvdGhlc2lzRGlzY2hhcmdlcyIsImNvbnRpbnVhdGlvbiIsImRpc2NoYXJnZUh5cG90aGVzZXMiLCJoeXBvdGhlc2VzRGlzY2hhcmdlZCIsImFwcGx5RGVkdWN0aW9uIiwic3RlcCIsImZhY3RPclN1YnByb29mcyIsInN0ZXBTdHJpbmciLCJhcHBseSIsImFwcGx5U3VwcG9zaXRpb24iLCJzb2x2ZUluZmVycmVkU3Vic3RpdHV0aW9ucyIsImV4Y2VwdGlvbiIsImFwcGx5SW5kZXBlbmRlbnRseSIsImFwcGx5U3VwcG9zaXRpb25zIiwidG9KU09OIiwianNvbiIsImxhYmVsc0pTT04iLCJsYWJlbHNUb0xhYmVsc0pTT04iLCJkZWR1Y3Rpb25KU09OIiwiZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OIiwic3VwcG9zaXRpb25zSlNPTiIsInN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTiIsInNpZ25hdHVyZUpTT04iLCJzaWduYXR1cmVUb1NpZ25hdHVyZUpTT04iLCJoeXBvdGhlc2VzSlNPTiIsImh5cG90aGVzZXNUb0h5cG90aGVzZXNKU09OIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwiZnJvbUpTT04iLCJDbGFzcyIsImxhYmVsc0Zyb21KU09OIiwiZGVkdWN0aW9uRnJvbUpTT04iLCJzdXBwb3NpdGlvbnNGcm9tSlNPTiIsInNpZ25hdHVyZUZyb21KU09OIiwiaHlwb3RoZXNlc0Zyb21KU09OIiwiY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwiY2xhaW0iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQXFCQTs7O2VBQXFCQTs7OzJCQW5CVTtnQ0FDcUM7d0JBRUc7c0JBVXhCO0FBRS9DLE1BQU0sRUFBRUMsT0FBTyxFQUFFLEdBQUdDLHlCQUFjLEVBQzVCLEVBQUVDLEtBQUssRUFBRUMsT0FBTyxFQUFFQyxhQUFhLEVBQUVDLGNBQWMsRUFBRSxHQUFHQyxxQ0FBcUIsRUFDekUsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtBQUUvRCxNQUFNVixjQUFjVyx1QkFBTztJQUN4QyxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLE1BQU0sRUFBRUMsWUFBWSxFQUFFQyxTQUFTLEVBQUVDLEtBQUssRUFB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