occam-verify-cli 0.0.502 → 0.0.503
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/axiom.js +4 -4
- package/lib/axiomLemmaTheorem.js +58 -58
- package/lib/consequence.js +157 -0
- package/lib/lemma.js +4 -4
- package/lib/metaSupposition.js +214 -0
- package/lib/supposition.js +214 -0
- package/lib/theorem.js +4 -4
- package/lib/verify/axiom.js +11 -11
- package/lib/verify/consequence.js +35 -0
- package/lib/verify/derivation.js +7 -7
- package/lib/verify/lemma.js +12 -12
- package/lib/verify/metaDerivation.js +7 -7
- package/lib/verify/metaSupposition.js +41 -0
- package/lib/verify/supposition.js +41 -0
- package/lib/verify/theorem.js +12 -12
- package/package.json +1 -1
- package/src/axiom.js +1 -1
- package/src/axiomLemmaTheorem.js +57 -57
- package/src/consequence.js +187 -0
- package/src/lemma.js +1 -1
- package/src/metaSupposition.js +235 -0
- package/src/supposition.js +235 -0
- package/src/theorem.js +1 -1
- package/src/verify/axiom.js +17 -17
- package/src/verify/consequence.js +34 -0
- package/src/verify/derivation.js +8 -8
- package/src/verify/lemma.js +18 -18
- package/src/verify/metaDerivation.js +8 -8
- package/src/verify/metaSupposition.js +44 -0
- package/src/verify/supposition.js +44 -0
- package/src/verify/theorem.js +18 -18
- package/lib/antecedent.js +0 -214
- package/lib/consequent.js +0 -157
- package/lib/metaAntecedent.js +0 -214
- package/lib/verify/antecedent.js +0 -41
- package/lib/verify/consequent.js +0 -35
- package/lib/verify/metaAntecedent.js +0 -41
- package/src/antecedent.js +0 -235
- package/src/consequent.js +0 -187
- package/src/metaAntecedent.js +0 -235
- package/src/verify/antecedent.js +0 -44
- package/src/verify/consequent.js +0 -34
- package/src/verify/metaAntecedent.js +0 -44
|
@@ -0,0 +1,214 @@
|
|
|
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 MetaSupposition;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
var _metaSubstitution = /*#__PURE__*/ _interopRequireDefault(require("./metaSubstitution"));
|
|
12
|
+
var _array = require("./utilities/array");
|
|
13
|
+
var _string = require("./utilities/string");
|
|
14
|
+
var _query = require("./utilities/query");
|
|
15
|
+
var _ruleNames = require("./ruleNames");
|
|
16
|
+
function _arrayLikeToArray(arr, len) {
|
|
17
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
18
|
+
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
19
|
+
return arr2;
|
|
20
|
+
}
|
|
21
|
+
function _arrayWithoutHoles(arr) {
|
|
22
|
+
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
|
|
23
|
+
}
|
|
24
|
+
function _classCallCheck(instance, Constructor) {
|
|
25
|
+
if (!(instance instanceof Constructor)) {
|
|
26
|
+
throw new TypeError("Cannot call a class as a function");
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function _defineProperties(target, props) {
|
|
30
|
+
for(var i = 0; i < props.length; i++){
|
|
31
|
+
var descriptor = props[i];
|
|
32
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
|
33
|
+
descriptor.configurable = true;
|
|
34
|
+
if ("value" in descriptor) descriptor.writable = true;
|
|
35
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function _createClass(Constructor, protoProps, staticProps) {
|
|
39
|
+
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
40
|
+
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
41
|
+
return Constructor;
|
|
42
|
+
}
|
|
43
|
+
function _interopRequireDefault(obj) {
|
|
44
|
+
return obj && obj.__esModule ? obj : {
|
|
45
|
+
default: obj
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function _iterableToArray(iter) {
|
|
49
|
+
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
50
|
+
}
|
|
51
|
+
function _nonIterableSpread() {
|
|
52
|
+
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
53
|
+
}
|
|
54
|
+
function _toConsumableArray(arr) {
|
|
55
|
+
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
|
|
56
|
+
}
|
|
57
|
+
function _unsupportedIterableToArray(o, minLen) {
|
|
58
|
+
if (!o) return;
|
|
59
|
+
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
60
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
61
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
62
|
+
if (n === "Map" || n === "Set") return Array.from(n);
|
|
63
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
64
|
+
}
|
|
65
|
+
var metastatementNodesQuery = (0, _query.nodesQuery)("/metaSubproofAssertion/metastatement"), metaSubproofAssertionNodeQuery = (0, _query.nodeQuery)("/metastatement/metaSubproofAssertion!"), unqualifiedMetastatementMetastatementNodesQuery = (0, _query.nodesQuery)("/metaSubproof/unqualifiedMetastatement/metastatement!"), qualifiedOrUnqualifiedMetastatementMetastatementNodeQuery = (0, _query.nodeQuery)("/metaSubproof/subDerivation/qualifiedMetastatement|unqualifiedMetastatement[-1]/metastatement!");
|
|
66
|
+
var MetaSupposition = /*#__PURE__*/ function() {
|
|
67
|
+
function MetaSupposition(metastatementNode) {
|
|
68
|
+
_classCallCheck(this, MetaSupposition);
|
|
69
|
+
this.metastatementNode = metastatementNode;
|
|
70
|
+
}
|
|
71
|
+
_createClass(MetaSupposition, [
|
|
72
|
+
{
|
|
73
|
+
key: "getMetastatementNode",
|
|
74
|
+
value: function getMetastatementNode() {
|
|
75
|
+
return this.metastatementNode;
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
key: "matchSubproofNode",
|
|
80
|
+
value: function matchSubproofNode(metaSubproofNode, metaSubstitutions) {
|
|
81
|
+
var metaSubproofNodeMatches = false;
|
|
82
|
+
var metaSubproofAssertionNode = metaSubproofAssertionNodeQuery(this.metastatementNode);
|
|
83
|
+
if (metaSubproofAssertionNode !== null) {
|
|
84
|
+
var metaSubproofAssertionMetastatementNodes = metastatementNodesQuery(metaSubproofAssertionNode), unqualifiedMetastatementMetastatementNodes = unqualifiedMetastatementMetastatementNodesQuery(metaSubproofNode), qualifiedOrUnqualifiedMetastatementMetastatementNode = qualifiedOrUnqualifiedMetastatementMetastatementNodeQuery(metaSubproofNode), metastatementNodes = _toConsumableArray(unqualifiedMetastatementMetastatementNodes).concat([
|
|
85
|
+
qualifiedOrUnqualifiedMetastatementMetastatementNode
|
|
86
|
+
]), metastatementNodesLength = metastatementNodes.length, metaSubproofAssertionMetastatementNodesLength = metaSubproofAssertionMetastatementNodes.length;
|
|
87
|
+
if (metastatementNodesLength === metaSubproofAssertionMetastatementNodesLength) {
|
|
88
|
+
metaSubproofNodeMatches = metaSubproofAssertionMetastatementNodes.every(function(metaSubproofAssertionMetastatementNode, index) {
|
|
89
|
+
var metastatementNode = metastatementNodes[index], nonTerminalNode = metastatementNode, metaSuppositionNonTerminalNode = metaSubproofAssertionMetastatementNode, metaSuppositionNonTerminalNodeMatches = matchMetaSuppositionNonTerminalNode(metaSuppositionNonTerminalNode, nonTerminalNode, metaSubstitutions);
|
|
90
|
+
if (metaSuppositionNonTerminalNodeMatches) {
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return metaSubproofNodeMatches;
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
key: "matchMetastatementNode",
|
|
101
|
+
value: function matchMetastatementNode(metastatementNode, metaSubstitutions) {
|
|
102
|
+
var nonTerminalNode = metastatementNode, metaSuppositionNonTerminalNode = this.metastatementNode, metaSuppositionNonTerminalNodeMatches = matchMetaSuppositionNonTerminalNode(metaSuppositionNonTerminalNode, nonTerminalNode, metaSubstitutions), metastatementNodeMatches = metaSuppositionNonTerminalNodeMatches; ///
|
|
103
|
+
return metastatementNodeMatches;
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
key: "toJSON",
|
|
108
|
+
value: function toJSON() {
|
|
109
|
+
var metastatementString = (0, _string.nodeAsString)(this.metastatementNode), metastatement = metastatementString, json = {
|
|
110
|
+
metastatement: metastatement
|
|
111
|
+
};
|
|
112
|
+
return json;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
], [
|
|
116
|
+
{
|
|
117
|
+
key: "fromJSON",
|
|
118
|
+
value: function fromJSON(json, releaseContext) {
|
|
119
|
+
var metastatement = json.metastatement, metastatementString = metastatement, metastatementNode = (0, _string.metastatementNodeFromMetastatementString)(metastatementString, releaseContext), metaSupposition = new MetaSupposition(metastatementNode);
|
|
120
|
+
return metaSupposition;
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
key: "fromMetastatementNode",
|
|
125
|
+
value: function fromMetastatementNode(metastatementNode) {
|
|
126
|
+
var metaSupposition = new MetaSupposition(metastatementNode);
|
|
127
|
+
return metaSupposition;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
]);
|
|
131
|
+
return MetaSupposition;
|
|
132
|
+
}();
|
|
133
|
+
function matchMetaSuppositionNode(metaSuppositionNode, node, metaSubstitutions) {
|
|
134
|
+
var metaSuppositionNodeMatches = false;
|
|
135
|
+
var nodeTerminalNode = node.isTerminalNode(), ruleNodeTerminalNode = metaSuppositionNode.isTerminalNode();
|
|
136
|
+
if (nodeTerminalNode === ruleNodeTerminalNode) {
|
|
137
|
+
if (nodeTerminalNode) {
|
|
138
|
+
var terminalNode = node, metaSuppositionTerminalNode = metaSuppositionNode, metaSuppositionTerminalNodeMatches = matchMetaSuppositionTerminalNode(metaSuppositionTerminalNode, terminalNode, metaSubstitutions);
|
|
139
|
+
metaSuppositionNodeMatches = metaSuppositionTerminalNodeMatches; ///
|
|
140
|
+
} else {
|
|
141
|
+
var nonTerminalNode = node, metaSuppositionNonTerminalNode = metaSuppositionNode, metaSuppositionNonTerminalNodeMatches = matchMetaSuppositionNonTerminalNode(metaSuppositionNonTerminalNode, nonTerminalNode, metaSubstitutions);
|
|
142
|
+
metaSuppositionNodeMatches = metaSuppositionNonTerminalNodeMatches; ///
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return metaSuppositionNodeMatches;
|
|
146
|
+
}
|
|
147
|
+
function matchMetaSuppositionNodes(metaSuppositionNodes, nodes, metaSubstitutions) {
|
|
148
|
+
var metaSuppositionNodesMatches = false;
|
|
149
|
+
var nodesLength = nodes.length, metaSuppositionNodesLength = metaSuppositionNodes.length;
|
|
150
|
+
if (nodesLength === metaSuppositionNodesLength) {
|
|
151
|
+
metaSuppositionNodesMatches = nodes.every(function(node, index) {
|
|
152
|
+
var metaSuppositionNode = metaSuppositionNodes[index], metaSuppositionNodeMatches = matchMetaSuppositionNode(metaSuppositionNode, node, metaSubstitutions);
|
|
153
|
+
if (metaSuppositionNodeMatches) {
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
return metaSuppositionNodesMatches;
|
|
159
|
+
}
|
|
160
|
+
function matchMetaSuppositionMetavariable(metaSuppositionMetavariableNode, nodes, metaSubstitutions) {
|
|
161
|
+
var metaSuppositionMetavariableMatches;
|
|
162
|
+
var metaSuppositionMetavariableName = (0, _query.metavariableNameFromMetavariableNode)(metaSuppositionMetavariableNode), metaSubstitution = metaSubstitutions.find(function(metaSubstitution) {
|
|
163
|
+
var metavariableName = metaSubstitution.getMetavariableName();
|
|
164
|
+
if (metavariableName === metaSuppositionMetavariableName) {
|
|
165
|
+
return true;
|
|
166
|
+
}
|
|
167
|
+
}) || null;
|
|
168
|
+
if (metaSubstitution !== null) {
|
|
169
|
+
var metaSubstitutionNodesMatch = metaSubstitution.matchNodes(nodes);
|
|
170
|
+
metaSuppositionMetavariableMatches = metaSubstitutionNodesMatch; ///
|
|
171
|
+
} else {
|
|
172
|
+
var metavariableName = metaSuppositionMetavariableName, metaSubstitution1 = _metaSubstitution.default.fromMetavariableNameAndNodes(metavariableName, nodes);
|
|
173
|
+
metaSubstitutions.push(metaSubstitution1);
|
|
174
|
+
metaSuppositionMetavariableMatches = true;
|
|
175
|
+
}
|
|
176
|
+
return metaSuppositionMetavariableMatches;
|
|
177
|
+
}
|
|
178
|
+
function matchMetaSuppositionTerminalNode(metaSuppositionTerminalNode, terminalNode, metaSubstitutions) {
|
|
179
|
+
var matches = metaSuppositionTerminalNode.match(terminalNode), metaSuppositionTerminalNodeMatches = matches;
|
|
180
|
+
return metaSuppositionTerminalNodeMatches;
|
|
181
|
+
}
|
|
182
|
+
function matchMetaSuppositionNonTerminalNode(metaSuppositionNonTerminalNode, nonTerminalNode, metaSubstitutions) {
|
|
183
|
+
var metaSuppositionNonTerminalNodeMatches = false;
|
|
184
|
+
var ruleName = nonTerminalNode.getRuleName(), metaSuppositionRuleName = metaSuppositionNonTerminalNode.getRuleName(); ///
|
|
185
|
+
if (ruleName === metaSuppositionRuleName) {
|
|
186
|
+
var childNodes = nonTerminalNode.getChildNodes(), metaSuppositionChildNodes = metaSuppositionNonTerminalNode.getChildNodes(), nodes = childNodes, metaSuppositionNodes = metaSuppositionChildNodes, metaSuppositionChildNodesMatches = matchMetaSuppositionNodes(metaSuppositionNodes, nodes, metaSubstitutions);
|
|
187
|
+
metaSuppositionNonTerminalNodeMatches = metaSuppositionChildNodesMatches; ///
|
|
188
|
+
if (!metaSuppositionNonTerminalNodeMatches) {
|
|
189
|
+
var ruleNameMetastatementRuleName = ruleName === _ruleNames.METASTATEMENT_RULE_NAME;
|
|
190
|
+
if (ruleNameMetastatementRuleName) {
|
|
191
|
+
var metastatementNode = nonTerminalNode, metaSuppositionMetastatementNode = metaSuppositionNonTerminalNode, metaSuppositionMetastatementNodeMatches = matchMetaSuppositionMetastatementNode(metaSuppositionMetastatementNode, metastatementNode, metaSubstitutions);
|
|
192
|
+
metaSuppositionNonTerminalNodeMatches = metaSuppositionMetastatementNodeMatches; ///
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return metaSuppositionNonTerminalNodeMatches;
|
|
197
|
+
}
|
|
198
|
+
function matchMetaSuppositionMetastatementNode(metaSuppositionMetastatementNode, metastatementNode, metaSubstitutions) {
|
|
199
|
+
var metaSuppositionMetastatementNodeMatches = false;
|
|
200
|
+
var metaSuppositionNonTerminalNode = metaSuppositionMetastatementNode, metaSuppositionChildNodes = metaSuppositionNonTerminalNode.getChildNodes(), metaSuppositionChildNodesLength = metaSuppositionChildNodes.length;
|
|
201
|
+
if (metaSuppositionChildNodesLength === 1) {
|
|
202
|
+
var firstMetaSuppositionChildNode = (0, _array.first)(metaSuppositionChildNodes), metaSuppositionChildNode = firstMetaSuppositionChildNode, metaSuppositionChildNodeNonTerminalNode = metaSuppositionChildNode.isNonTerminalNode();
|
|
203
|
+
if (metaSuppositionChildNodeNonTerminalNode) {
|
|
204
|
+
var metaSuppositionNonTerminalChildNode = metaSuppositionChildNode, metaSuppositionNonTerminalChildNodeRuleName = metaSuppositionNonTerminalChildNode.getRuleName(), metaSuppositionNonTerminalChildNodeRuleNameMetavariableRuleName = metaSuppositionNonTerminalChildNodeRuleName === _ruleNames.METAVARIABLE_RULE_NAME;
|
|
205
|
+
if (metaSuppositionNonTerminalChildNodeRuleNameMetavariableRuleName) {
|
|
206
|
+
var metaSuppositionMetavariableNode = metaSuppositionNonTerminalChildNode, nonTerminalNode = metastatementNode, childNodes = nonTerminalNode.getChildNodes(), nodes = childNodes, metaSuppositionMetavariableMatches = matchMetaSuppositionMetavariable(metaSuppositionMetavariableNode, nodes, metaSubstitutions);
|
|
207
|
+
metaSuppositionMetastatementNodeMatches = metaSuppositionMetavariableMatches; ///
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return metaSuppositionMetastatementNodeMatches;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tZXRhU3VwcG9zaXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNZXRhU3Vic3RpdHV0aW9uIGZyb20gXCIuL21ldGFTdWJzdGl0dXRpb25cIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IG5vZGVBc1N0cmluZyB9IGZyb20gXCIuL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IG5vZGVRdWVyeSwgbm9kZXNRdWVyeSB9IGZyb20gXCIuL3V0aWxpdGllcy9xdWVyeVwiO1xuaW1wb3J0IHsgbWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBtZXRhc3RhdGVtZW50Tm9kZUZyb21NZXRhc3RhdGVtZW50U3RyaW5nIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgTUVUQVZBUklBQkxFX1JVTEVfTkFNRSwgTUVUQVNUQVRFTUVOVF9SVUxFX05BTUUgfSBmcm9tIFwiLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgbWV0YXN0YXRlbWVudE5vZGVzUXVlcnkgPSBub2Rlc1F1ZXJ5KFwiL21ldGFTdWJwcm9vZkFzc2VydGlvbi9tZXRhc3RhdGVtZW50XCIpLFxuICAgICAgbWV0YVN1YnByb29mQXNzZXJ0aW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL21ldGFzdGF0ZW1lbnQvbWV0YVN1YnByb29mQXNzZXJ0aW9uIVwiKSxcbiAgICAgIHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE1ldGFzdGF0ZW1lbnROb2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeShcIi9tZXRhU3VicHJvb2YvdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50L21ldGFzdGF0ZW1lbnQhXCIpLFxuICAgICAgcXVhbGlmaWVkT3JVbnF1YWxpZmllZE1ldGFzdGF0ZW1lbnRNZXRhc3RhdGVtZW50Tm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL21ldGFTdWJwcm9vZi9zdWJEZXJpdmF0aW9uL3F1YWxpZmllZE1ldGFzdGF0ZW1lbnR8dW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50Wy0xXS9tZXRhc3RhdGVtZW50IVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0YVN1cHBvc2l0aW9uIHtcbiAgY29uc3RydWN0b3IobWV0YXN0YXRlbWVudE5vZGUpIHtcbiAgICB0aGlzLm1ldGFzdGF0ZW1lbnROb2RlID0gbWV0YXN0YXRlbWVudE5vZGU7XG4gIH1cblxuICBnZXRNZXRhc3RhdGVtZW50Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhc3RhdGVtZW50Tm9kZTtcbiAgfVxuXG4gIG1hdGNoU3VicHJvb2ZOb2RlKG1ldGFTdWJwcm9vZk5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKSB7XG4gICAgbGV0IG1ldGFTdWJwcm9vZk5vZGVNYXRjaGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBtZXRhU3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gbWV0YVN1YnByb29mQXNzZXJ0aW9uTm9kZVF1ZXJ5KHRoaXMubWV0YXN0YXRlbWVudE5vZGUpO1xuXG4gICAgaWYgKG1ldGFTdWJwcm9vZkFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlcyA9IG1ldGFzdGF0ZW1lbnROb2Rlc1F1ZXJ5KG1ldGFTdWJwcm9vZkFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgICAgdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVzID0gdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVzUXVlcnkobWV0YVN1YnByb29mTm9kZSksXG4gICAgICAgICAgICBxdWFsaWZpZWRPclVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE1ldGFzdGF0ZW1lbnROb2RlID0gcXVhbGlmaWVkT3JVbnF1YWxpZmllZE1ldGFzdGF0ZW1lbnRNZXRhc3RhdGVtZW50Tm9kZVF1ZXJ5KG1ldGFTdWJwcm9vZk5vZGUpLFxuICAgICAgICAgICAgbWV0YXN0YXRlbWVudE5vZGVzID0gW1xuICAgICAgICAgICAgICAuLi51bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnRNZXRhc3RhdGVtZW50Tm9kZXMsXG4gICAgICAgICAgICAgIHF1YWxpZmllZE9yVW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtZXRhc3RhdGVtZW50Tm9kZXNMZW5ndGggPSBtZXRhc3RhdGVtZW50Tm9kZXMubGVuZ3RoLFxuICAgICAgICAgICAgbWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGVzTGVuZ3RoID0gbWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGVzLmxlbmd0aDtcblxuICAgICAgaWYgKG1ldGFzdGF0ZW1lbnROb2Rlc0xlbmd0aCA9PT0gbWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGVzTGVuZ3RoKSB7XG4gICAgICAgIG1ldGFTdWJwcm9vZk5vZGVNYXRjaGVzID0gbWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGVzLmV2ZXJ5KChtZXRhU3VicHJvb2ZBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGFzdGF0ZW1lbnROb2RlID0gbWV0YXN0YXRlbWVudE5vZGVzW2luZGV4XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZSA9IG1ldGFzdGF0ZW1lbnROb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZSA9IG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhU3VwcG9zaXRpb25Ob25UZXJtaW5hbE5vZGVNYXRjaGVzID0gbWF0Y2hNZXRhU3VwcG9zaXRpb25Ob25UZXJtaW5hbE5vZGUobWV0YVN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlLCBub25UZXJtaW5hbE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGFTdWJwcm9vZk5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhc3RhdGVtZW50Tm9kZShtZXRhc3RhdGVtZW50Tm9kZSwgbWV0YVN1YnN0aXR1dGlvbnMpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBtZXRhc3RhdGVtZW50Tm9kZSwgIC8vL1xuICAgICAgICAgIG1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZSA9IHRoaXMubWV0YXN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgICBtZXRhU3VwcG9zaXRpb25Ob25UZXJtaW5hbE5vZGVNYXRjaGVzID0gbWF0Y2hNZXRhU3VwcG9zaXRpb25Ob25UZXJtaW5hbE5vZGUobWV0YVN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlLCBub25UZXJtaW5hbE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKSxcbiAgICAgICAgICBtZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBtZXRhU3VwcG9zaXRpb25Ob25UZXJtaW5hbE5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBtZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgbWV0YXN0YXRlbWVudFN0cmluZyA9IG5vZGVBc1N0cmluZyh0aGlzLm1ldGFzdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICBtZXRhc3RhdGVtZW50ID0gbWV0YXN0YXRlbWVudFN0cmluZywgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIG1ldGFzdGF0ZW1lbnRcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgcmVsZWFzZUNvbnRleHQpIHtcbiAgICBjb25zdCB7IG1ldGFzdGF0ZW1lbnQgfSA9IGpzb24sXG4gICAgICAgICAgbWV0YXN0YXRlbWVudFN0cmluZyA9IG1ldGFzdGF0ZW1lbnQsICAvLy9cbiAgICAgICAgICBtZXRhc3RhdGVtZW50Tm9kZSA9IG1ldGFzdGF0ZW1lbnROb2RlRnJvbU1ldGFzdGF0ZW1lbnRTdHJpbmcobWV0YXN0YXRlbWVudFN0cmluZywgcmVsZWFzZUNvbnRleHQpLFxuICAgICAgICAgIG1ldGFTdXBwb3NpdGlvbiA9IG5ldyBNZXRhU3VwcG9zaXRpb24obWV0YXN0YXRlbWVudE5vZGUpO1xuXG4gICAgcmV0dXJuIG1ldGFTdXBwb3NpdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTWV0YXN0YXRlbWVudE5vZGUobWV0YXN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBtZXRhU3VwcG9zaXRpb24gPSBuZXcgTWV0YVN1cHBvc2l0aW9uKG1ldGFzdGF0ZW1lbnROb2RlKTtcblxuICAgIHJldHVybiBtZXRhU3VwcG9zaXRpb247XG4gIH1cbn1cblxuZnVuY3Rpb24gbWF0Y2hNZXRhU3VwcG9zaXRpb25Ob2RlKG1ldGFTdXBwb3NpdGlvbk5vZGUsIG5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKSB7XG4gIGxldCBtZXRhU3VwcG9zaXRpb25Ob2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCksXG4gICAgICAgIHJ1bGVOb2RlVGVybWluYWxOb2RlID0gbWV0YVN1cHBvc2l0aW9uTm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlVGVybWluYWxOb2RlID09PSBydWxlTm9kZVRlcm1pbmFsTm9kZSkge1xuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICBtZXRhU3VwcG9zaXRpb25UZXJtaW5hbE5vZGUgPSBtZXRhU3VwcG9zaXRpb25Ob2RlLCAgLy8vXG4gICAgICAgICAgICBtZXRhU3VwcG9zaXRpb25UZXJtaW5hbE5vZGVNYXRjaGVzID0gbWF0Y2hNZXRhU3VwcG9zaXRpb25UZXJtaW5hbE5vZGUobWV0YVN1cHBvc2l0aW9uVGVybWluYWxOb2RlLCB0ZXJtaW5hbE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKTtcblxuICAgICAgbWV0YVN1cHBvc2l0aW9uTm9kZU1hdGNoZXMgPSBtZXRhU3VwcG9zaXRpb25UZXJtaW5hbE5vZGVNYXRjaGVzOyAgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgbWV0YVN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlID0gbWV0YVN1cHBvc2l0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgICAgbWV0YVN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IG1hdGNoTWV0YVN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlKG1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZSwgbm9uVGVybWluYWxOb2RlLCBtZXRhU3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgIG1ldGFTdXBwb3NpdGlvbk5vZGVNYXRjaGVzID0gbWV0YVN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlTWF0Y2hlczsgLy8vXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1ldGFTdXBwb3NpdGlvbk5vZGVNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBtYXRjaE1ldGFTdXBwb3NpdGlvbk5vZGVzKG1ldGFTdXBwb3NpdGlvbk5vZGVzLCBub2RlcywgbWV0YVN1YnN0aXR1dGlvbnMpIHtcbiAgbGV0IG1ldGFTdXBwb3NpdGlvbk5vZGVzTWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoLFxuICAgICAgICBtZXRhU3VwcG9zaXRpb25Ob2Rlc0xlbmd0aCA9IG1ldGFTdXBwb3NpdGlvbk5vZGVzLmxlbmd0aDtcblxuICBpZiAobm9kZXNMZW5ndGggPT09IG1ldGFTdXBwb3NpdGlvbk5vZGVzTGVuZ3RoKSB7XG4gICAgbWV0YVN1cHBvc2l0aW9uTm9kZXNNYXRjaGVzID0gbm9kZXMuZXZlcnkoKG5vZGUsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBtZXRhU3VwcG9zaXRpb25Ob2RlID0gbWV0YVN1cHBvc2l0aW9uTm9kZXNbaW5kZXhdLFxuICAgICAgICAgICAgbWV0YVN1cHBvc2l0aW9uTm9kZU1hdGNoZXMgPSBtYXRjaE1ldGFTdXBwb3NpdGlvbk5vZGUobWV0YVN1cHBvc2l0aW9uTm9kZSwgbm9kZSwgbWV0YVN1YnN0aXR1dGlvbnMpO1xuXG4gICAgICBpZiAobWV0YVN1cHBvc2l0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbWV0YVN1cHBvc2l0aW9uTm9kZXNNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBtYXRjaE1ldGFTdXBwb3NpdGlvbk1ldGF2YXJpYWJsZShtZXRhU3VwcG9zaXRpb25NZXRhdmFyaWFibGVOb2RlLCBub2RlcywgbWV0YVN1YnN0aXR1dGlvbnMpIHtcbiAgbGV0IG1ldGFTdXBwb3NpdGlvbk1ldGF2YXJpYWJsZU1hdGNoZXM7XG5cbiAgY29uc3QgbWV0YVN1cHBvc2l0aW9uTWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhU3VwcG9zaXRpb25NZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgbWV0YVN1YnN0aXR1dGlvbiA9IG1ldGFTdWJzdGl0dXRpb25zLmZpbmQoKG1ldGFTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gbWV0YVN1YnN0aXR1dGlvbi5nZXRNZXRhdmFyaWFibGVOYW1lKCk7XG5cbiAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTmFtZSA9PT0gbWV0YVN1cHBvc2l0aW9uTWV0YXZhcmlhYmxlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIGlmIChtZXRhU3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3QgbWV0YVN1YnN0aXR1dGlvbk5vZGVzTWF0Y2ggPSBtZXRhU3Vic3RpdHV0aW9uLm1hdGNoTm9kZXMobm9kZXMpO1xuXG4gICAgbWV0YVN1cHBvc2l0aW9uTWV0YXZhcmlhYmxlTWF0Y2hlcyA9IG1ldGFTdWJzdGl0dXRpb25Ob2Rlc01hdGNoOyAgLy8vXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGFTdXBwb3NpdGlvbk1ldGF2YXJpYWJsZU5hbWUsIC8vL1xuICAgICAgICAgIG1ldGFTdWJzdGl0dXRpb24gPSBNZXRhU3Vic3RpdHV0aW9uLmZyb21NZXRhdmFyaWFibGVOYW1lQW5kTm9kZXMobWV0YXZhcmlhYmxlTmFtZSwgbm9kZXMpO1xuXG4gICAgbWV0YVN1YnN0aXR1dGlvbnMucHVzaChtZXRhU3Vic3RpdHV0aW9uKTtcblxuICAgIG1ldGFTdXBwb3NpdGlvbk1ldGF2YXJpYWJsZU1hdGNoZXMgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIG1ldGFTdXBwb3NpdGlvbk1ldGF2YXJpYWJsZU1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1hdGNoTWV0YVN1cHBvc2l0aW9uVGVybWluYWxOb2RlKG1ldGFTdXBwb3NpdGlvblRlcm1pbmFsTm9kZSwgdGVybWluYWxOb2RlLCBtZXRhU3Vic3RpdHV0aW9ucykge1xuICBjb25zdCBtYXRjaGVzID0gbWV0YVN1cHBvc2l0aW9uVGVybWluYWxOb2RlLm1hdGNoKHRlcm1pbmFsTm9kZSksXG4gICAgICAgIG1ldGFTdXBwb3NpdGlvblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtYXRjaGVzO1xuXG4gIHJldHVybiBtZXRhU3VwcG9zaXRpb25UZXJtaW5hbE5vZGVNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBtYXRjaE1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZShtZXRhU3VwcG9zaXRpb25Ob25UZXJtaW5hbE5vZGUsIG5vblRlcm1pbmFsTm9kZSwgbWV0YVN1YnN0aXR1dGlvbnMpIHtcbiAgbGV0IG1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBmYWxzZTtcblxuICBjb25zdCBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICBtZXRhU3VwcG9zaXRpb25SdWxlTmFtZSA9IG1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpOyAvLy9cblxuICBpZiAocnVsZU5hbWUgPT09IG1ldGFTdXBwb3NpdGlvblJ1bGVOYW1lKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbWV0YVN1cHBvc2l0aW9uQ2hpbGROb2RlcyA9IG1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICBtZXRhU3VwcG9zaXRpb25Ob2RlcyA9IG1ldGFTdXBwb3NpdGlvbkNoaWxkTm9kZXMsIC8vL1xuICAgICAgICAgIG1ldGFTdXBwb3NpdGlvbkNoaWxkTm9kZXNNYXRjaGVzID0gbWF0Y2hNZXRhU3VwcG9zaXRpb25Ob2RlcyhtZXRhU3VwcG9zaXRpb25Ob2Rlcywgbm9kZXMsIG1ldGFTdWJzdGl0dXRpb25zKTtcblxuICAgIG1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtZXRhU3VwcG9zaXRpb25DaGlsZE5vZGVzTWF0Y2hlczsgLy8vXG5cbiAgICBpZiAoIW1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZU1hdGNoZXMpIHtcbiAgICAgIGNvbnN0IHJ1bGVOYW1lTWV0YXN0YXRlbWVudFJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBNRVRBU1RBVEVNRU5UX1JVTEVfTkFNRSk7XG5cbiAgICAgIGlmIChydWxlTmFtZU1ldGFzdGF0ZW1lbnRSdWxlTmFtZSkge1xuICAgICAgICBjb25zdCBtZXRhc3RhdGVtZW50Tm9kZSA9IG5vblRlcm1pbmFsTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBtZXRhU3VwcG9zaXRpb25NZXRhc3RhdGVtZW50Tm9kZSA9IG1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBtZXRhU3VwcG9zaXRpb25NZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBtYXRjaE1ldGFTdXBwb3NpdGlvbk1ldGFzdGF0ZW1lbnROb2RlKG1ldGFTdXBwb3NpdGlvbk1ldGFzdGF0ZW1lbnROb2RlLCBtZXRhc3RhdGVtZW50Tm9kZSwgbWV0YVN1YnN0aXR1dGlvbnMpO1xuXG4gICAgICAgIG1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtZXRhU3VwcG9zaXRpb25NZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXM7IC8vL1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXRhU3VwcG9zaXRpb25Ob25UZXJtaW5hbE5vZGVNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBtYXRjaE1ldGFTdXBwb3NpdGlvbk1ldGFzdGF0ZW1lbnROb2RlKG1ldGFTdXBwb3NpdGlvbk1ldGFzdGF0ZW1lbnROb2RlLCBtZXRhc3RhdGVtZW50Tm9kZSwgbWV0YVN1YnN0aXR1dGlvbnMpIHtcbiAgbGV0IG1ldGFTdXBwb3NpdGlvbk1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IG1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZSA9IG1ldGFTdXBwb3NpdGlvbk1ldGFzdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgIG1ldGFTdXBwb3NpdGlvbkNoaWxkTm9kZXMgPSBtZXRhU3VwcG9zaXRpb25Ob25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBtZXRhU3VwcG9zaXRpb25DaGlsZE5vZGVzTGVuZ3RoID0gbWV0YVN1cHBvc2l0aW9uQ2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgaWYgKG1ldGFTdXBwb3NpdGlvbkNoaWxkTm9kZXNMZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBmaXJzdE1ldGFTdXBwb3NpdGlvbkNoaWxkTm9kZSA9IGZpcnN0KG1ldGFTdXBwb3NpdGlvbkNoaWxkTm9kZXMpLFxuICAgICAgICAgIG1ldGFTdXBwb3NpdGlvbkNoaWxkTm9kZSA9IGZpcnN0TWV0YVN1cHBvc2l0aW9uQ2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgbWV0YVN1cHBvc2l0aW9uQ2hpbGROb2RlTm9uVGVybWluYWxOb2RlID0gbWV0YVN1cHBvc2l0aW9uQ2hpbGROb2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICBpZiAobWV0YVN1cHBvc2l0aW9uQ2hpbGROb2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCBtZXRhU3VwcG9zaXRpb25Ob25UZXJtaW5hbENoaWxkTm9kZSA9IG1ldGFTdXBwb3NpdGlvbkNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgbWV0YVN1cHBvc2l0aW9uTm9uVGVybWluYWxDaGlsZE5vZGVSdWxlTmFtZSA9IG1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsQ2hpbGROb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICBtZXRhU3VwcG9zaXRpb25Ob25UZXJtaW5hbENoaWxkTm9kZVJ1bGVOYW1lTWV0YXZhcmlhYmxlUnVsZU5hbWUgPSAobWV0YVN1cHBvc2l0aW9uTm9uVGVybWluYWxDaGlsZE5vZGVSdWxlTmFtZSA9PT0gTUVUQVZBUklBQkxFX1JVTEVfTkFNRSk7XG5cbiAgICAgIGlmIChtZXRhU3VwcG9zaXRpb25Ob25UZXJtaW5hbENoaWxkTm9kZVJ1bGVOYW1lTWV0YXZhcmlhYmxlUnVsZU5hbWUpIHtcbiAgICAgICAgY29uc3QgbWV0YVN1cHBvc2l0aW9uTWV0YXZhcmlhYmxlTm9kZSA9IG1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsQ2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZSA9IG1ldGFzdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgICAgICBub2RlcyA9IGNoaWxkTm9kZXMsIC8vL1xuICAgICAgICAgICAgICBtZXRhU3VwcG9zaXRpb25NZXRhdmFyaWFibGVNYXRjaGVzID0gbWF0Y2hNZXRhU3VwcG9zaXRpb25NZXRhdmFyaWFibGUobWV0YVN1cHBvc2l0aW9uTWV0YXZhcmlhYmxlTm9kZSwgbm9kZXMsIG1ldGFTdWJzdGl0dXRpb25zKTtcblxuICAgICAgICBtZXRhU3VwcG9zaXRpb25NZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBtZXRhU3VwcG9zaXRpb25NZXRhdmFyaWFibGVNYXRjaGVzOyAvLy9cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWV0YVN1cHBvc2l0aW9uTWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzO1xufVxuIl0sIm5hbWVzIjpbIk1ldGFTdXBwb3NpdGlvbiIsIm1ldGFzdGF0ZW1lbnROb2Rlc1F1ZXJ5Iiwibm9kZXNRdWVyeSIsIm1ldGFTdWJwcm9vZkFzc2VydGlvbk5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE1ldGFzdGF0ZW1lbnROb2Rlc1F1ZXJ5IiwicXVhbGlmaWVkT3JVbnF1YWxpZmllZE1ldGFzdGF0ZW1lbnRNZXRhc3RhdGVtZW50Tm9kZVF1ZXJ5IiwibWV0YXN0YXRlbWVudE5vZGUiLCJnZXRNZXRhc3RhdGVtZW50Tm9kZSIsIm1hdGNoU3VicHJvb2ZOb2RlIiwibWV0YVN1YnByb29mTm9kZSIsIm1ldGFTdWJzdGl0dXRpb25zIiwibWV0YVN1YnByb29mTm9kZU1hdGNoZXMiLCJtZXRhU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwibWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGVzIiwidW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVzIiwicXVhbGlmaWVkT3JVbnF1YWxpZmllZE1ldGFzdGF0ZW1lbnRNZXRhc3RhdGVtZW50Tm9kZSIsIm1ldGFzdGF0ZW1lbnROb2RlcyIsIm1ldGFzdGF0ZW1lbnROb2Rlc0xlbmd0aCIsImxlbmd0aCIsIm1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2Rlc0xlbmd0aCIsImV2ZXJ5IiwibWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGUiLCJpbmRleCIsIm5vblRlcm1pbmFsTm9kZSIsIm1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZSIsIm1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZSIsIm1hdGNoTWV0YXN0YXRlbWVudE5vZGUiLCJtZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXMiLCJ0b0pTT04iLCJtZXRhc3RhdGVtZW50U3RyaW5nIiwibm9kZUFzU3RyaW5nIiwibWV0YXN0YXRlbWVudCIsImpzb24iLCJmcm9tSlNPTiIsInJlbGVhc2VDb250ZXh0IiwibWV0YXN0YXRlbWVudE5vZGVGcm9tTWV0YXN0YXRlbWVudFN0cmluZyIsIm1ldGFTdXBwb3NpdGlvbiIsImZyb21NZXRhc3RhdGVtZW50Tm9kZSIsIm1hdGNoTWV0YVN1cHBvc2l0aW9uTm9kZSIsIm1ldGFTdXBwb3NpdGlvbk5vZGUiLCJub2RlIiwibWV0YVN1cHBvc2l0aW9uTm9kZU1hdGNoZXMiLCJub2RlVGVybWluYWxOb2RlIiwiaXNUZXJtaW5hbE5vZGUiLCJydWxlTm9kZVRlcm1pbmFsTm9kZSIsInRlcm1pbmFsTm9kZSIsIm1ldGFTdXBwb3NpdGlvblRlcm1pbmFsTm9kZSIsIm1ldGFTdXBwb3NpdGlvblRlcm1pbmFsTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGFTdXBwb3NpdGlvblRlcm1pbmFsTm9kZSIsIm1hdGNoTWV0YVN1cHBvc2l0aW9uTm9kZXMiLCJtZXRhU3VwcG9zaXRpb25Ob2RlcyIsIm5vZGVzIiwibWV0YVN1cHBvc2l0aW9uTm9kZXNNYXRjaGVzIiwibm9kZXNMZW5ndGgiLCJtZXRhU3VwcG9zaXRpb25Ob2Rlc0xlbmd0aCIsIm1hdGNoTWV0YVN1cHBvc2l0aW9uTWV0YXZhcmlhYmxlIiwibWV0YVN1cHBvc2l0aW9uTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGFTdXBwb3NpdGlvbk1ldGF2YXJpYWJsZU1hdGNoZXMiLCJtZXRhU3VwcG9zaXRpb25NZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibWV0YVN1YnN0aXR1dGlvbiIsImZpbmQiLCJtZXRhdmFyaWFibGVOYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsIm1ldGFTdWJzdGl0dXRpb25Ob2Rlc01hdGNoIiwibWF0Y2hOb2RlcyIsIk1ldGFTdWJzdGl0dXRpb24iLCJmcm9tTWV0YXZhcmlhYmxlTmFtZUFuZE5vZGVzIiwicHVzaCIsIm1hdGNoZXMiLCJtYXRjaCIsInJ1bGVOYW1lIiwiZ2V0UnVsZU5hbWUiLCJtZXRhU3VwcG9zaXRpb25SdWxlTmFtZSIsImNoaWxkTm9kZXMiLCJnZXRDaGlsZE5vZGVzIiwibWV0YVN1cHBvc2l0aW9uQ2hpbGROb2RlcyIsIm1ldGFTdXBwb3NpdGlvbkNoaWxkTm9kZXNNYXRjaGVzIiwicnVsZU5hbWVNZXRhc3RhdGVtZW50UnVsZU5hbWUiLCJNRVRBU1RBVEVNRU5UX1JVTEVfTkFNRSIsIm1ldGFTdXBwb3NpdGlvbk1ldGFzdGF0ZW1lbnROb2RlIiwibWV0YVN1cHBvc2l0aW9uTWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhU3VwcG9zaXRpb25NZXRhc3RhdGVtZW50Tm9kZSIsIm1ldGFTdXBwb3NpdGlvbkNoaWxkTm9kZXNMZW5ndGgiLCJmaXJzdE1ldGFTdXBwb3NpdGlvbkNoaWxkTm9kZSIsImZpcnN0IiwibWV0YVN1cHBvc2l0aW9uQ2hpbGROb2RlIiwibWV0YVN1cHBvc2l0aW9uQ2hpbGROb2RlTm9uVGVybWluYWxOb2RlIiwiaXNOb25UZXJtaW5hbE5vZGUiLCJtZXRhU3VwcG9zaXRpb25Ob25UZXJtaW5hbENoaWxkTm9kZSIsIm1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsQ2hpbGROb2RlUnVsZU5hbWUiLCJtZXRhU3VwcG9zaXRpb25Ob25UZXJtaW5hbENoaWxkTm9kZVJ1bGVOYW1lTWV0YXZhcmlhYmxlUnVsZU5hbWUiLCJNRVRBVkFSSUFCTEVfUlVMRV9OQU1FIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztlQWdCcUJBOzs7cUVBZFE7cUJBRVA7c0JBQ087cUJBQ1M7eUJBRzBCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVoRSxJQUFNQywwQkFBMEJDLElBQUFBLGlCQUFVLEVBQUMseUNBQ3JDQyxpQ0FBaUNDLElBQUFBLGdCQUFTLEVBQUMsMENBQzNDQyxrREFBa0RILElBQUFBLGlCQUFVLEVBQUMsMERBQzdESSw0REFBNERGLElBQUFBLGdCQUFTLEVBQUM7QUFFN0QsSUFB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
|
|
@@ -0,0 +1,214 @@
|
|
|
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 Supposition;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
var _substitution = /*#__PURE__*/ _interopRequireDefault(require("./substitution"));
|
|
12
|
+
var _array = require("./utilities/array");
|
|
13
|
+
var _string = require("./utilities/string");
|
|
14
|
+
var _query = require("./utilities/query");
|
|
15
|
+
var _ruleNames = require("./ruleNames");
|
|
16
|
+
function _arrayLikeToArray(arr, len) {
|
|
17
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
18
|
+
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
19
|
+
return arr2;
|
|
20
|
+
}
|
|
21
|
+
function _arrayWithoutHoles(arr) {
|
|
22
|
+
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
|
|
23
|
+
}
|
|
24
|
+
function _classCallCheck(instance, Constructor) {
|
|
25
|
+
if (!(instance instanceof Constructor)) {
|
|
26
|
+
throw new TypeError("Cannot call a class as a function");
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function _defineProperties(target, props) {
|
|
30
|
+
for(var i = 0; i < props.length; i++){
|
|
31
|
+
var descriptor = props[i];
|
|
32
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
|
33
|
+
descriptor.configurable = true;
|
|
34
|
+
if ("value" in descriptor) descriptor.writable = true;
|
|
35
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function _createClass(Constructor, protoProps, staticProps) {
|
|
39
|
+
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
40
|
+
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
41
|
+
return Constructor;
|
|
42
|
+
}
|
|
43
|
+
function _interopRequireDefault(obj) {
|
|
44
|
+
return obj && obj.__esModule ? obj : {
|
|
45
|
+
default: obj
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function _iterableToArray(iter) {
|
|
49
|
+
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
50
|
+
}
|
|
51
|
+
function _nonIterableSpread() {
|
|
52
|
+
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
53
|
+
}
|
|
54
|
+
function _toConsumableArray(arr) {
|
|
55
|
+
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
|
|
56
|
+
}
|
|
57
|
+
function _unsupportedIterableToArray(o, minLen) {
|
|
58
|
+
if (!o) return;
|
|
59
|
+
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
60
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
61
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
62
|
+
if (n === "Map" || n === "Set") return Array.from(n);
|
|
63
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
64
|
+
}
|
|
65
|
+
var statementNodesQuery = (0, _query.nodesQuery)("/subproofAssertion/statement"), subproofAssertionNodeQuery = (0, _query.nodeQuery)("/statement/subproofAssertion!"), unqualifiedStatementStatementNodesQuery = (0, _query.nodesQuery)("/subproof/unqualifiedStatement/statement!"), qualifiedOrUnqualifiedStatementStatementNodeQuery = (0, _query.nodeQuery)("/subproof/subDerivation/qualifiedStatement|unqualifiedStatement[-1]/statement!");
|
|
66
|
+
var Supposition = /*#__PURE__*/ function() {
|
|
67
|
+
function Supposition(statementNode) {
|
|
68
|
+
_classCallCheck(this, Supposition);
|
|
69
|
+
this.statementNode = statementNode;
|
|
70
|
+
}
|
|
71
|
+
_createClass(Supposition, [
|
|
72
|
+
{
|
|
73
|
+
key: "getStatementNode",
|
|
74
|
+
value: function getStatementNode() {
|
|
75
|
+
return this.statementNode;
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
key: "matchSubproofNode",
|
|
80
|
+
value: function matchSubproofNode(subproofNode, substitutions) {
|
|
81
|
+
var subproofNodeMatches = false;
|
|
82
|
+
var subproofAssertionNode = subproofAssertionNodeQuery(this.statementNode);
|
|
83
|
+
if (subproofAssertionNode !== null) {
|
|
84
|
+
var subproofAssertionStatementNodes = statementNodesQuery(subproofAssertionNode), unqualifiedStatementStatementNodes = unqualifiedStatementStatementNodesQuery(subproofNode), qualifiedOrUnqualifiedStatementStatementNode = qualifiedOrUnqualifiedStatementStatementNodeQuery(subproofNode), statementNodes = _toConsumableArray(unqualifiedStatementStatementNodes).concat([
|
|
85
|
+
qualifiedOrUnqualifiedStatementStatementNode
|
|
86
|
+
]), statementNodesLength = statementNodes.length, subproofAssertionStatementNodesLength = subproofAssertionStatementNodes.length;
|
|
87
|
+
if (statementNodesLength === subproofAssertionStatementNodesLength) {
|
|
88
|
+
subproofNodeMatches = subproofAssertionStatementNodes.every(function(subproofAssertionStatementNode, index) {
|
|
89
|
+
var statementNode = statementNodes[index], nonTerminalNode = statementNode, suppositionNonTerminalNode = subproofAssertionStatementNode, suppositionNonTerminalNodeMatches = matchSuppositionNonTerminalNode(suppositionNonTerminalNode, nonTerminalNode, substitutions);
|
|
90
|
+
if (suppositionNonTerminalNodeMatches) {
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return subproofNodeMatches;
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
key: "matchStatementNode",
|
|
101
|
+
value: function matchStatementNode(statementNode, substitutions) {
|
|
102
|
+
var nonTerminalNode = statementNode, suppositionNonTerminalNode = this.statementNode, suppositionNonTerminalNodeMatches = matchSuppositionNonTerminalNode(suppositionNonTerminalNode, nonTerminalNode, substitutions), statementNodeMatches = suppositionNonTerminalNodeMatches; ///
|
|
103
|
+
return statementNodeMatches;
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
key: "toJSON",
|
|
108
|
+
value: function toJSON() {
|
|
109
|
+
var statementString = (0, _string.nodeAsString)(this.statementNode), statement = statementString, json = {
|
|
110
|
+
statement: statement
|
|
111
|
+
};
|
|
112
|
+
return json;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
], [
|
|
116
|
+
{
|
|
117
|
+
key: "fromJSON",
|
|
118
|
+
value: function fromJSON(json, releaseContext) {
|
|
119
|
+
var statement = json.statement, statementString = statement, statementNode = (0, _string.statementNodeFromStatementString)(statementString, releaseContext), supposition = new Supposition(statementNode);
|
|
120
|
+
return supposition;
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
key: "fromStatementNode",
|
|
125
|
+
value: function fromStatementNode(statementNode) {
|
|
126
|
+
var supposition = new Supposition(statementNode);
|
|
127
|
+
return supposition;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
]);
|
|
131
|
+
return Supposition;
|
|
132
|
+
}();
|
|
133
|
+
function matchSuppositionNode(suppositionNode, node, substitutions) {
|
|
134
|
+
var suppositionNodeMatches = false;
|
|
135
|
+
var nodeTerminalNode = node.isTerminalNode(), ruleNodeTerminalNode = suppositionNode.isTerminalNode();
|
|
136
|
+
if (nodeTerminalNode === ruleNodeTerminalNode) {
|
|
137
|
+
if (nodeTerminalNode) {
|
|
138
|
+
var terminalNode = node, suppositionTerminalNode = suppositionNode, suppositionTerminalNodeMatches = matchSuppositionTerminalNode(suppositionTerminalNode, terminalNode, substitutions);
|
|
139
|
+
suppositionNodeMatches = suppositionTerminalNodeMatches; ///
|
|
140
|
+
} else {
|
|
141
|
+
var nonTerminalNode = node, suppositionNonTerminalNode = suppositionNode, suppositionNonTerminalNodeMatches = matchSuppositionNonTerminalNode(suppositionNonTerminalNode, nonTerminalNode, substitutions);
|
|
142
|
+
suppositionNodeMatches = suppositionNonTerminalNodeMatches; ///
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return suppositionNodeMatches;
|
|
146
|
+
}
|
|
147
|
+
function matchSuppositionNodes(suppositionNodes, nodes, substitutions) {
|
|
148
|
+
var suppositionNodesMatches = false;
|
|
149
|
+
var nodesLength = nodes.length, suppositionNodesLength = suppositionNodes.length;
|
|
150
|
+
if (nodesLength === suppositionNodesLength) {
|
|
151
|
+
suppositionNodesMatches = nodes.every(function(node, index) {
|
|
152
|
+
var suppositionNode = suppositionNodes[index], suppositionNodeMatches = matchSuppositionNode(suppositionNode, node, substitutions);
|
|
153
|
+
if (suppositionNodeMatches) {
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
return suppositionNodesMatches;
|
|
159
|
+
}
|
|
160
|
+
function matchSuppositionVariable(suppositionVariableNode, nodes, substitutions) {
|
|
161
|
+
var suppositionVariableMatches;
|
|
162
|
+
var suppositionVariableName = (0, _query.variableNameFromVariableNode)(suppositionVariableNode), substitution = substitutions.find(function(substitution) {
|
|
163
|
+
var variableName = substitution.getVariableName();
|
|
164
|
+
if (variableName === suppositionVariableName) {
|
|
165
|
+
return true;
|
|
166
|
+
}
|
|
167
|
+
}) || null;
|
|
168
|
+
if (substitution !== null) {
|
|
169
|
+
var substitutionNodesMatch = substitution.matchNodes(nodes);
|
|
170
|
+
suppositionVariableMatches = substitutionNodesMatch; ///
|
|
171
|
+
} else {
|
|
172
|
+
var variableName = suppositionVariableName, substitution1 = _substitution.default.fromVariableNameAndNodes(variableName, nodes);
|
|
173
|
+
substitutions.push(substitution1);
|
|
174
|
+
suppositionVariableMatches = true;
|
|
175
|
+
}
|
|
176
|
+
return suppositionVariableMatches;
|
|
177
|
+
}
|
|
178
|
+
function matchSuppositionTerminalNode(suppositionTerminalNode, terminalNode, substitutions) {
|
|
179
|
+
var matches = suppositionTerminalNode.match(terminalNode), suppositionTerminalNodeMatches = matches;
|
|
180
|
+
return suppositionTerminalNodeMatches;
|
|
181
|
+
}
|
|
182
|
+
function matchSuppositionNonTerminalNode(suppositionNonTerminalNode, nonTerminalNode, substitutions) {
|
|
183
|
+
var suppositionNonTerminalNodeMatches = false;
|
|
184
|
+
var ruleName = nonTerminalNode.getRuleName(), suppositionRuleName = suppositionNonTerminalNode.getRuleName(); ///
|
|
185
|
+
if (ruleName === suppositionRuleName) {
|
|
186
|
+
var childNodes = nonTerminalNode.getChildNodes(), suppositionChildNodes = suppositionNonTerminalNode.getChildNodes(), nodes = childNodes, suppositionNodes = suppositionChildNodes, suppositionChildNodesMatches = matchSuppositionNodes(suppositionNodes, nodes, substitutions);
|
|
187
|
+
suppositionNonTerminalNodeMatches = suppositionChildNodesMatches; ///
|
|
188
|
+
if (!suppositionNonTerminalNodeMatches) {
|
|
189
|
+
var ruleNameStatementRuleName = ruleName === _ruleNames.STATEMENT_RULE_NAME;
|
|
190
|
+
if (ruleNameStatementRuleName) {
|
|
191
|
+
var statementNode = nonTerminalNode, suppositionStatementNode = suppositionNonTerminalNode, suppositionStatementNodeMatches = matchSuppositionStatementNode(suppositionStatementNode, statementNode, substitutions);
|
|
192
|
+
suppositionNonTerminalNodeMatches = suppositionStatementNodeMatches; ///
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return suppositionNonTerminalNodeMatches;
|
|
197
|
+
}
|
|
198
|
+
function matchSuppositionStatementNode(suppositionStatementNode, statementNode, substitutions) {
|
|
199
|
+
var suppositionStatementNodeMatches = false;
|
|
200
|
+
var suppositionNonTerminalNode = suppositionStatementNode, suppositionChildNodes = suppositionNonTerminalNode.getChildNodes(), suppositionChildNodesLength = suppositionChildNodes.length;
|
|
201
|
+
if (suppositionChildNodesLength === 1) {
|
|
202
|
+
var firstSuppositionChildNode = (0, _array.first)(suppositionChildNodes), suppositionChildNode = firstSuppositionChildNode, suppositionChildNodeNonTerminalNode = suppositionChildNode.isNonTerminalNode();
|
|
203
|
+
if (suppositionChildNodeNonTerminalNode) {
|
|
204
|
+
var suppositionNonTerminalChildNode = suppositionChildNode, suppositionNonTerminalChildNodeRuleName = suppositionNonTerminalChildNode.getRuleName(), suppositionNonTerminalChildNodeRuleNameVariableRuleName = suppositionNonTerminalChildNodeRuleName === _ruleNames.VARIABLE_RULE_NAME;
|
|
205
|
+
if (suppositionNonTerminalChildNodeRuleNameVariableRuleName) {
|
|
206
|
+
var suppositionVariableNode = suppositionNonTerminalChildNode, nonTerminalNode = statementNode, childNodes = nonTerminalNode.getChildNodes(), nodes = childNodes, suppositionVariableMatches = matchSuppositionVariable(suppositionVariableNode, nodes, substitutions);
|
|
207
|
+
suppositionStatementNodeMatches = suppositionVariableMatches; ///
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return suppositionStatementNodeMatches;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zdXBwb3NpdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN1YnN0aXR1dGlvbiBmcm9tIFwiLi9zdWJzdGl0dXRpb25cIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IG5vZGVBc1N0cmluZyB9IGZyb20gXCIuL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IG5vZGVRdWVyeSwgbm9kZXNRdWVyeSB9IGZyb20gXCIuL3V0aWxpdGllcy9xdWVyeVwiO1xuaW1wb3J0IHsgdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSB9IGZyb20gXCIuL3V0aWxpdGllcy9xdWVyeVwiO1xuaW1wb3J0IHsgc3RhdGVtZW50Tm9kZUZyb21TdGF0ZW1lbnRTdHJpbmcgfSBmcm9tIFwiLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBWQVJJQUJMRV9SVUxFX05BTUUsIFNUQVRFTUVOVF9SVUxFX05BTUUgfSBmcm9tIFwiLi9ydWxlTmFtZXNcIjtcblxuY29uc3Qgc3RhdGVtZW50Tm9kZXNRdWVyeSA9IG5vZGVzUXVlcnkoXCIvc3VicHJvb2ZBc3NlcnRpb24vc3RhdGVtZW50XCIpLFxuICAgICAgc3VicHJvb2ZBc3NlcnRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50L3N1YnByb29mQXNzZXJ0aW9uIVwiKSxcbiAgICAgIHVucXVhbGlmaWVkU3RhdGVtZW50U3RhdGVtZW50Tm9kZXNRdWVyeSA9IG5vZGVzUXVlcnkoXCIvc3VicHJvb2YvdW5xdWFsaWZpZWRTdGF0ZW1lbnQvc3RhdGVtZW50IVwiKSxcbiAgICAgIHF1YWxpZmllZE9yVW5xdWFsaWZpZWRTdGF0ZW1lbnRTdGF0ZW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3VicHJvb2Yvc3ViRGVyaXZhdGlvbi9xdWFsaWZpZWRTdGF0ZW1lbnR8dW5xdWFsaWZpZWRTdGF0ZW1lbnRbLTFdL3N0YXRlbWVudCFcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1cHBvc2l0aW9uIHtcbiAgY29uc3RydWN0b3Ioc3RhdGVtZW50Tm9kZSkge1xuICAgIHRoaXMuc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGU7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudE5vZGU7XG4gIH1cblxuICBtYXRjaFN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIHN1YnN0aXR1dGlvbnMpIHtcbiAgICBsZXQgc3VicHJvb2ZOb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlUXVlcnkodGhpcy5zdGF0ZW1lbnROb2RlKTtcblxuICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uU3RhdGVtZW50Tm9kZXMgPSBzdGF0ZW1lbnROb2Rlc1F1ZXJ5KHN1YnByb29mQXNzZXJ0aW9uTm9kZSksXG4gICAgICAgICAgICB1bnF1YWxpZmllZFN0YXRlbWVudFN0YXRlbWVudE5vZGVzID0gdW5xdWFsaWZpZWRTdGF0ZW1lbnRTdGF0ZW1lbnROb2Rlc1F1ZXJ5KHN1YnByb29mTm9kZSksXG4gICAgICAgICAgICBxdWFsaWZpZWRPclVucXVhbGlmaWVkU3RhdGVtZW50U3RhdGVtZW50Tm9kZSA9IHF1YWxpZmllZE9yVW5xdWFsaWZpZWRTdGF0ZW1lbnRTdGF0ZW1lbnROb2RlUXVlcnkoc3VicHJvb2ZOb2RlKSxcbiAgICAgICAgICAgIHN0YXRlbWVudE5vZGVzID0gW1xuICAgICAgICAgICAgICAuLi51bnF1YWxpZmllZFN0YXRlbWVudFN0YXRlbWVudE5vZGVzLFxuICAgICAgICAgICAgICBxdWFsaWZpZWRPclVucXVhbGlmaWVkU3RhdGVtZW50U3RhdGVtZW50Tm9kZVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHN0YXRlbWVudE5vZGVzTGVuZ3RoID0gc3RhdGVtZW50Tm9kZXMubGVuZ3RoLFxuICAgICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25TdGF0ZW1lbnROb2Rlc0xlbmd0aCA9IHN1YnByb29mQXNzZXJ0aW9uU3RhdGVtZW50Tm9kZXMubGVuZ3RoO1xuXG4gICAgICBpZiAoc3RhdGVtZW50Tm9kZXNMZW5ndGggPT09IHN1YnByb29mQXNzZXJ0aW9uU3RhdGVtZW50Tm9kZXNMZW5ndGgpIHtcbiAgICAgICAgc3VicHJvb2ZOb2RlTWF0Y2hlcyA9IHN1YnByb29mQXNzZXJ0aW9uU3RhdGVtZW50Tm9kZXMuZXZlcnkoKHN1YnByb29mQXNzZXJ0aW9uU3RhdGVtZW50Tm9kZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2Rlc1tpbmRleF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSBzdGF0ZW1lbnROb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlID0gc3VicHJvb2ZBc3NlcnRpb25TdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtYXRjaFN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlKHN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlLCBub25UZXJtaW5hbE5vZGUsIHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VwcG9zaXRpb25Ob25UZXJtaW5hbE5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZk5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIHN1YnN0aXR1dGlvbnMpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBzdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25Ob25UZXJtaW5hbE5vZGUgPSB0aGlzLnN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgICBzdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtYXRjaFN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlKHN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlLCBub25UZXJtaW5hbE5vZGUsIHN1YnN0aXR1dGlvbnMpLFxuICAgICAgICAgIHN0YXRlbWVudE5vZGVNYXRjaGVzID0gc3VwcG9zaXRpb25Ob25UZXJtaW5hbE5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBzdGF0ZW1lbnROb2RlTWF0Y2hlcztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBub2RlQXNTdHJpbmcodGhpcy5zdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRTdHJpbmcsIC8vL1xuICAgICAgICAgIGpzb24gPSB7XG4gICAgICAgICAgICBzdGF0ZW1lbnRcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgcmVsZWFzZUNvbnRleHQpIHtcbiAgICBjb25zdCB7IHN0YXRlbWVudCB9ID0ganNvbixcbiAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQsICAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZUZyb21TdGF0ZW1lbnRTdHJpbmcoc3RhdGVtZW50U3RyaW5nLCByZWxlYXNlQ29udGV4dCksXG4gICAgICAgICAgc3VwcG9zaXRpb24gPSBuZXcgU3VwcG9zaXRpb24oc3RhdGVtZW50Tm9kZSk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uID0gbmV3IFN1cHBvc2l0aW9uKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hdGNoU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgbm9kZSwgc3Vic3RpdHV0aW9ucykge1xuICBsZXQgc3VwcG9zaXRpb25Ob2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCksXG4gICAgICAgIHJ1bGVOb2RlVGVybWluYWxOb2RlID0gc3VwcG9zaXRpb25Ob2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVUZXJtaW5hbE5vZGUgPT09IHJ1bGVOb2RlVGVybWluYWxOb2RlKSB7XG4gICAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG5vZGUsICAvLy9cbiAgICAgICAgICAgIHN1cHBvc2l0aW9uVGVybWluYWxOb2RlID0gc3VwcG9zaXRpb25Ob2RlLCAgLy8vXG4gICAgICAgICAgICBzdXBwb3NpdGlvblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtYXRjaFN1cHBvc2l0aW9uVGVybWluYWxOb2RlKHN1cHBvc2l0aW9uVGVybWluYWxOb2RlLCB0ZXJtaW5hbE5vZGUsIHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgICBzdXBwb3NpdGlvbk5vZGVNYXRjaGVzID0gc3VwcG9zaXRpb25UZXJtaW5hbE5vZGVNYXRjaGVzOyAgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgc3VwcG9zaXRpb25Ob25UZXJtaW5hbE5vZGUgPSBzdXBwb3NpdGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgIHN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IG1hdGNoU3VwcG9zaXRpb25Ob25UZXJtaW5hbE5vZGUoc3VwcG9zaXRpb25Ob25UZXJtaW5hbE5vZGUsIG5vblRlcm1pbmFsTm9kZSwgc3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgIHN1cHBvc2l0aW9uTm9kZU1hdGNoZXMgPSBzdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZU1hdGNoZXM7IC8vL1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdXBwb3NpdGlvbk5vZGVNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBtYXRjaFN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2Rlcywgbm9kZXMsIHN1YnN0aXR1dGlvbnMpIHtcbiAgbGV0IHN1cHBvc2l0aW9uTm9kZXNNYXRjaGVzID0gZmFsc2U7XG5cbiAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGgsXG4gICAgICAgIHN1cHBvc2l0aW9uTm9kZXNMZW5ndGggPSBzdXBwb3NpdGlvbk5vZGVzLmxlbmd0aDtcblxuICBpZiAobm9kZXNMZW5ndGggPT09IHN1cHBvc2l0aW9uTm9kZXNMZW5ndGgpIHtcbiAgICBzdXBwb3NpdGlvbk5vZGVzTWF0Y2hlcyA9IG5vZGVzLmV2ZXJ5KChub2RlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlID0gc3VwcG9zaXRpb25Ob2Rlc1tpbmRleF0sXG4gICAgICAgICAgICBzdXBwb3NpdGlvbk5vZGVNYXRjaGVzID0gbWF0Y2hTdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBub2RlLCBzdWJzdGl0dXRpb25zKTtcblxuICAgICAgaWYgKHN1cHBvc2l0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gc3VwcG9zaXRpb25Ob2Rlc01hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1hdGNoU3VwcG9zaXRpb25WYXJpYWJsZShzdXBwb3NpdGlvblZhcmlhYmxlTm9kZSwgbm9kZXMsIHN1YnN0aXR1dGlvbnMpIHtcbiAgbGV0IHN1cHBvc2l0aW9uVmFyaWFibGVNYXRjaGVzO1xuXG4gIGNvbnN0IHN1cHBvc2l0aW9uVmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZShzdXBwb3NpdGlvblZhcmlhYmxlTm9kZSksXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMuZmluZCgoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFyaWFibGVOYW1lID0gc3Vic3RpdHV0aW9uLmdldFZhcmlhYmxlTmFtZSgpO1xuXG4gICAgICAgICAgaWYgKHZhcmlhYmxlTmFtZSA9PT0gc3VwcG9zaXRpb25WYXJpYWJsZU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgbnVsbDtcblxuICBpZiAoc3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uTm9kZXNNYXRjaCA9IHN1YnN0aXR1dGlvbi5tYXRjaE5vZGVzKG5vZGVzKTtcblxuICAgIHN1cHBvc2l0aW9uVmFyaWFibGVNYXRjaGVzID0gc3Vic3RpdHV0aW9uTm9kZXNNYXRjaDsgIC8vL1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHZhcmlhYmxlTmFtZSA9IHN1cHBvc2l0aW9uVmFyaWFibGVOYW1lLCAvLy9cbiAgICAgICAgICBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZnJvbVZhcmlhYmxlTmFtZUFuZE5vZGVzKHZhcmlhYmxlTmFtZSwgbm9kZXMpO1xuXG4gICAgc3Vic3RpdHV0aW9ucy5wdXNoKHN1YnN0aXR1dGlvbik7XG5cbiAgICBzdXBwb3NpdGlvblZhcmlhYmxlTWF0Y2hlcyA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gc3VwcG9zaXRpb25WYXJpYWJsZU1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1hdGNoU3VwcG9zaXRpb25UZXJtaW5hbE5vZGUoc3VwcG9zaXRpb25UZXJtaW5hbE5vZGUsIHRlcm1pbmFsTm9kZSwgc3Vic3RpdHV0aW9ucykge1xuICBjb25zdCBtYXRjaGVzID0gc3VwcG9zaXRpb25UZXJtaW5hbE5vZGUubWF0Y2godGVybWluYWxOb2RlKSxcbiAgICAgICAgc3VwcG9zaXRpb25UZXJtaW5hbE5vZGVNYXRjaGVzID0gbWF0Y2hlcztcblxuICByZXR1cm4gc3VwcG9zaXRpb25UZXJtaW5hbE5vZGVNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBtYXRjaFN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlKHN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlLCBub25UZXJtaW5hbE5vZGUsIHN1YnN0aXR1dGlvbnMpIHtcbiAgbGV0IHN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgIHN1cHBvc2l0aW9uUnVsZU5hbWUgPSBzdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpOyAvLy9cblxuICBpZiAocnVsZU5hbWUgPT09IHN1cHBvc2l0aW9uUnVsZU5hbWUpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBzdXBwb3NpdGlvbkNoaWxkTm9kZXMgPSBzdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICBzdXBwb3NpdGlvbk5vZGVzID0gc3VwcG9zaXRpb25DaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICBzdXBwb3NpdGlvbkNoaWxkTm9kZXNNYXRjaGVzID0gbWF0Y2hTdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIG5vZGVzLCBzdWJzdGl0dXRpb25zKTtcblxuICAgIHN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IHN1cHBvc2l0aW9uQ2hpbGROb2Rlc01hdGNoZXM7IC8vL1xuXG4gICAgaWYgKCFzdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZU1hdGNoZXMpIHtcbiAgICAgIGNvbnN0IHJ1bGVOYW1lU3RhdGVtZW50UnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IFNUQVRFTUVOVF9SVUxFX05BTUUpO1xuXG4gICAgICBpZiAocnVsZU5hbWVTdGF0ZW1lbnRSdWxlTmFtZSkge1xuICAgICAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gbm9uVGVybWluYWxOb2RlLCAgLy8vXG4gICAgICAgICAgICAgIHN1cHBvc2l0aW9uU3RhdGVtZW50Tm9kZSA9IHN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlLCAgLy8vXG4gICAgICAgICAgICAgIHN1cHBvc2l0aW9uU3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBtYXRjaFN1cHBvc2l0aW9uU3RhdGVtZW50Tm9kZShzdXBwb3NpdGlvblN0YXRlbWVudE5vZGUsIHN0YXRlbWVudE5vZGUsIHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgICAgIHN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IHN1cHBvc2l0aW9uU3RhdGVtZW50Tm9kZU1hdGNoZXM7IC8vL1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZU1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1hdGNoU3VwcG9zaXRpb25TdGF0ZW1lbnROb2RlKHN1cHBvc2l0aW9uU3RhdGVtZW50Tm9kZSwgc3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucykge1xuICBsZXQgc3VwcG9zaXRpb25TdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlID0gc3VwcG9zaXRpb25TdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgIHN1cHBvc2l0aW9uQ2hpbGROb2RlcyA9IHN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25DaGlsZE5vZGVzTGVuZ3RoID0gc3VwcG9zaXRpb25DaGlsZE5vZGVzLmxlbmd0aDtcblxuICBpZiAoc3VwcG9zaXRpb25DaGlsZE5vZGVzTGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3QgZmlyc3RTdXBwb3NpdGlvbkNoaWxkTm9kZSA9IGZpcnN0KHN1cHBvc2l0aW9uQ2hpbGROb2RlcyksXG4gICAgICAgICAgc3VwcG9zaXRpb25DaGlsZE5vZGUgPSBmaXJzdFN1cHBvc2l0aW9uQ2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25DaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBzdXBwb3NpdGlvbkNoaWxkTm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgaWYgKHN1cHBvc2l0aW9uQ2hpbGROb2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCBzdXBwb3NpdGlvbk5vblRlcm1pbmFsQ2hpbGROb2RlID0gc3VwcG9zaXRpb25DaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgIHN1cHBvc2l0aW9uTm9uVGVybWluYWxDaGlsZE5vZGVSdWxlTmFtZSA9IHN1cHBvc2l0aW9uTm9uVGVybWluYWxDaGlsZE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgIHN1cHBvc2l0aW9uTm9uVGVybWluYWxDaGlsZE5vZGVSdWxlTmFtZVZhcmlhYmxlUnVsZU5hbWUgPSAoc3VwcG9zaXRpb25Ob25UZXJtaW5hbENoaWxkTm9kZVJ1bGVOYW1lID09PSBWQVJJQUJMRV9SVUxFX05BTUUpO1xuXG4gICAgICBpZiAoc3VwcG9zaXRpb25Ob25UZXJtaW5hbENoaWxkTm9kZVJ1bGVOYW1lVmFyaWFibGVSdWxlTmFtZSkge1xuICAgICAgICBjb25zdCBzdXBwb3NpdGlvblZhcmlhYmxlTm9kZSA9IHN1cHBvc2l0aW9uTm9uVGVybWluYWxDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlID0gc3RhdGVtZW50Tm9kZSwgIC8vL1xuICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICAgICAgc3VwcG9zaXRpb25WYXJpYWJsZU1hdGNoZXMgPSBtYXRjaFN1cHBvc2l0aW9uVmFyaWFibGUoc3VwcG9zaXRpb25WYXJpYWJsZU5vZGUsIG5vZGVzLCBzdWJzdGl0dXRpb25zKTtcblxuICAgICAgICBzdXBwb3NpdGlvblN0YXRlbWVudE5vZGVNYXRjaGVzID0gc3VwcG9zaXRpb25WYXJpYWJsZU1hdGNoZXM7IC8vL1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdXBwb3NpdGlvblN0YXRlbWVudE5vZGVNYXRjaGVzO1xufVxuIl0sIm5hbWVzIjpbIlN1cHBvc2l0aW9uIiwic3RhdGVtZW50Tm9kZXNRdWVyeSIsIm5vZGVzUXVlcnkiLCJzdWJwcm9vZkFzc2VydGlvbk5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInVucXVhbGlmaWVkU3RhdGVtZW50U3RhdGVtZW50Tm9kZXNRdWVyeSIsInF1YWxpZmllZE9yVW5xdWFsaWZpZWRTdGF0ZW1lbnRTdGF0ZW1lbnROb2RlUXVlcnkiLCJzdGF0ZW1lbnROb2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsIm1hdGNoU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZOb2RlIiwic3Vic3RpdHV0aW9ucyIsInN1YnByb29mTm9kZU1hdGNoZXMiLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJzdWJwcm9vZkFzc2VydGlvblN0YXRlbWVudE5vZGVzIiwidW5xdWFsaWZpZWRTdGF0ZW1lbnRTdGF0ZW1lbnROb2RlcyIsInF1YWxpZmllZE9yVW5xdWFsaWZpZWRTdGF0ZW1lbnRTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZXMiLCJzdGF0ZW1lbnROb2Rlc0xlbmd0aCIsImxlbmd0aCIsInN1YnByb29mQXNzZXJ0aW9uU3RhdGVtZW50Tm9kZXNMZW5ndGgiLCJldmVyeSIsInN1YnByb29mQXNzZXJ0aW9uU3RhdGVtZW50Tm9kZSIsImluZGV4Iiwibm9uVGVybWluYWxOb2RlIiwic3VwcG9zaXRpb25Ob25UZXJtaW5hbE5vZGUiLCJzdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZU1hdGNoZXMiLCJtYXRjaFN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlIiwibWF0Y2hTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZU1hdGNoZXMiLCJ0b0pTT04iLCJzdGF0ZW1lbnRTdHJpbmciLCJub2RlQXNTdHJpbmciLCJzdGF0ZW1lbnQiLCJqc29uIiwiZnJvbUpTT04iLCJyZWxlYXNlQ29udGV4dCIsInN0YXRlbWVudE5vZGVGcm9tU3RhdGVtZW50U3RyaW5nIiwic3VwcG9zaXRpb24iLCJmcm9tU3RhdGVtZW50Tm9kZSIsIm1hdGNoU3VwcG9zaXRpb25Ob2RlIiwic3VwcG9zaXRpb25Ob2RlIiwibm9kZSIsInN1cHBvc2l0aW9uTm9kZU1hdGNoZXMiLCJub2RlVGVybWluYWxOb2RlIiwiaXNUZXJtaW5hbE5vZGUiLCJydWxlTm9kZVRlcm1pbmFsTm9kZSIsInRlcm1pbmFsTm9kZSIsInN1cHBvc2l0aW9uVGVybWluYWxOb2RlIiwic3VwcG9zaXRpb25UZXJtaW5hbE5vZGVNYXRjaGVzIiwibWF0Y2hTdXBwb3NpdGlvblRlcm1pbmFsTm9kZSIsIm1hdGNoU3VwcG9zaXRpb25Ob2RlcyIsInN1cHBvc2l0aW9uTm9kZXMiLCJub2RlcyIsInN1cHBvc2l0aW9uTm9kZXNNYXRjaGVzIiwibm9kZXNMZW5ndGgiLCJzdXBwb3NpdGlvbk5vZGVzTGVuZ3RoIiwibWF0Y2hTdXBwb3NpdGlvblZhcmlhYmxlIiwic3VwcG9zaXRpb25WYXJpYWJsZU5vZGUiLCJzdXBwb3NpdGlvblZhcmlhYmxlTWF0Y2hlcyIsInN1cHBvc2l0aW9uVmFyaWFibGVOYW1lIiwidmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSIsInN1YnN0aXR1dGlvbiIsImZpbmQiLCJ2YXJpYWJsZU5hbWUiLCJnZXRWYXJpYWJsZU5hbWUiLCJzdWJzdGl0dXRpb25Ob2Rlc01hdGNoIiwibWF0Y2hOb2RlcyIsIlN1YnN0aXR1dGlvbiIsImZyb21WYXJpYWJsZU5hbWVBbmROb2RlcyIsInB1c2giLCJtYXRjaGVzIiwibWF0Y2giLCJydWxlTmFtZSIsImdldFJ1bGVOYW1lIiwic3VwcG9zaXRpb25SdWxlTmFtZSIsImNoaWxkTm9kZXMiLCJnZXRDaGlsZE5vZGVzIiwic3VwcG9zaXRpb25DaGlsZE5vZGVzIiwic3VwcG9zaXRpb25DaGlsZE5vZGVzTWF0Y2hlcyIsInJ1bGVOYW1lU3RhdGVtZW50UnVsZU5hbWUiLCJTVEFURU1FTlRfUlVMRV9OQU1FIiwic3VwcG9zaXRpb25TdGF0ZW1lbnROb2RlIiwic3VwcG9zaXRpb25TdGF0ZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoU3VwcG9zaXRpb25TdGF0ZW1lbnROb2RlIiwic3VwcG9zaXRpb25DaGlsZE5vZGVzTGVuZ3RoIiwiZmlyc3RTdXBwb3NpdGlvbkNoaWxkTm9kZSIsImZpcnN0Iiwic3VwcG9zaXRpb25DaGlsZE5vZGUiLCJzdXBwb3NpdGlvbkNoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSIsImlzTm9uVGVybWluYWxOb2RlIiwic3VwcG9zaXRpb25Ob25UZXJtaW5hbENoaWxkTm9kZSIsInN1cHBvc2l0aW9uTm9uVGVybWluYWxDaGlsZE5vZGVSdWxlTmFtZSIsInN1cHBvc2l0aW9uTm9uVGVybWluYWxDaGlsZE5v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
|
package/lib/theorem.js
CHANGED
|
@@ -128,9 +128,9 @@ var Theorem = /*#__PURE__*/ function(AxiomLemmaTheorem) {
|
|
|
128
128
|
}
|
|
129
129
|
},
|
|
130
130
|
{
|
|
131
|
-
key: "
|
|
132
|
-
value: function
|
|
133
|
-
return _axiomLemmaTheorem.default.
|
|
131
|
+
key: "fromLabelsSuppositionsAndConsequence",
|
|
132
|
+
value: function fromLabelsSuppositionsAndConsequence(labels, antecedents, consequence) {
|
|
133
|
+
return _axiomLemmaTheorem.default.fromLabelsSuppositionsAndConsequence(Theorem, labels, antecedents, consequence);
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
136
|
]);
|
|
@@ -138,4 +138,4 @@ var Theorem = /*#__PURE__*/ function(AxiomLemmaTheorem) {
|
|
|
138
138
|
}(_axiomLemmaTheorem.default);
|
|
139
139
|
_defineProperty(Theorem, "kind", _kinds.THEOREM_KIND);
|
|
140
140
|
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90aGVvcmVtLmpzIiwiPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90aGVvcmVtLmpzIiwiPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgQXhpb21MZW1tYVRoZW9yZW0gZnJvbSBcIi4vYXhpb21MZW1tYVRoZW9yZW1cIjtcblxuaW1wb3J0IHsgVEhFT1JFTV9LSU5EIH0gZnJvbSBcIi4va2luZHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGhlb3JlbSBleHRlbmRzIEF4aW9tTGVtbWFUaGVvcmVtIHtcbiAgc3RhdGljIGtpbmQgPSBUSEVPUkVNX0tJTkQ7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIHJlbGVhc2VDb250ZXh0KSB7IHJldHVybiBBeGlvbUxlbW1hVGhlb3JlbS5mcm9tSlNPTihUaGVvcmVtLCBqc29uLCByZWxlYXNlQ29udGV4dCk7IH1cblxuICBzdGF0aWMgZnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZENvbnNlcXVlbmNlKGxhYmVscywgYW50ZWNlZGVudHMsIGNvbnNlcXVlbmNlKSB7IHJldHVybiBBeGlvbUxlbW1hVGhlb3JlbS5mcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kQ29uc2VxdWVuY2UoVGhlb3JlbSwgbGFiZWxzLCBhbnRlY2VkZW50cywgY29uc2VxdWVuY2UpOyB9XG59XG4iLCJSZWFjdC5jcmVhdGVFbGVtZW50Il0sIm5hbWVzIjpbIlRoZW9yZW0iLCJmcm9tSlNPTiIsImpzb24iLCJyZWxlYXNlQ29udGV4dCIsIkF4aW9tTGVtbWFUaGVvcmVtIiwiZnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZENvbnNlcXVlbmNlIiwibGFiZWxzIiwiYW50ZWNlZGVudHMiLCJjb25zZXF1ZW5jZSIsImtpbmQiLCJUSEVPUkVNX0tJTkQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBTXFCQTs7O3NFQUpTO3FCQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVkLElBQUEsQUFBTUEsd0JBQU47Y0FBTUE7OEJBQUFBO2FBQUFBOzhCQUFBQTs7O2lCQUFBQTs7WUFHWkMsS0FBQUE7bUJBQVAsU0FBT0EsU0FBU0MsSUFBSSxFQUFFQyxjQUFjLEVBQUU7Z0JBQUUsT0FBT0MsMEJBQWlCLENBQUNILFFBQVEsQ0FIdERELFNBR2dFRSxNQUFNQztZQUFpQjs7O1lBRW5HRSxLQUFBQTttQkFBUCxTQUFPQSxxQ0FBcUNDLE1BQU0sRUFBRUMsV0FBVyxFQUFFQyxXQUFXLEVBQUU7Z0JBQUUsT0FBT0osMEJBQWlCLENBQUNDLG9DQUFvQyxDQUwxSEwsU0FLb0lNLFFBQVFDLGFBQWFDO1lBQWM7OztXQUx2S1I7RUFBZ0JJLDBCQUFpQjtBQUNwRCxnQkFEbUJKLFNBQ1pTLFFBQU9DLG1CQUFZIn0=
|
package/lib/verify/axiom.js
CHANGED
|
@@ -11,8 +11,8 @@ Object.defineProperty(exports, "default", {
|
|
|
11
11
|
var _axiom = /*#__PURE__*/ _interopRequireDefault(require("../axiom"));
|
|
12
12
|
var _proof = /*#__PURE__*/ _interopRequireDefault(require("../context/proof"));
|
|
13
13
|
var _labels = /*#__PURE__*/ _interopRequireDefault(require("../verify/labels"));
|
|
14
|
-
var
|
|
15
|
-
var
|
|
14
|
+
var _supposition = /*#__PURE__*/ _interopRequireDefault(require("../verify/supposition"));
|
|
15
|
+
var _consequence = /*#__PURE__*/ _interopRequireDefault(require("../verify/consequence"));
|
|
16
16
|
var _array = require("../utilities/array");
|
|
17
17
|
var _string = require("../utilities/string");
|
|
18
18
|
var _query = require("../utilities/query");
|
|
@@ -21,7 +21,7 @@ function _interopRequireDefault(obj) {
|
|
|
21
21
|
default: obj
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
|
-
var labelNodesQuery = (0, _query.nodesQuery)("/axiom/label"),
|
|
24
|
+
var labelNodesQuery = (0, _query.nodesQuery)("/axiom/label"), consequenceNodeQuery = (0, _query.nodeQuery)("/axiom/consequence!"), suppositionsNodeQuery = (0, _query.nodesQuery)("/axiom/supposition");
|
|
25
25
|
function verifyAxiom(axiomNode, fileContext) {
|
|
26
26
|
var axiomVerified = false;
|
|
27
27
|
fileContext.begin(axiomNode);
|
|
@@ -29,16 +29,16 @@ function verifyAxiom(axiomNode, fileContext) {
|
|
|
29
29
|
fileContext.debug("Verifying the '".concat(labelsString, "' axiom..."));
|
|
30
30
|
var labels = [], labelsVerified = (0, _labels.default)(labelNodes, labels, fileContext);
|
|
31
31
|
if (labelsVerified) {
|
|
32
|
-
var
|
|
33
|
-
var
|
|
34
|
-
if (
|
|
32
|
+
var suppositions = [], suppositionNodes = suppositionsNodeQuery(axiomNode), suppositionsVerified = suppositionNodes.every(function(suppositionNode) {
|
|
33
|
+
var suppositionVerified = (0, _supposition.default)(suppositionNode, suppositions, proofContext);
|
|
34
|
+
if (suppositionVerified) {
|
|
35
35
|
return true;
|
|
36
36
|
}
|
|
37
37
|
});
|
|
38
|
-
if (
|
|
39
|
-
var
|
|
40
|
-
if (
|
|
41
|
-
var
|
|
38
|
+
if (suppositionsVerified) {
|
|
39
|
+
var consequences = [], consequenceNode = consequenceNodeQuery(axiomNode), consequenceVerified = (0, _consequence.default)(consequenceNode, consequences, proofContext);
|
|
40
|
+
if (consequenceVerified) {
|
|
41
|
+
var firstConsequence = (0, _array.first)(consequences), consequence = firstConsequence, axiom = _axiom.default.fromLabelsSuppositionsAndConsequence(labels, suppositions, consequence);
|
|
42
42
|
fileContext.addAxiom(axiom);
|
|
43
43
|
axiomVerified = true;
|
|
44
44
|
}
|
|
@@ -51,4 +51,4 @@ function verifyAxiom(axiomNode, fileContext) {
|
|
|
51
51
|
return axiomVerified;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvYXhpb20uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBBeGlvbSBmcm9tIFwiLi4vYXhpb21cIjtcbmltcG9ydCBQcm9vZkNvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvcHJvb2ZcIjtcbmltcG9ydCB2ZXJpZnlMYWJlbHMgZnJvbSBcIi4uL3ZlcmlmeS9sYWJlbHNcIjtcbmltcG9ydCB2ZXJpZnlTdXBwb3NpdGlvbiBmcm9tIFwiLi4vdmVyaWZ5L3N1cHBvc2l0aW9uXCI7XG5pbXBvcnQgdmVyaWZ5Q29uc2VxdWVuY2UgZnJvbSBcIi4uL3ZlcmlmeS9jb25zZXF1ZW5jZVwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IG5vZGVzQXNTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgbm9kZVF1ZXJ5LCBub2Rlc1F1ZXJ5IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9xdWVyeVwiO1xuXG5jb25zdCBsYWJlbE5vZGVzUXVlcnkgPSBub2Rlc1F1ZXJ5KFwiL2F4aW9tL2xhYmVsXCIpLFxuICAgICAgY29uc2VxdWVuY2VOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvYXhpb20vY29uc2VxdWVuY2UhXCIpLFxuICAgICAgc3VwcG9zaXRpb25zTm9kZVF1ZXJ5ID0gbm9kZXNRdWVyeShcIi9heGlvbS9zdXBwb3NpdGlvblwiKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5QXhpb20oYXhpb21Ob2RlLCBmaWxlQ29udGV4dCkge1xuICBsZXQgYXhpb21WZXJpZmllZCA9IGZhbHNlO1xuXG4gIGZpbGVDb250ZXh0LmJlZ2luKGF4aW9tTm9kZSk7XG5cbiAgY29uc3QgbGFiZWxOb2RlcyA9IGxhYmVsTm9kZXNRdWVyeShheGlvbU5vZGUpLFxuICAgICAgICBsYWJlbHNTdHJpbmcgPSBub2Rlc0FzU3RyaW5nKGxhYmVsTm9kZXMpLFxuICAgICAgICBwcm9vZkNvbnRleHQgPSBQcm9vZkNvbnRleHQuZnJvbUZpbGVDb250ZXh0KGZpbGVDb250ZXh0KTtcblxuICBmaWxlQ29udGV4dC5kZWJ1ZyhgVmVyaWZ5aW5nIHRoZSAnJHtsYWJlbHNTdHJpbmd9JyBheGlvbS4uLmApO1xuXG4gIGNvbnN0IGxhYmVscyA9IFtdLFxuICAgICAgICBsYWJlbHNWZXJpZmllZCA9IHZlcmlmeUxhYmVscyhsYWJlbE5vZGVzLCBsYWJlbHMsIGZpbGVDb250ZXh0KTtcblxuICBpZiAobGFiZWxzVmVyaWZpZWQpIHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbnMgPSBbXSxcbiAgICAgICAgICBzdXBwb3NpdGlvbk5vZGVzID0gc3VwcG9zaXRpb25zTm9kZVF1ZXJ5KGF4aW9tTm9kZSksXG4gICAgICAgICAgc3VwcG9zaXRpb25zVmVyaWZpZWQgPSBzdXBwb3NpdGlvbk5vZGVzLmV2ZXJ5KChzdXBwb3NpdGlvbk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1cHBvc2l0aW9uVmVyaWZpZWQgPSB2ZXJpZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbk5vZGUsIHN1cHBvc2l0aW9ucywgcHJvb2ZDb250ZXh0KTtcblxuICAgICAgICAgICAgaWYgKHN1cHBvc2l0aW9uVmVyaWZpZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICBpZiAoc3VwcG9zaXRpb25zVmVyaWZpZWQpIHtcbiAgICAgIGNvbnN0IGNvbnNlcXVlbmNlcyA9IFtdLFxuICAgICAgICAgICAgY29uc2VxdWVuY2VOb2RlID0gY29uc2VxdWVuY2VOb2RlUXVlcnkoYXhpb21Ob2RlKSxcbiAgICAgICAgICAgIGNvbnNlcXVlbmNlVmVyaWZpZWQgPSB2ZXJpZnlDb25zZXF1ZW5jZShjb25zZXF1ZW5jZU5vZGUsIGNvbnNlcXVlbmNlcywgcHJvb2ZDb250ZXh0KTtcblxuICAgICAgaWYgKGNvbnNlcXVlbmNlVmVyaWZpZWQpIHtcbiAgICAgICAgY29uc3QgZmlyc3RDb25zZXF1ZW5jZSA9IGZpcnN0KGNvbnNlcXVlbmNlcyksXG4gICAgICAgICAgICAgIGNvbnNlcXVlbmNlID0gZmlyc3RDb25zZXF1ZW5jZSwgLy8vXG4gICAgICAgICAgICAgIGF4aW9tID0gQXhpb20uZnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZENvbnNlcXVlbmNlKGxhYmVscywgc3VwcG9zaXRpb25zLCBjb25zZXF1ZW5jZSk7XG5cbiAgICAgICAgZmlsZUNvbnRleHQuYWRkQXhpb20oYXhpb20pO1xuXG4gICAgICAgIGF4aW9tVmVyaWZpZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChheGlvbVZlcmlmaWVkKSB7XG4gICAgZmlsZUNvbnRleHQuaW5mbyhgVmVyaWZpZWQgdGhlICcke2xhYmVsc1N0cmluZ30nIGF4aW9tLmApO1xuICB9XG5cbiAgYXhpb21WZXJpZmllZCA/XG4gICAgZmlsZUNvbnRleHQuY29tcGxldGUoYXhpb21Ob2RlKSA6XG4gICAgICBmaWxlQ29udGV4dC5jb21wbGV0ZShheGlvbU5vZGUpO1xuXG4gIHJldHVybiBheGlvbVZlcmlmaWVkO1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeUF4aW9tIiwibGFiZWxOb2Rlc1F1ZXJ5Iiwibm9kZXNRdWVyeSIsImNvbnNlcXVlbmNlTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5Iiwic3VwcG9zaXRpb25zTm9kZVF1ZXJ5IiwiYXhpb21Ob2RlIiwiZmlsZUNvbnRleHQiLCJheGlvbVZlcmlmaWVkIiwiYmVnaW4iLCJsYWJlbE5vZGVzIiwibGFiZWxzU3RyaW5nIiwibm9kZXNBc1N0cmluZyIsInByb29mQ29udGV4dCIsIlByb29mQ29udGV4dCIsImZyb21GaWxlQ29udGV4dCIsImRlYnVnIiwibGFiZWxzIiwibGFiZWxzVmVyaWZpZWQiLCJ2ZXJpZnlMYWJlbHMiLCJzdXBwb3NpdGlvbnMiLCJzdXBwb3NpdGlvbk5vZGVzIiwic3VwcG9zaXRpb25zVmVyaWZpZWQiLCJldmVyeSIsInN1cHBvc2l0aW9uTm9kZSIsInN1cHBvc2l0aW9uVmVyaWZpZWQiLCJ2ZXJpZnlTdXBwb3NpdGlvbiIsImNvbnNlcXVlbmNlcyIsImNvbnNlcXVlbmNlTm9kZSIsImNvbnNlcXVlbmNlVmVyaWZpZWQiLCJ2ZXJpZnlDb25zZXF1ZW5jZSIsImZpcnN0Q29uc2VxdWVuY2UiLCJmaXJzdCIsImNvbnNlcXVlbmNlIiwiYXhpb20iLCJBeGlvbSIsImZyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmRDb25zZXF1ZW5jZSIsImFkZEF4aW9tIiwiaW5mbyIsImNvbXBsZXRlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFnQkE7OztlQUF3QkE7OzswREFkTjswREFDTzsyREFDQTtnRUFDSztnRUFDQTtxQkFFUjtzQkFDUTtxQkFDUTs7Ozs7O0FBRXRDLElBQU1DLGtCQUFrQkMsSUFBQUEsaUJBQVUsRUFBQyxpQkFDN0JDLHVCQUF1QkMsSUFBQUEsZ0JBQVMsRUFBQyx3QkFDakNDLHdCQUF3QkgsSUFBQUEsaUJBQVUsRUFBQztBQUUxQixTQUFTRixZQUFZTSxTQUFTLEVBQUVDLFdBQVcsRUFBRTtJQUMxRCxJQUFJQyxnQkFBZ0IsS0FBSztJQUV6QkQsWUFBWUUsS0FBSyxDQUFDSDtJQUVsQixJQUFNSSxhQUFhVCxnQkFBZ0JLLFlBQzdCSyxlQUFlQyxJQUFBQSxxQkFBYSxFQUFDRixhQUM3QkcsZUFBZUMsY0FBWSxDQUFDQyxlQUFlLENBQUNSO0lBRWxEQSxZQUFZUyxLQUFLLENBQUMsQUFBQyxrQkFBOEIsT0FBYkwsY0FBYTtJQUVqRCxJQUFNTSxTQUFTLEVBQUUsRUFDWEMsaUJBQWlCQyxJQUFBQSxlQUFZLEVBQUNULFlBQVlPLFFBQVFWO0lBRXhELElBQUlXLGdCQUFnQjtRQUNsQixJQUFNRSxlQUFlLEVBQUUsRUFDakJDLG1CQUFtQmhCLHNCQUFzQkMsWUFDekNnQix1QkFBdUJELGlCQUFpQkUsS0FBSyxDQUFDLFNBQUNDLGlCQUFvQjtZQUNqRSxJQUFNQyxzQkFBc0JDLElBQUFBLG9CQUFpQixFQUFDRixpQkFBaUJKLGNBQWNQO1lBRTdFLElBQUlZLHFCQUFxQjtnQkFDdkIsT0FBTyxJQUFJO1lBQ2IsQ0FBQztRQUNIO1FBRU4sSUFBSUgsc0JBQXNCO1lBQ3hCLElBQU1LLGVBQWUsRUFBRSxFQUNqQkMsa0JBQWtCekIscUJBQXFCRyxZQUN2Q3VCLHNCQUFzQkMsSUFBQUEsb0JBQWlCLEVBQUNGLGlCQUFpQkQsY0FBY2Q7WUFFN0UsSUFBSWdCLHFCQUFxQjtnQkFDdkIsSUFBTUUsbUJBQW1CQyxJQUFBQSxZQUFLLEVBQUNMLGVBQ3pCTSxjQUFjRixrQkFDZEcsUUFBUUMsY0FBSyxDQUFDQyxvQ0FBb0MsQ0FBQ25CLFFBQVFHLGNBQWNhO2dCQUUvRTFCLFlBQVk4QixRQUFRLENBQUNIO2dCQUVyQjFCLGdCQUFnQixJQUFJO1lBQ3RCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUlBLGVBQWU7UUFDakJELFlBQVkrQixJQUFJLENBQUMsQUFBQyxpQkFBNkIsT0FBYjNCLGNBQWE7SUFDakQsQ0FBQztJQUVESCxnQkFDRUQsWUFBWWdDLFFBQVEsQ0FBQ2pDLGFBQ25CQyxZQUFZZ0MsUUFBUSxDQUFDakMsVUFBVTtJQUVuQyxPQUFPRTtBQUNUIn0=
|