occam-verify-cli 1.0.800 → 1.0.809
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/bounded.js +242 -0
- package/lib/context/branching.js +2 -2
- package/lib/context/ephemeral.js +186 -69
- package/lib/context/file/nominal.js +87 -52
- package/lib/context/liminal.js +2 -2
- package/lib/context/synoptic.js +212 -0
- package/lib/context.js +57 -17
- package/lib/element/assertion/defined.js +3 -3
- package/lib/element/assumption/metaLevel.js +6 -4
- package/lib/element/combinator.js +4 -2
- package/lib/element/conclusion.js +4 -2
- package/lib/element/constructor.js +4 -2
- package/lib/element/declaration/metavariable.js +10 -9
- package/lib/element/declaration/variable.js +7 -7
- package/lib/element/deduction.js +4 -2
- package/lib/element/derivation.js +1 -7
- package/lib/element/label.js +9 -5
- package/lib/element/metavariable.js +34 -34
- package/lib/element/procedureCall.js +2 -2
- package/lib/element/proof.js +2 -2
- package/lib/element/proofAssertion/premise.js +4 -3
- package/lib/element/proofAssertion/step.js +5 -3
- package/lib/element/reference.js +6 -4
- package/lib/element/rule.js +2 -2
- package/lib/element/statement.js +9 -1
- package/lib/element/subproof.js +2 -2
- package/lib/element/substitution/frame.js +43 -29
- package/lib/element/substitution/reference.js +38 -28
- package/lib/element/substitution/statement.js +52 -42
- package/lib/element/substitution/term.js +49 -35
- package/lib/element/topLevelAssertion.js +2 -2
- package/lib/element/topLevelMetaAssertion.js +2 -2
- package/lib/element/variable.js +6 -7
- package/lib/preamble.js +1 -2
- package/lib/process/assign.js +11 -10
- package/lib/process/equate.js +3 -2
- package/lib/process/unify.js +7 -7
- package/lib/utilities/context.js +51 -44
- package/lib/utilities/element.js +1 -1
- package/lib/utilities/equivalences.js +131 -0
- package/lib/utilities/instance.js +3 -3
- package/lib/utilities/json.js +59 -1
- package/lib/utilities/validation.js +4 -3
- package/package.json +4 -4
- package/src/context/{proof.js → bounded.js} +84 -85
- package/src/context/branching.js +2 -2
- package/src/context/ephemeral.js +421 -237
- package/src/context/file/nominal.js +127 -77
- package/src/context/liminal.js +2 -2
- package/src/context/synoptic.js +290 -0
- package/src/context.js +81 -20
- package/src/element/assertion/defined.js +4 -4
- package/src/element/assumption/metaLevel.js +8 -6
- package/src/element/combinator.js +4 -2
- package/src/element/conclusion.js +4 -2
- package/src/element/constructor.js +4 -2
- package/src/element/declaration/metavariable.js +10 -8
- package/src/element/declaration/variable.js +8 -7
- package/src/element/deduction.js +4 -2
- package/src/element/derivation.js +0 -2
- package/src/element/label.js +11 -7
- package/src/element/metavariable.js +11 -11
- package/src/element/procedureCall.js +2 -2
- package/src/element/proof.js +2 -2
- package/src/element/proofAssertion/premise.js +4 -4
- package/src/element/proofAssertion/step.js +6 -4
- package/src/element/reference.js +7 -5
- package/src/element/rule.js +2 -2
- package/src/element/statement.js +14 -0
- package/src/element/subproof.js +2 -2
- package/src/element/substitution/frame.js +47 -32
- package/src/element/substitution/reference.js +44 -34
- package/src/element/substitution/statement.js +69 -58
- package/src/element/substitution/term.js +53 -38
- package/src/element/topLevelAssertion.js +2 -2
- package/src/element/topLevelMetaAssertion.js +2 -2
- package/src/element/variable.js +6 -7
- package/src/preamble.js +0 -1
- package/src/process/assign.js +17 -14
- package/src/process/equate.js +3 -1
- package/src/process/unify.js +10 -13
- package/src/utilities/context.js +54 -49
- package/src/utilities/element.js +1 -0
- package/src/utilities/equivalences.js +158 -0
- package/src/utilities/instance.js +3 -3
- package/src/utilities/json.js +66 -0
- package/src/utilities/validation.js +6 -5
- package/lib/context/proof.js +0 -242
- package/lib/context/synthetic.js +0 -135
- package/lib/element/equivalences.js +0 -173
- package/src/context/synthetic.js +0 -180
- package/src/element/equivalences.js +0 -237
package/lib/context/proof.js
DELETED
|
@@ -1,242 +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 _default;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _necessary = require("necessary");
|
|
12
|
-
const _context = /*#__PURE__*/ _interop_require_default(require("../context"));
|
|
13
|
-
const _elements = /*#__PURE__*/ _interop_require_default(require("../elements"));
|
|
14
|
-
function _interop_require_default(obj) {
|
|
15
|
-
return obj && obj.__esModule ? obj : {
|
|
16
|
-
default: obj
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
const { last, filter } = _necessary.arrayUtilities;
|
|
20
|
-
class ProofContext extends _context.default {
|
|
21
|
-
constructor(context, variables, judgements, assignments, equivalences, metaLevelAssumptions, subproofOrProofAssertions){
|
|
22
|
-
super(context);
|
|
23
|
-
this.variables = variables;
|
|
24
|
-
this.judgements = judgements;
|
|
25
|
-
this.assignments = assignments;
|
|
26
|
-
this.equivalences = equivalences;
|
|
27
|
-
this.metaLevelAssumptions = metaLevelAssumptions;
|
|
28
|
-
this.subproofOrProofAssertions = subproofOrProofAssertions;
|
|
29
|
-
}
|
|
30
|
-
getVariables() {
|
|
31
|
-
let variables;
|
|
32
|
-
const context = this.getContext();
|
|
33
|
-
variables = context.getVariables();
|
|
34
|
-
variables = [
|
|
35
|
-
...this.variables,
|
|
36
|
-
...variables
|
|
37
|
-
];
|
|
38
|
-
return variables;
|
|
39
|
-
}
|
|
40
|
-
getJudgements() {
|
|
41
|
-
let judgements;
|
|
42
|
-
const context = this.getContext();
|
|
43
|
-
judgements = context.getJudgements();
|
|
44
|
-
judgements = [
|
|
45
|
-
...this.judgements,
|
|
46
|
-
...judgements
|
|
47
|
-
];
|
|
48
|
-
return judgements;
|
|
49
|
-
}
|
|
50
|
-
getAssignments() {
|
|
51
|
-
return this.assignments;
|
|
52
|
-
}
|
|
53
|
-
getEquivalences() {
|
|
54
|
-
let equivalences;
|
|
55
|
-
let context;
|
|
56
|
-
context = this.getContext();
|
|
57
|
-
equivalences = context.getEquivalences();
|
|
58
|
-
context = this; ///
|
|
59
|
-
equivalences = this.equivalences.mergedWith(equivalences, context); ///
|
|
60
|
-
return equivalences;
|
|
61
|
-
}
|
|
62
|
-
getMetaLevelAssumptions() {
|
|
63
|
-
return this.metaLevelAssumptions;
|
|
64
|
-
}
|
|
65
|
-
getSubproofOrProofAssertions() {
|
|
66
|
-
let subproofOrProofAssertions;
|
|
67
|
-
const context = this.getContext();
|
|
68
|
-
subproofOrProofAssertions = context.getSubproofOrProofAssertions();
|
|
69
|
-
subproofOrProofAssertions = [
|
|
70
|
-
...subproofOrProofAssertions,
|
|
71
|
-
...this.subproofOrProofAssertions
|
|
72
|
-
];
|
|
73
|
-
return subproofOrProofAssertions;
|
|
74
|
-
}
|
|
75
|
-
getProofAssertions() {
|
|
76
|
-
const subproofOrProofAssertions = this.getSubproofOrProofAssertions(), proofAssertions = subproofOrProofAssertions.filter((subproofOrProofAssertion)=>{
|
|
77
|
-
const subproofOrProofAssertionproofAssertion = subproofOrProofAssertion.isProofAssertion();
|
|
78
|
-
if (subproofOrProofAssertionproofAssertion) {
|
|
79
|
-
return true;
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
return proofAssertions;
|
|
83
|
-
}
|
|
84
|
-
getLastStep() {
|
|
85
|
-
let lastStep = null;
|
|
86
|
-
const proofAssertions = this.getProofAssertions(), proofAssertionsLength = proofAssertions.length;
|
|
87
|
-
if (proofAssertionsLength > 0) {
|
|
88
|
-
const lastProofAssertion = last(proofAssertions);
|
|
89
|
-
lastStep = lastProofAssertion; ///
|
|
90
|
-
}
|
|
91
|
-
return lastStep;
|
|
92
|
-
}
|
|
93
|
-
isMetaLevel() {
|
|
94
|
-
let metaLevel = false;
|
|
95
|
-
if (this.metaLevelAssumptiona !== null) {
|
|
96
|
-
metaLevel = true;
|
|
97
|
-
} else {
|
|
98
|
-
const context = this.getContext();
|
|
99
|
-
metaLevel = context.isMetaLevel();
|
|
100
|
-
}
|
|
101
|
-
return metaLevel;
|
|
102
|
-
}
|
|
103
|
-
addEquality(equality) {
|
|
104
|
-
const context = this, equalityString = equality.getString();
|
|
105
|
-
context.trace(`Adding the '${equalityString}' equality to the proof context...`);
|
|
106
|
-
const equalityRelfexive = equality.isReflexive();
|
|
107
|
-
if (!equalityRelfexive) {
|
|
108
|
-
const { Equivalence } = _elements.default, equivalence = Equivalence.fromEquality(equality, context);
|
|
109
|
-
this.equivalences = this.equivalences.mergedWithEquivalence(equivalence, context);
|
|
110
|
-
context.debug(`...added the '${equalityString}' equality to the proof context.`);
|
|
111
|
-
} else {
|
|
112
|
-
context.debug(`The reflexive '${equalityString}' equality has not been added to the proof context.`);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
addVariable(variable) {
|
|
116
|
-
const context = this, variableString = variable.getString();
|
|
117
|
-
context.trace(`Adding the '${variableString}' variable to the proof context...`);
|
|
118
|
-
this.variables.push(variable);
|
|
119
|
-
context.debug(`...added the '${variableString}' variable to the proof context.`);
|
|
120
|
-
}
|
|
121
|
-
addJudgement(judgement) {
|
|
122
|
-
const context = this, judgementString = judgement.getString();
|
|
123
|
-
context.trace(`Adding the '${judgementString}' judgement to the proof context...`);
|
|
124
|
-
this.judgements.push(judgement);
|
|
125
|
-
context.debug(`...added the '${judgementString}' judgement to the proof context.`);
|
|
126
|
-
}
|
|
127
|
-
addAssignment(assignment) {
|
|
128
|
-
this.assignments.push(assignment);
|
|
129
|
-
}
|
|
130
|
-
assignAssignments() {
|
|
131
|
-
const context = this; ///
|
|
132
|
-
this.assignments.forEach((assignment)=>{
|
|
133
|
-
assignment(context);
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
addMetaLevelAssumption(metaLevelAssumption) {
|
|
137
|
-
if (this.metaLevelAssumptions === null) {
|
|
138
|
-
super.addMetaLevelAssumption(metaLevelAssumption);
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
const context = this, metaLevelAssumptionA = metaLevelAssumption, metaLevelAssumptionString = metaLevelAssumption.getString();
|
|
142
|
-
context.trace(`Adding the '${metaLevelAssumptionString}' meta-level assumption to the proof context...`);
|
|
143
|
-
const metaLevelAssumptionB = this.metaLevelAssumptions.find((metaLevelAssumption)=>{
|
|
144
|
-
const metaLevelAssumptionB = metaLevelAssumption, metaLevelAssumptionAEqualToAssumptionB = metaLevelAssumptionA.isEqualTo(metaLevelAssumptionB);
|
|
145
|
-
if (metaLevelAssumptionAEqualToAssumptionB) {
|
|
146
|
-
return true;
|
|
147
|
-
}
|
|
148
|
-
}) || null;
|
|
149
|
-
if (metaLevelAssumptionB !== null) {
|
|
150
|
-
context.debug(`The '${metaLevelAssumptionString}' metaLevelAssumption has already been added to the proof context.`);
|
|
151
|
-
} else {
|
|
152
|
-
this.metaLevelAssumptions.push(metaLevelAssumption);
|
|
153
|
-
context.debug(`...added the '${metaLevelAssumptionString}' meta-level assumption to the proof context.`);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
addSubproofOrProofAssertion(subproofOrProofAssertion) {
|
|
157
|
-
const context = this, subproofOrProofAssertionString = subproofOrProofAssertion.getString();
|
|
158
|
-
context.trace(`Adding the '${subproofOrProofAssertionString}' subproof or proof assertion to the proof context...`);
|
|
159
|
-
this.subproofOrProofAssertions.push(subproofOrProofAssertion);
|
|
160
|
-
context.debug(`...added the '${subproofOrProofAssertionString}' subproof or proof assertion to the proof context.`);
|
|
161
|
-
}
|
|
162
|
-
compareTermAndPropertyRelation(term, propertyRelation) {
|
|
163
|
-
const context = this, proofAssertions = this.getProofAssertions(), comparesToTermAndPropertyRelation = proofAssertions.some((proofAssertion)=>{
|
|
164
|
-
const comparesToTermAndPropertyRelation = proofAssertion.compareTermAndPropertyRelation(term, propertyRelation, context);
|
|
165
|
-
if (comparesToTermAndPropertyRelation) {
|
|
166
|
-
return true;
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
return comparesToTermAndPropertyRelation;
|
|
170
|
-
}
|
|
171
|
-
findEquivalenceByTerm(term) {
|
|
172
|
-
return this.equivalences.findEquivalenceByTerm(term);
|
|
173
|
-
}
|
|
174
|
-
findJudgementByMetavariableName(metavariableName) {
|
|
175
|
-
const judgements = this.getJudgements(), judgement = judgements.find((judgement)=>{
|
|
176
|
-
const judgementMetavariableComparesToMetavariable = judgement.compareMetavariableName(metavariableName);
|
|
177
|
-
if (judgementMetavariableComparesToMetavariable) {
|
|
178
|
-
return true;
|
|
179
|
-
}
|
|
180
|
-
}) || null;
|
|
181
|
-
return judgement;
|
|
182
|
-
}
|
|
183
|
-
findVariableByVariableIdentifier(variableIdentifier) {
|
|
184
|
-
const variables = this.getVariables(), variable = variables.find((variable)=>{
|
|
185
|
-
const variableComparesToVariableIdentifier = variable.compareVariableIdentifier(variableIdentifier);
|
|
186
|
-
if (variableComparesToVariableIdentifier) {
|
|
187
|
-
return true;
|
|
188
|
-
}
|
|
189
|
-
}) || null;
|
|
190
|
-
return variable;
|
|
191
|
-
}
|
|
192
|
-
findJudgementsByMetavariableNode(metavariableNode) {
|
|
193
|
-
const judgements = this.getJudgements();
|
|
194
|
-
filter(judgements, (judgement)=>{
|
|
195
|
-
const metavariableNodeMatches = judgement.matchMetavariableNode(metavariableNode);
|
|
196
|
-
if (metavariableNodeMatches) {
|
|
197
|
-
return true;
|
|
198
|
-
}
|
|
199
|
-
});
|
|
200
|
-
return judgements;
|
|
201
|
-
}
|
|
202
|
-
findMetaLevelAssumptionByMetaLevelAssumptionNode(metaLevelAssumptionNode) {
|
|
203
|
-
let metaLevelAssumption;
|
|
204
|
-
if (this.metaLevelAssumptions === null) {
|
|
205
|
-
metaLevelAssumption = super.findMetaLevelAssumptionByMetaLevelAssumptionNode(metaLevelAssumptionNode);
|
|
206
|
-
} else {
|
|
207
|
-
metaLevelAssumption = this.metaLevelAssumptions.find((metaLevelAssumption)=>{
|
|
208
|
-
const metaLevelAssumptionNodeMatches = metaLevelAssumption.matchMetaLevelAssumptionNode(metaLevelAssumptionNode);
|
|
209
|
-
if (metaLevelAssumptionNodeMatches) {
|
|
210
|
-
return true;
|
|
211
|
-
}
|
|
212
|
-
}) || null;
|
|
213
|
-
}
|
|
214
|
-
return metaLevelAssumption;
|
|
215
|
-
}
|
|
216
|
-
isJudgementPresentByMetavariableName(metavariableName) {
|
|
217
|
-
const judgement = this.findJudgementByMetavariableName(metavariableName), judgementPresent = judgement !== null;
|
|
218
|
-
return judgementPresent;
|
|
219
|
-
}
|
|
220
|
-
isVariablePresentByVariableIdentifier(variableIdentifier) {
|
|
221
|
-
const variable = this.findVariableByVariableIdentifier(variableIdentifier), variablePresent = variable !== null;
|
|
222
|
-
return variablePresent;
|
|
223
|
-
}
|
|
224
|
-
isTermGrounded(term) {
|
|
225
|
-
const context = this, equivalences = this.getEquivalences(), groundedTerms = [], definedVariables = [];
|
|
226
|
-
equivalences.separateGroundedTermsAndDefinedVariables(groundedTerms, definedVariables, context);
|
|
227
|
-
const termMatchesGroundedTerm = groundedTerms.some((groundedTerm)=>{
|
|
228
|
-
const groundedTermNode = groundedTerm.getNode(), groundedTermNodeMatches = term.matchTermNode(groundedTermNode);
|
|
229
|
-
if (groundedTermNodeMatches) {
|
|
230
|
-
return true;
|
|
231
|
-
}
|
|
232
|
-
}), termGrounded = termMatchesGroundedTerm; ///
|
|
233
|
-
return termGrounded;
|
|
234
|
-
}
|
|
235
|
-
static fromMetaLevelAssumptions(metaLevelAssumptions, context) {
|
|
236
|
-
const { Equivalences } = _elements.default, variables = [], judgements = [], assignments = [], equivalences = Equivalences.fromNothing(context), subproofOrProofAssertions = [], proofContext = new ProofContext(context, variables, judgements, assignments, equivalences, metaLevelAssumptions, subproofOrProofAssertions);
|
|
237
|
-
return proofContext;
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
const _default = ProofContext;
|
|
241
|
-
|
|
242
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L3Byb29mLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcbmltcG9ydCBlbGVtZW50cyBmcm9tIFwiLi4vZWxlbWVudHNcIjtcblxuY29uc3QgeyBsYXN0LCBmaWx0ZXIgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5jbGFzcyBQcm9vZkNvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgdmFyaWFibGVzLCBqdWRnZW1lbnRzLCBhc3NpZ25tZW50cywgZXF1aXZhbGVuY2VzLCBtZXRhTGV2ZWxBc3N1bXB0aW9ucywgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucykge1xuICAgIHN1cGVyKGNvbnRleHQpO1xuXG4gICAgdGhpcy52YXJpYWJsZXMgPSB2YXJpYWJsZXM7XG4gICAgdGhpcy5qdWRnZW1lbnRzID0ganVkZ2VtZW50cztcbiAgICB0aGlzLmFzc2lnbm1lbnRzID0gYXNzaWdubWVudHM7XG4gICAgdGhpcy5lcXVpdmFsZW5jZXMgPSBlcXVpdmFsZW5jZXM7XG4gICAgdGhpcy5tZXRhTGV2ZWxBc3N1bXB0aW9ucyA9IG1ldGFMZXZlbEFzc3VtcHRpb25zO1xuICAgIHRoaXMuc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRWYXJpYWJsZXMoKSB7XG4gICAgbGV0IHZhcmlhYmxlcztcblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHZhcmlhYmxlcyA9IGNvbnRleHQuZ2V0VmFyaWFibGVzKCk7XG5cbiAgICB2YXJpYWJsZXMgPSBbXG4gICAgICAuLi50aGlzLnZhcmlhYmxlcyxcbiAgICAgIC4uLnZhcmlhYmxlc1xuICAgIF07XG5cbiAgICByZXR1cm4gdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0SnVkZ2VtZW50cygpIHtcbiAgICBsZXQganVkZ2VtZW50cztcblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGp1ZGdlbWVudHMgPSBjb250ZXh0LmdldEp1ZGdlbWVudHMoKTtcblxuICAgIGp1ZGdlbWVudHMgPSBbIC8vL1xuICAgICAgLi4udGhpcy5qdWRnZW1lbnRzLFxuICAgICAgLi4uanVkZ2VtZW50c1xuICAgIF1cblxuICAgIHJldHVybiBqdWRnZW1lbnRzO1xuICB9XG5cbiAgZ2V0QXNzaWdubWVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXNzaWdubWVudHM7XG4gIH1cblxuICBnZXRFcXVpdmFsZW5jZXMoKSB7XG4gICAgbGV0IGVxdWl2YWxlbmNlcztcblxuICAgIGxldCBjb250ZXh0O1xuXG4gICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgZXF1aXZhbGVuY2VzID0gY29udGV4dC5nZXRFcXVpdmFsZW5jZXMoKTtcblxuICAgIGNvbnRleHQgPSB0aGlzOyAvLy9cblxuICAgIGVxdWl2YWxlbmNlcyA9IHRoaXMuZXF1aXZhbGVuY2VzLm1lcmdlZFdpdGgoZXF1aXZhbGVuY2VzLCBjb250ZXh0KTsgIC8vL1xuXG4gICAgcmV0dXJuIGVxdWl2YWxlbmNlcztcbiAgfVxuXG4gIGdldE1ldGFMZXZlbEFzc3VtcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLm1ldGFMZXZlbEFzc3VtcHRpb25zO1xuICB9XG5cbiAgZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpIHtcbiAgICBsZXQgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucztcblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBjb250ZXh0LmdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoKTtcblxuICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBbICAvLy9cbiAgICAgIC4uLnN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsXG4gICAgICAuLi50aGlzLnN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNcbiAgICBdO1xuXG4gICAgcmV0dXJuIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRQcm9vZkFzc2VydGlvbnMoKSB7XG4gICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IHRoaXMuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgIHByb29mQXNzZXJ0aW9ucyA9IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMuZmlsdGVyKChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uLmlzUHJvb2ZBc3NlcnRpb24oKTtcblxuICAgICAgICAgICAgaWYgKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnByb29mQXNzZXJ0aW9uKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHByb29mQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldExhc3RTdGVwKCkge1xuICAgIGxldCBsYXN0U3RlcCA9IG51bGw7XG5cbiAgICBjb25zdCBwcm9vZkFzc2VydGlvbnMgPSB0aGlzLmdldFByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgIHByb29mQXNzZXJ0aW9uc0xlbmd0aCA9IHByb29mQXNzZXJ0aW9ucy5sZW5ndGg7XG5cbiAgICBpZiAocHJvb2ZBc3NlcnRpb25zTGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbGFzdFByb29mQXNzZXJ0aW9uID0gbGFzdChwcm9vZkFzc2VydGlvbnMpO1xuXG4gICAgICBsYXN0U3RlcCA9IGxhc3RQcm9vZkFzc2VydGlvbjsgIC8vL1xuICAgIH1cblxuICAgIHJldHVybiBsYXN0U3RlcDtcbiAgfVxuXG4gIGlzTWV0YUxldmVsKCkge1xuICAgIGxldCBtZXRhTGV2ZWwgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLm1ldGFMZXZlbEFzc3VtcHRpb25hICE9PSBudWxsKSB7XG4gICAgICBtZXRhTGV2ZWwgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICAgIG1ldGFMZXZlbCA9IGNvbnRleHQuaXNNZXRhTGV2ZWwoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YUxldmVsO1xuICB9XG5cbiAgYWRkRXF1YWxpdHkoZXF1YWxpdHkpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZXF1YWxpdHlTdHJpbmcgPSBlcXVhbGl0eS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSB0byB0aGUgcHJvb2YgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgZXF1YWxpdHlSZWxmZXhpdmUgPSBlcXVhbGl0eS5pc1JlZmxleGl2ZSgpO1xuXG4gICAgaWYgKCFlcXVhbGl0eVJlbGZleGl2ZSkge1xuICAgICAgY29uc3QgeyBFcXVpdmFsZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgICBlcXVpdmFsZW5jZSA9IEVxdWl2YWxlbmNlLmZyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCk7XG5cbiAgICAgIHRoaXMuZXF1aXZhbGVuY2VzID0gdGhpcy5lcXVpdmFsZW5jZXMubWVyZ2VkV2l0aEVxdWl2YWxlbmNlKGVxdWl2YWxlbmNlLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgdG8gdGhlIHByb29mIGNvbnRleHQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSByZWZsZXhpdmUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSBoYXMgbm90IGJlZW4gYWRkZWQgdG8gdGhlIHByb29mIGNvbnRleHQuYCk7XG4gICAgfVxuICB9XG5cbiAgYWRkVmFyaWFibGUodmFyaWFibGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgdmFyaWFibGVTdHJpbmcgPSB2YXJpYWJsZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7dmFyaWFibGVTdHJpbmd9JyB2YXJpYWJsZSB0byB0aGUgcHJvb2YgY29udGV4dC4uLmApO1xuXG4gICAgdGhpcy52YXJpYWJsZXMucHVzaCh2YXJpYWJsZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7dmFyaWFibGVTdHJpbmd9JyB2YXJpYWJsZSB0byB0aGUgcHJvb2YgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEp1ZGdlbWVudChqdWRnZW1lbnQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAganVkZ2VtZW50U3RyaW5nID0ganVkZ2VtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQgdG8gdGhlIHByb29mIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMuanVkZ2VtZW50cy5wdXNoKGp1ZGdlbWVudCk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50IHRvIHRoZSBwcm9vZiBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkQXNzaWdubWVudChhc3NpZ25tZW50KSB7XG4gICAgdGhpcy5hc3NpZ25tZW50cy5wdXNoKGFzc2lnbm1lbnQpO1xuICB9XG5cbiAgYXNzaWduQXNzaWdubWVudHMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXM7IC8vL1xuXG4gICAgdGhpcy5hc3NpZ25tZW50cy5mb3JFYWNoKChhc3NpZ25tZW50KSA9PiB7XG4gICAgICBhc3NpZ25tZW50KGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkTWV0YUxldmVsQXNzdW1wdGlvbihtZXRhTGV2ZWxBc3N1bXB0aW9uKSB7XG4gICAgaWYgKHRoaXMubWV0YUxldmVsQXNzdW1wdGlvbnMgPT09IG51bGwpIHtcbiAgICAgIHN1cGVyLmFkZE1ldGFMZXZlbEFzc3VtcHRpb24obWV0YUxldmVsQXNzdW1wdGlvbik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgbWV0YUxldmVsQXNzdW1wdGlvbkEgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uLCAvLy9cbiAgICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nID0gbWV0YUxldmVsQXNzdW1wdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7bWV0YUxldmVsQXNzdW1wdGlvblN0cmluZ30nIG1ldGEtbGV2ZWwgYXNzdW1wdGlvbiB0byB0aGUgcHJvb2YgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgbWV0YUxldmVsQXNzdW1wdGlvbkIgPSB0aGlzLm1ldGFMZXZlbEFzc3VtcHRpb25zLmZpbmQoKG1ldGFMZXZlbEFzc3VtcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IG1ldGFMZXZlbEFzc3VtcHRpb25CID0gbWV0YUxldmVsQXNzdW1wdGlvbiwgLy8vXG4gICAgICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9uQUVxdWFsVG9Bc3N1bXB0aW9uQiA9IG1ldGFMZXZlbEFzc3VtcHRpb25BLmlzRXF1YWxUbyhtZXRhTGV2ZWxBc3N1bXB0aW9uQik7XG5cbiAgICAgIGlmIChtZXRhTGV2ZWxBc3N1bXB0aW9uQUVxdWFsVG9Bc3N1bXB0aW9uQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgaWYgKG1ldGFMZXZlbEFzc3VtcHRpb25CICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7bWV0YUxldmVsQXNzdW1wdGlvblN0cmluZ30nIG1ldGFMZXZlbEFzc3VtcHRpb24gaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgcHJvb2YgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tZXRhTGV2ZWxBc3N1bXB0aW9ucy5wdXNoKG1ldGFMZXZlbEFzc3VtcHRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7bWV0YUxldmVsQXNzdW1wdGlvblN0cmluZ30nIG1ldGEtbGV2ZWwgYXNzdW1wdGlvbiB0byB0aGUgcHJvb2YgY29udGV4dC5gKTtcbiAgICB9XG4gIH1cblxuICBhZGRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24oc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvblN0cmluZyA9IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7c3VicHJvb2ZPclByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2Ygb3IgcHJvb2YgYXNzZXJ0aW9uIHRvIHRoZSBwcm9vZiBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLnN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMucHVzaChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3N1YnByb29mT3JQcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIG9yIHByb29mIGFzc2VydGlvbiB0byB0aGUgcHJvb2YgY29udGV4dC5gKTtcbiAgfVxuXG4gIGNvbXBhcmVUZXJtQW5kUHJvcGVydHlSZWxhdGlvbih0ZXJtLCBwcm9wZXJ0eVJlbGF0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHByb29mQXNzZXJ0aW9ucyA9IHRoaXMuZ2V0UHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uID0gcHJvb2ZBc3NlcnRpb25zLnNvbWUoKHByb29mQXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wYXJlc1RvVGVybUFuZFByb3BlcnR5UmVsYXRpb24gPSBwcm9vZkFzc2VydGlvbi5jb21wYXJlVGVybUFuZFByb3BlcnR5UmVsYXRpb24odGVybSwgcHJvcGVydHlSZWxhdGlvbiwgY29udGV4dCk7XG5cbiAgICAgICAgICAgIGlmIChjb21wYXJlc1RvVGVybUFuZFByb3BlcnR5UmVsYXRpb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uO1xuICB9XG5cbiAgZmluZEVxdWl2YWxlbmNlQnlUZXJtKHRlcm0pIHsgcmV0dXJuIHRoaXMuZXF1aXZhbGVuY2VzLmZpbmRFcXVpdmFsZW5jZUJ5VGVybSh0ZXJtKTsgfVxuXG4gIGZpbmRKdWRnZW1lbnRCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IGp1ZGdlbWVudHMgPSB0aGlzLmdldEp1ZGdlbWVudHMoKSxcbiAgICAgICAgICBqdWRnZW1lbnQgPSBqdWRnZW1lbnRzLmZpbmQoKGp1ZGdlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QganVkZ2VtZW50TWV0YXZhcmlhYmxlQ29tcGFyZXNUb01ldGF2YXJpYWJsZSA9IGp1ZGdlbWVudC5jb21wYXJlTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgICAgICAgICAgaWYgKGp1ZGdlbWVudE1ldGF2YXJpYWJsZUNvbXBhcmVzVG9NZXRhdmFyaWFibGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBqdWRnZW1lbnQ7XG4gIH1cblxuICBmaW5kVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpIHtcbiAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpLFxuICAgICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVzLmZpbmQoKHZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZUNvbXBhcmVzVG9WYXJpYWJsZUlkZW50aWZpZXIgPSB2YXJpYWJsZS5jb21wYXJlVmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcik7XG5cbiAgICAgICAgICAgIGlmICh2YXJpYWJsZUNvbXBhcmVzVG9WYXJpYWJsZUlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiB2YXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRKdWRnZW1lbnRzQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBqdWRnZW1lbnRzID0gdGhpcy5nZXRKdWRnZW1lbnRzKCk7XG5cbiAgICBmaWx0ZXIoanVkZ2VtZW50cywgKGp1ZGdlbWVudCkgPT4ge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBqdWRnZW1lbnQubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50cztcbiAgfVxuXG4gIGZpbmRNZXRhTGV2ZWxBc3N1bXB0aW9uQnlNZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZShtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSkge1xuICAgIGxldCBtZXRhTGV2ZWxBc3N1bXB0aW9uO1xuXG4gICAgaWYgKHRoaXMubWV0YUxldmVsQXNzdW1wdGlvbnMgPT09IG51bGwpIHtcbiAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb24gPSBzdXBlci5maW5kTWV0YUxldmVsQXNzdW1wdGlvbkJ5TWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9uID0gdGhpcy5tZXRhTGV2ZWxBc3N1bXB0aW9ucy5maW5kKChtZXRhTGV2ZWxBc3N1bXB0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlTWF0Y2hlcyA9IG1ldGFMZXZlbEFzc3VtcHRpb24ubWF0Y2hNZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZShtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSk7XG5cbiAgICAgICAgaWYgKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSB8fCBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhTGV2ZWxBc3N1bXB0aW9uO1xuICB9XG5cbiAgaXNKdWRnZW1lbnRQcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICBjb25zdCBqdWRnZW1lbnQgPSB0aGlzLmZpbmRKdWRnZW1lbnRCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSksXG4gICAgICAgICAganVkZ2VtZW50UHJlc2VudCA9IChqdWRnZW1lbnQgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudFByZXNlbnQ7XG4gIH1cblxuICBpc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdGhpcy5maW5kVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpLFxuICAgICAgICAgIHZhcmlhYmxlUHJlc2VudCA9ICh2YXJpYWJsZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdmFyaWFibGVQcmVzZW50O1xuICB9XG5cbiAgaXNUZXJtR3JvdW5kZWQodGVybSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBlcXVpdmFsZW5jZXMgPSB0aGlzLmdldEVxdWl2YWxlbmNlcygpLFxuICAgICAgICAgIGdyb3VuZGVkVGVybXMgPSBbXSxcbiAgICAgICAgICBkZWZpbmVkVmFyaWFibGVzID0gW107XG5cbiAgICBlcXVpdmFsZW5jZXMuc2VwYXJhdGVHcm91bmRlZFRlcm1zQW5kRGVmaW5lZFZhcmlhYmxlcyhncm91bmRlZFRlcm1zLCBkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KTtcblxuICAgIGNvbnN0IHRlcm1NYXRjaGVzR3JvdW5kZWRUZXJtID0gZ3JvdW5kZWRUZXJtcy5zb21lKChncm91bmRlZFRlcm0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VuZGVkVGVybU5vZGUgPSBncm91bmRlZFRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICAgICAgICAgICAgZ3JvdW5kZWRUZXJtTm9kZU1hdGNoZXMgPSB0ZXJtLm1hdGNoVGVybU5vZGUoZ3JvdW5kZWRUZXJtTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChncm91bmRlZFRlcm1Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0ZXJtR3JvdW5kZWQgPSB0ZXJtTWF0Y2hlc0dyb3VuZGVkVGVybTsgLy8vXG5cbiAgICByZXR1cm4gdGVybUdyb3VuZGVkO1xuICB9XG5cbiAgc3RhdGljIGZyb21NZXRhTGV2ZWxBc3N1bXB0aW9ucyhtZXRhTGV2ZWxBc3N1bXB0aW9ucywgY29udGV4dCkge1xuICAgIGNvbnN0IHsgRXF1aXZhbGVuY2VzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICB2YXJpYWJsZXMgPSBbXSxcbiAgICAgICAgICBqdWRnZW1lbnRzID0gW10sXG4gICAgICAgICAgYXNzaWdubWVudHMgPSBbXSxcbiAgICAgICAgICBlcXVpdmFsZW5jZXMgPSBFcXVpdmFsZW5jZXMuZnJvbU5vdGhpbmcoY29udGV4dCksXG4gICAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IFtdLFxuICAgICAgICAgIHByb29mQ29udGV4dCA9IG5ldyBQcm9vZkNvbnRleHQoY29udGV4dCwgdmFyaWFibGVzLCBqdWRnZW1lbnRzLCBhc3NpZ25tZW50cywgZXF1aXZhbGVuY2VzLCBtZXRhTGV2ZWxBc3N1bXB0aW9ucywgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyk7XG5cbiAgICByZXR1cm4gcHJvb2ZDb250ZXh0O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFByb29mQ29udGV4dDsiXSwibmFtZXMiOlsibGFzdCIsImZpbHRlciIsImFycmF5VXRpbGl0aWVzIiwiUHJvb2ZDb250ZXh0IiwiQ29udGV4dCIsImNvbnRleHQiLCJ2YXJpYWJsZXMiLCJqdWRnZW1lbnRzIiwiYXNzaWdubWVudHMiLCJlcXVpdmFsZW5jZXMiLCJtZXRhTGV2ZWxBc3N1bXB0aW9ucyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJnZXRWYXJpYWJsZXMiLCJnZXRDb250ZXh0IiwiZ2V0SnVkZ2VtZW50cyIsImdldEFzc2lnbm1lbnRzIiwiZ2V0RXF1aXZhbGVuY2VzIiwibWVyZ2VkV2l0aCIsImdldE1ldGFMZXZlbEFzc3VtcHRpb25zIiwiZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsImdldFByb29mQXNzZXJ0aW9ucyIsInByb29mQXNzZXJ0aW9ucyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnByb29mQXNzZXJ0aW9uIiwiaXNQcm9vZkFzc2VydGlvbiIsImdldExhc3RTdGVwIiwibGFzdFN0ZXAiLCJwcm9vZkFzc2VydGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJsYXN0UHJvb2ZBc3NlcnRpb24iLCJpc01ldGFMZXZlbCIsIm1ldGFMZXZlbCIsIm1ldGFMZXZlbEFzc3VtcHRpb25hIiwiYWRkRXF1YWxpdHkiLCJlcXVhbGl0eSIsImVxdWFsaXR5U3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJlcXVhbGl0eVJlbGZleGl2ZSIsImlzUmVmbGV4aXZlIiwiRXF1aXZhbGVuY2UiLCJlbGVtZW50cyIsImVxdWl2YWxlbmNlIiwiZnJvbUVxdWFsaXR5IiwibWVyZ2VkV2l0aEVxdWl2YWxlbmNlIiwiZGVidWciLCJhZGRWYXJpYWJsZSIsInZhcmlhYmxlIiwidmFyaWFibGVTdHJpbmciLCJwdXNoIiwiYWRkSnVkZ2VtZW50IiwianVkZ2VtZW50IiwianVkZ2VtZW50U3RyaW5nIiwiYWRkQXNzaWdubWVudCIsImFzc2lnbm1lbnQiLCJhc3NpZ25Bc3NpZ25tZW50cyIsImZvckVhY2giLCJhZGRNZXRhTGV2ZWxBc3N1bXB0aW9uIiwibWV0YUxldmVsQXNzdW1wdGlvbiIsIm1ldGFMZXZlbEFzc3VtcHRpb25BIiwibWV0YUxldmVsQXNzdW1wdGlvblN0cmluZyIsIm1ldGFMZXZlbEFzc3VtcHRpb25CIiwiZmluZCIsIm1ldGFMZXZlbEFzc3VtcHRpb25BRXF1YWxUb0Fzc3VtcHRpb25CIiwiaXNFcXVhbFRvIiwiYWRkU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uU3RyaW5nIiwiY29tcGFyZVRlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uIiwidGVybSIsInByb3BlcnR5UmVsYXRpb24iLCJjb21wYXJlc1RvVGVybUFuZFByb3BlcnR5UmVsYXRpb24iLCJzb21lIiwicHJvb2ZBc3NlcnRpb24iLCJmaW5kRXF1aXZhbGVuY2VCeVRlcm0iLCJmaW5kSnVkZ2VtZW50QnlNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZSIsImp1ZGdlbWVudE1ldGF2YXJpYWJsZUNvbXBhcmVzVG9NZXRhdmFyaWFibGUiLCJjb21wYXJlTWV0YXZhcmlhYmxlTmFtZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGlmaWVyIiwiY29tcGFyZVZhcmlhYmxlSWRlbnRpZmllciIsImZpbmRKdWRnZW1lbnRzQnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiZmluZE1ldGFMZXZlbEFzc3VtcHRpb25CeU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlIiwibWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlIiwiaXNKdWRnZW1lbnRQcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lIiwianVkZ2VtZW50UHJlc2VudCIsImlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZVByZXNlbnQiLCJpc1Rlcm1Hcm91bmRlZCIsImdyb3VuZGVkVGVybXMiLCJkZWZpbmVkVmFyaWFibGVzIiwic2VwYXJhdGVHcm91bmRlZFRlcm1zQW5kRGVmaW5lZFZhcmlhYmxlcyIsInRlcm1NYXRjaGVzR3JvdW5kZWRUZXJtIiwiZ3JvdW5kZWRUZXJtIiwiZ3JvdW5kZWRUZXJtTm9kZSIsImdldE5vZGUiLCJncm91bmRlZFRlcm1Ob2RlTWF0Y2hlcyIsIm1hdGNoVGVybU5vZGUiLCJ0ZXJtR3JvdW5kZWQiLCJmcm9tTWV0YUxldmVsQXNzdW1wdGlvbnMiLCJFcXVpdmFsZW5jZXMiLCJmcm9tTm90aGluZyIsInByb29mQ29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBOFZBOzs7ZUFBQTs7OzJCQTVWK0I7Z0VBRVg7aUVBQ0M7Ozs7OztBQUVyQixNQUFNLEVBQUVBLElBQUksRUFBRUMsTUFBTSxFQUFFLEdBQUdDLHlCQUFjO0FBRXZDLE1BQU1DLHFCQUFxQkMsZ0JBQU87SUFDaEMsWUFBWUMsT0FBTyxFQUFFQyxTQUFTLEVBQUVDLFVBQVUsRUFBRUMsV0FBVyxFQUFFQyxZQUFZLEVBQUVDLG9CQUFvQixFQUFFQyx5QkFBeUIsQ0FBRTtRQUN0SCxLQUFLLENBQUNOO1FBRU4sSUFBSSxDQUFDQyxTQUFTLEdBQUdBO1FBQ2pCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtRQUNsQixJQUFJLENBQUNDLFdBQVcsR0FBR0E7UUFDbkIsSUFBSSxDQUFDQyxZQUFZLEdBQUdBO1FBQ3BCLElBQUksQ0FBQ0Msb0JBQW9CLEdBQUdBO1FBQzVCLElBQUksQ0FBQ0MseUJBQXlCLEdBQUdBO0lBQ25DO0lBRUFDLGVBQWU7UUFDYixJQUFJTjtRQUVKLE1BQU1ELFVBQVUsSUFBSSxDQUFDUSxVQUFVO1FBRS9CUCxZQUFZRCxRQUFRTyxZQUFZO1FBRWhDTixZQUFZO2VBQ1AsSUFBSSxDQUFDQSxTQUFTO2VBQ2RBO1NBQ0o7UUFFRCxPQUFPQTtJQUNUO0lBRUFRLGdCQUFnQjtRQUNkLElBQUlQO1FBRUosTUFBTUYsVUFBVSxJQUFJLENBQUNRLFVBQVU7UUFFL0JOLGFBQWFGLFFBQVFTLGFBQWE7UUFFbENQLGFBQWE7ZUFDUixJQUFJLENBQUNBLFVBQVU7ZUFDZkE7U0FDSjtRQUVELE9BQU9BO0lBQ1Q7SUFFQVEsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUNQLFdBQVc7SUFDekI7SUFFQVEsa0JBQWtCO1FBQ2hCLElBQUlQ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
|
package/lib/context/synthetic.js
DELETED
|
@@ -1,135 +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 SyntheticContext;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _necessary = require("necessary");
|
|
12
|
-
const _context = /*#__PURE__*/ _interop_require_default(require("../context"));
|
|
13
|
-
function _interop_require_default(obj) {
|
|
14
|
-
return obj && obj.__esModule ? obj : {
|
|
15
|
-
default: obj
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
const { last } = _necessary.arrayUtilities;
|
|
19
|
-
class SyntheticContext extends _context.default {
|
|
20
|
-
constructor(context, contexts){
|
|
21
|
-
super(context);
|
|
22
|
-
this.contexts = contexts;
|
|
23
|
-
}
|
|
24
|
-
getContexts() {
|
|
25
|
-
return this.contexts;
|
|
26
|
-
}
|
|
27
|
-
addSubstitutions(substitutions) {
|
|
28
|
-
const context = this.getContext();
|
|
29
|
-
context.addSubstitutions(substitutions);
|
|
30
|
-
}
|
|
31
|
-
findTermByTermNode(termNode) {
|
|
32
|
-
let term = null;
|
|
33
|
-
this.contexts.some((context)=>{
|
|
34
|
-
term = context.findTermByTermNode(termNode);
|
|
35
|
-
if (term !== null) {
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
return term;
|
|
40
|
-
}
|
|
41
|
-
findFrameByFrameNode(frameNode) {
|
|
42
|
-
let frame = null;
|
|
43
|
-
this.contexts.some((context)=>{
|
|
44
|
-
frame = context.findFrameByFrameNode(frameNode);
|
|
45
|
-
if (frame !== null) {
|
|
46
|
-
return true;
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
return frame;
|
|
50
|
-
}
|
|
51
|
-
findStatementByStatementNode(statementNode) {
|
|
52
|
-
let statement = null;
|
|
53
|
-
this.contexts.some((context)=>{
|
|
54
|
-
statement = context.findStatementByStatementNode(statementNode);
|
|
55
|
-
if (statement !== null) {
|
|
56
|
-
return true;
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
return statement;
|
|
60
|
-
}
|
|
61
|
-
findSubstitutionBySubstitutionNode(substitutionNode) {
|
|
62
|
-
let substitution = null;
|
|
63
|
-
this.contexts.some((context)=>{
|
|
64
|
-
substitution = context.findSubstitutionBySubstitutionNode(substitutionNode);
|
|
65
|
-
if (substitution !== null) {
|
|
66
|
-
return true;
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
return substitution;
|
|
70
|
-
}
|
|
71
|
-
findReferenceByMetavariableNode(metavariableNode) {
|
|
72
|
-
let reference = null;
|
|
73
|
-
this.contexts.some((context)=>{
|
|
74
|
-
reference = context.findReferenceByMetavariableNode(metavariableNode);
|
|
75
|
-
if (reference !== null) {
|
|
76
|
-
return true;
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
return reference;
|
|
80
|
-
}
|
|
81
|
-
findVariableByVariableIdentifier(variableIdentifier) {
|
|
82
|
-
let variable = null;
|
|
83
|
-
this.contexts.some((context)=>{
|
|
84
|
-
variable = context.findVariableByVariableIdentifier(variableIdentifier);
|
|
85
|
-
if (variable !== null) {
|
|
86
|
-
return true;
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
return variable;
|
|
90
|
-
}
|
|
91
|
-
findMetavariableByMetavariableName(metavariableName) {
|
|
92
|
-
let metavariable = null;
|
|
93
|
-
this.contexts.some((context)=>{
|
|
94
|
-
metavariable = context.findMetavariableByMetavariableName(metavariableName);
|
|
95
|
-
if (metavariable !== null) {
|
|
96
|
-
return true;
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
return metavariable;
|
|
100
|
-
}
|
|
101
|
-
isTermPresentByTermNode(termNode) {
|
|
102
|
-
const term = this.findTermByTermNode(termNode), termPresent = term !== null;
|
|
103
|
-
return termPresent;
|
|
104
|
-
}
|
|
105
|
-
isFramePresentByFrameNode(frameNode) {
|
|
106
|
-
const frame = this.findFrameByFrameNode(frameNode), framePresent = frame !== null;
|
|
107
|
-
return framePresent;
|
|
108
|
-
}
|
|
109
|
-
isStatementPresentByStatementNode(statementNode) {
|
|
110
|
-
const statement = this.findStatementByStatementNode(statementNode), statementPresent = statement !== null;
|
|
111
|
-
return statementPresent;
|
|
112
|
-
}
|
|
113
|
-
isSubstitutionPresentBySubstitutionNode(substitutionNode) {
|
|
114
|
-
const substitution = this.findSubstitutionBySubstitutionNode(substitutionNode), substitutionPresent = substitution !== null;
|
|
115
|
-
return substitutionPresent;
|
|
116
|
-
}
|
|
117
|
-
isReferencePresentByMetavariableNode(metavariableNode) {
|
|
118
|
-
const reference = this.findReferenceByMetavariableNode(metavariableNode), referencePresent = reference !== null;
|
|
119
|
-
return referencePresent;
|
|
120
|
-
}
|
|
121
|
-
isVariablePresentByVariableIdentifier(variableIdentifier) {
|
|
122
|
-
const variable = this.findVariableByVariableIdentifier(variableIdentifier), variablePresent = variable !== null;
|
|
123
|
-
return variablePresent;
|
|
124
|
-
}
|
|
125
|
-
isMetavariablePresentByMetavariableName(metavariableName) {
|
|
126
|
-
const metavariable = this.findMetavariableByMetavariableName(metavariableName), metavariablePresent = metavariable !== null;
|
|
127
|
-
return metavariablePresent;
|
|
128
|
-
}
|
|
129
|
-
static fromContexts(...contexts) {
|
|
130
|
-
const lastContext = last(contexts), context = lastContext, syntheticContext = new SyntheticContext(context, contexts);
|
|
131
|
-
return syntheticContext;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L3N5bnRoZXRpYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5cbmNvbnN0IHsgbGFzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN5bnRoZXRpY0NvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgY29udGV4dHMpIHtcbiAgICBzdXBlcihjb250ZXh0KTtcblxuICAgIHRoaXMuY29udGV4dHMgPSBjb250ZXh0cztcbiAgfVxuXG4gIGdldENvbnRleHRzKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHRzO1xuICB9XG5cbiAgYWRkU3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpO1xuICB9XG5cbiAgZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKSB7XG4gICAgbGV0IHRlcm0gPSBudWxsO1xuXG4gICAgdGhpcy5jb250ZXh0cy5zb21lKChjb250ZXh0KSA9PiB7XG4gICAgICB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9XG5cbiAgZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKSB7XG4gICAgbGV0IGZyYW1lID0gbnVsbDtcblxuICAgIHRoaXMuY29udGV4dHMuc29tZSgoY29udGV4dCkgPT4ge1xuICAgICAgZnJhbWUgPSBjb250ZXh0LmZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSk7XG5cbiAgICAgIGlmIChmcmFtZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuXG4gIGZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gICAgdGhpcy5jb250ZXh0cy5zb21lKChjb250ZXh0KSA9PiB7XG4gICAgICBzdGF0ZW1lbnQgPSBjb250ZXh0LmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9XG5cbiAgZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgbGV0IHN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgICB0aGlzLmNvbnRleHRzLnNvbWUoKGNvbnRleHQpID0+IHtcbiAgICAgIHN1YnN0aXR1dGlvbiA9IGNvbnRleHQuZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBsZXQgcmVmZXJlbmNlID0gbnVsbDtcblxuICAgIHRoaXMuY29udGV4dHMuc29tZSgoY29udGV4dCkgPT4ge1xuICAgICAgcmVmZXJlbmNlID0gY29udGV4dC5maW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAocmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgICB0aGlzLmNvbnRleHRzLnNvbWUoKGNvbnRleHQpID0+IHtcbiAgICAgIHZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpO1xuXG4gICAgICBpZiAodmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdmFyaWFibGU7XG4gIH1cblxuICBmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICAgIHRoaXMuY29udGV4dHMuc29tZSgoY29udGV4dCkgPT4ge1xuICAgICAgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGlzVGVybVByZXNlbnRCeVRlcm1Ob2RlKHRlcm1Ob2RlKSB7XG4gICAgY29uc3QgdGVybSA9IHRoaXMuZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKSxcbiAgICAgICAgICB0ZXJtUHJlc2VudCA9ICh0ZXJtICE9PSBudWxsKTtcblxuICAgIHJldHVybiB0ZXJtUHJlc2VudDtcbiAgfVxuXG4gIGlzRnJhbWVQcmVzZW50QnlGcmFtZU5vZGUoZnJhbWVOb2RlKSB7XG4gICAgY29uc3QgZnJhbWUgPSB0aGlzLmZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSksXG4gICAgICAgICAgZnJhbWVQcmVzZW50ID0gKGZyYW1lICE9PSBudWxsKTtcblxuICAgIHJldHVybiBmcmFtZVByZXNlbnQ7XG4gIH1cblxuICBpc1N0YXRlbWVudFByZXNlbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICBzdGF0ZW1lbnRQcmVzZW50ID0gKHN0YXRlbWVudCAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50UHJlc2VudDtcbiAgfVxuXG4gIGlzU3Vic3RpdHV0aW9uUHJlc2VudEJ5U3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uID0gdGhpcy5maW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpLFxuICAgICAgc3Vic3RpdHV0aW9uUHJlc2VudCA9IChzdWJzdGl0dXRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBpc1JlZmVyZW5jZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHJlZmVyZW5jZSA9IHRoaXMuZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICByZWZlcmVuY2VQcmVzZW50ID0gKHJlZmVyZW5jZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlUHJlc2VudDtcbiAgfVxuXG4gIGlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLmZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllciksXG4gICAgICAgICAgdmFyaWFibGVQcmVzZW50ID0gKHZhcmlhYmxlICE9PSBudWxsKTtcblxuICAgIHJldHVybiB2YXJpYWJsZVByZXNlbnQ7XG4gIH1cblxuICBpc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IHRoaXMuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVQcmVzZW50ID0gKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlUHJlc2VudDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGV4dHMoLi4uY29udGV4dHMpIHtcbiAgICBjb25zdCBsYXN0Q29udGV4dCA9IGxhc3QoY29udGV4dHMpLFxuICAgICAgICAgIGNvbnRleHQgPSBsYXN0Q29udGV4dCwgIC8vL1xuICAgICAgICAgIHN5bnRoZXRpY0NvbnRleHQgPSBuZXcgU3ludGhldGljQ29udGV4dChjb250ZXh0LCBjb250ZXh0cyk7XG5cbiAgICByZXR1cm4gc3ludGhldGljQ29udGV4dDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlN5bnRoZXRpY0NvbnRleHQiLCJsYXN0IiwiYXJyYXlVdGlsaXRpZXMiLCJDb250ZXh0IiwiY29udGV4dCIsImNvbnRleHRzIiwiZ2V0Q29udGV4dHMiLCJhZGRTdWJzdGl0dXRpb25zIiwic3Vic3RpdHV0aW9ucyIsImdldENvbnRleHQiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ0ZXJtTm9kZSIsInRlcm0iLCJzb21lIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJmcmFtZU5vZGUiLCJmcmFtZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50IiwiZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb24iLCJmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsInJlZmVyZW5jZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZSIsImlzVGVybVByZXNlbnRCeVRlcm1Ob2RlIiwidGVybVByZXNlbnQiLCJpc0ZyYW1lUHJlc2VudEJ5RnJhbWVOb2RlIiwiZnJhbWVQcmVzZW50IiwiaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50UHJlc2VudCIsImlzU3Vic3RpdHV0aW9uUHJlc2VudEJ5U3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvblByZXNlbnQiLCJpc1JlZmVyZW5jZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VQcmVzZW50IiwiaXNWYXJpYWJsZVByZXNlbnRCeVZhcmlhYmxlSWRlbnRpZmllciIsInZhcmlhYmxlUHJlc2VudCIsImlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZVByZXNlbnQiLCJmcm9tQ29udGV4dHMiLCJsYXN0Q29udGV4dCIsInN5bnRoZXRpY0NvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVFBOzs7ZUFBcUJBOzs7MkJBTlU7Z0VBRVg7Ozs7OztBQUVwQixNQUFNLEVBQUVDLElBQUksRUFBRSxHQUFHQyx5QkFBYztBQUVoQixNQUFNRix5QkFBeUJHLGdCQUFPO0lBQ25ELFlBQVlDLE9BQU8sRUFBRUMsUUFBUSxDQUFFO1FBQzdCLEtBQUssQ0FBQ0Q7UUFFTixJQUFJLENBQUNDLFFBQVEsR0FBR0E7SUFDbEI7SUFFQUMsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDRCxRQUFRO0lBQ3RCO0lBRUFFLGlCQUFpQkMsYUFBYSxFQUFFO1FBQzlCLE1BQU1KLFVBQVUsSUFBSSxDQUFDSyxVQUFVO1FBRS9CTCxRQUFRRyxnQkFBZ0IsQ0FBQ0M7SUFDM0I7SUFFQUUsbUJBQW1CQyxRQUFRLEVBQUU7UUFDM0IsSUFBSUMsT0FBTztRQUVYLElBQUksQ0FBQ1AsUUFBUSxDQUFDUSxJQUFJLENBQUMsQ0FBQ1Q7WUFDbEJRLE9BQU9SLFFBQVFNLGtCQUFrQixDQUFDQztZQUVsQyxJQUFJQyxTQUFTLE1BQU07Z0JBQ2pCLE9BQU87WUFDVDtRQUNGO1FBRUEsT0FBT0E7SUFDVDtJQUVBRSxxQkFBcUJDLFNBQVMsRUFBRTtRQUM5QixJQUFJQyxRQUFRO1FBRVosSUFBSSxDQUFDWCxRQUFRLENBQUNRLElBQUksQ0FBQyxDQUFDVDtZQUNsQlksUUFBUVosUUFBUVUsb0JBQW9CLENBQUNDO1lBRXJDLElBQUlDLFVBQVUsTUFBTTtnQkFDbEIsT0FBTztZQUNUO1FBQ0Y7UUFFQSxPQUFPQTtJQUNUO0lBRUFDLDZCQUE2QkMsYUFBYSxFQUFFO1FBQzFDLElBQUlDLFlBQVk7UUFFaEIsSUFBSSxDQUFDZCxRQUFRLENBQUNRLElBQUksQ0FBQyxDQUFDVDtZQUNsQmUsWUFBWWYsUUFBUWEsNEJBQTRCLENBQUNDO1lBRWpELElBQUlDLGNBQWMsTUFBTTtnQkFDdEIsT0FBTztZQUNUO1FBQ0Y7UUFFQSxPQUFPQTtJQUNUO0lBRUFDLG1DQUFtQ0MsZ0JBQWdCLEVBQUU7UUFDbkQsSUFBSUMsZUFBZTtRQUVuQixJQUFJLENBQUNqQixRQUFRLENBQUNRLElBQUksQ0FBQyxDQUFDVDtZQUNsQmtCLGVBQWVsQixRQUFRZ0Isa0NBQWtDLENBQUNDO1lBRTFELElBQUlDLGlCQUFpQixNQUFNO2dCQUN6QixPQUFPO1lBQ1Q7UUFDRjtRQUVBLE9BQU9BO0lBQ1Q7SUFFQUMsZ0NBQWdDQyxnQkFBZ0IsRUFBRTtRQUNoRCxJQUFJQyxZQUFZO1FBRWhCLElBQUksQ0FBQ3BCLFFBQVEsQ0FBQ1EsSUFBSSxDQUFDLENBQUNUO1lBQ2xCcUIsWUFBWXJCLFFBQVFtQiwrQkFBK0IsQ0FBQ0M7WUFFcEQsSUFBSUMsY0FBYyxNQUFNO2dCQUN0QixPQUFPO1lBQ1Q7UUFDRjtRQUVBLE9BQU9BO0lBQ1Q7SUFFQUMsaUNBQWlDQyxrQkFBa0IsRUFBRTtRQUNuRCxJQUFJQyxXQUFXO1FBRWYsSUFBSSxDQUFDdkIsUUFBUSxDQUFDUSxJQUFJLENBQUMsQ0FBQ1Q7WUFDbEJ3QixXQUFXeEIsUUFBUXNCLGdDQUFnQyxDQUFDQztZQUVwRCxJQUFJQyxhQUFhLE1BQU07Z0JBQ3JCLE9BQU87WUFDVDtRQUNGO1FBRUEsT0FBT0E7SUFDVDtJQUVBQyxtQ0FBbUNDLGdCQUFnQixFQUFFO1FBQ25ELElBQUlDLGVBQWU7UUFFbkIsSUFBSSxDQUFDMUIsUUFBUSxDQUFDUSxJQUFJLENBQUMsQ0FBQ1Q7WUFDbEIyQixlQUFlM0IsUUFBUXlCLGtDQUFrQyxDQUFDQztZQUUxRCxJQUFJQyxpQkFBaUIsTUFBTTtnQkFDekIsT0FBTztZQUNUO1FBQ0Y7UUFFQSxPQUFPQTtJQUNUO0lBRUFDLHdCQUF3QnJCLFFBQVEsRUFBRTtRQUNoQyxNQUFNQyxPQUFPLElBQUksQ0FBQ0Ysa0JBQWtCLENBQUNDLFdBQy9Cc0IsY0FBZXJCLFNBQVM7UUFFOUIsT0FBT3FCO0lBQ1Q7SUFFQUMsMEJBQTBCbkIsU0FBUyxFQUFFO1FBQ25DLE1BQU1DLFFBQVEsSUFBSSxDQUFDRixvQkFBb0IsQ0FBQ0MsWUFDbENvQixlQUFnQm5CLFVBQVU7UUFFaEMsT0FBT21CO0lBQ1Q7SUFFQUMsa0NBQWtDbEIsYUFBYSxFQUFFO1FBQy9DLE1BQU1DLFlBQVksSUFBSSxDQUFDRiw0QkFBNEIsQ0FBQ0MsZ0JBQzlDbUIsbUJBQW9CbEIsY0FBYztRQUV4QyxPQUFPa0I7SUFDVDtJQUVBQyx3Q0FBd0NqQixnQkFBZ0IsRUFBRTtRQUN4RCxNQUFNQyxlQUFlLElBQUksQ0FBQ0Ysa0NBQWtDLENBQUNDLG1CQUMzRGtCLHNCQUF1QmpCLGlCQUFpQjtRQUUxQyxPQUFPaUI7SUFDVDtJQUVBQyxxQ0FBcUNoQixnQkFBZ0IsRUFBRTtRQUNyRCxNQUFNQyxZQUFZLElBQUksQ0FBQ0YsK0JBQStCLENBQUNDLG1CQUNqRGlCLG1CQUFvQmhCLGNBQWM7UUFFeEMsT0FBT2dCO0lBQ1Q7SUFFQUMsc0NBQXNDZixrQkFBa0IsRUFBRTtRQUN4RCxNQUFNQyxXQUFXLElBQUksQ0FBQ0YsZ0NBQWdDLENBQUNDLHFCQUNqRGdCLGtCQUFtQmYsYUFBYTtRQUV0QyxPQUFPZTtJQUNUO0lBRUFDLHdDQUF3Q2QsZ0JBQWdCLEVBQUU7UUFDeEQsTUFBTUMsZUFBZSxJQUFJLENBQUNGLGtDQUFrQyxDQUFDQyxtQkFDdkRlLHNCQUF1QmQsaUJBQWlCO1FBRTlDLE9BQU9jO0lBQ1Q7SUFFQSxPQUFPQyxhQUFhLEdBQUd6QyxRQUFRLEVBQUU7UUFDL0IsTUFBTTBDLGNBQWM5QyxLQUFLSSxXQUNuQkQsVUFBVTJDLGFBQ1ZDLG1CQUFtQixJQUFJaEQsaUJBQWlCSSxTQUFTQztRQUV2RCxPQUFPMkM7SUFDVDtBQUNGIn0=
|
|
@@ -1,173 +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 _default;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _occamlanguages = require("occam-languages");
|
|
12
|
-
const _necessary = require("necessary");
|
|
13
|
-
const _elements = require("../elements");
|
|
14
|
-
const _constants = require("../constants");
|
|
15
|
-
const _equivalence = require("../utilities/equivalence");
|
|
16
|
-
const { push, separate } = _necessary.arrayUtilities;
|
|
17
|
-
const _default = (0, _elements.define)(class Equivalences extends _occamlanguages.Element {
|
|
18
|
-
constructor(context, string, node, array){
|
|
19
|
-
super(context, string, node);
|
|
20
|
-
this.array = array;
|
|
21
|
-
}
|
|
22
|
-
getArray() {
|
|
23
|
-
return this.array;
|
|
24
|
-
}
|
|
25
|
-
getEquivalencesNode() {
|
|
26
|
-
const node = this.getNode(), equivalencesNode = node; ///
|
|
27
|
-
return equivalencesNode;
|
|
28
|
-
}
|
|
29
|
-
getLength() {
|
|
30
|
-
return this.array.length;
|
|
31
|
-
}
|
|
32
|
-
getTypes() {
|
|
33
|
-
const types = this.array.map((equivalence)=>{
|
|
34
|
-
const type = equivalence.getType();
|
|
35
|
-
return type;
|
|
36
|
-
});
|
|
37
|
-
return types;
|
|
38
|
-
}
|
|
39
|
-
addEquivalence(equivalence) {
|
|
40
|
-
this.array.push(equivalence);
|
|
41
|
-
}
|
|
42
|
-
addEquivalences(equivalences) {
|
|
43
|
-
const array = equivalences.getArray();
|
|
44
|
-
push(this.array, array);
|
|
45
|
-
}
|
|
46
|
-
someEquivalence(callback) {
|
|
47
|
-
return this.array.some(callback);
|
|
48
|
-
}
|
|
49
|
-
everyEquivalence(callback) {
|
|
50
|
-
return this.array.every(callback);
|
|
51
|
-
}
|
|
52
|
-
forEachEquivalence(callback) {
|
|
53
|
-
this.array.forEach(callback);
|
|
54
|
-
}
|
|
55
|
-
findEquivalenceByTerm(term) {
|
|
56
|
-
const equivalence = this.array.find((equivalence)=>{
|
|
57
|
-
const equivalenceComparesToTerm = equivalence.compareTerm(term);
|
|
58
|
-
if (equivalenceComparesToTerm) {
|
|
59
|
-
return true;
|
|
60
|
-
}
|
|
61
|
-
}) || null;
|
|
62
|
-
return equivalence;
|
|
63
|
-
}
|
|
64
|
-
findEquivalenceByTermNodes(termNodes) {
|
|
65
|
-
const equivalence = this.array.find((equivalence)=>{
|
|
66
|
-
const termNodeMatches = equivalence.matchTermNodes(termNodes);
|
|
67
|
-
if (termNodeMatches) {
|
|
68
|
-
return true;
|
|
69
|
-
}
|
|
70
|
-
}) || null;
|
|
71
|
-
return equivalence;
|
|
72
|
-
}
|
|
73
|
-
mergedWith(equivalences, context) {
|
|
74
|
-
let mergedEquivalences = this.clone(context); ///
|
|
75
|
-
equivalences.forEachEquivalence((equivalence)=>{
|
|
76
|
-
mergedEquivalences = mergedEquivalences.mergedWithEquivalence(equivalence, context);
|
|
77
|
-
});
|
|
78
|
-
return mergedEquivalences;
|
|
79
|
-
}
|
|
80
|
-
mergedWithEquivalence(equivalence, context) {
|
|
81
|
-
const equivalences = Equivalences.fromNothing(context);
|
|
82
|
-
let mergedEquivalence = equivalence; ///
|
|
83
|
-
this.forEachEquivalence((equivalence)=>{
|
|
84
|
-
const mergedEquivalenceDisjointFromEquivalence = mergedEquivalence.isDisjointFrom(equivalence);
|
|
85
|
-
if (mergedEquivalenceDisjointFromEquivalence) {
|
|
86
|
-
equivalences.addEquivalence(equivalence);
|
|
87
|
-
} else {
|
|
88
|
-
mergedEquivalence = mergedEquivalence.mergedWith(equivalence, context);
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
equivalence = mergedEquivalence; ///
|
|
92
|
-
equivalences.addEquivalence(equivalence);
|
|
93
|
-
return equivalences;
|
|
94
|
-
}
|
|
95
|
-
separateEquivalences(equivalencesA, equivalencesB, callback) {
|
|
96
|
-
const equivalencesAArray = equivalencesA.getArray(), equivalencesBArray = equivalencesB.getArray();
|
|
97
|
-
separate(this.array, equivalencesAArray, equivalencesBArray, callback);
|
|
98
|
-
}
|
|
99
|
-
separateInitiallyGroundedEquivalences(remainingEquivalences, initiallyGroundedEquivalences, context) {
|
|
100
|
-
this.separateEquivalences(remainingEquivalences, initiallyGroundedEquivalences, (equivalence)=>{
|
|
101
|
-
const equivalenceInitiallyGrounded = equivalence.isInitiallyGrounded(context);
|
|
102
|
-
if (!equivalenceInitiallyGrounded) {
|
|
103
|
-
return true;
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
separateImplicitlyGroundedEquivalences(remainingEquivalences, implicitlyGroundedEquivalences, definedVariables, context) {
|
|
108
|
-
this.separateEquivalences(remainingEquivalences, implicitlyGroundedEquivalences, (equivalence)=>{
|
|
109
|
-
const equivalenceImplicitlyGrounded = equivalence.isImplicitlyGrounded(definedVariables, context);
|
|
110
|
-
if (!equivalenceImplicitlyGrounded) {
|
|
111
|
-
return true;
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
separateGroundedTermsAndDefinedVariables(groundedTerms, definedVariables, context) {
|
|
116
|
-
let equivalences = this, groundedEquivalences, remainingEquivalences, initiallyGroundedEquivalences, implicitlyGroundedEquivalences;
|
|
117
|
-
remainingEquivalences = Equivalences.fromNothing(context);
|
|
118
|
-
initiallyGroundedEquivalences = Equivalences.fromNothing(context);
|
|
119
|
-
equivalences.separateInitiallyGroundedEquivalences(remainingEquivalences, initiallyGroundedEquivalences, context);
|
|
120
|
-
const initiallyGroundedEquivalencesLength = initiallyGroundedEquivalences.getLength();
|
|
121
|
-
if (initiallyGroundedEquivalencesLength > 0) {
|
|
122
|
-
groundedEquivalences = initiallyGroundedEquivalences; ///
|
|
123
|
-
let implicitlyGroundedEquivalencesLength = 1;
|
|
124
|
-
while(implicitlyGroundedEquivalencesLength > 0){
|
|
125
|
-
let definedVariablesLength = 0, previousDefinedVariablesLength = -1;
|
|
126
|
-
while(definedVariablesLength > previousDefinedVariablesLength){
|
|
127
|
-
previousDefinedVariablesLength = definedVariablesLength; ///
|
|
128
|
-
groundedTermsFromGroundedEquivalencesAndDefinedVariables(groundedEquivalences, definedVariables, groundedTerms, context);
|
|
129
|
-
definedVariablesFromGroundedTerms(groundedTerms, definedVariables, context);
|
|
130
|
-
definedVariablesLength = definedVariables.length;
|
|
131
|
-
}
|
|
132
|
-
equivalences = remainingEquivalences; ///
|
|
133
|
-
remainingEquivalences = [];
|
|
134
|
-
implicitlyGroundedEquivalences = [];
|
|
135
|
-
equivalences.separateImplicitlyGroundedEquivalences(remainingEquivalences, implicitlyGroundedEquivalences, definedVariables, context);
|
|
136
|
-
groundedEquivalences.addEquivalences(implicitlyGroundedEquivalences);
|
|
137
|
-
implicitlyGroundedEquivalencesLength = implicitlyGroundedEquivalences.getLength(); ///
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
clone(context) {
|
|
142
|
-
const string = _constants.EMPTY_STRING, node = null, array = [
|
|
143
|
-
...this.array
|
|
144
|
-
], equivalences = new Equivalences(context, string, node, array);
|
|
145
|
-
return equivalences;
|
|
146
|
-
}
|
|
147
|
-
static name = "Equivalences";
|
|
148
|
-
static fromNothing(context) {
|
|
149
|
-
const string = _constants.EMPTY_STRING, node = null, array = [];
|
|
150
|
-
context = null;
|
|
151
|
-
const equivalences = new Equivalences(context, string, node, array);
|
|
152
|
-
return equivalences;
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
function definedVariablesFromGroundedTerms(groundedTerms, definedVariables, context) {
|
|
156
|
-
groundedTerms.forEach((groundedTerm)=>{
|
|
157
|
-
const term = groundedTerm, variables = (0, _equivalence.variablesFromTerm)(term, context);
|
|
158
|
-
variables.forEach((variable)=>{
|
|
159
|
-
const definedVariablesIncludesTermVariable = definedVariables.includes(variable);
|
|
160
|
-
if (!definedVariablesIncludesTermVariable) {
|
|
161
|
-
const definedVariable = variable; ///
|
|
162
|
-
definedVariables.push(definedVariable);
|
|
163
|
-
}
|
|
164
|
-
});
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
function groundedTermsFromGroundedEquivalencesAndDefinedVariables(groundedEquivalences, definedVariables, groundedTerms, context) {
|
|
168
|
-
groundedEquivalences.forEachEquivalence((groundedEquivalence)=>{
|
|
169
|
-
groundedEquivalence.getGroundedTerms(definedVariables, groundedTerms, context);
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2VxdWl2YWxlbmNlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHZhcmlhYmxlc0Zyb21UZXJtIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lcXVpdmFsZW5jZVwiO1xuXG5jb25zdCB7IHB1c2gsIHNlcGFyYXRlIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIEVxdWl2YWxlbmNlcyBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGFycmF5KSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlKTtcblxuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIGdldEFycmF5KCkge1xuICAgIHJldHVybiB0aGlzLmFycmF5O1xuICB9XG5cbiAgZ2V0RXF1aXZhbGVuY2VzTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgZXF1aXZhbGVuY2VzTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBlcXVpdmFsZW5jZXNOb2RlO1xuICB9XG5cbiAgZ2V0TGVuZ3RoKCkgeyByZXR1cm4gdGhpcy5hcnJheS5sZW5ndGg7IH1cblxuICBnZXRUeXBlcygpIHtcbiAgICBjb25zdCB0eXBlcyA9IHRoaXMuYXJyYXkubWFwKChlcXVpdmFsZW5jZSkgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9IGVxdWl2YWxlbmNlLmdldFR5cGUoKTtcblxuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHlwZXM7XG4gIH1cblxuICBhZGRFcXVpdmFsZW5jZShlcXVpdmFsZW5jZSkge1xuICAgIHRoaXMuYXJyYXkucHVzaChlcXVpdmFsZW5jZSk7XG4gIH1cblxuICBhZGRFcXVpdmFsZW5jZXMoZXF1aXZhbGVuY2VzKSB7XG4gICAgY29uc3QgYXJyYXkgPSBlcXVpdmFsZW5jZXMuZ2V0QXJyYXkoKTtcblxuICAgIHB1c2godGhpcy5hcnJheSwgYXJyYXkpO1xuICB9XG5cbiAgc29tZUVxdWl2YWxlbmNlKGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLmFycmF5LnNvbWUoY2FsbGJhY2spOyB9XG5cbiAgZXZlcnlFcXVpdmFsZW5jZShjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5hcnJheS5ldmVyeShjYWxsYmFjayk7IH1cblxuICBmb3JFYWNoRXF1aXZhbGVuY2UoY2FsbGJhY2spIHsgdGhpcy5hcnJheS5mb3JFYWNoKGNhbGxiYWNrKTsgfVxuXG4gIGZpbmRFcXVpdmFsZW5jZUJ5VGVybSh0ZXJtKSB7XG4gICAgY29uc3QgZXF1aXZhbGVuY2UgPSB0aGlzLmFycmF5LmZpbmQoKGVxdWl2YWxlbmNlKSA9PiB7XG4gICAgICBjb25zdCBlcXVpdmFsZW5jZUNvbXBhcmVzVG9UZXJtID0gZXF1aXZhbGVuY2UuY29tcGFyZVRlcm0odGVybSk7XG5cbiAgICAgIGlmIChlcXVpdmFsZW5jZUNvbXBhcmVzVG9UZXJtKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZXF1aXZhbGVuY2U7XG4gIH1cblxuICBmaW5kRXF1aXZhbGVuY2VCeVRlcm1Ob2Rlcyh0ZXJtTm9kZXMpIHtcbiAgICBjb25zdCBlcXVpdmFsZW5jZSA9IHRoaXMuYXJyYXkuZmluZCgoZXF1aXZhbGVuY2UpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1Ob2RlTWF0Y2hlcyA9IGVxdWl2YWxlbmNlLm1hdGNoVGVybU5vZGVzKHRlcm1Ob2Rlcyk7XG5cbiAgICAgIGlmICh0ZXJtTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBlcXVpdmFsZW5jZTtcbiAgfVxuXG4gIG1lcmdlZFdpdGgoZXF1aXZhbGVuY2VzLCBjb250ZXh0KSB7XG4gICAgbGV0ICBtZXJnZWRFcXVpdmFsZW5jZXMgPSB0aGlzLmNsb25lKGNvbnRleHQpOyAvLy9cblxuICAgIGVxdWl2YWxlbmNlcy5mb3JFYWNoRXF1aXZhbGVuY2UoKGVxdWl2YWxlbmNlKSA9PiB7XG4gICAgICBtZXJnZWRFcXVpdmFsZW5jZXMgPSBtZXJnZWRFcXVpdmFsZW5jZXMubWVyZ2VkV2l0aEVxdWl2YWxlbmNlKGVxdWl2YWxlbmNlLCBjb250ZXh0KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBtZXJnZWRFcXVpdmFsZW5jZXM7XG4gIH1cblxuICBtZXJnZWRXaXRoRXF1aXZhbGVuY2UoZXF1aXZhbGVuY2UsIGNvbnRleHQpIHtcbiAgICBjb25zdCBlcXVpdmFsZW5jZXMgPSBFcXVpdmFsZW5jZXMuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgICBsZXQgbWVyZ2VkRXF1aXZhbGVuY2UgPSBlcXVpdmFsZW5jZTsgLy8vXG5cbiAgICB0aGlzLmZvckVhY2hFcXVpdmFsZW5jZSgoZXF1aXZhbGVuY2UpID0+IHtcbiAgICAgIGNvbnN0IG1lcmdlZEVxdWl2YWxlbmNlRGlzam9pbnRGcm9tRXF1aXZhbGVuY2UgPSBtZXJnZWRFcXVpdmFsZW5jZS5pc0Rpc2pvaW50RnJvbShlcXVpdmFsZW5jZSk7XG5cbiAgICAgIGlmIChtZXJnZWRFcXVpdmFsZW5jZURpc2pvaW50RnJvbUVxdWl2YWxlbmNlKSB7XG4gICAgICAgIGVxdWl2YWxlbmNlcy5hZGRFcXVpdmFsZW5jZShlcXVpdmFsZW5jZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXJnZWRFcXVpdmFsZW5jZSA9IG1lcmdlZEVxdWl2YWxlbmNlLm1lcmdlZFdpdGgoZXF1aXZhbGVuY2UsIGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZXF1aXZhbGVuY2UgPSBtZXJnZWRFcXVpdmFsZW5jZTsgIC8vL1xuXG4gICAgZXF1aXZhbGVuY2VzLmFkZEVxdWl2YWxlbmNlKGVxdWl2YWxlbmNlKTtcblxuICAgIHJldHVybiBlcXVpdmFsZW5jZXM7XG4gIH1cblxuICBzZXBhcmF0ZUVxdWl2YWxlbmNlcyhlcXVpdmFsZW5jZXNBLCBlcXVpdmFsZW5jZXNCLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IGVxdWl2YWxlbmNlc0FBcnJheSA9IGVxdWl2YWxlbmNlc0EuZ2V0QXJyYXkoKSxcbiAgICAgICAgICBlcXVpdmFsZW5jZXNCQXJyYXkgPSBlcXVpdmFsZW5jZXNCLmdldEFycmF5KCk7XG5cbiAgICBzZXBhcmF0ZSh0aGlzLmFycmF5LCBlcXVpdmFsZW5jZXNBQXJyYXksIGVxdWl2YWxlbmNlc0JBcnJheSwgY2FsbGJhY2spO1xuICB9XG5cbiAgc2VwYXJhdGVJbml0aWFsbHlHcm91bmRlZEVxdWl2YWxlbmNlcyhyZW1haW5pbmdFcXVpdmFsZW5jZXMsIGluaXRpYWxseUdyb3VuZGVkRXF1aXZhbGVuY2VzLCBjb250ZXh0KSB7XG4gICAgdGhpcy5zZXBhcmF0ZUVxdWl2YWxlbmNlcyhyZW1haW5pbmdFcXVpdmFsZW5jZXMsIGluaXRpYWxseUdyb3VuZGVkRXF1aXZhbGVuY2VzLCAoZXF1aXZhbGVuY2UpID0+IHtcbiAgICAgIGNvbnN0IGVxdWl2YWxlbmNlSW5pdGlhbGx5R3JvdW5kZWQgPSBlcXVpdmFsZW5jZS5pc0luaXRpYWxseUdyb3VuZGVkKGNvbnRleHQpO1xuXG4gICAgICBpZiAoIWVxdWl2YWxlbmNlSW5pdGlhbGx5R3JvdW5kZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXBhcmF0ZUltcGxpY2l0bHlHcm91bmRlZEVxdWl2YWxlbmNlcyhyZW1haW5pbmdFcXVpdmFsZW5jZXMsIGltcGxpY2l0bHlHcm91bmRlZEVxdWl2YWxlbmNlcywgZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCkge1xuICAgIHRoaXMuc2VwYXJhdGVFcXVpdmFsZW5jZXMocmVtYWluaW5nRXF1aXZhbGVuY2VzLCBpbXBsaWNpdGx5R3JvdW5kZWRFcXVpdmFsZW5jZXMsIChlcXVpdmFsZW5jZSkgPT4ge1xuICAgICAgY29uc3QgZXF1aXZhbGVuY2VJbXBsaWNpdGx5R3JvdW5kZWQgPSBlcXVpdmFsZW5jZS5pc0ltcGxpY2l0bHlHcm91bmRlZChkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KTtcblxuICAgICAgaWYgKCFlcXVpdmFsZW5jZUltcGxpY2l0bHlHcm91bmRlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNlcGFyYXRlR3JvdW5kZWRUZXJtc0FuZERlZmluZWRWYXJpYWJsZXMoZ3JvdW5kZWRUZXJtcywgZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCkge1xuICAgIGxldCBlcXVpdmFsZW5jZXMgPSB0aGlzLCAgLy8vXG4gICAgICAgIGdyb3VuZGVkRXF1aXZhbGVuY2VzLFxuICAgICAgICByZW1haW5pbmdFcXVpdmFsZW5jZXMsXG4gICAgICAgIGluaXRpYWxseUdyb3VuZGVkRXF1aXZhbGVuY2VzLFxuICAgICAgICBpbXBsaWNpdGx5R3JvdW5kZWRFcXVpdmFsZW5jZXM7XG5cbiAgICByZW1haW5pbmdFcXVpdmFsZW5jZXMgPUVxdWl2YWxlbmNlcy5mcm9tTm90aGluZyhjb250ZXh0KTtcblxuICAgIGluaXRpYWxseUdyb3VuZGVkRXF1aXZhbGVuY2VzID0gRXF1aXZhbGVuY2VzLmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuXG4gICAgZXF1aXZhbGVuY2VzLnNlcGFyYXRlSW5pdGlhbGx5R3JvdW5kZWRFcXVpdmFsZW5jZXMocmVtYWluaW5nRXF1aXZhbGVuY2VzLCBpbml0aWFsbHlHcm91bmRlZEVxdWl2YWxlbmNlcywgY29udGV4dCk7XG5cbiAgICBjb25zdCBpbml0aWFsbHlHcm91bmRlZEVxdWl2YWxlbmNlc0xlbmd0aCA9IGluaXRpYWxseUdyb3VuZGVkRXF1aXZhbGVuY2VzLmdldExlbmd0aCgpO1xuXG4gICAgaWYgKGluaXRpYWxseUdyb3VuZGVkRXF1aXZhbGVuY2VzTGVuZ3RoID4gMCkge1xuICAgICAgZ3JvdW5kZWRFcXVpdmFsZW5jZXMgPSBpbml0aWFsbHlHcm91bmRlZEVxdWl2YWxlbmNlczsgLy8vXG5cbiAgICAgIGxldCBpbXBsaWNpdGx5R3JvdW5kZWRFcXVpdmFsZW5jZXNMZW5ndGggPSAxO1xuXG4gICAgICB3aGlsZSAoaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzTGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgZGVmaW5lZFZhcmlhYmxlc0xlbmd0aCA9IDAsXG4gICAgICAgICAgICBwcmV2aW91c0RlZmluZWRWYXJpYWJsZXNMZW5ndGggPSAtMTtcblxuICAgICAgICB3aGlsZSAoZGVmaW5lZFZhcmlhYmxlc0xlbmd0aCA+IHByZXZpb3VzRGVmaW5lZFZhcmlhYmxlc0xlbmd0aCkge1xuICAgICAgICAgIHByZXZpb3VzRGVmaW5lZFZhcmlhYmxlc0xlbmd0aCA9IGRlZmluZWRWYXJpYWJsZXNMZW5ndGg7ICAvLy9cblxuICAgICAgICAgIGdyb3VuZGVkVGVybXNGcm9tR3JvdW5kZWRFcXVpdmFsZW5jZXNBbmREZWZpbmVkVmFyaWFibGVzKGdyb3VuZGVkRXF1aXZhbGVuY2VzLCBkZWZpbmVkVmFyaWFibGVzLCBncm91bmRlZFRlcm1zLCBjb250ZXh0KTtcblxuICAgICAgICAgIGRlZmluZWRWYXJpYWJsZXNGcm9tR3JvdW5kZWRUZXJtcyhncm91bmRlZFRlcm1zLCBkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KTtcblxuICAgICAgICAgIGRlZmluZWRWYXJpYWJsZXNMZW5ndGggPSBkZWZpbmVkVmFyaWFibGVzLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGVxdWl2YWxlbmNlcyA9IHJlbWFpbmluZ0VxdWl2YWxlbmNlczsgLy8vXG5cbiAgICAgICAgcmVtYWluaW5nRXF1aXZhbGVuY2VzID0gW107XG5cbiAgICAgICAgaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzID0gW107XG5cbiAgICAgICAgZXF1aXZhbGVuY2VzLnNlcGFyYXRlSW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzKHJlbWFpbmluZ0VxdWl2YWxlbmNlcywgaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzLCBkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KTtcblxuICAgICAgICBncm91bmRlZEVxdWl2YWxlbmNlcy5hZGRFcXVpdmFsZW5jZXMoaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzKTtcblxuICAgICAgICBpbXBsaWNpdGx5R3JvdW5kZWRFcXVpdmFsZW5jZXNMZW5ndGggPSBpbXBsaWNpdGx5R3JvdW5kZWRFcXVpdmFsZW5jZXMuZ2V0TGVuZ3RoKCk7ICAvLy9cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjbG9uZShjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RyaW5nID0gRU1QVFlfU1RSSU5HLFxuICAgICAgICAgIG5vZGUgPSBudWxsLFxuICAgICAgICAgIGFycmF5ID0gW1xuICAgICAgICAgICAgLi4udGhpcy5hcnJheVxuICAgICAgICAgIF0sXG4gICAgICAgICAgZXF1aXZhbGVuY2VzID0gbmV3IEVxdWl2YWxlbmNlcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGFycmF5KTtcblxuICAgIHJldHVybiBlcXVpdmFsZW5jZXM7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiRXF1aXZhbGVuY2VzXCI7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKGNvbnRleHQpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgbm9kZSA9IG51bGwsXG4gICAgICAgICAgYXJyYXkgPSBbXTtcblxuICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgY29uc3QgZXF1aXZhbGVuY2VzID0gbmV3IEVxdWl2YWxlbmNlcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGFycmF5KTtcblxuICAgIHJldHVybiBlcXVpdmFsZW5jZXM7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBkZWZpbmVkVmFyaWFibGVzRnJvbUdyb3VuZGVkVGVybXMoZ3JvdW5kZWRUZXJtcywgZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCkge1xuICBncm91bmRlZFRlcm1zLmZvckVhY2goKGdyb3VuZGVkVGVybSkgPT4ge1xuICAgIGNvbnN0IHRlcm0gPSBncm91bmRlZFRlcm0sICAvLy9cbiAgICAgICAgICB2YXJpYWJsZXMgPSB2YXJpYWJsZXNGcm9tVGVybSh0ZXJtLCBjb250ZXh0KTtcblxuICAgIHZhcmlhYmxlcy5mb3JFYWNoKCh2YXJpYWJsZSkgPT4ge1xuICAgICAgY29uc3QgZGVmaW5lZFZhcmlhYmxlc0luY2x1ZGVzVGVybVZhcmlhYmxlID0gZGVmaW5lZFZhcmlhYmxlcy5pbmNsdWRlcyh2YXJpYWJsZSk7XG5cbiAgICAgIGlmICghZGVmaW5lZFZhcmlhYmxlc0luY2x1ZGVzVGVybVZhcmlhYmxlKSB7XG4gICAgICAgIGNvbnN0IGRlZmluZWRWYXJpYWJsZSA9IHZhcmlhYmxlOyAgLy8vXG5cbiAgICAgICAgZGVmaW5lZFZhcmlhYmxlcy5wdXNoKGRlZmluZWRWYXJpYWJsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBncm91bmRlZFRlcm1zRnJvbUdyb3VuZGVkRXF1aXZhbGVuY2VzQW5kRGVmaW5lZFZhcmlhYmxlcyhncm91bmRlZEVxdWl2YWxlbmNlcywgZGVmaW5lZFZhcmlhYmxlcywgZ3JvdW5kZWRUZXJtcywgY29udGV4dCkge1xuICBncm91bmRlZEVxdWl2YWxlbmNlcy5mb3JFYWNoRXF1aXZhbGVuY2UoKGdyb3VuZGVkRXF1aXZhbGVuY2UpID0+IHtcbiAgICBncm91bmRlZEVxdWl2YWxlbmNlLmdldEdyb3VuZGVkVGVybXMoZGVmaW5lZFZhcmlhYmxlcywgZ3JvdW5kZWRUZXJtcywgY29udGV4dCk7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbInB1c2giLCJzZXBhcmF0ZSIsImFycmF5VXRpbGl0aWVzIiwiZGVmaW5lIiwiRXF1aXZhbGVuY2VzIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYXJyYXkiLCJnZXRBcnJheSIsImdldEVxdWl2YWxlbmNlc05vZGUiLCJnZXROb2RlIiwiZXF1aXZhbGVuY2VzTm9kZSIsImdldExlbmd0aCIsImxlbmd0aCIsImdldFR5cGVzIiwidHlwZXMiLCJtYXAiLCJlcXVpdmFsZW5jZSIsInR5cGUiLCJnZXRUeXBlIiwiYWRkRXF1aXZhbGVuY2UiLCJhZGRFcXVpdmFsZW5jZXMiLCJlcXVpdmFsZW5jZXMiLCJzb21lRXF1aXZhbGVuY2UiLCJjYWxsYmFjayIsInNvbWUiLCJldmVyeUVxdWl2YWxlbmNlIiwiZXZlcnkiLCJmb3JFYWNoRXF1aXZhbGVuY2UiLCJmb3JFYWNoIiwiZmluZEVxdWl2YWxlbmNlQnlUZXJtIiwidGVybSIsImZpbmQiLCJlcXVpdmFsZW5jZUNvbXBhcmVzVG9UZXJtIiwiY29tcGFyZVRlcm0iLCJmaW5kRXF1aXZhbGVuY2VCeVRlcm1Ob2RlcyIsInRlcm1Ob2RlcyIsInRlcm1Ob2RlTWF0Y2hlcyIsIm1hdGNoVGVybU5vZGVzIiwibWVyZ2VkV2l0aCIsIm1lcmdlZEVxdWl2YWxlbmNlcyIsImNsb25lIiwibWVyZ2VkV2l0aEVxdWl2YWxlbmNlIiwiZnJvbU5vdGhpbmciLCJtZXJnZWRFcXVpdmFsZW5jZSIsIm1lcmdlZEVxdWl2YWxlbmNlRGlzam9pbnRGcm9tRXF1aXZhbGVuY2UiLCJpc0Rpc2pvaW50RnJvbSIsInNlcGFyYXRlRXF1aXZhbGVuY2VzIiwiZXF1aXZhbGVuY2VzQSIsImVxdWl2YWxlbmNlc0IiLCJlcXVpdmFsZW5jZXNBQXJyYXkiLCJlcXVpdmFsZW5jZXNCQXJyYXkiLCJzZXBhcmF0ZUluaXRpYWxseUdyb3VuZGVkRXF1aXZhbGVuY2VzIiwicmVtYWluaW5nRXF1aXZhbGVuY2VzIiwiaW5pdGlhbGx5R3JvdW5kZWRFcXVpdmFsZW5jZXMiLCJlcXVpdmFsZW5jZUluaXRpYWxseUdyb3VuZGVkIiwiaXNJbml0aWFsbHlHcm91bmRlZCIsInNlcGFyYXRlSW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzIiwiaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzIiwiZGVmaW5lZFZhcmlhYmxlcyIsImVxdWl2YWxlbmNlSW1wbGljaXRseUdyb3VuZGVkIiwiaXNJbXBsaWNpdGx5R3JvdW5kZWQiLCJzZXBhcmF0ZUdyb3VuZGVkVGVybXNBbmREZWZpbmVkVmFyaWFibGVzIiwiZ3JvdW5kZWRUZXJtcyIsImdyb3VuZGVkRXF1aXZhbGVuY2VzIiwiaW5pdGlhbGx5R3JvdW5kZWRFcXVpdmFsZW5jZXNMZW5ndGgiLCJpbXBsaWNpdGx5R3JvdW5kZWRFcXVpdmFsZW5jZXNMZW5ndGgiLCJkZWZpbmVkVmFyaWFibGVzTGVuZ3RoIiwicHJldmlvdXNEZWZpbmVkVmFyaWFibGVzTGVuZ3RoIiwiZ3JvdW5kZWRUZXJtc0Zyb21Hcm91bmRlZEVxdWl2YWxlbmNlc0FuZERlZmluZWRWYXJpYWJsZXMiLCJkZWZpbmVkVmFyaWFibGVzRnJvbUdyb3VuZGVkVGVybXMiLCJFTVBUWV9TVFJJTkciLCJuYW1lIiwiZ3JvdW5kZWRUZXJtIiwidmFyaWFibGVzIiwidmFyaWFibGVzRnJvbVRlcm0iLCJ2YXJpYWJsZSIsImRlZmluZWRWYXJpYWJsZXNJbmNsdWRlc1Rlcm1WYXJpYWJsZSIsImluY2x1ZGVzIiwiZGVmaW5lZFZhcmlhYmxlIiwiZ3JvdW5kZWRFcXVpdmFsZW5jZSIsImdldEdyb3VuZGVkVGVybXMiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVdBOzs7ZUFBQTs7O2dDQVR3QjsyQkFDTzswQkFFUjsyQkFDTTs2QkFDSztBQUVsQyxNQUFNLEVBQUVBLElBQUksRUFBRUMsUUFBUSxFQUFFLEdBQUdDLHlCQUFjO01BRXpDLFdBQWVD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
|