occam-verify-cli 0.0.922 → 0.0.923
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/conclusion.js +11 -41
- package/lib/constants.js +1 -5
- package/lib/context/local.js +15 -55
- package/lib/declaration.js +15 -15
- package/lib/metaLemmaMetatheorem.js +59 -59
- package/lib/mixins/nodesVerifier/metaLevel.js +6 -6
- package/lib/premise.js +14 -91
- package/lib/{step/proof.js → proofStep.js} +1 -1
- package/lib/rule.js +1 -45
- package/lib/ruleNames.js +1 -9
- package/lib/substitution/statementForMetavariable.js +9 -1
- package/lib/substitution.js +1 -8
- package/lib/supposition.js +55 -1
- package/lib/utilities/customGrammar.js +2 -2
- package/lib/utilities/match.js +13 -50
- package/lib/utilities/node.js +2 -27
- package/lib/utilities/tokens.js +1 -8
- package/lib/utilities/verify.js +8 -24
- package/lib/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +29 -29
- package/lib/verifier/nodes/metaLevel.js +13 -13
- package/lib/verify/conclusion.js +10 -11
- package/lib/verify/declaration.js +6 -6
- package/lib/verify/metaLemma.js +12 -12
- package/lib/verify/metastatement.js +64 -64
- package/lib/verify/metatheorem.js +12 -12
- package/lib/verify/premise.js +11 -30
- package/lib/verify/proofStep.js +5 -5
- package/lib/verify/rule.js +9 -9
- package/lib/verify/statement/qualified.js +35 -9
- package/lib/verify/statement/unqualified.js +1 -1
- package/lib/verify/supposition.js +3 -3
- package/package.json +1 -1
- package/src/conclusion.js +13 -52
- package/src/constants.js +0 -1
- package/src/context/local.js +17 -64
- package/src/declaration.js +19 -19
- package/src/metaLemmaMetatheorem.js +58 -58
- package/src/mixins/nodesVerifier/metaLevel.js +8 -8
- package/src/premise.js +20 -137
- package/src/rule.js +0 -67
- package/src/ruleNames.js +0 -2
- package/src/substitution/statementForMetavariable.js +14 -0
- package/src/substitution.js +0 -6
- package/src/supposition.js +46 -0
- package/src/utilities/customGrammar.js +1 -2
- package/src/utilities/match.js +13 -60
- package/src/utilities/node.js +3 -32
- package/src/utilities/tokens.js +0 -8
- package/src/utilities/verify.js +4 -20
- package/src/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +36 -37
- package/src/verifier/nodes/metaLevel.js +17 -17
- package/src/verify/conclusion.js +9 -13
- package/src/verify/declaration.js +7 -7
- package/src/verify/metaLemma.js +22 -22
- package/src/verify/metastatement.js +64 -64
- package/src/verify/metatheorem.js +21 -21
- package/src/verify/premise.js +14 -46
- package/src/verify/proofStep.js +1 -1
- package/src/verify/rule.js +8 -8
- package/src/verify/statement/qualified.js +43 -9
- package/src/verify/statement/unqualified.js +1 -1
- package/src/verify/supposition.js +1 -1
- package/lib/metaConsequent.js +0 -108
- package/lib/metaSupposition.js +0 -160
- package/lib/node/metastatement/bracketed.js +0 -16
- package/lib/step/metaproof.js +0 -106
- package/lib/substitution/metastatementForMetavariable.js +0 -173
- package/lib/verify/metaConsequent.js +0 -50
- package/lib/verify/metaDerivation.js +0 -31
- package/lib/verify/metaSubDerivation.js +0 -25
- package/lib/verify/metaSubproof.js +0 -34
- package/lib/verify/metaSupposition.js +0 -61
- package/lib/verify/metaSuppositions.js +0 -28
- package/lib/verify/metaproof.js +0 -31
- package/lib/verify/metaproofStep.js +0 -98
- package/lib/verify/metastatement/qualified.js +0 -95
- package/lib/verify/metastatement/unqualified.js +0 -37
- package/lib/verify/metastatementAsContainedAssertion.js +0 -109
- package/lib/verify/metastatementAsDefinedAssertion.js +0 -132
- package/lib/verify/metavariableAgainstMetastatement.js +0 -44
- package/src/metaConsequent.js +0 -83
- package/src/metaSupposition.js +0 -127
- package/src/node/metastatement/bracketed.js +0 -9
- package/src/step/metaproof.js +0 -73
- package/src/substitution/metastatementForMetavariable.js +0 -90
- package/src/verify/metaConsequent.js +0 -61
- package/src/verify/metaDerivation.js +0 -23
- package/src/verify/metaSubDerivation.js +0 -22
- package/src/verify/metaSubproof.js +0 -32
- package/src/verify/metaSupposition.js +0 -78
- package/src/verify/metaSuppositions.js +0 -17
- package/src/verify/metaproof.js +0 -28
- package/src/verify/metaproofStep.js +0 -137
- package/src/verify/metastatement/qualified.js +0 -130
- package/src/verify/metastatement/unqualified.js +0 -34
- package/src/verify/metastatementAsContainedAssertion.js +0 -127
- package/src/verify/metastatementAsDefinedAssertion.js +0 -156
- package/src/verify/metavariableAgainstMetastatement.js +0 -42
- /package/src/{step/proof.js → proofStep.js} +0 -0
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import verifyProof from "../verify/proof";
|
|
3
4
|
import Metatheorem from "../metatheorem";
|
|
4
5
|
import verifyLabels from "../verify/labels";
|
|
5
6
|
import LocalContext from "../context/local";
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import verifyMetaSuppositions from "../verify/metaSuppositions";
|
|
7
|
+
import verifyConsequent from "../verify/consequent";
|
|
8
|
+
import verifySuppositions from "../verify/suppositions";
|
|
9
9
|
|
|
10
10
|
import { first } from "../utilities/array";
|
|
11
11
|
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
12
12
|
|
|
13
13
|
const labelNodesQuery = nodesQuery("/metatheorem/label"),
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
proofNodeQuery = nodeQuery("/metatheorem/proof!"),
|
|
15
|
+
consequentNodeQuery = nodeQuery("/metatheorem/consequent!"),
|
|
16
|
+
suppositionsNodeQuery = nodesQuery("/metatheorem/supposition");
|
|
17
17
|
|
|
18
18
|
export default function verifyMetatheorem(metatheoremNode, fileContext) {
|
|
19
19
|
let metatheoremVerified = false;
|
|
@@ -29,24 +29,24 @@ export default function verifyMetatheorem(metatheoremNode, fileContext) {
|
|
|
29
29
|
if (labelsVerified) {
|
|
30
30
|
const localContext = LocalContext.fromFileContext(fileContext), ///
|
|
31
31
|
substitutions = [],
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
suppositions = [],
|
|
33
|
+
suppositionNodes = suppositionsNodeQuery(metatheoremNode),
|
|
34
|
+
suppositionsVerified = verifySuppositions(suppositionNodes, suppositions, substitutions, localContext);
|
|
35
35
|
|
|
36
|
-
if (
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
if (suppositionsVerified) {
|
|
37
|
+
const consequents = [],
|
|
38
|
+
consequentNode = consequentNodeQuery(metatheoremNode),
|
|
39
|
+
consequentVerified = verifyConsequent(consequentNode, consequents, substitutions, localContext);
|
|
40
40
|
|
|
41
|
-
if (
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
41
|
+
if (consequentVerified) {
|
|
42
|
+
const proofNode = proofNodeQuery(metatheoremNode),
|
|
43
|
+
firstConsequent = first(consequents),
|
|
44
|
+
consequent = firstConsequent, ///
|
|
45
|
+
statementNode = consequent.getStatementNode(),
|
|
46
|
+
proofVerified = verifyProof(proofNode, statementNode, substitutions, localContext);
|
|
47
47
|
|
|
48
|
-
if (
|
|
49
|
-
const metatheorem = Metatheorem.
|
|
48
|
+
if (proofVerified) {
|
|
49
|
+
const metatheorem = Metatheorem.fromLabelsSuppositionsConsequentSubstitutionsAndFileContext(labels, suppositions, consequent, substitutions, fileContext);
|
|
50
50
|
|
|
51
51
|
fileContext.addMetatheorem(metatheorem);
|
|
52
52
|
|
package/src/verify/premise.js
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Premise from "../premise";
|
|
4
|
-
import
|
|
4
|
+
import ProofStep from "../proofStep";
|
|
5
5
|
import verifyUnqualifiedStatement from "../verify/statement/unqualified";
|
|
6
|
-
import verifyUnqualifiedMetastatement from "../verify/metastatement/unqualified";
|
|
7
6
|
|
|
8
7
|
import { nodeQuery } from "../utilities/query";
|
|
9
8
|
import { assignAssignment } from "../utilities/assignments";
|
|
10
9
|
|
|
11
10
|
const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!"),
|
|
12
|
-
|
|
13
|
-
unqualifiedStatementNodeQuery = nodeQuery("/premise/unqualifiedStatement!"),
|
|
14
|
-
unqualifiedMetastatementNodeQuery = nodeQuery("/premise/unqualifiedMetastatement!");
|
|
11
|
+
unqualifiedStatementNodeQuery = nodeQuery("/premise/unqualifiedStatement!");
|
|
15
12
|
|
|
16
13
|
export default function verifyPremise(premiseNode, premises, localContext) {
|
|
17
14
|
let premiseVerified;
|
|
@@ -21,56 +18,27 @@ export default function verifyPremise(premiseNode, premises, localContext) {
|
|
|
21
18
|
localContext.trace(`Verifying the '${premiseString}' premise...`, premiseNode);
|
|
22
19
|
|
|
23
20
|
const unqualifiedStatementNode = unqualifiedStatementNodeQuery(premiseNode),
|
|
24
|
-
|
|
21
|
+
derived = false,
|
|
22
|
+
assignments = [],
|
|
23
|
+
unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext);
|
|
25
24
|
|
|
26
|
-
if (
|
|
27
|
-
const
|
|
28
|
-
assignments = [],
|
|
29
|
-
unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext);
|
|
25
|
+
if (unqualifiedStatementVerified) {
|
|
26
|
+
const assignmentAssigned = assignAssignment(assignments, localContext);
|
|
30
27
|
|
|
31
|
-
if (
|
|
32
|
-
const
|
|
28
|
+
if (assignmentAssigned) {
|
|
29
|
+
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
30
|
+
metaproofStep = ProofStep.fromStatementNode(statementNode),
|
|
31
|
+
premise = Premise.fromStatementNode(statementNode);
|
|
33
32
|
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
}
|
|
33
|
+
premises.push(premise);
|
|
37
34
|
|
|
38
|
-
|
|
39
|
-
const derived = false,
|
|
40
|
-
assignments = [],
|
|
41
|
-
unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, assignments, derived, localContext);
|
|
35
|
+
localContext.addProofStep(metaproofStep);
|
|
42
36
|
|
|
43
|
-
|
|
44
|
-
const assignmentAssigned = assignAssignment(assignments, localContext);
|
|
45
|
-
|
|
46
|
-
premiseVerified = assignmentAssigned; ///
|
|
37
|
+
premiseVerified = true;
|
|
47
38
|
}
|
|
48
39
|
}
|
|
49
40
|
|
|
50
41
|
if (premiseVerified) {
|
|
51
|
-
let premise,
|
|
52
|
-
metaproofStep;
|
|
53
|
-
|
|
54
|
-
if (unqualifiedStatementNode !== null) {
|
|
55
|
-
const statementNode = statementNodeQuery(unqualifiedStatementNode);
|
|
56
|
-
|
|
57
|
-
metaproofStep = MetaproofStep.fromMetastatementNode(statementNode);
|
|
58
|
-
|
|
59
|
-
premise = Premise.fromStatementNode(statementNode);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
if (unqualifiedMetastatementNode !== null) {
|
|
63
|
-
const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode);
|
|
64
|
-
|
|
65
|
-
metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode);
|
|
66
|
-
|
|
67
|
-
premise = Premise.fromMetastatementNode(metastatementNode);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
premises.push(premise);
|
|
71
|
-
|
|
72
|
-
localContext.addMetaproofStep(metaproofStep);
|
|
73
|
-
|
|
74
42
|
localContext.debug(`...verified the '${premiseString}' premise.`, premiseNode);
|
|
75
43
|
}
|
|
76
44
|
|
package/src/verify/proofStep.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import ProofStep from "../
|
|
3
|
+
import ProofStep from "../proofStep";
|
|
4
4
|
import verifySubproof from "../verify/subproof";
|
|
5
5
|
import verifySubDerivation from "../verify/subDerivation";
|
|
6
6
|
import verifyQualifiedStatement from "../verify/statement/qualified";
|
package/src/verify/rule.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Rule from "../rule";
|
|
4
|
+
import verifyProof from "../verify/proof";
|
|
4
5
|
import LocalContext from "../context/local";
|
|
5
6
|
import verifyLabels from "../verify/labels";
|
|
6
7
|
import verifyPremises from "../verify/premises";
|
|
7
|
-
import verifyMetaproof from "../verify/metaproof";
|
|
8
8
|
import verifyConclusion from "../verify/conclusion";
|
|
9
9
|
|
|
10
10
|
import { first } from "../utilities/array";
|
|
@@ -12,7 +12,7 @@ import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
|
12
12
|
|
|
13
13
|
const labelNodesQuery = nodesQuery("/rule/label"),
|
|
14
14
|
premisesNodeQuery = nodesQuery("/rule/premise"),
|
|
15
|
-
|
|
15
|
+
proofNodeQuery = nodeQuery("/rule/proof!"),
|
|
16
16
|
conclusionNodeQuery = nodeQuery("/rule/conclusion!");
|
|
17
17
|
|
|
18
18
|
export default function verifyRule(ruleNode, fileContext) {
|
|
@@ -38,20 +38,20 @@ export default function verifyRule(ruleNode, fileContext) {
|
|
|
38
38
|
conclusionVerified = verifyConclusion(conclusionNode, conclusions, localContext);
|
|
39
39
|
|
|
40
40
|
if (conclusionVerified) {
|
|
41
|
-
let
|
|
41
|
+
let proofVerified = true; ///
|
|
42
42
|
|
|
43
43
|
const firstConclusion = first(conclusions),
|
|
44
|
-
|
|
44
|
+
proofNode = proofNodeQuery(ruleNode),
|
|
45
45
|
conclusion = firstConclusion; ///
|
|
46
46
|
|
|
47
|
-
if (
|
|
47
|
+
if (proofNode !== null) {
|
|
48
48
|
const substitutions = [],
|
|
49
|
-
|
|
49
|
+
statementNode = conclusion.getStatementNode();
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
proofVerified = verifyProof(proofNode, statementNode, substitutions, localContext);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
if (
|
|
54
|
+
if (proofVerified) {
|
|
55
55
|
const rule = Rule.fromLabelsPremisesConclusionAndFileContext(labels, premises, conclusion, fileContext);
|
|
56
56
|
|
|
57
57
|
fileContext.addRule(rule);
|
|
@@ -6,7 +6,9 @@ import { verifyStatementAsEquality, verifyStatementAsTypeAssertion } from "../..
|
|
|
6
6
|
const statementNodeQuery = nodeQuery("/qualifiedStatement/statement!"),
|
|
7
7
|
metavariableNodeQuery = nodeQuery("/qualifiedStatement/reference!/metavariable!");
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
import verifyMetavariableAgainstStatement from "../../verify/metavariableAgainstStatement";
|
|
10
|
+
|
|
11
|
+
export default function verifyQualifiedStatement(qualifiedStatementNode, substitutions, assignments, localContext) {
|
|
10
12
|
let qualifiedStatementVerified;
|
|
11
13
|
|
|
12
14
|
const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
@@ -16,6 +18,7 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, assignm
|
|
|
16
18
|
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
17
19
|
verifyQualifiedStatementFunctions = [
|
|
18
20
|
verifyQualifiedStatementAAgainstRule,
|
|
21
|
+
verifyQualifiedStatementAAgainstReference,
|
|
19
22
|
verifyQualifiedStatementAAgainstAxiom,
|
|
20
23
|
verifyQualifiedStatementAAgainstLemma,
|
|
21
24
|
verifyQualifiedStatementAAgainstTheorem,
|
|
@@ -23,7 +26,7 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, assignm
|
|
|
23
26
|
];
|
|
24
27
|
|
|
25
28
|
qualifiedStatementVerified = verifyQualifiedStatementFunctions.some((verifyQualifiedStatementFunction) => { ///
|
|
26
|
-
const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode, metavariableNode, localContext);
|
|
29
|
+
const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode, metavariableNode, substitutions, localContext);
|
|
27
30
|
|
|
28
31
|
if (qualifiedStatementVerified) {
|
|
29
32
|
return true;
|
|
@@ -33,9 +36,13 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, assignm
|
|
|
33
36
|
if (qualifiedStatementVerified) {
|
|
34
37
|
const derived = false,
|
|
35
38
|
statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
36
|
-
statementVerified = verifyStatement(statementNode, assignments, derived, localContext)
|
|
39
|
+
statementVerified = verifyStatement(statementNode, assignments, derived, localContext, () => {
|
|
40
|
+
const verifiedAhead = true;
|
|
41
|
+
|
|
42
|
+
return verifiedAhead;
|
|
43
|
+
});
|
|
37
44
|
|
|
38
|
-
qualifiedStatementVerified = statementVerified;
|
|
45
|
+
qualifiedStatementVerified = statementVerified; ///
|
|
39
46
|
}
|
|
40
47
|
|
|
41
48
|
if (qualifiedStatementVerified) {
|
|
@@ -45,7 +52,7 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, assignm
|
|
|
45
52
|
return qualifiedStatementVerified;
|
|
46
53
|
}
|
|
47
54
|
|
|
48
|
-
function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, metavariableNode, localContext) {
|
|
55
|
+
function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, metavariableNode, substitutions, localContext) {
|
|
49
56
|
let qualifiedStatementVerifiedAgainstRule = false;
|
|
50
57
|
|
|
51
58
|
const rule = localContext.findRuleByMetavariableNode(metavariableNode);
|
|
@@ -69,7 +76,7 @@ function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, metavariab
|
|
|
69
76
|
return qualifiedStatementVerifiedAgainstRule;
|
|
70
77
|
}
|
|
71
78
|
|
|
72
|
-
function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, metavariableNode, localContext) {
|
|
79
|
+
function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, metavariableNode, substitutions, localContext) {
|
|
73
80
|
let qualifiedStatementVerifiedAgainstAxiom = false;
|
|
74
81
|
|
|
75
82
|
const axiom = localContext.findAxiomByMetavariableNode(metavariableNode);
|
|
@@ -93,7 +100,7 @@ function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, metavaria
|
|
|
93
100
|
return qualifiedStatementVerifiedAgainstAxiom;
|
|
94
101
|
}
|
|
95
102
|
|
|
96
|
-
function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, metavariableNode, localContext) {
|
|
103
|
+
function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, metavariableNode, substitutions, localContext) {
|
|
97
104
|
let qualifiedStatementVerifiedAgainstLemma = false;
|
|
98
105
|
|
|
99
106
|
const lemma = localContext.findLemmaByMetavariableNode(metavariableNode);
|
|
@@ -117,7 +124,7 @@ function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, metavaria
|
|
|
117
124
|
return qualifiedStatementVerifiedAgainstLemma;
|
|
118
125
|
}
|
|
119
126
|
|
|
120
|
-
function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, metavariableNode, localContext) {
|
|
127
|
+
function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, metavariableNode, substitutions, localContext) {
|
|
121
128
|
let qualifiedStatementVerifiedAgainstTheorem = false;
|
|
122
129
|
|
|
123
130
|
const theorem = localContext.findTheoremByMetavariableNode(metavariableNode);
|
|
@@ -141,7 +148,7 @@ function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, metavar
|
|
|
141
148
|
return qualifiedStatementVerifiedAgainstTheorem;
|
|
142
149
|
}
|
|
143
150
|
|
|
144
|
-
function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, metavariableNode, localContext) {
|
|
151
|
+
function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, metavariableNode, substitutions, localContext) {
|
|
145
152
|
let qualifiedStatementVerifiedAgainstConjecture = false;
|
|
146
153
|
|
|
147
154
|
const conjecture = localContext.findConjectureByMetavariableNode(metavariableNode);
|
|
@@ -165,6 +172,33 @@ function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, meta
|
|
|
165
172
|
return qualifiedStatementVerifiedAgainstConjecture;
|
|
166
173
|
}
|
|
167
174
|
|
|
175
|
+
function verifyQualifiedStatementAAgainstReference(qualifiedStatementNode, metavariableNode, substitutions, localContext) {
|
|
176
|
+
let qualifiedStatementVerifiedAgainstReference = false;
|
|
177
|
+
|
|
178
|
+
const metavariableString = localContext.nodeAsString(metavariableNode),
|
|
179
|
+
metavariablePresent = localContext.isMetavariablePresentByMetavariableNode(metavariableNode, localContext),
|
|
180
|
+
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
181
|
+
|
|
182
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' reference...`, qualifiedStatementNode);
|
|
183
|
+
|
|
184
|
+
if (metavariablePresent) {
|
|
185
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
186
|
+
metavariableVerifiedAgainstStatement = verifyMetavariableAgainstStatement(metavariableNode, statementNode, substitutions, () => {
|
|
187
|
+
const verifiedAhead = true;
|
|
188
|
+
|
|
189
|
+
return verifiedAhead;
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
qualifiedStatementVerifiedAgainstReference = metavariableVerifiedAgainstStatement; ///
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
if (qualifiedStatementVerifiedAgainstReference) {
|
|
196
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' reference.`, qualifiedStatementNode);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
return qualifiedStatementVerifiedAgainstReference;
|
|
200
|
+
}
|
|
201
|
+
|
|
168
202
|
function verifyStatement(statementNode, assignments, derived, localContext) {
|
|
169
203
|
let statementVerified;
|
|
170
204
|
|
|
@@ -23,7 +23,7 @@ export default function verifyUnqualifiedStatement(unqualifiedStatementNode, ass
|
|
|
23
23
|
if (!unqualifiedStatementVerified) {
|
|
24
24
|
const statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
|
|
25
25
|
|
|
26
|
-
unqualifiedStatementVerified = statementVerified;
|
|
26
|
+
unqualifiedStatementVerified = statementVerified; ///
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
if (unqualifiedStatementVerified) {
|
package/lib/metaConsequent.js
DELETED
|
@@ -1,108 +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 MetaConsequent;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _local = /*#__PURE__*/ _interop_require_default(require("./context/local"));
|
|
12
|
-
var _metaLevel = /*#__PURE__*/ _interop_require_default(require("./verifier/nodes/metaLevel"));
|
|
13
|
-
var _string = require("./utilities/string");
|
|
14
|
-
var _node = require("./utilities/node");
|
|
15
|
-
function _class_call_check(instance, Constructor) {
|
|
16
|
-
if (!(instance instanceof Constructor)) {
|
|
17
|
-
throw new TypeError("Cannot call a class as a function");
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
function _defineProperties(target, props) {
|
|
21
|
-
for(var i = 0; i < props.length; i++){
|
|
22
|
-
var descriptor = props[i];
|
|
23
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
24
|
-
descriptor.configurable = true;
|
|
25
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
26
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
function _create_class(Constructor, protoProps, staticProps) {
|
|
30
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
31
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
32
|
-
return Constructor;
|
|
33
|
-
}
|
|
34
|
-
function _interop_require_default(obj) {
|
|
35
|
-
return obj && obj.__esModule ? obj : {
|
|
36
|
-
default: obj
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
var MetaConsequent = /*#__PURE__*/ function() {
|
|
40
|
-
function MetaConsequent(metastatementNode, statementNode) {
|
|
41
|
-
_class_call_check(this, MetaConsequent);
|
|
42
|
-
this.metastatementNode = metastatementNode;
|
|
43
|
-
this.statementNode = statementNode;
|
|
44
|
-
}
|
|
45
|
-
_create_class(MetaConsequent, [
|
|
46
|
-
{
|
|
47
|
-
key: "getMetastatementNode",
|
|
48
|
-
value: function getMetastatementNode() {
|
|
49
|
-
return this.metastatementNode;
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
key: "getStatementNode",
|
|
54
|
-
value: function getStatementNode() {
|
|
55
|
-
return this.statementNode;
|
|
56
|
-
}
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
key: "matchMetastatementNode",
|
|
60
|
-
value: function matchMetastatementNode(metastatementNode, substitutions, fileContext, localContext) {
|
|
61
|
-
var matchesMetastatementNode = false;
|
|
62
|
-
if (this.metastatementNode !== null) {
|
|
63
|
-
var fileContextA = fileContext, nonTerminalNodeA = this.metastatementNode, nonTerminalNodeB = metastatementNode, localContextA = _local.default.fromFileContext(fileContextA), localContextB = localContext, nonTerminalNodeVerified = _metaLevel.default.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, function() {
|
|
64
|
-
var verifiedAhead = true;
|
|
65
|
-
return verifiedAhead;
|
|
66
|
-
});
|
|
67
|
-
matchesMetastatementNode = nonTerminalNodeVerified; ///
|
|
68
|
-
}
|
|
69
|
-
return matchesMetastatementNode;
|
|
70
|
-
}
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
key: "toJSON",
|
|
74
|
-
value: function toJSON(tokens) {
|
|
75
|
-
var metastatementString = (0, _string.nodeAsString)(this.metastatementNode, tokens), statementString = (0, _string.nodeAsString)(this.statementNode, tokens), metastatement = metastatementString, statement = statementString, json = {
|
|
76
|
-
metastatement: metastatement,
|
|
77
|
-
statement: statement
|
|
78
|
-
};
|
|
79
|
-
return json;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
], [
|
|
83
|
-
{
|
|
84
|
-
key: "fromStatementNode",
|
|
85
|
-
value: function fromStatementNode(statementNode) {
|
|
86
|
-
var metastatementNode = null, metaConsequent = new MetaConsequent(metastatementNode, statementNode);
|
|
87
|
-
return metaConsequent;
|
|
88
|
-
}
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
key: "fromMetastatementNode",
|
|
92
|
-
value: function fromMetastatementNode(metastatementNode) {
|
|
93
|
-
var statementNode = null, metaConsequent = new MetaConsequent(metastatementNode, statementNode);
|
|
94
|
-
return metaConsequent;
|
|
95
|
-
}
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
key: "fromJSONAndFileContext",
|
|
99
|
-
value: function fromJSONAndFileContext(json, fileContext) {
|
|
100
|
-
var metastatement = json.metastatement, statement = json.statement, metastatementString = metastatement, statementString = statement, lexer = fileContext.getLexer(), parser = fileContext.getParser(), metastatementNode = (0, _node.metastatementNodeFromMetastatementString)(metastatementString, lexer, parser), statementNode = (0, _node.statementNodeFromStatementString)(statementString, lexer, parser), metaConsequent = new MetaConsequent(metastatementNode, statementNode);
|
|
101
|
-
return metaConsequent;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
]);
|
|
105
|
-
return MetaConsequent;
|
|
106
|
-
}();
|
|
107
|
-
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tZXRhQ29uc2VxdWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IExvY2FsQ29udGV4dCBmcm9tIFwiLi9jb250ZXh0L2xvY2FsXCI7XG5pbXBvcnQgbWV0YUxldmVsTm9kZXNWZXJpZmllciBmcm9tIFwiLi92ZXJpZmllci9ub2Rlcy9tZXRhTGV2ZWxcIjtcblxuaW1wb3J0IHsgbm9kZUFzU3RyaW5nIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgc3RhdGVtZW50Tm9kZUZyb21TdGF0ZW1lbnRTdHJpbmcsIG1ldGFzdGF0ZW1lbnROb2RlRnJvbU1ldGFzdGF0ZW1lbnRTdHJpbmcgfSBmcm9tIFwiLi91dGlsaXRpZXMvbm9kZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRhQ29uc2VxdWVudCB7XG4gIGNvbnN0cnVjdG9yKG1ldGFzdGF0ZW1lbnROb2RlLCBzdGF0ZW1lbnROb2RlKSB7XG4gICAgdGhpcy5tZXRhc3RhdGVtZW50Tm9kZSA9IG1ldGFzdGF0ZW1lbnROb2RlO1xuICAgIHRoaXMuc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGU7XG4gIH1cblxuICBnZXRNZXRhc3RhdGVtZW50Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhc3RhdGVtZW50Tm9kZTtcbiAgfVxuXG4gIGdldFN0YXRlbWVudE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50Tm9kZTtcbiAgfVxuXG4gIG1hdGNoTWV0YXN0YXRlbWVudE5vZGUobWV0YXN0YXRlbWVudE5vZGUsIHN1YnN0aXR1dGlvbnMsIGZpbGVDb250ZXh0LCBsb2NhbENvbnRleHQpIHtcbiAgICBsZXQgbWF0Y2hlc01ldGFzdGF0ZW1lbnROb2RlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5tZXRhc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZmlsZUNvbnRleHRBID0gZmlsZUNvbnRleHQsIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlQSA9IHRoaXMubWV0YXN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZUIgPSBtZXRhc3RhdGVtZW50Tm9kZSwgIC8vL1xuICAgICAgICAgICAgbG9jYWxDb250ZXh0QSA9IExvY2FsQ29udGV4dC5mcm9tRmlsZUNvbnRleHQoZmlsZUNvbnRleHRBKSxcbiAgICAgICAgICAgIGxvY2FsQ29udGV4dEIgPSBsb2NhbENvbnRleHQsIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlVmVyaWZpZWQgPSBtZXRhTGV2ZWxOb2Rlc1ZlcmlmaWVyLnZlcmlmeU5vblRlcm1pbmFsTm9kZShub25UZXJtaW5hbE5vZGVBLCBub25UZXJtaW5hbE5vZGVCLCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHRBLCBsb2NhbENvbnRleHRCLCAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHZlcmlmaWVkQWhlYWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgIHJldHVybiB2ZXJpZmllZEFoZWFkO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgIG1hdGNoZXNNZXRhc3RhdGVtZW50Tm9kZSA9IG5vblRlcm1pbmFsTm9kZVZlcmlmaWVkOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlc01ldGFzdGF0ZW1lbnROb2RlO1xuICB9XG5cbiAgdG9KU09OKHRva2Vucykge1xuICAgIGNvbnN0IG1ldGFzdGF0ZW1lbnRTdHJpbmcgPSBub2RlQXNTdHJpbmcodGhpcy5tZXRhc3RhdGVtZW50Tm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBub2RlQXNTdHJpbmcodGhpcy5zdGF0ZW1lbnROb2RlLCB0b2tlbnMpLFxuICAgICAgICAgIG1ldGFzdGF0ZW1lbnQgPSBtZXRhc3RhdGVtZW50U3RyaW5nLCAgLy8vXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50U3RyaW5nLCAgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIG1ldGFzdGF0ZW1lbnQsXG4gICAgICAgICAgICBzdGF0ZW1lbnRcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IG1ldGFzdGF0ZW1lbnROb2RlID0gbnVsbCxcbiAgICAgICAgICBtZXRhQ29uc2VxdWVudCA9IG5ldyBNZXRhQ29uc2VxdWVudChtZXRhc3RhdGVtZW50Tm9kZSwgc3RhdGVtZW50Tm9kZSk7XG5cbiAgICByZXR1cm4gbWV0YUNvbnNlcXVlbnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbU1ldGFzdGF0ZW1lbnROb2RlKG1ldGFzdGF0ZW1lbnROb2RlKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IG51bGwsXG4gICAgICAgICAgbWV0YUNvbnNlcXVlbnQgPSBuZXcgTWV0YUNvbnNlcXVlbnQobWV0YXN0YXRlbWVudE5vZGUsIHN0YXRlbWVudE5vZGUpO1xuXG4gICAgcmV0dXJuIG1ldGFDb25zZXF1ZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OQW5kRmlsZUNvbnRleHQoanNvbiwgZmlsZUNvbnRleHQpIHtcbiAgICBjb25zdCB7IG1ldGFzdGF0ZW1lbnQsIHN0YXRlbWVudCB9ID0ganNvbixcbiAgICAgICAgICBtZXRhc3RhdGVtZW50U3RyaW5nID0gbWV0YXN0YXRlbWVudCwgIC8vL1xuICAgICAgICAgIHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudCwgIC8vL1xuICAgICAgICAgIGxleGVyID0gZmlsZUNvbnRleHQuZ2V0TGV4ZXIoKSxcbiAgICAgICAgICBwYXJzZXIgPSBmaWxlQ29udGV4dC5nZXRQYXJzZXIoKSxcbiAgICAgICAgICBtZXRhc3RhdGVtZW50Tm9kZSA9IG1ldGFzdGF0ZW1lbnROb2RlRnJvbU1ldGFzdGF0ZW1lbnRTdHJpbmcobWV0YXN0YXRlbWVudFN0cmluZywgbGV4ZXIsIHBhcnNlciksXG4gICAgICAgICAgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGVGcm9tU3RhdGVtZW50U3RyaW5nKHN0YXRlbWVudFN0cmluZywgbGV4ZXIsIHBhcnNlciksXG4gICAgICAgICAgbWV0YUNvbnNlcXVlbnQgPSBuZXcgTWV0YUNvbnNlcXVlbnQobWV0YXN0YXRlbWVudE5vZGUsIHN0YXRlbWVudE5vZGUpO1xuXG4gICAgcmV0dXJuIG1ldGFDb25zZXF1ZW50O1xuICB9XG59XG4iXSwibmFtZXMiOlsiTWV0YUNvbnNlcXVlbnQiLCJtZXRhc3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJnZXRNZXRhc3RhdGVtZW50Tm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJtYXRjaE1ldGFzdGF0ZW1lbnROb2RlIiwic3Vic3RpdHV0aW9ucyIsImZpbGVDb250ZXh0IiwibG9jYWxDb250ZXh0IiwibWF0Y2hlc01ldGFzdGF0ZW1lbnROb2RlIiwiZmlsZUNvbnRleHRBIiwibm9uVGVybWluYWxOb2RlQSIsIm5vblRlcm1pbmFsTm9kZUIiLCJsb2NhbENvbnRleHRBIiwiTG9jYWxDb250ZXh0IiwiZnJvbUZpbGVDb250ZXh0IiwibG9jYWxDb250ZXh0QiIsIm5vblRlcm1pbmFsTm9kZVZlcmlmaWVkIiwibWV0YUxldmVsTm9kZXNWZXJpZmllciIsInZlcmlmeU5vblRlcm1pbmFsTm9kZSIsInZlcmlmaWVkQWhlYWQiLCJ0b0pTT04iLCJ0b2tlbnMiLCJtZXRhc3RhdGVtZW50U3RyaW5nIiwibm9kZUFzU3RyaW5nIiwic3RhdGVtZW50U3RyaW5nIiwibWV0YXN0YXRlbWVudCIsInN0YXRlbWVudCIsImpzb24iLCJmcm9tU3RhdGVtZW50Tm9kZSIsIm1ldGFDb25zZXF1ZW50IiwiZnJvbU1ldGFzdGF0ZW1lbnROb2RlIiwiZnJvbUpTT05BbmRGaWxlQ29udGV4dCIsImxleGVyIiwiZ2V0TGV4ZXIiLCJwYXJzZXIiLCJnZXRQYXJzZXIiLCJtZXRhc3RhdGVtZW50Tm9kZUZyb21NZXRhc3RhdGVtZW50U3RyaW5nIiwic3RhdGVtZW50Tm9kZUZyb21TdGF0ZW1lbnRTdHJpbmciXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBUXFCQTs7OzREQU5JO2dFQUNVO3NCQUVOO29CQUM4RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUU1RSxJQUFBLEFBQU1BLCtCQUFELEFBQUw7YUFBTUEsZUFDUEMsaUJBQWlCLEVBQUVDLGFBQWE7Z0NBRHpCRjtRQUVqQixJQUFJLENBQUNDLGlCQUFpQixHQUFHQTtRQUN6QixJQUFJLENBQUNDLGFBQWEsR0FBR0E7O2tCQUhKRjs7WUFNbkJHLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0YsaUJBQWlCO1lBQy9COzs7WUFFQUcsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDRixhQUFhO1lBQzNCOzs7WUFFQUcsS0FBQUE7bUJBQUFBLFNBQUFBLHVCQUF1QkosaUJBQWlCLEVBQUVLLGFBQWEsRUFBRUMsV0FBVyxFQUFFQyxZQUFZO2dCQUNoRixJQUFJQywyQkFBMkI7Z0JBRS9CLElBQUksSUFBSSxDQUFDUixpQkFBaUIsS0FBSyxNQUFNO29CQUNuQyxJQUFNUyxlQUFlSCxhQUNmSSxtQkFBbUIsSUFBSSxDQUFDVixpQkFBaUIsRUFDekNXLG1CQUFtQlgsbUJBQ25CWSxnQkFBZ0JDLGNBQVksQ0FBQ0MsZUFBZSxDQUFDTCxlQUM3Q00sZ0JBQWdCUixjQUNoQlMsMEJBQTBCQyxrQkFBc0IsQ0FBQ0MscUJBQXFCLENBQUNSLGtCQUFrQkMsa0JBQWtCTixlQUFlTyxlQUFlRyxlQUFlO3dCQUN0SixJQUFNSSxnQkFBZ0I7d0JBRXRCLE9BQU9BO29CQUNUO29CQUVOWCwyQkFBMkJRLHlCQUF5QixHQUFHO2dCQUN6RDtnQkFFQSxPQUFPUjtZQUNUOzs7WUFFQVksS0FBQUE7bUJBQUFBLFNBQUFBLE9BQU9DLE1BQU07Z0JBQ1gsSUFBTUMsc0JBQXNCQyxJQUFBQSxvQkFBWSxFQUFDLElBQUksQ0FBQ3ZCLGlCQUFpQixFQUFFcUIsU0FDM0RHLGtCQUFrQkQsSUFBQUEsb0JBQVksRUFBQyxJQUFJLENBQUN0QixhQUFhLEVBQUVvQixTQUNuREksZ0JBQWdCSCxxQkFDaEJJLFlBQVlGLGlCQUNaRyxPQUFPO29CQUNMRixlQUFBQTtvQkFDQUMsV0FBQUE7Z0JBQ0Y7Z0JBRU4sT0FBT0M7WUFDVDs7OztZQUVPQyxLQUFBQTttQkFBUCxTQUFPQSxrQkFBa0IzQixhQUFhO2dCQUNwQyxJQUFNRCxvQkFBb0IsTUFDcEI2QixpQkFBaUIsSUFsRE45QixlQWtEeUJDLG1CQUFtQkM7Z0JBRTdELE9BQU80QjtZQUNUOzs7WUFFT0MsS0FBQUE7bUJBQVAsU0FBT0Esc0JBQXNCOUIsaUJBQWlCO2dCQUM1QyxJQUFNQyxnQkFBZ0IsTUFDaEI0QixpQkFBaUIsSUF6RE45QixlQXlEeUJDLG1CQUFtQkM7Z0JBRTdELE9BQU80QjtZQUNUOzs7WUFFT0UsS0FBQUE7bUJBQVAsU0FBT0EsdUJBQXVCSixJQUFJLEVBQUVyQixXQUFXO2dCQUM3QyxJQUFRbUIsZ0JBQTZCRSxLQUE3QkYsZUFBZUMsWUFBY0MsS0FBZEQsV0FDakJKLHNCQUFzQkcsZUFDdEJELGtCQUFrQkUsV0FDbEJNLFFBQVExQixZQUFZMkIsUUFBUSxJQUM1QkMsU0FBUzVCLFlBQVk2QixTQUFTLElBQzlCbkMsb0JBQW9Cb0MsSUFBQUEsOENBQXdDLEVBQUNkLHFCQUFxQlUsT0FBT0UsU0FDekZqQyxnQkFBZ0JvQyxJQUFBQSxzQ0FBZ0MsRUFBQ2IsaUJBQWlCUSxPQUFPRSxTQUN6RUwsaUJBQWlCLElBdEVOOUIsZUFzRXlCQyxtQkFBbUJDO2dCQUU3RCxPQUFPNEI7WUFDVDs7O1dBekVtQjlCIn0=
|