occam-nominal 1.0.367 → 1.0.372

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/lib/element/assertion/contained.js +114 -106
  2. package/lib/element/assertion/defined.js +91 -94
  3. package/lib/element/assertion/type.js +13 -8
  4. package/lib/element/assumption/implicit.js +7 -7
  5. package/lib/element/assumption.js +6 -7
  6. package/lib/element/claim.js +5 -5
  7. package/lib/element/combinator.js +36 -24
  8. package/lib/element/constraint.js +6 -7
  9. package/lib/element/constructor.js +5 -5
  10. package/lib/element/declaration/combinator.js +9 -8
  11. package/lib/element/declaration/metavariable.js +18 -18
  12. package/lib/element/declaration/variable.js +4 -4
  13. package/lib/element/equality.js +62 -70
  14. package/lib/element/fact/premise.js +1 -1
  15. package/lib/element/frame.js +86 -107
  16. package/lib/element/goal.js +108 -114
  17. package/lib/element/judgement.js +51 -57
  18. package/lib/element/metavariable.js +32 -29
  19. package/lib/element/property.js +3 -3
  20. package/lib/element/rule.js +30 -27
  21. package/lib/element/signature.js +15 -17
  22. package/lib/element/substitution/frame.js +52 -52
  23. package/lib/element/substitution/reference.js +55 -50
  24. package/lib/element/substitution/term.js +52 -52
  25. package/lib/element/variable.js +16 -16
  26. package/lib/pass/continuation.js +30 -17
  27. package/lib/pass/continuationZip.js +36 -25
  28. package/lib/pass/zip.js +7 -5
  29. package/lib/process/equate.js +7 -7
  30. package/lib/process/validation.js +12 -18
  31. package/lib/utilities/continuation.js +1 -16
  32. package/package.json +9 -9
  33. package/src/element/assertion/contained.js +126 -124
  34. package/src/element/assertion/defined.js +100 -112
  35. package/src/element/assertion/type.js +15 -7
  36. package/src/element/assumption/implicit.js +6 -7
  37. package/src/element/assumption.js +5 -8
  38. package/src/element/claim.js +4 -4
  39. package/src/element/combinator.js +46 -25
  40. package/src/element/constraint.js +5 -8
  41. package/src/element/constructor.js +4 -4
  42. package/src/element/declaration/combinator.js +10 -9
  43. package/src/element/declaration/metavariable.js +20 -21
  44. package/src/element/declaration/variable.js +4 -4
  45. package/src/element/equality.js +74 -87
  46. package/src/element/fact/premise.js +1 -1
  47. package/src/element/frame.js +100 -131
  48. package/src/element/goal.js +127 -134
  49. package/src/element/judgement.js +60 -67
  50. package/src/element/metavariable.js +38 -30
  51. package/src/element/property.js +2 -2
  52. package/src/element/rule.js +39 -32
  53. package/src/element/signature.js +14 -19
  54. package/src/element/substitution/frame.js +64 -61
  55. package/src/element/substitution/reference.js +67 -55
  56. package/src/element/substitution/term.js +64 -61
  57. package/src/element/variable.js +19 -17
  58. package/src/pass/continuation.js +45 -22
  59. package/src/pass/continuationZip.js +51 -33
  60. package/src/pass/zip.js +7 -4
  61. package/src/process/equate.js +10 -10
  62. package/src/process/validation.js +11 -21
  63. package/src/utilities/continuation.js +0 -23
@@ -79,101 +79,93 @@ const _default = (0, _elements.define)(class Equality extends _occamlanguages.El
79
79
  }
80
80
  return equal;
81
81
  }
82
- findValidEquality(context) {
83
- const equalityNode = this.getEqualityNode(), equality = context.findEqualityByEqualityNode(equalityNode), validEquality = equality; ///
84
- return validEquality;
82
+ findEquality(context) {
83
+ const equalityNode = this.getEqualityNode(), equality = context.findEqualityByEqualityNode(equalityNode);
84
+ return equality;
85
85
  }
86
86
  validate(context, continuation) {
87
+ let validates;
87
88
  const equalityString = this.getString(); ///
88
89
  context.trace(`Validating the '${equalityString}' equality...`);
89
- const validEquality = this.findValidEquality(context);
90
- if (validEquality !== null) {
91
- const equality = validEquality; ///
92
- context.debug(`...the '${equalityString}' equality is already present.`);
93
- return continuation(equality);
94
- }
95
- this.validateTerms(context, (termsValidate)=>{
96
- if (!termsValidate) {
97
- const equality = null;
98
- return continuation(equality);
99
- }
100
- const validatesWhenStated = this.validateWhenStated.bind(this), validatesWhenDerived = this.validateWhenDerived.bind(this);
101
- return (0, _continuation.exists)([
102
- validatesWhenStated,
103
- validatesWhenDerived
104
- ], context, (validates)=>{
105
- let equality = null;
106
- if (validates) {
107
- equality = this; ///
90
+ let equality;
91
+ equality = this.findEquality(context);
92
+ if (equality !== null) {
93
+ context.debug(`The '${equalityString}' equality is already present.`);
94
+ validates = continuation(equality, context);
95
+ } else {
96
+ equality = this;
97
+ const validateTerms = this.validateTerms.bind(this);
98
+ validates = (0, _continuation.all)([
99
+ validateTerms
100
+ ], context, (context)=>{
101
+ let validates;
102
+ const validateWhenStated = this.validateWhenStated.bind(this), validateWhenDerived = this.validateWhenDerived.bind(this);
103
+ validates = (0, _continuation.exists)([
104
+ validateWhenStated,
105
+ validateWhenDerived
106
+ ], context, (context)=>{
108
107
  this.assign(context);
109
108
  context.addEquality(equality);
110
- }
111
- if (validates) {
112
- context.debug(`...validated the '${equalityString}' equality.`);
113
- }
114
- return continuation(equality);
109
+ return continuation(equality, context);
110
+ });
111
+ return validates;
115
112
  });
116
- });
113
+ }
114
+ if (validates) {
115
+ context.debug(`...validated the '${equalityString}' equality.`);
116
+ }
117
+ return validates;
117
118
  }
118
119
  validateTerms(context, continuation) {
120
+ let termsValidate = false;
119
121
  const equalityString = this.getString(); ///
120
122
  context.trace(`Validating the '${equalityString}' equality's terms...`);
121
- return this.leftTerm.validate(context, (leftTerm, context)=>{
122
- if (leftTerm === null) {
123
- const termsValidate = false;
124
- return continuation(termsValidate);
125
- }
126
- return this.rightTerm.validate(context, (rightTerm, context)=>{
127
- if (rightTerm === null) {
128
- const termsValidate = false;
129
- return continuation(termsValidate);
130
- }
131
- let termsValidate = false;
123
+ const leftTermValidates = this.leftTerm.validate(context, (leftTerm, context)=>{
124
+ const rightTermValidtes = this.rightTerm.validate(context, (rightTerm, context)=>{
125
+ let validates = false;
132
126
  const leftTermType = leftTerm.getType(), rightTermType = rightTerm.getType(), leftTermTypeEqualToSubTypeOrSuperTypeOfRightTermType = leftTermType.isEqualToSubTypeOrSuperTypeOf(rightTermType);
133
127
  if (leftTermTypeEqualToSubTypeOrSuperTypeOfRightTermType) {
134
- termsValidate = true;
135
- }
136
- if (termsValidate) {
137
128
  this.leftTerm = leftTerm;
138
129
  this.rightTerm = rightTerm;
130
+ validates = continuation(context);
139
131
  }
140
- if (termsValidate) {
141
- context.debug(`...validated the '${equalityString}' equality's terms.`);
142
- }
143
- return continuation(termsValidate);
132
+ return validates;
144
133
  });
134
+ return rightTermValidtes;
145
135
  });
136
+ if (leftTermValidates) {
137
+ termsValidate = true;
138
+ }
139
+ if (termsValidate) {
140
+ context.debug(`...validated the '${equalityString}' equality's terms.`);
141
+ }
142
+ return termsValidate;
146
143
  }
147
144
  validateWhenStated(context, continuation) {
145
+ let validatesWhenStated = false;
148
146
  const stated = context.isStated();
149
- if (!stated) {
150
- const validatesWhenStated = false;
151
- return continuation(validatesWhenStated);
152
- }
153
- let validatesWhenStated;
154
- const equalityString = this.getString(); ///
155
- context.trace(`Validating the '${equalityString}' stated equality...`);
156
- validatesWhenStated = true;
157
- if (validatesWhenStated) {
158
- context.debug(`...validated the '${equalityString}' stated equality.`);
147
+ if (stated) {
148
+ const equalityString = this.getString(); ///
149
+ context.trace(`Validating the '${equalityString}' stated equality...`);
150
+ validatesWhenStated = continuation(context);
151
+ if (validatesWhenStated) {
152
+ context.debug(`...validated the '${equalityString}' stated equality.`);
153
+ }
159
154
  }
160
- return continuation(validatesWhenStated);
155
+ return validatesWhenStated;
161
156
  }
162
157
  validateWhenDerived(context, continuation) {
158
+ let validatesWhenDerived = false;
163
159
  const stated = context.isStated();
164
- if (stated) {
165
- const validatesWhenDerived = false;
166
- continuation(validatesWhenDerived);
167
- return;
168
- }
169
- let validatesWhenDerived;
170
- const equalityString = this.getString(); ///
171
- context.trace(`Validating the '${equalityString}' derived equality...`);
172
- validatesWhenDerived = true; ///
173
- if (validatesWhenDerived) {
174
- context.debug(`...validated the '${equalityString}' derived equality.`);
160
+ if (!stated) {
161
+ const equalityString = this.getString(); ///
162
+ context.trace(`Validating the '${equalityString}' derived equality...`);
163
+ validatesWhenDerived = continuation(context);
164
+ if (validatesWhenDerived) {
165
+ context.debug(`...validated the '${equalityString}' derived equality.`);
166
+ }
175
167
  }
176
- continuation(validatesWhenDerived);
168
+ return validatesWhenDerived;
177
169
  }
178
170
  assign(context) {
179
171
  const equality = this, equalityAssignment = (0, _assign.equalityAssignmentFromEquality)(equality, context), leftVariableAssignment = (0, _assign.leftVariableAssignmentFromEquality)(equality, context), rightVariableAssignment = (0, _assign.rightVariableAssignmentFromEquality)(equality, context);
@@ -216,4 +208,4 @@ function rightTermFromEqualityNode(equalityNode, context) {
216
208
  return rightTerm;
217
209
  }
218
210
 
219
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2VxdWFsaXR5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBlcXVhdGVUZXJtcyB9IGZyb20gXCIuLi9wcm9jZXNzL2VxdWF0ZVwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlRXF1YWxpdHkgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHsgZXF1YWxpdHlBc3NpZ25tZW50RnJvbUVxdWFsaXR5LCBsZWZ0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5LCByaWdodFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eSB9IGZyb20gXCIuLi9wcm9jZXNzL2Fzc2lnblwiO1xuXG5jb25zdCB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBFcXVhbGl0eSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxlZnRUZXJtLCByaWdodFRlcm0pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5sZWZ0VGVybSA9IGxlZnRUZXJtO1xuICAgIHRoaXMucmlnaHRUZXJtID0gcmlnaHRUZXJtO1xuICB9XG5cbiAgZ2V0TGVmdFRlcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdFRlcm07XG4gIH1cblxuICBnZXRSaWdodFRlcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMucmlnaHRUZXJtO1xuICB9XG5cbiAgZ2V0RXF1YWxpdHlOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBlcXVhbGl0eU5kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5TmRlO1xuICB9XG5cbiAgZ2V0TGVmdFRlcm1Ob2RlKCkge1xuICAgIGNvbnN0IGxlZnRUZXJtTm9kZSA9IHRoaXMubGVmdFRlcm0uZ2V0Tm9kZSgpO1xuXG4gICAgcmV0dXJuIGxlZnRUZXJtTm9kZTtcbiAgfVxuXG4gIGdldFJpZ2h0VGVybU5vZGUoKSB7XG4gICAgY29uc3QgcmlnaHRUZXJtTm9kZSA9IHRoaXMucmlnaHRUZXJtLmdldE5vZGUoKTtcblxuICAgIHJldHVybiByaWdodFRlcm1Ob2RlO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICBsZXQgdHlwZTtcblxuICAgIGNvbnN0IGxlZnRUZXJtVHlwZSA9IHRoaXMubGVmdFRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgIHJpZ2h0VGVybVR5cGUgPSB0aGlzLnJpZ2h0VGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgbGVmdFRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mUmlnaHRUZXJtVHlwZSA9IGxlZnRUZXJtVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZihyaWdodFRlcm1UeXBlKSxcbiAgICAgICAgICByaWdodFRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mTGVmdFRlcm1UeXBlID0gcmlnaHRUZXJtVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZihsZWZ0VGVybVR5cGUpO1xuXG4gICAgaWYgKGxlZnRUZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZlJpZ2h0VGVybVR5cGUpIHtcbiAgICAgIHR5cGUgPSBsZWZ0VGVybVR5cGU7ICAvLy9cbiAgICB9XG5cbiAgICBpZiAocmlnaHRUZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZkxlZnRUZXJtVHlwZSkge1xuICAgICAgdHlwZSA9IHJpZ2h0VGVybVR5cGU7IC8vL1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZ2V0VGVybXMoKSB7XG4gICAgY29uc3QgdGVybXMgPSBbXG4gICAgICB0aGlzLmxlZnRUZXJtLFxuICAgICAgdGhpcy5yaWdodFRlcm1cbiAgICBdO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgbWF0Y2hFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IGVxdWFsaXR5Tm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBlcXVhbGl0eU5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5Tm9kZU1hdGNoZXM7XG4gIH1cblxuICBpc1JlZmxleGl2ZSgpIHtcbiAgICBjb25zdCBsZWZ0VGVybVN0cmluZyA9IHRoaXMubGVmdFRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcmlnaHRUZXJtU3RyaW5nID0gdGhpcy5yaWdodFRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcmVmbGV4aXZlID0gKGxlZnRUZXJtU3RyaW5nID09PSByaWdodFRlcm1TdHJpbmcpO1xuXG4gICAgcmV0dXJuIHJlZmxleGl2ZTtcbiAgfVxuXG4gIGlzRXF1YWxUbyhlcXVhbGl0eSkge1xuICAgIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IGVxdWFsaXR5LmdldE5vZGUoKSxcbiAgICAgICAgICBlcXVhbGl0eU5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBlcXVhbGl0eU5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGlzRXF1YWwoY29udGV4dCkge1xuICAgIGxldCBlcXVhbCA9IGZhbHNlO1xuXG4gICAgY29uc3QgdGVybXNFcXVhdGUgPSBlcXVhdGVUZXJtcyh0aGlzLmxlZnRUZXJtLCB0aGlzLnJpZ2h0VGVybSwgY29udGV4dCk7XG5cbiAgICBpZiAodGVybXNFcXVhdGUpIHtcbiAgICAgIGVxdWFsID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXF1YWw7XG4gIH1cblxuICBmaW5kVmFsaWRFcXVhbGl0eShjb250ZXh0KSB7XG4gICAgY29uc3QgZXF1YWxpdHlOb2RlID0gdGhpcy5nZXRFcXVhbGl0eU5vZGUoKSxcbiAgICAgICAgICBlcXVhbGl0eSA9IGNvbnRleHQuZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSxcbiAgICAgICAgICB2YWxpZEVxdWFsaXR5ID0gZXF1YWxpdHk7ICAvLy9cblxuICAgIHJldHVybiB2YWxpZEVxdWFsaXR5O1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgZXF1YWxpdHlTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkuLi5gKTtcblxuICAgIGNvbnN0IHZhbGlkRXF1YWxpdHkgPSB0aGlzLmZpbmRWYWxpZEVxdWFsaXR5KGNvbnRleHQpO1xuXG4gICAgaWYgKHZhbGlkRXF1YWxpdHkgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGVxdWFsaXR5ID0gdmFsaWRFcXVhbGl0eTsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihlcXVhbGl0eSk7XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZGF0ZVRlcm1zKGNvbnRleHQsICh0ZXJtc1ZhbGlkYXRlKSA9PiB7XG4gICAgICBpZiAoIXRlcm1zVmFsaWRhdGUpIHtcbiAgICAgICAgY29uc3QgZXF1YWxpdHkgPSBudWxsO1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oZXF1YWxpdHkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gdGhpcy52YWxpZGF0ZVdoZW5TdGF0ZWQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdGhpcy52YWxpZGF0ZVdoZW5EZXJpdmVkLmJpbmQodGhpcyk7XG5cbiAgICAgIHJldHVybiBleGlzdHMoW1xuICAgICAgICB2YWxpZGF0ZXNXaGVuU3RhdGVkLFxuICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZFxuICAgICAgXSwgY29udGV4dCwgKHZhbGlkYXRlcykgPT4ge1xuICAgICAgICBsZXQgZXF1YWxpdHkgPSBudWxsO1xuXG4gICAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgICBlcXVhbGl0eSA9IHRoaXM7ICAvLy9cblxuICAgICAgICAgIHRoaXMuYXNzaWduKGNvbnRleHQpO1xuXG4gICAgICAgICAgY29udGV4dC5hZGRFcXVhbGl0eShlcXVhbGl0eSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihlcXVhbGl0eSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlVGVybXMoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgZXF1YWxpdHlTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkncyB0ZXJtcy4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMubGVmdFRlcm0udmFsaWRhdGUoY29udGV4dCwgKGxlZnRUZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICBpZiAobGVmdFRlcm0gPT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgdGVybXNWYWxpZGF0ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybXNWYWxpZGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnJpZ2h0VGVybS52YWxpZGF0ZShjb250ZXh0LCAocmlnaHRUZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGlmIChyaWdodFRlcm0gPT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCB0ZXJtc1ZhbGlkYXRlID0gZmFsc2U7XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1zVmFsaWRhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRlcm1zVmFsaWRhdGUgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBsZWZ0VGVybVR5cGUgPSBsZWZ0VGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgICAgIHJpZ2h0VGVybVR5cGUgPSByaWdodFRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICBsZWZ0VGVybVR5cGVFcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2ZSaWdodFRlcm1UeXBlID0gbGVmdFRlcm1UeXBlLmlzRXF1YWxUb1N1YlR5cGVPclN1cGVyVHlwZU9mKHJpZ2h0VGVybVR5cGUpO1xuXG4gICAgICAgIGlmIChsZWZ0VGVybVR5cGVFcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2ZSaWdodFRlcm1UeXBlKSB7XG4gICAgICAgICAgdGVybXNWYWxpZGF0ZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGVybXNWYWxpZGF0ZSkge1xuICAgICAgICAgIHRoaXMubGVmdFRlcm0gPSBsZWZ0VGVybTtcblxuICAgICAgICAgIHRoaXMucmlnaHRUZXJtID0gcmlnaHRUZXJtO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRlcm1zVmFsaWRhdGUpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkncyB0ZXJtcy5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybXNWYWxpZGF0ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlblN0YXRlZChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdGF0ZWQgPSBjb250ZXh0LmlzU3RhdGVkKCk7XG5cbiAgICBpZiAoIXN0YXRlZCkge1xuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlblN0YXRlZCA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5TdGF0ZWQpO1xuICAgIH1cblxuICAgIGxldCB2YWxpZGF0ZXNXaGVuU3RhdGVkO1xuXG4gICAgY29uc3QgZXF1YWxpdHlTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgc3RhdGVkIGVxdWFsaXR5Li4uYCk7XG5cbiAgICB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gdHJ1ZTtcblxuICAgIGlmICh2YWxpZGF0ZXNXaGVuU3RhdGVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgc3RhdGVkIGVxdWFsaXR5LmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzV2hlblN0YXRlZCk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHN0YXRlZCA9IGNvbnRleHQuaXNTdGF0ZWQoKTtcblxuICAgIGlmIChzdGF0ZWQpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICAgIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQ7XG5cbiAgICBjb25zdCBlcXVhbGl0eVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBkZXJpdmVkIGVxdWFsaXR5Li4uYCk7XG5cbiAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRydWU7ICAvLy9cblxuICAgIGlmICh2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGRlcml2ZWQgZXF1YWxpdHkuYCk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5EZXJpdmVkKTtcbiAgfVxuXG4gIGFzc2lnbihjb250ZXh0KSB7XG4gICAgY29uc3QgZXF1YWxpdHkgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgZXF1YWxpdHlBc3NpZ25tZW50ID0gZXF1YWxpdHlBc3NpZ25tZW50RnJvbUVxdWFsaXR5KGVxdWFsaXR5LCBjb250ZXh0KSxcbiAgICAgICAgICBsZWZ0VmFyaWFibGVBc3NpZ25tZW50ID0gbGVmdFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCksXG4gICAgICAgICAgcmlnaHRWYXJpYWJsZUFzc2lnbm1lbnQgPSByaWdodFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCk7XG5cbiAgICBjb250ZXh0LmFkZEFzc2lnbm1lbnQoZXF1YWxpdHlBc3NpZ25tZW50KTtcblxuICAgIGNvbnRleHQuYWRkQXNzaWdubWVudChsZWZ0VmFyaWFibGVBc3NpZ25tZW50KTtcblxuICAgIGNvbnRleHQuYWRkQXNzaWdubWVudChyaWdodFZhcmlhYmxlQXNzaWdubWVudCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QganNvbiA9IHtcbiAgICAgIHN0cmluZyxcbiAgICAgIGJyZWFrUG9pbnRcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiRXF1YWxpdHlcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIHJldHVybiBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICBlcXVhbGl0eU5vZGUgPSBpbnN0YW50aWF0ZUVxdWFsaXR5KHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gZXF1YWxpdHlOb2RlLCAgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgIGNvbnN0IGVxdWFsaXR5ID0gbmV3IEVxdWFsaXR5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgICAgIHJldHVybiBlcXVhbGl0eTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGVxdWFsaXR5ID0gZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBlcXVhbGl0eTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSk7XG5cbiAgcmV0dXJuIGxlZnRUZXJtO1xufVxuXG5mdW5jdGlvbiByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICByaWdodFRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZShyaWdodFRlcm1Ob2RlKTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuIl0sIm5hbWVzIjpbImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkVxdWFsaXR5IiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsImxlZnRUZXJtIiwicmlnaHRUZXJtIiwiZ2V0TGVmdFRlcm0iLCJnZXRSaWdodFRlcm0iLCJnZXRFcXVhbGl0eU5vZGUiLCJnZXROb2RlIiwiZXF1YWxpdHlOZGUiLCJnZXRMZWZ0VGVybU5vZGUiLCJsZWZ0VGVybU5vZGUiLCJnZXRSaWdodFRlcm1Ob2RlIiwicmlnaHRUZXJtTm9kZSIsImdldFR5cGUiLCJ0eXBlIiwibGVmdFRlcm1UeXBlIiwicmlnaHRUZXJtVHlwZSIsImxlZnRUZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZlJpZ2h0VGVybVR5cGUiLCJpc0VxdWFsVG9PclN1YlR5cGVPZiIsInJpZ2h0VGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZMZWZ0VGVybVR5cGUiLCJnZXRUZXJtcyIsInRlcm1zIiwibWF0Y2hFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eU5vZGUiLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsImVxdWFsaXR5Tm9kZU1hdGNoZXMiLCJpc1JlZmxleGl2ZSIsImxlZnRUZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwicmlnaHRUZXJtU3RyaW5nIiwicmVmbGV4aXZlIiwiaXNFcXVhbFRvIiwiZXF1YWxpdHkiLCJlcXVhbFRvIiwiaXNFcXVhbCIsImVxdWFsIiwidGVybXNFcXVhdGUiLCJlcXVhdGVUZXJtcyIsImZpbmRWYWxpZEVxdWFsaXR5IiwiZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUiLCJ2YWxpZEVxdWFsaXR5IiwidmFsaWRhdGUiLCJjb250aW51YXRpb24iLCJlcXVhbGl0eVN0cmluZyIsInRyYWNlIiwiZGVidWciLCJ2YWxpZGF0ZVRlcm1zIiwidGVybXNWYWxpZGF0ZSIsInZhbGlkYXRlc1doZW5TdGF0ZWQiLCJ2YWxpZGF0ZVdoZW5TdGF0ZWQiLCJiaW5kIiwidmFsaWRhdGVzV2hlbkRlcml2ZWQiLCJ2YWxpZGF0ZVdoZW5EZXJpdmVkIiwiZXhpc3RzIiwidmFsaWRhdGVzIiwiYXNzaWduIiwiYWRkRXF1YWxpdHkiLCJsZWZ0VGVybVR5cGVFcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2ZSaWdodFRlcm1UeXBlIiwiaXNFcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2YiLCJzdGF0ZWQiLCJpc1N0YXRlZCIsImVxdWFsaXR5QXNzaWdubWVudCIsImVxdWFsaXR5QXNzaWdubWVudEZyb21FcXVhbGl0eSIsImxlZnRWYXJpYWJsZUFzc2lnbm1lbnQiLCJsZWZ0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5IiwicmlnaHRWYXJpYWJsZUFzc2lnbm1lbnQiLCJyaWdodFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eSIsImFkZEFzc2lnbm1lbnQiLCJ0b0pTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZUVxdWFsaXR5IiwibGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwicmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZSIsImZyb21TdGF0ZW1lbnQiLCJzdGF0ZW1lbnQiLCJzdGF0ZW1lbnROb2RlIiwiZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZSIsImZpbmRUZXJtQnlUZXJtTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBY0E7OztlQUFBOzs7Z0NBWjZDOzBCQUV0Qjs4QkFDQTt3QkFDSzt5QkFDQTs2QkFDUTt5QkFDTTt3QkFDOEU7QUFFeEgsTUFBTSxFQUFFQSxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO01BRTlFLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsaUJBQWlCQyx1QkFBTztJQUNsRCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFFBQVEsRUFBRUMsU0FB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
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2VxdWFsaXR5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7YWxsLCBleGlzdHN9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBlcXVhdGVUZXJtcyB9IGZyb20gXCIuLi9wcm9jZXNzL2VxdWF0ZVwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlRXF1YWxpdHkgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHsgZXF1YWxpdHlBc3NpZ25tZW50RnJvbUVxdWFsaXR5LCBsZWZ0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5LCByaWdodFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eSB9IGZyb20gXCIuLi9wcm9jZXNzL2Fzc2lnblwiO1xuXG5jb25zdCB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBFcXVhbGl0eSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxlZnRUZXJtLCByaWdodFRlcm0pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5sZWZ0VGVybSA9IGxlZnRUZXJtO1xuICAgIHRoaXMucmlnaHRUZXJtID0gcmlnaHRUZXJtO1xuICB9XG5cbiAgZ2V0TGVmdFRlcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdFRlcm07XG4gIH1cblxuICBnZXRSaWdodFRlcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMucmlnaHRUZXJtO1xuICB9XG5cbiAgZ2V0RXF1YWxpdHlOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBlcXVhbGl0eU5kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5TmRlO1xuICB9XG5cbiAgZ2V0TGVmdFRlcm1Ob2RlKCkge1xuICAgIGNvbnN0IGxlZnRUZXJtTm9kZSA9IHRoaXMubGVmdFRlcm0uZ2V0Tm9kZSgpO1xuXG4gICAgcmV0dXJuIGxlZnRUZXJtTm9kZTtcbiAgfVxuXG4gIGdldFJpZ2h0VGVybU5vZGUoKSB7XG4gICAgY29uc3QgcmlnaHRUZXJtTm9kZSA9IHRoaXMucmlnaHRUZXJtLmdldE5vZGUoKTtcblxuICAgIHJldHVybiByaWdodFRlcm1Ob2RlO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICBsZXQgdHlwZTtcblxuICAgIGNvbnN0IGxlZnRUZXJtVHlwZSA9IHRoaXMubGVmdFRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgIHJpZ2h0VGVybVR5cGUgPSB0aGlzLnJpZ2h0VGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgbGVmdFRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mUmlnaHRUZXJtVHlwZSA9IGxlZnRUZXJtVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZihyaWdodFRlcm1UeXBlKSxcbiAgICAgICAgICByaWdodFRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mTGVmdFRlcm1UeXBlID0gcmlnaHRUZXJtVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZihsZWZ0VGVybVR5cGUpO1xuXG4gICAgaWYgKGxlZnRUZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZlJpZ2h0VGVybVR5cGUpIHtcbiAgICAgIHR5cGUgPSBsZWZ0VGVybVR5cGU7ICAvLy9cbiAgICB9XG5cbiAgICBpZiAocmlnaHRUZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZkxlZnRUZXJtVHlwZSkge1xuICAgICAgdHlwZSA9IHJpZ2h0VGVybVR5cGU7IC8vL1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZ2V0VGVybXMoKSB7XG4gICAgY29uc3QgdGVybXMgPSBbXG4gICAgICB0aGlzLmxlZnRUZXJtLFxuICAgICAgdGhpcy5yaWdodFRlcm1cbiAgICBdO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgbWF0Y2hFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IGVxdWFsaXR5Tm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBlcXVhbGl0eU5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5Tm9kZU1hdGNoZXM7XG4gIH1cblxuICBpc1JlZmxleGl2ZSgpIHtcbiAgICBjb25zdCBsZWZ0VGVybVN0cmluZyA9IHRoaXMubGVmdFRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcmlnaHRUZXJtU3RyaW5nID0gdGhpcy5yaWdodFRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcmVmbGV4aXZlID0gKGxlZnRUZXJtU3RyaW5nID09PSByaWdodFRlcm1TdHJpbmcpO1xuXG4gICAgcmV0dXJuIHJlZmxleGl2ZTtcbiAgfVxuXG4gIGlzRXF1YWxUbyhlcXVhbGl0eSkge1xuICAgIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IGVxdWFsaXR5LmdldE5vZGUoKSxcbiAgICAgICAgICBlcXVhbGl0eU5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBlcXVhbGl0eU5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGlzRXF1YWwoY29udGV4dCkge1xuICAgIGxldCBlcXVhbCA9IGZhbHNlO1xuXG4gICAgY29uc3QgdGVybXNFcXVhdGUgPSBlcXVhdGVUZXJtcyh0aGlzLmxlZnRUZXJtLCB0aGlzLnJpZ2h0VGVybSwgY29udGV4dCk7XG5cbiAgICBpZiAodGVybXNFcXVhdGUpIHtcbiAgICAgIGVxdWFsID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXF1YWw7XG4gIH1cblxuICBmaW5kRXF1YWxpdHkoY29udGV4dCkge1xuICAgIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IHRoaXMuZ2V0RXF1YWxpdHlOb2RlKCksXG4gICAgICAgICAgZXF1YWxpdHkgPSBjb250ZXh0LmZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSk7XG5cbiAgICByZXR1cm4gZXF1YWxpdHk7XG4gIH1cblxuICB2YWxpZGF0ZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgY29uc3QgZXF1YWxpdHlTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5Li4uYCk7XG5cbiAgICBsZXQgZXF1YWxpdHk7XG5cbiAgICBlcXVhbGl0eSA9IHRoaXMuZmluZEVxdWFsaXR5KGNvbnRleHQpO1xuXG4gICAgaWYgKGVxdWFsaXR5ICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihlcXVhbGl0eSwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVxdWFsaXR5ID0gdGhpcztcblxuICAgICAgY29uc3QgdmFsaWRhdGVUZXJtcyA9IHRoaXMudmFsaWRhdGVUZXJtcy5iaW5kKHRoaXMpO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBhbGwoW1xuICAgICAgICB2YWxpZGF0ZVRlcm1zXG4gICAgICBdLCBjb250ZXh0LCAoY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlV2hlblN0YXRlZCA9IHRoaXMudmFsaWRhdGVXaGVuU3RhdGVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgICB2YWxpZGF0ZXMgPSBleGlzdHMoW1xuICAgICAgICAgIHZhbGlkYXRlV2hlblN0YXRlZCxcbiAgICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkXG4gICAgICAgIF0sIGNvbnRleHQsIChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgdGhpcy5hc3NpZ24oY29udGV4dCk7XG5cbiAgICAgICAgICBjb250ZXh0LmFkZEVxdWFsaXR5KGVxdWFsaXR5KTtcblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oZXF1YWxpdHksIGNvbnRleHQpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5LmApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVRlcm1zKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB0ZXJtc1ZhbGlkYXRlID0gZmFsc2U7XG5cbiAgICBjb25zdCBlcXVhbGl0eVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSdzIHRlcm1zLi4uYCk7XG5cbiAgICBjb25zdCBsZWZ0VGVybVZhbGlkYXRlcyA9IHRoaXMubGVmdFRlcm0udmFsaWRhdGUoY29udGV4dCwgKGxlZnRUZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCByaWdodFRlcm1WYWxpZHRlcyA9IHRoaXMucmlnaHRUZXJtLnZhbGlkYXRlKGNvbnRleHQsIChyaWdodFRlcm0sIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGxlZnRUZXJtVHlwZSA9IGxlZnRUZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICAgICAgcmlnaHRUZXJtVHlwZSA9IHJpZ2h0VGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgICAgIGxlZnRUZXJtVHlwZUVxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZlJpZ2h0VGVybVR5cGUgPSBsZWZ0VGVybVR5cGUuaXNFcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2YocmlnaHRUZXJtVHlwZSk7XG5cbiAgICAgICAgaWYgKGxlZnRUZXJtVHlwZUVxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZlJpZ2h0VGVybVR5cGUpIHtcbiAgICAgICAgICB0aGlzLmxlZnRUZXJtID0gbGVmdFRlcm07XG5cbiAgICAgICAgICB0aGlzLnJpZ2h0VGVybSA9IHJpZ2h0VGVybTtcblxuICAgICAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJpZ2h0VGVybVZhbGlkdGVzO1xuICAgIH0pO1xuXG4gICAgaWYgKGxlZnRUZXJtVmFsaWRhdGVzKSB7XG4gICAgICB0ZXJtc1ZhbGlkYXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGVybXNWYWxpZGF0ZSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5J3MgdGVybXMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm1zVmFsaWRhdGU7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5TdGF0ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHN0YXRlZCA9IGNvbnRleHQuaXNTdGF0ZWQoKTtcblxuICAgIGlmIChzdGF0ZWQpIHtcbiAgICAgIGNvbnN0IGVxdWFsaXR5U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgc3RhdGVkIGVxdWFsaXR5Li4uYCk7XG5cbiAgICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSBjb250aW51YXRpb24oY29udGV4dCk7XG5cbiAgICAgIGlmICh2YWxpZGF0ZXNXaGVuU3RhdGVkKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBzdGF0ZWQgZXF1YWxpdHkuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc1doZW5TdGF0ZWQ7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKCFzdGF0ZWQpIHtcbiAgICAgIGNvbnN0IGVxdWFsaXR5U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZGVyaXZlZCBlcXVhbGl0eS4uLmApO1xuXG4gICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGNvbnRpbnVhdGlvbihjb250ZXh0KTtcblxuICAgICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBkZXJpdmVkIGVxdWFsaXR5LmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXNXaGVuRGVyaXZlZDtcbiAgfVxuXG4gIGFzc2lnbihjb250ZXh0KSB7XG4gICAgY29uc3QgZXF1YWxpdHkgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgZXF1YWxpdHlBc3NpZ25tZW50ID0gZXF1YWxpdHlBc3NpZ25tZW50RnJvbUVxdWFsaXR5KGVxdWFsaXR5LCBjb250ZXh0KSxcbiAgICAgICAgICBsZWZ0VmFyaWFibGVBc3NpZ25tZW50ID0gbGVmdFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCksXG4gICAgICAgICAgcmlnaHRWYXJpYWJsZUFzc2lnbm1lbnQgPSByaWdodFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCk7XG5cbiAgICBjb250ZXh0LmFkZEFzc2lnbm1lbnQoZXF1YWxpdHlBc3NpZ25tZW50KTtcblxuICAgIGNvbnRleHQuYWRkQXNzaWdubWVudChsZWZ0VmFyaWFibGVBc3NpZ25tZW50KTtcblxuICAgIGNvbnRleHQuYWRkQXNzaWdubWVudChyaWdodFZhcmlhYmxlQXNzaWdubWVudCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QganNvbiA9IHtcbiAgICAgIHN0cmluZyxcbiAgICAgIGJyZWFrUG9pbnRcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiRXF1YWxpdHlcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIHJldHVybiBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICBlcXVhbGl0eU5vZGUgPSBpbnN0YW50aWF0ZUVxdWFsaXR5KHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gZXF1YWxpdHlOb2RlLCAgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgIGNvbnN0IGVxdWFsaXR5ID0gbmV3IEVxdWFsaXR5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgICAgIHJldHVybiBlcXVhbGl0eTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGVxdWFsaXR5ID0gZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBlcXVhbGl0eTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSk7XG5cbiAgcmV0dXJuIGxlZnRUZXJtO1xufVxuXG5mdW5jdGlvbiByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICByaWdodFRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZShyaWdodFRlcm1Ob2RlKTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuIl0sIm5hbWVzIjpbImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkVxdWFsaXR5IiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsImxlZnRUZXJtIiwicmlnaHRUZXJtIiwiZ2V0TGVmdFRlcm0iLCJnZXRSaWdodFRlcm0iLCJnZXRFcXVhbGl0eU5vZGUiLCJnZXROb2RlIiwiZXF1YWxpdHlOZGUiLCJnZXRMZWZ0VGVybU5vZGUiLCJsZWZ0VGVybU5vZGUiLCJnZXRSaWdodFRlcm1Ob2RlIiwicmlnaHRUZXJtTm9kZSIsImdldFR5cGUiLCJ0eXBlIiwibGVmdFRlcm1UeXBlIiwicmlnaHRUZXJtVHlwZSIsImxlZnRUZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZlJpZ2h0VGVybVR5cGUiLCJpc0VxdWFsVG9PclN1YlR5cGVPZiIsInJpZ2h0VGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZMZWZ0VGVybVR5cGUiLCJnZXRUZXJtcyIsInRlcm1zIiwibWF0Y2hFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eU5vZGUiLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsImVxdWFsaXR5Tm9kZU1hdGNoZXMiLCJpc1JlZmxleGl2ZSIsImxlZnRUZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwicmlnaHRUZXJtU3RyaW5nIiwicmVmbGV4aXZlIiwiaXNFcXVhbFRvIiwiZXF1YWxpdHkiLCJlcXVhbFRvIiwiaXNFcXVhbCIsImVxdWFsIiwidGVybXNFcXVhdGUiLCJlcXVhdGVUZXJtcyIsImZpbmRFcXVhbGl0eSIsImZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlIiwidmFsaWRhdGUiLCJjb250aW51YXRpb24iLCJ2YWxpZGF0ZXMiLCJlcXVhbGl0eVN0cmluZyIsInRyYWNlIiwiZGVidWciLCJ2YWxpZGF0ZVRlcm1zIiwiYmluZCIsImFsbCIsInZhbGlkYXRlV2hlblN0YXRlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJleGlzdHMiLCJhc3NpZ24iLCJhZGRFcXVhbGl0eSIsInRlcm1zVmFsaWRhdGUiLCJsZWZ0VGVybVZhbGlkYXRlcyIsInJpZ2h0VGVybVZhbGlkdGVzIiwibGVmdFRlcm1UeXBlRXF1YWxUb1N1YlR5cGVPclN1cGVyVHlwZU9mUmlnaHRUZXJtVHlwZSIsImlzRXF1YWxUb1N1YlR5cGVPclN1cGVyVHlwZU9mIiwidmFsaWRhdGVzV2hlblN0YXRlZCIsInN0YXRlZCIsImlzU3RhdGVkIiwidmFsaWRhdGVzV2hlbkRlcml2ZWQiLCJlcXVhbGl0eUFzc2lnbm1lbnQiLCJlcXVhbGl0eUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkiLCJsZWZ0VmFyaWFibGVBc3NpZ25tZW50IiwibGVmdFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eSIsInJpZ2h0VmFyaWFibGVBc3NpZ25tZW50IiwicmlnaHRWYXJpYWJsZUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkiLCJhZGRBc3NpZ25tZW50IiwidG9KU09OIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVFcXVhbGl0eSIsImxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZSIsInJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJmcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUiLCJmaW5kVGVybUJ5VGVybU5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWNBOzs7ZUFBQTs7O2dDQVo2QzswQkFFdEI7OEJBQ0c7d0JBQ0U7eUJBQ0E7NkJBQ1E7eUJBQ007d0JBQzhFO0FBRXhILE1BQU0sRUFBRUEsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5RSxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGlCQUFpQkMsdUJBQU87SUFDbEQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxRQUFRLEVBQUVDLFNBQVMsQ0FBRTtRQUNsRSxLQUFLLENBQUNMLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsUUFBUSxHQUFHQTtRQUNoQixJQUFJLENBQUNDLFNBQVMsR0FBR0E7SUFDbkI7SUFFQUMsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDRixRQUFRO0lBQ3RCO0lBRUFHLGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQ0YsU0FBUztJQUN2QjtJQUVBRyxrQkFBa0I7UUFDaEIsTUFBTU4sT0FBTyxJQUFJLENBQUNPLE9BQU8sSUFDbkJDLGNBQWNSLE1BQU0sR0FBRztRQUU3QixPQUFPUTtJQUNUO0lBRUFDLGtCQUFrQjtRQUNoQixNQUFNQyxlQUFlLElB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
@@ -240,4 +240,4 @@ function statementFromPremiseNode(premiseNode, context) {
240
240
  return statement;
241
241
  }
242
242
 
243
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2ZhY3QvcHJlbWlzZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYnJlYWtQb2ludFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IEZhY3QgZnJvbSBcIi4uL2ZhY3RcIjtcblxuaW1wb3J0IHsgYWxsIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVQcmVtaXNlIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCB7IGRlY2xhcmUsIGF0dGVtcHQsIHJlY29uY2lsZSwgc2VyaWFsaXNlLCB1bnNlcmlhbGlzZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBicmVha2FibGUsIGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBQcmVtaXNlIGV4dGVuZHMgRmFjdCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gICAgdGhpcy5wcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbDtcbiAgfVxuXG4gIGdldFByb2NlZHVyZUNhbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2VkdXJlQ2FsbDtcbiAgfVxuXG4gIGdldFByZW1pc2VOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBwcmVtaXNlTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHByZW1pc2VOb2RlO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50Tm9kZSgpIHtcbiAgICBjb25zdCBwcmVtaXNlTm9kZSA9IHRoaXMuZ2V0UHJlbWlzZU5vZGUoKSxcbiAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gcHJlbWlzZU5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudE5vZGU7XG4gIH1cblxuICBmaW5kU3VicHJvb2ZBc3NlcnRpb24oKSB7XG4gICAgbGV0IHN1YnByb29mQXNzZXJ0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSB0aGlzLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICAgIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpO1xuXG4gICAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IGNvbnRleHQuZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbiAgfVxuXG4gIGlzTm9uc2Vuc2ljYWwoKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBwcm9jZWR1cmVDYWxsID0gdGhpcy5nZXRQcm9jZWR1cmVDYWxsKCksXG4gICAgICAgICAgbm9uc2Vuc2ljYWwgPSAoKHN0YXRlbWVudCA9PT0gbnVsbCkgJiYgKHByb2NlZHVyZUNhbGwgPT09IG51bGwpKTtcblxuICAgIHJldHVybiBub25zZW5zaWNhbDtcbiAgfVxuXG4gIHZlcmlmeSA9IGJyZWFrYWJsZShmdW5jdGlvbiAoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgcHJlbWlzZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS4uLmApO1xuXG4gICAgY29uc3Qgbm9uc2Vuc2ljYWwgPSB0aGlzLmlzTm9uc2Vuc2ljYWwoKTtcblxuICAgIGlmIChub25zZW5zaWNhbCkge1xuICAgICAgY29uc3QgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVW5hYmxlIHRvIHZlcmlmeSB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UgYmVjYXVzZSBpdCBpcyBub25zZW5zZS5gKTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2ZXJpZmllcywgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlY2xhcmUoKGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgIGF0dGVtcHQoKGNvbnRleHQpID0+IHtcbiAgICAgICAgdmFsaWRhdGVzID0gdGhpcy52YWxpZGF0ZShjb250ZXh0LCAocHJlbWlzZSwgY29udGV4dCkgPT4gdHJ1ZSk7XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIHRoaXMuY29tbWl0KGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICB9LCBjb250ZXh0KTtcblxuICAgICAgaWYgKCF2YWxpZGF0ZXMpIHtcbiAgICAgICAgY29uc3QgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHZlcmlmaWVzLCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmVyaWZpZXMgPSB0cnVlO1xuXG4gICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHZlcmlmaWVzLCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfSk7XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlcztcblxuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLi4uYCk7XG5cbiAgICBjb25zdCB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKSxcbiAgICAgIHZhbGlkYXRlUHJvY2VkdXJlQ2FsbCA9IHRoaXMudmFsaWRhdGVQcm9jZWR1cmVDYWxsLmJpbmQodGhpcyk7XG5cbiAgICB2YWxpZGF0ZXMgPSBhbGwoW1xuICAgICAgdmFsaWRhdGVTdGF0ZW1lbnQsXG4gICAgICB2YWxpZGF0ZVByb2NlZHVyZUNhbGxcbiAgICBdLCBjb250ZXh0LCAoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgcHJlbWlzZSA9IHRoaXM7ICAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihwcmVtaXNlLCBjb250ZXh0KTtcbiAgICB9KTtcblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0cnVlOyAgLy8vXG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmdldFN0YXRlbWVudCgpO1xuXG4gICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcHJlbWlzZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UncyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgICAgc3RhdGVtZW50VmFsaWRhdGVzID0gc3RhdGVtZW50LnZhbGlkYXRlKGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjb250ZXh0KTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnRleHQudHJhY2UoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UncyBzdGF0ZW1lbnQuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlUHJvY2VkdXJlQ2FsbChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgcHJvY2VkdXJlQ2FsbFZhbGlkYXRlcyA9IHRydWU7ICAvLy9cblxuICAgIGNvbnN0IHByb2NlZHVyZUNhbGwgPSB0aGlzLmdldFByb2NlZHVyZUNhbGwoKTtcblxuICAgIGlmIChwcm9jZWR1cmVDYWxsICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwcmVtaXNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZSdzIHByb2NlZHVyZSBjYWxsLi4uYCk7XG5cbiAgICAgIHByb2NlZHVyZUNhbGxWYWxpZGF0ZXMgPSBwcm9jZWR1cmVDYWxsLnZhbGlkYXRlKGNvbnRleHQsIChwcm9jZWR1cmVDYWxsLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oY29udGV4dCk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHByb2NlZHVyZUNhbGxWYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC50cmFjZShgLi4udmFsaWRhdGVkIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZSdzIHByb2NlZHVyZSBjYWxsLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9jZWR1cmVDYWxsVmFsaWRhdGVzO1xuICB9XG5cbiAgdW5pZnlJbmRlcGVuZGVudGx5KGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZSBpbmRlcGVuZGVudGx5Li4uYCk7XG5cbiAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHRoaXMuZ2V0UHJvY2VkdXJlQ2FsbCgpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHByZW1pc2VDb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksIC8vL1xuICAgICAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IHByZW1pc2VDb250ZXh0LCAgLy8vXG4gICAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgICByZXR1cm4gc3RhdGVtZW50LnVuaWZ5SW5kZXBlbmRlbnRseShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3RhdGVtZW50VW5pZmllc0luZGVwZW5kZW50bHkpID0+IHtcbiAgICAgICAgICBsZXQgdW5pZmllc0luZGVwZW5kZW50bHkgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzSW5kZXBlbmRlbnRseSkge1xuICAgICAgICAgICAgdW5pZmllc0luZGVwZW5kZW50bHkgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1bmlmaWVzSW5kZXBlbmRlbnRseSkge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UgaW5kZXBlbmRlbnRseS5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHVuaWZpZXNJbmRlcGVuZGVudGx5KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9jZWR1cmVDYWxsICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBwcm9jZWR1cmVDYWxsLnVuaWZ5SW5kZXBlbmRlbnRseShjb250ZXh0LCAocHJvY2VkdXJlQ2FsbFJlc29sdmVkSW5kZXBlbmRlbnRseSkgPT4ge1xuICAgICAgICAgIGxldCB1bmlmaWVzSW5kZXBlbmRlbnRseSA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHByb2NlZHVyZUNhbGxSZXNvbHZlZEluZGVwZW5kZW50bHkpIHtcbiAgICAgICAgICAgIHVuaWZpZXNJbmRlcGVuZGVudGx5ID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodW5pZmllc0luZGVwZW5kZW50bHkpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlIGluZGVwZW5kZW50bHkuYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih1bmlmaWVzSW5kZXBlbmRlbnRseSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTdWJwcm9vZihzdWJwcm9vZiwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgcHJlbWlzZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIHN1YnByb29mU3RyaW5nID0gc3VicHJvb2YuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3VicHJvb2ZTdHJpbmd9JyBzdWJwcm9vZiB3aXRoIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS4uLmApO1xuXG4gICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSB0aGlzLmZpbmRTdWJwcm9vZkFzc2VydGlvbigpO1xuXG4gICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uID09PSBudWxsKSB7XG4gICAgICBjb25zdCBzdWJwcm9vZlVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWJwcm9vZlVuaWZpZXMpO1xuICAgIH1cblxuICAgIGNvbnN0IHByZW1pc2VDb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksIC8vL1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gcHJlbWlzZUNvbnRleHQsIC8vL1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgIHJldHVybiByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbi51bmlmeVN1YnByb29mKHN1YnByb29mLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3VicHJvb2ZVbmlmaWVzKSA9PiB7XG4gICAgICAgIGlmIChzdWJwcm9vZlVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmNvbW1pdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YnByb29mVW5pZmllcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2Ygd2l0aCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1YnByb29mVW5pZmllcyk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5RmFjdChmYWN0LCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBmYWN0U3RyaW5nID0gZmFjdC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBwcmVtaXNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7ZmFjdFN0cmluZ30nIGZhY3Qgd2l0aCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuLi5gKTtcblxuICAgIGNvbnN0IGZhY3RDb250ZXh0ID0gZmFjdC5nZXRDb250ZXh0KCksXG4gICAgICAgICAgcHJlbWlzZUNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBwcmVtaXNlQ29udGV4dCwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gZmFjdENvbnRleHQ7ICAvLy9cblxuICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50ID0gZmFjdC5nZXRTdGF0ZW1lbnQoKTtcblxuICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3RhdGVtZW50VW5pZmllcykgPT4ge1xuICAgICAgICBsZXQgZmFjdFVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgICAgIGZhY3RVbmlmaWVzID0gdHJ1ZTtcblxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmFjdFVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtmYWN0U3RyaW5nfScgZmFjdCB3aXRoIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oZmFjdFVuaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5RmFjdE9yU3VicHJvb2YoZmFjdE9yU3VicHJvb2YsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGZhY3RPclN1YnByb29mRmFjdCA9IGZhY3RPclN1YnByb29mLmlzRmFjdCgpO1xuXG4gICAgaWYgKGZhY3RPclN1YnByb29mRmFjdCkge1xuICAgICAgY29uc3QgZmFjdCA9IGZhY3RPclN1YnByb29mOyAgLy8vXG5cbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5RmFjdChmYWN0LCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YnByb29mID0gZmFjdE9yU3VicHJvb2Y7ICAvLy9cblxuICAgIHJldHVybiB0aGlzLnVuaWZ5U3VicHJvb2Yoc3VicHJvb2YsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcmV0dXJuIHNlcmlhbGlzZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgYnJlYWtQb2ludFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGpzb247XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiUHJlbWlzZVwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gdW5zZXJpYWxpc2UoKGpzb24sIGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIHByZW1pc2VOb2RlID0gaW5zdGFudGlhdGVQcmVtaXNlKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBwcmVtaXNlTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHByZW1pc2UgPSBuZXcgUHJlbWlzZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcHJvY2VkdXJlQ2FsbCk7XG5cbiAgICAgICAgcmV0dXJuIHByZW1pc2U7XG4gICAgICB9LCBqc29uLCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHN0YXRlbWVudEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gcHJlbWlzZU5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBjb250ZXh0LmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cbiJdLCJuYW1lcyI6WyJicmVha2FibGUiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJQcmVtaXNlIiwiRmFjdCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInN0YXRlbWVudCIsInByb2NlZHVyZUNhbGwiLCJnZXRQcm9jZWR1cmVDYWxsIiwiZ2V0UHJlbWlzZU5vZGUiLCJnZXROb2RlIiwicHJlbWlzZU5vZGUiLCJnZXRTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZSIsImZpbmRTdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0Q29udGV4dCIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJpc05vbnNlbnNpY2FsIiwiZ2V0U3RhdGVtZW50Iiwibm9uc2Vuc2ljYWwiLCJ2ZXJpZnkiLCJjb250aW51YXRpb24iLCJwcmVtaXNlU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2ZXJpZmllcyIsImRlYnVnIiwiZGVjbGFyZSIsInZhbGlkYXRlcyIsImF0dGVtcHQiLCJ2YWxpZGF0ZSIsInByZW1pc2UiLCJjb21taXQiLCJ2YWxpZGF0ZVN0YXRlbWVudCIsImJpbmQiLCJ2YWxpZGF0ZVByb2NlZHVyZUNhbGwiLCJhbGwiLCJzdGF0ZW1lbnRWYWxpZGF0ZXMiLCJwcm9jZWR1cmVDYWxsVmFsaWRhdGVzIiwidW5pZnlJbmRlcGVuZGVudGx5IiwicmVjb25jaWxlIiwicHJlbWlzZUNvbnRleHQiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInN0YXRlbWVudFVuaWZpZXNJbmRlcGVuZGVudGx5IiwidW5pZmllc0luZGVwZW5kZW50bHkiLCJwcm9jZWR1cmVDYWxsUmVzb2x2ZWRJbmRlcGVuZGVudGx5IiwidW5pZnlTdWJwcm9vZiIsInN1YnByb29mIiwic3VicHJvb2ZTdHJpbmciLCJzdWJwcm9vZlVuaWZpZXMiLCJ1bmlmeUZhY3QiLCJmYWN0IiwiZmFjdFN0cmluZyIsImZhY3RDb250ZXh0IiwidW5pZnlTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRVbmlmaWVzIiwiZmFjdFVuaWZpZXMiLCJ1bmlmeUZhY3RPclN1YnByb29mIiwiZmFjdE9yU3VicHJvb2YiLCJmYWN0T3JTdWJwcm9vZkZhY3QiLCJpc0ZhY3QiLCJ0b0pTT04iLCJzZXJpYWxpc2UiLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJ1bnNlcmlhbGlzZSIsImluc3RhbnRpYXRlUHJlbWlzZSIsInN0YXRlbWVudEZyb21QcmVtaXNlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFjQTs7O2VBQUE7OztnQ0Fab0M7NkRBRW5COzhCQUVHOzBCQUNHOzZCQUNZO3lCQUNVO3lCQUNvQzs7Ozs7O0FBRWpGLE1BQU0sRUFBRUEsU0FBUyxFQUFFQyxrQkFBa0IsRUFBRUMsMEJBQTBCLEVB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
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2ZhY3QvcHJlbWlzZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYnJlYWtQb2ludFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IEZhY3QgZnJvbSBcIi4uL2ZhY3RcIjtcblxuaW1wb3J0IHsgYWxsIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVQcmVtaXNlIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCB7IGRlY2xhcmUsIGF0dGVtcHQsIHJlY29uY2lsZSwgc2VyaWFsaXNlLCB1bnNlcmlhbGlzZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBicmVha2FibGUsIGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBQcmVtaXNlIGV4dGVuZHMgRmFjdCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gICAgdGhpcy5wcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbDtcbiAgfVxuXG4gIGdldFByb2NlZHVyZUNhbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2VkdXJlQ2FsbDtcbiAgfVxuXG4gIGdldFByZW1pc2VOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBwcmVtaXNlTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHByZW1pc2VOb2RlO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50Tm9kZSgpIHtcbiAgICBjb25zdCBwcmVtaXNlTm9kZSA9IHRoaXMuZ2V0UHJlbWlzZU5vZGUoKSxcbiAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gcHJlbWlzZU5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudE5vZGU7XG4gIH1cblxuICBmaW5kU3VicHJvb2ZBc3NlcnRpb24oKSB7XG4gICAgbGV0IHN1YnByb29mQXNzZXJ0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSB0aGlzLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICAgIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpO1xuXG4gICAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IGNvbnRleHQuZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbiAgfVxuXG4gIGlzTm9uc2Vuc2ljYWwoKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBwcm9jZWR1cmVDYWxsID0gdGhpcy5nZXRQcm9jZWR1cmVDYWxsKCksXG4gICAgICAgICAgbm9uc2Vuc2ljYWwgPSAoKHN0YXRlbWVudCA9PT0gbnVsbCkgJiYgKHByb2NlZHVyZUNhbGwgPT09IG51bGwpKTtcblxuICAgIHJldHVybiBub25zZW5zaWNhbDtcbiAgfVxuXG4gIHZlcmlmeSA9IGJyZWFrYWJsZShmdW5jdGlvbiAoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgcHJlbWlzZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS4uLmApO1xuXG4gICAgY29uc3Qgbm9uc2Vuc2ljYWwgPSB0aGlzLmlzTm9uc2Vuc2ljYWwoKTtcblxuICAgIGlmIChub25zZW5zaWNhbCkge1xuICAgICAgY29uc3QgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVW5hYmxlIHRvIHZlcmlmeSB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UgYmVjYXVzZSBpdCBpcyBub25zZW5zZS5gKTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2ZXJpZmllcywgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlY2xhcmUoKGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgIGF0dGVtcHQoKGNvbnRleHQpID0+IHtcbiAgICAgICAgdmFsaWRhdGVzID0gdGhpcy52YWxpZGF0ZShjb250ZXh0LCAocHJlbWlzZSwgY29udGV4dCkgPT4gdHJ1ZSk7XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIHRoaXMuY29tbWl0KGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICB9LCBjb250ZXh0KTtcblxuICAgICAgaWYgKCF2YWxpZGF0ZXMpIHtcbiAgICAgICAgY29uc3QgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHZlcmlmaWVzLCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmVyaWZpZXMgPSB0cnVlO1xuXG4gICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHZlcmlmaWVzLCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfSk7XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlcztcblxuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLi4uYCk7XG5cbiAgICBjb25zdCB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZVByb2NlZHVyZUNhbGwgPSB0aGlzLnZhbGlkYXRlUHJvY2VkdXJlQ2FsbC5iaW5kKHRoaXMpO1xuXG4gICAgdmFsaWRhdGVzID0gYWxsKFtcbiAgICAgIHZhbGlkYXRlU3RhdGVtZW50LFxuICAgICAgdmFsaWRhdGVQcm9jZWR1cmVDYWxsXG4gICAgXSwgY29udGV4dCwgKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHByZW1pc2UgPSB0aGlzOyAgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24ocHJlbWlzZSwgY29udGV4dCk7XG4gICAgfSk7XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzID0gdHJ1ZTsgIC8vL1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5nZXRTdGF0ZW1lbnQoKTtcblxuICAgIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlJ3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICAgIHN0YXRlbWVudFZhbGlkYXRlcyA9IHN0YXRlbWVudC52YWxpZGF0ZShjb250ZXh0LCAoc3RhdGVtZW50LCBjb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oY29udGV4dCk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LnRyYWNlKGAuLi52YWxpZGF0ZWQgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlJ3Mgc3RhdGVtZW50LmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVByb2NlZHVyZUNhbGwoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHByb2NlZHVyZUNhbGxWYWxpZGF0ZXMgPSB0cnVlOyAgLy8vXG5cbiAgICBjb25zdCBwcm9jZWR1cmVDYWxsID0gdGhpcy5nZXRQcm9jZWR1cmVDYWxsKCk7XG5cbiAgICBpZiAocHJvY2VkdXJlQ2FsbCAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcHJlbWlzZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UncyBwcm9jZWR1cmUgY2FsbC4uLmApO1xuXG4gICAgICBwcm9jZWR1cmVDYWxsVmFsaWRhdGVzID0gcHJvY2VkdXJlQ2FsbC52YWxpZGF0ZShjb250ZXh0LCAocHJvY2VkdXJlQ2FsbCwgY29udGV4dCkgPT4ge1xuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGNvbnRleHQpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChwcm9jZWR1cmVDYWxsVmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnRleHQudHJhY2UoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UncyBwcm9jZWR1cmUgY2FsbC5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlQ2FsbFZhbGlkYXRlcztcbiAgfVxuXG4gIHVuaWZ5SW5kZXBlbmRlbnRseShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBwcmVtaXNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UgaW5kZXBlbmRlbnRseS4uLmApO1xuXG4gICAgcmV0dXJuIHJlY29uY2lsZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICAgIHByb2NlZHVyZUNhbGwgPSB0aGlzLmdldFByb2NlZHVyZUNhbGwoKTtcblxuICAgICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwcmVtaXNlQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLCAvLy9cbiAgICAgICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBwcmVtaXNlQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgICAgcmV0dXJuIHN0YXRlbWVudC51bmlmeUluZGVwZW5kZW50bHkoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHN0YXRlbWVudFVuaWZpZXNJbmRlcGVuZGVudGx5KSA9PiB7XG4gICAgICAgICAgbGV0IHVuaWZpZXNJbmRlcGVuZGVudGx5ID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoc3RhdGVtZW50VW5pZmllc0luZGVwZW5kZW50bHkpIHtcbiAgICAgICAgICAgIHVuaWZpZXNJbmRlcGVuZGVudGx5ID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodW5pZmllc0luZGVwZW5kZW50bHkpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlIGluZGVwZW5kZW50bHkuYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih1bmlmaWVzSW5kZXBlbmRlbnRseSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvY2VkdXJlQ2FsbCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcHJvY2VkdXJlQ2FsbC51bmlmeUluZGVwZW5kZW50bHkoY29udGV4dCwgKHByb2NlZHVyZUNhbGxSZXNvbHZlZEluZGVwZW5kZW50bHkpID0+IHtcbiAgICAgICAgICBsZXQgdW5pZmllc0luZGVwZW5kZW50bHkgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChwcm9jZWR1cmVDYWxsUmVzb2x2ZWRJbmRlcGVuZGVudGx5KSB7XG4gICAgICAgICAgICB1bmlmaWVzSW5kZXBlbmRlbnRseSA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHVuaWZpZXNJbmRlcGVuZGVudGx5KSB7XG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZSBpbmRlcGVuZGVudGx5LmApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24odW5pZmllc0luZGVwZW5kZW50bHkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3VicHJvb2Yoc3VicHJvb2YsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2Ygd2l0aCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuLi5gKTtcblxuICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uID0gdGhpcy5maW5kU3VicHJvb2ZBc3NlcnRpb24oKTtcblxuICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3VicHJvb2ZVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VicHJvb2ZVbmlmaWVzKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVtaXNlQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLCAvLy9cbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IHByZW1pc2VDb250ZXh0LCAvLy9cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb24udW5pZnlTdWJwcm9vZihzdWJwcm9vZiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHN1YnByb29mVW5pZmllcykgPT4ge1xuICAgICAgICBpZiAoc3VicHJvb2ZVbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5jb21taXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJwcm9vZlVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnByb29mIHdpdGggdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWJwcm9vZlVuaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeUZhY3QoZmFjdCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgZmFjdFN0cmluZyA9IGZhY3QuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcHJlbWlzZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2ZhY3RTdHJpbmd9JyBmYWN0IHdpdGggdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLi4uYCk7XG5cbiAgICBjb25zdCBmYWN0Q29udGV4dCA9IGZhY3QuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHByZW1pc2VDb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksIC8vL1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gcHJlbWlzZUNvbnRleHQsIC8vL1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGZhY3RDb250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGZhY3QuZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHN0YXRlbWVudFVuaWZpZXMpID0+IHtcbiAgICAgICAgbGV0IGZhY3RVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICBmYWN0VW5pZmllcyA9IHRydWU7XG5cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZhY3RVbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7ZmFjdFN0cmluZ30nIGZhY3Qgd2l0aCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGZhY3RVbmlmaWVzKTtcbiAgICAgIH0pO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gIH1cblxuICB1bmlmeUZhY3RPclN1YnByb29mKGZhY3RPclN1YnByb29mLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBmYWN0T3JTdWJwcm9vZkZhY3QgPSBmYWN0T3JTdWJwcm9vZi5pc0ZhY3QoKTtcblxuICAgIGlmIChmYWN0T3JTdWJwcm9vZkZhY3QpIHtcbiAgICAgIGNvbnN0IGZhY3QgPSBmYWN0T3JTdWJwcm9vZjsgIC8vL1xuXG4gICAgICByZXR1cm4gdGhpcy51bmlmeUZhY3QoZmFjdCwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJwcm9vZiA9IGZhY3RPclN1YnByb29mOyAgLy8vXG5cbiAgICByZXR1cm4gdGhpcy51bmlmeVN1YnByb29mKHN1YnByb29mLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHJldHVybiBzZXJpYWxpc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICBjb250ZXh0LFxuICAgICAgICBzdHJpbmcsXG4gICAgICAgIGJyZWFrUG9pbnRcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBqc29uO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlByZW1pc2VcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIHJldHVybiBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHVuc2VyaWFsaXNlKChqc29uLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICBwcmVtaXNlTm9kZSA9IGluc3RhbnRpYXRlUHJlbWlzZShzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gcHJlbWlzZU5vZGUsICAvLy9cbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBwcmVtaXNlID0gbmV3IFByZW1pc2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQsIHByb2NlZHVyZUNhbGwpO1xuXG4gICAgICAgIHJldHVybiBwcmVtaXNlO1xuICAgICAgfSwganNvbiwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHByZW1pc2VOb2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gY29udGV4dC5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG4iXSwibmFtZXMiOlsiYnJlYWthYmxlIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiUHJlbWlzZSIsIkZhY3QiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJzdGF0ZW1lbnQiLCJwcm9jZWR1cmVDYWxsIiwiZ2V0UHJvY2VkdXJlQ2FsbCIsImdldFByZW1pc2VOb2RlIiwiZ2V0Tm9kZSIsInByZW1pc2VOb2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJmaW5kU3VicHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldENvbnRleHQiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiaXNOb25zZW5zaWNhbCIsImdldFN0YXRlbWVudCIsIm5vbnNlbnNpY2FsIiwidmVyaWZ5IiwiY29udGludWF0aW9uIiwicHJlbWlzZVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmVyaWZpZXMiLCJkZWJ1ZyIsImRlY2xhcmUiLCJ2YWxpZGF0ZXMiLCJhdHRlbXB0IiwidmFsaWRhdGUiLCJwcmVtaXNlIiwiY29tbWl0IiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJiaW5kIiwidmFsaWRhdGVQcm9jZWR1cmVDYWxsIiwiYWxsIiwic3RhdGVtZW50VmFsaWRhdGVzIiwicHJvY2VkdXJlQ2FsbFZhbGlkYXRlcyIsInVuaWZ5SW5kZXBlbmRlbnRseSIsInJlY29uY2lsZSIsInByZW1pc2VDb250ZXh0IiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJzdGF0ZW1lbnRVbmlmaWVzSW5kZXBlbmRlbnRseSIsInVuaWZpZXNJbmRlcGVuZGVudGx5IiwicHJvY2VkdXJlQ2FsbFJlc29sdmVkSW5kZXBlbmRlbnRseSIsInVuaWZ5U3VicHJvb2YiLCJzdWJwcm9vZiIsInN1YnByb29mU3RyaW5nIiwic3VicHJvb2ZVbmlmaWVzIiwidW5pZnlGYWN0IiwiZmFjdCIsImZhY3RTdHJpbmciLCJmYWN0Q29udGV4dCIsInVuaWZ5U3RhdGVtZW50Iiwic3RhdGVtZW50VW5pZmllcyIsImZhY3RVbmlmaWVzIiwidW5pZnlGYWN0T3JTdWJwcm9vZiIsImZhY3RPclN1YnByb29mIiwiZmFjdE9yU3VicHJvb2ZGYWN0IiwiaXNGYWN0IiwidG9KU09OIiwic2VyaWFsaXNlIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwidW5zZXJpYWxpc2UiLCJpbnN0YW50aWF0ZVByZW1pc2UiLCJzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlIiwiZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBY0E7OztlQUFBOzs7Z0NBWm9DOzZEQUVuQjs4QkFFRzswQkFDRzs2QkFDWTt5QkFDVTt5QkFDb0M7Ozs7OztBQUVqRixNQUFNLEVBQUVBLFNBQVMsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEw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