occam-verify-cli 0.0.508 → 0.0.509

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.
Files changed (35) hide show
  1. package/lib/assertion/type.js +90 -0
  2. package/lib/combinator.js +7 -1
  3. package/lib/verify/assertion/type.js +19 -23
  4. package/lib/verify/conclusion.js +6 -5
  5. package/lib/verify/consequence.js +6 -5
  6. package/lib/verify/derivation.js +2 -2
  7. package/lib/verify/metastatement/qualified.js +19 -5
  8. package/lib/verify/metastatement/unqualified.js +16 -4
  9. package/lib/verify/metastatement.js +3 -3
  10. package/lib/verify/premise.js +6 -5
  11. package/lib/verify/ruleDerivation.js +2 -2
  12. package/lib/verify/statement/qualified.js +9 -8
  13. package/lib/verify/statement/unqualified.js +16 -4
  14. package/lib/verify/statement.js +106 -9
  15. package/lib/verify/supposition.js +11 -11
  16. package/package.json +3 -3
  17. package/src/assertion/type.js +46 -0
  18. package/src/combinator.js +4 -0
  19. package/src/verify/assertion/type.js +24 -25
  20. package/src/verify/conclusion.js +11 -5
  21. package/src/verify/consequence.js +10 -4
  22. package/src/verify/derivation.js +4 -2
  23. package/src/verify/metastatement/qualified.js +20 -6
  24. package/src/verify/metastatement/unqualified.js +13 -3
  25. package/src/verify/metastatement.js +2 -2
  26. package/src/verify/premise.js +10 -4
  27. package/src/verify/ruleDerivation.js +4 -2
  28. package/src/verify/statement/qualified.js +13 -11
  29. package/src/verify/statement/unqualified.js +13 -3
  30. package/src/verify/statement.js +175 -9
  31. package/src/verify/supposition.js +16 -12
  32. package/lib/verify/metaDerivation.js +0 -63
  33. package/lib/verify/metaproof.js +0 -32
  34. package/src/verify/metaDerivation.js +0 -75
  35. package/src/verify/metaproof.js +0 -35
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
 
3
3
  import Consequence from "../consequence";
4
+ import verifyUnqualifiedStatement from "./statement/unqualified";
4
5
 
5
6
  import { nodeQuery } from "../utilities/query";
6
7
  import { nodeAsString } from "../utilities/string";
7
8
 
8
- const statementNodeQuery = nodeQuery("/consequence/unqualifiedStatement!/statement!");
9
+ const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!"),
10
+ unqualifiedStatementNodeQuery = nodeQuery("/consequence/unqualifiedStatement!");
9
11
 
10
12
  export default function verifyConsequence(consequenceNode, consequences, proofContext) {
11
13
  let consequenceVerified = false;
@@ -16,10 +18,14 @@ export default function verifyConsequence(consequenceNode, consequences, proofCo
16
18
 
17
19
  proofContext.debug(`Verifying the ${consequenceString} consequence...`);
18
20
 
19
- const statementNode = statementNodeQuery(consequenceNode);
21
+ const derived = false,
22
+ assertions = [],
23
+ unqualifiedStatementNode = unqualifiedStatementNodeQuery(consequenceNode),
24
+ unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assertions, derived, proofContext);
20
25
 
21
- if (statementNode !== null) {
22
- const consequence = Consequence.fromStatementNode(statementNode);
26
+ if (unqualifiedStatementVerified) {
27
+ const statementNode = statementNodeQuery(unqualifiedStatementNode),
28
+ consequence = Consequence.fromStatementNode(statementNode);
23
29
 
24
30
  consequences.push(consequence);
25
31
 
@@ -123,8 +123,10 @@ function verifyChild(childNode, proofContext) {
123
123
  }
124
124
 
125
125
  case UNQUALIFIED_STATEMENT_RULE_NAME: {
126
- const unqualifiedStatementNode = childNode, ///
127
- unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, proofContext);
126
+ const derived = true,
127
+ assertions = [],
128
+ unqualifiedStatementNode = childNode, ///
129
+ unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assertions, derived, proofContext);
128
130
 
129
131
  if (unqualifiedStatementVerified) {
130
132
  const statementNode = statementNodeQuery(unqualifiedStatementNode),
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ import verifyMetastatement from "../../verify/metastatement";
4
+
3
5
  import { nodeAsString } from "../../utilities/string";
4
6
  import { nodeQuery, referenceNameFromReferenceNode } from "../../utilities/query";
5
7
 
@@ -18,14 +20,26 @@ export default function verifyQualifiedMetastatement(qualifiedMetastatementNode,
18
20
 
19
21
  metaproofContext.debug(`Verifying the ${metastatementString} qualified metastatement...`);
20
22
 
21
- const referenceNode = referenceNodeQuery(qualifiedMetastatementNode),
22
- referenceName = referenceNameFromReferenceNode(referenceNode),
23
- rule = metaproofContext.findRuleByReferenceName(referenceName);
23
+ let ruleMatchesStatement = true;
24
+
25
+ const referenceNode = referenceNodeQuery(qualifiedMetastatementNode);
26
+
27
+ if (referenceNode !== null) {
28
+ const referenceName = referenceNameFromReferenceNode(referenceNode),
29
+ rule = metaproofContext.findRuleByReferenceName(referenceName);
30
+
31
+ if (rule !== null) {
32
+ const ruleMatchesStatement = rule.matchMetastatement(metastatementNode, metaproofContext);
33
+
34
+ qualifiedMetastatementVerified = ruleMatchesStatement; ///
35
+ }
36
+ }
24
37
 
25
- if (rule !== null) {
26
- const ruleMatchesMetastatement = rule.matchMetastatement(metastatementNode, metaproofContext);
38
+ if (ruleMatchesStatement) {
39
+ const assertions = [],
40
+ metastatementVerified = verifyMetastatement(metastatementNode, assertions, metaproofContext);
27
41
 
28
- qualifiedMetastatementVerified = ruleMatchesMetastatement; ///
42
+ qualifiedMetastatementVerified = metastatementVerified; ///
29
43
  }
30
44
  }
31
45
 
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
 
3
+ import verifyMetastatement from "../metastatement";
4
+
3
5
  import { nodeQuery } from "../../utilities/query";
4
6
  import { nodeAsString } from "../../utilities/string";
5
7
 
6
8
  const metastatementNodeQuery = nodeQuery("/unqualifiedMetastatement/metastatement!");
7
9
 
8
- export default function verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, metaproofContext) {
10
+ export default function verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, assertions, derived, metaproofContext) {
9
11
  let unqualifiedMetastatementVerified = false;
10
12
 
11
13
  metaproofContext.begin(unqualifiedMetastatementNode);
@@ -17,9 +19,17 @@ export default function verifyUnqualifiedMetastatement(unqualifiedMetastatementN
17
19
 
18
20
  metaproofContext.debug(`Verifying the ${metastatementString} unqualified metastatement...`);
19
21
 
20
- const metaAssertionMatches = metaproofContext.matchMetastatement(metastatementNode);
22
+ let metastatementMatches = true;
23
+
24
+ if (derived) {
25
+ metastatementMatches = metaproofContext.matchMetastatement(metastatementNode);
26
+ }
27
+
28
+ if (metastatementMatches) {
29
+ const metastatementVerified = verifyMetastatement(metastatementNode, assertions, metaproofContext);
21
30
 
22
- unqualifiedMetastatementVerified = metaAssertionMatches; ///
31
+ unqualifiedMetastatementVerified = metastatementVerified; ///
32
+ }
23
33
  }
24
34
 
25
35
  unqualifiedMetastatementVerified ?
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
- export default function verifyMetastatement(metastatementNode, qualified, metaproofContext) {
4
- let metastatementVerified = true;
3
+ export default function verifyMetastatement(metastatementNode, assertions, metaproofContext) {
4
+ let metastatementVerified = true; ///
5
5
 
6
6
  metaproofContext.begin(metastatementNode);
7
7
 
@@ -2,11 +2,13 @@
2
2
 
3
3
  import Premise from "../premise";
4
4
  import MetaproofStep from "../step/metaproof";
5
+ import verifyUnqualifiedMetastatement from "../verify/metastatement/unqualified";
5
6
 
6
7
  import { nodeQuery } from "../utilities/query";
7
8
  import { nodeAsString } from "../utilities/string";
8
9
 
9
- const metastatementNodeQuery = nodeQuery("/premise/unqualifiedMetastatement!/metastatement!");
10
+ const metastatementNodeQuery = nodeQuery("/unqualifiedMetastatement/metastatement!"),
11
+ unqualifiedMetastatementNodeQuery = nodeQuery("/premise/unqualifiedMetastatement!");
10
12
 
11
13
  export default function verifyPremise(premiseNode, premises, metaproofContext) {
12
14
  let premiseVerified;
@@ -17,10 +19,14 @@ export default function verifyPremise(premiseNode, premises, metaproofContext) {
17
19
 
18
20
  metaproofContext.debug(`Verifying the ${premiseString} premise...`);
19
21
 
20
- const metastatementNode = metastatementNodeQuery(premiseNode);
22
+ const derived = false,
23
+ assertions = [],
24
+ unqualifiedMetastatementNode = unqualifiedMetastatementNodeQuery(premiseNode),
25
+ unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, assertions, derived, metaproofContext);
21
26
 
22
- if (metastatementNode !== null) {
23
- const metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode),
27
+ if (unqualifiedMetastatementVerified) {
28
+ const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode),
29
+ metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode),
24
30
  premise = Premise.fromMetastatementNode(metastatementNode);
25
31
 
26
32
  premises.push(premise);
@@ -123,8 +123,10 @@ function verifyChild(childNode, metaproofContext) {
123
123
  }
124
124
 
125
125
  case UNQUALIFIED_METASTATEMENT_RULE_NAME: {
126
- const unqualifiedMetastatementNode = childNode, ///
127
- unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, metaproofContext);
126
+ const derived = true,
127
+ assertions = [],
128
+ unqualifiedMetastatementNode = childNode, ///
129
+ unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, assertions, derived, metaproofContext);
128
130
 
129
131
  if (unqualifiedMetastatementVerified) {
130
132
  const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode),
@@ -5,8 +5,8 @@ import verifyStatement from "../../verify/statement";
5
5
  import { nodeAsString } from "../../utilities/string";
6
6
  import { nodeQuery, referenceNameFromReferenceNode } from "../../utilities/query";
7
7
 
8
- const statementNodeQuery = nodeQuery("/qualifiedStatement/statement!"),
9
- referenceNodeQuery = nodeQuery("/qualifiedStatement/qualification!/reference!");
8
+ const referenceNodeQuery = nodeQuery("/qualifiedStatement/qualification!/reference!"),
9
+ statementNodeQuery = nodeQuery("/qualifiedStatement/statement!");
10
10
 
11
11
  export default function verifyQualifiedStatement(qualifiedStatementNode, proofContext) {
12
12
  let qualifiedStatementVerified = false;
@@ -20,23 +20,25 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, proofCo
20
20
 
21
21
  proofContext.debug(`Verifying the ${statementString} qualified statement...`);
22
22
 
23
- const referenceNode = referenceNodeQuery(qualifiedStatementNode);
23
+ let ruleMatchesStatement = true;
24
24
 
25
- if (referenceNode === null) {
26
- const qualified = true,
27
- statementVerified = verifyStatement(statementNode, qualified, proofContext);
25
+ const referenceNode = referenceNodeQuery(qualifiedStatementNode);
28
26
 
29
- qualifiedStatementVerified = statementVerified; ///
30
- } else {
27
+ if (referenceNode !== null) {
31
28
  const referenceName = referenceNameFromReferenceNode(referenceNode),
32
29
  rule = proofContext.findRuleByReferenceName(referenceName);
33
30
 
34
31
  if (rule !== null) {
35
- const ruleMatchesStatement = rule.matchStatement(statementNode, proofContext);
36
-
37
- qualifiedStatementVerified = ruleMatchesStatement; ///
32
+ ruleMatchesStatement = rule.matchStatement(statementNode, proofContext);
38
33
  }
39
34
  }
35
+
36
+ if (ruleMatchesStatement) {
37
+ const assertions = [],
38
+ statementVerified = verifyStatement(statementNode, assertions, proofContext);
39
+
40
+ qualifiedStatementVerified = statementVerified; ///
41
+ }
40
42
  }
41
43
 
42
44
  qualifiedStatementVerified ?
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
 
3
+ import verifyStatement from "../statement";
4
+
3
5
  import { nodeQuery } from "../../utilities/query";
4
6
  import { nodeAsString } from "../../utilities/string";
5
7
 
6
8
  const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!");
7
9
 
8
- export default function verifyUnqualifiedStatement(unqualifiedStatementNode, proofContext) {
10
+ export default function verifyUnqualifiedStatement(unqualifiedStatementNode, assertions, derived, proofContext) {
9
11
  let unqualifiedStatementVerified = false;
10
12
 
11
13
  proofContext.begin(unqualifiedStatementNode);
@@ -17,9 +19,17 @@ export default function verifyUnqualifiedStatement(unqualifiedStatementNode, pro
17
19
 
18
20
  proofContext.debug(`Verifying the ${statementString} unqualified statement...`);
19
21
 
20
- const assertionMatches = proofContext.matchStatement(statementNode);
22
+ let statementMatches = true;
23
+
24
+ if (derived) {
25
+ statementMatches = proofContext.matchStatement(statementNode);
26
+ }
27
+
28
+ if (statementMatches) {
29
+ const statementVerified = verifyStatement(statementNode, assertions, proofContext);
21
30
 
22
- unqualifiedStatementVerified = assertionMatches; ///
31
+ unqualifiedStatementVerified = statementVerified; ///
32
+ }
23
33
  }
24
34
 
25
35
  unqualifiedStatementVerified ?
@@ -1,24 +1,33 @@
1
1
  "use strict";
2
2
 
3
+ import verifyTerm from "../verify/term";
3
4
  import verifyTypeAssertion from "../verify/assertion/type";
4
5
 
5
- import { nodeQuery } from "../utilities/query";
6
+ import { first } from "../utilities/array";
7
+ import { nodeAsString } from "../utilities/string";
8
+ import { ARGUMENT_RULE_NAME } from "../ruleNames";
9
+ import { nodeQuery, typeNameFromTypeNode } from "../utilities/query";
6
10
 
7
- const typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!");
11
+ const termNodeQuery = nodeQuery("/argument/term!"),
12
+ typeNodeQuery = nodeQuery("/argument/type!"),
13
+ typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!");
8
14
 
9
- export default function verifyStatement(statementNode, qualified, proofContext) {
15
+ export default function verifyStatement(statementNode, assertions, proofContext) {
10
16
  let statementVerified = false;
11
17
 
12
18
  proofContext.begin(statementNode);
13
19
 
14
- if (!statementVerified) {
15
- const typeAssertionNode = typeAssertionNodeQuery(statementNode);
20
+ const typeAssertionNode = typeAssertionNodeQuery(statementNode);
16
21
 
17
- if (typeAssertionNode !== null) {
18
- const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, qualified, proofContext);
22
+ if (typeAssertionNode !== null) {
23
+ const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assertions, proofContext);
19
24
 
20
- statementVerified = typeAssertionVerified; ///
21
- }
25
+ statementVerified = typeAssertionVerified; ///
26
+ } else {
27
+ const context = proofContext, ///
28
+ statementVerifiedAgainstCombinators = verifyStatementAgainstCombinators(statementNode, context);
29
+
30
+ statementVerified = statementVerifiedAgainstCombinators; ///
22
31
  }
23
32
 
24
33
  statementVerified ?
@@ -27,3 +36,160 @@ export default function verifyStatement(statementNode, qualified, proofContext)
27
36
 
28
37
  return statementVerified;
29
38
  }
39
+
40
+ function verifyStatementAgainstCombinators(statementNode, context) {
41
+ let statementVerifiedAgainstCombinators = false;
42
+
43
+ context.begin(statementNode);
44
+
45
+ const combinators = context.getCombinators(),
46
+ combinator = combinators.find((combinator) => {
47
+ const statementVerifiedAgainstCombinator = verifyStatementAgainstCombinator(statementNode, combinator, context);
48
+
49
+ if (statementVerifiedAgainstCombinator) {
50
+ return true;
51
+ }
52
+ }) || null;
53
+
54
+ if (combinator !== null) {
55
+ statementVerifiedAgainstCombinators = true;
56
+ }
57
+
58
+ statementVerifiedAgainstCombinators ?
59
+ context.complete(statementNode) :
60
+ context.halt(statementNode);
61
+
62
+ return statementVerifiedAgainstCombinators;
63
+ }
64
+
65
+ function verifyStatementAgainstCombinator(statementNode, combinator, context) {
66
+ const combinatorStatementNode = combinator.getStatementNode(),
67
+ node = statementNode, ///
68
+ combinatorNode = combinatorStatementNode, ///
69
+ nodeVerified = verifyNode(node, combinatorNode, context),
70
+ statementVerifiedAgainstCombinator = nodeVerified; ///
71
+
72
+ return statementVerifiedAgainstCombinator;
73
+ }
74
+
75
+ function verifyNode(node, combinatorNode, context) {
76
+ let nodeVerified;
77
+
78
+ const nodeTerminalNode = node.isTerminalNode(),
79
+ combinatorNodeTerminalNode = combinatorNode.isTerminalNode();
80
+
81
+ if (nodeTerminalNode === combinatorNodeTerminalNode) {
82
+ if (nodeTerminalNode) {
83
+ const terminalNode = node, ///
84
+ combinatorTerminalNode = combinatorNode, ///
85
+ terminalNodeVerified = verifyTerminalNode(terminalNode, combinatorTerminalNode, context);
86
+
87
+ nodeVerified = terminalNodeVerified; ///
88
+ } else {
89
+ const nonTerminalNode = node, ///
90
+ combinatorNonTerminalNode = combinatorNode, ///
91
+ nonTerminalNodeVerified = verifyNonTerminalNode(nonTerminalNode, combinatorNonTerminalNode, context);
92
+
93
+ nodeVerified = nonTerminalNodeVerified; ///
94
+ }
95
+ }
96
+
97
+ return nodeVerified;
98
+ }
99
+
100
+ function verifyNodes(nodes, combinatorNodes, context) {
101
+ let nodesVerified = false;
102
+
103
+ const nodesLength = nodes.length,
104
+ combinatorNodesLength = combinatorNodes.length;
105
+
106
+ if (nodesLength === combinatorNodesLength) {
107
+ nodesVerified = nodes.every((node, index) => {
108
+ const combinatorNode = combinatorNodes[index],
109
+ nodeVerified = verifyNode(node, combinatorNode, context);
110
+
111
+ if (nodeVerified) {
112
+ return true;
113
+ }
114
+ });
115
+ }
116
+
117
+ return nodesVerified;
118
+ }
119
+
120
+ function verifyTerminalNode(terminalNode, combinatorTerminalNode, context) {
121
+ let terminalNodeVerified = false;
122
+
123
+ const matches = terminalNode.match(combinatorTerminalNode);
124
+
125
+ if (matches) {
126
+ terminalNodeVerified = true;
127
+ }
128
+
129
+ return terminalNodeVerified;
130
+ }
131
+
132
+ function verifyNonTerminalNode(nonTerminalNode, combinatorNonTerminalNode, context) {
133
+ let nonTerminalNodeVerified = false;
134
+
135
+ const ruleName = nonTerminalNode.getRuleName(), ///
136
+ combinatorRuleName = combinatorNonTerminalNode.getRuleName(); ///
137
+
138
+ if (ruleName === combinatorRuleName) {
139
+ switch (ruleName) {
140
+ case ARGUMENT_RULE_NAME: {
141
+ const argumentNode = nonTerminalNode, ///
142
+ combinatorArgumentNode = combinatorNonTerminalNode, ///
143
+ argumentNodeVerified = verifyArgumentNode(argumentNode, combinatorArgumentNode, context);
144
+
145
+ nonTerminalNodeVerified = argumentNodeVerified; ///
146
+
147
+ break;
148
+ }
149
+
150
+ default: {
151
+ const childNodes = nonTerminalNode.getChildNodes(),
152
+ combinatorChildNodes = combinatorNonTerminalNode.getChildNodes(),
153
+ nodes = childNodes, ///
154
+ combinatorNodes = combinatorChildNodes, ///
155
+ nodesVerified = verifyNodes(nodes, combinatorNodes, context);
156
+
157
+ nonTerminalNodeVerified = nodesVerified; ///
158
+
159
+ break;
160
+ }
161
+ }
162
+ }
163
+
164
+ return nonTerminalNodeVerified;
165
+ }
166
+
167
+ function verifyArgumentNode(argumentNode, combinatorArgumentNode, context) {
168
+ let argumentNodeVerified = false;
169
+
170
+ const termNode = termNodeQuery(argumentNode);
171
+
172
+ if (termNode === null) {
173
+ const argumentString = nodeAsString(argumentNode);
174
+
175
+ context.error(`The ${argumentString} argument should be a term, not a type`);
176
+ } else {
177
+ const types = [],
178
+ termVerified = verifyTerm(termNode, types, context);
179
+
180
+ if (termVerified) {
181
+ const firstType = first(types),
182
+ termType = firstType, ///
183
+ typeNode = typeNodeQuery(combinatorArgumentNode),
184
+ typeName = typeNameFromTypeNode(typeNode),
185
+ type = context.findTypeByTypeName(typeName),
186
+ statementTypeEqualToOrSubTypeOfType = termType.isEqualToOrSubTypeOf(type);
187
+
188
+ if (statementTypeEqualToOrSubTypeOfType) {
189
+ argumentNodeVerified = true;
190
+ }
191
+ }
192
+ }
193
+
194
+ return argumentNodeVerified;
195
+ }
@@ -2,12 +2,13 @@
2
2
 
3
3
  import ProofStep from "../step/proof";
4
4
  import Supposition from "../supposition";
5
- import verifyStatement from "./statement";
5
+ import verifyUnqualifiedStatement from "./statement/unqualified";
6
6
 
7
7
  import { nodeQuery } from "../utilities/query";
8
8
  import { nodeAsString } from "../utilities/string";
9
9
 
10
- const statementNodeQuery = nodeQuery("/supposition/unqualifiedStatement!/statement!");
10
+ const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!"),
11
+ unqualifiedStatementNodeQuery = nodeQuery("/supposition/unqualifiedStatement!");
11
12
 
12
13
  export default function verifySupposition(suppositionNode, suppositions, proofContext) {
13
14
  let suppositionVerified;
@@ -18,20 +19,23 @@ export default function verifySupposition(suppositionNode, suppositions, proofCo
18
19
 
19
20
  proofContext.debug(`Verifying the ${suppositionString} supposition...`);
20
21
 
21
- const statementNode = statementNodeQuery(suppositionNode);
22
+ const derived = false,
23
+ assertions = [],
24
+ unqualifiedStatementNode = unqualifiedStatementNodeQuery(suppositionNode),
25
+ unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assertions, derived, proofContext);
22
26
 
23
- if (statementNode !== null) {
24
- const qualified = false,
25
- statementVerified = verifyStatement(statementNode, qualified, proofContext);
27
+ if (unqualifiedStatementVerified) {
28
+ const statementNode = statementNodeQuery(unqualifiedStatementNode),
29
+ proofStep = ProofStep.fromStatementNode(statementNode),
30
+ supposition = Supposition.fromStatementNode(statementNode);
26
31
 
27
- if (statementVerified) {
28
- const proofStep = ProofStep.fromStatementNode(statementNode),
29
- supposition = Supposition.fromStatementNode(statementNode);
32
+ suppositions.push(supposition);
30
33
 
31
- suppositions.push(supposition);
34
+ proofContext.addProofStep(proofStep);
32
35
 
33
- proofContext.addProofStep(proofStep);
34
- }
36
+ assertions.every((assertion) => {
37
+ assertion.assert(proofContext);
38
+ });
35
39
 
36
40
  suppositionVerified = true;
37
41
  }
@@ -1,63 +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 verifyMetaDerivation;
9
- }
10
- });
11
- var _metaproof = /*#__PURE__*/ _interopRequireDefault(require("../step/metaproof"));
12
- var _qualified = /*#__PURE__*/ _interopRequireDefault(require("../verify/metastatement/qualified"));
13
- var _unqualified = /*#__PURE__*/ _interopRequireDefault(require("../verify/metastatement/unqualified"));
14
- var _query = require("../utilities/query");
15
- var _ruleNames = require("../ruleNames");
16
- function _interopRequireDefault(obj) {
17
- return obj && obj.__esModule ? obj : {
18
- default: obj
19
- };
20
- }
21
- var childNodesQuery = (0, _query.nodesQuery)("/metaDerivation|metaSubDerivation/*"), metastatementNodeQuery = (0, _query.nodeQuery)("/qualifiedMetastatement|unqualifiedMetastatement/metastatement!");
22
- function verifyMetaDerivation(metaDerivationNode, metaproofContext) {
23
- var metaDerivationVerified;
24
- metaproofContext.begin(metaDerivationNode);
25
- var childNodes = childNodesQuery(metaDerivationNode);
26
- metaDerivationVerified = childNodes.every(function(childNode) {
27
- var childVerified = verifyChild(childNode, metaproofContext);
28
- if (childVerified) {
29
- return true;
30
- }
31
- });
32
- metaDerivationVerified ? metaproofContext.complete(metaDerivationNode) : metaproofContext.halt(metaDerivationNode);
33
- return metaDerivationVerified;
34
- }
35
- function verifyChild(childNode, metaproofContext) {
36
- var childVerified;
37
- var childNodeRuleName = childNode.getRuleName();
38
- switch(childNodeRuleName){
39
- case _ruleNames.QUALIFIED_METASTATEMENT_RULE_NAME:
40
- {
41
- var qualifiedMetastatementNode = childNode, qualifiedMetastatementVerified = (0, _qualified.default)(qualifiedMetastatementNode, metaproofContext);
42
- if (qualifiedMetastatementVerified) {
43
- var metastatementNode = metastatementNodeQuery(qualifiedMetastatementNode), metaproofStep = _metaproof.default.fromMetastatementNode(metastatementNode);
44
- metaproofContext.addMetaproofStep(metaproofStep);
45
- childVerified = qualifiedMetastatementVerified; ///
46
- }
47
- break;
48
- }
49
- case _ruleNames.UNQUALIFIED_METASTATEMENT_RULE_NAME:
50
- {
51
- var unqualifiedMetastatementNode = childNode, unqualifiedMetastatementVerified = (0, _unqualified.default)(unqualifiedMetastatementNode, metaproofContext);
52
- if (unqualifiedMetastatementVerified) {
53
- var metastatementNode1 = metastatementNodeQuery(unqualifiedMetastatementNode), metaproofStep1 = _metaproof.default.fromMetastatementNode(metastatementNode1);
54
- metaproofContext.addMetaproofStep(metaproofStep1);
55
- childVerified = true;
56
- }
57
- break;
58
- }
59
- }
60
- return childVerified;
61
- }
62
-
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvbWV0YURlcml2YXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNZXRhcHJvb2ZTdGVwIGZyb20gXCIuLi9zdGVwL21ldGFwcm9vZlwiO1xuaW1wb3J0IHZlcmlmeVF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgZnJvbSBcIi4uL3ZlcmlmeS9tZXRhc3RhdGVtZW50L3F1YWxpZmllZFwiO1xuaW1wb3J0IHZlcmlmeVVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCBmcm9tIFwiLi4vdmVyaWZ5L21ldGFzdGF0ZW1lbnQvdW5xdWFsaWZpZWRcIjtcblxuaW1wb3J0IHsgbm9kZVF1ZXJ5LCBub2Rlc1F1ZXJ5IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9xdWVyeVwiO1xuaW1wb3J0IHsgUVVBTElGSUVEX01FVEFTVEFURU1FTlRfUlVMRV9OQU1FLCBVTlFVQUxJRklFRF9NRVRBU1RBVEVNRU5UX1JVTEVfTkFNRSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgY2hpbGROb2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeShcIi9tZXRhRGVyaXZhdGlvbnxtZXRhU3ViRGVyaXZhdGlvbi8qXCIpLFxuICAgICAgbWV0YXN0YXRlbWVudE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9xdWFsaWZpZWRNZXRhc3RhdGVtZW50fHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudC9tZXRhc3RhdGVtZW50IVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5TWV0YURlcml2YXRpb24obWV0YURlcml2YXRpb25Ob2RlLCBtZXRhcHJvb2ZDb250ZXh0KSB7XG4gIGxldCBtZXRhRGVyaXZhdGlvblZlcmlmaWVkO1xuXG4gIG1ldGFwcm9vZkNvbnRleHQuYmVnaW4obWV0YURlcml2YXRpb25Ob2RlKTtcblxuICBjb25zdCBjaGlsZE5vZGVzID0gY2hpbGROb2Rlc1F1ZXJ5KG1ldGFEZXJpdmF0aW9uTm9kZSk7XG5cbiAgbWV0YURlcml2YXRpb25WZXJpZmllZCA9IGNoaWxkTm9kZXMuZXZlcnkoKGNoaWxkTm9kZSkgPT4ge1xuICAgIGNvbnN0IGNoaWxkVmVyaWZpZWQgPSB2ZXJpZnlDaGlsZChjaGlsZE5vZGUsIG1ldGFwcm9vZkNvbnRleHQpO1xuXG4gICAgaWYgKGNoaWxkVmVyaWZpZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgbWV0YURlcml2YXRpb25WZXJpZmllZCA/XG4gICAgbWV0YXByb29mQ29udGV4dC5jb21wbGV0ZShtZXRhRGVyaXZhdGlvbk5vZGUpIDpcbiAgICAgIG1ldGFwcm9vZkNvbnRleHQuaGFsdChtZXRhRGVyaXZhdGlvbk5vZGUpO1xuXG4gIHJldHVybiBtZXRhRGVyaXZhdGlvblZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlDaGlsZChjaGlsZE5vZGUsIG1ldGFwcm9vZkNvbnRleHQpIHtcbiAgbGV0IGNoaWxkVmVyaWZpZWQ7XG5cbiAgY29uc3QgY2hpbGROb2RlUnVsZU5hbWUgPSBjaGlsZE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICBzd2l0Y2ggKGNoaWxkTm9kZVJ1bGVOYW1lKSB7XG4gICAgY2FzZSBRVUFMSUZJRURfTUVUQVNUQVRFTUVOVF9SVUxFX05BTUU6IHtcbiAgICAgIGNvbnN0IHF1YWxpZmllZE1ldGFzdGF0ZW1lbnROb2RlID0gY2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgICBxdWFsaWZpZWRNZXRhc3RhdGVtZW50VmVyaWZpZWQgPSB2ZXJpZnlRdWFsaWZpZWRNZXRhc3RhdGVtZW50KHF1YWxpZmllZE1ldGFzdGF0ZW1lbnROb2RlLCBtZXRhcHJvb2ZDb250ZXh0KTtcblxuICAgICAgaWYgKHF1YWxpZmllZE1ldGFzdGF0ZW1lbnRWZXJpZmllZCkge1xuICAgICAgICBjb25zdCBtZXRhc3RhdGVtZW50Tm9kZSA9IG1ldGFzdGF0ZW1lbnROb2RlUXVlcnkocXVhbGlmaWVkTWV0YXN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgICAgICBtZXRhcHJvb2ZTdGVwID0gTWV0YXByb29mU3RlcC5mcm9tTWV0YXN0YXRlbWVudE5vZGUobWV0YXN0YXRlbWVudE5vZGUpO1xuXG4gICAgICAgIG1ldGFwcm9vZkNvbnRleHQuYWRkTWV0YXByb29mU3RlcChtZXRhcHJvb2ZTdGVwKTtcblxuICAgICAgICBjaGlsZFZlcmlmaWVkID0gcXVhbGlmaWVkTWV0YXN0YXRlbWVudFZlcmlmaWVkOyAvLy9cbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSBVTlFVQUxJRklFRF9NRVRBU1RBVEVNRU5UX1JVTEVfTkFNRToge1xuICAgICAgY29uc3QgdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50Tm9kZSA9IGNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50VmVyaWZpZWQgPSB2ZXJpZnlVbnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQodW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50Tm9kZSwgbWV0YXByb29mQ29udGV4dCk7XG5cbiAgICAgIGlmICh1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnRWZXJpZmllZCkge1xuICAgICAgICBjb25zdCBtZXRhc3RhdGVtZW50Tm9kZSA9IG1ldGFzdGF0ZW1lbnROb2RlUXVlcnkodW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgICAgIG1ldGFwcm9vZlN0ZXAgPSBNZXRhcHJvb2ZTdGVwLmZyb21NZXRhc3RhdGVtZW50Tm9kZShtZXRhc3RhdGVtZW50Tm9kZSk7XG5cbiAgICAgICAgbWV0YXByb29mQ29udGV4dC5hZGRNZXRhcHJvb2ZTdGVwKG1ldGFwcm9vZlN0ZXApO1xuXG4gICAgICAgIGNoaWxkVmVyaWZpZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hpbGRWZXJpZmllZDtcbn1cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlNZXRhRGVyaXZhdGlvbiIsImNoaWxkTm9kZXNRdWVyeSIsIm5vZGVzUXVlcnkiLCJtZXRhc3RhdGVtZW50Tm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwibWV0YURlcml2YXRpb25Ob2RlIiwibWV0YXByb29mQ29udGV4dCIsIm1ldGFEZXJpdmF0aW9uVmVyaWZpZWQiLCJiZWdpbiIsImNoaWxkTm9kZXMiLCJldmVyeSIsImNoaWxkTm9kZSIsImNoaWxkVmVyaWZpZWQiLCJ2ZXJpZnlDaGlsZCIsImNvbXBsZXRlIiwiaGFsdCIsImNoaWxkTm9kZVJ1bGVOYW1lIiwiZ2V0UnVsZU5hbWUiLCJRVUFMSUZJRURfTUVUQVNUQVRFTUVOVF9SVUxFX05BTUUiLCJxdWFsaWZpZWRNZXRhc3RhdGVtZW50Tm9kZSIsInF1YWxpZmllZE1ldGFzdGF0ZW1lbnRWZXJpZmllZCIsInZlcmlmeVF1YWxpZmllZE1ldGFzdGF0ZW1lbnQiLCJtZXRhc3RhdGVtZW50Tm9kZSIsIm1ldGFwcm9vZlN0ZXAiLCJNZXRhcHJvb2ZTdGVwIiwiZnJvbU1ldGFzdGF0ZW1lbnROb2RlIiwiYWRkTWV0YXByb29mU3RlcCIsIlVOUVVBTElGSUVEX01FVEFTVEFURU1FTlRfUlVMRV9OQU1FIiwidW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50Tm9kZSIsInVucXVhbGlmaWVkTWV0YXN0YXRlbWVudFZlcmlmaWVkIiwidmVyaWZ5VW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50Il0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFZQTs7O2VBQXdCQTs7OzhEQVZFOzhEQUNlO2dFQUNFO3FCQUVMO3lCQUNpRDs7Ozs7O0FBRXZGLElBQU1DLGtCQUFrQkMsSUFBQUEsaUJBQVUsRUFBQyx3Q0FDN0JDLHlCQUF5QkMsSUFBQUEsZ0JBQVMsRUFBQztBQUUxQixTQUFTSixxQkFBcUJLLGtCQUFrQixFQUFFQyxnQkFBZ0IsRUFBRTtJQUNqRixJQUFJQztJQUVKRCxpQkFBaUJFLEtBQUssQ0FBQ0g7SUFFdkIsSUFBTUksYUFBYVIsZ0JBQWdCSTtJQUVuQ0UseUJBQXlCRSxXQUFXQyxLQUFLLENBQUMsU0FBQ0MsV0FBYztRQUN2RCxJQUFNQyxnQkFBZ0JDLFlBQVlGLFdBQVdMO1FBRTdDLElBQUlNLGVBQWU7WUFDakIsT0FBTyxJQUFJO1FBQ2IsQ0FBQztJQUNIO0lBRUFMLHlCQUNFRCxpQkFBaUJRLFFBQVEsQ0FBQ1Qsc0JBQ3hCQyxpQkFBaUJTLElBQUksQ0FBQ1YsbUJBQW1CO0lBRTdDLE9BQU9FO0FBQ1Q7QUFFQSxTQUFTTSxZQUFZRixTQUFTLEVBQUVMLGdCQUFnQixFQUFFO0lBQ2hELElBQUlNO0lBRUosSUFBTUksb0JBQW9CTCxVQUFVTSxXQUFXO0lBRS9DLE9BQVFEO1FBQ04sS0FBS0UsNENBQWlDO1lBQUU7Z0JBQ3RDLElBQU1DLDZCQUE2QlIsV0FDN0JTLGlDQUFpQ0MsSUFBQUEsa0JBQTRCLEVBQUNGLDRCQUE0QmI7Z0JBRWhHLElBQUljLGdDQUFnQztvQkFDbEMsSUFBTUUsb0JBQW9CbkIsdUJBQXVCZ0IsNkJBQzNDSSxnQkFBZ0JDLGtCQUFhLENBQUNDLHFCQUFxQixDQUFDSDtvQkFFMURoQixpQkFBaUJvQixnQkFBZ0IsQ0FBQ0g7b0JBRWxDWCxnQkFBZ0JRLGdDQUFnQyxHQUFHO2dCQUNyRCxDQUFDO2dCQUVELEtBQU07WUFDUjtRQUVBLEtBQUtPLDhDQUFtQztZQUFFO2dCQUN4QyxJQUFNQywrQkFBK0JqQixXQUMvQmtCLG1DQUFtQ0MsSUFBQUEsb0JBQThCLEVBQUNGLDhCQUE4QnRCO2dCQUV0RyxJQUFJdUIsa0NBQWtDO29CQUNwQyxJQUFNUCxxQkFBb0JuQix1QkFBdUJ5QiwrQkFDM0NMLGlCQUFnQkMsa0JBQWEsQ0FBQ0MscUJBQXFCLENBQUNIO29CQUUxRGhCLGlCQUFpQm9CLGdCQUFnQixDQUFDSDtvQkFFbENYLGdCQUFnQixJQUFJO2dCQUN0QixDQUFDO2dCQUVELEtBQU07WUFDUjtJQUNGO0lBRUEsT0FBT0E7QUFDVCJ9
@@ -1,32 +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 verifyMetaproof;
9
- }
10
- });
11
- var _metaDerivation = /*#__PURE__*/ _interopRequireDefault(require("../verify/metaDerivation"));
12
- var _matcher = require("../matcher");
13
- var _query = require("../utilities/query");
14
- function _interopRequireDefault(obj) {
15
- return obj && obj.__esModule ? obj : {
16
- default: obj
17
- };
18
- }
19
- var metaDerivationNodeQuery = (0, _query.nodeQuery)("/metaproof/metaDerivation!");
20
- function verifyMetaproof(metaproofNode, conclusion, metaproofContext) {
21
- var metaproofVerified = false;
22
- metaproofContext.begin(metaproofNode);
23
- var metaDerivationNode = metaDerivationNodeQuery(metaproofNode), metaDerivationVerified = (0, _metaDerivation.default)(metaDerivationNode, metaproofContext);
24
- if (metaDerivationVerified) {
25
- var lastMetaproofStep = metaproofContext.getLastMetaproofStep(), metaproofStep = lastMetaproofStep, metastatementNode = metaproofStep.getMetastatementNode(), conclusionMetastatementNode = conclusion.getMetastatementNode(), nodeA = metastatementNode, nodeB = conclusionMetastatementNode, nodeMatches = _matcher.matcher.matchNode(nodeA, nodeB);
26
- metaproofVerified = nodeMatches; ///
27
- }
28
- metaproofVerified ? metaproofContext.complete(metaproofNode) : metaproofContext.complete(metaproofNode);
29
- return metaproofVerified;
30
- }
31
-
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvbWV0YXByb29mLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgdmVyaWZ5TWV0YURlcml2YXRpb24gZnJvbSBcIi4uL3ZlcmlmeS9tZXRhRGVyaXZhdGlvblwiO1xuXG5pbXBvcnQgeyBtYXRjaGVyIH0gZnJvbSBcIi4uL21hdGNoZXJcIjtcbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcblxuY29uc3QgbWV0YURlcml2YXRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvbWV0YXByb29mL21ldGFEZXJpdmF0aW9uIVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5TWV0YXByb29mKG1ldGFwcm9vZk5vZGUsIGNvbmNsdXNpb24sIG1ldGFwcm9vZkNvbnRleHQpIHtcbiAgbGV0IG1ldGFwcm9vZlZlcmlmaWVkID0gZmFsc2U7XG5cbiAgbWV0YXByb29mQ29udGV4dC5iZWdpbihtZXRhcHJvb2ZOb2RlKTtcblxuICBjb25zdCBtZXRhRGVyaXZhdGlvbk5vZGUgPSBtZXRhRGVyaXZhdGlvbk5vZGVRdWVyeShtZXRhcHJvb2ZOb2RlKSxcbiAgICAgICAgbWV0YURlcml2YXRpb25WZXJpZmllZCA9IHZlcmlmeU1ldGFEZXJpdmF0aW9uKG1ldGFEZXJpdmF0aW9uTm9kZSwgbWV0YXByb29mQ29udGV4dCk7XG5cbiAgaWYgKG1ldGFEZXJpdmF0aW9uVmVyaWZpZWQpIHtcbiAgICBjb25zdCBsYXN0TWV0YXByb29mU3RlcCA9IG1ldGFwcm9vZkNvbnRleHQuZ2V0TGFzdE1ldGFwcm9vZlN0ZXAoKSxcbiAgICAgICAgICBtZXRhcHJvb2ZTdGVwID0gbGFzdE1ldGFwcm9vZlN0ZXAsIC8vL1xuICAgICAgICAgIG1ldGFzdGF0ZW1lbnROb2RlID0gbWV0YXByb29mU3RlcC5nZXRNZXRhc3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICAgIGNvbmNsdXNpb25NZXRhc3RhdGVtZW50Tm9kZSA9IGNvbmNsdXNpb24uZ2V0TWV0YXN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgICBub2RlQSA9IG1ldGFzdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgbm9kZUIgPSBjb25jbHVzaW9uTWV0YXN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgICBub2RlTWF0Y2hlcyA9IG1hdGNoZXIubWF0Y2hOb2RlKG5vZGVBLCBub2RlQik7XG5cbiAgICBtZXRhcHJvb2ZWZXJpZmllZCA9IG5vZGVNYXRjaGVzOyAgLy8vXG4gIH1cblxuICBtZXRhcHJvb2ZWZXJpZmllZCA/XG4gICAgbWV0YXByb29mQ29udGV4dC5jb21wbGV0ZShtZXRhcHJvb2ZOb2RlKSA6XG4gICAgICBtZXRhcHJvb2ZDb250ZXh0LmNvbXBsZXRlKG1ldGFwcm9vZk5vZGUpO1xuXG4gIHJldHVybiBtZXRhcHJvb2ZWZXJpZmllZDtcbn1cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlNZXRhcHJvb2YiLCJtZXRhRGVyaXZhdGlvbk5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsIm1ldGFwcm9vZk5vZGUiLCJjb25jbHVzaW9uIiwibWV0YXByb29mQ29udGV4dCIsIm1ldGFwcm9vZlZlcmlmaWVkIiwiYmVnaW4iLCJtZXRhRGVyaXZhdGlvbk5vZGUiLCJtZXRhRGVyaXZhdGlvblZlcmlmaWVkIiwidmVyaWZ5TWV0YURlcml2YXRpb24iLCJsYXN0TWV0YXByb29mU3RlcCIsImdldExhc3RNZXRhcHJvb2ZTdGVwIiwibWV0YXByb29mU3RlcCIsIm1ldGFzdGF0ZW1lbnROb2RlIiwiZ2V0TWV0YXN0YXRlbWVudE5vZGUiLCJjb25jbHVzaW9uTWV0YXN0YXRlbWVudE5vZGUiLCJub2RlQSIsIm5vZGVCIiwibm9kZU1hdGNoZXMiLCJtYXRjaGVyIiwibWF0Y2hOb2RlIiwiY29tcGxldGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVNBOzs7ZUFBd0JBOzs7bUVBUFM7dUJBRVQ7cUJBQ0U7Ozs7OztBQUUxQixJQUFNQywwQkFBMEJDLElBQUFBLGdCQUFTLEVBQUM7QUFFM0IsU0FBU0YsZ0JBQWdCRyxhQUFhLEVBQUVDLFVBQVUsRUFBRUMsZ0JBQWdCLEVBQUU7SUFDbkYsSUFBSUMsb0JBQW9CLEtBQUs7SUFFN0JELGlCQUFpQkUsS0FBSyxDQUFDSjtJQUV2QixJQUFNSyxxQkFBcUJQLHdCQUF3QkUsZ0JBQzdDTSx5QkFBeUJDLElBQUFBLHVCQUFvQixFQUFDRixvQkFBb0JIO0lBRXhFLElBQUlJLHdCQUF3QjtRQUMxQixJQUFNRSxvQkFBb0JOLGlCQUFpQk8sb0JBQW9CLElBQ3pEQyxnQkFBZ0JGLG1CQUNoQkcsb0JBQW9CRCxjQUFjRSxvQkFBb0IsSUFDdERDLDhCQUE4QlosV0FBV1csb0JBQW9CLElBQzdERSxRQUFRSCxtQkFDUkksUUFBUUYsNkJBQ1JHLGNBQWNDLGdCQUFPLENBQUNDLFNBQVMsQ0FBQ0osT0FBT0M7UUFFN0NaLG9CQUFvQmEsYUFBYyxHQUFHO0lBQ3ZDLENBQUM7SUFFRGIsb0JBQ0VELGlCQUFpQmlCLFFBQVEsQ0FBQ25CLGlCQUN4QkUsaUJBQWlCaUIsUUFBUSxDQUFDbkIsY0FBYztJQUU1QyxPQUFPRztBQUNUIn0=