occam-nominal 1.0.520 → 1.0.522

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.
@@ -53,12 +53,18 @@ const _default = (0, _elements.define)(class Constraint extends _occamlanguages.
53
53
  forward = cut(forward, back); ///
54
54
  const constraintString = this.getString(); ///
55
55
  context.trace(`Verifying the '${constraintString}' constraint...`);
56
- return (0, _state.declare)((state)=>{
57
- return this.validate(state, context, (constraint, context, back)=>{
58
- context.debug(`...verified the '${constraintString}' constraint.`);
59
- return forward(context, back);
60
- }, back);
61
- });
56
+ return isolate((context, forward, back)=>{
57
+ return (0, _context.pare)((context)=>{
58
+ return (0, _state.declare)((state)=>{
59
+ return this.validate(state, context, (constraint, context, back)=>{
60
+ return forward(back);
61
+ }, back);
62
+ });
63
+ }, context);
64
+ }, context, (context, back)=>{
65
+ context.debug(`...verified the '${constraintString}' constraint.`);
66
+ return forward(context, back);
67
+ }, back);
62
68
  });
63
69
  validate(state, context, forward, back) {
64
70
  let constraint;
@@ -89,34 +95,22 @@ const _default = (0, _elements.define)(class Constraint extends _occamlanguages.
89
95
  }, back);
90
96
  }
91
97
  validateReference(state, context, forward, back) {
92
- let referenceValidates;
93
98
  const constraintString = this.getString(); ///
94
99
  context.trace(`Validating the '${constraintString}' constraint's reference...`);
95
- referenceValidates = this.reference.validate(state, context, (reference, context)=>{
96
- let validates;
100
+ return this.reference.validate(state, context, (reference, context, back)=>{
97
101
  this.reference = reference;
98
- validates = continuation(state, context);
99
- return validates;
100
- });
101
- if (referenceValidates) {
102
- context.debug(`...validated the '${constraintString}' constraint's reference.`);
103
- }
104
- return referenceValidates;
102
+ context.trace(`...validated the '${constraintString}' constraint's reference.`);
103
+ return forward(state, context, back);
104
+ }, back);
105
105
  }
106
106
  validateStatement(state, context, forward, back) {
107
- let statementValidates;
108
107
  const constraintString = this.getString(); ///
109
108
  context.trace(`Validating the '${constraintString}' constraint's statement...`);
110
- statementValidates = this.statement.validate(state, context, (statement, context)=>{
111
- let validates;
109
+ return this.statement.validate(state, context, (statement, context, back)=>{
112
110
  this.statement = statement;
113
- validates = continuation(state, context);
114
- return validates;
115
- });
116
- if (statementValidates) {
117
- context.debug(`...validated the '${constraintString}' constraint's statement.`);
118
- }
119
- return statementValidates;
111
+ context.trace(`...validated the '${constraintString}' constraint's statement.`);
112
+ return forward(state, context, back);
113
+ }, back);
120
114
  }
121
115
  unifyReference(reference, generalContext, specificContext, forward, back) {
122
116
  const context = specificContext, referenceString = reference.getString(), constraintString = this.getString(); ///
@@ -250,4 +244,4 @@ function statementFromConstraintNode(constraintNode, context) {
250
244
  return statement;
251
245
  }
252
246
 
253
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NvbnN0cmFpbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBkZWNsYXJlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuaW1wb3J0IHsgdW5pZnlTdGF0ZW1lbnQgfSBmcm9tIFwiLi4vcHJvY2Vzcy91bmlmeVwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVDb25zdHJhaW50IH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHN0cmlwQnJhY2tldHNGcm9tU3RhdGVtZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9icmFja2V0c1wiO1xuaW1wb3J0IHsgY29uc3RyYWludEZyb21Db25zdHJhaW50Tm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHsgY29uc3RyYWludFN0cmluZ0Zyb21SZWZlcmVuY2VBbmRTdGF0ZW1lbnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgam9pbiwgYWJsYXRlLCBhdHRlbXB0LCByZWNvbmNpbGUsIHVuc2VyaWFsaXNlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5jb25zdCB7IHVuYnJlYWthYmxlIH0gPSBicmVha1BvaW50VXRpbGl0aWVzLFxuICAgICAgeyBjdXQsIGFsbCwgc29tZSwgaXNvbGF0ZSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQ29uc3RyYWludCBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgc3RhdGVtZW50KSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZTtcbiAgfVxuXG4gIGdldFN0YXRlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRDb25zdHJhaW50Tm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgY29uc3RyYWludE5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gY29uc3RyYWludE5vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7IHJldHVybiB0aGlzLnJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGlzRXF1YWxUbyhjb25zdHJhaW50KSB7XG4gICAgY29uc3QgY29uc3RyYWludE5vZGUgPSBjb25zdHJhaW50LmdldE5vZGUoKSxcbiAgICAgICAgICBjb25zdHJhaW50Tm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBjb25zdHJhaW50Tm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hDb25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBjb25zdHJhaW50Tm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBjb25zdHJhaW50Tm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gY29uc3RyYWludE5vZGVNYXRjaGVzO1xuICB9XG5cbiAgZmluZENvbnN0cmFpbnQoY29udGV4dCkge1xuICAgIGNvbnN0IGNvbnN0cmFpbnROb2RlID0gdGhpcy5nZXRDb25zdHJhaW50Tm9kZSgpLFxuICAgICAgICAgIGNvbnN0cmFpbnQgPSBjb250ZXh0LmZpbmRDb25zdHJhaW50QnlDb25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSk7XG5cbiAgICByZXR1cm4gY29uc3RyYWludDtcbiAgfVxuXG4gIHZlcmlmeSA9IHVuYnJlYWthYmxlKGZ1bmN0aW9uIChjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgZm9yd2FyZCA9IGN1dChmb3J3YXJkLCBiYWNrKTsgLy8vXG5cbiAgICBjb25zdCBjb25zdHJhaW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50Li4uYCk7XG5cbiAgICByZXR1cm4gZGVjbGFyZSgoc3RhdGUpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAoY29uc3RyYWludCwgY29udGV4dCAsIGJhY2spID0+IHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50LmApO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgICAgfSwgYmFjayk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IGNvbnN0cmFpbnQ7XG5cbiAgICBjb25zdCBjb25zdHJhaW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQuLi5gKTtcblxuICAgIGNvbnN0cmFpbnQgPSB0aGlzLmZpbmRDb25zdHJhaW50KGNvbnRleHQpO1xuXG4gICAgaWYgKGNvbnN0cmFpbnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludCBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnN0cmFpbnQsIGNvbnRleHQsIGJhY2spO1xuICAgIH1cblxuICAgIHJldHVybiBpc29sYXRlKChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgY29uc3RyYWludCA9IHRoaXM7ICAvLy9cblxuICAgICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgICByZXR1cm4gYXR0ZW1wdCgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgdmFsaWRhdGVSZWZlcmVuY2UgPSB0aGlzLnZhbGlkYXRlUmVmZXJlbmNlLmJpbmQodGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGFsbChbXG4gICAgICAgICAgdmFsaWRhdGVTdGF0ZW1lbnQsXG4gICAgICAgICAgdmFsaWRhdGVSZWZlcmVuY2VcbiAgICAgICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHRoaXMuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5hZGRDb25zdHJhaW50KGNvbnN0cmFpbnQpO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb25zdHJhaW50LCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlUmVmZXJlbmNlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IHJlZmVyZW5jZVZhbGlkYXRlcztcblxuICAgIGNvbnN0IGNvbnN0cmFpbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludCdzIHJlZmVyZW5jZS4uLmApO1xuXG4gICAgcmVmZXJlbmNlVmFsaWRhdGVzID0gdGhpcy5yZWZlcmVuY2UudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChyZWZlcmVuY2UsIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlZmVyZW5jZVZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludCdzIHJlZmVyZW5jZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlVmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVTdGF0ZW1lbnQoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzO1xuXG4gICAgY29uc3QgY29uc3RyYWludFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50J3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0aGlzLnN0YXRlbWVudC52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHN0YXRlbWVudCwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgdGhpcy5zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgfSk7XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50J3Mgc3RhdGVtZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXM7XG4gIH1cblxuICB1bmlmeVJlZmVyZW5jZShyZWZlcmVuY2UsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpLFxuICAgICAgICAgIGNvbnN0cmFpbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2Ugd2l0aCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQncyBtZXRhdmFyYWlhYmxlLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGUgPSB0aGlzLmdldE1ldGF2YXJpYWJsZSgpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZS51bmlmeVJlZmVyZW5jZShyZWZlcmVuY2UsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChyZWZlcmVuY2VVbmlmaWVzKSA9PiB7XG4gICAgICBpZiAocmVmZXJlbmNlVW5pZmllcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLnVuaWZpZWQgdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHdpdGggdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50J3MgbWV0YXZhcmlhYmxlLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHJlZmVyZW5jZVVuaWZpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBjb25zdHJhaW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50J3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBsZXQgc3BlY2lmaWNTdGF0ZW1lbnQ7XG5cbiAgICBzcGVjaWZpY1N0YXRlbWVudCA9IHN0YXRlbWVudDsgIC8vL1xuXG4gICAgc3BlY2lmaWNTdGF0ZW1lbnQgPSBzdHJpcEJyYWNrZXRzRnJvbVN0YXRlbWVudChzcGVjaWZpY1N0YXRlbWVudCwgY29udGV4dCk7ICAvLy9cblxuICAgIGNvbnN0IGdlbmVyYWxTdGF0ZW1lbnQgPSB0aGlzLnN0YXRlbWVudDsgIC8vL1xuXG4gICAgcmV0dXJuIHVuaWZ5U3RhdGVtZW50KGdlbmVyYWxTdGF0ZW1lbnQsIHNwZWNpZmljU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3RhdGVtZW50VW5pZmllcykgPT4ge1xuICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50J3Mgc3RhdGVtZW50LmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFVuaWZpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlBc3N1bXB0aW9uKGFzc3VtcHRpb24sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb25zdHJhaW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIGFzc3VtcHRpb25TdHJpbmcgPSBhc3N1bXB0aW9uLmdldFN0cmluZygpICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbiB3aXRoIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludC4uLmApO1xuXG4gICAgY29uc3QgY29uc3RyYWludENvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBjb25zdHJhaW50Q29udGV4dDsgLy8vXG5cbiAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCByZWZlcmVuY2UgPSBhc3N1bXB0aW9uLmdldFJlZmVyZW5jZSgpLFxuICAgICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICByZXR1cm4gdGhpcy51bmlmeVJlZmVyZW5jZShyZWZlcmVuY2UsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChyZWZlcmVuY2VVbmlmaWVzKSA9PiB7XG4gICAgICAgIGlmICghcmVmZXJlbmNlVW5pZmllcykge1xuICAgICAgICAgIGNvbnN0IGFzc3VtcHRpb25VbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGFzc3VtcHRpb25VbmlmaWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGFzc3VtcHRpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3RhdGVtZW50VW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBhc3N1bXB0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuY29tbWl0KCk7XG5cbiAgICAgICAgICAgIGFzc3VtcHRpb25VbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYXNzdW1wdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIHdpdGggdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50Li4uYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihhc3N1bXB0aW9uVW5pZmllcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeUFzc3VtcHRpb25zKGFzc3VtcHRpb25zLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29uc3RyYWludFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgYXNzdW1wdGlvbnMgd2l0aCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQuLi5gKTtcblxuICAgIHNvbWUoYXNzdW1wdGlvbnMsIChhc3N1bXB0aW9uLCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICB0aGlzLnVuaWZ5QXNzdW1wdGlvbihhc3N1bXB0aW9uLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKTtcbiAgICB9LCAoYXNzdW1wdGlvbnNVbmlmeSkgPT4ge1xuICAgICAgaWYgKGFzc3VtcHRpb25zVW5pZnkpIHtcbiAgICAgICAgY29udGV4dC50cmFjZShgLi4udW5pZmllZCB0aGUgYXNzdW1wdGlvbnMgd2l0aCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oYXNzdW1wdGlvbnNVbmlmeSk7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeUltcGxpY2l0QXNzdW1wdGlvbihpbXBsaWNpdEFzc3VtcHRpb24sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb25zdHJhaW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvblN0cmluZyA9IGltcGxpY2l0QXNzdW1wdGlvbi5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2ltcGxpY2l0QXNzdW1wdGlvblN0cmluZ30nIGltcGxpY2l0IGFzc3VtcHRpb24gd2l0aCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQuLi5gKTtcblxuICAgIGNvbnN0IGNvbnN0cmFpbnRDb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksIC8vL1xuICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbkNvbnRleHQgPSBpbXBsaWNpdEFzc3VtcHRpb24uZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gY29uc3RyYWludENvbnRleHQsIC8vL1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGltcGxpY2l0QXNzdW1wdGlvbkNvbnRleHQ7ICAvLy9cblxuICAgIHJldHVybiBqb2luKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBzdGF0ZW1lbnQgPSBpbXBsaWNpdEFzc3VtcHRpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3RhdGVtZW50VW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBpbXBsaWNpdEFzc3VtcHRpb25VbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uVW5pZmllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGltcGxpY2l0QXNzdW1wdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2ltcGxpY2l0QXNzdW1wdGlvblN0cmluZ30nIGltcGxsaWNpdCBhc3N1bXB0aW9uIHdpdGggdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50Li4uYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihpbXBsaWNpdEFzc3VtcHRpb25VbmlmaWVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeUltcGxpY2l0QXNzdW1wdGlvbnMoaW1wbGljaXRBc3N1bXB0aW9ucywgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNvbnN0cmFpbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlIGltcGxpY2l0IGFzc3VtcHRpb25zIHdpdGggdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50Li4uYCk7XG5cbiAgICBzb21lKGltcGxpY2l0QXNzdW1wdGlvbnMsIChpbXBsaWNpdEFzc3VtcHRpb24sIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMudW5pZnlJbXBsaWNpdEFzc3VtcHRpb24oaW1wbGljaXRBc3N1bXB0aW9uLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKTtcbiAgICB9LCAoaW1wbGljaXRBc3N1bXB0aW9uc1VuaWZ5KSA9PiB7XG4gICAgICBpZiAoaW1wbGljaXRBc3N1bXB0aW9uc1VuaWZ5KSB7XG4gICAgICAgIGNvbnRleHQudHJhY2UoYC4uLnVuaWZpZWQgdGhlIGltcGxpY2l0IGFzc3VtcHRpb25zIHdpdGggdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50LmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGltcGxpY2l0QXNzdW1wdGlvbnNVbmlmeSk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiQ29uc3RyYWludFwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IGNvbnN0cmFpbnQ7XG5cbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgdW5zZXJpYWxpc2UoKGpzb24sIGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIGNvbnN0cmFpbnROb2RlID0gaW5zdGFudGlhdGVDb25zdHJhaW50KHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBjb25zdHJhaW50Tm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KTtcblxuICAgICAgICBjb25zdHJhaW50ID0gbmV3IENvbnN0cmFpbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG4gICAgICB9LCBqc29uLCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBjb25zdHJhaW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGVwKHN0ZXAsIGNvbnRleHQpIHtcbiAgICBsZXQgY29uc3RyYWludDtcblxuICAgIGxldCBzdGF0ZW1lbnQ7XG5cbiAgICBzdGF0ZW1lbnQgPSBzdGVwLmdldFN0YXRlbWVudCgpO1xuXG4gICAgc3RhdGVtZW50ID0gc3RyaXBCcmFja2V0c0Zyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTsgLy8vXG5cbiAgICBjb25zdCByZWZlcmVuY2UgPSBzdGVwLmdldFJlZmVyZW5jZSgpO1xuXG4gICAgYWJsYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBjb25zdHJhaW50U3RyaW5nID0gY29uc3RyYWludFN0cmluZ0Zyb21SZWZlcmVuY2VBbmRTdGF0ZW1lbnQocmVmZXJlbmNlLCBzdGF0ZW1lbnQpLFxuICAgICAgICAgICAgICBzdHJpbmcgPSBjb25zdHJhaW50U3RyaW5nLCAgLy8vXG4gICAgICAgICAgICAgIGNvbnN0cmFpbnROb2RlID0gaW5zdGFudGlhdGVDb25zdHJhaW50KHN0cmluZywgY29udGV4dCk7XG5cbiAgICAgICAgY29uc3RyYWludCA9IGNvbnN0cmFpbnRGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29uc3RyYWludDtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHJlZmVyZW5jZUZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZWZlcmVuY2VOb2RlID0gY29uc3RyYWludE5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICByZWZlcm5lY2UgPSBjb250ZXh0LmZpbmRSZWZlcmVuY2VCeVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSk7XG5cbiAgcmV0dXJuIHJlZmVybmVjZTtcbn1cblxuZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb25zdHJhaW50Tm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuIl0sIm5hbWVzIjpbInVuYnJlYWthYmxlIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImN1dCIsImFsbCIsInNvbWUiLCJpc29sYXRlIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiQ29uc3RyYWludCIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJyZWZlcmVuY2UiLCJzdGF0ZW1lbnQiLCJnZXRSZWZlcmVuY2UiLCJnZXRTdGF0ZW1lbnQiLCJnZXRDb25zdHJhaW50Tm9kZSIsImdldE5vZGUiLCJjb25zdHJhaW50Tm9kZSIsImdldE1ldGF2YXJpYWJsZSIsImlzRXF1YWxUbyIsImNvbnN0cmFpbnQiLCJjb25zdHJhaW50Tm9kZU1hdGNoZXMiLCJtYXRjaENvbnN0cmFpbnROb2RlIiwiZXF1YWxUbyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwiZmluZENvbnN0cmFpbnQiLCJmaW5kQ29uc3RyYWludEJ5Q29uc3RyYWludE5vZGUiLCJ2ZXJpZnkiLCJmb3J3YXJkIiwiYmFjayIsImNvbnN0cmFpbnRTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlY2xhcmUiLCJzdGF0ZSIsInZhbGlkYXRlIiwiZGVidWciLCJnZXRDb250ZXh0IiwiYXR0ZW1wdCIsInZhbGlkYXRlU3RhdGVtZW50IiwiYmluZCIsInZhbGlkYXRlUmVmZXJlbmNlIiwiY29tbWl0IiwiYWRkQ29uc3RyYWludCIsInJlZmVyZW5jZVZhbGlkYXRlcyIsInZhbGlkYXRlcyIsImNvbnRpbnVhdGlvbiIsInN0YXRlbWVudFZhbGlkYXRlcyIsInVuaWZ5UmVmZXJlbmNlIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJyZWZlcmVuY2VTdHJpbmciLCJtZXRhdmFyaWFibGUiLCJyZWZlcmVuY2VVbmlmaWVzIiwidW5pZnlTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRTdHJpbmciLCJzcGVjaWZpY1N0YXRlbWVudCIsInN0cmlwQnJhY2tldHNGcm9tU3RhdGVtZW50IiwiZ2VuZXJhbFN0YXRlbWVudCIsInN0YXRlbWVudFVuaWZpZXMiLCJ1bmlmeUFzc3VtcHRpb24iLCJhc3N1bXB0aW9uIiwiYXNzdW1wdGlvblN0cmluZyIsImNvbnN0cmFpbnRDb250ZXh0IiwicmVjb25jaWxlIiwiYXNzdW1wdGlvblVuaWZpZXMiLCJ1bmlmeUFzc3VtcHRpb25zIiwiYXNzdW1wdGlvbnMiLCJhc3N1bXB0aW9uc1VuaWZ5IiwidW5pZnlJbXBsaWNpdEFzc3VtcHRpb24iLCJpbXBsaWNpdEFzc3VtcHRpb24iLCJpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmciLCJpbXBsaWNpdEFzc3VtcHRpb25Db250ZXh0Iiwiam9pbiIsImltcGxpY2l0QXNzdW1wdGlvblVuaWZpZXMiLCJ1bmlmeUltcGxpY2l0QXNzdW1wdGlvbnMiLCJpbXBsaWNpdEFzc3VtcHRpb25zIiwiaW1wbGljaXRBc3N1bXB0aW9uc1VuaWZ5IiwibmFtZSIsImZyb21KU09OIiwianNvbiIsImluc3RhbnRpYXRlIiwidW5zZXJpYWxpc2UiLCJpbnN0YW50aWF0ZUNvbnN0cmFpbnQiLCJyZWZlcmVuY2VGcm9tQ29uc3RyYWludE5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29uc3RyYWludE5vZGUiLCJmcm9tU3RlcCIsInN0ZXAiLCJhYmxhdGUiLCJjb25zdHJhaW50U3RyaW5nRnJvbVJlZmVyZW5jZUFuZFN0YXRlbWVudCIsImNvbnN0cmFpbnRGcm9tQ29uc3RyYWludE5vZGUiLCJyZWZlcmVuY2VOb2RlIiwiZ2V0UmVmZXJlbmNlTm9kZSIsInJlZmVybmVjZSIsImZpbmRSZWZlcmVuY2VCeVJlZmVyZW5jZU5vZGUiLCJzdGF0ZW1lbnROb2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWdCQTs7O2VBQUE7OztnQ0Fkb0U7MEJBRTdDO3VCQUNDO3VCQUNPOzZCQUNPOzBCQUNLO3lCQUNFO3dCQUNhO3lCQUNpQjtBQUUzRSxNQUFNLEVBQUVBLFdBQVcsRUFBRSxHQUFHQyxtQ0FBbUIsRUFDckMsRUFBRUMsR0FBRyxFQUFFQyxHQUFHLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFLEdBQUdDLHFDQUFxQjtNQUV6RCxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLG1CQUFt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
247
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NvbnN0cmFpbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBkZWNsYXJlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuaW1wb3J0IHsgdW5pZnlTdGF0ZW1lbnQgfSBmcm9tIFwiLi4vcHJvY2Vzcy91bmlmeVwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVDb25zdHJhaW50IH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHN0cmlwQnJhY2tldHNGcm9tU3RhdGVtZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9icmFja2V0c1wiO1xuaW1wb3J0IHsgY29uc3RyYWludEZyb21Db25zdHJhaW50Tm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHsgY29uc3RyYWludFN0cmluZ0Zyb21SZWZlcmVuY2VBbmRTdGF0ZW1lbnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgcGFyZSwgam9pbiwgYWJsYXRlLCBhdHRlbXB0LCByZWNvbmNpbGUsIHVuc2VyaWFsaXNlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5jb25zdCB7IHVuYnJlYWthYmxlIH0gPSBicmVha1BvaW50VXRpbGl0aWVzLFxuICAgICAgeyBjdXQsIGFsbCwgc29tZSwgaXNvbGF0ZSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQ29uc3RyYWludCBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgc3RhdGVtZW50KSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZTtcbiAgfVxuXG4gIGdldFN0YXRlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRDb25zdHJhaW50Tm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgY29uc3RyYWludE5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gY29uc3RyYWludE5vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7IHJldHVybiB0aGlzLnJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGlzRXF1YWxUbyhjb25zdHJhaW50KSB7XG4gICAgY29uc3QgY29uc3RyYWludE5vZGUgPSBjb25zdHJhaW50LmdldE5vZGUoKSxcbiAgICAgICAgICBjb25zdHJhaW50Tm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBjb25zdHJhaW50Tm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hDb25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBjb25zdHJhaW50Tm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBjb25zdHJhaW50Tm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gY29uc3RyYWludE5vZGVNYXRjaGVzO1xuICB9XG5cbiAgZmluZENvbnN0cmFpbnQoY29udGV4dCkge1xuICAgIGNvbnN0IGNvbnN0cmFpbnROb2RlID0gdGhpcy5nZXRDb25zdHJhaW50Tm9kZSgpLFxuICAgICAgICAgIGNvbnN0cmFpbnQgPSBjb250ZXh0LmZpbmRDb25zdHJhaW50QnlDb25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSk7XG5cbiAgICByZXR1cm4gY29uc3RyYWludDtcbiAgfVxuXG4gIHZlcmlmeSA9IHVuYnJlYWthYmxlKGZ1bmN0aW9uIChjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgZm9yd2FyZCA9IGN1dChmb3J3YXJkLCBiYWNrKTsgLy8vXG5cbiAgICBjb25zdCBjb25zdHJhaW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50Li4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIHBhcmUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgcmV0dXJuIGRlY2xhcmUoKHN0YXRlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChjb25zdHJhaW50LCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZm9yd2FyZChiYWNrKTtcbiAgICAgICAgICB9LCBiYWNrKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfSk7XG5cbiAgdmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgY29uc3RyYWludDtcblxuICAgIGNvbnN0IGNvbnN0cmFpbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludC4uLmApO1xuXG4gICAgY29uc3RyYWludCA9IHRoaXMuZmluZENvbnN0cmFpbnQoY29udGV4dCk7XG5cbiAgICBpZiAoY29uc3RyYWludCAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50IGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29uc3RyYWludCwgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzb2xhdGUoKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICBjb25zdHJhaW50ID0gdGhpczsgIC8vL1xuXG4gICAgICBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICAgIHJldHVybiBhdHRlbXB0KChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlU3RhdGVtZW50ID0gdGhpcy52YWxpZGF0ZVN0YXRlbWVudC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICB2YWxpZGF0ZVJlZmVyZW5jZSA9IHRoaXMudmFsaWRhdGVSZWZlcmVuY2UuYmluZCh0aGlzKTtcblxuICAgICAgICByZXR1cm4gYWxsKFtcbiAgICAgICAgICB2YWxpZGF0ZVN0YXRlbWVudCxcbiAgICAgICAgICB2YWxpZGF0ZVJlZmVyZW5jZVxuICAgICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgdGhpcy5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gZm9yd2FyZChiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9LCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmFkZENvbnN0cmFpbnQoY29uc3RyYWludCk7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnN0cmFpbnQsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGVSZWZlcmVuY2Uoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb25zdHJhaW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQncyByZWZlcmVuY2UuLi5gKTtcblxuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZS52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHJlZmVyZW5jZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQncyByZWZlcmVuY2UuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29uc3RyYWludFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50J3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50J3Mgc3RhdGVtZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeVJlZmVyZW5jZShyZWZlcmVuY2UsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpLFxuICAgICAgICAgIGNvbnN0cmFpbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2Ugd2l0aCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQncyBtZXRhdmFyYWlhYmxlLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGUgPSB0aGlzLmdldE1ldGF2YXJpYWJsZSgpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZS51bmlmeVJlZmVyZW5jZShyZWZlcmVuY2UsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChyZWZlcmVuY2VVbmlmaWVzKSA9PiB7XG4gICAgICBpZiAocmVmZXJlbmNlVW5pZmllcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLnVuaWZpZWQgdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHdpdGggdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50J3MgbWV0YXZhcmlhYmxlLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHJlZmVyZW5jZVVuaWZpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBjb25zdHJhaW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50J3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBsZXQgc3BlY2lmaWNTdGF0ZW1lbnQ7XG5cbiAgICBzcGVjaWZpY1N0YXRlbWVudCA9IHN0YXRlbWVudDsgIC8vL1xuXG4gICAgc3BlY2lmaWNTdGF0ZW1lbnQgPSBzdHJpcEJyYWNrZXRzRnJvbVN0YXRlbWVudChzcGVjaWZpY1N0YXRlbWVudCwgY29udGV4dCk7ICAvLy9cblxuICAgIGNvbnN0IGdlbmVyYWxTdGF0ZW1lbnQgPSB0aGlzLnN0YXRlbWVudDsgIC8vL1xuXG4gICAgcmV0dXJuIHVuaWZ5U3RhdGVtZW50KGdlbmVyYWxTdGF0ZW1lbnQsIHNwZWNpZmljU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3RhdGVtZW50VW5pZmllcykgPT4ge1xuICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50J3Mgc3RhdGVtZW50LmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFVuaWZpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlBc3N1bXB0aW9uKGFzc3VtcHRpb24sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb25zdHJhaW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIGFzc3VtcHRpb25TdHJpbmcgPSBhc3N1bXB0aW9uLmdldFN0cmluZygpICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbiB3aXRoIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludC4uLmApO1xuXG4gICAgY29uc3QgY29uc3RyYWludENvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBjb25zdHJhaW50Q29udGV4dDsgLy8vXG5cbiAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCByZWZlcmVuY2UgPSBhc3N1bXB0aW9uLmdldFJlZmVyZW5jZSgpLFxuICAgICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICByZXR1cm4gdGhpcy51bmlmeVJlZmVyZW5jZShyZWZlcmVuY2UsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChyZWZlcmVuY2VVbmlmaWVzKSA9PiB7XG4gICAgICAgIGlmICghcmVmZXJlbmNlVW5pZmllcykge1xuICAgICAgICAgIGNvbnN0IGFzc3VtcHRpb25VbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGFzc3VtcHRpb25VbmlmaWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGFzc3VtcHRpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3RhdGVtZW50VW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBhc3N1bXB0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuY29tbWl0KCk7XG5cbiAgICAgICAgICAgIGFzc3VtcHRpb25VbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYXNzdW1wdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIHdpdGggdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50Li4uYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihhc3N1bXB0aW9uVW5pZmllcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeUFzc3VtcHRpb25zKGFzc3VtcHRpb25zLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29uc3RyYWludFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgYXNzdW1wdGlvbnMgd2l0aCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQuLi5gKTtcblxuICAgIHNvbWUoYXNzdW1wdGlvbnMsIChhc3N1bXB0aW9uLCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICB0aGlzLnVuaWZ5QXNzdW1wdGlvbihhc3N1bXB0aW9uLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKTtcbiAgICB9LCAoYXNzdW1wdGlvbnNVbmlmeSkgPT4ge1xuICAgICAgaWYgKGFzc3VtcHRpb25zVW5pZnkpIHtcbiAgICAgICAgY29udGV4dC50cmFjZShgLi4udW5pZmllZCB0aGUgYXNzdW1wdGlvbnMgd2l0aCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oYXNzdW1wdGlvbnNVbmlmeSk7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeUltcGxpY2l0QXNzdW1wdGlvbihpbXBsaWNpdEFzc3VtcHRpb24sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb25zdHJhaW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvblN0cmluZyA9IGltcGxpY2l0QXNzdW1wdGlvbi5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2ltcGxpY2l0QXNzdW1wdGlvblN0cmluZ30nIGltcGxpY2l0IGFzc3VtcHRpb24gd2l0aCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQuLi5gKTtcblxuICAgIGNvbnN0IGNvbnN0cmFpbnRDb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksIC8vL1xuICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbkNvbnRleHQgPSBpbXBsaWNpdEFzc3VtcHRpb24uZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gY29uc3RyYWludENvbnRleHQsIC8vL1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGltcGxpY2l0QXNzdW1wdGlvbkNvbnRleHQ7ICAvLy9cblxuICAgIHJldHVybiBqb2luKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBzdGF0ZW1lbnQgPSBpbXBsaWNpdEFzc3VtcHRpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3RhdGVtZW50VW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBpbXBsaWNpdEFzc3VtcHRpb25VbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uVW5pZmllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGltcGxpY2l0QXNzdW1wdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2ltcGxpY2l0QXNzdW1wdGlvblN0cmluZ30nIGltcGxsaWNpdCBhc3N1bXB0aW9uIHdpdGggdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50Li4uYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihpbXBsaWNpdEFzc3VtcHRpb25VbmlmaWVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeUltcGxpY2l0QXNzdW1wdGlvbnMoaW1wbGljaXRBc3N1bXB0aW9ucywgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNvbnN0cmFpbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlIGltcGxpY2l0IGFzc3VtcHRpb25zIHdpdGggdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50Li4uYCk7XG5cbiAgICBzb21lKGltcGxpY2l0QXNzdW1wdGlvbnMsIChpbXBsaWNpdEFzc3VtcHRpb24sIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMudW5pZnlJbXBsaWNpdEFzc3VtcHRpb24oaW1wbGljaXRBc3N1bXB0aW9uLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKTtcbiAgICB9LCAoaW1wbGljaXRBc3N1bXB0aW9uc1VuaWZ5KSA9PiB7XG4gICAgICBpZiAoaW1wbGljaXRBc3N1bXB0aW9uc1VuaWZ5KSB7XG4gICAgICAgIGNvbnRleHQudHJhY2UoYC4uLnVuaWZpZWQgdGhlIGltcGxpY2l0IGFzc3VtcHRpb25zIHdpdGggdGhlICcke2NvbnN0cmFpbnRTdHJpbmd9JyBjb25zdHJhaW50LmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGltcGxpY2l0QXNzdW1wdGlvbnNVbmlmeSk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiQ29uc3RyYWludFwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IGNvbnN0cmFpbnQ7XG5cbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgdW5zZXJpYWxpc2UoKGpzb24sIGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIGNvbnN0cmFpbnROb2RlID0gaW5zdGFudGlhdGVDb25zdHJhaW50KHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBjb25zdHJhaW50Tm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KTtcblxuICAgICAgICBjb25zdHJhaW50ID0gbmV3IENvbnN0cmFpbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG4gICAgICB9LCBqc29uLCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBjb25zdHJhaW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGVwKHN0ZXAsIGNvbnRleHQpIHtcbiAgICBsZXQgY29uc3RyYWludDtcblxuICAgIGxldCBzdGF0ZW1lbnQ7XG5cbiAgICBzdGF0ZW1lbnQgPSBzdGVwLmdldFN0YXRlbWVudCgpO1xuXG4gICAgc3RhdGVtZW50ID0gc3RyaXBCcmFja2V0c0Zyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTsgLy8vXG5cbiAgICBjb25zdCByZWZlcmVuY2UgPSBzdGVwLmdldFJlZmVyZW5jZSgpO1xuXG4gICAgYWJsYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBjb25zdHJhaW50U3RyaW5nID0gY29uc3RyYWludFN0cmluZ0Zyb21SZWZlcmVuY2VBbmRTdGF0ZW1lbnQocmVmZXJlbmNlLCBzdGF0ZW1lbnQpLFxuICAgICAgICAgICAgICBzdHJpbmcgPSBjb25zdHJhaW50U3RyaW5nLCAgLy8vXG4gICAgICAgICAgICAgIGNvbnN0cmFpbnROb2RlID0gaW5zdGFudGlhdGVDb25zdHJhaW50KHN0cmluZywgY29udGV4dCk7XG5cbiAgICAgICAgY29uc3RyYWludCA9IGNvbnN0cmFpbnRGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29uc3RyYWludDtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHJlZmVyZW5jZUZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZWZlcmVuY2VOb2RlID0gY29uc3RyYWludE5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICByZWZlcm5lY2UgPSBjb250ZXh0LmZpbmRSZWZlcmVuY2VCeVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSk7XG5cbiAgcmV0dXJuIHJlZmVybmVjZTtcbn1cblxuZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb25zdHJhaW50Tm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuIl0sIm5hbWVzIjpbInVuYnJlYWthYmxlIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImN1dCIsImFsbCIsInNvbWUiLCJpc29sYXRlIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiQ29uc3RyYWludCIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJyZWZlcmVuY2UiLCJzdGF0ZW1lbnQiLCJnZXRSZWZlcmVuY2UiLCJnZXRTdGF0ZW1lbnQiLCJnZXRDb25zdHJhaW50Tm9kZSIsImdldE5vZGUiLCJjb25zdHJhaW50Tm9kZSIsImdldE1ldGF2YXJpYWJsZSIsImlzRXF1YWxUbyIsImNvbnN0cmFpbnQiLCJjb25zdHJhaW50Tm9kZU1hdGNoZXMiLCJtYXRjaENvbnN0cmFpbnROb2RlIiwiZXF1YWxUbyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwiZmluZENvbnN0cmFpbnQiLCJmaW5kQ29uc3RyYWludEJ5Q29uc3RyYWludE5vZGUiLCJ2ZXJpZnkiLCJmb3J3YXJkIiwiYmFjayIsImNvbnN0cmFpbnRTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInBhcmUiLCJkZWNsYXJlIiwic3RhdGUiLCJ2YWxpZGF0ZSIsImRlYnVnIiwiZ2V0Q29udGV4dCIsImF0dGVtcHQiLCJ2YWxpZGF0ZVN0YXRlbWVudCIsImJpbmQiLCJ2YWxpZGF0ZVJlZmVyZW5jZSIsImNvbW1pdCIsImFkZENvbnN0cmFpbnQiLCJ1bmlmeVJlZmVyZW5jZSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwicmVmZXJlbmNlU3RyaW5nIiwibWV0YXZhcmlhYmxlIiwicmVmZXJlbmNlVW5pZmllcyIsImNvbnRpbnVhdGlvbiIsInVuaWZ5U3RhdGVtZW50Iiwic3RhdGVtZW50U3RyaW5nIiwic3BlY2lmaWNTdGF0ZW1lbnQiLCJzdHJpcEJyYWNrZXRzRnJvbVN0YXRlbWVudCIsImdlbmVyYWxTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRVbmlmaWVzIiwidW5pZnlBc3N1bXB0aW9uIiwiYXNzdW1wdGlvbiIsImFzc3VtcHRpb25TdHJpbmciLCJjb25zdHJhaW50Q29udGV4dCIsInJlY29uY2lsZSIsImFzc3VtcHRpb25VbmlmaWVzIiwidW5pZnlBc3N1bXB0aW9ucyIsImFzc3VtcHRpb25zIiwiYXNzdW1wdGlvbnNVbmlmeSIsInVuaWZ5SW1wbGljaXRBc3N1bXB0aW9uIiwiaW1wbGljaXRBc3N1bXB0aW9uIiwiaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nIiwiaW1wbGljaXRBc3N1bXB0aW9uQ29udGV4dCIsImpvaW4iLCJpbXBsaWNpdEFzc3VtcHRpb25VbmlmaWVzIiwidW5pZnlJbXBsaWNpdEFzc3VtcHRpb25zIiwiaW1wbGljaXRBc3N1bXB0aW9ucyIsImltcGxpY2l0QXNzdW1wdGlvbnNVbmlmeSIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iLCJpbnN0YW50aWF0ZSIsInVuc2VyaWFsaXNlIiwiaW5zdGFudGlhdGVDb25zdHJhaW50IiwicmVmZXJlbmNlRnJvbUNvbnN0cmFpbnROb2RlIiwic3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlIiwiZnJvbVN0ZXAiLCJzdGVwIiwiYWJsYXRlIiwiY29uc3RyYWludFN0cmluZ0Zyb21SZWZlcmVuY2VBbmRTdGF0ZW1lbnQiLCJjb25zdHJhaW50RnJvbUNvbnN0cmFpbnROb2RlIiwicmVmZXJlbmNlTm9kZSIsImdldFJlZmVyZW5jZU5vZGUiLCJyZWZlcm5lY2UiLCJmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlIiwic3RhdGVtZW50Tm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFnQkE7OztlQUFBOzs7Z0NBZG9FOzBCQUU3Qzt1QkFDQzt1QkFDTzs2QkFDTzswQkFDSzt5QkFDRTt3QkFDYTt5QkFDdUI7QUFFakYsTUFBTSxFQUFFQSxXQUFXLEVBQUUsR0FBR0MsbUNBQW1CLEVBQ3JDLEVBQUVDLEdBQUcsRUFBRUMsR0FBRyxFQUFFQyxJQUFJLEVBQUVDLE9BQU8sRUFBRSxHQUFHQyxxQ0FBcUI7TUFFekQsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxtQkFBbUJDLHVCQUFPO0lBQ3BELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxTQUFTLENBQUU7UUFDbkUsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLFNBQVMsR0FBR0E7UUFDakIsSUFB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
@@ -12,37 +12,25 @@ const _occamlanguages = require("occam-languages");
12
12
  const _elements = require("../elements");
13
13
  const _context = require("../utilities/context");
14
14
  const _instantiate = require("../process/instantiate");
15
- const _metaTypeNames = require("../metaTypeNames");
16
15
  const _element = require("../utilities/element");
17
- const { breakPointFromJSON, breakPointToBreakPointJSON } = _occamlanguages.breakPointUtilities;
16
+ const _metaTypeNames = require("../metaTypeNames");
17
+ const { all, every } = _occamlanguages.continuationUtilities, { breakPointFromJSON, breakPointToBreakPointJSON } = _occamlanguages.breakPointUtilities;
18
18
  const _default = (0, _elements.define)(class Frame extends _occamlanguages.Element {
19
- constructor(context, string, node, breakPoint, assumptions, metavariable){
19
+ constructor(context, string, node, breakPoint, link, assumptions){
20
20
  super(context, string, node, breakPoint);
21
+ this.link = link;
21
22
  this.assumptions = assumptions;
22
- this.metavariable = metavariable;
23
+ }
24
+ getLink() {
25
+ return this.link;
23
26
  }
24
27
  getAssumptions() {
25
28
  return this.assumptions;
26
29
  }
27
- getMetavariable() {
28
- return this.metavariable;
29
- }
30
30
  getFrameNode() {
31
31
  const node = this.getNode(), frameNode = node; ///
32
32
  return frameNode;
33
33
  }
34
- getMetavariableNode() {
35
- const frameNode = this.getFrameNode(), metavariableNode = frameNode.getMetavariableNode();
36
- return metavariableNode;
37
- }
38
- getMetavariableName() {
39
- let metavariableName = null;
40
- const singular = this.isSingular();
41
- if (singular) {
42
- metavariableName = this.metavariable.getName();
43
- }
44
- return metavariableName;
45
- }
46
34
  isEqualTo(frame) {
47
35
  const frameNode = frame.getNode(), frameNodeMatches = this.matchFrameNode(frameNode), equalTo = frameNodeMatches; ///
48
36
  return equalTo;
@@ -59,116 +47,74 @@ const _default = (0, _elements.define)(class Frame extends _occamlanguages.Eleme
59
47
  const node = frameNode, nodeMatches = this.matchNode(node), frameNodeMatches = nodeMatches; ///
60
48
  return frameNodeMatches;
61
49
  }
62
- matchMetavariableNode(metavariableNode) {
63
- let metavariableNodeMatches = false;
64
- const singular = this.isSingular();
65
- if (singular) {
66
- metavariableNodeMatches = this.metavariable.matchMetavariableNode(metavariableNode);
67
- }
68
- return metavariableNodeMatches;
69
- }
70
- compareParameter(parameter) {
71
- let comparesToParamter = false;
72
- const singular = this.isSingular();
73
- if (singular) {
74
- const parameterName = parameter.getName();
75
- if (parameterName !== null) {
76
- const metavariableName = this.getMetavariableName();
77
- if (parameterName === metavariableName) {
78
- comparesToParamter = true;
79
- }
80
- }
81
- }
82
- return comparesToParamter;
83
- }
84
50
  findFrame(context) {
85
51
  const frameNode = this.getFrameNode(), frame = context.findFrameByFrameNode(frameNode);
86
52
  return frame;
87
53
  }
88
- validate(state, context, continuation) {
89
- let validates;
54
+ validate(state, context, forward, back) {
55
+ let frame;
90
56
  const frameString = this.getString(); ///
91
57
  context.trace(`Validating the '${frameString}' frame...`);
92
- let frame;
93
58
  frame = this.findFrame(context);
94
59
  if (frame !== null) {
95
60
  context.debug(`The '${frameString}' frame is already present.`);
96
- validates = continuation(frame, context);
97
- } else {
98
- frame = this; ///
99
- const validateAssumptions = this.validateAssumptions.bind(this), validateMetavariable = this.validateMetavariable.bind(this);
100
- validates = all([
101
- validateMetavariable,
102
- validateAssumptions
103
- ], state, context, (state, context)=>{
104
- let validates;
105
- context.addFrame(frame);
106
- validates = continuation(frame, context);
107
- return validates;
108
- });
61
+ return forward(frame, context, back);
109
62
  }
110
- if (validates) {
63
+ frame = this; ///
64
+ const validateLink = this.validateLink.bind(this), validateAssumptions = this.validateAssumptions.bind(this);
65
+ return all([
66
+ validateLink,
67
+ validateAssumptions
68
+ ], state, context, (state, context, back)=>{
69
+ context.addFrame(frame);
111
70
  context.debug(`...validated the '${frameString}' frame.`);
112
- }
113
- return validates;
71
+ return forward(frame, context, back);
72
+ }, back);
114
73
  }
115
- validateAssumption(assumption, assumptions, state, context, continuation) {
116
- let assumptionValidates;
74
+ validateLink(state, context, forward, back) {
75
+ const frameString = this.getString(); ///
76
+ context.trace(`Validating the '${frameString}' frame's link...`);
77
+ return this.link.validate(state, context, (link, context, back)=>{
78
+ const metaType = link.getMetaType(), linkString = link.getString();
79
+ if (metaType === null) {
80
+ context.debug(`The '${frameString}' frame's '${linkString}' link does not have a type.`);
81
+ return back();
82
+ }
83
+ const frameMetaTypeName = _metaTypeNames.FRAME_META_TYPE_NAME, frameMetaType = context.findMetaTypeByMetaTypeName(frameMetaTypeName), linkMetaTypeEqualToFrameMetaType = link.isMetaTypeEqualTo(frameMetaType);
84
+ if (!linkMetaTypeEqualToFrameMetaType) {
85
+ const metaTypeString = metaType.getString(), frameMetaTypeString = frameMetaType.getString();
86
+ context.debug(`The '${frameString}' frame's '${linkString}' link's '${metaTypeString}' meta-type should be the '${frameMetaTypeString}' meta-type.`);
87
+ return back();
88
+ }
89
+ this.link = link;
90
+ context.debug(`...validated the '${frameString}' frame's link.'`);
91
+ return forward(state, context, back);
92
+ }, back);
93
+ }
94
+ validateAssumption(assumption, assumptions, state, context, forward, back) {
117
95
  const frameString = this.getString(), assumptionString = assumption.getString();
118
96
  context.trace(`Validating the '${frameString}' frame's '${assumptionString}' assumption...`);
119
- assumptionValidates = assumption.validate(state, context, (assumption, context)=>{
120
- let validates;
97
+ return assumption.validate(state, context, (assumption, context)=>{
121
98
  assumptions.push(assumption);
122
- validates = continuation(assumptions, state, context);
123
- return validates;
124
- });
125
- if (assumptionValidates) {
126
99
  context.debug(`...validated the '${frameString}' frame's '${assumptionString}' assumption.`);
127
- }
128
- return assumptionValidates;
100
+ return forward(assumptions, state, context, back);
101
+ }, back);
129
102
  }
130
- validateAssumptions(state, context, continuation) {
131
- let assumptionsValidate;
103
+ validateAssumptions(state, context, forward, back) {
104
+ const assumptionsLength = this.assumptions.length;
105
+ if (assumptionsLength === 0) {
106
+ return forward(state, context, back);
107
+ }
132
108
  const frameString = this.getString(); ///
133
109
  context.trace(`Validating the '${frameString}' frame's assumptions...`);
134
- const assumptions = [], validateAssumption = this.validateAssumption.bind(this);
135
- assumptionsValidate = every(this.assumptions, validateAssumption, assumptions, state, context, (assumptions, state, context)=>{
136
- let assumptionsValidate;
110
+ const assumptions = [];
111
+ return every(this.assumptions, (assumption, assumptions, state, context, forward, back)=>{
112
+ return this.validateAssumption(assumption, assumptions, state, context, forward, back);
113
+ }, assumptions, state, context, (assumptions, state, context, back)=>{
137
114
  this.assumptions = assumptions;
138
- assumptionsValidate = continuation(state, context);
139
- return assumptionsValidate;
140
- });
141
- if (assumptionsValidate) {
142
115
  context.debug(`...validates the '${frameString}' frame's assumptions.`);
143
- }
144
- return assumptionsValidate;
145
- }
146
- validateMetavariable(state, context, continuation) {
147
- let metavariableValidates;
148
- const frameString = this.getString(); ///
149
- context.trace(`Validating the '${frameString}' frame's metavariable...`);
150
- metavariableValidates = this.metavariable.validate(state, context, (metavariable, context)=>{
151
- let validates = false;
152
- const metaType = metavariable.getMetaType();
153
- if (metaType !== null) {
154
- const frameMetaTypeName = _metaTypeNames.FRAME_META_TYPE_NAME, frameMetaType = context.findMetaTypeByMetaTypeName(frameMetaTypeName), metavariableMetaTypeEqualToFrameMetaType = metavariable.isMetaTypeEqualTo(frameMetaType);
155
- if (metavariableMetaTypeEqualToFrameMetaType) {
156
- validates = true;
157
- } else {
158
- const metaTypeString = metaType.getString(), metavariableString = metavariable.getString(), frameMetaTypeString = frameMetaType.getString();
159
- context.debug(`The '${frameString}' frame's '${metavariableString}' metavariable's '${metaTypeString}' meta-type should be the '${frameMetaTypeString}' meta-type.`);
160
- }
161
- }
162
- if (validates) {
163
- this.metavariable = metavariable;
164
- validates = continuation(state, context);
165
- }
166
- return validates;
167
- });
168
- if (metavariableValidates) {
169
- context.debug(`...validates the '${frameString}' frame's metavariable.`);
170
- }
171
- return metavariableValidates;
116
+ return forward(state, context, back);
117
+ }, back);
172
118
  }
173
119
  toJSON() {
174
120
  let json;
@@ -187,9 +133,9 @@ const _default = (0, _elements.define)(class Frame extends _occamlanguages.Eleme
187
133
  static fromJSON(json, context) {
188
134
  let frame;
189
135
  (0, _context.instantiate)((context)=>{
190
- const { string } = json, frameNode = (0, _instantiate.instantiateFrame)(string, context), node = frameNode, breakPoint = breakPointFromJSON(json), assumptions = assumptionsFromFrameNode(frameNode, context), metavariable = (0, _element.metavariableFromFrameNode)(frameNode, context);
136
+ const { string } = json, frameNode = (0, _instantiate.instantiateFrame)(string, context), node = frameNode, breakPoint = breakPointFromJSON(json), link = (0, _element.linkFromFrameNode)(frameNode, context), assumptions = assumptionsFromFrameNode(frameNode, context);
191
137
  context = null;
192
- frame = new Frame(context, string, node, breakPoint, assumptions, metavariable);
138
+ frame = new Frame(context, string, node, breakPoint, link, assumptions);
193
139
  }, context);
194
140
  return frame;
195
141
  }
@@ -202,4 +148,4 @@ function assumptionsFromFrameNode(frameNode, context) {
202
148
  return assumptions;
203
149
  }
204
150
 
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2ZyYW1lLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUZyYW1lIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IEZSQU1FX01FVEFfVFlQRV9OQU1FIH0gZnJvbSBcIi4uL21ldGFUeXBlTmFtZXNcIjtcbmltcG9ydCB7IG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuY29uc3QgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgRnJhbWUgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMuYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9ucztcbiAgICB0aGlzLm1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGdldEFzc3VtcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmFzc3VtcHRpb25zO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLm1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGdldEZyYW1lTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgZnJhbWVOb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gZnJhbWVOb2RlO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlTm9kZSgpIHtcbiAgICBjb25zdCBmcmFtZU5vZGUgPSB0aGlzLmdldEZyYW1lTm9kZSgpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBmcmFtZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZU5vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOYW1lKCkge1xuICAgIGxldCBtZXRhdmFyaWFibGVOYW1lID0gbnVsbDtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIG1ldGF2YXJpYWJsZU5hbWUgPSB0aGlzLm1ldGF2YXJpYWJsZS5nZXROYW1lKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZU5hbWU7XG4gIH1cblxuICBpc0VxdWFsVG8oZnJhbWUpIHtcbiAgICBjb25zdCBmcmFtZU5vZGUgPSBmcmFtZS5nZXROb2RlKCksXG4gICAgICAgICAgZnJhbWVOb2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hGcmFtZU5vZGUoZnJhbWVOb2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gZnJhbWVOb2RlTWF0Y2hlczsgIC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICBpc0ltcGxpY2l0KCkge1xuICAgIGNvbnN0IGltcGxpY2l0ID0gKHRoaXMubWV0YXZhcmlhYmxlICE9PSBudWxsKTtcblxuICAgIHJldHVybiBpbXBsaWNpdDtcbiAgfVxuXG4gIGlzU2luZ3VsYXIoKSB7XG4gICAgY29uc3QgZnJhbWVOb2RlID0gdGhpcy5nZXRGcmFtZU5vZGUoKSxcbiAgICAgICAgICBzaW5ndWxhciA9IGZyYW1lTm9kZS5pc1Npbmd1bGFyKCk7XG5cbiAgICByZXR1cm4gc2luZ3VsYXI7XG4gIH1cblxuICBtYXRjaEZyYW1lTm9kZShmcmFtZU5vZGUpIHtcbiAgICBjb25zdCBub2RlID0gZnJhbWVOb2RlLCAvLy9cbiAgICAgICAgICBub2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hOb2RlKG5vZGUpLFxuICAgICAgICAgIGZyYW1lTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gZnJhbWVOb2RlTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgbGV0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBzaW5ndWxhciA9IHRoaXMuaXNTaW5ndWxhcigpO1xuXG4gICAgaWYgKHNpbmd1bGFyKSB7XG4gICAgICBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHRoaXMubWV0YXZhcmlhYmxlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXM7XG4gIH1cblxuICBjb21wYXJlUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuICAgIGxldCBjb21wYXJlc1RvUGFyYW10ZXIgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXIuZ2V0TmFtZSgpO1xuXG4gICAgICBpZiAocGFyYW1ldGVyTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gdGhpcy5nZXRNZXRhdmFyaWFibGVOYW1lKCk7XG5cbiAgICAgICAgaWYgKHBhcmFtZXRlck5hbWUgPT09IG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICAgICAgICBjb21wYXJlc1RvUGFyYW10ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9QYXJhbXRlcjtcbiAgfVxuXG4gIGZpbmRGcmFtZShjb250ZXh0KSB7XG4gICAgY29uc3QgZnJhbWVOb2RlID0gdGhpcy5nZXRGcmFtZU5vZGUoKSxcbiAgICAgICAgICBmcmFtZSA9IGNvbnRleHQuZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKTtcblxuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgY29uc3QgZnJhbWVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lLi4uYCk7XG5cbiAgICBsZXQgZnJhbWU7XG5cbiAgICBmcmFtZSA9IHRoaXMuZmluZEZyYW1lKGNvbnRleHQpO1xuXG4gICAgaWYgKGZyYW1lICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihmcmFtZSwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZyYW1lID0gdGhpczsgLy8vXG5cbiAgICAgIGNvbnN0IHZhbGlkYXRlQXNzdW1wdGlvbnMgPSB0aGlzLnZhbGlkYXRlQXNzdW1wdGlvbnMuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlTWV0YXZhcmlhYmxlID0gdGhpcy52YWxpZGF0ZU1ldGF2YXJpYWJsZS5iaW5kKHRoaXMpO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBhbGwoW1xuICAgICAgICB2YWxpZGF0ZU1ldGF2YXJpYWJsZSxcbiAgICAgICAgdmFsaWRhdGVBc3N1bXB0aW9uc1xuICAgICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICAgIGNvbnRleHQuYWRkRnJhbWUoZnJhbWUpO1xuXG4gICAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihmcmFtZSwgY29udGV4dCk7XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVBc3N1bXB0aW9uKGFzc3VtcHRpb24sIGFzc3VtcHRpb25zLCBzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IGFzc3VtcHRpb25WYWxpZGF0ZXM7XG5cbiAgICBjb25zdCBmcmFtZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBhc3N1bXB0aW9uU3RyaW5nID0gYXNzdW1wdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUncyAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbi4uLmApO1xuXG4gICAgYXNzdW1wdGlvblZhbGlkYXRlcyA9IGFzc3VtcHRpb24udmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChhc3N1bXB0aW9uLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICBhc3N1bXB0aW9ucy5wdXNoKGFzc3VtcHRpb24pO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oYXNzdW1wdGlvbnMsIHN0YXRlLCBjb250ZXh0KTtcblxuICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICB9KTtcblxuICAgIGlmIChhc3N1bXB0aW9uVmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUncyAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvblZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlQXNzdW1wdGlvbnMoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCBhc3N1bXB0aW9uc1ZhbGlkYXRlO1xuXG4gICAgY29uc3QgZnJhbWVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lJ3MgYXNzdW1wdGlvbnMuLi5gKTtcblxuICAgIGNvbnN0IGFzc3VtcHRpb25zID0gW10sXG4gICAgICAgICAgdmFsaWRhdGVBc3N1bXB0aW9uID0gdGhpcy52YWxpZGF0ZUFzc3VtcHRpb24uYmluZCh0aGlzKTtcblxuICAgIGFzc3VtcHRpb25zVmFsaWRhdGUgPSBldmVyeSh0aGlzLmFzc3VtcHRpb25zLCB2YWxpZGF0ZUFzc3VtcHRpb24sIGFzc3VtcHRpb25zLCBzdGF0ZSwgY29udGV4dCwgKGFzc3VtcHRpb25zLCBzdGF0ZSwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IGFzc3VtcHRpb25zVmFsaWRhdGU7XG5cbiAgICAgIHRoaXMuYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9ucztcblxuICAgICAgYXNzdW1wdGlvbnNWYWxpZGF0ZSA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiBhc3N1bXB0aW9uc1ZhbGlkYXRlO1xuICAgIH0pO1xuXG4gICAgaWYgKGFzc3VtcHRpb25zVmFsaWRhdGUpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlcyB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSdzIGFzc3VtcHRpb25zLmApO1xuICAgIH1cblxuICAgIHJldHVybiBhc3N1bXB0aW9uc1ZhbGlkYXRlO1xuICB9XG5cbiAgdmFsaWRhdGVNZXRhdmFyaWFibGUoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCBtZXRhdmFyaWFibGVWYWxpZGF0ZXM7XG5cbiAgICBjb25zdCBmcmFtZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUncyBtZXRhdmFyaWFibGUuLi5gKTtcblxuICAgIG1ldGF2YXJpYWJsZVZhbGlkYXRlcyA9IHRoaXMubWV0YXZhcmlhYmxlLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAobWV0YXZhcmlhYmxlLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IG1ldGFUeXBlID0gbWV0YXZhcmlhYmxlLmdldE1ldGFUeXBlKCk7XG5cbiAgICAgIGlmIChtZXRhVHlwZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBmcmFtZU1ldGFUeXBlTmFtZSA9IEZSQU1FX01FVEFfVFlQRV9OQU1FLFxuICAgICAgICAgICAgICBmcmFtZU1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShmcmFtZU1ldGFUeXBlTmFtZSksXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU1ldGFUeXBlRXF1YWxUb0ZyYW1lTWV0YVR5cGUgPSBtZXRhdmFyaWFibGUuaXNNZXRhVHlwZUVxdWFsVG8oZnJhbWVNZXRhVHlwZSk7XG5cbiAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU1ldGFUeXBlRXF1YWxUb0ZyYW1lTWV0YVR5cGUpIHtcbiAgICAgICAgICB2YWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG1ldGFUeXBlU3RyaW5nID0gbWV0YVR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICAgICAgICAgIGZyYW1lTWV0YVR5cGVTdHJpbmcgPSBmcmFtZU1ldGFUeXBlLmdldFN0cmluZygpO1xuXG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUncyAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUncyAnJHttZXRhVHlwZVN0cmluZ30nIG1ldGEtdHlwZSBzaG91bGQgYmUgdGhlICcke2ZyYW1lTWV0YVR5cGVTdHJpbmd9JyBtZXRhLXR5cGUuYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICB0aGlzLm1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZTtcblxuICAgICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgIH0pO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZVZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lJ3MgbWV0YXZhcmlhYmxlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVWYWxpZGF0ZXM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgbGV0IGpzb247XG5cbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJGcmFtZVwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IGZyYW1lO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgZnJhbWVOb2RlID0gaW5zdGFudGlhdGVGcmFtZShzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgbm9kZSA9IGZyYW1lTm9kZSwgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgIGZyYW1lID0gbmV3IEZyYW1lKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZSk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25Ob2RlcyA9IGZyYW1lTm9kZS5nZXRBc3N1bXB0aW9uTm9kZXMoKSxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uTm9kZXMubWFwKChhc3N1bXB0aW9uTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFzc3VtcHRpb24gPSBjb250ZXh0LmZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSk7XG5cbiAgICAgICAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuIl0sIm5hbWVzIjpbImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkZyYW1lIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsImFzc3VtcHRpb25zIiwibWV0YXZhcmlhYmxlIiwiZ2V0QXNzdW1wdGlvbnMiLCJnZXRNZXRhdmFyaWFibGUiLCJnZXRGcmFtZU5vZGUiLCJnZXROb2RlIiwiZnJhbWVOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZSIsInNpbmd1bGFyIiwiaXNTaW5ndWxhciIsImdldE5hbWUiLCJpc0VxdWFsVG8iLCJmcmFtZSIsImZyYW1lTm9kZU1hdGNoZXMiLCJtYXRjaEZyYW1lTm9kZSIsImVxdWFsVG8iLCJpc0ltcGxpY2l0IiwiaW1wbGljaXQiLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwiY29tcGFyZVBhcmFtZXRlciIsInBhcmFtZXRlciIsImNvbXBhcmVzVG9QYXJhbXRlciIsInBhcmFtZXRlck5hbWUiLCJmaW5kRnJhbWUiLCJmaW5kRnJhbWVCeUZyYW1lTm9kZSIsInZhbGlkYXRlIiwic3RhdGUiLCJjb250aW51YXRpb24iLCJ2YWxpZGF0ZXMiLCJmcmFtZVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVidWciLCJ2YWxpZGF0ZUFzc3VtcHRpb25zIiwiYmluZCIsInZhbGlkYXRlTWV0YXZhcmlhYmxlIiwiYWxsIiwiYWRkRnJhbWUiLCJ2YWxpZGF0ZUFzc3VtcHRpb24iLCJhc3N1bXB0aW9uIiwiYXNzdW1wdGlvblZhbGlkYXRlcyIsImFzc3VtcHRpb25TdHJpbmciLCJwdXNoIiwiYXNzdW1wdGlvbnNWYWxpZGF0ZSIsImV2ZXJ5IiwibWV0YXZhcmlhYmxlVmFsaWRhdGVzIiwibWV0YVR5cGUiLCJnZXRNZXRhVHlwZSIsImZyYW1lTWV0YVR5cGVOYW1lIiwiRlJBTUVfTUVUQV9UWVBFX05BTUUiLCJmcmFtZU1ldGFUeXBlIiwiZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUiLCJtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9GcmFtZU1ldGFUeXBlIiwiaXNNZXRhVHlwZUVxdWFsVG8iLCJtZXRhVHlwZVN0cmluZyIsIm1ldGF2YXJpYWJsZVN0cmluZyIsImZyYW1lTWV0YVR5cGVTdHJpbmciLCJ0b0pTT04iLCJqc29uIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZUZyYW1lIiwiYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlIiwibWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZSIsImFzc3VtcHRpb25Ob2RlcyIsImdldEFzc3VtcHRpb25Ob2RlcyIsIm1hcCIsImFzc3VtcHRpb25Ob2RlIiwiZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFZQTs7O2VBQUE7OztnQ0FWNkM7MEJBRXRCO3lCQUNLOzZCQUNLOytCQUNJO3lCQUNLO0FBRTFDLE1BQU0sRUFBRUEsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5RSxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGNBQWNDLHVCQUFP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
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2ZyYW1lLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlRnJhbWUgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgbGlua0Zyb21GcmFtZU5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCB7IEZSQU1FX01FVEFfVFlQRV9OQU1FIH0gZnJvbSBcIi4uL21ldGFUeXBlTmFtZXNcIjtcblxuY29uc3QgeyBhbGwsIGV2ZXJ5IH0gPSBjb250aW51YXRpb25VdGlsaXRpZXMsXG4gICAgICB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBGcmFtZSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpbmssIGFzc3VtcHRpb25zKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMubGluayA9IGxpbms7XG4gICAgdGhpcy5hc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zO1xuICB9XG5cbiAgZ2V0TGluaygpIHtcbiAgICByZXR1cm4gdGhpcy5saW5rO1xuICB9XG5cbiAgZ2V0QXNzdW1wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRGcmFtZU5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGZyYW1lTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIGZyYW1lTm9kZTtcbiAgfVxuXG4gIGlzRXF1YWxUbyhmcmFtZSkge1xuICAgIGNvbnN0IGZyYW1lTm9kZSA9IGZyYW1lLmdldE5vZGUoKSxcbiAgICAgICAgICBmcmFtZU5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEZyYW1lTm9kZShmcmFtZU5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBmcmFtZU5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGlzSW1wbGljaXQoKSB7XG4gICAgY29uc3QgaW1wbGljaXQgPSAodGhpcy5tZXRhdmFyaWFibGUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGltcGxpY2l0O1xuICB9XG5cbiAgaXNTaW5ndWxhcigpIHtcbiAgICBjb25zdCBmcmFtZU5vZGUgPSB0aGlzLmdldEZyYW1lTm9kZSgpLFxuICAgICAgICAgIHNpbmd1bGFyID0gZnJhbWVOb2RlLmlzU2luZ3VsYXIoKTtcblxuICAgIHJldHVybiBzaW5ndWxhcjtcbiAgfVxuXG4gIG1hdGNoRnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBmcmFtZU5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgZnJhbWVOb2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBmcmFtZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgZmluZEZyYW1lKGNvbnRleHQpIHtcbiAgICBjb25zdCBmcmFtZU5vZGUgPSB0aGlzLmdldEZyYW1lTm9kZSgpLFxuICAgICAgICAgIGZyYW1lID0gY29udGV4dC5maW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgdmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgZnJhbWU7XG5cbiAgICBjb25zdCBmcmFtZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUuLi5gKTtcblxuICAgIGZyYW1lID0gdGhpcy5maW5kRnJhbWUoY29udGV4dCk7XG5cbiAgICBpZiAoZnJhbWUgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoZnJhbWUsIGNvbnRleHQsIGJhY2spO1xuICAgIH1cblxuICAgIGZyYW1lID0gdGhpczsgLy8vXG5cbiAgICBjb25zdCB2YWxpZGF0ZUxpbmsgPSB0aGlzLnZhbGlkYXRlTGluay5iaW5kKHRoaXMpLFxuICAgICAgICAgIHZhbGlkYXRlQXNzdW1wdGlvbnMgPSB0aGlzLnZhbGlkYXRlQXNzdW1wdGlvbnMuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVMaW5rLFxuICAgICAgdmFsaWRhdGVBc3N1bXB0aW9uc1xuICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuYWRkRnJhbWUoZnJhbWUpO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGZyYW1lLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlTGluayhzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGZyYW1lU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSdzIGxpbmsuLi5gKTtcblxuICAgIHJldHVybiB0aGlzLmxpbmsudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChsaW5rLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCBtZXRhVHlwZSA9IGxpbmsuZ2V0TWV0YVR5cGUoKSxcbiAgICAgICAgICAgIGxpbmtTdHJpbmcgPSBsaW5rLmdldFN0cmluZygpO1xuXG4gICAgICBpZiAobWV0YVR5cGUgPT09IG51bGwpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUncyAnJHtsaW5rU3RyaW5nfScgbGluayBkb2VzIG5vdCBoYXZlIGEgdHlwZS5gKTtcblxuICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmcmFtZU1ldGFUeXBlTmFtZSA9IEZSQU1FX01FVEFfVFlQRV9OQU1FLFxuICAgICAgICAgICAgZnJhbWVNZXRhVHlwZSA9IGNvbnRleHQuZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUoZnJhbWVNZXRhVHlwZU5hbWUpLFxuICAgICAgICAgICAgbGlua01ldGFUeXBlRXF1YWxUb0ZyYW1lTWV0YVR5cGUgPSBsaW5rLmlzTWV0YVR5cGVFcXVhbFRvKGZyYW1lTWV0YVR5cGUpO1xuXG4gICAgICBpZiAoIWxpbmtNZXRhVHlwZUVxdWFsVG9GcmFtZU1ldGFUeXBlKSB7XG4gICAgICAgIGNvbnN0IG1ldGFUeXBlU3RyaW5nID0gbWV0YVR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICAgIGZyYW1lTWV0YVR5cGVTdHJpbmcgPSBmcmFtZU1ldGFUeXBlLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lJ3MgJyR7bGlua1N0cmluZ30nIGxpbmsncyAnJHttZXRhVHlwZVN0cmluZ30nIG1ldGEtdHlwZSBzaG91bGQgYmUgdGhlICcke2ZyYW1lTWV0YVR5cGVTdHJpbmd9JyBtZXRhLXR5cGUuYCk7XG5cbiAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5saW5rID0gbGluaztcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lJ3MgbGluay4nYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlQXNzdW1wdGlvbihhc3N1bXB0aW9uLCBhc3N1bXB0aW9ucywgc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBmcmFtZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBhc3N1bXB0aW9uU3RyaW5nID0gYXNzdW1wdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUncyAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb24udmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChhc3N1bXB0aW9uLCBjb250ZXh0KSA9PiB7XG4gICAgICBhc3N1bXB0aW9ucy5wdXNoKGFzc3VtcHRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUncyAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbi5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoYXNzdW1wdGlvbnMsIHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlQXNzdW1wdGlvbnMoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uc0xlbmd0aCA9IHRoaXMuYXNzdW1wdGlvbnMubGVuZ3RoO1xuXG4gICAgaWYgKGFzc3VtcHRpb25zTGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZnJhbWVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lJ3MgYXNzdW1wdGlvbnMuLi5gKTtcblxuICAgIGNvbnN0IGFzc3VtcHRpb25zID0gW107XG5cbiAgICByZXR1cm4gZXZlcnkodGhpcy5hc3N1bXB0aW9ucywgKGFzc3VtcHRpb24sIGFzc3VtcHRpb25zLCBzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBc3N1bXB0aW9uKGFzc3VtcHRpb24sIGFzc3VtcHRpb25zLCBzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjayk7XG4gICAgfSwgYXNzdW1wdGlvbnMsIHN0YXRlLCBjb250ZXh0LCAoYXNzdW1wdGlvbnMsIHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICB0aGlzLmFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnM7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlcyB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSdzIGFzc3VtcHRpb25zLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgbGV0IGpzb247XG5cbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJGcmFtZVwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IGZyYW1lO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgZnJhbWVOb2RlID0gaW5zdGFudGlhdGVGcmFtZShzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgbm9kZSA9IGZyYW1lTm9kZSwgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgbGluayA9IGxpbmtGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgZnJhbWUgPSBuZXcgRnJhbWUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsaW5rLCBhc3N1bXB0aW9ucyk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25Ob2RlcyA9IGZyYW1lTm9kZS5nZXRBc3N1bXB0aW9uTm9kZXMoKSxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uTm9kZXMubWFwKChhc3N1bXB0aW9uTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFzc3VtcHRpb24gPSBjb250ZXh0LmZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSk7XG5cbiAgICAgICAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuIl0sIm5hbWVzIjpbImFsbCIsImV2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiRnJhbWUiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwibGluayIsImFzc3VtcHRpb25zIiwiZ2V0TGluayIsImdldEFzc3VtcHRpb25zIiwiZ2V0RnJhbWVOb2RlIiwiZ2V0Tm9kZSIsImZyYW1lTm9kZSIsImlzRXF1YWxUbyIsImZyYW1lIiwiZnJhbWVOb2RlTWF0Y2hlcyIsIm1hdGNoRnJhbWVOb2RlIiwiZXF1YWxUbyIsImlzSW1wbGljaXQiLCJpbXBsaWNpdCIsIm1ldGF2YXJpYWJsZSIsImlzU2luZ3VsYXIiLCJzaW5ndWxhciIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwiZmluZEZyYW1lIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJ2YWxpZGF0ZSIsInN0YXRlIiwiZm9yd2FyZCIsImJhY2siLCJmcmFtZVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVidWciLCJ2YWxpZGF0ZUxpbmsiLCJiaW5kIiwidmFsaWRhdGVBc3N1bXB0aW9ucyIsImFkZEZyYW1lIiwibWV0YVR5cGUiLCJnZXRNZXRhVHlwZSIsImxpbmtTdHJpbmciLCJmcmFtZU1ldGFUeXBlTmFtZSIsIkZSQU1FX01FVEFfVFlQRV9OQU1FIiwiZnJhbWVNZXRhVHlwZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwibGlua01ldGFUeXBlRXF1YWxUb0ZyYW1lTWV0YVR5cGUiLCJpc01ldGFUeXBlRXF1YWxUbyIsIm1ldGFUeXBlU3RyaW5nIiwiZnJhbWVNZXRhVHlwZVN0cmluZyIsInZhbGlkYXRlQXNzdW1wdGlvbiIsImFzc3VtcHRpb24iLCJhc3N1bXB0aW9uU3RyaW5nIiwicHVzaCIsImFzc3VtcHRpb25zTGVuZ3RoIiwibGVuZ3RoIiwidG9KU09OIiwianNvbiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVGcmFtZSIsImxpbmtGcm9tRnJhbWVOb2RlIiwiYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlIiwiYXNzdW1wdGlvbk5vZGVzIiwiZ2V0QXNzdW1wdGlvbk5vZGVzIiwibWFwIiwiYXNzdW1wdGlvbk5vZGUiLCJmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWFBOzs7ZUFBQTs7O2dDQVhvRTswQkFFN0M7eUJBQ0s7NkJBQ0s7eUJBQ0M7K0JBQ0c7QUFFckMsTUFBTSxFQUFFQSxHQUFHLEVBQUVDLEtBQUssRUFBRSxHQUFHQyxxQ0FBcUIsRUFDdEMsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5RSxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGNBQWNDLHVCQUFPO0lBQy9DLFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsSUFBSSxFQUFFQyxXQUFXLENBQUU7UUFDaEUsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLElBQUksR0FBR0E7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
@@ -98,6 +98,7 @@ const _default = (0, _elements.define)(class Hypothesis extends _occamlanguages.
98
98
  const hypothesisString = this.getString(); ///
99
99
  context.trace(`Validating the '${hypothesisString}' hypothesis' statement...`);
100
100
  return this.statement.validate(state, context, (statement, context, back)=>{
101
+ this.statement = statement;
101
102
  context.trace(`...validated the '${hypothesisString}' hypothesis' statement.`);
102
103
  return forward(state, context, back);
103
104
  }, back);
@@ -109,6 +110,7 @@ const _default = (0, _elements.define)(class Hypothesis extends _occamlanguages.
109
110
  const hypothesisString = this.getString(); ///
110
111
  context.trace(`Validating the '${hypothesisString}' hypothesis' procedure call...`);
111
112
  return this.procedureCall.validate(state, context, (procedureCall, context, back)=>{
113
+ this.procedureCall = procedureCall;
112
114
  context.trace(`...validated the '${hypothesisString}' hypothesis' procedure call.`);
113
115
  return forward(state, context, back);
114
116
  }, back);
@@ -180,4 +182,4 @@ const _default = (0, _elements.define)(class Hypothesis extends _occamlanguages.
180
182
  }
181
183
  });
182
184
 
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2h5cG90aGVzaXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBkZWNsYXJlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVIeXBvdGhlc2lzIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IGF0dGVtcHQsIHNlcmlhbGlzZSwgdW5zZXJpYWxpc2UsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUsIHByb2NlZHVyZUNhbGxGcm9tSHlwb3RoZXNpc05vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuY29uc3QgeyBjdXQsIGFsbCwgaXNvbGF0ZSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha2FibGUsIGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBIeXBvdGhlc2lzIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICAgIHRoaXMucHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGw7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0UHJvY2VkdXJlQ2FsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZWR1cmVDYWxsO1xuICB9XG5cbiAgZ2V0SHlwb3RoZXNpc05vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGh5cG90aGVzaXNOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXNOb2RlO1xuICB9XG5cbiAgaXNNYWxmb3JtZWQoKSB7XG4gICAgY29uc3QgaHlwb3RoZXNpc05vZGUgPSB0aGlzLmdldEh5cG90aGVzaXNOb2RlKCksXG4gICAgICAgICAgbWFsZm9ybWVkID0gaHlwb3RoZXNpc05vZGUuaXNNYWxmb3JtZWQoKTtcblxuICAgIHJldHVybiBtYWxmb3JtZWQ7XG4gIH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBmb3J3YXJkID0gY3V0KGZvcndhcmQsIGJhY2spOyAvLy9cblxuICAgIGNvbnN0IHNwZWNpZmljQ29udHh0ID0gY29udGV4dCwgLy8vXG4gICAgICAgICAgaHlwb3RoZXNpc1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcy4uLmApO1xuXG4gICAgY29uc3QgbWFsZm9ybWVkID0gdGhpcy5pc01hbGZvcm1lZCgpO1xuXG4gICAgaWYgKG1hbGZvcm1lZCkge1xuICAgICAgY29udGV4dC50cmFjZShgVW5hYmxlIHRvIHZlcmlmeSB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMgYmVjYXVzZSBpdCBpcyBtYWxmb3JtZWQuYCk7XG5cbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgZGVjbGFyZSgoc3RhdGUpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAoaHlwb3RoZXNpcywgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250eHQ7IC8vL1xuXG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcy5gKTtcblxuICAgICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICAgIH0sIChleGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcy5gKTtcblxuICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRpc2NoYXJnZSA9IGJyZWFrYWJsZShmdW5jdGlvbiAoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGh5cG90aGVzaXNTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYERpc2NoYXJnaW5nIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcy4uLmApO1xuXG4gICAgY29uc3QgZGlzY2hhcmdlU3RhdGVtZW50ID0gdGhpcy5kaXNjaGFyZ2VTdGF0ZW1lbnQuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgZGlzY2hhcmdlU3RhdGVtZW50XG4gICAgXSwgY29udGV4dCwgKGRpc2NoYXJnZXMpID0+IHtcbiAgICAgIGlmIChkaXNjaGFyZ2VzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLmRpc2NoYXJnZWQgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGRpc2NoYXJnZXMsIGNvbnRleHQpO1xuICAgIH0pO1xuICB9KTtcblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGh5cG90aGVzaXNTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMuLi5gKTtcblxuICAgIHJldHVybiBpc29sYXRlKChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIGF0dGVtcHQoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVTdGF0ZW1lbnQgPSB0aGlzLnZhbGlkYXRlU3RhdGVtZW50LmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZhbGlkYXRlUHJvY2VkdXJlQ2FsbCA9IHRoaXMudmFsaWRhdGVQcm9jZWR1cmVDYWxsLmJpbmQodGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGFsbChbXG4gICAgICAgICAgdmFsaWRhdGVTdGF0ZW1lbnQsXG4gICAgICAgICAgdmFsaWRhdGVQcm9jZWR1cmVDYWxsXG4gICAgICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICB0aGlzLmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IGh5cG90aGVzaXMgPSB0aGlzOyAgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGh5cG90aGVzaXMsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGVTdGF0ZW1lbnQoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBpZiAodGhpcy5zdGF0ZW1lbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBoeXBvdGhlc2lzU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMnIHN0YXRlbWVudC4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50LnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAoc3RhdGVtZW50LCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi52YWxpZGF0ZWQgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzJyBzdGF0ZW1lbnQuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlUHJvY2VkdXJlQ2FsbChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGlmICh0aGlzLnByb2NlZHVyZUNhbGwgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBoeXBvdGhlc2lzU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMnIHByb2NlZHVyZSBjYWxsLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9jZWR1cmVDYWxsLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAocHJvY2VkdXJlQ2FsbCwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC50cmFjZShgLi4udmFsaWRhdGVkIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcycgcHJvY2VkdXJlIGNhbGwuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIGRpc2NoYXJnZVN0YXRlbWVudChjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgaWYgKHRoaXMuc3RhdGVtZW50ID09PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnREaXNjaGFyZ2VzID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGF0ZW1lbnREaXNjaGFyZ2VzLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBjb25zdCBoeXBvdGhlc2lzU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYERpc2NoYXJnaW5nIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcycgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBjb25zdCBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb25zdCBnZW5lcmFsQ290bmV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50LmRpc2NoYXJnZShnZW5lcmFsQ290bmV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3RhdGVtZW50RGlzY2hhcmdlcykgPT4ge1xuICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICBpZiAoc3RhdGVtZW50RGlzY2hhcmdlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi5kaXNjaGFyZ2VkIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcycgc3RhdGVtZW50LmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudERpc2NoYXJnZXMsIGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgZGlzY2hhcmdlR2l2ZW5UZXJtKHRlcm0sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBoeXBvdGhlc2lzU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBEaXNjaGFyZ2luZyB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMgZ2l2ZW4gdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtLi4uYCk7XG5cbiAgICB0aGlzLmRpc2NoYXJnZVByb2NlZHVyZUNhbGxHaXZlblRlcm0odGVybSwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmRpc2NoYXJnZWQgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzIGdpdmVuIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICBkaXNjaGFyZ2VQcm9jZWR1cmVDYWxsR2l2ZW5UZXJtKHRlcm0sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBpZiAodGhpcy5wcm9jZWR1cmVDYWxsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpLFxuICAgICAgICAgIGh5cG90aGVzaXNTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgRGlzY2hhcmdpbmcgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzJyBwcm9jZWR1cmUgY2FsbCBnaXZlbiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgIHRoaXMucHJvY2VkdXJlQ2FsbC5kaXNjaGFyZ2VHaXZlblRlcm0odGVybSwgY29udGV4dCwgKGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmRpc2NoYXJnZWQgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzJyBwcm9jZWR1cmUgY2FsbCBnaXZlbiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGxldCBqc29uO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgc2VyaWFsaXNlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgICAganNvbiA9IHtcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgc3RyaW5nLFxuICAgICAgICBicmVha1BvaW50XG4gICAgICB9O1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiSHlwb3RoZXNpc1wiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IGh5cG90aGVzaXM7XG5cbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgdW5zZXJpYWxpc2UoKGpzb24sIGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIGh5cG90aGVzaXNOb2RlID0gaW5zdGFudGlhdGVIeXBvdGhlc2lzKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBoeXBvdGhlc2lzTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNpc05vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2lzTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgaHlwb3RoZXNpcyA9IG5ldyBIeXBvdGhlc2lzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcbiAgICAgIH0sIGpzb24sIGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXM7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImN1dCIsImFsbCIsImlzb2xhdGUiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJicmVha2FibGUiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJIeXBvdGhlc2lzIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInN0YXRlbWVudCIsInByb2NlZHVyZUNhbGwiLCJnZXRTdGF0ZW1lbnQiLCJnZXRQcm9jZWR1cmVDYWxsIiwiZ2V0SHlwb3RoZXNpc05vZGUiLCJnZXROb2RlIiwiaHlwb3RoZXNpc05vZGUiLCJpc01hbGZvcm1lZCIsIm1hbGZvcm1lZCIsInZlcmlmeSIsImZvcndhcmQiLCJiYWNrIiwic3BlY2lmaWNDb250eHQiLCJoeXBvdGhlc2lzU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJkZWNsYXJlIiwic3RhdGUiLCJ2YWxpZGF0ZSIsImh5cG90aGVzaXMiLCJkZWJ1ZyIsImV4Y2VwdGlvbiIsImRpc2NoYXJnZSIsImRpc2NoYXJnZVN0YXRlbWVudCIsImJpbmQiLCJkaXNjaGFyZ2VzIiwiY29udGludWF0aW9uIiwiYXR0ZW1wdCIsInZhbGlkYXRlU3RhdGVtZW50IiwidmFsaWRhdGVQcm9jZWR1cmVDYWxsIiwiY29tbWl0Iiwic3RhdGVtZW50RGlzY2hhcmdlcyIsInNwZWNpZmljQ29udGV4dCIsImdldENvbnRleHQiLCJnZW5lcmFsQ290bmV4dCIsImRpc2NoYXJnZUdpdmVuVGVybSIsInRlcm0iLCJ0ZXJtU3RyaW5nIiwiZGlzY2hhcmdlUHJvY2VkdXJlQ2FsbEdpdmVuVGVybSIsInRvSlNPTiIsImpzb24iLCJzZXJpYWxpc2UiLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsInVuc2VyaWFsaXNlIiwiaW5zdGFudGlhdGVIeXBvdGhlc2lzIiwic3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21IeXBvdGhlc2lzTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBYUE7OztlQUFBOzs7Z0NBWG9FOzBCQUU3Qzt1QkFDQzs2QkFDYzt5QkFDdUI7eUJBQ2dCO0FBRTdFLE1BQU0sRUFBRUEsR0FBRyxF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
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2h5cG90aGVzaXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBkZWNsYXJlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVIeXBvdGhlc2lzIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IGF0dGVtcHQsIHNlcmlhbGlzZSwgdW5zZXJpYWxpc2UsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUsIHByb2NlZHVyZUNhbGxGcm9tSHlwb3RoZXNpc05vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuY29uc3QgeyBjdXQsIGFsbCwgaXNvbGF0ZSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha2FibGUsIGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBIeXBvdGhlc2lzIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICAgIHRoaXMucHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGw7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0UHJvY2VkdXJlQ2FsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZWR1cmVDYWxsO1xuICB9XG5cbiAgZ2V0SHlwb3RoZXNpc05vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGh5cG90aGVzaXNOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXNOb2RlO1xuICB9XG5cbiAgaXNNYWxmb3JtZWQoKSB7XG4gICAgY29uc3QgaHlwb3RoZXNpc05vZGUgPSB0aGlzLmdldEh5cG90aGVzaXNOb2RlKCksXG4gICAgICAgICAgbWFsZm9ybWVkID0gaHlwb3RoZXNpc05vZGUuaXNNYWxmb3JtZWQoKTtcblxuICAgIHJldHVybiBtYWxmb3JtZWQ7XG4gIH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBmb3J3YXJkID0gY3V0KGZvcndhcmQsIGJhY2spOyAvLy9cblxuICAgIGNvbnN0IHNwZWNpZmljQ29udHh0ID0gY29udGV4dCwgLy8vXG4gICAgICAgICAgaHlwb3RoZXNpc1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcy4uLmApO1xuXG4gICAgY29uc3QgbWFsZm9ybWVkID0gdGhpcy5pc01hbGZvcm1lZCgpO1xuXG4gICAgaWYgKG1hbGZvcm1lZCkge1xuICAgICAgY29udGV4dC50cmFjZShgVW5hYmxlIHRvIHZlcmlmeSB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMgYmVjYXVzZSBpdCBpcyBtYWxmb3JtZWQuYCk7XG5cbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgZGVjbGFyZSgoc3RhdGUpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAoaHlwb3RoZXNpcywgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250eHQ7IC8vL1xuXG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcy5gKTtcblxuICAgICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICAgIH0sIChleGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcy5gKTtcblxuICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRpc2NoYXJnZSA9IGJyZWFrYWJsZShmdW5jdGlvbiAoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGh5cG90aGVzaXNTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYERpc2NoYXJnaW5nIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcy4uLmApO1xuXG4gICAgY29uc3QgZGlzY2hhcmdlU3RhdGVtZW50ID0gdGhpcy5kaXNjaGFyZ2VTdGF0ZW1lbnQuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgZGlzY2hhcmdlU3RhdGVtZW50XG4gICAgXSwgY29udGV4dCwgKGRpc2NoYXJnZXMpID0+IHtcbiAgICAgIGlmIChkaXNjaGFyZ2VzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLmRpc2NoYXJnZWQgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGRpc2NoYXJnZXMsIGNvbnRleHQpO1xuICAgIH0pO1xuICB9KTtcblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGh5cG90aGVzaXNTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMuLi5gKTtcblxuICAgIHJldHVybiBpc29sYXRlKChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIGF0dGVtcHQoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVTdGF0ZW1lbnQgPSB0aGlzLnZhbGlkYXRlU3RhdGVtZW50LmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZhbGlkYXRlUHJvY2VkdXJlQ2FsbCA9IHRoaXMudmFsaWRhdGVQcm9jZWR1cmVDYWxsLmJpbmQodGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGFsbChbXG4gICAgICAgICAgdmFsaWRhdGVTdGF0ZW1lbnQsXG4gICAgICAgICAgdmFsaWRhdGVQcm9jZWR1cmVDYWxsXG4gICAgICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICB0aGlzLmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IGh5cG90aGVzaXMgPSB0aGlzOyAgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGh5cG90aGVzaXMsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGVTdGF0ZW1lbnQoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBpZiAodGhpcy5zdGF0ZW1lbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBoeXBvdGhlc2lzU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMnIHN0YXRlbWVudC4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50LnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAoc3RhdGVtZW50LCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICB0aGlzLnN0YXRlbWVudCA9IHN0YXRlbWVudDtcblxuICAgICAgY29udGV4dC50cmFjZShgLi4udmFsaWRhdGVkIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcycgc3RhdGVtZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVByb2NlZHVyZUNhbGwoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBpZiAodGhpcy5wcm9jZWR1cmVDYWxsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgaHlwb3RoZXNpc1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzJyBwcm9jZWR1cmUgY2FsbC4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvY2VkdXJlQ2FsbC52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHByb2NlZHVyZUNhbGwsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMucHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGw7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYC4uLnZhbGlkYXRlZCB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMnIHByb2NlZHVyZSBjYWxsLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICBkaXNjaGFyZ2VTdGF0ZW1lbnQoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGlmICh0aGlzLnN0YXRlbWVudCA9PT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50RGlzY2hhcmdlcyA9IHRydWU7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50RGlzY2hhcmdlcywgY29udGV4dCk7XG4gICAgfVxuXG4gICAgY29uc3QgaHlwb3RoZXNpc1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBEaXNjaGFyZ2luZyB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMnIHN0YXRlbWVudC4uLmApO1xuXG4gICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29uc3QgZ2VuZXJhbENvdG5leHQgPSBjb250ZXh0OyAvLy9cblxuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudC5kaXNjaGFyZ2UoZ2VuZXJhbENvdG5leHQsIHNwZWNpZmljQ29udGV4dCwgKHN0YXRlbWVudERpc2NoYXJnZXMpID0+IHtcbiAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgaWYgKHN0YXRlbWVudERpc2NoYXJnZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uZGlzY2hhcmdlZCB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMnIHN0YXRlbWVudC5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGF0ZW1lbnREaXNjaGFyZ2VzLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGRpc2NoYXJnZUdpdmVuVGVybSh0ZXJtLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgaHlwb3RoZXNpc1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgRGlzY2hhcmdpbmcgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzIGdpdmVuIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybS4uLmApO1xuXG4gICAgdGhpcy5kaXNjaGFyZ2VQcm9jZWR1cmVDYWxsR2l2ZW5UZXJtKHRlcm0sIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5kaXNjaGFyZ2VkIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcyBnaXZlbiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgZGlzY2hhcmdlUHJvY2VkdXJlQ2FsbEdpdmVuVGVybSh0ZXJtLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgaWYgKHRoaXMucHJvY2VkdXJlQ2FsbCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBoeXBvdGhlc2lzU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYERpc2NoYXJnaW5nIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcycgcHJvY2VkdXJlIGNhbGwgZ2l2ZW4gdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtLi4uYCk7XG5cbiAgICB0aGlzLnByb2NlZHVyZUNhbGwuZGlzY2hhcmdlR2l2ZW5UZXJtKHRlcm0sIGNvbnRleHQsIChiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5kaXNjaGFyZ2VkIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcycgcHJvY2VkdXJlIGNhbGwgZ2l2ZW4gdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBsZXQganNvbjtcblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHNlcmlhbGlzZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICAgIGpzb24gPSB7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgYnJlYWtQb2ludFxuICAgICAgfTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkh5cG90aGVzaXNcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBoeXBvdGhlc2lzO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHVuc2VyaWFsaXNlKChqc29uLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICBoeXBvdGhlc2lzTm9kZSA9IGluc3RhbnRpYXRlSHlwb3RoZXNpcyhzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gaHlwb3RoZXNpc05vZGUsICAvLy9cbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzaXNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNpc05vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIGh5cG90aGVzaXMgPSBuZXcgSHlwb3RoZXNpcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcHJvY2VkdXJlQ2FsbCk7XG4gICAgICB9LCBqc29uLCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBoeXBvdGhlc2lzO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJjdXQiLCJhbGwiLCJpc29sYXRlIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiYnJlYWthYmxlIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiSHlwb3RoZXNpcyIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJzdGF0ZW1lbnQiLCJwcm9jZWR1cmVDYWxsIiwiZ2V0U3RhdGVtZW50IiwiZ2V0UHJvY2VkdXJlQ2FsbCIsImdldEh5cG90aGVzaXNOb2RlIiwiZ2V0Tm9kZSIsImh5cG90aGVzaXNOb2RlIiwiaXNNYWxmb3JtZWQiLCJtYWxmb3JtZWQiLCJ2ZXJpZnkiLCJmb3J3YXJkIiwiYmFjayIsInNwZWNpZmljQ29udHh0IiwiaHlwb3RoZXNpc1N0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVjbGFyZSIsInN0YXRlIiwidmFsaWRhdGUiLCJoeXBvdGhlc2lzIiwiZGVidWciLCJleGNlcHRpb24iLCJkaXNjaGFyZ2UiLCJkaXNjaGFyZ2VTdGF0ZW1lbnQiLCJiaW5kIiwiZGlzY2hhcmdlcyIsImNvbnRpbnVhdGlvbiIsImF0dGVtcHQiLCJ2YWxpZGF0ZVN0YXRlbWVudCIsInZhbGlkYXRlUHJvY2VkdXJlQ2FsbCIsImNvbW1pdCIsInN0YXRlbWVudERpc2NoYXJnZXMiLCJzcGVjaWZpY0NvbnRleHQiLCJnZXRDb250ZXh0IiwiZ2VuZXJhbENvdG5leHQiLCJkaXNjaGFyZ2VHaXZlblRlcm0iLCJ0ZXJtIiwidGVybVN0cmluZyIsImRpc2NoYXJnZVByb2NlZHVyZUNhbGxHaXZlblRlcm0iLCJ0b0pTT04iLCJqc29uIiwic2VyaWFsaXNlIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJ1bnNlcmlhbGlzZSIsImluc3RhbnRpYXRlSHlwb3RoZXNpcyIsInN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tSHlwb3RoZXNpc05vZGUiXSwibWFwcGluZ3MiOiJBQUFB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