occam-nominal 1.0.310 → 1.0.317
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.
- package/lib/context/liminal.js +17 -15
- package/lib/context/phaneric.js +3 -3
- package/lib/context.js +3 -3
- package/lib/element/assertion/contained.js +19 -17
- package/lib/element/assertion/defined.js +16 -14
- package/lib/element/conclusion.js +10 -11
- package/lib/element/declaration/variable.js +2 -2
- package/lib/element/deduction.js +7 -7
- package/lib/element/equality.js +3 -3
- package/lib/element/frame.js +8 -3
- package/lib/element/goal.js +7 -8
- package/lib/element/judgement.js +8 -10
- package/lib/element/metavariable.js +44 -40
- package/lib/element/proof.js +2 -2
- package/lib/element/proofAssertion/premise.js +17 -21
- package/lib/element/proofAssertion/step.js +5 -5
- package/lib/element/proofAssertion/supposition.js +39 -35
- package/lib/element/rule.js +24 -22
- package/lib/element/statement.js +56 -32
- package/lib/element/substitution/frame.js +71 -62
- package/lib/element/substitution/reference.js +21 -21
- package/lib/element/substitution/statement.js +81 -98
- package/lib/element/substitution/term.js +76 -67
- package/lib/element/substitution.js +5 -5
- package/lib/element/term.js +2 -2
- package/lib/element/topLevelAssertion/axiom.js +4 -5
- package/lib/element/topLevelAssertion/conjecture.js +3 -3
- package/lib/element/topLevelAssertion/lemma.js +3 -3
- package/lib/element/topLevelAssertion/theorem.js +3 -3
- package/lib/element/topLevelAssertion.js +59 -69
- package/lib/node/metavariable.js +18 -1
- package/lib/process/unify.js +5 -7
- package/lib/process/validation.js +5 -2
- package/lib/utilities/element.js +34 -56
- package/package.json +2 -2
- package/src/context/liminal.js +18 -16
- package/src/context/phaneric.js +3 -3
- package/src/context.js +2 -2
- package/src/element/assertion/contained.js +19 -18
- package/src/element/assertion/defined.js +16 -16
- package/src/element/conclusion.js +9 -11
- package/src/element/declaration/variable.js +1 -1
- package/src/element/deduction.js +6 -6
- package/src/element/equality.js +2 -2
- package/src/element/frame.js +10 -2
- package/src/element/goal.js +6 -8
- package/src/element/judgement.js +7 -11
- package/src/element/metavariable.js +56 -52
- package/src/element/proof.js +1 -1
- package/src/element/proofAssertion/premise.js +17 -25
- package/src/element/proofAssertion/step.js +4 -4
- package/src/element/proofAssertion/supposition.js +44 -43
- package/src/element/rule.js +27 -25
- package/src/element/statement.js +71 -41
- package/src/element/substitution/frame.js +88 -82
- package/src/element/substitution/reference.js +30 -32
- package/src/element/substitution/statement.js +97 -132
- package/src/element/substitution/term.js +95 -89
- package/src/element/substitution.js +6 -6
- package/src/element/term.js +1 -1
- package/src/element/topLevelAssertion/axiom.js +3 -5
- package/src/element/topLevelAssertion/conjecture.js +2 -2
- package/src/element/topLevelAssertion/lemma.js +2 -2
- package/src/element/topLevelAssertion/theorem.js +2 -2
- package/src/element/topLevelAssertion.js +61 -80
- package/src/node/metavariable.js +28 -1
- package/src/process/unify.js +7 -16
- package/src/process/validation.js +5 -4
- package/src/utilities/element.js +49 -64
|
@@ -71,13 +71,12 @@ const _default = (0, _elements.define)(class FrameSubstitution extends _substitu
|
|
|
71
71
|
if (validSubstitution !== null) {
|
|
72
72
|
const frameSubstitution = validSubstitution; ///
|
|
73
73
|
context.debug(`...the '${frameSubstitutionString}' frame substitution is already valid.`);
|
|
74
|
-
continuatino(frameSubstitution);
|
|
75
|
-
return;
|
|
74
|
+
return continuatino(frameSubstitution);
|
|
76
75
|
}
|
|
77
76
|
const generalContext = this.getGeneralContext(), specificContext = this.getSpecificContext();
|
|
78
77
|
(0, _context.attempts)((generalContext, specificContext)=>{
|
|
79
78
|
const validateTargetFrame = this.validateTargetFrame.bind(this), validateReplacementFrame = this.validateReplacementFrame.bind(this);
|
|
80
|
-
(0, _continuation.all)([
|
|
79
|
+
return (0, _continuation.all)([
|
|
81
80
|
validateTargetFrame,
|
|
82
81
|
validateReplacementFrame
|
|
83
82
|
], generalContext, specificContext, (validates)=>{
|
|
@@ -93,7 +92,7 @@ const _default = (0, _elements.define)(class FrameSubstitution extends _substitu
|
|
|
93
92
|
if (validates) {
|
|
94
93
|
context.debug(`...validated the '${frameSubstitutionString}' frame substitution.`);
|
|
95
94
|
}
|
|
96
|
-
continuatino(frameSubstitution);
|
|
95
|
+
return continuatino(frameSubstitution);
|
|
97
96
|
});
|
|
98
97
|
}, generalContext, specificContext);
|
|
99
98
|
}
|
|
@@ -104,29 +103,26 @@ const _default = (0, _elements.define)(class FrameSubstitution extends _substitu
|
|
|
104
103
|
if (!targetFrameSingular) {
|
|
105
104
|
const targetFrameString = this.targetFrame.getString(), targetFrameValidates = false;
|
|
106
105
|
context.debug(`The '${targetFrameString}' target frame is not singular.`);
|
|
107
|
-
continuatino(targetFrameValidates);
|
|
108
|
-
return;
|
|
106
|
+
return continuatino(targetFrameValidates);
|
|
109
107
|
}
|
|
110
|
-
(0, _context.
|
|
111
|
-
(
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}, context);
|
|
123
|
-
}, specificContext, context);
|
|
108
|
+
(0, _context.elide)((context)=>{
|
|
109
|
+
return this.targetFrame.validate(context, (targetFrame)=>{
|
|
110
|
+
let targetFrameValidates = false;
|
|
111
|
+
if (targetFrame !== null) {
|
|
112
|
+
targetFrameValidates = true;
|
|
113
|
+
}
|
|
114
|
+
if (targetFrameValidates) {
|
|
115
|
+
context.debug(`...validated the '${frameSubstitutionString}' frame substitution's target frame...`);
|
|
116
|
+
}
|
|
117
|
+
return continuatino(targetFrameValidates);
|
|
118
|
+
});
|
|
119
|
+
}, context);
|
|
124
120
|
}
|
|
125
121
|
validateReplacementFrame(generalContext, specificContext, continuatino) {
|
|
126
122
|
const context = specificContext, frameSubstitutionString = this.getString(); ///
|
|
127
123
|
context.trace(`Validating the '${frameSubstitutionString}' frame substitution's replacement frame...`);
|
|
128
124
|
(0, _context.elide)((context)=>{
|
|
129
|
-
this.replacementFrame.validate(context, (replacementFrame)=>{
|
|
125
|
+
return this.replacementFrame.validate(context, (replacementFrame)=>{
|
|
130
126
|
let replacementFrameValidates = false;
|
|
131
127
|
if (replacementFrame !== null) {
|
|
132
128
|
replacementFrameValidates = true;
|
|
@@ -134,68 +130,76 @@ const _default = (0, _elements.define)(class FrameSubstitution extends _substitu
|
|
|
134
130
|
if (replacementFrameValidates) {
|
|
135
131
|
context.debug(`...validated the '${frameSubstitutionString}' frame substitution's replacement frame.`);
|
|
136
132
|
}
|
|
137
|
-
continuatino(replacementFrameValidates);
|
|
133
|
+
return continuatino(replacementFrameValidates);
|
|
138
134
|
});
|
|
139
135
|
}, context);
|
|
140
136
|
}
|
|
141
|
-
unifySubstitution(substitution, context) {
|
|
142
|
-
let substitutionUnifies = false;
|
|
137
|
+
unifySubstitution(substitution, context, continuation) {
|
|
143
138
|
const generalSubstitution = this, specificSubstitution = substitution, generalSubstitutionString = generalSubstitution.getString(), specificSubstitutionString = specificSubstitution.getString();
|
|
144
139
|
context.trace(`Unifying the '${specificSubstitutionString}' substitution with the '${generalSubstitutionString}' substitution...`);
|
|
145
140
|
(0, _context.reconcile)((context)=>{
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
141
|
+
const unifyTargetFrame = this.unifyTargetFrame.bind(this), unifyReplacementFrame = this.unifyReplacementFrame.bind(this);
|
|
142
|
+
return (0, _continuation.all)([
|
|
143
|
+
unifyReplacementFrame,
|
|
144
|
+
unifyTargetFrame
|
|
145
|
+
], substitution, context, (substitutionUnifies)=>{
|
|
146
|
+
if (substitutionUnifies) {
|
|
150
147
|
context.commit();
|
|
151
|
-
substitutionUnifies = true;
|
|
152
148
|
}
|
|
153
|
-
|
|
149
|
+
if (substitutionUnifies) {
|
|
150
|
+
context.debug(`...unified the '${specificSubstitutionString}' substitution with the '${generalSubstitutionString}' substitution.`);
|
|
151
|
+
}
|
|
152
|
+
return continuation(substitutionUnifies);
|
|
153
|
+
});
|
|
154
154
|
}, context);
|
|
155
|
-
if (substitutionUnifies) {
|
|
156
|
-
context.debug(`...unified the '${specificSubstitutionString}' substitution with the '${generalSubstitutionString}' substitution.`);
|
|
157
|
-
}
|
|
158
|
-
return substitutionUnifies;
|
|
159
155
|
}
|
|
160
|
-
unifyTargetFrame(substitution, context) {
|
|
161
|
-
let targetFrameUnifies = false;
|
|
156
|
+
unifyTargetFrame(substitution, context, continuation) {
|
|
162
157
|
const generalSubstitution = this, specificSubstitution = substitution, generalSubstitutionString = generalSubstitution.getString(), specificSubstitutionString = specificSubstitution.getString();
|
|
163
158
|
context.trace(`Unifying the '${specificSubstitutionString}' substitution's target frame with the '${generalSubstitutionString}' substitution's target frame...`);
|
|
164
159
|
const generalSubstitutionGeneralContext = generalSubstitution.getGeneralContext(), specificSubstitutionGeneralContext = specificSubstitution.getGeneralContext(), generalSubstitutionTargetFrame = generalSubstitution.getTargetFrame(), specificSubstitutionTargetFrame = specificSubstitution.getTargetFrame(), generalContext = generalSubstitutionGeneralContext, specificContext = specificSubstitutionGeneralContext, generalFrame = generalSubstitutionTargetFrame, specificFrame = specificSubstitutionTargetFrame; ///
|
|
165
160
|
(0, _context.reconcile)((specificContext)=>{
|
|
166
161
|
const frameNode = generalFrame.getFrameNode(), metavariable = metavariableFromFrameNode(frameNode, generalContext);
|
|
167
|
-
if (metavariable
|
|
168
|
-
const
|
|
162
|
+
if (metavariable === null) {
|
|
163
|
+
const targetFrameUnifies = false;
|
|
164
|
+
return continuation(targetFrameUnifies);
|
|
165
|
+
}
|
|
166
|
+
const frame = specificFrame; ///
|
|
167
|
+
return metavariable.unifyFrame(frame, generalContext, specificContext, (frameUnifies)=>{
|
|
168
|
+
let targetFrameUnifies = false;
|
|
169
169
|
if (frameUnifies) {
|
|
170
170
|
specificContext.commit(context);
|
|
171
171
|
targetFrameUnifies = true;
|
|
172
172
|
}
|
|
173
|
-
|
|
173
|
+
if (targetFrameUnifies) {
|
|
174
|
+
context.trace(`...unified the '${specificSubstitutionString}' substitution's target frame with the '${generalSubstitutionString}' substitution's target frame.`);
|
|
175
|
+
}
|
|
176
|
+
return continuation(targetFrameUnifies);
|
|
177
|
+
});
|
|
174
178
|
}, specificContext);
|
|
175
|
-
if (targetFrameUnifies) {
|
|
176
|
-
context.trace(`...unified the '${specificSubstitutionString}' substitution's target frame with the '${generalSubstitutionString}' substitution's target frame.`);
|
|
177
|
-
}
|
|
178
|
-
return targetFrameUnifies;
|
|
179
179
|
}
|
|
180
|
-
unifyReplacementFrame(substitution, context) {
|
|
181
|
-
let replacementFrameUnifies = false;
|
|
180
|
+
unifyReplacementFrame(substitution, context, continuation) {
|
|
182
181
|
const generalSubstitution = this, specificSubstitution = substitution, generalSubstitutionString = generalSubstitution.getString(), specificSubstitutionString = specificSubstitution.getString();
|
|
183
182
|
context.trace(`Unifying the '${specificSubstitutionString}' substitution's replacement frame with the '${generalSubstitutionString}' substitution's replacement frame...`);
|
|
184
183
|
const generalSubstitutionSpecificContext = generalSubstitution.getSpecificContext(), specificSubstitutionSpecificContext = specificSubstitution.getSpecificContext(), generalSubstitutionReplacementFrame = generalSubstitution.getReplacementFrame(), specificSubstitutionReplacementFrame = specificSubstitution.getReplacementFrame(), generalContext = generalSubstitutionSpecificContext, specificContext = specificSubstitutionSpecificContext, generalFrame = generalSubstitutionReplacementFrame, specificFrame = specificSubstitutionReplacementFrame; ///
|
|
185
184
|
(0, _context.reconcile)((specificContext)=>{
|
|
186
185
|
const frameNode = generalFrame.getNode(), metavariable = metavariableFromFrameNode(frameNode, generalContext);
|
|
187
|
-
if (metavariable
|
|
188
|
-
const
|
|
186
|
+
if (metavariable === null) {
|
|
187
|
+
const replacementFrameUnifies = false;
|
|
188
|
+
return continuation(replacementFrameUnifies);
|
|
189
|
+
}
|
|
190
|
+
const frame = specificFrame; ///
|
|
191
|
+
return metavariable.unifyFrame(frame, generalContext, specificContext, (frameUnifies)=>{
|
|
192
|
+
let replacementFrameUnifies = false;
|
|
189
193
|
if (frameUnifies) {
|
|
190
194
|
specificContext.commit(context);
|
|
191
195
|
replacementFrameUnifies = true;
|
|
192
196
|
}
|
|
193
|
-
|
|
197
|
+
if (replacementFrameUnifies) {
|
|
198
|
+
context.trace(`...unified the '${specificSubstitutionString}' substitution's replacement frame with the '${generalSubstitutionString}' substitution's replacement frame.`);
|
|
199
|
+
}
|
|
200
|
+
return continuation(replacementFrameUnifies);
|
|
201
|
+
});
|
|
194
202
|
}, specificContext);
|
|
195
|
-
if (replacementFrameUnifies) {
|
|
196
|
-
context.trace(`...unified the '${specificSubstitutionString}' substitution's replacement frame with the '${generalSubstitutionString}' substitution's replacement frame.`);
|
|
197
|
-
}
|
|
198
|
-
return replacementFrameUnifies;
|
|
199
203
|
}
|
|
200
204
|
static name = "FrameSubstitution";
|
|
201
205
|
static fromJSON(json, context) {
|
|
@@ -214,23 +218,28 @@ const _default = (0, _elements.define)(class FrameSubstitution extends _substitu
|
|
|
214
218
|
}
|
|
215
219
|
return frameSubstitutionn;
|
|
216
220
|
}
|
|
217
|
-
static
|
|
221
|
+
static fromStatementNode(statementNode, context) {
|
|
218
222
|
let frameSubstitution = null;
|
|
219
|
-
const frameSubstitutionNode =
|
|
223
|
+
const frameSubstitutionNode = statementNode.getFrameSubstitutionNode();
|
|
220
224
|
if (frameSubstitutionNode !== null) {
|
|
221
|
-
|
|
222
|
-
|
|
225
|
+
(0, _context.ablate)((context)=>{
|
|
226
|
+
(0, _context.descend)((context)=>{
|
|
227
|
+
const generalContext = context, specificContext = context; ///
|
|
228
|
+
frameSubstitution = (0, _element.frameSubstitutionFromFrameSubstitutionNode)(frameSubstitutionNode, generalContext, specificContext);
|
|
229
|
+
}, context);
|
|
230
|
+
}, context);
|
|
223
231
|
}
|
|
224
232
|
return frameSubstitution;
|
|
225
233
|
}
|
|
226
234
|
static fromFrameAndMetavariable(frame, metavariable, generalContext, specificContext) {
|
|
227
235
|
let frameSubstitution;
|
|
228
236
|
(0, _context.ablates)((generalContext, specificContext)=>{
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
237
|
+
(0, _context.instantiate)((specificContext)=>{
|
|
238
|
+
(0, _context.manifest)((generalContext)=>{
|
|
239
|
+
const frameSubstitutionString = (0, _string.frameSubstitutionStringFromFrameAndMetavariable)(frame, metavariable), string = frameSubstitutionString, context = specificContext, frameSubstitutionNode = (0, _instantiate.instantiateFrameSubstitution)(string, context);
|
|
240
|
+
frameSubstitution = (0, _element.frameSubstitutionFromFrameSubstitutionNode)(frameSubstitutionNode, generalContext, specificContext);
|
|
241
|
+
}, generalContext, specificContext);
|
|
242
|
+
}, specificContext);
|
|
234
243
|
}, generalContext, specificContext);
|
|
235
244
|
return frameSubstitution;
|
|
236
245
|
}
|
|
@@ -252,4 +261,4 @@ function replacementFrameFromFrameSubstitutionNode(frameSubstitutionNode, specif
|
|
|
252
261
|
return replacementFrame;
|
|
253
262
|
}
|
|
254
263
|
|
|
255
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L3N1YnN0aXR1dGlvbi9mcmFtZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYnJlYWtQb2ludFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IFN1YnN0aXR1dGlvbiBmcm9tIFwiLi4vc3Vic3RpdHV0aW9uXCI7XG5cbmltcG9ydCB7IGFsbCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlRnJhbWVTdWJzdGl0dXRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyBmcmFtZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21GcmFtZUFuZE1ldGF2YXJpYWJsZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBlbGlkZSwgYWJsYXRlcywgbWFuaWZlc3QsIGF0dGVtcHRzLCByZWNvbmNpbGUsIGluc3RhbnRpYXRlLCB1bnNlcmlhbGlzZXMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBicmVha1BvaW50RnJvbUpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBGcmFtZVN1YnN0aXR1dGlvbiBleHRlbmRzIFN1YnN0aXR1dGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRhcmdldEZyYW1lLCByZXBsYWNlbWVudEZyYW1lKSB7XG4gICAgc3VwZXIoY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnRhcmdldEZyYW1lID0gdGFyZ2V0RnJhbWU7XG4gICAgdGhpcy5yZXBsYWNlbWVudEZyYW1lID0gcmVwbGFjZW1lbnRGcmFtZTtcbiAgfVxuXG4gIGdldFRhcmdldEZyYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnRhcmdldEZyYW1lO1xuICB9XG5cbiAgZ2V0UmVwbGFjZW1lbnRGcmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXBsYWNlbWVudEZyYW1lO1xuICB9XG5cbiAgZ2V0RnJhbWVTdWJzdGl0dXRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBmcmFtZVN1YnN0aXR1dGlvbk5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbk5vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOb2RlKCkgeyByZXR1cm4gdGhpcy50YXJnZXRGcmFtZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7IH1cblxuICBnZXRUYXJnZXROb2RlKCkge1xuICAgIGNvbnN0IHRhcmdldEZyYW1lTm9kZSA9IHRoaXMudGFyZ2V0RnJhbWUuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHRlcmdldE5vZGUgPSB0YXJnZXRGcmFtZU5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHRlcmdldE5vZGU7XG4gIH1cblxuICBnZXRSZXBsYWNlbWVudE5vZGUoKSB7XG4gICAgY29uc3QgcmVwbGFjZW1lbnRGcmFtZU5vZGUgPSB0aGlzLnJlcGxhY2VtZW50RnJhbWUuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHJlcGxhY2VtZW50Tm9kZSA9IHJlcGxhY2VtZW50RnJhbWVOb2RlOyAvLy9cblxuICAgIHJldHVybiByZXBsYWNlbWVudE5vZGU7XG4gIH1cblxuICBpc1RyaXZpYWwoKSB7XG4gICAgY29uc3QgdGFyZ2V0RnJhbWVFcXVhbFRvUmVwbGFjZW1lbnRGcmFtZSA9IHRoaXMudGFyZ2V0RnJhbWUuaXNFcXVhbFRvKHRoaXMucmVwbGFjZW1lbnRGcmFtZSksXG4gICAgICAgICAgdHJpdmlhbCA9IHRhcmdldEZyYW1lRXF1YWxUb1JlcGxhY2VtZW50RnJhbWU7IC8vL1xuXG4gICAgcmV0dXJuIHRyaXZpYWw7XG4gIH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkgeyByZXR1cm4gdGhpcy50YXJnZXRGcmFtZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7IH1cblxuICBjb21wYXJlUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuICAgIGNvbnN0IHRhcmdldEZyYW1lQ29tcGFyZXNUb1BhcmFtZXRlciA9IHRoaXMudGFyZ2V0RnJhbWUuY29tcGFyZVBhcmFtZXRlcihwYXJhbWV0ZXIpLFxuICAgICAgICAgIGNvbXBhcmVzVG9QYXJhbWV0ZXIgPSB0YXJnZXRGcmFtZUNvbXBhcmVzVG9QYXJhbWV0ZXI7ICAvLy9cblxuICAgIHJldHVybiBjb21wYXJlc1RvUGFyYW1ldGVyO1xuICB9XG5cbiAgY29tcGFyZUZyYW1lKGZyYW1lLCBjb250ZXh0KSB7XG4gICAgY29uc3QgZnJhbWVFcXVhbFRvUmVwbGFjZW1lbnRGcmFtZSA9IHRoaXMucmVwbGFjZW1lbnRGcmFtZS5pc0VxdWFsVG8oZnJhbWUpLFxuICAgICAgICBjb21wYXJlZFRvRnJhbWUgPSBmcmFtZUVxdWFsVG9SZXBsYWNlbWVudEZyYW1lOyAvLy9cblxuICAgIHJldHVybiBjb21wYXJlZFRvRnJhbWU7XG4gIH1cblxuICB2YWxpZGF0ZShjb250ZXh0LCBjb250aW51YXRpbm8pIHtcbiAgICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nfScgZnJhbWUgc3Vic3RpdHV0aW9uLi4uYCk7XG5cbiAgICBjb25zdCB2YWxpZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZFZhbGlkU3Vic3RpdHV0aW9uKGNvbnRleHQpO1xuXG4gICAgaWYgKHZhbGlkU3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvbiA9IHZhbGlkU3Vic3RpdHV0aW9uOyAgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHtmcmFtZVN1YnN0aXR1dGlvblN0cmluZ30nIGZyYW1lIHN1YnN0aXR1dGlvbiBpcyBhbHJlYWR5IHZhbGlkLmApO1xuXG4gICAgICBjb250aW51YXRpbm8oZnJhbWVTdWJzdGl0dXRpb24pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSB0aGlzLmdldEdlbmVyYWxDb250ZXh0KCksXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gdGhpcy5nZXRTcGVjaWZpY0NvbnRleHQoKTtcblxuICAgIGF0dGVtcHRzKChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZVRhcmdldEZyYW1lID0gdGhpcy52YWxpZGF0ZVRhcmdldEZyYW1lLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZVJlcGxhY2VtZW50RnJhbWUgPSB0aGlzLnZhbGlkYXRlUmVwbGFjZW1lbnRGcmFtZS5iaW5kKHRoaXMpO1xuXG4gICAgICBhbGwoW1xuICAgICAgICB2YWxpZGF0ZVRhcmdldEZyYW1lLFxuICAgICAgICB2YWxpZGF0ZVJlcGxhY2VtZW50RnJhbWVcbiAgICAgIF0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsICh2YWxpZGF0ZXMpID0+IHtcbiAgICAgICAgbGV0IGZyYW1lU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uID0gdGhpczsgIC8vL1xuXG4gICAgICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb247IC8vL1xuXG4gICAgICAgICAgY29udGV4dC5hZGRTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgICB0aGlzLmNvbW1pdChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2ZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nfScgZnJhbWUgc3Vic3RpdHV0aW9uLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWF0aW5vKGZyYW1lU3Vic3RpdHV0aW9uKTtcbiAgICAgIH0pO1xuICAgIH0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICB9XG5cbiAgdmFsaWRhdGVUYXJnZXRGcmFtZShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpbm8pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQsICAvLy9cbiAgICAgICAgICBmcmFtZVN1YnN0aXR1dGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nfScgZnJhbWUgc3Vic3RpdHV0aW9uJ3MgdGFyZ2V0IGZyYW1lLi4uYCk7XG5cbiAgICBjb25zdCB0YXJnZXRGcmFtZVNpbmd1bGFyID0gdGhpcy50YXJnZXRGcmFtZS5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoIXRhcmdldEZyYW1lU2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHRhcmdldEZyYW1lU3RyaW5nID0gdGhpcy50YXJnZXRGcmFtZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgIHRhcmdldEZyYW1lVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0YXJnZXRGcmFtZVN0cmluZ30nIHRhcmdldCBmcmFtZSBpcyBub3Qgc2luZ3VsYXIuYCk7XG5cbiAgICAgIGNvbnRpbnVhdGlubyh0YXJnZXRGcmFtZVZhbGlkYXRlcyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYW5pZmVzdCgoY29udGV4dCkgPT4ge1xuICAgICAgZWxpZGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgdGhpcy50YXJnZXRGcmFtZS52YWxpZGF0ZShjb250ZXh0LCAodGFyZ2V0RnJhbWUpID0+IHtcbiAgICAgICAgICBsZXQgdGFyZ2V0RnJhbWVWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0YXJnZXRGcmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGFyZ2V0RnJhbWVWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0YXJnZXRGcmFtZVZhbGlkYXRlcykge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtmcmFtZVN1YnN0aXR1dGlvblN0cmluZ30nIGZyYW1lIHN1YnN0aXR1dGlvbidzIHRhcmdldCBmcmFtZS4uLmApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRpbnVhdGlubyh0YXJnZXRGcmFtZVZhbGlkYXRlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHZhbGlkYXRlUmVwbGFjZW1lbnRGcmFtZShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpbm8pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgZnJhbWVTdWJzdGl0dXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtmcmFtZVN1YnN0aXR1dGlvblN0cmluZ30nIGZyYW1lIHN1YnN0aXR1dGlvbidzIHJlcGxhY2VtZW50IGZyYW1lLi4uYCk7XG5cbiAgICBlbGlkZSgoY29udGV4dCkgPT4ge1xuICAgICAgdGhpcy5yZXBsYWNlbWVudEZyYW1lLnZhbGlkYXRlKGNvbnRleHQsIChyZXBsYWNlbWVudEZyYW1lKSA9PiB7XG4gICAgICAgIGxldCByZXBsYWNlbWVudEZyYW1lVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHJlcGxhY2VtZW50RnJhbWUgIT09IG51bGwpIHtcbiAgICAgICAgICByZXBsYWNlbWVudEZyYW1lVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXBsYWNlbWVudEZyYW1lVmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtmcmFtZVN1YnN0aXR1dGlvblN0cmluZ30nIGZyYW1lIHN1YnN0aXR1dGlvbidzIHJlcGxhY2VtZW50IGZyYW1lLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWF0aW5vKHJlcGxhY2VtZW50RnJhbWVWYWxpZGF0ZXMpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeVN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24sIGNvbnRleHQpIHtcbiAgICBsZXQgc3Vic3RpdHV0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgZ2VuZXJhbFN1YnN0aXR1dGlvbiA9IHRoaXMsIC8vL1xuICAgICAgICAgIHNwZWNpZmljU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uLFxuICAgICAgICAgIGdlbmVyYWxTdWJzdGl0dXRpb25TdHJpbmcgPSBnZW5lcmFsU3Vic3RpdHV0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIHNwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nID0gc3BlY2lmaWNTdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3BlY2lmaWNTdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24gd2l0aCB0aGUgJyR7Z2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbi4uLmApO1xuXG4gICAgcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCByZXBsYWNlbWVudEZyYW1lVW5pZmllcyA9IHRoaXMudW5pZnlSZXBsYWNlbWVudEZyYW1lKHN1YnN0aXR1dGlvbiwgY29udGV4dCk7XG5cbiAgICAgIGlmIChyZXBsYWNlbWVudEZyYW1lVW5pZmllcykge1xuICAgICAgICBjb25zdCB0YXJnZXRGcmFtZVVuaWZpZXMgPSB0aGlzLnVuaWZ5VGFyZ2V0RnJhbWUoc3Vic3RpdHV0aW9uLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAodGFyZ2V0RnJhbWVVbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5jb21taXQoKTtcblxuICAgICAgICAgIHN1YnN0aXR1dGlvblVuaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAoc3Vic3RpdHV0aW9uVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3BlY2lmaWNTdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24gd2l0aCB0aGUgJyR7Z2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uVW5pZmllcztcbiAgfVxuXG4gIHVuaWZ5VGFyZ2V0RnJhbWUoc3Vic3RpdHV0aW9uLCBjb250ZXh0KSB7XG4gICAgbGV0IHRhcmdldEZyYW1lVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgZ2VuZXJhbFN1YnN0aXR1dGlvbiA9IHRoaXMsIC8vL1xuICAgICAgICAgIHNwZWNpZmljU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uLFxuICAgICAgICAgIGdlbmVyYWxTdWJzdGl0dXRpb25TdHJpbmcgPSBnZW5lcmFsU3Vic3RpdHV0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIHNwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nID0gc3BlY2lmaWNTdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3BlY2lmaWNTdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24ncyB0YXJnZXQgZnJhbWUgd2l0aCB0aGUgJyR7Z2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbidzIHRhcmdldCBmcmFtZS4uLmApO1xuXG4gICAgY29uc3QgZ2VuZXJhbFN1YnN0aXR1dGlvbkdlbmVyYWxDb250ZXh0ID0gZ2VuZXJhbFN1YnN0aXR1dGlvbi5nZXRHZW5lcmFsQ29udGV4dCgpLFxuICAgICAgICAgIHNwZWNpZmljU3Vic3RpdHV0aW9uR2VuZXJhbENvbnRleHQgPSBzcGVjaWZpY1N1YnN0aXR1dGlvbi5nZXRHZW5lcmFsQ29udGV4dCgpLFxuICAgICAgICAgIGdlbmVyYWxTdWJzdGl0dXRpb25UYXJnZXRGcmFtZSA9IGdlbmVyYWxTdWJzdGl0dXRpb24uZ2V0VGFyZ2V0RnJhbWUoKSxcbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvblRhcmdldEZyYW1lID0gc3BlY2lmaWNTdWJzdGl0dXRpb24uZ2V0VGFyZ2V0RnJhbWUoKSxcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGdlbmVyYWxTdWJzdGl0dXRpb25HZW5lcmFsQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IHNwZWNpZmljU3Vic3RpdHV0aW9uR2VuZXJhbENvbnRleHQsICAvLy9cbiAgICAgICAgICBnZW5lcmFsRnJhbWUgPSBnZW5lcmFsU3Vic3RpdHV0aW9uVGFyZ2V0RnJhbWUsIC8vL1xuICAgICAgICAgIHNwZWNpZmljRnJhbWUgPSBzcGVjaWZpY1N1YnN0aXR1dGlvblRhcmdldEZyYW1lOyAvLy9cblxuICAgIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBmcmFtZU5vZGUgPSBnZW5lcmFsRnJhbWUuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgZ2VuZXJhbENvbnRleHQpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lID0gc3BlY2lmaWNGcmFtZSwgIC8vL1xuICAgICAgICAgICAgICBmcmFtZVVuaWZpZXMgPSBtZXRhdmFyaWFibGUudW5pZnlGcmFtZShmcmFtZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKGZyYW1lVW5pZmllcykge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICB0YXJnZXRGcmFtZVVuaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIGlmICh0YXJnZXRGcmFtZVVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQudHJhY2UoYC4uLnVuaWZpZWQgdGhlICcke3NwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uJ3MgdGFyZ2V0IGZyYW1lIHdpdGggdGhlICcke2dlbmVyYWxTdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24ncyB0YXJnZXQgZnJhbWUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldEZyYW1lVW5pZmllcztcbiAgfVxuXG4gIHVuaWZ5UmVwbGFjZW1lbnRGcmFtZShzdWJzdGl0dXRpb24sIGNvbnRleHQpIHtcbiAgICBsZXQgcmVwbGFjZW1lbnRGcmFtZVVuaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGdlbmVyYWxTdWJzdGl0dXRpb24gPSB0aGlzLCAvLy9cbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbixcbiAgICAgICAgICBnZW5lcmFsU3Vic3RpdHV0aW9uU3RyaW5nID0gZ2VuZXJhbFN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvblN0cmluZyA9IHNwZWNpZmljU3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uJ3MgcmVwbGFjZW1lbnQgZnJhbWUgd2l0aCB0aGUgJyR7Z2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbidzIHJlcGxhY2VtZW50IGZyYW1lLi4uYCk7XG5cbiAgICBjb25zdCBnZW5lcmFsU3Vic3RpdHV0aW9uU3BlY2lmaWNDb250ZXh0ID0gZ2VuZXJhbFN1YnN0aXR1dGlvbi5nZXRTcGVjaWZpY0NvbnRleHQoKSxcbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvblNwZWNpZmljQ29udGV4dCA9IHNwZWNpZmljU3Vic3RpdHV0aW9uLmdldFNwZWNpZmljQ29udGV4dCgpLFxuICAgICAgICAgIGdlbmVyYWxTdWJzdGl0dXRpb25SZXBsYWNlbWVudEZyYW1lID0gZ2VuZXJhbFN1YnN0aXR1dGlvbi5nZXRSZXBsYWNlbWVudEZyYW1lKCksXG4gICAgICAgICAgc3BlY2lmaWNTdWJzdGl0dXRpb25SZXBsYWNlbWVudEZyYW1lID0gc3BlY2lmaWNTdWJzdGl0dXRpb24uZ2V0UmVwbGFjZW1lbnRGcmFtZSgpLFxuICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gZ2VuZXJhbFN1YnN0aXR1dGlvblNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IHNwZWNpZmljU3Vic3RpdHV0aW9uU3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbEZyYW1lID0gZ2VuZXJhbFN1YnN0aXR1dGlvblJlcGxhY2VtZW50RnJhbWUsIC8vL1xuICAgICAgICAgIHNwZWNpZmljRnJhbWUgPSBzcGVjaWZpY1N1YnN0aXR1dGlvblJlcGxhY2VtZW50RnJhbWU7IC8vL1xuXG4gICAgcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGZyYW1lTm9kZSA9IGdlbmVyYWxGcmFtZS5nZXROb2RlKCksXG4gICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgZ2VuZXJhbENvbnRleHQpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lID0gc3BlY2lmaWNGcmFtZSwgIC8vL1xuICAgICAgICAgICAgICBmcmFtZVVuaWZpZXMgPSBtZXRhdmFyaWFibGUudW5pZnlGcmFtZShmcmFtZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKGZyYW1lVW5pZmllcykge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICByZXBsYWNlbWVudEZyYW1lVW5pZmllcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKHJlcGxhY2VtZW50RnJhbWVVbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi51bmlmaWVkIHRoZSAnJHtzcGVjaWZpY1N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbidzIHJlcGxhY2VtZW50IGZyYW1lIHdpdGggdGhlICcke2dlbmVyYWxTdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24ncyByZXBsYWNlbWVudCBmcmFtZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVwbGFjZW1lbnRGcmFtZVVuaWZpZXM7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiRnJhbWVTdWJzdGl0dXRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBmcmFtZVN1YnN0aXR1dGlvbm4gPSBudWxsO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBqc29uO1xuXG4gICAgaWYgKHRoaXMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgdW5zZXJpYWxpc2VzKChqc29uLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgICAgZnJhbWVTdWJzdGl0dXRpb25Ob2RlID0gaW5zdGFudGlhdGVGcmFtZVN1YnN0aXR1dGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICAgIG5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIC8vL1xuICAgICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICAgICAgdGFyZ2V0RnJhbWUgPSB0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCksXG4gICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRGcmFtZSA9IHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgICAgICAgICBjb250ZXh0cyA9IFtcbiAgICAgICAgICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9ubiA9IG5ldyBGcmFtZVN1YnN0aXR1dGlvbihjb250ZXh0cywgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0YXJnZXRGcmFtZSwgcmVwbGFjZW1lbnRGcmFtZSk7XG4gICAgICAgIH0sIGpzb24sIGNvbnRleHQpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyYW1lU3Vic3RpdHV0aW9ubjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGxldCBmcmFtZVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvbk5vZGUgPSBzdGF0ZW1lbnQuZ2V0RnJhbWVTdWJzdGl0dXRpb25Ob2RlKCk7XG5cbiAgICBpZiAoZnJhbWVTdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBnZW5lcmFsQ29udGV4dCA9IGNvbnRleHQsIC8vL1xuICAgICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICBmcmFtZVN1YnN0aXR1dGlvbiA9IGZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRnJhbWVBbmRNZXRhdmFyaWFibGUoZnJhbWUsIG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCBmcmFtZVN1YnN0aXR1dGlvblxuXG4gICAgYWJsYXRlcygoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0LCAgLy8vXG4gICAgICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nID0gZnJhbWVTdWJzdGl0dXRpb25TdHJpbmdGcm9tRnJhbWVBbmRNZXRhdmFyaWFibGUoZnJhbWUsIG1ldGF2YXJpYWJsZSksXG4gICAgICAgICAgICAgIHN0cmluZyA9IGZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nLCAgLy8vXG4gICAgICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uTm9kZSA9IGluc3RhbnRpYXRlRnJhbWVTdWJzdGl0dXRpb24oc3RyaW5nLCBjb250ZXh0KTtcblxuICAgICAgICBmcmFtZVN1YnN0aXR1dGlvbiA9IGZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICByZXR1cm4gZnJhbWVTdWJzdGl0dXRpb247XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgZ2VuZXJhbENvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGZyYW1lTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBnZW5lcmFsQ29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZnVuY3Rpb24gdGFyZ2V0RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpIHtcbiAgY29uc3QgdGFyZ2V0RnJhbWVOb2RlID0gZnJhbWVTdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldEZyYW1lTm9kZSgpLFxuICAgICAgICB0YXJnZXRGcmFtZSA9IGdlbmVyYWxDb250ZXh0LmZpbmRGcmFtZUJ5RnJhbWVOb2RlKHRhcmdldEZyYW1lTm9kZSk7XG5cbiAgcmV0dXJuIHRhcmdldEZyYW1lO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlbWVudEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCByZXBsYWNlbWVudEZyYW1lTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudEZyYW1lTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gc3BlY2lmaWNDb250ZXh0LmZpbmRGcmFtZUJ5RnJhbWVOb2RlKHJlcGxhY2VtZW50RnJhbWVOb2RlKTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRGcmFtZTtcbn1cbiJdLCJuYW1lcyI6WyJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiRnJhbWVTdWJzdGl0dXRpb24iLCJTdWJzdGl0dXRpb24iLCJjb250ZXh0cyIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidGFyZ2V0RnJhbWUiLCJyZXBsYWNlbWVudEZyYW1lIiwiZ2V0VGFyZ2V0RnJhbWUiLCJnZXRSZXBsYWNlbWVudEZyYW1lIiwiZ2V0RnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiZ2V0Tm9kZSIsImZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsImdldE1ldGF2YXJpYWJsZU5vZGUiLCJnZXRUYXJnZXROb2RlIiwidGFyZ2V0RnJhbWVOb2RlIiwidGVyZ2V0Tm9kZSIsImdldFJlcGxhY2VtZW50Tm9kZSIsInJlcGxhY2VtZW50RnJhbWVOb2RlIiwicmVwbGFjZW1lbnROb2RlIiwiaXNUcml2aWFsIiwidGFyZ2V0RnJhbWVFcXVhbFRvUmVwbGFjZW1lbnRGcmFtZSIsImlzRXF1YWxUbyIsInRyaXZpYWwiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwiY29tcGFyZVBhcmFtZXRlciIsInBhcmFtZXRlciIsInRhcmdldEZyYW1lQ29tcGFyZXNUb1BhcmFtZXRlciIsImNvbXBhcmVzVG9QYXJhbWV0ZXIiLCJjb21wYXJlRnJhbWUiLCJmcmFtZSIsImNvbnRleHQiLCJmcmFtZUVxdWFsVG9SZXBsYWNlbWVudEZyYW1lIiwiY29tcGFyZWRUb0ZyYW1lIiwidmFsaWRhdGUiLCJjb250aW51YXRpbm8iLCJmcmFtZVN1YnN0aXR1dGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmFsaWRTdWJzdGl0dXRpb24iLCJmaW5kVmFsaWRTdWJzdGl0dXRpb24iLCJmcmFtZVN1YnN0aXR1dGlvbiIsImRlYnVnIiwiZ2VuZXJhbENvbnRleHQiLCJnZXRHZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsImdldFNwZWNpZmljQ29udGV4dCIsImF0dGVtcHRzIiwidmFsaWRhdGVUYXJnZXRGcmFtZSIsImJpbmQiLCJ2YWxpZGF0ZVJlcGxhY2VtZW50RnJhbWUiLCJhbGwiLCJ2YWxpZGF0ZXMiLCJzdWJzdGl0dXRpb24iLCJhZGRTdWJzdGl0dXRpb24iLCJjb21taXQiLCJ0YXJnZXRGcmFtZVNpbmd1bGFyIiwiaXNTaW5ndWxhciIsInRhcmdldEZyYW1lU3RyaW5nIiwidGFyZ2V0RnJhbWVWYWxpZGF0ZXMiLCJtYW5pZmVzdCIsImVsaWRlIiwicmVwbGFjZW1lbnRGcmFtZVZhbGlkYXRlcyIsInVuaWZ5U3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uVW5pZmllcyIsImdlbmVyYWxTdWJzdGl0dXRpb24iLCJzcGVjaWZpY1N1YnN0aXR1dGlvbiIsImdlbmVyYWxTdWJzdGl0dXRpb25TdHJpbmciLCJzcGVjaWZpY1N1YnN0aXR1dGlvblN0cmluZyIsInJlY29uY2lsZSIsInJlcGxhY2VtZW50RnJhbWVVbmlmaWVzIiwidW5pZnlSZXBsYWNlbWVudEZyYW1lIiwidGFyZ2V0RnJhbWVVbmlmaWVzIiwidW5pZnlUYXJnZXRGcmFtZSIsImdlbmVyYWxTdWJzdGl0dXRpb25HZW5lcmFsQ29udGV4dCIsInNwZWNpZmljU3Vic3RpdHV0aW9uR2VuZXJhbENvbnRleHQiLCJnZW5lcmFsU3Vic3RpdHV0aW9uVGFyZ2V0RnJhbWUiLCJzcGVjaWZpY1N1YnN0aXR1dGlvblRhcmdldEZyYW1lIiwiZ2VuZXJhbEZyYW1lIiwic3BlY2lmaWNGcmFtZSIsImZyYW1lTm9kZSIsImdldEZyYW1lTm9kZSIsIm1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUiLCJmcmFtZVVuaWZpZXMiLCJ1bmlmeUZyYW1lIiwiZ2VuZXJhbFN1YnN0aXR1dGlvblNwZWNpZmljQ29udGV4dCIsInNwZWNpZmljU3Vic3RpdHV0aW9uU3BlY2lmaWNDb250ZXh0IiwiZ2VuZXJhbFN1YnN0aXR1dGlvblJlcGxhY2VtZW50RnJhbWUiLCJzcGVjaWZpY1N1YnN0aXR1dGlvblJlcGxhY2VtZW50RnJhbWUiLCJuYW1lIiwiZnJvbUpTT04iLCJqc29uIiwiZnJhbWVTdWJzdGl0dXRpb25uIiwiaW5zdGFudGlhdGUiLCJ1bnNlcmlhbGlzZXMiLCJpbnN0YW50aWF0ZUZyYW1lU3Vic3RpdHV0aW9uIiwidGFyZ2V0RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJmcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50IiwiZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiZnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlIiwiYWJsYXRlcyIsImZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nRnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZSIsImdldFRhcmdldEZyYW1lTm9kZSIsImZpbmRGcmFtZUJ5RnJhbWVOb2RlIiwiZ2V0UmVwbGFjZW1lbnRGcmFtZU5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWVBOzs7ZUFBQTs7O2dDQWJvQztxRUFFWDs4QkFFTDswQkFDRzs2QkFDc0I7eUJBQ2M7d0JBQ0s7eUJBQ3lCOzs7Ozs7QUFFekYsTUFBTSxFQUFFQSxrQkFBa0IsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFbEQsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQywwQkFBMEJDLHFCQUFZO0lBQ2hFLFlBQVlDLFFBQVEsRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsV0FBVyxFQUFFQyxnQkFBZ0IsQ0FBRTtRQUM3RSxLQUFLLENBQUNMLFVBQVVDLFFBQVFDLE1BQU1DO1FBRTlCLElBQUksQ0FBQ0MsV0FBVyxHQUFHQTtRQUNuQixJQUFJLENBQUNDLGdCQUFnQixHQUFHQTtJQUMxQjtJQUVBQyxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQ0YsV0FBVztJQUN6QjtJQUVBRyxzQkFBc0I7UUFDcEIsT0FBTyxJQUFJLENBQUNGLGdCQUFnQjtJQUM5QjtJQUVBRywyQkFBMkI7UUFDekIsTUFBTU4sT0FBTyxJQUFJLENBQUNPLE9BQU8sSUFDbkJDLHdCQUF3QlIsTUFBTSxHQUFHO1FBRXZDLE9BQU9RO0lBQ1Q7SUFFQUMsc0JBQXNCO1FBQUUsT0FBTyxJQUFJLENBQUNQLFdBQVcsQ0FBQ08sbUJBQW1CO0lBQUk7SUFFdkVDLGdCQUFnQjtRQUNkLE1BQU1DLGtCQUFrQixJQUFJLENBQUNULFdBQVcsQ0FBQ0ssT0FBTyxJQUMxQ0ssYUFBYUQsaUJBQWlCLEdBQUc7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
|
|
264
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L3N1YnN0aXR1dGlvbi9mcmFtZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYnJlYWtQb2ludFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IFN1YnN0aXR1dGlvbiBmcm9tIFwiLi4vc3Vic3RpdHV0aW9uXCI7XG5cbmltcG9ydCB7IGFsbCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlRnJhbWVTdWJzdGl0dXRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyBmcmFtZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21GcmFtZUFuZE1ldGF2YXJpYWJsZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBlbGlkZSwgYWJsYXRlLCBhYmxhdGVzLCBkZXNjZW5kLCBtYW5pZmVzdCwgYXR0ZW1wdHMsIHJlY29uY2lsZSwgaW5zdGFudGlhdGUsIHVuc2VyaWFsaXNlcyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5jb25zdCB7IGJyZWFrUG9pbnRGcm9tSlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIEZyYW1lU3Vic3RpdHV0aW9uIGV4dGVuZHMgU3Vic3RpdHV0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGFyZ2V0RnJhbWUsIHJlcGxhY2VtZW50RnJhbWUpIHtcbiAgICBzdXBlcihjb250ZXh0cywgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMudGFyZ2V0RnJhbWUgPSB0YXJnZXRGcmFtZTtcbiAgICB0aGlzLnJlcGxhY2VtZW50RnJhbWUgPSByZXBsYWNlbWVudEZyYW1lO1xuICB9XG5cbiAgZ2V0VGFyZ2V0RnJhbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0RnJhbWU7XG4gIH1cblxuICBnZXRSZXBsYWNlbWVudEZyYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnJlcGxhY2VtZW50RnJhbWU7XG4gIH1cblxuICBnZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIGZyYW1lU3Vic3RpdHV0aW9uTm9kZTtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZU5vZGUoKSB7IHJldHVybiB0aGlzLnRhcmdldEZyYW1lLmdldE1ldGF2YXJpYWJsZU5vZGUoKTsgfVxuXG4gIGdldFRhcmdldE5vZGUoKSB7XG4gICAgY29uc3QgdGFyZ2V0RnJhbWVOb2RlID0gdGhpcy50YXJnZXRGcmFtZS5nZXROb2RlKCksXG4gICAgICAgICAgdGVyZ2V0Tm9kZSA9IHRhcmdldEZyYW1lTm9kZTsgLy8vXG5cbiAgICByZXR1cm4gdGVyZ2V0Tm9kZTtcbiAgfVxuXG4gIGdldFJlcGxhY2VtZW50Tm9kZSgpIHtcbiAgICBjb25zdCByZXBsYWNlbWVudEZyYW1lTm9kZSA9IHRoaXMucmVwbGFjZW1lbnRGcmFtZS5nZXROb2RlKCksXG4gICAgICAgICAgcmVwbGFjZW1lbnROb2RlID0gcmVwbGFjZW1lbnRGcmFtZU5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHJlcGxhY2VtZW50Tm9kZTtcbiAgfVxuXG4gIGlzVHJpdmlhbCgpIHtcbiAgICBjb25zdCB0YXJnZXRGcmFtZUVxdWFsVG9SZXBsYWNlbWVudEZyYW1lID0gdGhpcy50YXJnZXRGcmFtZS5pc0VxdWFsVG8odGhpcy5yZXBsYWNlbWVudEZyYW1lKSxcbiAgICAgICAgICB0cml2aWFsID0gdGFyZ2V0RnJhbWVFcXVhbFRvUmVwbGFjZW1lbnRGcmFtZTsgLy8vXG5cbiAgICByZXR1cm4gdHJpdmlhbDtcbiAgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7IHJldHVybiB0aGlzLnRhcmdldEZyYW1lLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTsgfVxuXG4gIGNvbXBhcmVQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG4gICAgY29uc3QgdGFyZ2V0RnJhbWVDb21wYXJlc1RvUGFyYW1ldGVyID0gdGhpcy50YXJnZXRGcmFtZS5jb21wYXJlUGFyYW1ldGVyKHBhcmFtZXRlciksXG4gICAgICAgICAgY29tcGFyZXNUb1BhcmFtZXRlciA9IHRhcmdldEZyYW1lQ29tcGFyZXNUb1BhcmFtZXRlcjsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9QYXJhbWV0ZXI7XG4gIH1cblxuICBjb21wYXJlRnJhbWUoZnJhbWUsIGNvbnRleHQpIHtcbiAgICBjb25zdCBmcmFtZUVxdWFsVG9SZXBsYWNlbWVudEZyYW1lID0gdGhpcy5yZXBsYWNlbWVudEZyYW1lLmlzRXF1YWxUbyhmcmFtZSksXG4gICAgICAgICAgY29tcGFyZWRUb0ZyYW1lID0gZnJhbWVFcXVhbFRvUmVwbGFjZW1lbnRGcmFtZTsgLy8vXG5cbiAgICByZXR1cm4gY29tcGFyZWRUb0ZyYW1lO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW5vKSB7XG4gICAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtmcmFtZVN1YnN0aXR1dGlvblN0cmluZ30nIGZyYW1lIHN1YnN0aXR1dGlvbi4uLmApO1xuXG4gICAgY29uc3QgdmFsaWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRWYWxpZFN1YnN0aXR1dGlvbihjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb24gPSB2YWxpZFN1YnN0aXR1dGlvbjsgIC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi50aGUgJyR7ZnJhbWVTdWJzdGl0dXRpb25TdHJpbmd9JyBmcmFtZSBzdWJzdGl0dXRpb24gaXMgYWxyZWFkeSB2YWxpZC5gKTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlubyhmcmFtZVN1YnN0aXR1dGlvbik7XG4gICAgfVxuXG4gICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSB0aGlzLmdldEdlbmVyYWxDb250ZXh0KCksXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gdGhpcy5nZXRTcGVjaWZpY0NvbnRleHQoKTtcblxuICAgIGF0dGVtcHRzKChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZVRhcmdldEZyYW1lID0gdGhpcy52YWxpZGF0ZVRhcmdldEZyYW1lLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZVJlcGxhY2VtZW50RnJhbWUgPSB0aGlzLnZhbGlkYXRlUmVwbGFjZW1lbnRGcmFtZS5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gYWxsKFtcbiAgICAgICAgdmFsaWRhdGVUYXJnZXRGcmFtZSxcbiAgICAgICAgdmFsaWRhdGVSZXBsYWNlbWVudEZyYW1lXG4gICAgICBdLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAodmFsaWRhdGVzKSA9PiB7XG4gICAgICAgIGxldCBmcmFtZVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IHRoaXM7ICAvLy9cblxuICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uOyAvLy9cblxuICAgICAgICAgIGNvbnRleHQuYWRkU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgdGhpcy5jb21taXQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtmcmFtZVN1YnN0aXR1dGlvblN0cmluZ30nIGZyYW1lIHN1YnN0aXR1dGlvbi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpbm8oZnJhbWVTdWJzdGl0dXRpb24pO1xuICAgICAgfSk7XG4gICAgfSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gIH1cblxuICB2YWxpZGF0ZVRhcmdldEZyYW1lKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlubykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZnJhbWVTdWJzdGl0dXRpb25TdHJpbmd9JyBmcmFtZSBzdWJzdGl0dXRpb24ncyB0YXJnZXQgZnJhbWUuLi5gKTtcblxuICAgIGNvbnN0IHRhcmdldEZyYW1lU2luZ3VsYXIgPSB0aGlzLnRhcmdldEZyYW1lLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmICghdGFyZ2V0RnJhbWVTaW5ndWxhcikge1xuICAgICAgY29uc3QgdGFyZ2V0RnJhbWVTdHJpbmcgPSB0aGlzLnRhcmdldEZyYW1lLmdldFN0cmluZygpLFxuICAgICAgICAgICAgdGFyZ2V0RnJhbWVWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3RhcmdldEZyYW1lU3RyaW5nfScgdGFyZ2V0IGZyYW1lIGlzIG5vdCBzaW5ndWxhci5gKTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlubyh0YXJnZXRGcmFtZVZhbGlkYXRlcyk7XG4gICAgfVxuXG4gICAgZWxpZGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnRhcmdldEZyYW1lLnZhbGlkYXRlKGNvbnRleHQsICh0YXJnZXRGcmFtZSkgPT4ge1xuICAgICAgICBsZXQgdGFyZ2V0RnJhbWVWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGFyZ2V0RnJhbWUgIT09IG51bGwpIHtcbiAgICAgICAgICB0YXJnZXRGcmFtZVZhbGlkYXRlcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFyZ2V0RnJhbWVWYWxpZGF0ZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2ZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nfScgZnJhbWUgc3Vic3RpdHV0aW9uJ3MgdGFyZ2V0IGZyYW1lLi4uYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW5vKHRhcmdldEZyYW1lVmFsaWRhdGVzKTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdmFsaWRhdGVSZXBsYWNlbWVudEZyYW1lKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlubykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBmcmFtZVN1YnN0aXR1dGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nfScgZnJhbWUgc3Vic3RpdHV0aW9uJ3MgcmVwbGFjZW1lbnQgZnJhbWUuLi5gKTtcblxuICAgIGVsaWRlKChjb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5yZXBsYWNlbWVudEZyYW1lLnZhbGlkYXRlKGNvbnRleHQsIChyZXBsYWNlbWVudEZyYW1lKSA9PiB7XG4gICAgICAgIGxldCByZXBsYWNlbWVudEZyYW1lVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHJlcGxhY2VtZW50RnJhbWUgIT09IG51bGwpIHtcbiAgICAgICAgICByZXBsYWNlbWVudEZyYW1lVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXBsYWNlbWVudEZyYW1lVmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtmcmFtZVN1YnN0aXR1dGlvblN0cmluZ30nIGZyYW1lIHN1YnN0aXR1dGlvbidzIHJlcGxhY2VtZW50IGZyYW1lLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlubyhyZXBsYWNlbWVudEZyYW1lVmFsaWRhdGVzKTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBnZW5lcmFsU3Vic3RpdHV0aW9uID0gdGhpcywgLy8vXG4gICAgICAgICAgc3BlY2lmaWNTdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb24sXG4gICAgICAgICAgZ2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZyA9IGdlbmVyYWxTdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3BlY2lmaWNTdWJzdGl0dXRpb25TdHJpbmcgPSBzcGVjaWZpY1N1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzcGVjaWZpY1N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiB3aXRoIHRoZSAnJHtnZW5lcmFsU3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uLi4uYCk7XG5cbiAgICByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHVuaWZ5VGFyZ2V0RnJhbWUgPSB0aGlzLnVuaWZ5VGFyZ2V0RnJhbWUuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHVuaWZ5UmVwbGFjZW1lbnRGcmFtZSA9IHRoaXMudW5pZnlSZXBsYWNlbWVudEZyYW1lLmJpbmQodGhpcyk7XG5cbiAgICAgIHJldHVybiBhbGwoW1xuICAgICAgICB1bmlmeVJlcGxhY2VtZW50RnJhbWUsXG4gICAgICAgIHVuaWZ5VGFyZ2V0RnJhbWVcbiAgICAgIF0sIHN1YnN0aXR1dGlvbiwgY29udGV4dCwgKHN1YnN0aXR1dGlvblVuaWZpZXMpID0+IHtcbiAgICAgICAgaWYgKHN1YnN0aXR1dGlvblVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmNvbW1pdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YnN0aXR1dGlvblVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzcGVjaWZpY1N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiB3aXRoIHRoZSAnJHtnZW5lcmFsU3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWJzdGl0dXRpb25VbmlmaWVzKTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlUYXJnZXRGcmFtZShzdWJzdGl0dXRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGdlbmVyYWxTdWJzdGl0dXRpb24gPSB0aGlzLCAvLy9cbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbixcbiAgICAgICAgICBnZW5lcmFsU3Vic3RpdHV0aW9uU3RyaW5nID0gZ2VuZXJhbFN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvblN0cmluZyA9IHNwZWNpZmljU3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uJ3MgdGFyZ2V0IGZyYW1lIHdpdGggdGhlICcke2dlbmVyYWxTdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24ncyB0YXJnZXQgZnJhbWUuLi5gKTtcblxuICAgIGNvbnN0IGdlbmVyYWxTdWJzdGl0dXRpb25HZW5lcmFsQ29udGV4dCA9IGdlbmVyYWxTdWJzdGl0dXRpb24uZ2V0R2VuZXJhbENvbnRleHQoKSxcbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvbkdlbmVyYWxDb250ZXh0ID0gc3BlY2lmaWNTdWJzdGl0dXRpb24uZ2V0R2VuZXJhbENvbnRleHQoKSxcbiAgICAgICAgICBnZW5lcmFsU3Vic3RpdHV0aW9uVGFyZ2V0RnJhbWUgPSBnZW5lcmFsU3Vic3RpdHV0aW9uLmdldFRhcmdldEZyYW1lKCksXG4gICAgICAgICAgc3BlY2lmaWNTdWJzdGl0dXRpb25UYXJnZXRGcmFtZSA9IHNwZWNpZmljU3Vic3RpdHV0aW9uLmdldFRhcmdldEZyYW1lKCksXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBnZW5lcmFsU3Vic3RpdHV0aW9uR2VuZXJhbENvbnRleHQsICAvLy9cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBzcGVjaWZpY1N1YnN0aXR1dGlvbkdlbmVyYWxDb250ZXh0LCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbEZyYW1lID0gZ2VuZXJhbFN1YnN0aXR1dGlvblRhcmdldEZyYW1lLCAvLy9cbiAgICAgICAgICBzcGVjaWZpY0ZyYW1lID0gc3BlY2lmaWNTdWJzdGl0dXRpb25UYXJnZXRGcmFtZTsgLy8vXG5cbiAgICByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgZnJhbWVOb2RlID0gZ2VuZXJhbEZyYW1lLmdldEZyYW1lTm9kZSgpLFxuICAgICAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGdlbmVyYWxDb250ZXh0KTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZSA9PT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0YXJnZXRGcmFtZVVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHRhcmdldEZyYW1lVW5pZmllcyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZyYW1lID0gc3BlY2lmaWNGcmFtZTsgIC8vL1xuXG4gICAgICByZXR1cm4gbWV0YXZhcmlhYmxlLnVuaWZ5RnJhbWUoZnJhbWUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChmcmFtZVVuaWZpZXMpID0+IHtcbiAgICAgICAgbGV0IHRhcmdldEZyYW1lVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChmcmFtZVVuaWZpZXMpIHtcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgdGFyZ2V0RnJhbWVVbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXJnZXRGcmFtZVVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LnRyYWNlKGAuLi51bmlmaWVkIHRoZSAnJHtzcGVjaWZpY1N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbidzIHRhcmdldCBmcmFtZSB3aXRoIHRoZSAnJHtnZW5lcmFsU3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uJ3MgdGFyZ2V0IGZyYW1lLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0YXJnZXRGcmFtZVVuaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5UmVwbGFjZW1lbnRGcmFtZShzdWJzdGl0dXRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGdlbmVyYWxTdWJzdGl0dXRpb24gPSB0aGlzLCAvLy9cbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbixcbiAgICAgICAgICBnZW5lcmFsU3Vic3RpdHV0aW9uU3RyaW5nID0gZ2VuZXJhbFN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvblN0cmluZyA9IHNwZWNpZmljU3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uJ3MgcmVwbGFjZW1lbnQgZnJhbWUgd2l0aCB0aGUgJyR7Z2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbidzIHJlcGxhY2VtZW50IGZyYW1lLi4uYCk7XG5cbiAgICBjb25zdCBnZW5lcmFsU3Vic3RpdHV0aW9uU3BlY2lmaWNDb250ZXh0ID0gZ2VuZXJhbFN1YnN0aXR1dGlvbi5nZXRTcGVjaWZpY0NvbnRleHQoKSxcbiAgICAgICAgICBzcGVjaWZpY1N1YnN0aXR1dGlvblNwZWNpZmljQ29udGV4dCA9IHNwZWNpZmljU3Vic3RpdHV0aW9uLmdldFNwZWNpZmljQ29udGV4dCgpLFxuICAgICAgICAgIGdlbmVyYWxTdWJzdGl0dXRpb25SZXBsYWNlbWVudEZyYW1lID0gZ2VuZXJhbFN1YnN0aXR1dGlvbi5nZXRSZXBsYWNlbWVudEZyYW1lKCksXG4gICAgICAgICAgc3BlY2lmaWNTdWJzdGl0dXRpb25SZXBsYWNlbWVudEZyYW1lID0gc3BlY2lmaWNTdWJzdGl0dXRpb24uZ2V0UmVwbGFjZW1lbnRGcmFtZSgpLFxuICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gZ2VuZXJhbFN1YnN0aXR1dGlvblNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IHNwZWNpZmljU3Vic3RpdHV0aW9uU3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbEZyYW1lID0gZ2VuZXJhbFN1YnN0aXR1dGlvblJlcGxhY2VtZW50RnJhbWUsIC8vL1xuICAgICAgICAgIHNwZWNpZmljRnJhbWUgPSBzcGVjaWZpY1N1YnN0aXR1dGlvblJlcGxhY2VtZW50RnJhbWU7IC8vL1xuXG4gICAgcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGZyYW1lTm9kZSA9IGdlbmVyYWxGcmFtZS5nZXROb2RlKCksXG4gICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgZ2VuZXJhbENvbnRleHQpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50RnJhbWVVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihyZXBsYWNlbWVudEZyYW1lVW5pZmllcyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZyYW1lID0gc3BlY2lmaWNGcmFtZTsgIC8vL1xuXG4gICAgICByZXR1cm4gbWV0YXZhcmlhYmxlLnVuaWZ5RnJhbWUoZnJhbWUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChmcmFtZVVuaWZpZXMpID0+IHtcbiAgICAgICAgbGV0IHJlcGxhY2VtZW50RnJhbWVVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGZyYW1lVW5pZmllcykge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICByZXBsYWNlbWVudEZyYW1lVW5pZmllcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVwbGFjZW1lbnRGcmFtZVVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LnRyYWNlKGAuLi51bmlmaWVkIHRoZSAnJHtzcGVjaWZpY1N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbidzIHJlcGxhY2VtZW50IGZyYW1lIHdpdGggdGhlICcke2dlbmVyYWxTdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24ncyByZXBsYWNlbWVudCBmcmFtZS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24ocmVwbGFjZW1lbnRGcmFtZVVuaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJGcmFtZVN1YnN0aXR1dGlvblwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IGZyYW1lU3Vic3RpdHV0aW9ubiA9IG51bGw7XG5cbiAgICBjb25zdCB7IG5hbWUgfSA9IGpzb247XG5cbiAgICBpZiAodGhpcy5uYW1lID09PSBuYW1lKSB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICB1bnNlcmlhbGlzZXMoKGpzb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgICBmcmFtZVN1YnN0aXR1dGlvbk5vZGUgPSBpbnN0YW50aWF0ZUZyYW1lU3Vic3RpdHV0aW9uKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgICAgbm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgICAgICB0YXJnZXRGcmFtZSA9IHRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSxcbiAgICAgICAgICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gcmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICAgICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgICAgICAgICBzcGVjaWZpY0NvbnRleHRcbiAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgZnJhbWVTdWJzdGl0dXRpb25uID0gbmV3IEZyYW1lU3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRhcmdldEZyYW1lLCByZXBsYWNlbWVudEZyYW1lKTtcbiAgICAgICAgfSwganNvbiwgY29udGV4dCk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJhbWVTdWJzdGl0dXRpb25uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgICBsZXQgZnJhbWVTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICAgIGlmIChmcmFtZVN1YnN0aXR1dGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgIGFibGF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBkZXNjZW5kKChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0LCAvLy9cbiAgICAgICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgICAgICBmcmFtZVN1YnN0aXR1dGlvbiA9IGZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgICAgICB9LCBjb250ZXh0KTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRnJhbWVBbmRNZXRhdmFyaWFibGUoZnJhbWUsIG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCBmcmFtZVN1YnN0aXR1dGlvblxuXG4gICAgYWJsYXRlcygoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgaW5zdGFudGlhdGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBtYW5pZmVzdCgoZ2VuZXJhbENvbnRleHQpID0+IHtcbiAgICAgICAgICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvblN0cmluZyA9IGZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nRnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlKGZyYW1lLCBtZXRhdmFyaWFibGUpLFxuICAgICAgICAgICAgICAgIHN0cmluZyA9IGZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nLCAgLy8vXG4gICAgICAgICAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uTm9kZSA9IGluc3RhbnRpYXRlRnJhbWVTdWJzdGl0dXRpb24oc3RyaW5nLCBjb250ZXh0KTtcblxuICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gICAgICAgIH0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBnZW5lcmFsQ29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gZnJhbWVOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIG1ldGF2YXJpYWJsZSA9IGdlbmVyYWxDb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5mdW5jdGlvbiB0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCkge1xuICBjb25zdCB0YXJnZXRGcmFtZU5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIHRhcmdldEZyYW1lID0gZ2VuZXJhbENvbnRleHQuZmluZEZyYW1lQnlGcmFtZU5vZGUodGFyZ2V0RnJhbWVOb2RlKTtcblxuICByZXR1cm4gdGFyZ2V0RnJhbWU7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHJlcGxhY2VtZW50RnJhbWVOb2RlID0gZnJhbWVTdWJzdGl0dXRpb25Ob2RlLmdldFJlcGxhY2VtZW50RnJhbWVOb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50RnJhbWUgPSBzcGVjaWZpY0NvbnRleHQuZmluZEZyYW1lQnlGcmFtZU5vZGUocmVwbGFjZW1lbnRGcmFtZU5vZGUpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudEZyYW1lO1xufVxuIl0sIm5hbWVzIjpbImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJGcmFtZVN1YnN0aXR1dGlvbiIsIlN1YnN0aXR1dGlvbiIsImNvbnRleHRzIiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJ0YXJnZXRGcmFtZSIsInJlcGxhY2VtZW50RnJhbWUiLCJnZXRUYXJnZXRGcmFtZSIsImdldFJlcGxhY2VtZW50RnJhbWUiLCJnZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJnZXROb2RlIiwiZnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImdldFRhcmdldE5vZGUiLCJ0YXJnZXRGcmFtZU5vZGUiLCJ0ZXJnZXROb2RlIiwiZ2V0UmVwbGFjZW1lbnROb2RlIiwicmVwbGFjZW1lbnRGcmFtZU5vZGUiLCJyZXBsYWNlbWVudE5vZGUiLCJpc1RyaXZpYWwiLCJ0YXJnZXRGcmFtZUVxdWFsVG9SZXBsYWNlbWVudEZyYW1lIiwiaXNFcXVhbFRvIiwidHJpdmlhbCIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJjb21wYXJlUGFyYW1ldGVyIiwicGFyYW1ldGVyIiwidGFyZ2V0RnJhbWVDb21wYXJlc1RvUGFyYW1ldGVyIiwiY29tcGFyZXNUb1BhcmFtZXRlciIsImNvbXBhcmVGcmFtZSIsImZyYW1lIiwiY29udGV4dCIsImZyYW1lRXF1YWxUb1JlcGxhY2VtZW50RnJhbWUiLCJjb21wYXJlZFRvRnJhbWUiLCJ2YWxpZGF0ZSIsImNvbnRpbnVhdGlubyIsImZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YWxpZFN1YnN0aXR1dGlvbiIsImZpbmRWYWxpZFN1YnN0aXR1dGlvbiIsImZyYW1lU3Vic3RpdHV0aW9uIiwiZGVidWciLCJnZW5lcmFsQ29udGV4dCIsImdldEdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwiZ2V0U3BlY2lmaWNDb250ZXh0IiwiYXR0ZW1wdHMiLCJ2YWxpZGF0ZVRhcmdldEZyYW1lIiwiYmluZCIsInZhbGlkYXRlUmVwbGFjZW1lbnRGcmFtZSIsImFsbCIsInZhbGlkYXRlcyIsInN1YnN0aXR1dGlvbiIsImFkZFN1YnN0aXR1dGlvbiIsImNvbW1pdCIsInRhcmdldEZyYW1lU2luZ3VsYXIiLCJpc1Npbmd1bGFyIiwidGFyZ2V0RnJhbWVTdHJpbmciLCJ0YXJnZXRGcmFtZVZhbGlkYXRlcyIsImVsaWRlIiwicmVwbGFjZW1lbnRGcmFtZVZhbGlkYXRlcyIsInVuaWZ5U3Vic3RpdHV0aW9uIiwiY29udGludWF0aW9uIiwiZ2VuZXJhbFN1YnN0aXR1dGlvbiIsInNwZWNpZmljU3Vic3RpdHV0aW9uIiwiZ2VuZXJhbFN1YnN0aXR1dGlvblN0cmluZyIsInNwZWNpZmljU3Vic3RpdHV0aW9uU3RyaW5nIiwicmVjb25jaWxlIiwidW5pZnlUYXJnZXRGcmFtZSIsInVuaWZ5UmVwbGFjZW1lbnRGcmFtZSIsInN1YnN0aXR1dGlvblVuaWZpZXMiLCJnZW5lcmFsU3Vic3RpdHV0aW9uR2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY1N1YnN0aXR1dGlvbkdlbmVyYWxDb250ZXh0IiwiZ2VuZXJhbFN1YnN0aXR1dGlvblRhcmdldEZyYW1lIiwic3BlY2lmaWNTdWJzdGl0dXRpb25UYXJnZXRGcmFtZSIsImdlbmVyYWxGcmFtZSIsInNwZWNpZmljRnJhbWUiLCJmcmFtZU5vZGUiLCJnZXRGcmFtZU5vZGUiLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlIiwidGFyZ2V0RnJhbWVVbmlmaWVzIiwidW5pZnlGcmFtZSIsImZyYW1lVW5pZmllcyIsImdlbmVyYWxTdWJzdGl0dXRpb25TcGVjaWZpY0NvbnRleHQiLCJzcGVjaWZpY1N1YnN0aXR1dGlvblNwZWNpZmljQ29udGV4dCIsImdlbmVyYWxTdWJzdGl0dXRpb25SZXBsYWNlbWVudEZyYW1lIiwic3BlY2lmaWNTdWJzdGl0dXRpb25SZXBsYWNlbWVudEZyYW1lIiwicmVwbGFjZW1lbnRGcmFtZVVuaWZpZXMiLCJuYW1lIiwiZnJvbUpTT04iLCJqc29uIiwiZnJhbWVTdWJzdGl0dXRpb25uIiwiaW5zdGFudGlhdGUiLCJ1bnNlcmlhbGlzZXMiLCJpbnN0YW50aWF0ZUZyYW1lU3Vic3RpdHV0aW9uIiwidGFyZ2V0RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJmcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJhYmxhdGUiLCJkZXNjZW5kIiwiZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiZnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlIiwiYWJsYXRlcyIsIm1hbmlmZXN0IiwiZnJhbWVTdWJzdGl0dXRpb25TdHJpbmdGcm9tRnJhbWVBbmRNZXRhdmFyaWFibGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlIiwiZ2V0VGFyZ2V0RnJhbWVOb2RlIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJnZXRSZXBsYWNlbWVudEZyYW1lTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBZUE7OztlQUFBOzs7Z0NBYm9DO3FFQUVYOzhCQUVMOzBCQUNHOzZCQUNzQjt5QkFDYzt3QkFDSzt5QkFDMEM7Ozs7OztBQUUxRyxNQUFNLEVBQUVBLGtCQUFrQixFQUFFLEdBQUdDLG1DQUFtQjtNQUVs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
|
|
@@ -113,14 +113,12 @@ const _default = (0, _elements.define)(class ReferenceSubstitution extends _subs
|
|
|
113
113
|
let targetReferenceValidates = false;
|
|
114
114
|
const context = generalContext, referenceSubstitutionString = this.getString(); ///
|
|
115
115
|
context.trace(`Validating the '${referenceSubstitutionString}' reference substitution's target reference...`);
|
|
116
|
-
(0, _context.
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}, context);
|
|
123
|
-
}, specificContext, context);
|
|
116
|
+
(0, _context.elide)((context)=>{
|
|
117
|
+
const targetReference = this.targetReference.validate(context);
|
|
118
|
+
if (targetReference !== null) {
|
|
119
|
+
targetReferenceValidates = true;
|
|
120
|
+
}
|
|
121
|
+
}, context);
|
|
124
122
|
if (targetReferenceValidates) {
|
|
125
123
|
context.debug(`...validated the '${referenceSubstitutionString}' reference substitution's target reference...`);
|
|
126
124
|
}
|
|
@@ -158,25 +156,27 @@ const _default = (0, _elements.define)(class ReferenceSubstitution extends _subs
|
|
|
158
156
|
}
|
|
159
157
|
return referenceSubstitutionn;
|
|
160
158
|
}
|
|
161
|
-
static
|
|
159
|
+
static fromAssumptionAndConstraint(assumption, constraint, generalContext, specificContext) {
|
|
162
160
|
let referenceSubstitution;
|
|
163
161
|
(0, _context.ablates)((generalContext, specificContext)=>{
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
162
|
+
(0, _context.instantiate)((specificContext)=>{
|
|
163
|
+
(0, _context.manifest)((generalContext)=>{
|
|
164
|
+
const metavariable = assumption.getMetavariable(), reference = constraint.getReference(), referenceSubstitutionString = (0, _string.referenceSubstitutionStringFromReferenceAndMetavariable)(reference, metavariable), string = referenceSubstitutionString, context = specificContext, referenceSubstitutionNode = (0, _instantiate.instantiateReferenceSubstitution)(string, context);
|
|
165
|
+
referenceSubstitution = (0, _element.referenceSubstitutionFromReferenceSubstitutionNode)(referenceSubstitutionNode, generalContext, specificContext);
|
|
166
|
+
}, generalContext, specificContext);
|
|
167
|
+
}, specificContext);
|
|
169
168
|
}, generalContext, specificContext);
|
|
170
169
|
return referenceSubstitution;
|
|
171
170
|
}
|
|
172
|
-
static
|
|
171
|
+
static fromReferenceAndMetavariable(reference, metavariable, generalContext, specificContext) {
|
|
173
172
|
let referenceSubstitution;
|
|
174
173
|
(0, _context.ablates)((generalContext, specificContext)=>{
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
174
|
+
(0, _context.instantiate)((specificContext)=>{
|
|
175
|
+
(0, _context.manifest)((generalContext)=>{
|
|
176
|
+
const referenceSubstitutionString = (0, _string.referenceSubstitutionStringFromReferenceAndMetavariable)(reference, metavariable), string = referenceSubstitutionString, context = specificContext, referenceSubstitutionNode = (0, _instantiate.instantiateReferenceSubstitution)(string, context);
|
|
177
|
+
referenceSubstitution = (0, _element.referenceSubstitutionFromReferenceSubstitutionNode)(referenceSubstitutionNode, generalContext, specificContext);
|
|
178
|
+
}, generalContext, specificContext);
|
|
179
|
+
}, specificContext);
|
|
180
180
|
}, generalContext, specificContext);
|
|
181
181
|
return referenceSubstitution;
|
|
182
182
|
}
|
|
@@ -190,4 +190,4 @@ function replacementReferenceFromReferenceSubstitutionNode(referenceSubstitution
|
|
|
190
190
|
return replacementReference;
|
|
191
191
|
}
|
|
192
192
|
|
|
193
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L3N1YnN0aXR1dGlvbi9yZWZlcmVuY2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBTdWJzdGl0dXRpb24gZnJvbSBcIi4uL3N1YnN0aXR1dGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlUmVmZXJlbmNlU3Vic3RpdHV0aW9uIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyByZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmdGcm9tUmVmZXJlbmNlQW5kTWV0YXZhcmlhYmxlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IGVsaWRlLCBhYmxhdGVzLCBtYW5pZmVzdCwgYXR0ZW1wdHMsIGluc3RhbnRpYXRlLCB1bnNlcmlhbGlzZXMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBicmVha1BvaW50RnJvbUpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBSZWZlcmVuY2VTdWJzdGl0dXRpb24gZXh0ZW5kcyBTdWJzdGl0dXRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRhcmdldFJlZmVyZW5jZSwgcmVwbGFjZW1lbnRSZWZlcmVuY2UpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50YXJnZXRSZWZlcmVuY2UgPSB0YXJnZXRSZWZlcmVuY2U7XG4gICAgdGhpcy5yZXBsYWNlbWVudFJlZmVyZW5jZSA9IHJlcGxhY2VtZW50UmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0VGFyZ2V0UmVmZXJlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRhcmdldFJlZmVyZW5jZTtcbiAgfVxuXG4gIGdldFJlcGxhY2VtZW50UmVmZXJlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLnJlcGxhY2VtZW50UmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gcmVmZXJlbmNlU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZ2V0VGFyZ2V0Tm9kZSgpIHtcbiAgICBjb25zdCB0YXJnZXRSZWZlcmVuY2VOb2RlID0gdGhpcy50YXJnZXRSZWZlcmVuY2UuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHRlcmdldE5vZGUgPSB0YXJnZXRSZWZlcmVuY2VOb2RlOyAvLy9cblxuICAgIHJldHVybiB0ZXJnZXROb2RlO1xuICB9XG5cbiAgZ2V0UmVwbGFjZW1lbnROb2RlKCkge1xuICAgIGNvbnN0IHJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSA9IHRoaXMucmVwbGFjZW1lbnRSZWZlcmVuY2UuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHJlcGxhY2VtZW50Tm9kZSA9IHJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZTsgLy8vXG5cbiAgICByZXR1cm4gcmVwbGFjZW1lbnROb2RlO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlTm9kZSgpIHsgcmV0dXJuIHRoaXMudGFyZ2V0UmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTsgfVxuXG4gIGlzVHJpdmlhbCgpIHtcbiAgICBjb25zdCB0YXJnZXRSZWZlcmVuY2VFcXVhbFRvUmVwbGFjZW1lbnRSZWZlcmVuY2UgPSB0aGlzLnRhcmdldFJlZmVyZW5jZS5pc0VxdWFsVG8odGhpcy5yZXBsYWNlbWVudFJlZmVyZW5jZSksXG4gICAgICAgICAgdHJpdmlhbCA9IHRhcmdldFJlZmVyZW5jZUVxdWFsVG9SZXBsYWNlbWVudFJlZmVyZW5jZTsgLy8vXG5cbiAgICByZXR1cm4gdHJpdmlhbDtcbiAgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7IHJldHVybiB0aGlzLnRhcmdldFJlZmVyZW5jZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7IH1cblxuICBjb21wYXJlUmVmZXJlbmNlKHJlZmVyZW5jZSwgY29udGV4dCkge1xuICAgIGNvbnN0IHJlZmVyZW5jZUVxdWFsVG9SZXBsYWNlbWVudFJlZmVyZW5jZSA9IHRoaXMucmVwbGFjZW1lbnRSZWZlcmVuY2UuaXNFcXVhbFRvKHJlZmVyZW5jZSksXG4gICAgICAgICAgY29tcGFyZWRUb1JlZmVyZW5jZSA9IHJlZmVyZW5jZUVxdWFsVG9SZXBsYWNlbWVudFJlZmVyZW5jZTsgLy8vXG5cbiAgICByZXR1cm4gY29tcGFyZWRUb1JlZmVyZW5jZTtcbiAgfVxuXG4gIGNvbXBhcmVQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG4gICAgY29uc3QgdGFyZ2V0UmVmZXJlbmNlQ29tcGFyZXNUb1BhcmFtZXRlciA9IHRoaXMudGFyZ2V0UmVmZXJlbmNlLmNvbXBhcmVQYXJhbWV0ZXIocGFyYW1ldGVyKSxcbiAgICAgICAgICBjb21wYXJlc1RvUGFyYW1ldGVyID0gdGFyZ2V0UmVmZXJlbmNlQ29tcGFyZXNUb1BhcmFtZXRlcjsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9QYXJhbWV0ZXI7XG4gIH1cblxuICBjb21wYXJlU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbikge1xuICAgIGxldCBzdWJzdGl0dXRpb25Db21wYXJlcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uUmVmZXJlbmNlU3Vic3RpdHV0aW9uID0gUmVmZXJlbmNlU3Vic3RpdHV0aW9uLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHN1YnN0aXR1dGlvbik7XG5cbiAgICBpZiAoc3Vic3RpdHV0aW9uUmVmZXJlbmNlU3Vic3RpdHV0aW9uKSB7XG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlID0gc3Vic3RpdHV0aW9uLmdldE5vZGUoKSxcbiAgICAgICAgICAgIHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUoc3Vic3RpdHV0aW9uTm9kZSk7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICBzdWJzdGl0dXRpb25Db21wYXJlcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbkNvbXBhcmVzO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCkge1xuICAgIGxldCByZWZlcmVuY2VTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgcmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7cmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nfScgcmVmZXJlbmNlIHN1YnN0aXR1dGlvbi4uLmApO1xuXG4gICAgbGV0IHZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdmFsaWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRWYWxpZFN1YnN0aXR1dGlvbihjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgdmFsaWRhdGVzID0gdHJ1ZTtcblxuICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uID0gdmFsaWRTdWJzdGl0dXRpb247ICAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke3JlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZ30nIHJlZmVyZW5jZSBzdWJzdGl0dXRpb24gaXMgYWxyZWFkeSB2YWxpZC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSB0aGlzLmdldEdlbmVyYWxDb250ZXh0KCksXG4gICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSB0aGlzLmdldFNwZWNpZmljQ29udGV4dCgpO1xuXG4gICAgICBhdHRlbXB0cygoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXRSZWZlcmVuY2VWYWxpZGF0ZXMgPSB0aGlzLnZhbGlkYXRlVGFyZ2V0UmVmZXJlbmNlKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIGlmICh0YXJnZXRSZWZlcmVuY2VWYWxpZGF0ZXMpIHtcbiAgICAgICAgICBjb25zdCByZXBsYWNlbWVudFJlZmVyZW5jZVZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGVSZXBsYWNlbWVudFJlZmVyZW5jZShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICAgIGlmIChyZXBsYWNlbWVudFJlZmVyZW5jZVZhbGlkYXRlcykge1xuICAgICAgICAgICAgdmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgdGhpcy5jb21taXQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IHRoaXM7ICAvLy9cblxuICAgICAgICByZWZlcmVuY2VTdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb247ICAvLy9cblxuICAgICAgICBjb250ZXh0LmFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nfScgcmVmZXJlbmNlIHN1YnN0aXR1dGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgdmFsaWRhdGVUYXJnZXRSZWZlcmVuY2UoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCB0YXJnZXRSZWZlcmVuY2VWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dCwgLy8vXG4gICAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7cmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nfScgcmVmZXJlbmNlIHN1YnN0aXR1dGlvbidzIHRhcmdldCByZWZlcmVuY2UuLi5gKTtcblxuICAgIG1hbmlmZXN0KChjb250ZXh0KSA9PiB7XG4gICAgICBlbGlkZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXRSZWZlcmVuY2UgPSB0aGlzLnRhcmdldFJlZmVyZW5jZS52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgICAgICBpZiAodGFyZ2V0UmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgdGFyZ2V0UmVmZXJlbmNlVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcblxuICAgIGlmICh0YXJnZXRSZWZlcmVuY2VWYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nfScgcmVmZXJlbmNlIHN1YnN0aXR1dGlvbidzIHRhcmdldCByZWZlcmVuY2UuLi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0UmVmZXJlbmNlVmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVSZXBsYWNlbWVudFJlZmVyZW5jZShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IHJlcGxhY2VtZW50UmVmZXJlbmNlVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7cmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nfScgcmVmZXJlbmNlIHN1YnN0aXR1dGlvbidzIHJlcGxhY2VtZW50IHJlZmVyZW5jZS4uLmApO1xuXG4gICAgZWxpZGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHJlcGxhY2VtZW50UmVmZXJlbmNlID0gdGhpcy5yZXBsYWNlbWVudFJlZmVyZW5jZS52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgICAgaWYgKHJlcGxhY2VtZW50UmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmIChyZXBsYWNlbWVudFJlZmVyZW5jZVZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtyZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmd9JyByZWZlcmVuY2Ugc3Vic3RpdHV0aW9uJ3MgcmVwbGFjZW1lbnQgcmVmZXJlbmNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiByZXBsYWNlbWVudFJlZmVyZW5jZVZhbGlkYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJSZWZlcmVuY2VTdWJzdGl0dXRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCByZWZlcmVuY2VTdWJzdGl0dXRpb25uID0gbnVsbDtcblxuICAgIGNvbnN0IHsgbmFtZSB9ID0ganNvbjtcblxuICAgIGlmICh0aGlzLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIHVuc2VyaWFsaXNlcygoanNvbiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUgPSBpbnN0YW50aWF0ZVJlZmVyZW5jZVN1YnN0aXR1dGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICAgIG5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICAgIHRhcmdldFJlZmVyZW5jZSA9IHRhcmdldFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSxcbiAgICAgICAgICAgICAgICByZXBsYWNlbWVudFJlZmVyZW5jZSA9IHJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgICAgICAgICBjb250ZXh0cyA9IFtcbiAgICAgICAgICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgIHJlZmVyZW5jZVN1YnN0aXR1dGlvbm4gPSBuZXcgUmVmZXJlbmNlU3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRhcmdldFJlZmVyZW5jZSwgcmVwbGFjZW1lbnRSZWZlcmVuY2UpO1xuICAgICAgICB9LCBqc29uLCBjb250ZXh0KTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiByZWZlcmVuY2VTdWJzdGl0dXRpb25uO1xuICB9XG5cbiAgc3RhdGljIGZyb21SZWZlcmVuY2VBbmRNZXRhdmFyaWFibGUocmVmZXJlbmNlLCBtZXRhdmFyaWFibGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBsZXQgcmVmZXJlbmNlU3Vic3RpdHV0aW9uO1xuXG4gICAgYWJsYXRlcygoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0LCAgLy8vXG4gICAgICAgICAgICAgIHJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZyA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21SZWZlcmVuY2VBbmRNZXRhdmFyaWFibGUocmVmZXJlbmNlLCBtZXRhdmFyaWFibGUpLFxuICAgICAgICAgICAgICBzdHJpbmcgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmcsICAvLy9cbiAgICAgICAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSA9IGluc3RhbnRpYXRlUmVmZXJlbmNlU3Vic3RpdHV0aW9uKHN0cmluZywgY29udGV4dCk7XG5cbiAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIHJldHVybiByZWZlcmVuY2VTdWJzdGl0dXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUFzc3VtcHRpb25BbmRDb25zdHJhaW50KGFzc3VtcHRpb24sIGNvbnN0cmFpbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBsZXQgcmVmZXJlbmNlU3Vic3RpdHV0aW9uO1xuXG4gICAgYWJsYXRlcygoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0LCAgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IGFzc3VtcHRpb24uZ2V0TWV0YXZhcmlhYmxlKCksXG4gICAgICAgICAgICAgIHJlZmVyZW5jZSA9IGNvbnN0cmFpbnQuZ2V0UmVmZXJlbmNlKCksXG4gICAgICAgICAgICAgIHJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZyA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21SZWZlcmVuY2VBbmRNZXRhdmFyaWFibGUocmVmZXJlbmNlLCBtZXRhdmFyaWFibGUpLFxuICAgICAgICAgICAgICBzdHJpbmcgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmcsICAvLy9cbiAgICAgICAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSA9IGluc3RhbnRpYXRlUmVmZXJlbmNlU3Vic3RpdHV0aW9uKHN0cmluZywgY29udGV4dCk7XG5cbiAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIHJldHVybiByZWZlcmVuY2VTdWJzdGl0dXRpb247XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiB0YXJnZXRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCkge1xuICBjb25zdCB0YXJnZXRSZWZlcmVuY2VOb2RlID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZSA9IGdlbmVyYWxDb250ZXh0LmZpbmRSZWZlcmVuY2VCeVJlZmVyZW5jZU5vZGUodGFyZ2V0UmVmZXJlbmNlTm9kZSk7XG5cbiAgcmV0dXJuIHRhcmdldFJlZmVyZW5jZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZW1lbnRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgcmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2UgPSBzcGVjaWZpY0NvbnRleHQuZmluZFJlZmVyZW5jZUJ5UmVmZXJlbmNlTm9kZShyZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudFJlZmVyZW5jZTtcbn1cbiJdLCJuYW1lcyI6WyJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiUmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwiU3Vic3RpdHV0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidGFyZ2V0UmVmZXJlbmNlIiwicmVwbGFjZW1lbnRSZWZlcmVuY2UiLCJnZXRUYXJnZXRSZWZlcmVuY2UiLCJnZXRSZXBsYWNlbWVudFJlZmVyZW5jZSIsImdldFJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJnZXROb2RlIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwiZ2V0VGFyZ2V0Tm9kZSIsInRhcmdldFJlZmVyZW5jZU5vZGUiLCJ0ZXJnZXROb2RlIiwiZ2V0UmVwbGFjZW1lbnROb2RlIiwicmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlIiwicmVwbGFjZW1lbnROb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImlzVHJpdmlhbCIsInRhcmdldFJlZmVyZW5jZUVxdWFsVG9SZXBsYWNlbWVudFJlZmVyZW5jZSIsImlzRXF1YWxUbyIsInRyaXZpYWwiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwiY29tcGFyZVJlZmVyZW5jZSIsInJlZmVyZW5jZSIsInJlZmVyZW5jZUVxdWFsVG9SZXBsYWNlbWVudFJlZmVyZW5jZSIsImNvbXBhcmVkVG9SZWZlcmVuY2UiLCJjb21wYXJlUGFyYW1ldGVyIiwicGFyYW1ldGVyIiwidGFyZ2V0UmVmZXJlbmNlQ29tcGFyZXNUb1BhcmFtZXRlciIsImNvbXBhcmVzVG9QYXJhbWV0ZXIiLCJjb21wYXJlU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uQ29tcGFyZXMiLCJzdWJzdGl0dXRpb25SZWZlcmVuY2VTdWJzdGl0dXRpb24iLCJwcm90b3R5cGUiLCJpc1Byb3RvdHlwZU9mIiwic3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwidmFsaWRhdGUiLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZhbGlkYXRlcyIsInZhbGlkU3Vic3RpdHV0aW9uIiwiZmluZFZhbGlkU3Vic3RpdHV0aW9uIiwiZGVidWciLCJnZW5lcmFsQ29udGV4dCIsImdldEdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwiZ2V0U3BlY2lmaWNDb250ZXh0IiwiYXR0ZW1wdHMiLCJ0YXJnZXRSZWZlcmVuY2VWYWxpZGF0ZXMiLCJ2YWxpZGF0ZVRhcmdldFJlZmVyZW5jZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlVmFsaWRhdGVzIiwidmFsaWRhdGVSZXBsYWNlbWVudFJlZmVyZW5jZSIsImNvbW1pdCIsImFkZFN1YnN0aXR1dGlvbiIsIm1hbmlmZXN0IiwiZWxpZGUiLCJuYW1lIiwiZnJvbUpTT04iLCJqc29uIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9ubiIsImluc3RhbnRpYXRlIiwidW5zZXJpYWxpc2VzIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsImluc3RhbnRpYXRlUmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwidGFyZ2V0UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwiY29udGV4dHMiLCJmcm9tUmVmZXJlbmNlQW5kTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlIiwiYWJsYXRlcyIsInJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21SZWZlcmVuY2VBbmRNZXRhdmFyaWFibGUiLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25Gcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsImZyb21Bc3N1bXB0aW9uQW5kQ29uc3RyYWludCIsImFzc3VtcHRpb24iLCJjb25zdHJhaW50IiwiZ2V0TWV0YXZhcmlhYmxlIiwiZ2V0UmVmZXJlbmNlIiwiZ2V0VGFyZ2V0UmVmZXJlbmNlTm9kZSIsImZpbmRSZWZlcmVuY2VCeVJlZmVyZW5jZU5vZGUiLCJnZXRSZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWNBOzs7ZUFBQTs7O2dDQVpvQztxRUFFWDswQkFFRjs2QkFDMEI7eUJBQ2tCO3dCQUNLO3lCQUNNOzs7Ozs7QUFFOUUsTUFBTSxFQUFFQSxrQkFBa0IsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFbEQsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyw4QkFBOEJDLHFCQUFZO0lBQ3BFLFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsZUFBZSxFQUFFQyxvQkFBb0IsQ0FBRTtRQUNwRixLQUFLLENBQUNMLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsZUFBZSxHQUFHQTtRQUN2QixJQUFJLENBQUNDLG9CQUFvQixHQUFHQTtJQUM5QjtJQUVBQyxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLENBQUNGLGVBQWU7SUFDN0I7SUFFQUcsMEJBQTBCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDRixvQkFBb0I7SUFDbEM7SUFFQUcsK0JBQStCO1FBQzdCLE1BQU1OLE9BQU8sSUFBSSxDQUFDTyxPQUFPLElBQ25CQyx3QkFBd0JSLE1BQU0sR0FBRztRQUV2QyxPQUFPUTtJQUNUO0lBRUFDLGdCQUFnQjtRQUNkLE1BQU1DLHNCQUFzQixJQUFJLENBQUNSLGVBQWUsQ0FBQ0ssT0FBTyxJQUNsREksYUFBYUQscUJBQXFCLEdBQUc7UUFFM0MsT0FBT0M7SUFDVDtJQUVBQyxxQkFBcUI7UUFDbkIsTUFBTUMsMkJBQTJCLElBQUksQ0FBQ1Ysb0JBQW9CLENBQUNJLE9BQU8sSUFDNURPLGtCQUFrQkQsMEJBQTBCLEdBQUc7UUFF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
|
|
193
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L3N1YnN0aXR1dGlvbi9yZWZlcmVuY2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBTdWJzdGl0dXRpb24gZnJvbSBcIi4uL3N1YnN0aXR1dGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlUmVmZXJlbmNlU3Vic3RpdHV0aW9uIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyByZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmdGcm9tUmVmZXJlbmNlQW5kTWV0YXZhcmlhYmxlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IGVsaWRlLCBhYmxhdGVzLCBtYW5pZmVzdCwgYXR0ZW1wdHMsIGluc3RhbnRpYXRlLCB1bnNlcmlhbGlzZXMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBicmVha1BvaW50RnJvbUpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBSZWZlcmVuY2VTdWJzdGl0dXRpb24gZXh0ZW5kcyBTdWJzdGl0dXRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRhcmdldFJlZmVyZW5jZSwgcmVwbGFjZW1lbnRSZWZlcmVuY2UpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50YXJnZXRSZWZlcmVuY2UgPSB0YXJnZXRSZWZlcmVuY2U7XG4gICAgdGhpcy5yZXBsYWNlbWVudFJlZmVyZW5jZSA9IHJlcGxhY2VtZW50UmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0VGFyZ2V0UmVmZXJlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRhcmdldFJlZmVyZW5jZTtcbiAgfVxuXG4gIGdldFJlcGxhY2VtZW50UmVmZXJlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLnJlcGxhY2VtZW50UmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gcmVmZXJlbmNlU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZ2V0VGFyZ2V0Tm9kZSgpIHtcbiAgICBjb25zdCB0YXJnZXRSZWZlcmVuY2VOb2RlID0gdGhpcy50YXJnZXRSZWZlcmVuY2UuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHRlcmdldE5vZGUgPSB0YXJnZXRSZWZlcmVuY2VOb2RlOyAvLy9cblxuICAgIHJldHVybiB0ZXJnZXROb2RlO1xuICB9XG5cbiAgZ2V0UmVwbGFjZW1lbnROb2RlKCkge1xuICAgIGNvbnN0IHJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSA9IHRoaXMucmVwbGFjZW1lbnRSZWZlcmVuY2UuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHJlcGxhY2VtZW50Tm9kZSA9IHJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZTsgLy8vXG5cbiAgICByZXR1cm4gcmVwbGFjZW1lbnROb2RlO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlTm9kZSgpIHsgcmV0dXJuIHRoaXMudGFyZ2V0UmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTsgfVxuXG4gIGlzVHJpdmlhbCgpIHtcbiAgICBjb25zdCB0YXJnZXRSZWZlcmVuY2VFcXVhbFRvUmVwbGFjZW1lbnRSZWZlcmVuY2UgPSB0aGlzLnRhcmdldFJlZmVyZW5jZS5pc0VxdWFsVG8odGhpcy5yZXBsYWNlbWVudFJlZmVyZW5jZSksXG4gICAgICAgICAgdHJpdmlhbCA9IHRhcmdldFJlZmVyZW5jZUVxdWFsVG9SZXBsYWNlbWVudFJlZmVyZW5jZTsgLy8vXG5cbiAgICByZXR1cm4gdHJpdmlhbDtcbiAgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7IHJldHVybiB0aGlzLnRhcmdldFJlZmVyZW5jZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7IH1cblxuICBjb21wYXJlUmVmZXJlbmNlKHJlZmVyZW5jZSwgY29udGV4dCkge1xuICAgIGNvbnN0IHJlZmVyZW5jZUVxdWFsVG9SZXBsYWNlbWVudFJlZmVyZW5jZSA9IHRoaXMucmVwbGFjZW1lbnRSZWZlcmVuY2UuaXNFcXVhbFRvKHJlZmVyZW5jZSksXG4gICAgICAgICAgY29tcGFyZWRUb1JlZmVyZW5jZSA9IHJlZmVyZW5jZUVxdWFsVG9SZXBsYWNlbWVudFJlZmVyZW5jZTsgLy8vXG5cbiAgICByZXR1cm4gY29tcGFyZWRUb1JlZmVyZW5jZTtcbiAgfVxuXG4gIGNvbXBhcmVQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG4gICAgY29uc3QgdGFyZ2V0UmVmZXJlbmNlQ29tcGFyZXNUb1BhcmFtZXRlciA9IHRoaXMudGFyZ2V0UmVmZXJlbmNlLmNvbXBhcmVQYXJhbWV0ZXIocGFyYW1ldGVyKSxcbiAgICAgICAgICBjb21wYXJlc1RvUGFyYW1ldGVyID0gdGFyZ2V0UmVmZXJlbmNlQ29tcGFyZXNUb1BhcmFtZXRlcjsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9QYXJhbWV0ZXI7XG4gIH1cblxuICBjb21wYXJlU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbikge1xuICAgIGxldCBzdWJzdGl0dXRpb25Db21wYXJlcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uUmVmZXJlbmNlU3Vic3RpdHV0aW9uID0gUmVmZXJlbmNlU3Vic3RpdHV0aW9uLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHN1YnN0aXR1dGlvbik7XG5cbiAgICBpZiAoc3Vic3RpdHV0aW9uUmVmZXJlbmNlU3Vic3RpdHV0aW9uKSB7XG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlID0gc3Vic3RpdHV0aW9uLmdldE5vZGUoKSxcbiAgICAgICAgICAgIHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUoc3Vic3RpdHV0aW9uTm9kZSk7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICBzdWJzdGl0dXRpb25Db21wYXJlcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbkNvbXBhcmVzO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCkge1xuICAgIGxldCByZWZlcmVuY2VTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgcmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7cmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nfScgcmVmZXJlbmNlIHN1YnN0aXR1dGlvbi4uLmApO1xuXG4gICAgbGV0IHZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdmFsaWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRWYWxpZFN1YnN0aXR1dGlvbihjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgdmFsaWRhdGVzID0gdHJ1ZTtcblxuICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uID0gdmFsaWRTdWJzdGl0dXRpb247ICAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke3JlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZ30nIHJlZmVyZW5jZSBzdWJzdGl0dXRpb24gaXMgYWxyZWFkeSB2YWxpZC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSB0aGlzLmdldEdlbmVyYWxDb250ZXh0KCksXG4gICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSB0aGlzLmdldFNwZWNpZmljQ29udGV4dCgpO1xuXG4gICAgICBhdHRlbXB0cygoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXRSZWZlcmVuY2VWYWxpZGF0ZXMgPSB0aGlzLnZhbGlkYXRlVGFyZ2V0UmVmZXJlbmNlKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIGlmICh0YXJnZXRSZWZlcmVuY2VWYWxpZGF0ZXMpIHtcbiAgICAgICAgICBjb25zdCByZXBsYWNlbWVudFJlZmVyZW5jZVZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGVSZXBsYWNlbWVudFJlZmVyZW5jZShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICAgIGlmIChyZXBsYWNlbWVudFJlZmVyZW5jZVZhbGlkYXRlcykge1xuICAgICAgICAgICAgdmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgdGhpcy5jb21taXQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IHRoaXM7ICAvLy9cblxuICAgICAgICByZWZlcmVuY2VTdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb247ICAvLy9cblxuICAgICAgICBjb250ZXh0LmFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nfScgcmVmZXJlbmNlIHN1YnN0aXR1dGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgdmFsaWRhdGVUYXJnZXRSZWZlcmVuY2UoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCB0YXJnZXRSZWZlcmVuY2VWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dCwgLy8vXG4gICAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7cmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nfScgcmVmZXJlbmNlIHN1YnN0aXR1dGlvbidzIHRhcmdldCByZWZlcmVuY2UuLi5gKTtcblxuICAgIGVsaWRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXRSZWZlcmVuY2UgPSB0aGlzLnRhcmdldFJlZmVyZW5jZS52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgICAgaWYgKHRhcmdldFJlZmVyZW5jZSAhPT0gbnVsbCkge1xuICAgICAgICB0YXJnZXRSZWZlcmVuY2VWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgaWYgKHRhcmdldFJlZmVyZW5jZVZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtyZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmd9JyByZWZlcmVuY2Ugc3Vic3RpdHV0aW9uJ3MgdGFyZ2V0IHJlZmVyZW5jZS4uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRSZWZlcmVuY2VWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVJlcGxhY2VtZW50UmVmZXJlbmNlKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBsZXQgcmVwbGFjZW1lbnRSZWZlcmVuY2VWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICByZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtyZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmd9JyByZWZlcmVuY2Ugc3Vic3RpdHV0aW9uJ3MgcmVwbGFjZW1lbnQgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICBlbGlkZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgcmVwbGFjZW1lbnRSZWZlcmVuY2UgPSB0aGlzLnJlcGxhY2VtZW50UmVmZXJlbmNlLnZhbGlkYXRlKGNvbnRleHQpO1xuXG4gICAgICBpZiAocmVwbGFjZW1lbnRSZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2VWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgaWYgKHJlcGxhY2VtZW50UmVmZXJlbmNlVmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3JlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZ30nIHJlZmVyZW5jZSBzdWJzdGl0dXRpb24ncyByZXBsYWNlbWVudCByZWZlcmVuY2UuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcGxhY2VtZW50UmVmZXJlbmNlVmFsaWRhdGVzO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlJlZmVyZW5jZVN1YnN0aXR1dGlvblwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IHJlZmVyZW5jZVN1YnN0aXR1dGlvbm4gPSBudWxsO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBqc29uO1xuXG4gICAgaWYgKHRoaXMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgdW5zZXJpYWxpc2VzKChqc29uLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSA9IGluc3RhbnRpYXRlUmVmZXJlbmNlU3Vic3RpdHV0aW9uKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgICAgbm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIC8vL1xuICAgICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICAgICAgdGFyZ2V0UmVmZXJlbmNlID0gdGFyZ2V0UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpLFxuICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlID0gcmVwbGFjZW1lbnRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICAgICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgICAgICAgICBzcGVjaWZpY0NvbnRleHRcbiAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9ubiA9IG5ldyBSZWZlcmVuY2VTdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGFyZ2V0UmVmZXJlbmNlLCByZXBsYWNlbWVudFJlZmVyZW5jZSk7XG4gICAgICAgIH0sIGpzb24sIGNvbnRleHQpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZmVyZW5jZVN1YnN0aXR1dGlvbm47XG4gIH1cblxuICBzdGF0aWMgZnJvbUFzc3VtcHRpb25BbmRDb25zdHJhaW50KGFzc3VtcHRpb24sIGNvbnN0cmFpbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBsZXQgcmVmZXJlbmNlU3Vic3RpdHV0aW9uO1xuXG4gICAgYWJsYXRlcygoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgaW5zdGFudGlhdGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBtYW5pZmVzdCgoZ2VuZXJhbENvbnRleHQpID0+IHtcbiAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGUgPSBhc3N1bXB0aW9uLmdldE1ldGF2YXJpYWJsZSgpLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZSA9IGNvbnN0cmFpbnQuZ2V0UmVmZXJlbmNlKCksXG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVJlZmVyZW5jZUFuZE1ldGF2YXJpYWJsZShyZWZlcmVuY2UsIG1ldGF2YXJpYWJsZSksXG4gICAgICAgICAgICAgICAgc3RyaW5nID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nLCAgLy8vXG4gICAgICAgICAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICAgIHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUgPSBpbnN0YW50aWF0ZVJlZmVyZW5jZVN1YnN0aXR1dGlvbihzdHJpbmcsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gICAgICAgIH0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIHJldHVybiByZWZlcmVuY2VTdWJzdGl0dXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVJlZmVyZW5jZUFuZE1ldGF2YXJpYWJsZShyZWZlcmVuY2UsIG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCByZWZlcmVuY2VTdWJzdGl0dXRpb247XG5cbiAgICBhYmxhdGVzKChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICBpbnN0YW50aWF0ZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIG1hbmlmZXN0KChnZW5lcmFsQ29udGV4dCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZyA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21SZWZlcmVuY2VBbmRNZXRhdmFyaWFibGUocmVmZXJlbmNlLCBtZXRhdmFyaWFibGUpLFxuICAgICAgICAgICAgICAgIHN0cmluZyA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZywgIC8vL1xuICAgICAgICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICAgICAgICByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlID0gaW5zdGFudGlhdGVSZWZlcmVuY2VTdWJzdGl0dXRpb24oc3RyaW5nLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJlZmVyZW5jZVN1YnN0aXR1dGlvbiA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgICAgICB9LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlU3Vic3RpdHV0aW9uO1xuICB9XG59KTtcblxuZnVuY3Rpb24gdGFyZ2V0UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpIHtcbiAgY29uc3QgdGFyZ2V0UmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICB0YXJnZXRSZWZlcmVuY2UgPSBnZW5lcmFsQ29udGV4dC5maW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlKHRhcmdldFJlZmVyZW5jZU5vZGUpO1xuXG4gIHJldHVybiB0YXJnZXRSZWZlcmVuY2U7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlID0gc3BlY2lmaWNDb250ZXh0LmZpbmRSZWZlcmVuY2VCeVJlZmVyZW5jZU5vZGUocmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlKTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRSZWZlcmVuY2U7XG59XG4iXSwibmFtZXMiOlsiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIlJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsIlN1YnN0aXR1dGlvbiIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInRhcmdldFJlZmVyZW5jZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlIiwiZ2V0VGFyZ2V0UmVmZXJlbmNlIiwiZ2V0UmVwbGFjZW1lbnRSZWZlcmVuY2UiLCJnZXRSZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwiZ2V0Tm9kZSIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsImdldFRhcmdldE5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VOb2RlIiwidGVyZ2V0Tm9kZSIsImdldFJlcGxhY2VtZW50Tm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSIsInJlcGxhY2VtZW50Tm9kZSIsImdldE1ldGF2YXJpYWJsZU5vZGUiLCJpc1RyaXZpYWwiLCJ0YXJnZXRSZWZlcmVuY2VFcXVhbFRvUmVwbGFjZW1lbnRSZWZlcmVuY2UiLCJpc0VxdWFsVG8iLCJ0cml2aWFsIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsImNvbXBhcmVSZWZlcmVuY2UiLCJyZWZlcmVuY2UiLCJyZWZlcmVuY2VFcXVhbFRvUmVwbGFjZW1lbnRSZWZlcmVuY2UiLCJjb21wYXJlZFRvUmVmZXJlbmNlIiwiY29tcGFyZVBhcmFtZXRlciIsInBhcmFtZXRlciIsInRhcmdldFJlZmVyZW5jZUNvbXBhcmVzVG9QYXJhbWV0ZXIiLCJjb21wYXJlc1RvUGFyYW1ldGVyIiwiY29tcGFyZVN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbkNvbXBhcmVzIiwic3Vic3RpdHV0aW9uUmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwicHJvdG90eXBlIiwiaXNQcm90b3R5cGVPZiIsInN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsInZhbGlkYXRlIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YWxpZGF0ZXMiLCJ2YWxpZFN1YnN0aXR1dGlvbiIsImZpbmRWYWxpZFN1YnN0aXR1dGlvbiIsImRlYnVnIiwiZ2VuZXJhbENvbnRleHQiLCJnZXRHZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsImdldFNwZWNpZmljQ29udGV4dCIsImF0dGVtcHRzIiwidGFyZ2V0UmVmZXJlbmNlVmFsaWRhdGVzIiwidmFsaWRhdGVUYXJnZXRSZWZlcmVuY2UiLCJyZXBsYWNlbWVudFJlZmVyZW5jZVZhbGlkYXRlcyIsInZhbGlkYXRlUmVwbGFjZW1lbnRSZWZlcmVuY2UiLCJjb21taXQiLCJhZGRTdWJzdGl0dXRpb24iLCJlbGlkZSIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25uIiwiaW5zdGFudGlhdGUiLCJ1bnNlcmlhbGlzZXMiLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwiaW5zdGFudGlhdGVSZWZlcmVuY2VTdWJzdGl0dXRpb24iLCJ0YXJnZXRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJjb250ZXh0cyIsImZyb21Bc3N1bXB0aW9uQW5kQ29uc3RyYWludCIsImFzc3VtcHRpb24iLCJjb25zdHJhaW50IiwiYWJsYXRlcyIsIm1hbmlmZXN0IiwibWV0YXZhcmlhYmxlIiwiZ2V0TWV0YXZhcmlhYmxlIiwiZ2V0UmVmZXJlbmNlIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVJlZmVyZW5jZUFuZE1ldGF2YXJpYWJsZSIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwiZnJvbVJlZmVyZW5jZUFuZE1ldGF2YXJpYWJsZSIsImdldFRhcmdldFJlZmVyZW5jZU5vZGUiLCJmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlIiwiZ2V0UmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFjQTs7O2VBQUE7OztnQ0Fab0M7cUVBRVg7MEJBRUY7NkJBQzBCO3lCQUNrQjt3QkFDSzt5QkFDTTs7Ozs7O0FBRTlFLE1BQU0sRUFBRUEsa0JBQWtCLEVBQUUsR0FBR0MsbUNBQW1CO01BRWxELFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsOEJBQThCQyxxQkFBWTtJQUNwRSxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLGVBQWUsRUFBRUMsb0JBQW9CLENBQUU7UUFDcEYsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLGVBQWUsR0FBR0E7UUFDdkIsSUFBSSxDQUFDQyxvQkFBb0IsR0FBR0E7SUFDOUI7SUFFQUMscUJBQXFCO1FBQ25CLE9BQU8sSUFBSSxDQUFDRixlQUFlO0lBQzdCO0lBRUFHLDBCQUEwQjtRQUN4QixPQUFPLElBQUksQ0FBQ0Ysb0JBQW9CO0lBQ2xDO0lBRUFHLCtCQUErQjtRQUM3QixNQUFNTixPQUFPLElBQUksQ0FBQ08sT0FBTyxJQUNuQkMsd0JBQXdCUixNQUFNLEdBQUc7UUFFdkMsT0FBT1E7SUFDVDtJQUVBQyxnQkFBZ0I7UUFDZCxNQUFNQyxzQkFBc0IsSUFBSSxDQUFDUixlQUFlLENBQUNLLE9BQU8sSUFDbERJLGFBQWFELHFCQUFxQixHQUFHO1FBRTNDLE9BQU9DO0lBQ1Q7SUFFQUMscUJBQXFCO1FBQ25CLE1BQU1DLDJCQUEyQixJ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
|