occam-nominal 1.0.556 → 1.0.558

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,10 +10,10 @@ Object.defineProperty(exports, "default", {
10
10
  });
11
11
  const _occamlanguages = require("occam-languages");
12
12
  const _elements = require("../elements");
13
- const _context = require("../utilities/context");
14
13
  const _state = require("../utilities/state");
15
14
  const _instantiate = require("../process/instantiate");
16
- const { all, exists, backwardsEvery } = _occamlanguages.continuationUtilities, { breakPointFromJSON, breakPointToBreakPointJSON } = _occamlanguages.breakPointUtilities;
15
+ const _context = require("../utilities/context");
16
+ const { all, some, exists, backwardsEvery } = _occamlanguages.continuationUtilities, { breakPointFromJSON, breakPointToBreakPointJSON } = _occamlanguages.breakPointUtilities;
17
17
  const _default = (0, _elements.define)(class Assumption extends _occamlanguages.Element {
18
18
  constructor(context, string, node, breakPoint, link, statement){
19
19
  super(context, string, node, breakPoint);
@@ -93,35 +93,24 @@ const _default = (0, _elements.define)(class Assumption extends _occamlanguages.
93
93
  }
94
94
  const assumptionString = this.getString(); ///
95
95
  context.trace(`Validating the '${assumptionString}' declared assumption...`);
96
- ///
97
- context.debug(`...validated the '${assumptionString}' declared assumption.`);
98
- return forward(state, context, back);
96
+ const schemas = context.getSchemas();
97
+ return some(schemas, (schema, context, forward, back)=>{
98
+ return this.unifySchema(schema, context, forward, back);
99
+ }, context, (context, back)=>{
100
+ context.debug(`...validated the '${assumptionString}' declared assumption.`);
101
+ return forward(state, context, back);
102
+ }, back);
99
103
  }
100
104
  validateWhenDerived(state, context, forward, back) {
101
- let validatesWhenDerived = false;
102
105
  const derived = (0, _state.isDerived)(state);
103
106
  if (!derived) {
104
107
  return back();
105
108
  }
106
109
  const assumptionString = this.getString(); ///
107
110
  context.trace(`Validating the '${assumptionString}' derived assumption...`);
108
- const schemas = context.getSchemas();
109
- validatesWhenDerived = some(schemas, (schema, context)=>{
110
- let success = false;
111
- this.unifySchema(schema, context, (schemaUnifies)=>{
112
- if (schemaUnifies) {
113
- success = true;
114
- }
115
- });
116
- return success;
117
- }, context, (context)=>true); ///
118
- if (validatesWhenDerived) {
119
- validatesWhenDerived = continuation(state, context);
120
- }
121
- if (validatesWhenDerived) {
122
- context.debug(`...validated the '${assumptionString}' derived assumption.`);
123
- }
124
- return validatesWhenDerived;
111
+ ///
112
+ context.debug(`...validated the '${assumptionString}' derived assumption.`);
113
+ return forward(state, context, back);
125
114
  }
126
115
  validateLink(state, context, forward, back) {
127
116
  const assumptionString = this.getString(); ///
@@ -144,39 +133,28 @@ const _default = (0, _elements.define)(class Assumption extends _occamlanguages.
144
133
  unifySchema(schema, context, forward, back) {
145
134
  const assumptionString = this.getString(), schemaString = schema.getString();
146
135
  context.trace(`Unifying the '${schemaString}' schema with the '${assumptionString}' assumption...`);
147
- const generalContext = context; ///
148
- return (0, _context.reconcile)((context)=>{
149
- const label = schema.getLabel();
150
- return this.link.unifyLabel(label, context, (labelUnifies)=>{
151
- const specificContext = context; ///
152
- if (!labelUnifies) {
153
- const schemaUnifies = false;
154
- return continuation(schemaUnifies);
155
- }
156
- const deduction = schema.getDeduction(), deducedStatement = this.findDeducedStatement(context);
157
- return this.unifyDeduction(deduction, deducedStatement, generalContext, specificContext, (deductionUnifies)=>{
158
- let schemaUnifies = false;
159
- if (!deductionUnifies) {
160
- return continuation(schemaUnifies);
161
- }
162
- const conditional = this.isConditional(), schemaConditional = schema.isConditional();
163
- if (conditional !== schemaConditional) {
164
- context.trace(`Either the '${schemaString}' schema is unconditional whilst the '${assumptionString}' assumption is conditional or vice verse.`);
165
- return continuation(schemaUnifies);
166
- }
167
- const suppositions = schema.getSuppositions(), supposedStatements = this.findSupposedStatements(context);
168
- return this.unifySuppositions(suppositions, supposedStatements, generalContext, specificContext, (suppositionsUnify)=>{
169
- if (suppositionsUnify) {
170
- schemaUnifies = true;
171
- }
172
- if (schemaUnifies) {
173
- context.debug(`...unified the '${schemaString}' schema with the '${assumptionString}' assumption.`);
136
+ return (0, _context.isolate)((schema, context, forward, back)=>{
137
+ const generalContext = context; ///
138
+ return (0, _context.reconcile)((context)=>{
139
+ const label = schema.getLabel();
140
+ return this.link.unifyLabel(label, context, (context, back)=>{
141
+ const specificContext = context; ///
142
+ const deduction = schema.getDeduction(), deducedStatement = this.findDeducedStatement(context);
143
+ return this.unifyDeduction(deduction, deducedStatement, generalContext, specificContext, (generalContext, specificContext, back)=>{
144
+ const conditional = this.isConditional(), schemaConditional = schema.isConditional();
145
+ if (conditional !== schemaConditional) {
146
+ context.trace(`Either the '${schemaString}' schema is unconditional whilst the '${assumptionString}' assumption is conditional or vice verse.`);
147
+ return back();
174
148
  }
175
- return continuation(schemaUnifies);
176
- });
177
- });
178
- });
179
- }, context);
149
+ const suppositions = schema.getSuppositions(), supposedStatements = this.findSupposedStatements(context);
150
+ return this.unifySuppositions(suppositions, supposedStatements, generalContext, specificContext, forward, back);
151
+ }, back);
152
+ }, back);
153
+ }, context);
154
+ }, schema, context, (schema, context, back)=>{
155
+ context.debug(`...unified the '${schemaString}' schema with the '${assumptionString}' assumption.`);
156
+ return forward(context, back);
157
+ }, back);
180
158
  }
181
159
  unifyDeduction(deduction, deducedStatement, generalContext, specificContext, forward, back) {
182
160
  const context = specificContext, assumptionString = this.getString(), deductionString = deduction.getString();
@@ -211,12 +189,9 @@ const _default = (0, _elements.define)(class Assumption extends _occamlanguages.
211
189
  unifySuppositions(suppositions, supposedStatements, generalContext, specificContext, forward, back) {
212
190
  const suppositionsLength = suppositions.length, supposedStatementsLength = supposedStatements.length;
213
191
  if (suppositionsLength !== supposedStatementsLength) {
214
- const suppositionsUnify = false;
215
- return continuation(suppositionsUnify);
192
+ return back();
216
193
  }
217
- let index = suppositionsLength; ///
218
- return backwardsEvery(suppositions, (supposition, forward, back)=>{
219
- index--;
194
+ return backwardsEvery(suppositions, (supposition, forward, back, index)=>{
220
195
  const supposedStatement = supposedStatements[index];
221
196
  return this.unifySupposition(supposition, supposedStatement, generalContext, specificContext, forward, back);
222
197
  }, forward, back);
@@ -253,4 +228,4 @@ function statementFromAssumptionNode(assumptionNode, context) {
253
228
  return statement;
254
229
  }
255
230
 
256
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2Fzc3VtcHRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgam9pbiwgcmVjb25jaWxlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpc0Rlcml2ZWQsIGlzRGVjbGFyZWQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUFzc3VtcHRpb24gfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuXG5jb25zdCB7IGFsbCwgZXhpc3RzLCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQXNzdW1wdGlvbiBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpbmssIHN0YXRlbWVudCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLmxpbmsgPSBsaW5rO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0TGluaygpIHtcbiAgICByZXR1cm4gdGhpcy5saW5rO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZSgpIHsgcmV0dXJuIHRoaXMubGluay5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGdldFN0YXRlbWVudE5vZGUoKSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5nZXRTdGF0ZW1lbnROb2RlKCk7IH1cblxuICBpc0NvbmRpdGlvbmFsKCkgeyByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuaXNDb25kaXRpb25hbCgpIH1cblxuICBnZXRBc3N1bXB0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbk5vZGU7XG4gIH1cblxuICBpc0VxdWFsVG8oYXNzdW1wdGlvbikge1xuICAgIGNvbnN0IGFzc3VtcHRpb25Ob2RlID0gYXNzdW1wdGlvbi5nZXROb2RlKCksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gYXNzdW1wdGlvbk5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIG1hdGNoQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBub2RlID0gYXNzdW1wdGlvbk5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25Ob2RlTWF0Y2hlcztcbiAgfVxuXG4gIGZpbmRBc3N1bXB0aW9uKGNvbnRleHQpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uTm9kZSA9IHRoaXMuZ2V0QXNzdW1wdGlvbk5vZGUoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gY29udGV4dC5maW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kRGVkdWNlZFN0YXRlbWVudChjb250ZXh0KSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5maW5kRGVkdWNlZFN0YXRlbWVudChjb250ZXh0KTsgfVxuXG4gIGZpbmRTdXBwb3NlZFN0YXRlbWVudHMoY29udGV4dCkgeyByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuZmluZFN1cHBvc2VkU3RhdGVtZW50cyhjb250ZXh0KTsgfVxuXG4gIGZpbmRTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0KSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5maW5kU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCk7IH1cblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBhc3N1bXB0aW9uO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICBhc3N1bXB0aW9uID0gdGhpcy5maW5kQXNzdW1wdGlvbihjb250ZXh0KTtcblxuICAgIGlmIChhc3N1bXB0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChhc3N1bXB0aW9uLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBhc3N1bXB0aW9uID0gdGhpczsgIC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVMaW5rID0gdGhpcy52YWxpZGF0ZUxpbmsuYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVMaW5rLFxuICAgICAgdmFsaWRhdGVTdGF0ZW1lbnRcbiAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZVdoZW5EZWNsYXJlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVjbGFyZWQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlV2hlbkRlY2xhcmVkLFxuICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkXG4gICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgIGNvbnRleHQuYWRkQXNzdW1wdGlvbihhc3N1bXB0aW9uKTtcblxuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLmApO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGFzc3VtcHRpb24sIGNvbnRleHQsIGJhY2spO1xuICAgICAgfSwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZWNsYXJlZChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGRlY2xhcmVkID0gaXNEZWNsYXJlZChzdGF0ZSk7XG5cbiAgICBpZiAoIWRlY2xhcmVkKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBkZWNsYXJlZCBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICAvLy9cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGRlY2xhcmVkIGFzc3VtcHRpb24uYCk7XG5cbiAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBkZXJpdmVkID0gaXNEZXJpdmVkKHN0YXRlKTtcblxuICAgIGlmICghZGVyaXZlZCkge1xuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgZGVyaXZlZCBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKCk7XG5cbiAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHNvbWUoc2NoZW1hcywgKHNjaGVtYSwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgdGhpcy51bmlmeVNjaGVtYShzY2hlbWEsIGNvbnRleHQsIChzY2hlbWFVbmlmaWVzKSA9PiB7XG4gICAgICAgIGlmIChzY2hlbWFVbmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9LCBjb250ZXh0LCAoY29udGV4dCkgPT4gdHJ1ZSk7IC8vL1xuXG4gICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBkZXJpdmVkIGFzc3VtcHRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc1doZW5EZXJpdmVkO1xuICB9XG5cbiAgdmFsaWRhdGVMaW5rKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3MgbGluay4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMubGluay52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKGxpbmssIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMubGluayA9IGxpbms7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlcyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24ncyBsaW5rLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzIHN0YXRlbWVudC4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50LnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAoc3RhdGVtZW50LCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICB0aGlzLnN0YXRlbWVudCA9IHN0YXRlbWVudDtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzIHN0YXRlbWVudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdW5pZnlTY2hlbWEoc2NoZW1hLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc2NoZW1hU3RyaW5nID0gc2NoZW1hLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSB3aXRoIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbi4uLmApO1xuXG4gICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBsYWJlbCA9IHNjaGVtYS5nZXRMYWJlbCgpO1xuXG4gICAgICByZXR1cm4gdGhpcy5saW5rLnVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIChsYWJlbFVuaWZpZXMpID0+IHtcbiAgICAgICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICAgIGlmICghbGFiZWxVbmlmaWVzKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzY2hlbWFVbmlmaWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlZHVjdGlvbiA9IHNjaGVtYS5nZXREZWR1Y3Rpb24oKSxcbiAgICAgICAgICAgICAgZGVkdWNlZFN0YXRlbWVudCA9IHRoaXMuZmluZERlZHVjZWRTdGF0ZW1lbnQoY29udGV4dCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlEZWR1Y3Rpb24oZGVkdWN0aW9uLCBkZWR1Y2VkU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZGVkdWN0aW9uVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzY2hlbWFVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoIWRlZHVjdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc2NoZW1hVW5pZmllcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY29uZGl0aW9uYWwgPSB0aGlzLmlzQ29uZGl0aW9uYWwoKSxcbiAgICAgICAgICAgICAgICBzY2hlbWFDb25kaXRpb25hbCA9IHNjaGVtYS5pc0NvbmRpdGlvbmFsKCk7XG5cbiAgICAgICAgICBpZiAoY29uZGl0aW9uYWwgIT09IHNjaGVtYUNvbmRpdGlvbmFsKSB7XG4gICAgICAgICAgICBjb250ZXh0LnRyYWNlKGBFaXRoZXIgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSBpcyB1bmNvbmRpdGlvbmFsIHdoaWxzdCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gaXMgY29uZGl0aW9uYWwgb3IgdmljZSB2ZXJzZS5gKTtcblxuICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzY2hlbWFVbmlmaWVzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzdXBwb3NpdGlvbnMgPSBzY2hlbWEuZ2V0U3VwcG9zaXRpb25zKCksXG4gICAgICAgICAgICAgICAgc3VwcG9zZWRTdGF0ZW1lbnRzID0gdGhpcy5maW5kU3VwcG9zZWRTdGF0ZW1lbnRzKGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBzdXBwb3NlZFN0YXRlbWVudHMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdXBwb3NpdGlvbnNVbmlmeSkgPT4ge1xuICAgICAgICAgICAgaWYgKHN1cHBvc2l0aW9uc1VuaWZ5KSB7XG4gICAgICAgICAgICAgIHNjaGVtYVVuaWZpZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2NoZW1hVW5pZmllcykge1xuICAgICAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEgd2l0aCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24uYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc2NoZW1hVW5pZmllcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeURlZHVjdGlvbihkZWR1Y3Rpb24sIGRlZHVjZWRTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBkZWR1Y3Rpb25TdHJpbmcgPSBkZWR1Y3Rpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uJ3Mgc3RhdGVtZW50ICB3aXRoIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzICcke2Fzc3VtcHRpb25TdHJpbmd9JyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IGRlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBkZWR1Y3Rpb25Db250ZXh0ID0gZGVkdWN0aW9uLmdldENvbnRleHQoKTtcblxuICAgIHNwZWNpZmljQ29udGV4dCA9IGRlZHVjdGlvbkNvbnRleHQ7IC8vL1xuXG4gICAgcmV0dXJuIGpvaW4oKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiBkZWR1Y2VkU3RhdGVtZW50LnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uJ3Mgc3RhdGVtZW50IHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3MgJyR7YXNzdW1wdGlvblN0cmluZ30nIHN0YXRlbWVudC5gKTtcblxuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIHN1cHBvc2VkU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9uU3RyaW5nID0gc3VwcG9zaXRpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmcgPSBzdXBwb3NlZFN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uJ3Mgc3RhdGVtZW50ICB3aXRoIHRoZSAnJHtzdXBwb3NlZFN0YXRlbWVudFN0cmluZ30nIHN1cHBvc2VkIHN0YXRlbWVudC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gc3VwcG9zaXRpb24uZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgc3VwcG9zaXRpb25Db250ZXh0ID0gc3VwcG9zaXRpb24uZ2V0Q29udGV4dCgpO1xuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gc3VwcG9zaXRpb25Db250ZXh0OyAvLy9cblxuICAgIHJldHVybiBqb2luKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICByZXR1cm4gc3VwcG9zZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uJ3Mgc3RhdGVtZW50ICB3aXRoIHRoZSAnJHtzdXBwb3NlZFN0YXRlbWVudFN0cmluZ30nIHN1cHBvc2VkIHN0YXRlbWVudC5gKTtcblxuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucywgc3VwcG9zZWRTdGF0ZW1lbnRzLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25zTGVuZ3RoID0gc3VwcG9zaXRpb25zLmxlbmd0aCxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGggPSBzdXBwb3NlZFN0YXRlbWVudHMubGVuZ3RoO1xuXG4gICAgaWYgKHN1cHBvc2l0aW9uc0xlbmd0aCAhPT0gc3VwcG9zZWRTdGF0ZW1lbnRzTGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdXBwb3NpdGlvbnNVbmlmeSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cHBvc2l0aW9uc1VuaWZ5KTtcbiAgICB9XG5cbiAgICBsZXQgaW5kZXggPSBzdXBwb3NpdGlvbnNMZW5ndGg7IC8vL1xuXG4gICAgcmV0dXJuIGJhY2t3YXJkc0V2ZXJ5KHN1cHBvc2l0aW9ucywgKHN1cHBvc2l0aW9uLCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICBpbmRleC0tO1xuXG4gICAgICBjb25zdCBzdXBwb3NlZFN0YXRlbWVudCA9IHN1cHBvc2VkU3RhdGVtZW50c1tpbmRleF07XG5cbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIHN1cHBvc2VkU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKTtcbiAgICB9LCBmb3J3YXJkLCBiYWNrKTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBsZXQganNvbjtcblxuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgIGpzb24gPSB7XG4gICAgICBzdHJpbmcsXG4gICAgICBicmVha1BvaW50XG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkFzc3VtcHRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBhc3N1bXB0aW9uO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgYXNzdW1wdGlvbk5vZGUgPSBpbnN0YW50aWF0ZUFzc3VtcHRpb24oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG5vZGUgPSBhc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgIGxpbmsgPSBsaW5rRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICAgIGFzc3VtcHRpb24gPSBuZXcgQXNzdW1wdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpbmssIHN0YXRlbWVudCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGxpbmtGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGlua05vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRMaW5rTm9kZShjb250ZXh0KSxcbiAgICAgICAgbGluayA9IGNvbnRleHQuZmluZExpbmtCeUxpbmtOb2RlKGxpbmtOb2RlKTtcblxuICByZXR1cm4gbGluaztcbn1cblxuZnVuY3Rpb24gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuIl0sIm5hbWVzIjpbImFsbCIsImV4aXN0cyIsImJhY2t3YXJkc0V2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiQXNzdW1wdGlvbiIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJsaW5rIiwic3RhdGVtZW50IiwiZ2V0TGluayIsImdldFN0YXRlbWVudCIsImdldE1ldGF2YXJpYWJsZSIsImdldFN0YXRlbWVudE5vZGUiLCJpc0NvbmRpdGlvbmFsIiwiZ2V0QXNzdW1wdGlvbk5vZGUiLCJnZXROb2RlIiwiYXNzdW1wdGlvbk5vZGUiLCJpc0VxdWFsVG8iLCJhc3N1bXB0aW9uIiwiYXNzdW1wdGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3N1bXB0aW9uTm9kZSIsImVxdWFsVG8iLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsImZpbmRBc3N1bXB0aW9uIiwiZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlIiwiZmluZERlZHVjZWRTdGF0ZW1lbnQiLCJmaW5kU3VwcG9zZWRTdGF0ZW1lbnRzIiwiZmluZFN1YnByb29mQXNzZXJ0aW9uIiwidmFsaWRhdGUiLCJzdGF0ZSIsImZvcndhcmQiLCJiYWNrIiwiYXNzdW1wdGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVidWciLCJ2YWxpZGF0ZUxpbmsiLCJiaW5kIiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJ2YWxpZGF0ZVdoZW5EZWNsYXJlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJhZGRBc3N1bXB0aW9uIiwiZGVjbGFyZWQiLCJpc0RlY2xhcmVkIiwidmFsaWRhdGVzV2hlbkRlcml2ZWQiLCJkZXJpdmVkIiwiaXNEZXJpdmVkIiwic2NoZW1hcyIsImdldFNjaGVtYXMiLCJzb21lIiwic2NoZW1hIiwic3VjY2VzcyIsInVuaWZ5U2NoZW1hIiwic2NoZW1hVW5pZmllcyIsImNvbnRpbnVhdGlvbiIsInNjaGVtYVN0cmluZyIsImdlbmVyYWxDb250ZXh0IiwicmVjb25jaWxlIiwibGFiZWwiLCJnZXRMYWJlbCIsInVuaWZ5TGFiZWwiLCJsYWJlbFVuaWZpZXMiLCJzcGVjaWZpY0NvbnRleHQiLCJkZWR1Y3Rpb24iLCJnZXREZWR1Y3Rpb24iLCJkZWR1Y2VkU3RhdGVtZW50IiwidW5pZnlEZWR1Y3Rpb24iLCJkZWR1Y3Rpb25VbmlmaWVzIiwiY29uZGl0aW9uYWwiLCJzY2hlbWFDb25kaXRpb25hbCIsInN1cHBvc2l0aW9ucyIsImdldFN1cHBvc2l0aW9ucyIsInN1cHBvc2VkU3RhdGVtZW50cyIsInVuaWZ5U3VwcG9zaXRpb25zIiwic3VwcG9zaXRpb25zVW5pZnkiLCJkZWR1Y3Rpb25TdHJpbmciLCJkZWR1Y3Rpb25Db250ZXh0IiwiZ2V0Q29udGV4dCIsImpvaW4iLCJ1bmlmeVN0YXRlbWVudCIsImNvbW1pdCIsInVuaWZ5U3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbiIsInN1cHBvc2VkU3RhdGVtZW50Iiwic3VwcG9zaXRpb25TdHJpbmciLCJzdXBwb3NlZFN0YXRlbWVudFN0cmluZyIsInN1cHBvc2l0aW9uQ29udGV4dCIsInN1cHBvc2l0aW9uc0xlbmd0aCIsImxlbmd0aCIsInN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCIsImluZGV4IiwidG9KU09OIiwianNvbiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVBc3N1bXB0aW9uIiwibGlua0Zyb21Bc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZSIsImxpbmtOb2RlIiwiZ2V0TGlua05vZGUiLCJmaW5kTGlua0J5TGlua05vZGUiLCJzdGF0ZW1lbnROb2RlIiwiZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBYUE7OztlQUFBOzs7Z0NBWG9FOzBCQUU3Qzt5QkFDSzt1QkFFVTs2QkFDQTtBQUV0QyxNQUFNLEVBQUVBLEdBQUcsRUFBRUMsTUFBTSxFQUFFQyxjQUFjLEVBQUUsR0FBR0MscUNBQXFCLEVBQ3ZELEVBQUVDLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFOUUsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxtQkFBbUJDLHVCQUFPO0lBQ3BELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsSUFBSSxFQUFFQyxTQUFTLENBQUU7UUFDOUQsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLFNBQVMsR0FBR0E7SUFDbkI7SUFFQUMsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDRixJQUFJO0lBQ2xCO0lBRUFHLGVBQWU7UUFDYixP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
231
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2Fzc3VtcHRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpc0Rlcml2ZWQsIGlzRGVjbGFyZWQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUFzc3VtcHRpb24gfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgam9pbiwgaXNvbGF0ZSwgcmVjb25jaWxlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5jb25zdCB7IGFsbCwgc29tZSwgZXhpc3RzLCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQXNzdW1wdGlvbiBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpbmssIHN0YXRlbWVudCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLmxpbmsgPSBsaW5rO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0TGluaygpIHtcbiAgICByZXR1cm4gdGhpcy5saW5rO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZSgpIHsgcmV0dXJuIHRoaXMubGluay5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGdldFN0YXRlbWVudE5vZGUoKSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5nZXRTdGF0ZW1lbnROb2RlKCk7IH1cblxuICBpc0NvbmRpdGlvbmFsKCkgeyByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuaXNDb25kaXRpb25hbCgpIH1cblxuICBnZXRBc3N1bXB0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbk5vZGU7XG4gIH1cblxuICBpc0VxdWFsVG8oYXNzdW1wdGlvbikge1xuICAgIGNvbnN0IGFzc3VtcHRpb25Ob2RlID0gYXNzdW1wdGlvbi5nZXROb2RlKCksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gYXNzdW1wdGlvbk5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIG1hdGNoQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBub2RlID0gYXNzdW1wdGlvbk5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25Ob2RlTWF0Y2hlcztcbiAgfVxuXG4gIGZpbmRBc3N1bXB0aW9uKGNvbnRleHQpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uTm9kZSA9IHRoaXMuZ2V0QXNzdW1wdGlvbk5vZGUoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gY29udGV4dC5maW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kRGVkdWNlZFN0YXRlbWVudChjb250ZXh0KSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5maW5kRGVkdWNlZFN0YXRlbWVudChjb250ZXh0KTsgfVxuXG4gIGZpbmRTdXBwb3NlZFN0YXRlbWVudHMoY29udGV4dCkgeyByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuZmluZFN1cHBvc2VkU3RhdGVtZW50cyhjb250ZXh0KTsgfVxuXG4gIGZpbmRTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0KSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5maW5kU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCk7IH1cblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBhc3N1bXB0aW9uO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICBhc3N1bXB0aW9uID0gdGhpcy5maW5kQXNzdW1wdGlvbihjb250ZXh0KTtcblxuICAgIGlmIChhc3N1bXB0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChhc3N1bXB0aW9uLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBhc3N1bXB0aW9uID0gdGhpczsgIC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVMaW5rID0gdGhpcy52YWxpZGF0ZUxpbmsuYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVMaW5rLFxuICAgICAgdmFsaWRhdGVTdGF0ZW1lbnRcbiAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZVdoZW5EZWNsYXJlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVjbGFyZWQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlV2hlbkRlY2xhcmVkLFxuICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkXG4gICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgIGNvbnRleHQuYWRkQXNzdW1wdGlvbihhc3N1bXB0aW9uKTtcblxuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLmApO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGFzc3VtcHRpb24sIGNvbnRleHQsIGJhY2spO1xuICAgICAgfSwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZWNsYXJlZChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGRlY2xhcmVkID0gaXNEZWNsYXJlZChzdGF0ZSk7XG5cbiAgICBpZiAoIWRlY2xhcmVkKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBkZWNsYXJlZCBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKCk7XG5cbiAgICByZXR1cm4gc29tZShzY2hlbWFzLCAoc2NoZW1hLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy51bmlmeVNjaGVtYShzY2hlbWEsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spO1xuICAgIH0sIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBkZWNsYXJlZCBhc3N1bXB0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgZGVyaXZlZCA9IGlzRGVyaXZlZChzdGF0ZSk7XG5cbiAgICBpZiAoIWRlcml2ZWQpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGRlcml2ZWQgYXNzdW1wdGlvbi4uLmApO1xuXG4gICAgLy8vXG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBkZXJpdmVkIGFzc3VtcHRpb24uYCk7XG5cbiAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZUxpbmsoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24ncyBsaW5rLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5saW5rLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAobGluaywgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgdGhpcy5saW5rID0gbGluaztcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzIGxpbmsuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZXMgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3Mgc3RhdGVtZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeVNjaGVtYShzY2hlbWEsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzY2hlbWFTdHJpbmcgPSBzY2hlbWEuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoc2NoZW1hLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCBnZW5lcmFsQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgcmV0dXJuIHJlY29uY2lsZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNjaGVtYS5nZXRMYWJlbCgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmxpbmsudW5pZnlMYWJlbChsYWJlbCwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICBjb25zdCBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgICAgICBjb25zdCBkZWR1Y3Rpb24gPSBzY2hlbWEuZ2V0RGVkdWN0aW9uKCksXG4gICAgICAgICAgICAgICAgZGVkdWNlZFN0YXRlbWVudCA9IHRoaXMuZmluZERlZHVjZWRTdGF0ZW1lbnQoY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy51bmlmeURlZHVjdGlvbihkZWR1Y3Rpb24sIGRlZHVjZWRTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb25hbCA9IHRoaXMuaXNDb25kaXRpb25hbCgpLFxuICAgICAgICAgICAgICAgICAgc2NoZW1hQ29uZGl0aW9uYWwgPSBzY2hlbWEuaXNDb25kaXRpb25hbCgpO1xuXG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uYWwgIT09IHNjaGVtYUNvbmRpdGlvbmFsKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQudHJhY2UoYEVpdGhlciB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIGlzIHVuY29uZGl0aW9uYWwgd2hpbHN0IHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbiBpcyBjb25kaXRpb25hbCBvciB2aWNlIHZlcnNlLmApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHN1cHBvc2l0aW9ucyA9IHNjaGVtYS5nZXRTdXBwb3NpdGlvbnMoKSxcbiAgICAgICAgICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50cyA9IHRoaXMuZmluZFN1cHBvc2VkU3RhdGVtZW50cyhjb250ZXh0KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBzdXBwb3NlZFN0YXRlbWVudHMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spO1xuICAgICAgICAgIH0sIGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH0sIHNjaGVtYSwgY29udGV4dCwgKHNjaGVtYSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5RGVkdWN0aW9uKGRlZHVjdGlvbiwgZGVkdWNlZFN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIGRlZHVjdGlvblN0cmluZyA9IGRlZHVjdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24ncyBzdGF0ZW1lbnQgIHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3MgJyR7YXNzdW1wdGlvblN0cmluZ30nIHN0YXRlbWVudC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gZGVkdWN0aW9uLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIGRlZHVjdGlvbkNvbnRleHQgPSBkZWR1Y3Rpb24uZ2V0Q29udGV4dCgpO1xuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gZGVkdWN0aW9uQ29udGV4dDsgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgcmV0dXJuIGRlZHVjZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24ncyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24ncyAnJHthc3N1bXB0aW9uU3RyaW5nfScgc3RhdGVtZW50LmApO1xuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgc3VwcG9zZWRTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudFN0cmluZyA9IHN1cHBvc2VkU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24ncyBzdGF0ZW1lbnQgIHdpdGggdGhlICcke3N1cHBvc2VkU3RhdGVtZW50U3RyaW5nfScgc3VwcG9zZWQgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBzdXBwb3NpdGlvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBzdXBwb3NpdGlvbkNvbnRleHQgPSBzdXBwb3NpdGlvbi5nZXRDb250ZXh0KCk7XG5cbiAgICBzcGVjaWZpY0NvbnRleHQgPSBzdXBwb3NpdGlvbkNvbnRleHQ7IC8vL1xuXG4gICAgcmV0dXJuIGpvaW4oKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiBzdXBwb3NlZFN0YXRlbWVudC51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24ncyBzdGF0ZW1lbnQgIHdpdGggdGhlICcke3N1cHBvc2VkU3RhdGVtZW50U3RyaW5nfScgc3VwcG9zZWQgc3RhdGVtZW50LmApO1xuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBzdXBwb3NlZFN0YXRlbWVudHMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbnNMZW5ndGggPSBzdXBwb3NpdGlvbnMubGVuZ3RoLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCA9IHN1cHBvc2VkU3RhdGVtZW50cy5sZW5ndGg7XG5cbiAgICBpZiAoc3VwcG9zaXRpb25zTGVuZ3RoICE9PSBzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGgpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhY2t3YXJkc0V2ZXJ5KHN1cHBvc2l0aW9ucywgKHN1cHBvc2l0aW9uLCBmb3J3YXJkLCBiYWNrLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgc3VwcG9zZWRTdGF0ZW1lbnQgPSBzdXBwb3NlZFN0YXRlbWVudHNbaW5kZXhdO1xuXG4gICAgICByZXR1cm4gdGhpcy51bmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBzdXBwb3NlZFN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjayk7XG4gICAgfSwgZm9yd2FyZCwgYmFjayk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgbGV0IGpzb247XG5cbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJBc3N1bXB0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgYXNzdW1wdGlvbjtcblxuICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIGFzc3VtcHRpb25Ob2RlID0gaW5zdGFudGlhdGVBc3N1bXB0aW9uKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gYXNzdW1wdGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICBsaW5rID0gbGlua0Zyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICBhc3N1bXB0aW9uID0gbmV3IEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsaW5rLCBzdGF0ZW1lbnQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBsaW5rRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxpbmtOb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0TGlua05vZGUoY29udGV4dCksXG4gICAgICAgIGxpbmsgPSBjb250ZXh0LmZpbmRMaW5rQnlMaW5rTm9kZShsaW5rTm9kZSk7XG5cbiAgcmV0dXJuIGxpbms7XG59XG5cbmZ1bmN0aW9uIHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBjb250ZXh0LmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cbiJdLCJuYW1lcyI6WyJhbGwiLCJzb21lIiwiZXhpc3RzIiwiYmFja3dhcmRzRXZlcnkiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJBc3N1bXB0aW9uIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsImxpbmsiLCJzdGF0ZW1lbnQiLCJnZXRMaW5rIiwiZ2V0U3RhdGVtZW50IiwiZ2V0TWV0YXZhcmlhYmxlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImlzQ29uZGl0aW9uYWwiLCJnZXRBc3N1bXB0aW9uTm9kZSIsImdldE5vZGUiLCJhc3N1bXB0aW9uTm9kZSIsImlzRXF1YWxUbyIsImFzc3VtcHRpb24iLCJhc3N1bXB0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc3VtcHRpb25Ob2RlIiwiZXF1YWxUbyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwiZmluZEFzc3VtcHRpb24iLCJmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUiLCJmaW5kRGVkdWNlZFN0YXRlbWVudCIsImZpbmRTdXBwb3NlZFN0YXRlbWVudHMiLCJmaW5kU3VicHJvb2ZBc3NlcnRpb24iLCJ2YWxpZGF0ZSIsInN0YXRlIiwiZm9yd2FyZCIsImJhY2siLCJhc3N1bXB0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJkZWJ1ZyIsInZhbGlkYXRlTGluayIsImJpbmQiLCJ2YWxpZGF0ZVN0YXRlbWVudCIsInZhbGlkYXRlV2hlbkRlY2xhcmVkIiwidmFsaWRhdGVXaGVuRGVyaXZlZCIsImFkZEFzc3VtcHRpb24iLCJkZWNsYXJlZCIsImlzRGVjbGFyZWQiLCJzY2hlbWFzIiwiZ2V0U2NoZW1hcyIsInNjaGVtYSIsInVuaWZ5U2NoZW1hIiwiZGVyaXZlZCIsImlzRGVyaXZlZCIsInNjaGVtYVN0cmluZyIsImlzb2xhdGUiLCJnZW5lcmFsQ29udGV4dCIsInJlY29uY2lsZSIsImxhYmVsIiwiZ2V0TGFiZWwiLCJ1bmlmeUxhYmVsIiwic3BlY2lmaWNDb250ZXh0IiwiZGVkdWN0aW9uIiwiZ2V0RGVkdWN0aW9uIiwiZGVkdWNlZFN0YXRlbWVudCIsInVuaWZ5RGVkdWN0aW9uIiwiY29uZGl0aW9uYWwiLCJzY2hlbWFDb25kaXRpb25hbCIsInN1cHBvc2l0aW9ucyIsImdldFN1cHBvc2l0aW9ucyIsInN1cHBvc2VkU3RhdGVtZW50cyIsInVuaWZ5U3VwcG9zaXRpb25zIiwiZGVkdWN0aW9uU3RyaW5nIiwiZGVkdWN0aW9uQ29udGV4dCIsImdldENvbnRleHQiLCJqb2luIiwidW5pZnlTdGF0ZW1lbnQiLCJjb21taXQiLCJ1bmlmeVN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb24iLCJzdXBwb3NlZFN0YXRlbWVudCIsInN1cHBvc2l0aW9uU3RyaW5nIiwic3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmciLCJzdXBwb3NpdGlvbkNvbnRleHQiLCJzdXBwb3NpdGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGgiLCJpbmRleCIsInRvSlNPTiIsImpzb24iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlQXNzdW1wdGlvbiIsImxpbmtGcm9tQXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUiLCJsaW5rTm9kZSIsImdldExpbmtOb2RlIiwiZmluZExpbmtCeUxpbmtOb2RlIiwic3RhdGVtZW50Tm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVlBOzs7ZUFBQTs7O2dDQVZvRTswQkFFN0M7dUJBQ2U7NkJBQ0E7eUJBQ2dCO0FBRXRELE1BQU0sRUFBRUEsR0FBRyxFQUFFQyxJQUFJLEVBQUVDLE1BQU0sRUFBRUMsY0FBYyxFQUFFLEdBQUdDLHFDQUFxQixFQUM3RCxFQUFFQyxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO01BRTlFLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsbUJBQW1CQyx1QkFBTztJQUNwRCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLElBQUksRUFBRUMsU0FBUyxDQUFFO1FBQzlELEtBQUssQ0FBQ0wsU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFB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
@@ -116,16 +116,10 @@ const _default = (0, _elements.define)(class Link extends _occamlanguages.Elemen
116
116
  unifyMetavariable(metavariable, generalContext, specificContext, forward, back) {
117
117
  const context = specificContext, linkString = this.getString(), metavariableString = metavariable.getString();
118
118
  context.trace(`Unifying the '${metavariableString}' metavariable with the '${linkString}' link...`);
119
- return this.metavariable.unifyMetavariableIntrinsically(metavariable, generalContext, specificContext, (metavariableUnifiesIntrinsically)=>{
120
- let metavariableUnifies = false;
121
- if (metavariableUnifiesIntrinsically) {
122
- metavariableUnifies = true;
123
- }
124
- if (metavariableUnifies) {
125
- context.debug(`...unified the '${metavariableString}' metavariable with the '${linkString}' link.`);
126
- }
127
- return continuation(metavariableUnifies);
128
- });
119
+ return this.metavariable.unifyMetavariableIntrinsically(metavariable, generalContext, specificContext, (generalContext, specificContext, back)=>{
120
+ context.debug(`...unified the '${metavariableString}' metavariable with the '${linkString}' link.`);
121
+ return forward(generalContext, specificContext, back);
122
+ }, back);
129
123
  }
130
124
  toJSON() {
131
125
  let json;
@@ -151,4 +145,4 @@ function metavariableFromLinkNode(linkNode, context) {
151
145
  return metavariable;
152
146
  }
153
147
 
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2xpbmsuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUxpbmsgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgUkVGRVJFTkNFX01FVEFfVFlQRV9OQU1FIH0gZnJvbSBcIi4uL21ldGFUeXBlTmFtZXNcIjtcbmltcG9ydCB7IGpvaW4sIHJlY29uY2lsZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBhbGwgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIExpbmsgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhdmFyaWFibGUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5tZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZ2V0TGlua05vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGxpbmtOb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gbGlua05vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOb2RlKCkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSB0aGlzLm1ldGF2YXJpYWJsZS5nZXROb2RlKCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIGdldE1ldGFUeXBlKCkgeyByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUuZ2V0TWV0YVR5cGUoKTsgfVxuXG4gIGlzRXF1YWxUbyhsaW5rKSB7XG4gICAgY29uc3QgbGlua05vZGUgPSBsaW5rLmdldE5vZGUoKSxcbiAgICAgICAgICBsaW5rTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTGlua05vZGUobGlua05vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBsaW5rTm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hMaW5rTm9kZShsaW5rTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBsaW5rTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBsaW5rTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gbGlua05vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHsgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTsgfVxuXG4gIGZpbmRMaW5rKGNvbnRleHQpIHtcbiAgICBjb25zdCBsaW5rTm9kZSA9IHRoaXMuZ2V0TGlua05vZGUoKSxcbiAgICAgICAgICBsaW5rID0gY29udGV4dC5maW5kTGlua0J5TGlua05vZGUobGlua05vZGUpO1xuXG4gICAgcmV0dXJuIGxpbms7XG4gIH1cblxuICBjb21wYXJlUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuICAgIGxldCBjb21wYXJlc1RvUGFyYW10ZXIgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXIuZ2V0TmFtZSgpO1xuXG4gICAgICBpZiAocGFyYW1ldGVyTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gdGhpcy5nZXRNZXRhdmFyaWFibGVOYW1lKCk7XG5cbiAgICAgICAgaWYgKHBhcmFtZXRlck5hbWUgPT09IG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICAgICAgICBjb21wYXJlc1RvUGFyYW10ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9QYXJhbXRlcjtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IGxpbms7XG5cbiAgICBjb25zdCBsaW5rU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluay4uLmApO1xuXG4gICAgbGluayA9IHRoaXMuZmluZExpbmsoY29udGV4dCk7XG5cbiAgICBpZiAobGluayAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke2xpbmtTdHJpbmd9JyBsaW5rIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQobGluaywgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgbGluayA9IHRoaXM7IC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVNZXRhdmFyaWFibGUgPSB0aGlzLnZhbGlkYXRlTWV0YXZhcmlhYmxlLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gYWxsKFtcbiAgICAgIHZhbGlkYXRlTWV0YXZhcmlhYmxlXG4gICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5hZGRMaW5rKGxpbmspO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChsaW5rLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlTWV0YXZhcmlhYmxlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgbGlua1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7bGlua1N0cmluZ30nIGxpbmsncyBtZXRhdmFyaWFibGUuLi4nYCk7XG5cbiAgICByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChtZXRhdmFyaWFibGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IG1ldGFUeXBlID0gbWV0YXZhcmlhYmxlLmdldE1ldGFUeXBlKCk7XG5cbiAgICAgIGlmIChtZXRhVHlwZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCByZWZlcmVuY2VNZXRhVHlwZU5hbWUgPSBSRUZFUkVOQ0VfTUVUQV9UWVBFX05BTUUsXG4gICAgICAgICAgICAgIHJlZmVyZW5jZU1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShyZWZlcmVuY2VNZXRhVHlwZU5hbWUpLFxuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9SZWZlcmVuY2VNZXRhVHlwZSA9IG1ldGF2YXJpYWJsZS5pc01ldGFUeXBlRXF1YWxUbyhyZWZlcmVuY2VNZXRhVHlwZSk7XG5cbiAgICAgICAgaWYgKCFtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9SZWZlcmVuY2VNZXRhVHlwZSkge1xuICAgICAgICAgIGNvbnN0IG1ldGFUeXBlU3RyaW5nID0gbWV0YVR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZU1ldGFUeXBlU3RyaW5nID0gcmVmZXJlbmNlTWV0YVR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7bGlua1N0cmluZ30nIGxpbmsncyAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUncyAnJHttZXRhVHlwZVN0cmluZ30nIG1ldGEtdHlwZSBzaG91bGQgYmUgdGhlICcke3JlZmVyZW5jZU1ldGFUeXBlU3RyaW5nfScgbWV0YS10eXBlLmApO1xuXG4gICAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLm1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluaydzIG1ldGF2YXJpYWJsZS4nYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpLFxuICAgICAgICAgIGxpbmtTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGUgPSBsYWJlbC5nZXRNZXRhdmFyaWFibGUoKSxcbiAgICAgICAgICBsYWJlbENvbnRleHQgPSBsYWJlbC5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gbGFiZWxDb250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLmApO1xuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGxpbmtTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHdpdGggdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUudW5pZnlNZXRhdmFyaWFibGVJbnRyaW5zaWNhbGx5KG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKG1ldGF2YXJpYWJsZVVuaWZpZXNJbnRyaW5zaWNhbGx5KSA9PiB7XG4gICAgICBsZXQgbWV0YXZhcmlhYmxlVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlVW5pZmllc0ludHJpbnNpY2FsbHkpIHtcbiAgICAgICAgbWV0YXZhcmlhYmxlVW5pZmllcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVVbmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB3aXRoIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluay5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihtZXRhdmFyaWFibGVVbmlmaWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBsZXQganNvbjtcblxuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBqc29uID0ge1xuICAgICAgc3RyaW5nXG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkxpbmtcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBsaW5rO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgbGlua05vZGUgPSBpbnN0YW50aWF0ZUxpbmsoc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG5vZGUgPSBsaW5rTm9kZSwgIC8vL1xuICAgICAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTGlua05vZGUobGlua05vZGUsIGNvbnRleHQpO1xuXG4gICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgbGluayA9IG5ldyBMaW5rKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YXZhcmlhYmxlKTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBsaW5rO1xuICB9XG59KTtcblxuZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUxpbmtOb2RlKGxpbmtOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBsaW5rTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IGNvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuIl0sIm5hbWVzIjpbImFsbCIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsImRlZmluZSIsIkxpbmsiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwibWV0YXZhcmlhYmxlIiwiZ2V0TWV0YXZhcmlhYmxlIiwiZ2V0TGlua05vZGUiLCJnZXROb2RlIiwibGlua05vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsImdldE1ldGFUeXBlIiwiaXNFcXVhbFRvIiwibGluayIsImxpbmtOb2RlTWF0Y2hlcyIsIm1hdGNoTGlua05vZGUiLCJlcXVhbFRvIiwibm9kZU1hdGNoZXMiLCJtYXRjaE5vZGUiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kTGluayIsImZpbmRMaW5rQnlMaW5rTm9kZSIsImNvbXBhcmVQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJjb21wYXJlc1RvUGFyYW10ZXIiLCJzaW5ndWxhciIsImlzU2luZ3VsYXIiLCJwYXJhbWV0ZXJOYW1lIiwiZ2V0TmFtZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwidmFsaWRhdGUiLCJzdGF0ZSIsImZvcndhcmQiLCJiYWNrIiwibGlua1N0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVidWciLCJ2YWxpZGF0ZU1ldGF2YXJpYWJsZSIsImJpbmQiLCJhZGRMaW5rIiwibWV0YVR5cGUiLCJyZWZlcmVuY2VNZXRhVHlwZU5hbWUiLCJSRUZFUkVOQ0VfTUVUQV9UWVBFX05BTUUiLCJyZWZlcmVuY2VNZXRhVHlwZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwibWV0YXZhcmlhYmxlTWV0YVR5cGVFcXVhbFRvUmVmZXJlbmNlTWV0YVR5cGUiLCJpc01ldGFUeXBlRXF1YWxUbyIsIm1ldGFUeXBlU3RyaW5nIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwicmVmZXJlbmNlTWV0YVR5cGVTdHJpbmciLCJ1bmlmeUxhYmVsIiwibGFiZWwiLCJsYWJlbFN0cmluZyIsImxhYmVsQ29udGV4dCIsImdldENvbnRleHQiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsImpvaW4iLCJyZWNvbmNpbGUiLCJ1bmlmeU1ldGF2YXJpYWJsZSIsImNvbW1pdCIsInVuaWZ5TWV0YXZhcmlhYmxlSW50cmluc2ljYWxseSIsIm1ldGF2YXJpYWJsZVVuaWZpZXNJbnRyaW5zaWNhbGx5IiwibWV0YXZhcmlhYmxlVW5pZmllcyIsImNvbnRpbnVhdGlvbiIsInRvSlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlTGluayIsIm1ldGF2YXJpYWJsZUZyb21MaW5rTm9kZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVdBOzs7ZUFBQTs7O2dDQVQrQzswQkFFeEI7NkJBQ1M7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
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2xpbmsuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUxpbmsgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgUkVGRVJFTkNFX01FVEFfVFlQRV9OQU1FIH0gZnJvbSBcIi4uL21ldGFUeXBlTmFtZXNcIjtcbmltcG9ydCB7IGpvaW4sIHJlY29uY2lsZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBhbGwgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIExpbmsgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhdmFyaWFibGUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5tZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZ2V0TGlua05vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGxpbmtOb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gbGlua05vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOb2RlKCkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSB0aGlzLm1ldGF2YXJpYWJsZS5nZXROb2RlKCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIGdldE1ldGFUeXBlKCkgeyByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUuZ2V0TWV0YVR5cGUoKTsgfVxuXG4gIGlzRXF1YWxUbyhsaW5rKSB7XG4gICAgY29uc3QgbGlua05vZGUgPSBsaW5rLmdldE5vZGUoKSxcbiAgICAgICAgICBsaW5rTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTGlua05vZGUobGlua05vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBsaW5rTm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hMaW5rTm9kZShsaW5rTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBsaW5rTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBsaW5rTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gbGlua05vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHsgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTsgfVxuXG4gIGZpbmRMaW5rKGNvbnRleHQpIHtcbiAgICBjb25zdCBsaW5rTm9kZSA9IHRoaXMuZ2V0TGlua05vZGUoKSxcbiAgICAgICAgICBsaW5rID0gY29udGV4dC5maW5kTGlua0J5TGlua05vZGUobGlua05vZGUpO1xuXG4gICAgcmV0dXJuIGxpbms7XG4gIH1cblxuICBjb21wYXJlUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuICAgIGxldCBjb21wYXJlc1RvUGFyYW10ZXIgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXIuZ2V0TmFtZSgpO1xuXG4gICAgICBpZiAocGFyYW1ldGVyTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gdGhpcy5nZXRNZXRhdmFyaWFibGVOYW1lKCk7XG5cbiAgICAgICAgaWYgKHBhcmFtZXRlck5hbWUgPT09IG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICAgICAgICBjb21wYXJlc1RvUGFyYW10ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9QYXJhbXRlcjtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IGxpbms7XG5cbiAgICBjb25zdCBsaW5rU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluay4uLmApO1xuXG4gICAgbGluayA9IHRoaXMuZmluZExpbmsoY29udGV4dCk7XG5cbiAgICBpZiAobGluayAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke2xpbmtTdHJpbmd9JyBsaW5rIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQobGluaywgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgbGluayA9IHRoaXM7IC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVNZXRhdmFyaWFibGUgPSB0aGlzLnZhbGlkYXRlTWV0YXZhcmlhYmxlLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gYWxsKFtcbiAgICAgIHZhbGlkYXRlTWV0YXZhcmlhYmxlXG4gICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5hZGRMaW5rKGxpbmspO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChsaW5rLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlTWV0YXZhcmlhYmxlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgbGlua1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7bGlua1N0cmluZ30nIGxpbmsncyBtZXRhdmFyaWFibGUuLi4nYCk7XG5cbiAgICByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChtZXRhdmFyaWFibGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IG1ldGFUeXBlID0gbWV0YXZhcmlhYmxlLmdldE1ldGFUeXBlKCk7XG5cbiAgICAgIGlmIChtZXRhVHlwZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCByZWZlcmVuY2VNZXRhVHlwZU5hbWUgPSBSRUZFUkVOQ0VfTUVUQV9UWVBFX05BTUUsXG4gICAgICAgICAgICAgIHJlZmVyZW5jZU1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShyZWZlcmVuY2VNZXRhVHlwZU5hbWUpLFxuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9SZWZlcmVuY2VNZXRhVHlwZSA9IG1ldGF2YXJpYWJsZS5pc01ldGFUeXBlRXF1YWxUbyhyZWZlcmVuY2VNZXRhVHlwZSk7XG5cbiAgICAgICAgaWYgKCFtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9SZWZlcmVuY2VNZXRhVHlwZSkge1xuICAgICAgICAgIGNvbnN0IG1ldGFUeXBlU3RyaW5nID0gbWV0YVR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZU1ldGFUeXBlU3RyaW5nID0gcmVmZXJlbmNlTWV0YVR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7bGlua1N0cmluZ30nIGxpbmsncyAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUncyAnJHttZXRhVHlwZVN0cmluZ30nIG1ldGEtdHlwZSBzaG91bGQgYmUgdGhlICcke3JlZmVyZW5jZU1ldGFUeXBlU3RyaW5nfScgbWV0YS10eXBlLmApO1xuXG4gICAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLm1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluaydzIG1ldGF2YXJpYWJsZS4nYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpLFxuICAgICAgICAgIGxpbmtTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGUgPSBsYWJlbC5nZXRNZXRhdmFyaWFibGUoKSxcbiAgICAgICAgICBsYWJlbENvbnRleHQgPSBsYWJlbC5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gbGFiZWxDb250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLmApO1xuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGxpbmtTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHdpdGggdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUudW5pZnlNZXRhdmFyaWFibGVJbnRyaW5zaWNhbGx5KG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB3aXRoIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluay5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgbGV0IGpzb247XG5cbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAganNvbiA9IHtcbiAgICAgIHN0cmluZ1xuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJMaW5rXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgbGluaztcblxuICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIGxpbmtOb2RlID0gaW5zdGFudGlhdGVMaW5rKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gbGlua05vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUxpbmtOb2RlKGxpbmtOb2RlLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgIGxpbmsgPSBuZXcgTGluayhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG1ldGF2YXJpYWJsZSk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbGluaztcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21MaW5rTm9kZShsaW5rTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gbGlua05vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cbiJdLCJuYW1lcyI6WyJhbGwiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJkZWZpbmUiLCJMaW5rIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsIm1ldGF2YXJpYWJsZSIsImdldE1ldGF2YXJpYWJsZSIsImdldExpbmtOb2RlIiwiZ2V0Tm9kZSIsImxpbmtOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJnZXRNZXRhVHlwZSIsImlzRXF1YWxUbyIsImxpbmsiLCJsaW5rTm9kZU1hdGNoZXMiLCJtYXRjaExpbmtOb2RlIiwiZXF1YWxUbyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiZmluZExpbmsiLCJmaW5kTGlua0J5TGlua05vZGUiLCJjb21wYXJlUGFyYW1ldGVyIiwicGFyYW1ldGVyIiwiY29tcGFyZXNUb1BhcmFtdGVyIiwic2luZ3VsYXIiLCJpc1Npbmd1bGFyIiwicGFyYW1ldGVyTmFtZSIsImdldE5hbWUiLCJtZXRhdmFyaWFibGVOYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsInZhbGlkYXRlIiwic3RhdGUiLCJmb3J3YXJkIiwiYmFjayIsImxpbmtTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlYnVnIiwidmFsaWRhdGVNZXRhdmFyaWFibGUiLCJiaW5kIiwiYWRkTGluayIsIm1ldGFUeXBlIiwicmVmZXJlbmNlTWV0YVR5cGVOYW1lIiwiUkVGRVJFTkNFX01FVEFfVFlQRV9OQU1FIiwicmVmZXJlbmNlTWV0YVR5cGUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsIm1ldGF2YXJpYWJsZU1ldGFUeXBlRXF1YWxUb1JlZmVyZW5jZU1ldGFUeXBlIiwiaXNNZXRhVHlwZUVxdWFsVG8iLCJtZXRhVHlwZVN0cmluZyIsIm1ldGF2YXJpYWJsZVN0cmluZyIsInJlZmVyZW5jZU1ldGFUeXBlU3RyaW5nIiwidW5pZnlMYWJlbCIsImxhYmVsIiwibGFiZWxTdHJpbmciLCJsYWJlbENvbnRleHQiLCJnZXRDb250ZXh0IiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJqb2luIiwicmVjb25jaWxlIiwidW5pZnlNZXRhdmFyaWFibGUiLCJjb21taXQiLCJ1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkiLCJ0b0pTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZUxpbmsiLCJtZXRhdmFyaWFibGVGcm9tTGlua05vZGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFXQTs7O2VBQUE7OztnQ0FUK0M7MEJBRXhCOzZCQUNTOytCQUNTO3lCQUNJO0FBRTdDLE1BQU0sRUFBRUEsR0FBRyxFQUFFLEdBQUdDLHFDQUFxQjtNQUVyQyxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGFBQWFDLHVCQUFPO0lBQzlDLFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsWUFBWSxDQUFFO1FBQzNELEtBQUssQ0FBQ0osU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxZQUFZLEdBQUdBO0lB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
@@ -105,8 +105,7 @@ const _default = (0, _elements.define)(class Subproof extends _occamlanguages.El
105
105
  verifySuppositions(context, forward, back) {
106
106
  const suppositionsLength = this.suppositions.length;
107
107
  if (suppositionsLength === 0) {
108
- const suppositionsVerify = true; ///
109
- return continuation(suppositionsVerify, context);
108
+ return back();
110
109
  }
111
110
  const subproofString = this.getString(); ///
112
111
  context.trace(`Verifying the '${subproofString}' subproof's suppositions...`);
@@ -133,4 +132,4 @@ const _default = (0, _elements.define)(class Subproof extends _occamlanguages.El
133
132
  static name = "Subproof";
134
133
  });
135
134
 
136
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3N1YnByb29mLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaXNvbGF0ZSwgZW5jbG9zZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5jb25zdCB7IGJyZWFrYWJsZSB9ID0gYnJlYWtQb2ludFV0aWxpdGllcyxcbiAgICAgIHsgY3V0LCBhbGwsIGV2ZXJ5IH0gPSBjb250aW51YXRpb25VdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBTdWJwcm9vZiBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbikge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9ucztcbiAgICB0aGlzLnN1YkRlcml2YXRpb24gPSBzdWJEZXJpdmF0aW9uO1xuICB9XG5cbiAgZ2V0U3VwcG9zaXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnN1cHBvc2l0aW9ucztcbiAgfVxuXG4gIGdldFN1YkRlcml2YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3ViRGVyaXZhdGlvbjtcbiAgfVxuXG4gIGdldFN1YnByb29mTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgc3VicHJvb2ZOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIHN1YnByb29mTm9kZTtcbiAgfVxuXG4gIGdldExhc3RTdGVwKCkgeyByZXR1cm4gdGhpcy5zdWJEZXJpdmF0aW9uLmdldExhc3RTdGVwKCk7IH1cblxuICBnZXRTdGF0ZW1lbnRzKCkge1xuICAgIGNvbnN0IGxhc3RTdGVwID0gdGhpcy5nZXRMYXN0U3RlcCgpLFxuICAgICAgICAgIHN1cHBvc2l0aW9uU3RhdGVtZW50cyA9IHRoaXMuc3VwcG9zaXRpb25zLm1hcCgoc3VwcG9zaXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1cHBvc2l0aW9uU3RhdGVtZW50ID0gc3VwcG9zaXRpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgICAgICAgIHJldHVybiBzdXBwb3NpdGlvblN0YXRlbWVudDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBsYXN0U3RlcFN0YXRlbWVudCA9IGxhc3RTdGVwLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIHN0YXRlbWVudHMgPSBbXG4gICAgICAgICAgICAuLi5zdXBwb3NpdGlvblN0YXRlbWVudHMsXG4gICAgICAgICAgICBsYXN0U3RlcFN0YXRlbWVudFxuICAgICAgICAgIF07XG5cbiAgICByZXR1cm4gc3RhdGVtZW50cztcbiAgfVxuXG4gIGlzRmFjdCgpIHtcbiAgICBjb25zdCBmYWN0ID0gZmFsc2U7XG5cbiAgICByZXR1cm4gZmFjdDtcbiAgfVxuXG4gIGlzQnVicHJvb2YoKSB7XG4gICAgY29uc3Qgc3VicHJvb2YgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHN1YnByb29mO1xuICB9XG5cbiAgY29tcGFyZVN0ZXAoc3RlcCwgY29udGV4dCkge1xuICAgIGxldCBjb21wYXJlc1RvU3RlcDtcblxuICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpLFxuICAgICAgICAgIHN1YnByb29mU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgQ29tcGFyaW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB0byB0aGUgJyR7c3VicHJvb2ZTdHJpbmd9JyBzdWJwcm9vZi4uLmApO1xuXG4gICAgY29tcGFyZXNUb1N0ZXAgPSBmYWxzZTtcblxuICAgIGlmIChjb21wYXJlc1RvU3RlcCkge1xuICAgICAgY29udGV4dC50cmFjZShgLi4uY29tcGFyZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHRvIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnByb29mLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wYXJlc1RvU3RlcDtcbiAgfVxuXG4gIGNvbXBhcmVTdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgbGV0IGNvbXBhcmVzVG9TdGF0ZW1lbnQ7XG5cbiAgICBjb25zdCBzdWJwcm9vZlN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBDb21wYXJpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB0byB0aGUgJyR7c3VicHJvb2ZTdHJpbmd9JyBzdWJwcm9vZi4uLmApO1xuXG4gICAgY29tcGFyZXNUb1N0YXRlbWVudCA9IGZhbHNlO1xuXG4gICAgaWYgKGNvbXBhcmVzVG9TdGF0ZW1lbnQpIHtcbiAgICAgIGNvbnRleHQudHJhY2UoYC4uLmNvbXBhcmVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgdG8gdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2YuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9TdGF0ZW1lbnQ7XG4gIH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24oY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGZvcndhcmQgPSBjdXQoZm9yd2FyZCwgYmFjayk7IC8vL1xuXG4gICAgY29uc3Qgc3VicHJvb2ZTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2YuLi5gKTtcblxuICAgIHJldHVybiBpc29sYXRlKChjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICByZXR1cm4gZW5jbG9zZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB2ZXJpZnlTdXBwb3NpdGlvbnMgPSB0aGlzLnZlcmlmeVN1cHBvc2l0aW9ucy5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICB2ZXJpZnlTdWJEZXJpdmF0aW9uID0gdGhpcy52ZXJpZnlTdWJEZXJpdmF0aW9uLmJpbmQodGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGFsbChbXG4gICAgICAgICAgdmVyaWZ5U3VwcG9zaXRpb25zLFxuICAgICAgICAgIHZlcmlmeVN1YkRlcml2YXRpb25cbiAgICAgICAgXSwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICByZXR1cm4gZm9yd2FyZChiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2YuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIChleGNlcHRpb24pID0+IHtcbiAgICAgIGlmIChleGNlcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC50cmFjZShgVW5hYmxlIHRvIHZlcmlmeSB0aGUgJyR7c3VicHJvb2ZTdHJpbmd9JyBzdWJwcm9vZi5gKTtcblxuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdmVyaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBzdWJwcm9vZlN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBzdXBwb3NpdGlvblN0cmluZyA9IHN1cHBvc2l0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnByb29mJ3MgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uLnZlcmlmeShjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2YncyAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZlcmlmeVN1cHBvc2l0aW9ucyhjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25zTGVuZ3RoID0gdGhpcy5zdXBwb3NpdGlvbnMubGVuZ3RoO1xuXG4gICAgaWYgKHN1cHBvc2l0aW9uc0xlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3Qgc3VwcG9zaXRpb25zVmVyaWZ5ID0gdHJ1ZTsgIC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cHBvc2l0aW9uc1ZlcmlmeSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3VicHJvb2ZTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2YncyBzdXBwb3NpdGlvbnMuLi5gKTtcblxuICAgIHJldHVybiBldmVyeSh0aGlzLnN1cHBvc2l0aW9ucywgKHN1cHBvc2l0aW9uLCBjb250ZXp0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJpZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgY29udGV6dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgY29uc3QgZmFjdE9yU3VicHJvb2YgPSBzdXBwb3NpdGlvbjsgLy8vXG5cbiAgICAgICAgY29udGV4dC5hZGRGYWN0T3JTdWJwcm9vZihmYWN0T3JTdWJwcm9vZik7XG5cbiAgICAgICAgY29udGV4dC5hc3NpZ25Bc3NpZ25tZW50cygpO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgICAgfSwgYmFjayk7XG4gICAgfSwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnByb29mJ3Mgc3VwcG9zaXRpb25zLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZlcmlmeVN1YkRlcml2YXRpb24oY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHN1YnByb29mU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnJvb2YncyBzdWItZGVyaXZhdGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuc3ViRGVyaXZhdGlvbi52ZXJpZnkoY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnJvb2YncyBzdWItZGVyaXZhdGlvbi5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiU3VicHJvb2ZcIjtcbn0pO1xuIl0sIm5hbWVzIjpbImJyZWFrYWJsZSIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJjdXQiLCJhbGwiLCJldmVyeSIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsImRlZmluZSIsIlN1YnByb29mIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInN1cHBvc2l0aW9ucyIsInN1YkRlcml2YXRpb24iLCJnZXRTdXBwb3NpdGlvbnMiLCJnZXRTdWJEZXJpdmF0aW9uIiwiZ2V0U3VicHJvb2ZOb2RlIiwiZ2V0Tm9kZSIsInN1YnByb29mTm9kZSIsImdldExhc3RTdGVwIiwiZ2V0U3RhdGVtZW50cyIsImxhc3RTdGVwIiwic3VwcG9zaXRpb25TdGF0ZW1lbnRzIiwibWFwIiwic3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvblN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsImxhc3RTdGVwU3RhdGVtZW50Iiwic3RhdGVtZW50cyIsImlzRmFjdCIsImZhY3QiLCJpc0J1YnByb29mIiwic3VicHJvb2YiLCJjb21wYXJlU3RlcCIsInN0ZXAiLCJjb21wYXJlc1RvU3RlcCIsInN0ZXBTdHJpbmciLCJnZXRTdHJpbmciLCJzdWJwcm9vZlN0cmluZyIsInRyYWNlIiwiY29tcGFyZVN0YXRlbWVudCIsInN0YXRlbWVudCIsImNvbXBhcmVzVG9TdGF0ZW1lbnQiLCJzdGF0ZW1lbnRTdHJpbmciLCJ2ZXJpZnkiLCJmb3J3YXJkIiwiYmFjayIsImlzb2xhdGUiLCJlbmNsb3NlIiwidmVyaWZ5U3VwcG9zaXRpb25zIiwiYmluZCIsInZlcmlmeVN1YkRlcml2YXRpb24iLCJkZWJ1ZyIsImV4Y2VwdGlvbiIsInZlcmlmeVN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25TdHJpbmciLCJzdXBwb3NpdGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJzdXBwb3NpdGlvbnNWZXJpZnkiLCJjb250aW51YXRpb24iLCJjb250ZXp0IiwiZmFjdE9yU3VicHJvb2YiLCJhZGRGYWN0T3JTdWJwcm9vZiIsImFzc2lnbkFzc2lnbm1lbnRzIiwibmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBVUE7OztlQUFBOzs7Z0NBUm9FOzBCQUU3Qzt5QkFDVTtBQUVqQyxNQUFNLEVBQUVBLFNBQVMsRUFBRSxHQUFHQyxtQ0FBbUIsRUFDbkMsRUFBRUMsR0FBRyxFQUFFQyxHQUFHLEVBQUVDLEtBQUssRUFBRSxHQUFHQyxxQ0FBcUI7TUFFakQsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxpQkFBaUJDLHVCQUFPO0lBQ2xELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsWUFBWSxFQUFFQyxhQUFhLENBQUU7UUFDMUUsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLFlBQVksR0FBR0E7UUFDcEIsSUFBSSxDQUFDQyxhQUFhLEdBQUdBO0lBQ3ZCO0lBRUFDLGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQ0YsWUFBWTtJQUMxQjtJQUVBRyxtQkFBbUI7UUFDakIsT0FBTyxJQUFJLENBQUNGLGFBQWE7SUFDM0I7SUFFQUcsa0JBQWtCO1FBQ2hCLE1BQU1OLE9BQU8sSUFBSSxDQUFDTyxPQUFPLElBQ25CQyxlQUFlUixNQUFPLEdBQUc7UUFFL0IsT0FBT1E7SUFDVDtJQUVBQyxjQUFjO1FBQUUsT0FBTyxJQUFJLENBQUNOLGFBQWEsQ0FBQ00sV0FBVztJQUFJO0lBRXpEQyxnQkFBZ0I7UUFDZCxNQUFNQyxXQUFXLElBQUksQ0FBQ0YsV0FBVyxJQUMzQkcsd0JBQXdCLElBQUksQ0FBQ1YsWUFBWSxDQUFDVyxHQUFHLENBQUMsQ0FBQ0M7WUFDN0MsTUFBTUMsdUJBQXVCRCxZQUFZRSxZQUFZO1lBRXJELE9BQU9EO1FBQ1QsSUFDQUUsb0JBQW9CTixTQUFTSyxZQUFZLElBQ3pDRSxhQUFhO2VBQ1JOO1lBQ0hLO1NBQ0Q7UUFFUCxP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
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3N1YnByb29mLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaXNvbGF0ZSwgZW5jbG9zZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5jb25zdCB7IGJyZWFrYWJsZSB9ID0gYnJlYWtQb2ludFV0aWxpdGllcyxcbiAgICAgIHsgY3V0LCBhbGwsIGV2ZXJ5IH0gPSBjb250aW51YXRpb25VdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBTdWJwcm9vZiBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbikge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9ucztcbiAgICB0aGlzLnN1YkRlcml2YXRpb24gPSBzdWJEZXJpdmF0aW9uO1xuICB9XG5cbiAgZ2V0U3VwcG9zaXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnN1cHBvc2l0aW9ucztcbiAgfVxuXG4gIGdldFN1YkRlcml2YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3ViRGVyaXZhdGlvbjtcbiAgfVxuXG4gIGdldFN1YnByb29mTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgc3VicHJvb2ZOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIHN1YnByb29mTm9kZTtcbiAgfVxuXG4gIGdldExhc3RTdGVwKCkgeyByZXR1cm4gdGhpcy5zdWJEZXJpdmF0aW9uLmdldExhc3RTdGVwKCk7IH1cblxuICBnZXRTdGF0ZW1lbnRzKCkge1xuICAgIGNvbnN0IGxhc3RTdGVwID0gdGhpcy5nZXRMYXN0U3RlcCgpLFxuICAgICAgICAgIHN1cHBvc2l0aW9uU3RhdGVtZW50cyA9IHRoaXMuc3VwcG9zaXRpb25zLm1hcCgoc3VwcG9zaXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1cHBvc2l0aW9uU3RhdGVtZW50ID0gc3VwcG9zaXRpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgICAgICAgIHJldHVybiBzdXBwb3NpdGlvblN0YXRlbWVudDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBsYXN0U3RlcFN0YXRlbWVudCA9IGxhc3RTdGVwLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIHN0YXRlbWVudHMgPSBbXG4gICAgICAgICAgICAuLi5zdXBwb3NpdGlvblN0YXRlbWVudHMsXG4gICAgICAgICAgICBsYXN0U3RlcFN0YXRlbWVudFxuICAgICAgICAgIF07XG5cbiAgICByZXR1cm4gc3RhdGVtZW50cztcbiAgfVxuXG4gIGlzRmFjdCgpIHtcbiAgICBjb25zdCBmYWN0ID0gZmFsc2U7XG5cbiAgICByZXR1cm4gZmFjdDtcbiAgfVxuXG4gIGlzQnVicHJvb2YoKSB7XG4gICAgY29uc3Qgc3VicHJvb2YgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHN1YnByb29mO1xuICB9XG5cbiAgY29tcGFyZVN0ZXAoc3RlcCwgY29udGV4dCkge1xuICAgIGxldCBjb21wYXJlc1RvU3RlcDtcblxuICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpLFxuICAgICAgICAgIHN1YnByb29mU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgQ29tcGFyaW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB0byB0aGUgJyR7c3VicHJvb2ZTdHJpbmd9JyBzdWJwcm9vZi4uLmApO1xuXG4gICAgY29tcGFyZXNUb1N0ZXAgPSBmYWxzZTtcblxuICAgIGlmIChjb21wYXJlc1RvU3RlcCkge1xuICAgICAgY29udGV4dC50cmFjZShgLi4uY29tcGFyZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHRvIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnByb29mLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wYXJlc1RvU3RlcDtcbiAgfVxuXG4gIGNvbXBhcmVTdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgbGV0IGNvbXBhcmVzVG9TdGF0ZW1lbnQ7XG5cbiAgICBjb25zdCBzdWJwcm9vZlN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBDb21wYXJpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB0byB0aGUgJyR7c3VicHJvb2ZTdHJpbmd9JyBzdWJwcm9vZi4uLmApO1xuXG4gICAgY29tcGFyZXNUb1N0YXRlbWVudCA9IGZhbHNlO1xuXG4gICAgaWYgKGNvbXBhcmVzVG9TdGF0ZW1lbnQpIHtcbiAgICAgIGNvbnRleHQudHJhY2UoYC4uLmNvbXBhcmVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgdG8gdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2YuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9TdGF0ZW1lbnQ7XG4gIH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24oY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGZvcndhcmQgPSBjdXQoZm9yd2FyZCwgYmFjayk7IC8vL1xuXG4gICAgY29uc3Qgc3VicHJvb2ZTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2YuLi5gKTtcblxuICAgIHJldHVybiBpc29sYXRlKChjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICByZXR1cm4gZW5jbG9zZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB2ZXJpZnlTdXBwb3NpdGlvbnMgPSB0aGlzLnZlcmlmeVN1cHBvc2l0aW9ucy5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICB2ZXJpZnlTdWJEZXJpdmF0aW9uID0gdGhpcy52ZXJpZnlTdWJEZXJpdmF0aW9uLmJpbmQodGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGFsbChbXG4gICAgICAgICAgdmVyaWZ5U3VwcG9zaXRpb25zLFxuICAgICAgICAgIHZlcmlmeVN1YkRlcml2YXRpb25cbiAgICAgICAgXSwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICByZXR1cm4gZm9yd2FyZChiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2YuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIChleGNlcHRpb24pID0+IHtcbiAgICAgIGlmIChleGNlcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC50cmFjZShgVW5hYmxlIHRvIHZlcmlmeSB0aGUgJyR7c3VicHJvb2ZTdHJpbmd9JyBzdWJwcm9vZi5gKTtcblxuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdmVyaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBzdWJwcm9vZlN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBzdXBwb3NpdGlvblN0cmluZyA9IHN1cHBvc2l0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnByb29mJ3MgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uLnZlcmlmeShjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2YncyAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZlcmlmeVN1cHBvc2l0aW9ucyhjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25zTGVuZ3RoID0gdGhpcy5zdXBwb3NpdGlvbnMubGVuZ3RoO1xuXG4gICAgaWYgKHN1cHBvc2l0aW9uc0xlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJwcm9vZlN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3VicHJvb2ZTdHJpbmd9JyBzdWJwcm9vZidzIHN1cHBvc2l0aW9ucy4uLmApO1xuXG4gICAgcmV0dXJuIGV2ZXJ5KHRoaXMuc3VwcG9zaXRpb25zLCAoc3VwcG9zaXRpb24sIGNvbnRlenQsIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnZlcmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBjb250ZXp0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICBjb25zdCBmYWN0T3JTdWJwcm9vZiA9IHN1cHBvc2l0aW9uOyAvLy9cblxuICAgICAgICBjb250ZXh0LmFkZEZhY3RPclN1YnByb29mKGZhY3RPclN1YnByb29mKTtcblxuICAgICAgICBjb250ZXh0LmFzc2lnbkFzc2lnbm1lbnRzKCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgICB9LCBiYWNrKTtcbiAgICB9LCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2YncyBzdXBwb3NpdGlvbnMuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmVyaWZ5U3ViRGVyaXZhdGlvbihjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3Qgc3VicHJvb2ZTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3Vicm9vZidzIHN1Yi1kZXJpdmF0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5zdWJEZXJpdmF0aW9uLnZlcmlmeShjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3Vicm9vZidzIHN1Yi1kZXJpdmF0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJTdWJwcm9vZlwiO1xufSk7XG4iXSwibmFtZXMiOlsiYnJlYWthYmxlIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImN1dCIsImFsbCIsImV2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiU3VicHJvb2YiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3VwcG9zaXRpb25zIiwic3ViRGVyaXZhdGlvbiIsImdldFN1cHBvc2l0aW9ucyIsImdldFN1YkRlcml2YXRpb24iLCJnZXRTdWJwcm9vZk5vZGUiLCJnZXROb2RlIiwic3VicHJvb2ZOb2RlIiwiZ2V0TGFzdFN0ZXAiLCJnZXRTdGF0ZW1lbnRzIiwibGFzdFN0ZXAiLCJzdXBwb3NpdGlvblN0YXRlbWVudHMiLCJtYXAiLCJzdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uU3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwibGFzdFN0ZXBTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRzIiwiaXNGYWN0IiwiZmFjdCIsImlzQnVicHJvb2YiLCJzdWJwcm9vZiIsImNvbXBhcmVTdGVwIiwic3RlcCIsImNvbXBhcmVzVG9TdGVwIiwic3RlcFN0cmluZyIsImdldFN0cmluZyIsInN1YnByb29mU3RyaW5nIiwidHJhY2UiLCJjb21wYXJlU3RhdGVtZW50Iiwic3RhdGVtZW50IiwiY29tcGFyZXNUb1N0YXRlbWVudCIsInN0YXRlbWVudFN0cmluZyIsInZlcmlmeSIsImZvcndhcmQiLCJiYWNrIiwiaXNvbGF0ZSIsImVuY2xvc2UiLCJ2ZXJpZnlTdXBwb3NpdGlvbnMiLCJiaW5kIiwidmVyaWZ5U3ViRGVyaXZhdGlvbiIsImRlYnVnIiwiZXhjZXB0aW9uIiwidmVyaWZ5U3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvblN0cmluZyIsInN1cHBvc2l0aW9uc0xlbmd0aCIsImxlbmd0aCIsImNvbnRlenQiLCJmYWN0T3JTdWJwcm9vZiIsImFkZEZhY3RPclN1YnByb29mIiwiYXNzaWduQXNzaWdubWVudHMiLCJuYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFVQTs7O2VB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