occam-verify-cli 1.0.508 → 1.0.511
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/ephemeral.js +1 -15
- package/lib/context/file/nominal.js +903 -0
- package/lib/context/liminal.js +1 -15
- package/lib/context/literal.js +1 -15
- package/lib/context/nominal.js +1 -15
- package/lib/context/release.js +670 -0
- package/lib/context/scoped.js +1 -15
- package/lib/context/synthetic.js +1 -15
- package/lib/element/type.js +4 -4
- package/lib/node/assumption.js +2 -2
- package/lib/node/document.js +3 -3
- package/lib/utilities/element.js +3 -3
- package/lib/utilities/string.js +3 -3
- package/package.json +3 -3
- package/src/context/ephemeral.js +0 -10
- package/src/context/{file.js → file/nominal.js} +23 -154
- package/src/context/liminal.js +0 -10
- package/src/context/literal.js +0 -10
- package/src/context/nominal.js +0 -12
- package/src/context/release.js +647 -0
- package/src/context/scoped.js +0 -10
- package/src/context/synthetic.js +0 -10
- package/src/element/type.js +1 -1
- package/src/node/assumption.js +1 -1
- package/src/node/document.js +1 -1
- package/src/utilities/element.js +1 -1
- package/src/utilities/string.js +1 -1
- package/lib/context/file.js +0 -1007
package/lib/context/file.js
DELETED
|
@@ -1,1007 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "default", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return FileContext;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _necessary = require("necessary");
|
|
12
|
-
var _occamfurtle = require("occam-furtle");
|
|
13
|
-
var _elements = /*#__PURE__*/ _interop_require_default(require("../elements"));
|
|
14
|
-
var _constants = require("../constants");
|
|
15
|
-
var _verify = require("../process/verify");
|
|
16
|
-
var _types = require("../types");
|
|
17
|
-
var _json = require("../utilities/json");
|
|
18
|
-
function _array_like_to_array(arr, len) {
|
|
19
|
-
if (len == null || len > arr.length) len = arr.length;
|
|
20
|
-
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
21
|
-
return arr2;
|
|
22
|
-
}
|
|
23
|
-
function _array_with_holes(arr) {
|
|
24
|
-
if (Array.isArray(arr)) return arr;
|
|
25
|
-
}
|
|
26
|
-
function _array_without_holes(arr) {
|
|
27
|
-
if (Array.isArray(arr)) return _array_like_to_array(arr);
|
|
28
|
-
}
|
|
29
|
-
function _class_call_check(instance, Constructor) {
|
|
30
|
-
if (!(instance instanceof Constructor)) {
|
|
31
|
-
throw new TypeError("Cannot call a class as a function");
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
function _defineProperties(target, props) {
|
|
35
|
-
for(var i = 0; i < props.length; i++){
|
|
36
|
-
var descriptor = props[i];
|
|
37
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
38
|
-
descriptor.configurable = true;
|
|
39
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
40
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
function _create_class(Constructor, protoProps, staticProps) {
|
|
44
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
45
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
46
|
-
return Constructor;
|
|
47
|
-
}
|
|
48
|
-
function _interop_require_default(obj) {
|
|
49
|
-
return obj && obj.__esModule ? obj : {
|
|
50
|
-
default: obj
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
function _iterable_to_array(iter) {
|
|
54
|
-
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
55
|
-
}
|
|
56
|
-
function _iterable_to_array_limit(arr, i) {
|
|
57
|
-
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
58
|
-
if (_i == null) return;
|
|
59
|
-
var _arr = [];
|
|
60
|
-
var _n = true;
|
|
61
|
-
var _d = false;
|
|
62
|
-
var _s, _e;
|
|
63
|
-
try {
|
|
64
|
-
for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
|
|
65
|
-
_arr.push(_s.value);
|
|
66
|
-
if (i && _arr.length === i) break;
|
|
67
|
-
}
|
|
68
|
-
} catch (err) {
|
|
69
|
-
_d = true;
|
|
70
|
-
_e = err;
|
|
71
|
-
} finally{
|
|
72
|
-
try {
|
|
73
|
-
if (!_n && _i["return"] != null) _i["return"]();
|
|
74
|
-
} finally{
|
|
75
|
-
if (_d) throw _e;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
return _arr;
|
|
79
|
-
}
|
|
80
|
-
function _non_iterable_rest() {
|
|
81
|
-
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
82
|
-
}
|
|
83
|
-
function _non_iterable_spread() {
|
|
84
|
-
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
85
|
-
}
|
|
86
|
-
function _sliced_to_array(arr, i) {
|
|
87
|
-
return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
|
|
88
|
-
}
|
|
89
|
-
function _to_consumable_array(arr) {
|
|
90
|
-
return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
|
|
91
|
-
}
|
|
92
|
-
function _unsupported_iterable_to_array(o, minLen) {
|
|
93
|
-
if (!o) return;
|
|
94
|
-
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
95
|
-
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
96
|
-
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
97
|
-
if (n === "Map" || n === "Set") return Array.from(n);
|
|
98
|
-
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
99
|
-
}
|
|
100
|
-
var push = _necessary.arrayUtilities.push, filter = _necessary.arrayUtilities.filter, nodeAsString = _occamfurtle.nodeUtilities.nodeAsString, nodesAsString = _occamfurtle.nodeUtilities.nodesAsString, chainContext = _occamfurtle.contextUtilities.chainContext, lineIndexFromNodeAndTokens = _occamfurtle.contextUtilities.lineIndexFromNodeAndTokens, _LEVELS = _sliced_to_array(_constants.LEVELS, 5), TRACE_LEVEL = _LEVELS[0], DEBUG_LEVEL = _LEVELS[1], INFO_LEVEL = _LEVELS[2], WARNING_LEVEL = _LEVELS[3], ERROR_LEVEL = _LEVELS[4];
|
|
101
|
-
var FileContext = /*#__PURE__*/ function() {
|
|
102
|
-
function FileContext(context1, filePath, lineIndex, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables) {
|
|
103
|
-
_class_call_check(this, FileContext);
|
|
104
|
-
this.context = context1;
|
|
105
|
-
this.filePath = filePath;
|
|
106
|
-
this.lineIndex = lineIndex;
|
|
107
|
-
this.tokens = tokens;
|
|
108
|
-
this.node = node;
|
|
109
|
-
this.types = types;
|
|
110
|
-
this.rules = rules;
|
|
111
|
-
this.axioms = axioms;
|
|
112
|
-
this.lemmas = lemmas;
|
|
113
|
-
this.theorems = theorems;
|
|
114
|
-
this.variables = variables;
|
|
115
|
-
this.metaLemmas = metaLemmas;
|
|
116
|
-
this.conjectures = conjectures;
|
|
117
|
-
this.combinators = combinators;
|
|
118
|
-
this.typePrefixes = typePrefixes;
|
|
119
|
-
this.constructors = constructors;
|
|
120
|
-
this.metatheorems = metatheorems;
|
|
121
|
-
this.metavariables = metavariables;
|
|
122
|
-
return chainContext(this);
|
|
123
|
-
}
|
|
124
|
-
_create_class(FileContext, [
|
|
125
|
-
{
|
|
126
|
-
key: "getContext",
|
|
127
|
-
value: function getContext() {
|
|
128
|
-
return this.context;
|
|
129
|
-
}
|
|
130
|
-
},
|
|
131
|
-
{
|
|
132
|
-
key: "getFilePath",
|
|
133
|
-
value: function getFilePath() {
|
|
134
|
-
return this.filePath;
|
|
135
|
-
}
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
key: "getLineIndex",
|
|
139
|
-
value: function getLineIndex() {
|
|
140
|
-
return this.lineIndex;
|
|
141
|
-
}
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
key: "getTokens",
|
|
145
|
-
value: function getTokens() {
|
|
146
|
-
return this.tokens;
|
|
147
|
-
}
|
|
148
|
-
},
|
|
149
|
-
{
|
|
150
|
-
key: "getNode",
|
|
151
|
-
value: function getNode() {
|
|
152
|
-
return this.node;
|
|
153
|
-
}
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
key: "getJudgements",
|
|
157
|
-
value: function getJudgements() {
|
|
158
|
-
var judgements = [];
|
|
159
|
-
return judgements;
|
|
160
|
-
}
|
|
161
|
-
},
|
|
162
|
-
{
|
|
163
|
-
key: "getEquivalences",
|
|
164
|
-
value: function getEquivalences() {
|
|
165
|
-
var Equivalences = _elements.default.Equivalences, equivalences = Equivalences.fromNothing(context);
|
|
166
|
-
return equivalences;
|
|
167
|
-
}
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
key: "getSubproofOrProofAssertions",
|
|
171
|
-
value: function getSubproofOrProofAssertions() {
|
|
172
|
-
var subproofOrProofAssertions = [];
|
|
173
|
-
return subproofOrProofAssertions;
|
|
174
|
-
}
|
|
175
|
-
},
|
|
176
|
-
{
|
|
177
|
-
key: "getLabels",
|
|
178
|
-
value: function getLabels() {
|
|
179
|
-
var includeRelease = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
180
|
-
var labels = [];
|
|
181
|
-
if (includeRelease) {
|
|
182
|
-
var releaseContextLabels = this.context.getLabels();
|
|
183
|
-
push(labels, releaseContextLabels);
|
|
184
|
-
} else {
|
|
185
|
-
this.rules.forEach(function(rule) {
|
|
186
|
-
var ruleLabels = rule.getLabels();
|
|
187
|
-
push(labels, ruleLabels);
|
|
188
|
-
});
|
|
189
|
-
this.axioms.forEach(function(axiom) {
|
|
190
|
-
var axiomLabels = axiom.getLabels();
|
|
191
|
-
push(labels, axiomLabels);
|
|
192
|
-
});
|
|
193
|
-
this.lemmas.forEach(function(lemma) {
|
|
194
|
-
var lemmaLabels = lemma.getLabels();
|
|
195
|
-
push(labels, lemmaLabels);
|
|
196
|
-
});
|
|
197
|
-
this.theorems.forEach(function(theorem) {
|
|
198
|
-
var theoremLabels = theorem.getLabels();
|
|
199
|
-
push(labels, theoremLabels);
|
|
200
|
-
});
|
|
201
|
-
this.conjectures.forEach(function(conjecture) {
|
|
202
|
-
var conjectureLabels = conjecture.getLabels();
|
|
203
|
-
push(labels, conjectureLabels);
|
|
204
|
-
});
|
|
205
|
-
this.metatheorems.forEach(function(metatheorem) {
|
|
206
|
-
var metatheoremLabel = metatheorem.getLabel();
|
|
207
|
-
labels.push(metatheoremLabel);
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
return labels;
|
|
211
|
-
}
|
|
212
|
-
},
|
|
213
|
-
{
|
|
214
|
-
key: "getTypes",
|
|
215
|
-
value: function getTypes() {
|
|
216
|
-
var includeRelease = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true, includeDependencies = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
|
|
217
|
-
var types = includeRelease ? this.context.getTypes(includeDependencies) : this.types;
|
|
218
|
-
return types;
|
|
219
|
-
}
|
|
220
|
-
},
|
|
221
|
-
{
|
|
222
|
-
key: "getRules",
|
|
223
|
-
value: function getRules() {
|
|
224
|
-
var includeRelease = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
225
|
-
var rules = includeRelease ? this.context.getRules() : this.rules;
|
|
226
|
-
return rules;
|
|
227
|
-
}
|
|
228
|
-
},
|
|
229
|
-
{
|
|
230
|
-
key: "getAxioms",
|
|
231
|
-
value: function getAxioms() {
|
|
232
|
-
var includeRelease = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
233
|
-
var axioms = includeRelease ? this.context.getAxioms() : this.axioms;
|
|
234
|
-
return axioms;
|
|
235
|
-
}
|
|
236
|
-
},
|
|
237
|
-
{
|
|
238
|
-
key: "getLemmas",
|
|
239
|
-
value: function getLemmas() {
|
|
240
|
-
var includeRelease = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
241
|
-
var lemmas = includeRelease ? this.context.getLemmas() : this.lemmas;
|
|
242
|
-
return lemmas;
|
|
243
|
-
}
|
|
244
|
-
},
|
|
245
|
-
{
|
|
246
|
-
key: "getTheorems",
|
|
247
|
-
value: function getTheorems() {
|
|
248
|
-
var includeRelease = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
249
|
-
var theorems = includeRelease ? this.context.getTheorems() : this.theorems;
|
|
250
|
-
return theorems;
|
|
251
|
-
}
|
|
252
|
-
},
|
|
253
|
-
{
|
|
254
|
-
key: "getVariables",
|
|
255
|
-
value: function getVariables() {
|
|
256
|
-
var includeRelease = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
257
|
-
return this.variables;
|
|
258
|
-
}
|
|
259
|
-
},
|
|
260
|
-
{
|
|
261
|
-
key: "getProcedures",
|
|
262
|
-
value: function getProcedures() {
|
|
263
|
-
var includeRelease = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
264
|
-
var procedures = includeRelease ? this.context.getProcedures() : null; ///
|
|
265
|
-
return procedures;
|
|
266
|
-
}
|
|
267
|
-
},
|
|
268
|
-
{
|
|
269
|
-
key: "getMetaLemmas",
|
|
270
|
-
value: function getMetaLemmas() {
|
|
271
|
-
var includeRelease = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
272
|
-
var metaLemmas = includeRelease ? this.context.getMetaLemmas() : this.metaLemmas;
|
|
273
|
-
return metaLemmas;
|
|
274
|
-
}
|
|
275
|
-
},
|
|
276
|
-
{
|
|
277
|
-
key: "getConjectures",
|
|
278
|
-
value: function getConjectures() {
|
|
279
|
-
var includeRelease = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
280
|
-
var conjectures = includeRelease ? this.context.getConjectures() : this.conjectures;
|
|
281
|
-
return conjectures;
|
|
282
|
-
}
|
|
283
|
-
},
|
|
284
|
-
{
|
|
285
|
-
key: "getCombinators",
|
|
286
|
-
value: function getCombinators() {
|
|
287
|
-
var includeRelease = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
288
|
-
var combinators = includeRelease ? this.context.getCombinators() : this.combinators;
|
|
289
|
-
return combinators;
|
|
290
|
-
}
|
|
291
|
-
},
|
|
292
|
-
{
|
|
293
|
-
key: "getTypePrefixes",
|
|
294
|
-
value: function getTypePrefixes() {
|
|
295
|
-
var includeRelease = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
296
|
-
var typePrefixes = includeRelease ? this.context.getTypePrefixes() : this.typePrefixes;
|
|
297
|
-
return typePrefixes;
|
|
298
|
-
}
|
|
299
|
-
},
|
|
300
|
-
{
|
|
301
|
-
key: "getConstructors",
|
|
302
|
-
value: function getConstructors() {
|
|
303
|
-
var includeRelease = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
304
|
-
var constructors = includeRelease ? this.context.getConstructors() : this.constructors;
|
|
305
|
-
return constructors;
|
|
306
|
-
}
|
|
307
|
-
},
|
|
308
|
-
{
|
|
309
|
-
key: "getMetatheorems",
|
|
310
|
-
value: function getMetatheorems() {
|
|
311
|
-
var includeRelease = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
312
|
-
var metatheorems = includeRelease ? this.context.getMetatheorems() : this.metatheorems;
|
|
313
|
-
return metatheorems;
|
|
314
|
-
}
|
|
315
|
-
},
|
|
316
|
-
{
|
|
317
|
-
key: "getMetavariables",
|
|
318
|
-
value: function getMetavariables() {
|
|
319
|
-
var includeRelease = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
320
|
-
return this.metavariables;
|
|
321
|
-
}
|
|
322
|
-
},
|
|
323
|
-
{
|
|
324
|
-
key: "addType",
|
|
325
|
-
value: function addType(type) {
|
|
326
|
-
this.types.push(type);
|
|
327
|
-
}
|
|
328
|
-
},
|
|
329
|
-
{
|
|
330
|
-
key: "addRule",
|
|
331
|
-
value: function addRule(rule) {
|
|
332
|
-
this.rules.push(rule);
|
|
333
|
-
}
|
|
334
|
-
},
|
|
335
|
-
{
|
|
336
|
-
key: "addAxiom",
|
|
337
|
-
value: function addAxiom(axiom) {
|
|
338
|
-
this.axioms.push(axiom);
|
|
339
|
-
}
|
|
340
|
-
},
|
|
341
|
-
{
|
|
342
|
-
key: "addLemma",
|
|
343
|
-
value: function addLemma(lemma) {
|
|
344
|
-
this.lemmas.push(lemma);
|
|
345
|
-
}
|
|
346
|
-
},
|
|
347
|
-
{
|
|
348
|
-
key: "addTheorem",
|
|
349
|
-
value: function addTheorem(theorem) {
|
|
350
|
-
this.theorems.push(theorem);
|
|
351
|
-
}
|
|
352
|
-
},
|
|
353
|
-
{
|
|
354
|
-
key: "addVariable",
|
|
355
|
-
value: function addVariable(variable) {
|
|
356
|
-
this.variables.push(variable);
|
|
357
|
-
}
|
|
358
|
-
},
|
|
359
|
-
{
|
|
360
|
-
key: "addMetaLemma",
|
|
361
|
-
value: function addMetaLemma(metaLemma) {
|
|
362
|
-
this.metaLemmas.push(metaLemma);
|
|
363
|
-
}
|
|
364
|
-
},
|
|
365
|
-
{
|
|
366
|
-
key: "addConjecture",
|
|
367
|
-
value: function addConjecture(conjecture) {
|
|
368
|
-
this.conjectures.push(conjecture);
|
|
369
|
-
}
|
|
370
|
-
},
|
|
371
|
-
{
|
|
372
|
-
key: "addCombinator",
|
|
373
|
-
value: function addCombinator(combinator) {
|
|
374
|
-
this.combinators.push(combinator);
|
|
375
|
-
}
|
|
376
|
-
},
|
|
377
|
-
{
|
|
378
|
-
key: "addTypePrefix",
|
|
379
|
-
value: function addTypePrefix(typePrefix) {
|
|
380
|
-
this.typePrefixes.push(typePrefix);
|
|
381
|
-
}
|
|
382
|
-
},
|
|
383
|
-
{
|
|
384
|
-
key: "addConstructor",
|
|
385
|
-
value: function addConstructor(constructor) {
|
|
386
|
-
this.constructors.push(constructor);
|
|
387
|
-
}
|
|
388
|
-
},
|
|
389
|
-
{
|
|
390
|
-
key: "addMetatheorem",
|
|
391
|
-
value: function addMetatheorem(metatheorem) {
|
|
392
|
-
this.metatheorems.push(metatheorem);
|
|
393
|
-
}
|
|
394
|
-
},
|
|
395
|
-
{
|
|
396
|
-
key: "addMetavariable",
|
|
397
|
-
value: function addMetavariable(metavariable) {
|
|
398
|
-
this.metavariables.push(metavariable);
|
|
399
|
-
}
|
|
400
|
-
},
|
|
401
|
-
{
|
|
402
|
-
key: "findLabelByReference",
|
|
403
|
-
value: function findLabelByReference(reference, context1) {
|
|
404
|
-
var labels = this.getLabels(), label = labels.find(function(label) {
|
|
405
|
-
var metavariableUnifies = label.unifyReference(reference, context1);
|
|
406
|
-
if (metavariableUnifies) {
|
|
407
|
-
return true;
|
|
408
|
-
}
|
|
409
|
-
}) || null;
|
|
410
|
-
return label;
|
|
411
|
-
}
|
|
412
|
-
},
|
|
413
|
-
{
|
|
414
|
-
key: "findMetaLemmaByReference",
|
|
415
|
-
value: function findMetaLemmaByReference(reference) {
|
|
416
|
-
var metaLemmas = this.getMetaLemmas(), metaLemma = metaLemmas.find(function(metaLemma) {
|
|
417
|
-
var metaLemmaComparesToReference = metaLemma.compareReference(reference);
|
|
418
|
-
if (metaLemmaComparesToReference) {
|
|
419
|
-
return true;
|
|
420
|
-
}
|
|
421
|
-
}) || null;
|
|
422
|
-
return metaLemma;
|
|
423
|
-
}
|
|
424
|
-
},
|
|
425
|
-
{
|
|
426
|
-
key: "findMetatheoremByReference",
|
|
427
|
-
value: function findMetatheoremByReference(reference) {
|
|
428
|
-
var metatheorems = this.getMetatheorems(), metatheorem = metatheorems.find(function(metatheorem) {
|
|
429
|
-
var metatheoremComparesToReference = metatheorem.compareReference(reference);
|
|
430
|
-
if (metatheoremComparesToReference) {
|
|
431
|
-
return true;
|
|
432
|
-
}
|
|
433
|
-
}) || null;
|
|
434
|
-
return metatheorem;
|
|
435
|
-
}
|
|
436
|
-
},
|
|
437
|
-
{
|
|
438
|
-
key: "findRuleByReference",
|
|
439
|
-
value: function findRuleByReference(reference) {
|
|
440
|
-
var rules = this.getRules(), metavariableName = reference.getMetavariableName(), rule = rules.find(function(rule) {
|
|
441
|
-
var ruleComparesToMetavariableName = rule.compareMetavariableName(metavariableName);
|
|
442
|
-
if (ruleComparesToMetavariableName) {
|
|
443
|
-
return true;
|
|
444
|
-
}
|
|
445
|
-
}) || null;
|
|
446
|
-
return rule;
|
|
447
|
-
}
|
|
448
|
-
},
|
|
449
|
-
{
|
|
450
|
-
key: "findAxiomByReference",
|
|
451
|
-
value: function findAxiomByReference(reference) {
|
|
452
|
-
var axioms = this.getAxioms(), metavariableName = reference.getMetavariableName(), axiom = axioms.find(function(axiom) {
|
|
453
|
-
var axiomComparesToMetavariableName = axiom.compareMetavariableName(metavariableName);
|
|
454
|
-
if (axiomComparesToMetavariableName) {
|
|
455
|
-
return true;
|
|
456
|
-
}
|
|
457
|
-
}) || null;
|
|
458
|
-
return axiom;
|
|
459
|
-
}
|
|
460
|
-
},
|
|
461
|
-
{
|
|
462
|
-
key: "findLemmaByReference",
|
|
463
|
-
value: function findLemmaByReference(reference) {
|
|
464
|
-
var lemmas = this.getLemmas(), metavariableName = reference.getMetavariableName(), lemma = lemmas.find(function(lemma) {
|
|
465
|
-
var lemmaComparesToMetavariableName = lemma.compareMetavariableName(metavariableName);
|
|
466
|
-
if (lemmaComparesToMetavariableName) {
|
|
467
|
-
return true;
|
|
468
|
-
}
|
|
469
|
-
}) || null;
|
|
470
|
-
return lemma;
|
|
471
|
-
}
|
|
472
|
-
},
|
|
473
|
-
{
|
|
474
|
-
key: "findTheoremByReference",
|
|
475
|
-
value: function findTheoremByReference(reference) {
|
|
476
|
-
var theorems = this.getTheorems(), metavariableName = reference.getMetavariableName(), theorem = theorems.find(function(theorem) {
|
|
477
|
-
var theoremComparesToMetavariableName = theorem.compareMetavariableName(metavariableName);
|
|
478
|
-
if (theoremComparesToMetavariableName) {
|
|
479
|
-
return true;
|
|
480
|
-
}
|
|
481
|
-
}) || null;
|
|
482
|
-
return theorem;
|
|
483
|
-
}
|
|
484
|
-
},
|
|
485
|
-
{
|
|
486
|
-
key: "findProcedureByName",
|
|
487
|
-
value: function findProcedureByName(name) {
|
|
488
|
-
var procedures = this.getProcedures(), procedure = procedures.find(function(procedure) {
|
|
489
|
-
var nameMatches = procedure.matchName(name);
|
|
490
|
-
if (nameMatches) {
|
|
491
|
-
return true;
|
|
492
|
-
}
|
|
493
|
-
}) || null;
|
|
494
|
-
return procedure;
|
|
495
|
-
}
|
|
496
|
-
},
|
|
497
|
-
{
|
|
498
|
-
key: "findConjectureByReference",
|
|
499
|
-
value: function findConjectureByReference(reference) {
|
|
500
|
-
var conjectures = this.getConjectures(), metavariableName = reference.getMetavariableName(), conjecture = conjectures.find(function(conjecture) {
|
|
501
|
-
var conjectureComparesToMetavariableName = conjecture.compareMetavariableName(metavariableName);
|
|
502
|
-
if (conjectureComparesToMetavariableName) {
|
|
503
|
-
return true;
|
|
504
|
-
}
|
|
505
|
-
}) || null;
|
|
506
|
-
return conjecture;
|
|
507
|
-
}
|
|
508
|
-
},
|
|
509
|
-
{
|
|
510
|
-
key: "findMetaLemmasByReference",
|
|
511
|
-
value: function findMetaLemmasByReference(reference) {
|
|
512
|
-
var _this = this;
|
|
513
|
-
var metaLemmas = this.getMetaLemmas();
|
|
514
|
-
filter(metaLemmas, function(metaLemma) {
|
|
515
|
-
var context1 = _this, topLevelMetaAssertion = metaLemma, topLevelMetaAssertionUnifies = reference.unifyTopLevelMetaAssertion(topLevelMetaAssertion, context1);
|
|
516
|
-
if (topLevelMetaAssertionUnifies) {
|
|
517
|
-
return true;
|
|
518
|
-
}
|
|
519
|
-
});
|
|
520
|
-
return metaLemmas;
|
|
521
|
-
}
|
|
522
|
-
},
|
|
523
|
-
{
|
|
524
|
-
key: "findMetatheoremsByReference",
|
|
525
|
-
value: function findMetatheoremsByReference(reference) {
|
|
526
|
-
var _this = this;
|
|
527
|
-
var metatheorems = this.getMetatheorems();
|
|
528
|
-
filter(metatheorems, function(metatheorem) {
|
|
529
|
-
var context1 = _this, topLevelMetaAssertion = metatheorem, topLevelMetaAssertionUnifies = reference.unifyTopLevelMetaAssertion(topLevelMetaAssertion, context1);
|
|
530
|
-
if (topLevelMetaAssertionUnifies) {
|
|
531
|
-
return true;
|
|
532
|
-
}
|
|
533
|
-
});
|
|
534
|
-
return metatheorems;
|
|
535
|
-
}
|
|
536
|
-
},
|
|
537
|
-
{
|
|
538
|
-
key: "findTopLevelMetaAssertionByReference",
|
|
539
|
-
value: function findTopLevelMetaAssertionByReference(reference) {
|
|
540
|
-
var metaLemma = this.findMetaLemmaByReference(reference), metatheorem = this.findMetatheoremByReference(reference), topLevelMetaAssertion = metaLemma || metatheorem; ///
|
|
541
|
-
return topLevelMetaAssertion;
|
|
542
|
-
}
|
|
543
|
-
},
|
|
544
|
-
{
|
|
545
|
-
key: "findTopLevelMetaAssertionsByReference",
|
|
546
|
-
value: function findTopLevelMetaAssertionsByReference(reference) {
|
|
547
|
-
var metaLemmas = this.findMetaLemmasByReference(reference), metatheorems = this.findMetatheoremsByReference(reference), topLevelMetaAssertions = _to_consumable_array(metaLemmas).concat(_to_consumable_array(metatheorems));
|
|
548
|
-
return topLevelMetaAssertions;
|
|
549
|
-
}
|
|
550
|
-
},
|
|
551
|
-
{
|
|
552
|
-
key: "findTopLevelAssertionByReference",
|
|
553
|
-
value: function findTopLevelAssertionByReference(reference) {
|
|
554
|
-
var axiom = this.findAxiomByReference(reference), lemma = this.findLemmaByReference(reference), theorem = this.findTheoremByReference(reference), conjecture = this.findConjectureByReference(reference), topLevelAssertion = axiom || lemma || theorem || conjecture;
|
|
555
|
-
return topLevelAssertion;
|
|
556
|
-
}
|
|
557
|
-
},
|
|
558
|
-
{
|
|
559
|
-
key: "findMetavariable",
|
|
560
|
-
value: function findMetavariable(metavariable) {
|
|
561
|
-
var _this = this;
|
|
562
|
-
var metavariables = this.getMetavariables(), specificMetavariable = metavariable; ///
|
|
563
|
-
metavariable = metavariables.find(function(metavariable) {
|
|
564
|
-
var context1 = _this, generalMetavariable = metavariable, metavariableUnifies = generalMetavariable.unifyMetavariable(specificMetavariable, context1);
|
|
565
|
-
if (metavariableUnifies) {
|
|
566
|
-
return true;
|
|
567
|
-
}
|
|
568
|
-
}) || null;
|
|
569
|
-
return metavariable;
|
|
570
|
-
}
|
|
571
|
-
},
|
|
572
|
-
{
|
|
573
|
-
key: "findTypeByTypeName",
|
|
574
|
-
value: function findTypeByTypeName(typeName) {
|
|
575
|
-
var includeRelease = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true, includeDependencies = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true;
|
|
576
|
-
var types = this.getTypes(includeRelease, includeDependencies);
|
|
577
|
-
var baseType = (0, _types.baseTypeFromNothing)();
|
|
578
|
-
types = _to_consumable_array(types).concat([
|
|
579
|
-
baseType
|
|
580
|
-
]);
|
|
581
|
-
var type = types.find(function(type) {
|
|
582
|
-
var typeComparesToTypeName = type.compareTypeName(typeName);
|
|
583
|
-
if (typeComparesToTypeName) {
|
|
584
|
-
return true;
|
|
585
|
-
}
|
|
586
|
-
}) || null;
|
|
587
|
-
return type;
|
|
588
|
-
}
|
|
589
|
-
},
|
|
590
|
-
{
|
|
591
|
-
key: "findTypeByNominalTypeName",
|
|
592
|
-
value: function findTypeByNominalTypeName(nominalTypeName) {
|
|
593
|
-
var types = this.getTypes();
|
|
594
|
-
var baseType = (0, _types.baseTypeFromNothing)();
|
|
595
|
-
types = _to_consumable_array(types).concat([
|
|
596
|
-
baseType
|
|
597
|
-
]);
|
|
598
|
-
var type = types.find(function(type) {
|
|
599
|
-
var typeComparesToNominalTypeName = type.compareNominalTypeName(nominalTypeName);
|
|
600
|
-
if (typeComparesToNominalTypeName) {
|
|
601
|
-
return true;
|
|
602
|
-
}
|
|
603
|
-
}) || null;
|
|
604
|
-
return type;
|
|
605
|
-
}
|
|
606
|
-
},
|
|
607
|
-
{
|
|
608
|
-
key: "findTypeByPrefixedTypeName",
|
|
609
|
-
value: function findTypeByPrefixedTypeName(prefixedTypeName) {
|
|
610
|
-
var types = this.getTypes();
|
|
611
|
-
var baseType = (0, _types.baseTypeFromNothing)();
|
|
612
|
-
types = _to_consumable_array(types).concat([
|
|
613
|
-
baseType
|
|
614
|
-
]);
|
|
615
|
-
var type = types.find(function(type) {
|
|
616
|
-
var typeComparesToPrefixedTypeName = type.comparePrefixedTypeName(prefixedTypeName);
|
|
617
|
-
if (typeComparesToPrefixedTypeName) {
|
|
618
|
-
return true;
|
|
619
|
-
}
|
|
620
|
-
}) || null;
|
|
621
|
-
return type;
|
|
622
|
-
}
|
|
623
|
-
},
|
|
624
|
-
{
|
|
625
|
-
key: "findMetaTypeByMetaTypeName",
|
|
626
|
-
value: function findMetaTypeByMetaTypeName(metaTypeName) {
|
|
627
|
-
var metaTypes = this.getMetaTypes(), metaType = metaTypes.find(function(metaType) {
|
|
628
|
-
var metaTypeComparesToMetaTypeName = metaType.compareMetaTypeName(metaTypeName);
|
|
629
|
-
if (metaTypeComparesToMetaTypeName) {
|
|
630
|
-
return true;
|
|
631
|
-
}
|
|
632
|
-
}) || null;
|
|
633
|
-
return metaType;
|
|
634
|
-
}
|
|
635
|
-
},
|
|
636
|
-
{
|
|
637
|
-
key: "findTypePrefixByTypePrefixName",
|
|
638
|
-
value: function findTypePrefixByTypePrefixName(typePrefixName) {
|
|
639
|
-
var typePrefixes = this.getTypePrefixes(), typePrefix = typePrefixes.find(function(typePrefix) {
|
|
640
|
-
var typePrefixComparesToTypePrefixName = typePrefix.compareTypePrefixName(typePrefixName);
|
|
641
|
-
if (typePrefixComparesToTypePrefixName) {
|
|
642
|
-
return true;
|
|
643
|
-
}
|
|
644
|
-
}) || null;
|
|
645
|
-
return typePrefix;
|
|
646
|
-
}
|
|
647
|
-
},
|
|
648
|
-
{
|
|
649
|
-
key: "findVariableByVariableIdentifier",
|
|
650
|
-
value: function findVariableByVariableIdentifier(variableIdentifier) {
|
|
651
|
-
var variables = this.getVariables(), variable = variables.find(function(variable) {
|
|
652
|
-
var variableComparesToVariableIdentifier = variable.compareVariableIdentifier(variableIdentifier);
|
|
653
|
-
if (variableComparesToVariableIdentifier) {
|
|
654
|
-
return true;
|
|
655
|
-
}
|
|
656
|
-
}) || null;
|
|
657
|
-
return variable;
|
|
658
|
-
}
|
|
659
|
-
},
|
|
660
|
-
{
|
|
661
|
-
key: "findLabelByMetavariableName",
|
|
662
|
-
value: function findLabelByMetavariableName(metavariableName) {
|
|
663
|
-
var labels = this.getLabels(), label = labels.find(function(label) {
|
|
664
|
-
var labelComparesToMetavariableName = label.compareMetavariableName(metavariableName);
|
|
665
|
-
if (labelComparesToMetavariableName) {
|
|
666
|
-
return true;
|
|
667
|
-
}
|
|
668
|
-
}) || null;
|
|
669
|
-
return label;
|
|
670
|
-
}
|
|
671
|
-
},
|
|
672
|
-
{
|
|
673
|
-
key: "findLabelByMetavariable",
|
|
674
|
-
value: function findLabelByMetavariable(metavariable) {
|
|
675
|
-
var labels = this.getLabels(), label = labels.find(function(label) {
|
|
676
|
-
var metavariableEqualToLabelMetavariable = label.isMetavariableEqualToMetavariable(metavariable);
|
|
677
|
-
if (metavariableEqualToLabelMetavariable) {
|
|
678
|
-
return true;
|
|
679
|
-
}
|
|
680
|
-
}) || null;
|
|
681
|
-
return label;
|
|
682
|
-
}
|
|
683
|
-
},
|
|
684
|
-
{
|
|
685
|
-
key: "findJudgementByMetavariable",
|
|
686
|
-
value: function findJudgementByMetavariable(metavariable) {
|
|
687
|
-
var judgements = this.getJudgements(), judgement = judgements.find(function(judgement) {
|
|
688
|
-
var judgementSingular = judgement.isSingular();
|
|
689
|
-
if (judgementSingular) {
|
|
690
|
-
var judgementMetavariable = judgement.getMetavariable(), judgementMetavariableEqualToMetavariable = judgementMetavariable.isEqualTo(metavariable);
|
|
691
|
-
if (judgementMetavariableEqualToMetavariable) {
|
|
692
|
-
return true;
|
|
693
|
-
}
|
|
694
|
-
}
|
|
695
|
-
}) || null;
|
|
696
|
-
return judgement;
|
|
697
|
-
}
|
|
698
|
-
},
|
|
699
|
-
{
|
|
700
|
-
key: "findMetavariableByMetavariableName",
|
|
701
|
-
value: function findMetavariableByMetavariableName(metavariableName) {
|
|
702
|
-
var metavariables = this.getMetavariables(), metavariable = metavariables.find(function(metavariable) {
|
|
703
|
-
var metavariableComparesToMetavariableName = metavariable.compareMetavariableName(metavariableName);
|
|
704
|
-
if (metavariableComparesToMetavariableName) {
|
|
705
|
-
return true;
|
|
706
|
-
}
|
|
707
|
-
}) || null;
|
|
708
|
-
return metavariable;
|
|
709
|
-
}
|
|
710
|
-
},
|
|
711
|
-
{
|
|
712
|
-
key: "isMetavariablePresent",
|
|
713
|
-
value: function isMetavariablePresent(metavariable) {
|
|
714
|
-
metavariable = this.findMetavariable(metavariable);
|
|
715
|
-
var metavariablePresent = metavariable !== null;
|
|
716
|
-
return metavariablePresent;
|
|
717
|
-
}
|
|
718
|
-
},
|
|
719
|
-
{
|
|
720
|
-
key: "isTypePresentByTypeName",
|
|
721
|
-
value: function isTypePresentByTypeName(typeName) {
|
|
722
|
-
var includeRelease = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true, includeDependencies = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true;
|
|
723
|
-
var type = this.findTypeByTypeName(typeName, includeRelease, includeDependencies), typePresent = type !== null;
|
|
724
|
-
return typePresent;
|
|
725
|
-
}
|
|
726
|
-
},
|
|
727
|
-
{
|
|
728
|
-
key: "isTypePresentByNominalTypeName",
|
|
729
|
-
value: function isTypePresentByNominalTypeName(nominalTypeName) {
|
|
730
|
-
var type = this.findTypeByNominalTypeName(nominalTypeName), typePresent = type !== null;
|
|
731
|
-
return typePresent;
|
|
732
|
-
}
|
|
733
|
-
},
|
|
734
|
-
{
|
|
735
|
-
key: "isTypePresentByPrefixedTypeName",
|
|
736
|
-
value: function isTypePresentByPrefixedTypeName(prefixedTypeName) {
|
|
737
|
-
var type = this.findTypeByPrefixedTypeName(prefixedTypeName), typePresent = type !== null;
|
|
738
|
-
return typePresent;
|
|
739
|
-
}
|
|
740
|
-
},
|
|
741
|
-
{
|
|
742
|
-
key: "isTypePrefixPresentByTypePrefixName",
|
|
743
|
-
value: function isTypePrefixPresentByTypePrefixName(typePrefixName) {
|
|
744
|
-
var typePrefix = this.findTypePrefixByTypePrefixName(typePrefixName), typePrefixPresent = typePrefix !== null;
|
|
745
|
-
return typePrefixPresent;
|
|
746
|
-
}
|
|
747
|
-
},
|
|
748
|
-
{
|
|
749
|
-
key: "isVariablePresentByVariableIdentifier",
|
|
750
|
-
value: function isVariablePresentByVariableIdentifier(variableIdentifier) {
|
|
751
|
-
var variable = this.findVariableByVariableIdentifier(variableIdentifier), variablePresent = variable !== null;
|
|
752
|
-
return variablePresent;
|
|
753
|
-
}
|
|
754
|
-
},
|
|
755
|
-
{
|
|
756
|
-
key: "isLabelPresentByMetavariableName",
|
|
757
|
-
value: function isLabelPresentByMetavariableName(metavariableName) {
|
|
758
|
-
var label = this.findLabelByMetavariableName(metavariableName), labelPresent = label !== null;
|
|
759
|
-
return labelPresent;
|
|
760
|
-
}
|
|
761
|
-
},
|
|
762
|
-
{
|
|
763
|
-
key: "isLabelPresentByMetavariable",
|
|
764
|
-
value: function isLabelPresentByMetavariable(metavariable) {
|
|
765
|
-
var label = this.findLabelByMetavariable(metavariable), labelPresent = label !== null;
|
|
766
|
-
return labelPresent;
|
|
767
|
-
}
|
|
768
|
-
},
|
|
769
|
-
{
|
|
770
|
-
key: "isMetavariablePresentByMetavariableName",
|
|
771
|
-
value: function isMetavariablePresentByMetavariableName(metavariableName) {
|
|
772
|
-
var metavariable = this.findMetavariableByMetavariableName(metavariableName), metavariablePresent = metavariable !== null;
|
|
773
|
-
return metavariablePresent;
|
|
774
|
-
}
|
|
775
|
-
},
|
|
776
|
-
{
|
|
777
|
-
key: "isLabelPresentByReference",
|
|
778
|
-
value: function isLabelPresentByReference(reference) {
|
|
779
|
-
var _this = this;
|
|
780
|
-
var labels = this.getLabels(), labelPresent = labels.some(function(label) {
|
|
781
|
-
var context1 = _this, labelUnifies = reference.unifyLabel(label, context1);
|
|
782
|
-
if (labelUnifies) {
|
|
783
|
-
return true;
|
|
784
|
-
}
|
|
785
|
-
});
|
|
786
|
-
return labelPresent;
|
|
787
|
-
}
|
|
788
|
-
},
|
|
789
|
-
{
|
|
790
|
-
key: "isProcedurePresentByName",
|
|
791
|
-
value: function isProcedurePresentByName(name) {
|
|
792
|
-
var procedure = this.findProcedureByName(name), procedurePresent = procedure !== null;
|
|
793
|
-
return procedurePresent;
|
|
794
|
-
}
|
|
795
|
-
},
|
|
796
|
-
{
|
|
797
|
-
key: "isMetavariablePresentByReference",
|
|
798
|
-
value: function isMetavariablePresentByReference(reference) {
|
|
799
|
-
var _this = this;
|
|
800
|
-
var metavariables = this.getMetavariables(), metavariablePresent = metavariables.some(function(metavariable) {
|
|
801
|
-
var context1 = _this, metavariableUnifies = reference.unifyMetavariable(metavariable, context1);
|
|
802
|
-
if (metavariableUnifies) {
|
|
803
|
-
return true;
|
|
804
|
-
}
|
|
805
|
-
});
|
|
806
|
-
return metavariablePresent;
|
|
807
|
-
}
|
|
808
|
-
},
|
|
809
|
-
{
|
|
810
|
-
key: "isTopLevelMetaAssertionPresentByReference",
|
|
811
|
-
value: function isTopLevelMetaAssertionPresentByReference(reference) {
|
|
812
|
-
var topLevelMetaAssertion = this.findTopLevelMetaAssertionByReference(reference), topLevelMetaAssertionPresent = topLevelMetaAssertion !== null;
|
|
813
|
-
return topLevelMetaAssertionPresent;
|
|
814
|
-
}
|
|
815
|
-
},
|
|
816
|
-
{
|
|
817
|
-
key: "getFileContext",
|
|
818
|
-
value: function getFileContext() {
|
|
819
|
-
var fileContext = this; ///
|
|
820
|
-
return fileContext;
|
|
821
|
-
}
|
|
822
|
-
},
|
|
823
|
-
{
|
|
824
|
-
key: "getDepth",
|
|
825
|
-
value: function getDepth() {
|
|
826
|
-
var depth = this.context.getDepth();
|
|
827
|
-
depth++;
|
|
828
|
-
return depth;
|
|
829
|
-
}
|
|
830
|
-
},
|
|
831
|
-
{
|
|
832
|
-
key: "nodeAsString",
|
|
833
|
-
value: function nodeAsString1(node) {
|
|
834
|
-
var string = nodeAsString(node, this.tokens);
|
|
835
|
-
return string;
|
|
836
|
-
}
|
|
837
|
-
},
|
|
838
|
-
{
|
|
839
|
-
key: "nodesAsString",
|
|
840
|
-
value: function nodesAsString1(node) {
|
|
841
|
-
var string = nodesAsString(node, this.tokens);
|
|
842
|
-
return string;
|
|
843
|
-
}
|
|
844
|
-
},
|
|
845
|
-
{
|
|
846
|
-
key: "trace",
|
|
847
|
-
value: function trace(message) {
|
|
848
|
-
var node = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;
|
|
849
|
-
var level = TRACE_LEVEL;
|
|
850
|
-
this.writeToLog(level, message, node);
|
|
851
|
-
}
|
|
852
|
-
},
|
|
853
|
-
{
|
|
854
|
-
key: "debug",
|
|
855
|
-
value: function debug(message) {
|
|
856
|
-
var node = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;
|
|
857
|
-
var level = DEBUG_LEVEL;
|
|
858
|
-
this.writeToLog(level, message, node);
|
|
859
|
-
}
|
|
860
|
-
},
|
|
861
|
-
{
|
|
862
|
-
key: "info",
|
|
863
|
-
value: function info(message) {
|
|
864
|
-
var node = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;
|
|
865
|
-
var level = INFO_LEVEL;
|
|
866
|
-
this.writeToLog(level, message, node);
|
|
867
|
-
}
|
|
868
|
-
},
|
|
869
|
-
{
|
|
870
|
-
key: "warning",
|
|
871
|
-
value: function warning(message) {
|
|
872
|
-
var node = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;
|
|
873
|
-
var level = WARNING_LEVEL;
|
|
874
|
-
this.writeToLog(level, message, node);
|
|
875
|
-
}
|
|
876
|
-
},
|
|
877
|
-
{
|
|
878
|
-
key: "error",
|
|
879
|
-
value: function error(message) {
|
|
880
|
-
var node = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;
|
|
881
|
-
var level = ERROR_LEVEL;
|
|
882
|
-
this.writeToLog(level, message, node);
|
|
883
|
-
}
|
|
884
|
-
},
|
|
885
|
-
{
|
|
886
|
-
key: "writeToLog",
|
|
887
|
-
value: function writeToLog(level, message, node) {
|
|
888
|
-
var lineIndex = lineIndexFromNodeAndTokens(node, this.tokens, this.lineIndex), filePath = lineIndex === null ? this.filePath : null;
|
|
889
|
-
this.context.writeToLog(level, message, filePath, lineIndex);
|
|
890
|
-
this.lineIndex = lineIndex;
|
|
891
|
-
}
|
|
892
|
-
},
|
|
893
|
-
{
|
|
894
|
-
key: "verify",
|
|
895
|
-
value: function verify() {
|
|
896
|
-
var verifies = false;
|
|
897
|
-
this.prepare();
|
|
898
|
-
if (this.node === null) {
|
|
899
|
-
this.warning("Unable to verify the '".concat(this.filePath, "' file because it cannot be parsed."));
|
|
900
|
-
} else {
|
|
901
|
-
this.debug("Verifying the '".concat(this.filePath, "' file..."));
|
|
902
|
-
var context1 = this, fileNode = this.node; ///
|
|
903
|
-
verifies = (0, _verify.verifyFile)(fileNode, context1);
|
|
904
|
-
verifies ? this.complete() : this.clear();
|
|
905
|
-
if (verifies) {
|
|
906
|
-
this.info("...verified the '".concat(this.filePath, "' file."));
|
|
907
|
-
}
|
|
908
|
-
}
|
|
909
|
-
return verifies;
|
|
910
|
-
}
|
|
911
|
-
},
|
|
912
|
-
{
|
|
913
|
-
key: "prepare",
|
|
914
|
-
value: function prepare() {
|
|
915
|
-
if (this.tokens !== null) {
|
|
916
|
-
return;
|
|
917
|
-
}
|
|
918
|
-
var file = this.findFile(this.filePath), lexer = this.getLexer(), parser = this.getParser(), content = file.getContent();
|
|
919
|
-
this.tokens = lexer.tokenise(content);
|
|
920
|
-
this.node = parser.parse(this.tokens);
|
|
921
|
-
}
|
|
922
|
-
},
|
|
923
|
-
{
|
|
924
|
-
key: "clear",
|
|
925
|
-
value: function clear() {
|
|
926
|
-
this.lineIndex = null;
|
|
927
|
-
this.types = [];
|
|
928
|
-
this.rules = [];
|
|
929
|
-
this.axioms = [];
|
|
930
|
-
this.lemmas = [];
|
|
931
|
-
this.theorems = [];
|
|
932
|
-
this.variables = [];
|
|
933
|
-
this.metaLemmas = [];
|
|
934
|
-
this.conjectures = [];
|
|
935
|
-
this.combinators = [];
|
|
936
|
-
this.typePrefixes = [];
|
|
937
|
-
this.constructors = [];
|
|
938
|
-
this.metatheorems = [];
|
|
939
|
-
this.metavariables = [];
|
|
940
|
-
}
|
|
941
|
-
},
|
|
942
|
-
{
|
|
943
|
-
key: "complete",
|
|
944
|
-
value: function complete() {
|
|
945
|
-
this.lineIndex = null;
|
|
946
|
-
}
|
|
947
|
-
},
|
|
948
|
-
{
|
|
949
|
-
key: "initialise",
|
|
950
|
-
value: function initialise(json) {
|
|
951
|
-
var fileContext = this; ///
|
|
952
|
-
this.types = [];
|
|
953
|
-
(0, _json.typesFromJSON)(json, this.types, fileContext);
|
|
954
|
-
this.rules = (0, _json.rulesFromJSON)(json, fileContext);
|
|
955
|
-
this.axioms = (0, _json.axiomsFromJSON)(json, fileContext);
|
|
956
|
-
this.lemmas = (0, _json.lemmasFromNothing)();
|
|
957
|
-
this.theorems = (0, _json.theoremsFromJSON)(json, fileContext);
|
|
958
|
-
this.variables = (0, _json.variablesFromJSON)(json, fileContext);
|
|
959
|
-
this.metaLemmas = (0, _json.metaLemmasFromNothing)();
|
|
960
|
-
this.conjectures = (0, _json.conjecturesFromJSON)(json, fileContext);
|
|
961
|
-
this.combinators = (0, _json.combinatorsFromJSON)(json, fileContext);
|
|
962
|
-
this.typePrefixes = (0, _json.typePrefixesFromJSON)(json, fileContext);
|
|
963
|
-
this.constructors = (0, _json.constructorsFromJSON)(json, fileContext);
|
|
964
|
-
this.metatheorems = (0, _json.metatheoremsFromJSON)(json, fileContext);
|
|
965
|
-
this.metavariables = (0, _json.metavariablesFromJSON)(json, fileContext);
|
|
966
|
-
}
|
|
967
|
-
},
|
|
968
|
-
{
|
|
969
|
-
key: "toJSON",
|
|
970
|
-
value: function toJSON() {
|
|
971
|
-
var typesJSON = (0, _json.typesToTypesJSON)(this.types), rulesJSON = (0, _json.rulesToRulesJSON)(this.rules), axiomsJSON = (0, _json.axiomsToAxiomsJSON)(this.axioms), theoremsJSON = (0, _json.theoremsToTheoremsJSON)(this.theorems), variablesJSON = (0, _json.variablesToVariablesJSON)(this.variables), conjecturesJSON = (0, _json.conjecturesToConjecturesJSON)(this.conjectures), combinatorsJSON = (0, _json.combinatorsToCombinatorsJSON)(this.combinators), typePrefixesJSON = (0, _json.typePrefixesToTypePrefixesJSON)(this.typePrefixes), constructorsJSON = (0, _json.constructorsToConstructorsJSON)(this.constructors), metatheoremsJSON = (0, _json.metatheoremsToMetatheoremsJSON)(this.metatheorems), metavariablesJSON = (0, _json.metavariablesToMetavariablesJSON)(this.metavariables), filePath = this.filePath, types = typesJSON, rules = rulesJSON, axioms = axiomsJSON, theorems = theoremsJSON, variables = variablesJSON, conjectures = conjecturesJSON, combinators = combinatorsJSON, typePrefixes = typePrefixesJSON, constructors = constructorsJSON, metatheorems = metatheoremsJSON, metavariables = metavariablesJSON, json = {
|
|
972
|
-
filePath: filePath,
|
|
973
|
-
types: types,
|
|
974
|
-
rules: rules,
|
|
975
|
-
axioms: axioms,
|
|
976
|
-
theorems: theorems,
|
|
977
|
-
variables: variables,
|
|
978
|
-
conjectures: conjectures,
|
|
979
|
-
combinators: combinators,
|
|
980
|
-
typePrefixes: typePrefixes,
|
|
981
|
-
constructors: constructors,
|
|
982
|
-
metatheorems: metatheorems,
|
|
983
|
-
metavariables: metavariables
|
|
984
|
-
};
|
|
985
|
-
return json;
|
|
986
|
-
}
|
|
987
|
-
}
|
|
988
|
-
], [
|
|
989
|
-
{
|
|
990
|
-
key: "fromFile",
|
|
991
|
-
value: function fromFile(file, context1) {
|
|
992
|
-
var filePath = file.getPath(), lineIndex = null, tokens = null, node = null, types = [], rules = [], axioms = [], lemmas = [], theorems = [], variables = [], metaLemmas = [], conjectures = [], combinators = [], typePrefixes = [], constructors = [], metatheorems = [], metavariables = [], fileContext = new FileContext(context1, filePath, lineIndex, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables);
|
|
993
|
-
return fileContext;
|
|
994
|
-
}
|
|
995
|
-
},
|
|
996
|
-
{
|
|
997
|
-
key: "fromFilePath",
|
|
998
|
-
value: function fromFilePath(filePath, context1) {
|
|
999
|
-
var lineIndex = null, tokens = null, node = null, types = null, rules = null, axioms = null, lemmas = null, theorems = null, variables = null, metaLemmas = null, conjectures = null, combinators = null, typePrefixes = null, constructors = null, metatheorems = null, metavariables = null, fileContext = new FileContext(context1, filePath, lineIndex, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables);
|
|
1000
|
-
return fileContext;
|
|
1001
|
-
}
|
|
1002
|
-
}
|
|
1003
|
-
]);
|
|
1004
|
-
return FileContext;
|
|
1005
|
-
}();
|
|
1006
|
-
|
|
1007
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2ZpbGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgbm9kZVV0aWxpdGllcywgY29udGV4dFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1mdXJ0bGVcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBMRVZFTFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyB2ZXJpZnlGaWxlIH0gZnJvbSBcIi4uL3Byb2Nlc3MvdmVyaWZ5XCI7XG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlc0Zyb21KU09OLFxuICAgICAgICAgcnVsZXNGcm9tSlNPTixcbiAgICAgICAgIGF4aW9tc0Zyb21KU09OLFxuICAgICAgICAgdHlwZXNUb1R5cGVzSlNPTixcbiAgICAgICAgIHJ1bGVzVG9SdWxlc0pTT04sXG4gICAgICAgICB0aGVvcmVtc0Zyb21KU09OLFxuICAgICAgICAgdmFyaWFibGVzRnJvbUpTT04sXG4gICAgICAgICBsZW1tYXNGcm9tTm90aGluZyxcbiAgICAgICAgIGF4aW9tc1RvQXhpb21zSlNPTixcbiAgICAgICAgIGNvbmplY3R1cmVzRnJvbUpTT04sXG4gICAgICAgICBjb21iaW5hdG9yc0Zyb21KU09OLFxuICAgICAgICAgdHlwZVByZWZpeGVzRnJvbUpTT04sXG4gICAgICAgICBjb25zdHJ1Y3RvcnNGcm9tSlNPTixcbiAgICAgICAgIG1ldGF0aGVvcmVtc0Zyb21KU09OLFxuICAgICAgICAgbWV0YXZhcmlhYmxlc0Zyb21KU09OLFxuICAgICAgICAgbWV0YUxlbW1hc0Zyb21Ob3RoaW5nLFxuICAgICAgICAgdGhlb3JlbXNUb1RoZW9yZW1zSlNPTixcbiAgICAgICAgIHZhcmlhYmxlc1RvVmFyaWFibGVzSlNPTixcbiAgICAgICAgIGNvbmplY3R1cmVzVG9Db25qZWN0dXJlc0pTT04sXG4gICAgICAgICBjb21iaW5hdG9yc1RvQ29tYmluYXRvcnNKU09OLFxuICAgICAgICAgdHlwZVByZWZpeGVzVG9UeXBlUHJlZml4ZXNKU09OLFxuICAgICAgICAgY29uc3RydWN0b3JzVG9Db25zdHJ1Y3RvcnNKU09OLFxuICAgICAgICAgbWV0YXRoZW9yZW1zVG9NZXRhdGhlb3JlbXNKU09OLFxuICAgICAgICAgbWV0YXZhcmlhYmxlc1RvTWV0YXZhcmlhYmxlc0pTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcblxuY29uc3QgeyBwdXNoLCBmaWx0ZXIgfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBub2RlQXNTdHJpbmcsIG5vZGVzQXNTdHJpbmcgfSA9IG5vZGVVdGlsaXRpZXMsXG4gICAgICB7IGNoYWluQ29udGV4dCwgbGluZUluZGV4RnJvbU5vZGVBbmRUb2tlbnMgfSA9IGNvbnRleHRVdGlsaXRpZXMsXG4gICAgICBbIFRSQUNFX0xFVkVMLCBERUJVR19MRVZFTCwgSU5GT19MRVZFTCwgV0FSTklOR19MRVZFTCwgRVJST1JfTEVWRUwgXSA9IExFVkVMUztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsZUNvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBmaWxlUGF0aCwgbGluZUluZGV4LCB0b2tlbnMsIG5vZGUsIHR5cGVzLCBydWxlcywgYXhpb21zLCBsZW1tYXMsIHRoZW9yZW1zLCB2YXJpYWJsZXMsIG1ldGFMZW1tYXMsIGNvbmplY3R1cmVzLCBjb21iaW5hdG9ycywgdHlwZVByZWZpeGVzLCBjb25zdHJ1Y3RvcnMsIG1ldGF0aGVvcmVtcywgbWV0YXZhcmlhYmxlcykge1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5maWxlUGF0aCA9IGZpbGVQYXRoO1xuICAgIHRoaXMubGluZUluZGV4ID0gbGluZUluZGV4O1xuICAgIHRoaXMudG9rZW5zID0gdG9rZW5zO1xuICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgdGhpcy50eXBlcyA9IHR5cGVzO1xuICAgIHRoaXMucnVsZXMgPSBydWxlcztcbiAgICB0aGlzLmF4aW9tcyA9IGF4aW9tcztcbiAgICB0aGlzLmxlbW1hcyA9IGxlbW1hcztcbiAgICB0aGlzLnRoZW9yZW1zID0gdGhlb3JlbXM7XG4gICAgdGhpcy52YXJpYWJsZXMgPSB2YXJpYWJsZXM7XG4gICAgdGhpcy5tZXRhTGVtbWFzID0gbWV0YUxlbW1hcztcbiAgICB0aGlzLmNvbmplY3R1cmVzID0gY29uamVjdHVyZXM7XG4gICAgdGhpcy5jb21iaW5hdG9ycyA9IGNvbWJpbmF0b3JzO1xuICAgIHRoaXMudHlwZVByZWZpeGVzID0gdHlwZVByZWZpeGVzO1xuICAgIHRoaXMuY29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzO1xuICAgIHRoaXMubWV0YXRoZW9yZW1zID0gbWV0YXRoZW9yZW1zO1xuICAgIHRoaXMubWV0YXZhcmlhYmxlcyA9IG1ldGF2YXJpYWJsZXM7XG5cbiAgICByZXR1cm4gY2hhaW5Db250ZXh0KHRoaXMpO1xuICB9XG5cbiAgZ2V0Q29udGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0O1xuICB9XG5cbiAgZ2V0RmlsZVBhdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZVBhdGg7XG4gIH1cblxuICBnZXRMaW5lSW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMubGluZUluZGV4O1xuICB9XG5cbiAgZ2V0VG9rZW5zKCkge1xuICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgfVxuXG4gIGdldE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgfVxuXG4gIGdldEp1ZGdlbWVudHMoKSB7XG4gICAgY29uc3QganVkZ2VtZW50cyA9IFtdO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudHM7XG4gIH1cblxuICBnZXRFcXVpdmFsZW5jZXMoKSB7XG4gICAgY29uc3QgeyBFcXVpdmFsZW5jZXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIGVxdWl2YWxlbmNlcyA9IEVxdWl2YWxlbmNlcy5mcm9tTm90aGluZyhjb250ZXh0KTtcblxuICAgIHJldHVybiBlcXVpdmFsZW5jZXM7XG4gIH1cblxuICBnZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCkge1xuICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBbXTtcblxuICAgIHJldHVybiBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0TGFiZWxzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGxhYmVscyA9IFtdO1xuXG4gICAgaWYgKGluY2x1ZGVSZWxlYXNlKSB7XG4gICAgICBjb25zdCByZWxlYXNlQ29udGV4dExhYmVscyA9IHRoaXMuY29udGV4dC5nZXRMYWJlbHMoKTtcblxuICAgICAgcHVzaChsYWJlbHMsIHJlbGVhc2VDb250ZXh0TGFiZWxzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ydWxlcy5mb3JFYWNoKChydWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJ1bGVMYWJlbHMgPSBydWxlLmdldExhYmVscygpO1xuXG4gICAgICAgIHB1c2gobGFiZWxzLCBydWxlTGFiZWxzKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmF4aW9tcy5mb3JFYWNoKChheGlvbSkgPT4ge1xuICAgICAgICBjb25zdCBheGlvbUxhYmVscyA9IGF4aW9tLmdldExhYmVscygpO1xuXG4gICAgICAgIHB1c2gobGFiZWxzLCBheGlvbUxhYmVscyk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5sZW1tYXMuZm9yRWFjaCgobGVtbWEpID0+IHtcbiAgICAgICAgY29uc3QgbGVtbWFMYWJlbHMgPSBsZW1tYS5nZXRMYWJlbHMoKTtcblxuICAgICAgICBwdXNoKGxhYmVscywgbGVtbWFMYWJlbHMpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudGhlb3JlbXMuZm9yRWFjaCgodGhlb3JlbSkgPT4ge1xuICAgICAgICBjb25zdCB0aGVvcmVtTGFiZWxzID0gdGhlb3JlbS5nZXRMYWJlbHMoKTtcblxuICAgICAgICBwdXNoKGxhYmVscywgdGhlb3JlbUxhYmVscyk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jb25qZWN0dXJlcy5mb3JFYWNoKChjb25qZWN0dXJlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbmplY3R1cmVMYWJlbHMgPSBjb25qZWN0dXJlLmdldExhYmVscygpO1xuXG4gICAgICAgIHB1c2gobGFiZWxzLCBjb25qZWN0dXJlTGFiZWxzKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm1ldGF0aGVvcmVtcy5mb3JFYWNoKChtZXRhdGhlb3JlbSkgPT4ge1xuICAgICAgICBjb25zdCBtZXRhdGhlb3JlbUxhYmVsID0gbWV0YXRoZW9yZW0uZ2V0TGFiZWwoKTtcblxuICAgICAgICBsYWJlbHMucHVzaChtZXRhdGhlb3JlbUxhYmVsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsYWJlbHM7XG4gIH1cblxuICBnZXRUeXBlcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUsIGluY2x1ZGVEZXBlbmRlbmNpZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRUeXBlcyhpbmNsdWRlRGVwZW5kZW5jaWVzKSA6XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlcztcblxuICAgIHJldHVybiB0eXBlcztcbiAgfVxuXG4gIGdldFJ1bGVzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHJ1bGVzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0UnVsZXMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5ydWxlcztcblxuICAgIHJldHVybiBydWxlcztcbiAgfVxuXG4gIGdldEF4aW9tcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBheGlvbXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0QXhpb21zKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF4aW9tcztcblxuICAgIHJldHVybiBheGlvbXM7XG4gIH1cblxuICBnZXRMZW1tYXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgbGVtbWFzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldExlbW1hcygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW1tYXM7XG5cbiAgICByZXR1cm4gbGVtbWFzO1xuICB9XG5cbiAgZ2V0VGhlb3JlbXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgdGhlb3JlbXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRUaGVvcmVtcygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRoZW9yZW1zO1xuXG4gICAgcmV0dXJuIHRoZW9yZW1zO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIHJldHVybiB0aGlzLnZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFByb2NlZHVyZXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgcHJvY2VkdXJlcyA9IGluY2x1ZGVSZWxlYXNlID9cbiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0UHJvY2VkdXJlcygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7ICAvLy9cblxuICAgIHJldHVybiBwcm9jZWR1cmVzO1xuICB9XG5cbiAgZ2V0TWV0YUxlbW1hcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBtZXRhTGVtbWFzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRNZXRhTGVtbWFzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXRhTGVtbWFzO1xuXG4gICAgcmV0dXJuIG1ldGFMZW1tYXM7XG4gIH1cblxuICBnZXRDb25qZWN0dXJlcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBjb25qZWN0dXJlcyA9IGluY2x1ZGVSZWxlYXNlID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldENvbmplY3R1cmVzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uamVjdHVyZXM7XG5cbiAgICByZXR1cm4gY29uamVjdHVyZXM7XG4gIH1cblxuICBnZXRDb21iaW5hdG9ycyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBjb21iaW5hdG9ycyA9IGluY2x1ZGVSZWxlYXNlID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldENvbWJpbmF0b3JzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tYmluYXRvcnM7XG5cbiAgICByZXR1cm4gY29tYmluYXRvcnM7XG4gIH1cblxuICBnZXRUeXBlUHJlZml4ZXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZVByZWZpeGVzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldFR5cGVQcmVmaXhlcygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlUHJlZml4ZXM7XG5cbiAgICByZXR1cm4gdHlwZVByZWZpeGVzO1xuICB9XG5cbiAgZ2V0Q29uc3RydWN0b3JzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbnN0cnVjdG9ycyA9IGluY2x1ZGVSZWxlYXNlID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRDb25zdHJ1Y3RvcnMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3RydWN0b3JzO1xuXG4gICAgcmV0dXJuIGNvbnN0cnVjdG9ycztcbiAgfVxuXG4gIGdldE1ldGF0aGVvcmVtcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBtZXRhdGhlb3JlbXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0TWV0YXRoZW9yZW1zKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1ldGF0aGVvcmVtcztcblxuICAgIHJldHVybiBtZXRhdGhlb3JlbXM7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIHJldHVybiB0aGlzLm1ldGF2YXJpYWJsZXM7XG4gIH1cblxuICBhZGRUeXBlKHR5cGUpIHtcbiAgICB0aGlzLnR5cGVzLnB1c2godHlwZSk7XG4gIH1cblxuICBhZGRSdWxlKHJ1bGUpIHtcbiAgICB0aGlzLnJ1bGVzLnB1c2gocnVsZSk7XG4gIH1cblxuICBhZGRBeGlvbShheGlvbSkge1xuICAgIHRoaXMuYXhpb21zLnB1c2goYXhpb20pO1xuICB9XG5cbiAgYWRkTGVtbWEobGVtbWEpIHtcbiAgICB0aGlzLmxlbW1hcy5wdXNoKGxlbW1hKTtcbiAgfVxuXG4gIGFkZFRoZW9yZW0odGhlb3JlbSkge1xuICAgIHRoaXMudGhlb3JlbXMucHVzaCh0aGVvcmVtKTtcbiAgfVxuXG4gIGFkZFZhcmlhYmxlKHZhcmlhYmxlKSB7XG4gICAgdGhpcy52YXJpYWJsZXMucHVzaCh2YXJpYWJsZSk7XG4gIH1cblxuICBhZGRNZXRhTGVtbWEobWV0YUxlbW1hKSB7XG4gICAgdGhpcy5tZXRhTGVtbWFzLnB1c2gobWV0YUxlbW1hKTtcbiAgfVxuXG4gIGFkZENvbmplY3R1cmUoY29uamVjdHVyZSkge1xuICAgIHRoaXMuY29uamVjdHVyZXMucHVzaChjb25qZWN0dXJlKTtcbiAgfVxuXG4gIGFkZENvbWJpbmF0b3IoY29tYmluYXRvcikge1xuICAgIHRoaXMuY29tYmluYXRvcnMucHVzaChjb21iaW5hdG9yKTtcbiAgfVxuXG4gIGFkZFR5cGVQcmVmaXgodHlwZVByZWZpeCkge1xuICAgIHRoaXMudHlwZVByZWZpeGVzLnB1c2godHlwZVByZWZpeCk7XG4gIH1cblxuICBhZGRDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvcikge1xuICAgIHRoaXMuY29uc3RydWN0b3JzLnB1c2goY29uc3RydWN0b3IpO1xuICB9XG5cbiAgYWRkTWV0YXRoZW9yZW0obWV0YXRoZW9yZW0pIHtcbiAgICB0aGlzLm1ldGF0aGVvcmVtcy5wdXNoKG1ldGF0aGVvcmVtKTtcbiAgfVxuXG4gIGFkZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHtcbiAgICB0aGlzLm1ldGF2YXJpYWJsZXMucHVzaChtZXRhdmFyaWFibGUpO1xuICB9XG5cbiAgZmluZExhYmVsQnlSZWZlcmVuY2UocmVmZXJlbmNlLCBjb250ZXh0KSB7XG4gICAgY29uc3QgbGFiZWxzID0gdGhpcy5nZXRMYWJlbHMoKSxcbiAgICAgICAgICBsYWJlbCA9IGxhYmVscy5maW5kKChsYWJlbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlVW5pZmllcyA9IGxhYmVsLnVuaWZ5UmVmZXJlbmNlKHJlZmVyZW5jZSwgY29udGV4dCk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVVbmlmaWVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gbGFiZWw7XG4gIH1cblxuICBmaW5kTWV0YUxlbW1hQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgbWV0YUxlbW1hcyA9IHRoaXMuZ2V0TWV0YUxlbW1hcygpLFxuICAgICAgICAgIG1ldGFMZW1tYSA9IG1ldGFMZW1tYXMuZmluZCgobWV0YUxlbW1hKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhTGVtbWFDb21wYXJlc1RvUmVmZXJlbmNlID0gbWV0YUxlbW1hLmNvbXBhcmVSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgICAgICAgICAgaWYgKG1ldGFMZW1tYUNvbXBhcmVzVG9SZWZlcmVuY2UpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBtZXRhTGVtbWE7XG4gIH1cblxuICBmaW5kTWV0YXRoZW9yZW1CeVJlZmVyZW5jZShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCBtZXRhdGhlb3JlbXMgPSB0aGlzLmdldE1ldGF0aGVvcmVtcygpLFxuICAgICAgICAgIG1ldGF0aGVvcmVtID0gbWV0YXRoZW9yZW1zLmZpbmQoKG1ldGF0aGVvcmVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhdGhlb3JlbUNvbXBhcmVzVG9SZWZlcmVuY2UgPSBtZXRhdGhlb3JlbS5jb21wYXJlUmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdGhlb3JlbUNvbXBhcmVzVG9SZWZlcmVuY2UpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBtZXRhdGhlb3JlbTtcbiAgfVxuXG4gIGZpbmRSdWxlQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgcnVsZXMgPSB0aGlzLmdldFJ1bGVzKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTmFtZSA9IHJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGVOYW1lKCksXG4gICAgICAgICAgcnVsZSA9IHJ1bGVzLmZpbmQoKHJ1bGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVDb21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSA9IHJ1bGUuY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICAgICAgICAgIGlmIChydWxlQ29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgZmluZEF4aW9tQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgYXhpb21zID0gdGhpcy5nZXRBeGlvbXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOYW1lID0gcmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgICBheGlvbSA9IGF4aW9tcy5maW5kKChheGlvbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXhpb21Db21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSA9IGF4aW9tLmNvbXBhcmVNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICAgICAgICBpZiAoYXhpb21Db21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGF4aW9tO1xuICB9XG5cbiAgZmluZExlbW1hQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgbGVtbWFzID0gdGhpcy5nZXRMZW1tYXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOYW1lID0gcmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgICBsZW1tYSA9IGxlbW1hcy5maW5kKChsZW1tYSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGVtbWFDb21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSA9IGxlbW1hLmNvbXBhcmVNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICAgICAgICBpZiAobGVtbWFDb21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGxlbW1hO1xuICB9XG5cbiAgZmluZFRoZW9yZW1CeVJlZmVyZW5jZShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCB0aGVvcmVtcyA9IHRoaXMuZ2V0VGhlb3JlbXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOYW1lID0gcmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgICB0aGVvcmVtID0gdGhlb3JlbXMuZmluZCgodGhlb3JlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGhlb3JlbUNvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lID0gdGhlb3JlbS5jb21wYXJlTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgICAgICAgICAgaWYgKHRoZW9yZW1Db21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHRoZW9yZW07XG4gIH1cblxuICBmaW5kUHJvY2VkdXJlQnlOYW1lKG5hbWUpIHtcbiAgICBjb25zdCBwcm9jZWR1cmVzID0gdGhpcy5nZXRQcm9jZWR1cmVzKCksXG4gICAgICAgICAgcHJvY2VkdXJlID0gcHJvY2VkdXJlcy5maW5kKChwcm9jZWR1cmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVNYXRjaGVzID0gcHJvY2VkdXJlLm1hdGNoTmFtZShuYW1lKTtcblxuICAgICAgICAgICAgaWYgKG5hbWVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlO1xuICB9XG5cbiAgZmluZENvbmplY3R1cmVCeVJlZmVyZW5jZShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCBjb25qZWN0dXJlcyA9IHRoaXMuZ2V0Q29uamVjdHVyZXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOYW1lID0gcmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgICBjb25qZWN0dXJlID0gY29uamVjdHVyZXMuZmluZCgoY29uamVjdHVyZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29uamVjdHVyZUNvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lID0gY29uamVjdHVyZS5jb21wYXJlTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgICAgICAgICAgaWYgKGNvbmplY3R1cmVDb21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGNvbmplY3R1cmU7XG4gIH1cblxuICBmaW5kTWV0YUxlbW1hc0J5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IG1ldGFMZW1tYXMgPSB0aGlzLmdldE1ldGFMZW1tYXMoKTtcblxuICAgIGZpbHRlcihtZXRhTGVtbWFzLCAobWV0YUxlbW1hKSA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb24gPSBtZXRhTGVtbWEsIC8vL1xuICAgICAgICAgICAgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uVW5pZmllcyA9IHJlZmVyZW5jZS51bmlmeVRvcExldmVsTWV0YUFzc2VydGlvbih0b3BMZXZlbE1ldGFBc3NlcnRpb24sIGNvbnRleHQpO1xuXG4gICAgICBpZiAodG9wTGV2ZWxNZXRhQXNzZXJ0aW9uVW5pZmllcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtZXRhTGVtbWFzO1xuICB9XG5cbiAgZmluZE1ldGF0aGVvcmVtc0J5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IG1ldGF0aGVvcmVtcyA9IHRoaXMuZ2V0TWV0YXRoZW9yZW1zKCk7XG5cbiAgICBmaWx0ZXIobWV0YXRoZW9yZW1zLCAobWV0YXRoZW9yZW0pID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvbiA9IG1ldGF0aGVvcmVtLCAvLy9cbiAgICAgICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvblVuaWZpZXMgPSByZWZlcmVuY2UudW5pZnlUb3BMZXZlbE1ldGFBc3NlcnRpb24odG9wTGV2ZWxNZXRhQXNzZXJ0aW9uLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHRvcExldmVsTWV0YUFzc2VydGlvblVuaWZpZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWV0YXRoZW9yZW1zO1xuICB9XG5cbiAgZmluZFRvcExldmVsTWV0YUFzc2VydGlvbkJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IG1ldGFMZW1tYSA9IHRoaXMuZmluZE1ldGFMZW1tYUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSksXG4gICAgICAgICAgbWV0YXRoZW9yZW0gPSB0aGlzLmZpbmRNZXRhdGhlb3JlbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSksXG4gICAgICAgICAgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uID0gKG1ldGFMZW1tYSB8fCBtZXRhdGhlb3JlbSk7ICAvLy9cblxuICAgIHJldHVybiB0b3BMZXZlbE1ldGFBc3NlcnRpb247XG4gIH1cblxuICBmaW5kVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uc0J5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IG1ldGFMZW1tYXMgPSB0aGlzLmZpbmRNZXRhTGVtbWFzQnlSZWZlcmVuY2UocmVmZXJlbmNlKSxcbiAgICAgICAgICBtZXRhdGhlb3JlbXMgPSB0aGlzLmZpbmRNZXRhdGhlb3JlbXNCeVJlZmVyZW5jZShyZWZlcmVuY2UpLFxuICAgICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvbnMgPSBbXG4gICAgICAgICAgICAuLi5tZXRhTGVtbWFzLFxuICAgICAgICAgICAgLi4ubWV0YXRoZW9yZW1zXG4gICAgICAgICAgXTtcblxuICAgIHJldHVybiB0b3BMZXZlbE1ldGFBc3NlcnRpb25zO1xuICB9XG5cbiAgZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgYXhpb20gPSB0aGlzLmZpbmRBeGlvbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSksXG4gICAgICAgICAgbGVtbWEgPSB0aGlzLmZpbmRMZW1tYUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSksXG4gICAgICAgICAgdGhlb3JlbSA9IHRoaXMuZmluZFRoZW9yZW1CeVJlZmVyZW5jZShyZWZlcmVuY2UpLFxuICAgICAgICAgIGNvbmplY3R1cmUgPSB0aGlzLmZpbmRDb25qZWN0dXJlQnlSZWZlcmVuY2UocmVmZXJlbmNlKSxcbiAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvbiA9IChheGlvbSB8fCBsZW1tYSB8fCB0aGVvcmVtIHx8IGNvbmplY3R1cmUpO1xuXG4gICAgcmV0dXJuIHRvcExldmVsQXNzZXJ0aW9uO1xuICB9XG5cbiAgZmluZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVzID0gdGhpcy5nZXRNZXRhdmFyaWFibGVzKCksXG4gICAgICAgICAgc3BlY2lmaWNNZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGU7ICAvLy9cblxuICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZXMuZmluZCgobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgICBnZW5lcmFsTWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlLCAvLy9cbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZVVuaWZpZXMgPSBnZW5lcmFsTWV0YXZhcmlhYmxlLnVuaWZ5TWV0YXZhcmlhYmxlKHNwZWNpZmljTWV0YXZhcmlhYmxlLCBjb250ZXh0KTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZVVuaWZpZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBmaW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSwgaW5jbHVkZURlcGVuZGVuY2llcyA9IHRydWUpIHtcbiAgICBsZXQgdHlwZXMgPSB0aGlzLmdldFR5cGVzKGluY2x1ZGVSZWxlYXNlLCBpbmNsdWRlRGVwZW5kZW5jaWVzKTtcblxuICAgIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpO1xuXG4gICAgdHlwZXMgPSBbXG4gICAgICAuLi50eXBlcyxcbiAgICAgIGJhc2VUeXBlXG4gICAgXTtcblxuICAgIGNvbnN0IHR5cGUgPSB0eXBlcy5maW5kKCh0eXBlKSA9PiB7XG4gICAgICBjb25zdCB0eXBlQ29tcGFyZXNUb1R5cGVOYW1lID0gdHlwZS5jb21wYXJlVHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgICBpZiAodHlwZUNvbXBhcmVzVG9UeXBlTmFtZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBmaW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSkge1xuICAgIGxldCB0eXBlcyA9IHRoaXMuZ2V0VHlwZXMoKTtcblxuICAgIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpO1xuXG4gICAgdHlwZXMgPSBbXG4gICAgICAuLi50eXBlcyxcbiAgICAgIGJhc2VUeXBlXG4gICAgXTtcblxuICAgIGNvbnN0IHR5cGUgPSB0eXBlcy5maW5kKCh0eXBlKSA9PiB7XG4gICAgICBjb25zdCB0eXBlQ29tcGFyZXNUb05vbWluYWxUeXBlTmFtZSA9IHR5cGUuY29tcGFyZU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICBpZiAodHlwZUNvbXBhcmVzVG9Ob21pbmFsVHlwZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZmluZFR5cGVCeVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSkge1xuICAgIGxldCB0eXBlcyA9IHRoaXMuZ2V0VHlwZXMoKTtcblxuICAgIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpO1xuXG4gICAgdHlwZXMgPSBbXG4gICAgICAuLi50eXBlcyxcbiAgICAgIGJhc2VUeXBlXG4gICAgXTtcblxuICAgIGNvbnN0IHR5cGUgPSB0eXBlcy5maW5kKCh0eXBlKSA9PiB7XG4gICAgICBjb25zdCB0eXBlQ29tcGFyZXNUb1ByZWZpeGVkVHlwZU5hbWUgPSB0eXBlLmNvbXBhcmVQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUpO1xuXG4gICAgICBpZiAodHlwZUNvbXBhcmVzVG9QcmVmaXhlZFR5cGVOYW1lKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIGZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSkge1xuICAgIGNvbnN0IG1ldGFUeXBlcyA9IHRoaXMuZ2V0TWV0YVR5cGVzKCksXG4gICAgICAgICAgbWV0YVR5cGUgPSBtZXRhVHlwZXMuZmluZCgobWV0YVR5cGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGFUeXBlQ29tcGFyZXNUb01ldGFUeXBlTmFtZSA9IG1ldGFUeXBlLmNvbXBhcmVNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKTtcblxuICAgICAgICAgICAgaWYgKG1ldGFUeXBlQ29tcGFyZXNUb01ldGFUeXBlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIG1ldGFUeXBlO1xuICB9XG5cbiAgZmluZFR5cGVQcmVmaXhCeVR5cGVQcmVmaXhOYW1lKHR5cGVQcmVmaXhOYW1lKSB7XG4gICAgY29uc3QgdHlwZVByZWZpeGVzID0gdGhpcy5nZXRUeXBlUHJlZml4ZXMoKSxcbiAgICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeGVzLmZpbmQoKHR5cGVQcmVmaXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVQcmVmaXhDb21wYXJlc1RvVHlwZVByZWZpeE5hbWUgPSB0eXBlUHJlZml4LmNvbXBhcmVUeXBlUHJlZml4TmFtZSh0eXBlUHJlZml4TmFtZSk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlUHJlZml4Q29tcGFyZXNUb1R5cGVQcmVmaXhOYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gdHlwZVByZWZpeDtcbiAgfVxuXG4gIGZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRoaXMuZ2V0VmFyaWFibGVzKCksXG4gICAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZXMuZmluZCgodmFyaWFibGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlLmNvbXBhcmVWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgICAgICAgICAgaWYgKHZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9XG5cbiAgZmluZExhYmVsQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICBjb25zdCBsYWJlbHMgPSB0aGlzLmdldExhYmVscygpLFxuICAgICAgICAgIGxhYmVsID0gbGFiZWxzLmZpbmQoKGxhYmVsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsYWJlbENvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lID0gbGFiZWwuY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICAgICAgICAgIGlmIChsYWJlbENvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gbGFiZWw7XG4gIH1cblxuICBmaW5kTGFiZWxCeU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHtcbiAgICBjb25zdCBsYWJlbHMgPSB0aGlzLmdldExhYmVscygpLFxuICAgICAgICAgIGxhYmVsID0gbGFiZWxzLmZpbmQoKGxhYmVsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVFcXVhbFRvTGFiZWxNZXRhdmFyaWFibGUgPSBsYWJlbC5pc01ldGF2YXJpYWJsZUVxdWFsVG9NZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKTtcblxuICAgICAgICAgICAgaWYgKG1ldGF2YXJpYWJsZUVxdWFsVG9MYWJlbE1ldGF2YXJpYWJsZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGxhYmVsO1xuICB9XG5cbiAgZmluZEp1ZGdlbWVudEJ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSkge1xuICAgIGNvbnN0IGp1ZGdlbWVudHMgPSB0aGlzLmdldEp1ZGdlbWVudHMoKSxcbiAgICAgICAgICBqdWRnZW1lbnQgPSBqdWRnZW1lbnRzLmZpbmQoKGp1ZGdlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QganVkZ2VtZW50U2luZ3VsYXIgPSBqdWRnZW1lbnQuaXNTaW5ndWxhcigpO1xuXG4gICAgICAgICAgICBpZiAoanVkZ2VtZW50U2luZ3VsYXIpIHtcbiAgICAgICAgICAgICAgY29uc3QganVkZ2VtZW50TWV0YXZhcmlhYmxlID0ganVkZ2VtZW50LmdldE1ldGF2YXJpYWJsZSgpLFxuICAgICAgICAgICAgICAgICAgICBqdWRnZW1lbnRNZXRhdmFyaWFibGVFcXVhbFRvTWV0YXZhcmlhYmxlID0ganVkZ2VtZW50TWV0YXZhcmlhYmxlLmlzRXF1YWxUbyhtZXRhdmFyaWFibGUpO1xuXG4gICAgICAgICAgICAgIGlmIChqdWRnZW1lbnRNZXRhdmFyaWFibGVFcXVhbFRvTWV0YXZhcmlhYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudDtcbiAgfVxuXG4gIGZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZXMgPSB0aGlzLmdldE1ldGF2YXJpYWJsZXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVzLmZpbmQoKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlQ29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGUuY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVDb21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGlzTWV0YXZhcmlhYmxlUHJlc2VudChtZXRhdmFyaWFibGUpIHtcbiAgICBtZXRhdmFyaWFibGUgPSB0aGlzLmZpbmRNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZVByZXNlbnQgPSAobWV0YXZhcmlhYmxlICE9PSBudWxsKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVQcmVzZW50O1xuICB9XG5cbiAgaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUodHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSwgaW5jbHVkZURlcGVuZGVuY2llcyA9IHRydWUpIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5maW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlLCBpbmNsdWRlRGVwZW5kZW5jaWVzKSxcbiAgICAgICAgICB0eXBlUHJlc2VudCA9ICh0eXBlICE9PSBudWxsKTtcblxuICAgIHJldHVybiB0eXBlUHJlc2VudDtcbiAgfVxuXG4gIGlzVHlwZVByZXNlbnRCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSksXG4gICAgICAgICAgdHlwZVByZXNlbnQgPSAodHlwZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdHlwZVByZXNlbnQ7XG4gIH1cblxuICBpc1R5cGVQcmVzZW50QnlQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUpIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5maW5kVHlwZUJ5UHJlZml4ZWRUeXBlTmFtZShwcmVmaXhlZFR5cGVOYW1lKSxcbiAgICAgICAgICB0eXBlUHJlc2VudCA9ICh0eXBlICE9PSBudWxsKTtcblxuICAgIHJldHVybiB0eXBlUHJlc2VudDtcbiAgfVxuXG4gIGlzVHlwZVByZWZpeFByZXNlbnRCeVR5cGVQcmVmaXhOYW1lKHR5cGVQcmVmaXhOYW1lKSB7XG4gICAgY29uc3QgdHlwZVByZWZpeCA9IHRoaXMuZmluZFR5cGVQcmVmaXhCeVR5cGVQcmVmaXhOYW1lKHR5cGVQcmVmaXhOYW1lKSxcbiAgICAgICAgICB0eXBlUHJlZml4UHJlc2VudCA9ICh0eXBlUHJlZml4ICE9PSBudWxsKTtcblxuICAgIHJldHVybiB0eXBlUHJlZml4UHJlc2VudDtcbiAgfVxuXG4gIGlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLmZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllciksXG4gICAgICAgICAgdmFyaWFibGVQcmVzZW50ID0gKHZhcmlhYmxlICE9PSBudWxsKTtcblxuICAgIHJldHVybiB2YXJpYWJsZVByZXNlbnQ7XG4gIH1cblxuICBpc0xhYmVsUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLmZpbmRMYWJlbEJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSxcbiAgICAgICAgICBsYWJlbFByZXNlbnQgPSAobGFiZWwgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGxhYmVsUHJlc2VudDtcbiAgfVxuXG4gIGlzTGFiZWxQcmVzZW50QnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKSB7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLmZpbmRMYWJlbEJ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSksXG4gICAgICAgICAgbGFiZWxQcmVzZW50ID0gKGxhYmVsICE9PSBudWxsKTtcblxuICAgIHJldHVybiBsYWJlbFByZXNlbnQ7XG4gIH1cblxuICBpc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IHRoaXMuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVQcmVzZW50ID0gKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlUHJlc2VudDtcbiAgfVxuXG4gIGlzTGFiZWxQcmVzZW50QnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgbGFiZWxzID0gdGhpcy5nZXRMYWJlbHMoKSxcbiAgICAgICAgICBsYWJlbFByZXNlbnQgPSBsYWJlbHMuc29tZSgobGFiZWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICAgICAgICAgIGxhYmVsVW5pZmllcyA9IHJlZmVyZW5jZS51bmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgaWYgKGxhYmVsVW5pZmllcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiBsYWJlbFByZXNlbnQ7XG4gIH1cblxuICBpc1Byb2NlZHVyZVByZXNlbnRCeU5hbWUobmFtZSkge1xuICAgIGNvbnN0IHByb2NlZHVyZSA9IHRoaXMuZmluZFByb2NlZHVyZUJ5TmFtZShuYW1lKSxcbiAgICAgICAgICBwcm9jZWR1cmVQcmVzZW50ID0gKHByb2NlZHVyZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlUHJlc2VudDtcbiAgfVxuXG4gIGlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZXMgPSB0aGlzLmdldE1ldGF2YXJpYWJsZXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVQcmVzZW50ID0gbWV0YXZhcmlhYmxlcy5zb21lKChtZXRhdmFyaWFibGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICAgICAgICAgIG1ldGF2YXJpYWJsZVVuaWZpZXMgPSByZWZlcmVuY2UudW5pZnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgaWYgKG1ldGF2YXJpYWJsZVVuaWZpZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlUHJlc2VudDtcbiAgfVxuXG4gIGlzVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uUHJlc2VudEJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IHRvcExldmVsTWV0YUFzc2VydGlvbiA9IHRoaXMuZmluZFRvcExldmVsTWV0YUFzc2VydGlvbkJ5UmVmZXJlbmNlKHJlZmVyZW5jZSksXG4gICAgICAgICAgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uUHJlc2VudCA9ICh0b3BMZXZlbE1ldGFBc3NlcnRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHRvcExldmVsTWV0YUFzc2VydGlvblByZXNlbnQ7XG4gIH1cblxuICBnZXRGaWxlQ29udGV4dCgpIHtcbiAgICBjb25zdCBmaWxlQ29udGV4dCA9IHRoaXM7IC8vL1xuXG4gICAgcmV0dXJuIGZpbGVDb250ZXh0O1xuICB9XG5cbiAgZ2V0RGVwdGgoKSB7XG4gICAgbGV0IGRlcHRoID0gdGhpcy5jb250ZXh0LmdldERlcHRoKCk7XG5cbiAgICBkZXB0aCsrO1xuXG4gICAgcmV0dXJuIGRlcHRoO1xuICB9XG5cbiAgbm9kZUFzU3RyaW5nKG5vZGUpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBub2RlQXNTdHJpbmcobm9kZSwgdGhpcy50b2tlbnMpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIG5vZGVzQXNTdHJpbmcobm9kZSkge1xuICAgIGNvbnN0IHN0cmluZyA9IG5vZGVzQXNTdHJpbmcobm9kZSwgdGhpcy50b2tlbnMpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHRyYWNlKG1lc3NhZ2UsIG5vZGUgPSBudWxsKSB7XG4gICAgY29uc3QgbGV2ZWwgPSBUUkFDRV9MRVZFTDtcblxuICAgIHRoaXMud3JpdGVUb0xvZyhsZXZlbCwgbWVzc2FnZSwgbm9kZSk7XG4gIH1cblxuICBkZWJ1ZyhtZXNzYWdlLCBub2RlID0gbnVsbCkge1xuICAgIGNvbnN0IGxldmVsID0gREVCVUdfTEVWRUw7XG5cbiAgICB0aGlzLndyaXRlVG9Mb2cobGV2ZWwsIG1lc3NhZ2UsIG5vZGUpO1xuICB9XG5cbiAgaW5mbyhtZXNzYWdlLCBub2RlID0gbnVsbCkge1xuICAgIGNvbnN0IGxldmVsID0gSU5GT19MRVZFTDtcblxuICAgIHRoaXMud3JpdGVUb0xvZyhsZXZlbCwgbWVzc2FnZSwgbm9kZSk7XG4gIH1cblxuICB3YXJuaW5nKG1lc3NhZ2UsIG5vZGUgPSBudWxsKSB7XG4gICAgY29uc3QgbGV2ZWwgPSBXQVJOSU5HX0xFVkVMO1xuXG4gICAgdGhpcy53cml0ZVRvTG9nKGxldmVsLCBtZXNzYWdlLCBub2RlKTtcbiAgfVxuXG4gIGVycm9yKG1lc3NhZ2UsIG5vZGUgPSBudWxsKSB7XG4gICAgY29uc3QgbGV2ZWwgPSBFUlJPUl9MRVZFTDtcblxuICAgIHRoaXMud3JpdGVUb0xvZyhsZXZlbCwgbWVzc2FnZSwgbm9kZSk7XG4gIH1cblxuICB3cml0ZVRvTG9nKGxldmVsLCBtZXNzYWdlLCBub2RlKSB7XG4gICAgY29uc3QgbGluZUluZGV4ID0gbGluZUluZGV4RnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdGhpcy50b2tlbnMsIHRoaXMubGluZUluZGV4KSxcbiAgICAgICAgICBmaWxlUGF0aCA9IChsaW5lSW5kZXggPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZVBhdGggOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gICAgdGhpcy5jb250ZXh0LndyaXRlVG9Mb2cobGV2ZWwsIG1lc3NhZ2UsIGZpbGVQYXRoLCBsaW5lSW5kZXgpO1xuXG4gICAgdGhpcy5saW5lSW5kZXggPSBsaW5lSW5kZXg7XG4gIH1cblxuICB2ZXJpZnkoKSB7XG4gICAgbGV0IHZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICB0aGlzLnByZXBhcmUoKTtcblxuICAgIGlmICh0aGlzLm5vZGUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMud2FybmluZyhgVW5hYmxlIHRvIHZlcmlmeSB0aGUgJyR7dGhpcy5maWxlUGF0aH0nIGZpbGUgYmVjYXVzZSBpdCBjYW5ub3QgYmUgcGFyc2VkLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlYnVnKGBWZXJpZnlpbmcgdGhlICcke3RoaXMuZmlsZVBhdGh9JyBmaWxlLi4uYCk7XG5cbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICAgIGZpbGVOb2RlID0gdGhpcy5ub2RlOyAvLy9cblxuICAgICAgdmVyaWZpZXMgPSB2ZXJpZnlGaWxlKGZpbGVOb2RlLCBjb250ZXh0KTtcblxuICAgICAgdmVyaWZpZXMgP1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCkgOlxuICAgICAgICAgIHRoaXMuY2xlYXIoKTtcblxuICAgICAgaWYgKHZlcmlmaWVzKSB7XG4gICAgICAgIHRoaXMuaW5mbyhgLi4udmVyaWZpZWQgdGhlICcke3RoaXMuZmlsZVBhdGh9JyBmaWxlLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllcztcbiAgfVxuXG4gIHByZXBhcmUoKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zICE9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZSA9IHRoaXMuZmluZEZpbGUodGhpcy5maWxlUGF0aCksXG4gICAgICAgICAgbGV4ZXIgPSB0aGlzLmdldExleGVyKCksXG4gICAgICAgICAgcGFyc2VyID0gdGhpcy5nZXRQYXJzZXIoKSxcbiAgICAgICAgICBjb250ZW50ID0gZmlsZS5nZXRDb250ZW50KCk7XG5cbiAgICB0aGlzLnRva2VucyA9IGxleGVyLnRva2VuaXNlKGNvbnRlbnQpO1xuXG4gICAgdGhpcy5ub2RlID0gcGFyc2VyLnBhcnNlKHRoaXMudG9rZW5zKTtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMubGluZUluZGV4ID0gbnVsbDtcblxuICAgIHRoaXMudHlwZXMgPSBbXTtcbiAgICB0aGlzLnJ1bGVzID0gW107XG4gICAgdGhpcy5heGlvbXMgPSBbXTtcbiAgICB0aGlzLmxlbW1hcyA9IFtdO1xuICAgIHRoaXMudGhlb3JlbXMgPSBbXTtcbiAgICB0aGlzLnZhcmlhYmxlcyA9IFtdO1xuICAgIHRoaXMubWV0YUxlbW1hcyA9IFtdO1xuICAgIHRoaXMuY29uamVjdHVyZXMgPSBbXTtcbiAgICB0aGlzLmNvbWJpbmF0b3JzID0gW107XG4gICAgdGhpcy50eXBlUHJlZml4ZXMgPSBbXTtcbiAgICB0aGlzLmNvbnN0cnVjdG9ycyA9IFtdO1xuICAgIHRoaXMubWV0YXRoZW9yZW1zID0gW107XG4gICAgdGhpcy5tZXRhdmFyaWFibGVzID0gW107XG4gIH1cblxuICBjb21wbGV0ZSgpIHtcbiAgICB0aGlzLmxpbmVJbmRleCA9IG51bGw7XG4gIH1cblxuICBpbml0aWFsaXNlKGpzb24pIHtcbiAgICBjb25zdCBmaWxlQ29udGV4dCA9IHRoaXM7IC8vL1xuXG4gICAgdGhpcy50eXBlcyA9IFtdO1xuXG4gICAgdHlwZXNGcm9tSlNPTihqc29uLCB0aGlzLnR5cGVzLCBmaWxlQ29udGV4dCk7XG5cbiAgICB0aGlzLnJ1bGVzID0gcnVsZXNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG5cbiAgICB0aGlzLmF4aW9tcyA9IGF4aW9tc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcblxuICAgIHRoaXMubGVtbWFzID0gbGVtbWFzRnJvbU5vdGhpbmcoKTtcblxuICAgIHRoaXMudGhlb3JlbXMgPSB0aGVvcmVtc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcblxuICAgIHRoaXMudmFyaWFibGVzID0gdmFyaWFibGVzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuXG4gICAgdGhpcy5tZXRhTGVtbWFzID0gbWV0YUxlbW1hc0Zyb21Ob3RoaW5nKCk7XG5cbiAgICB0aGlzLmNvbmplY3R1cmVzID0gY29uamVjdHVyZXNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG5cbiAgICB0aGlzLmNvbWJpbmF0b3JzID0gY29tYmluYXRvcnNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG5cbiAgICB0aGlzLnR5cGVQcmVmaXhlcyA9IHR5cGVQcmVmaXhlc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcblxuICAgIHRoaXMuY29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuXG4gICAgdGhpcy5tZXRhdGhlb3JlbXMgPSBtZXRhdGhlb3JlbXNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG5cbiAgICB0aGlzLm1ldGF2YXJpYWJsZXMgPSBtZXRhdmFyaWFibGVzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IHR5cGVzSlNPTiA9IHR5cGVzVG9UeXBlc0pTT04odGhpcy50eXBlcyksXG4gICAgICAgICAgcnVsZXNKU09OID0gcnVsZXNUb1J1bGVzSlNPTih0aGlzLnJ1bGVzKSxcbiAgICAgICAgICBheGlvbXNKU09OID0gYXhpb21zVG9BeGlvbXNKU09OKHRoaXMuYXhpb21zKSxcbiAgICAgICAgICB0aGVvcmVtc0pTT04gPSB0aGVvcmVtc1RvVGhlb3JlbXNKU09OKHRoaXMudGhlb3JlbXMpLFxuICAgICAgICAgIHZhcmlhYmxlc0pTT04gPSB2YXJpYWJsZXNUb1ZhcmlhYmxlc0pTT04odGhpcy52YXJpYWJsZXMpLFxuICAgICAgICAgIGNvbmplY3R1cmVzSlNPTiA9IGNvbmplY3R1cmVzVG9Db25qZWN0dXJlc0pTT04odGhpcy5jb25qZWN0dXJlcyksXG4gICAgICAgICAgY29tYmluYXRvcnNKU09OID0gY29tYmluYXRvcnNUb0NvbWJpbmF0b3JzSlNPTih0aGlzLmNvbWJpbmF0b3JzKSxcbiAgICAgICAgICB0eXBlUHJlZml4ZXNKU09OID0gdHlwZVByZWZpeGVzVG9UeXBlUHJlZml4ZXNKU09OKHRoaXMudHlwZVByZWZpeGVzKSxcbiAgICAgICAgICBjb25zdHJ1Y3RvcnNKU09OID0gY29uc3RydWN0b3JzVG9Db25zdHJ1Y3RvcnNKU09OKHRoaXMuY29uc3RydWN0b3JzKSxcbiAgICAgICAgICBtZXRhdGhlb3JlbXNKU09OID0gbWV0YXRoZW9yZW1zVG9NZXRhdGhlb3JlbXNKU09OKHRoaXMubWV0YXRoZW9yZW1zKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVzSlNPTiA9IG1ldGF2YXJpYWJsZXNUb01ldGF2YXJpYWJsZXNKU09OKHRoaXMubWV0YXZhcmlhYmxlcyksXG4gICAgICAgICAgZmlsZVBhdGggPSB0aGlzLmZpbGVQYXRoLFxuICAgICAgICAgIHR5cGVzID0gdHlwZXNKU09OLCAgLy8vXG4gICAgICAgICAgcnVsZXMgPSBydWxlc0pTT04sICAvLy9cbiAgICAgICAgICBheGlvbXMgPSBheGlvbXNKU09OLCAgLy8vXG4gICAgICAgICAgdGhlb3JlbXMgPSB0aGVvcmVtc0pTT04sICAvLy9cbiAgICAgICAgICB2YXJpYWJsZXMgPSB2YXJpYWJsZXNKU09OLCAgLy8vXG4gICAgICAgICAgY29uamVjdHVyZXMgPSBjb25qZWN0dXJlc0pTT04sICAvLy9cbiAgICAgICAgICBjb21iaW5hdG9ycyA9IGNvbWJpbmF0b3JzSlNPTiwgIC8vL1xuICAgICAgICAgIHR5cGVQcmVmaXhlcyA9IHR5cGVQcmVmaXhlc0pTT04sICAvLy9cbiAgICAgICAgICBjb25zdHJ1Y3RvcnMgPSBjb25zdHJ1Y3RvcnNKU09OLCAgLy8vXG4gICAgICAgICAgbWV0YXRoZW9yZW1zID0gbWV0YXRoZW9yZW1zSlNPTiwgIC8vL1xuICAgICAgICAgIG1ldGF2YXJpYWJsZXMgPSBtZXRhdmFyaWFibGVzSlNPTiwgIC8vL1xuICAgICAgICAgIGpzb24gPSB7XG4gICAgICAgICAgICBmaWxlUGF0aCxcbiAgICAgICAgICAgIHR5cGVzLFxuICAgICAgICAgICAgcnVsZXMsXG4gICAgICAgICAgICBheGlvbXMsXG4gICAgICAgICAgICB0aGVvcmVtcyxcbiAgICAgICAgICAgIHZhcmlhYmxlcyxcbiAgICAgICAgICAgIGNvbmplY3R1cmVzLFxuICAgICAgICAgICAgY29tYmluYXRvcnMsXG4gICAgICAgICAgICB0eXBlUHJlZml4ZXMsXG4gICAgICAgICAgICBjb25zdHJ1Y3RvcnMsXG4gICAgICAgICAgICBtZXRhdGhlb3JlbXMsXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVzXG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21GaWxlKGZpbGUsIGNvbnRleHQpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGZpbGUuZ2V0UGF0aCgpLFxuICAgICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgICAgdG9rZW5zID0gbnVsbCxcbiAgICAgICAgICBub2RlID0gbnVsbCxcbiAgICAgICAgICB0eXBlcyA9IFtdLFxuICAgICAgICAgIHJ1bGVzID0gW10sXG4gICAgICAgICAgYXhpb21zID0gW10sXG4gICAgICAgICAgbGVtbWFzID0gW10sXG4gICAgICAgICAgdGhlb3JlbXMgPSBbXSxcbiAgICAgICAgICB2YXJpYWJsZXMgPSBbXSxcbiAgICAgICAgICBtZXRhTGVtbWFzID0gW10sXG4gICAgICAgICAgY29uamVjdHVyZXMgPSBbXSxcbiAgICAgICAgICBjb21iaW5hdG9ycyA9IFtdLFxuICAgICAgICAgIHR5cGVQcmVmaXhlcyA9IFtdLFxuICAgICAgICAgIGNvbnN0cnVjdG9ycyA9IFtdLFxuICAgICAgICAgIG1ldGF0aGVvcmVtcyA9IFtdLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZXMgPSBbXSxcbiAgICAgICAgICBmaWxlQ29udGV4dCA9IG5ldyBGaWxlQ29udGV4dChjb250ZXh0LCBmaWxlUGF0aCwgbGluZUluZGV4LCB0b2tlbnMsIG5vZGUsIHR5cGVzLCBydWxlcywgYXhpb21zLCBsZW1tYXMsIHRoZW9yZW1zLCB2YXJpYWJsZXMsIG1ldGFMZW1tYXMsIGNvbmplY3R1cmVzLCBjb21iaW5hdG9ycywgdHlwZVByZWZpeGVzLCBjb25zdHJ1Y3RvcnMsIG1ldGF0aGVvcmVtcywgbWV0YXZhcmlhYmxlcyk7XG5cbiAgICByZXR1cm4gZmlsZUNvbnRleHQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbUZpbGVQYXRoKGZpbGVQYXRoLCBjb250ZXh0KSB7XG4gICAgY29uc3QgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgICB0b2tlbnMgPSBudWxsLFxuICAgICAgICAgIG5vZGUgPSBudWxsLFxuICAgICAgICAgIHR5cGVzID0gbnVsbCxcbiAgICAgICAgICBydWxlcyA9IG51bGwsXG4gICAgICAgICAgYXhpb21zID0gbnVsbCxcbiAgICAgICAgICBsZW1tYXMgPSBudWxsLFxuICAgICAgICAgIHRoZW9yZW1zID0gbnVsbCxcbiAgICAgICAgICB2YXJpYWJsZXMgPSBudWxsLFxuICAgICAgICAgIG1ldGFMZW1tYXMgPSBudWxsLFxuICAgICAgICAgIGNvbmplY3R1cmVzID0gbnVsbCxcbiAgICAgICAgICBjb21iaW5hdG9ycyA9IG51bGwsXG4gICAgICAgICAgdHlwZVByZWZpeGVzID0gbnVsbCxcbiAgICAgICAgICBjb25zdHJ1Y3RvcnMgPSBudWxsLFxuICAgICAgICAgIG1ldGF0aGVvcmVtcyA9IG51bGwsXG4gICAgICAgICAgbWV0YXZhcmlhYmxlcyA9IG51bGwsXG4gICAgICAgICAgZmlsZUNvbnRleHQgPSBuZXcgRmlsZUNvbnRleHQoY29udGV4dCwgZmlsZVBhdGgsIGxpbmVJbmRleCwgdG9rZW5zLCBub2RlLCB0eXBlcywgcnVsZXMsIGF4aW9tcywgbGVtbWFzLCB0aGVvcmVtcywgdmFyaWFibGVzLCBtZXRhTGVtbWFzLCBjb25qZWN0dXJlcywgY29tYmluYXRvcnMsIHR5cGVQcmVmaXhlcywgY29uc3RydWN0b3JzLCBtZXRhdGhlb3JlbXMsIG1ldGF2YXJpYWJsZXMpO1xuXG4gICAgcmV0dXJuIGZpbGVDb250ZXh0O1xuICB9XG59XG4iXSwibmFtZXMiOlsiRmlsZUNvbnRleHQiLCJwdXNoIiwiYXJyYXlVdGlsaXRpZXMiLCJmaWx0ZXIiLCJub2RlQXNTdHJpbmciLCJub2RlVXRpbGl0aWVzIiwibm9kZXNBc1N0cmluZyIsImNoYWluQ29udGV4dCIsImNvbnRleHRVdGlsaXRpZXMiLCJsaW5lSW5kZXhGcm9tTm9kZUFuZFRva2VucyIsIkxFVkVMUyIsIlRSQUNFX0xFVkVMIiwiREVCVUdfTEVWRUwiLCJJTkZPX0xFVkVMIiwiV0FSTklOR19MRVZFTCIsIkVSUk9SX0xFVkVMIiwiY29udGV4dCIsImZpbGVQYXRoIiwibGluZUluZGV4IiwidG9rZW5zIiwibm9kZSIsInR5cGVzIiwicnVsZXMiLCJheGlvbXMiLCJsZW1tYXMiLCJ0aGVvcmVtcyIsInZhcmlhYmxlcyIsIm1ldGFMZW1tYXMiLCJjb25qZWN0dXJlcyIsImNvbWJpbmF0b3JzIiwidHlwZVByZWZpeGVzIiwiY29uc3RydWN0b3JzIiwibWV0YXRoZW9yZW1zIiwibWV0YXZhcmlhYmxlcyIsImdldENvbnRleHQiLCJnZXRGaWxlUGF0aCIsImdldExpbmVJbmRleCIsImdldFRva2VucyIsImdldE5vZGUiLCJnZXRKdWRnZW1lbnRzIiwianVkZ2VtZW50cyIsImdldEVxdWl2YWxlbmNlcyIsIkVxdWl2YWxlbmNlcyIsImVsZW1lbnRzIiwiZXF1aXZhbGVuY2VzIiwiZnJvbU5vdGhpbmciLCJnZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsImdldExhYmVscyIsImluY2x1ZGVSZWxlYXNlIiwibGFiZWxzIiwicmVsZWFzZUNvbnRleHRMYWJlbHMiLCJmb3JFYWNoIiwicnVsZSIsInJ1bGVMYWJlbHMiLCJheGlvbSIsImF4aW9tTGFiZWxzIiwibGVtbWEiLCJsZW1tYUxhYmVscyIsInRoZW9yZW0iLCJ0aGVvcmVtTGFiZWxzIiwiY29uamVjdHVyZSIsImNvbmplY3R1cmVMYWJlbHMiLCJtZXRhdGhlb3JlbSIsIm1ldGF0aGVvcmVtTGFiZWwiLCJnZXRMYWJlbCIsImdldFR5cGVzIiwiaW5jbHVkZURlcGVuZGVuY2llcyIsImdldFJ1bGVzIiwiZ2V0QXhpb21zIiwiZ2V0TGVtbWFzIiwiZ2V0VGhlb3JlbXMiLCJnZXRWYXJpYWJsZXMiLCJnZXRQcm9jZWR1cmVzIiwicHJvY2VkdXJlcyIsImdldE1ldGFMZW1tYXMiLCJnZXRDb25qZWN0dXJlcyIsImdldENvbWJpbmF0b3JzIiwiZ2V0VHlwZVByZWZpeGVzIiwiZ2V0Q29uc3RydWN0b3JzIiwiZ2V0TWV0YXRoZW9yZW1zIiwiZ2V0TWV0YXZhcmlhYmxlcyIsImFkZFR5cGUiLCJ0eXBlIiwiYWRkUnVsZSIsImFkZEF4aW9tIiwiYWRkTGVtbWEiLCJhZGRUaGVvcmVtIiwiYWRkVmFyaWFibGUiLCJ2YXJpYWJsZSIsImFkZE1ldGFMZW1tYSIsIm1ldGFMZW1tYSIsImFkZENvbmplY3R1cmUiLCJhZGRDb21iaW5hdG9yIiwiY29tYmluYXRvciIsImFkZFR5cGVQcmVmaXgiLCJ0eXBlUHJlZml4IiwiYWRkQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvciIsImFkZE1ldGF0aGVvcmVtIiwiYWRkTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlIiwiZmluZExhYmVsQnlSZWZlcmVuY2UiLCJyZWZlcmVuY2UiLCJsYWJlbCIsImZpbmQiLCJtZXRhdmFyaWFibGVVbmlmaWVzIiwidW5pZnlSZWZlcmVuY2UiLCJmaW5kTWV0YUxlbW1hQnlSZWZlcmVuY2UiLCJtZXRhTGVtbWFDb21wYXJlc1RvUmVmZXJlbmNlIiwiY29tcGFyZVJlZmVyZW5jZSIsImZpbmRNZXRhdGhlb3JlbUJ5UmVmZXJlbmNlIiwibWV0YXRoZW9yZW1Db21wYXJlc1RvUmVmZXJlbmNlIiwiZmluZFJ1bGVCeVJlZmVyZW5jZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwicnVsZUNvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lIiwiY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUiLCJmaW5kQXhpb21CeVJlZmVyZW5jZSIsImF4aW9tQ29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWUiLCJmaW5kTGVtbWFCeVJlZmVyZW5jZSIsImxlbW1hQ29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWUiLCJmaW5kVGhlb3JlbUJ5UmVmZXJlbmNlIiwidGhlb3JlbUNvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lIiwiZmluZFByb2NlZHVyZUJ5TmFtZSIsIm5hbWUiLCJwcm9jZWR1cmUiLCJuYW1lTWF0Y2hlcyIsIm1hdGNoTmFtZSIsImZpbmRDb25qZWN0dXJlQnlSZWZlcmVuY2UiLCJjb25qZWN0dXJlQ29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWUiLCJmaW5kTWV0YUxlbW1hc0J5UmVmZXJlbmNlIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uVW5pZmllcyIsInVuaWZ5VG9wTGV2ZWxNZXRhQXNzZXJ0aW9uIiwiZmluZE1ldGF0aGVvcmVtc0J5UmVmZXJlbmNlIiwiZmluZFRvcExldmVsTWV0YUFzc2VydGlvbkJ5UmVmZXJlbmNlIiwiZmluZFRvcExldmVsTWV0YUFzc2VydGlvbnNCeVJlZmVyZW5jZSIsInRvcExldmVsTWV0YUFzc2VydGlvbnMiLCJmaW5kVG9wTGV2ZWxBc3NlcnRpb25CeVJlZmVyZW5jZSIsInRvcExldmVsQXNzZXJ0aW9uIiwiZmluZE1ldGF2YXJpYWJsZSIsInNwZWNpZmljTWV0YXZhcmlhYmxlIiwiZ2VuZXJhbE1ldGF2YXJpYWJsZSIsInVuaWZ5TWV0YXZhcmlhYmxlIiwiZmluZFR5cGVCeVR5cGVOYW1lIiwidHlwZU5hbWUiLCJiYXNlVHlwZSIsImJhc2VUeXBlRnJvbU5vdGhpbmciLCJ0eXBlQ29tcGFyZXNUb1R5cGVOYW1lIiwiY29tcGFyZVR5cGVOYW1lIiwiZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZSIsIm5vbWluYWxUeXBlTmFtZSIsInR5cGVDb21wYXJlc1RvTm9taW5hbFR5cGVOYW1lIiwiY29tcGFyZU5vbWluYWxUeXBlTmFtZSIsImZpbmRUeXBlQnlQcmVmaXhlZFR5cGVOYW1lIiwicHJlZml4ZWRUeXBlTmFtZSIsInR5cGVDb21wYXJlc1RvUHJlZml4ZWRUeXBlTmFtZSIsImNvbXBhcmVQcmVmaXhlZFR5cGVOYW1lIiwiZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUiLCJtZXRhVHlwZU5hbWUiLCJtZXRhVHlwZXMiLCJnZXRNZXRhVHlwZXMiLCJtZXRhVHlwZSIsIm1ldGFUeXBlQ29tcGFyZXNUb01ldGFUeXBlTmFtZSIsImNvbXBhcmVNZXRhVHlwZU5hbWUiLCJmaW5kVHlwZVByZWZpeEJ5VHlwZVByZWZpeE5hbWUiLCJ0eXBlUHJlZml4TmFtZSIsInR5cGVQcmVmaXhDb21wYXJlc1RvVHlwZVByZWZpeE5hbWUiLCJjb21wYXJlVHlwZVByZWZpeE5hbWUiLCJmaW5kVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllciIsInZhcmlhYmxlSWRlbnRpZmllciIsInZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpZmllciIsImNvbXBhcmVWYXJpYWJsZUlkZW50aWZpZXIiLCJmaW5kTGFiZWxCeU1ldGF2YXJpYWJsZU5hbWUiLCJsYWJlbENvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lIiwiZmluZExhYmVsQnlNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVFcXVhbFRvTGFiZWxNZXRhdmFyaWFibGUiLCJpc01ldGF2YXJpYWJsZUVxdWFsVG9NZXRhdmFyaWFibGUiLCJmaW5kSnVkZ2VtZW50QnlNZXRhdmFyaWFibGUiLCJqdWRnZW1lbnQiLCJqdWRnZW1lbnRTaW5ndWxhciIsImlzU2luZ3VsYXIiLCJqdWRnZW1lbnRNZXRhdmFyaWFibGUiLCJnZXRNZXRhdmFyaWFibGUiLCJqdWRnZW1lbnRNZXRhdmFyaWFibGVFcXVhbFRvTWV0YXZhcmlhYmxlIiwiaXNFcXVhbFRvIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZUNvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lIiwiaXNNZXRhdmFyaWFibGVQcmVzZW50IiwibWV0YXZhcmlhYmxlUHJlc2VudCIsImlzVHlwZVByZXNlbnRCeVR5cGVOYW1lIiwidHlwZVByZXNlbnQiLCJpc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUiLCJpc1R5cGVQcmVzZW50QnlQcmVmaXhlZFR5cGVOYW1lIiwiaXNUeXBlUHJlZml4UHJlc2VudEJ5VHlwZVByZWZpeE5hbWUiLCJ0eXBlUHJlZml4UHJlc2VudCIsImlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZVByZXNlbnQiLCJpc0xhYmVsUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZSIsImxhYmVsUHJlc2VudCIsImlzTGFiZWxQcmVzZW50QnlNZXRhdmFyaWFibGUiLCJpc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUiLCJpc0xhYmVsUHJlc2VudEJ5UmVmZXJlbmNlIiwic29tZSIsImxhYmVsVW5pZmllcyIsInVuaWZ5TGFiZWwiLCJpc1Byb2NlZHVyZVByZXNlbnRCeU5hbWUiLCJwcm9jZWR1cmVQcmVzZW50IiwiaXNNZXRhdmFyaWFibGVQcmVzZW50QnlSZWZlcmVuY2UiLCJpc1RvcExldmVsTWV0YUFzc2VydGlvblByZXNlbnRCeVJlZmVyZW5jZSIsInRvcExldmVsTWV0YUFzc2VydGlvblByZXNlbnQiLCJnZXRGaWxlQ29udGV4dCIsImZpbGVDb250ZXh0IiwiZ2V0RGVwdGgiLCJkZXB0aCIsInN0cmluZyIsInRyYWNlIiwibWVzc2FnZSIsImxldmVsIiwid3JpdGVUb0xvZyIsImRlYnVnIiwiaW5mbyIsIndhcm5pbmciLCJlcnJvciIsInZlcmlmeSIsInZlcmlmaWVzIiwicHJlcGFyZSIsImZpbGVOb2RlIiwidmVyaWZ5RmlsZSIsImNvbXBsZXRlIiwiY2xlYXIiLCJmaWxlIiwiZmluZEZpbGUiLCJsZXhlciIsImdldExleGVyIiwicGFyc2VyIiwiZ2V0UGFyc2VyIiwiY29udGVudCIsImdldENvbnRlbnQiLCJ0b2tlbmlzZSIsInBhcnNlIiwiaW5pdGlhbGlzZSIsImpzb24iLCJ0eXBlc0Zyb21KU09OIiwicnVsZXNGcm9tSlNPTiIsImF4aW9tc0Zyb21KU09OIiwibGVtbWFzRnJvbU5vdGhpbmciLCJ0aGVvcmVtc0Zyb21KU09OIiwidmFyaWFibGVzRnJvbUpTT04iLCJtZXRhTGVtbWFzRnJvbU5vdGhpbmciLCJjb25qZWN0dXJlc0Zyb21KU09OIiwiY29tYmluYXRvcnNGcm9tSlNPTiIsInR5cGVQcmVmaXhlc0Zyb21KU09OIiwiY29uc3RydWN0b3JzRnJvbUpTT04iLCJtZXRhdGhlb3JlbXNGcm9tSlNPTiIsIm1ldGF2YXJpYWJsZXNGcm9tSlNPTiIsInRvSlNPTiIsInR5cGVzSlNPTiIsInR5cGVzVG9UeXBlc0pTT04iLCJydWxlc0pTT04iLCJydWxlc1RvUnVsZXNKU09OIiwiYXhpb21zSlNPTiIsImF4aW9tc1RvQXhpb21zSlNPTiIsInRoZW9yZW1zSlNPTiIsInRoZW9yZW1zVG9UaGVvcmVtc0pTT04iLCJ2YXJpYWJsZXNKU09OIiwidmFyaWFibGVzVG9WYXJpYWJsZXNKU09OIiwiY29uamVjdHVyZXNKU09OIiwiY29uamVjdHVyZXNUb0NvbmplY3R1cmVzSlNPTiIsImNvbWJpbmF0b3JzSlNPTiIsImNvbWJpbmF0b3JzVG9Db21iaW5hdG9yc0pTT04iLCJ0eXBlUHJlZml4ZXNKU09OIiwidHlwZVByZWZpeGVzVG9UeXBlUHJlZml4ZXNKU09OIiwiY29uc3RydWN0b3JzSlNPTiIsImNvbnN0cnVjdG9yc1RvQ29uc3RydWN0b3JzSlNPTiIsIm1ldGF0aGVvcmVtc0pTT04iLCJtZXRhdGhlb3JlbXNUb01ldGF0aGVvcmVtc0pTT04iLCJtZXRhdmFyaWFibGVzSlNPTiIsIm1ldGF2YXJpYWJsZXNUb01ldGF2YXJpYWJsZXNKU09OIiwiZnJvbUZpbGUiLCJnZXRQYXRoIiwiZnJvbUZpbGVQYXRoIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztlQXdDcUJBOzs7eUJBdENVOzJCQUNpQjsrREFFM0I7eUJBRUU7c0JBQ0k7cUJBQ1M7b0JBd0JhOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVqRCxJQUFRQyxPQUFpQkMseUJBQWMsQ0FBL0JELE1BQU1FLFNBQVdELHlCQUFjLENBQXpCQyxRQUNOQyxlQUFnQ0MsMEJBQWEsQ0FBN0NELGNBQWNFLGdCQUFrQkQsMEJBQWEsQ0FBL0JDLGVBQ2RDLGVBQTZDQyw2QkFBZ0IsQ0FBN0RELGNBQWNFLDZCQUErQkQsNkJBQWdCLENBQS9DQyw0QkFDdURDLDJCQUFBQSxpQkFBTSxNQUEzRUMsY0FBcUVELFlBQXhERSxjQUF3REYsWUFBM0NHLGFBQTJDSCxZQUEvQkksZ0JBQStCSixZQUFoQkssY0FBZ0JMO0FBRTlELElBQUEsQUFBTVYsNEJBQU47YUFBTUEsWUFDUGdCLFFBQU8sRUFBRUMsUUFBUSxFQUFFQyxTQUFTLEVBQUVD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
|