occam-verify-cli 0.0.535 → 0.0.537

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 (49) hide show
  1. package/lib/conclusion.js +3 -3
  2. package/lib/consequence.js +2 -2
  3. package/lib/constants.js +5 -1
  4. package/lib/context/metaproof.js +8 -1
  5. package/lib/context/proof.js +23 -1
  6. package/lib/equality.js +236 -69
  7. package/lib/log.js +6 -6
  8. package/lib/node/statement/equality.js +16 -0
  9. package/lib/premise.js +7 -7
  10. package/lib/supposition.js +4 -4
  11. package/lib/type.js +12 -5
  12. package/lib/utilities/array.js +2 -5
  13. package/lib/variable.js +3 -23
  14. package/lib/verifier/metastatementForMetavariable.js +16 -16
  15. package/lib/verifier/statementForMetavariable.js +17 -17
  16. package/lib/verifier/termForVariable.js +17 -17
  17. package/lib/verifier.js +65 -20
  18. package/lib/verify/assertion/type.js +22 -11
  19. package/lib/verify/metastatement/qualified.js +5 -1
  20. package/lib/verify/metastatement/unqualified.js +5 -1
  21. package/lib/verify/statement/qualified.js +5 -1
  22. package/lib/verify/statement/unqualified.js +5 -1
  23. package/lib/verify/statement.js +229 -21
  24. package/package.json +1 -1
  25. package/src/conclusion.js +4 -4
  26. package/src/consequence.js +2 -2
  27. package/src/constants.js +1 -0
  28. package/src/context/metaproof.js +12 -1
  29. package/src/context/proof.js +30 -1
  30. package/src/equality.js +159 -85
  31. package/src/log.js +7 -5
  32. package/src/node/statement/equality.js +9 -0
  33. package/src/premise.js +8 -8
  34. package/src/supposition.js +4 -4
  35. package/src/type.js +17 -8
  36. package/src/utilities/array.js +1 -1
  37. package/src/variable.js +2 -18
  38. package/src/verifier/metastatementForMetavariable.js +15 -15
  39. package/src/verifier/statementForMetavariable.js +16 -16
  40. package/src/verifier/termForVariable.js +16 -16
  41. package/src/verifier.js +18 -18
  42. package/src/verify/assertion/type.js +28 -13
  43. package/src/verify/metastatement/qualified.js +6 -0
  44. package/src/verify/metastatement/unqualified.js +6 -0
  45. package/src/verify/statement/qualified.js +6 -0
  46. package/src/verify/statement/unqualified.js +6 -0
  47. package/src/verify/statement.js +237 -36
  48. package/lib/verifier/statement.js +0 -199
  49. package/src/verifier/statement.js +0 -135
@@ -1,22 +1,28 @@
1
1
  "use strict";
2
2
 
3
- import Equality from "../equality";
3
+ import Verifier from "../verifier";
4
4
  import Variable from "../variable";
5
+ import Equality from "../equality";
5
6
  import Assignment from "../assignment";
6
7
  import verifyTerm from "../verify/term";
7
- import statementVerifier from "../verifier/statement";
8
8
  import equalityCombinator from "../ocmbinator/equality";
9
9
  import bracketedCombinator from "../ocmbinator/bracketed";
10
10
  import verifyTypeAssertion from "../verify/assertion/type";
11
11
 
12
- import { first } from "../utilities/array";
13
- import { nodeQuery } from "../utilities/query";
14
- import { nodeAsString } from "../utilities/string";
12
+ import { objectType } from "../type";
13
+ import { first, second } from "../utilities/array";
14
+ import { OBJECT_TYPE_NAME } from "../typeNames";
15
+ import { STATEMENT_META_TYPE } from "../metaTypes";
15
16
  import { verifyTermAsVariable } from "../verify/term";
17
+ import { nodeQuery, typeNameFromTypeNode } from "../utilities/query";
18
+ import { ARGUMENT_RULE_NAME, META_ARGUMENT_RULE_NAME } from "../ruleNames";
16
19
 
17
- const leftTermNodeQuery = nodeQuery("/statement/argument[0]/term!"),
18
- rightTermNodeQuery = nodeQuery("/statement/argument[1]/term!"),
19
- typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!");
20
+ const termNodeQuery = nodeQuery("/argument/term!"),
21
+ typeNodeQuery = nodeQuery("/argument/type!"),
22
+ metaTypeNodeQuery = nodeQuery("/metaArgument/metaType!"),
23
+ statementNodeQuery = nodeQuery("/metaArgument/statement!"),
24
+ typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!"),
25
+ metaTypeTerminalNodeQuery = nodeQuery("/metaType/@meta-type");
20
26
 
21
27
  export default function verifyStatement(statementNode, assignments, derived, context) {
22
28
  let statementVerified = false;
@@ -42,6 +48,121 @@ export default function verifyStatement(statementNode, assignments, derived, con
42
48
  return statementVerified;
43
49
  }
44
50
 
51
+ class StatementVerifier extends Verifier {
52
+ verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, context) {
53
+ let nonTerminalNodeVerified = false;
54
+
55
+ const nonTerminalNode = nonTerminalNodeA, ///
56
+ combinatorNonTerminalNode = nonTerminalNodeB; ///
57
+
58
+ const ruleName = nonTerminalNode.getRuleName(), ///
59
+ combinatorRuleName = combinatorNonTerminalNode.getRuleName(); ///
60
+
61
+ if (ruleName === combinatorRuleName) {
62
+ switch (ruleName) {
63
+ case ARGUMENT_RULE_NAME: {
64
+ const argumentNode = nonTerminalNode, ///
65
+ combinatorArgumentNode = combinatorNonTerminalNode, ///
66
+ argumentNodeVerified = this.verifyArgumentNode(argumentNode, combinatorArgumentNode, context);
67
+
68
+ nonTerminalNodeVerified = argumentNodeVerified; ///
69
+
70
+ break;
71
+ }
72
+
73
+ case META_ARGUMENT_RULE_NAME: {
74
+ const metaArgumentNode = nonTerminalNode, ///
75
+ combinatorMetaargumentNode = combinatorNonTerminalNode, ///
76
+ metaArgumentNodeVerified = this.verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, context);
77
+
78
+ nonTerminalNodeVerified = metaArgumentNodeVerified; ///
79
+
80
+ break;
81
+ }
82
+
83
+ default: {
84
+ const childNodes = nonTerminalNode.getChildNodes(),
85
+ combinatorChildNodes = combinatorNonTerminalNode.getChildNodes(),
86
+ nodesA = childNodes, ///
87
+ nodesB = combinatorChildNodes, ///
88
+ nodesVerified = this.verifyNodes(nodesA, nodesB, context);
89
+
90
+ nonTerminalNodeVerified = nodesVerified; ///
91
+
92
+ break;
93
+ }
94
+ }
95
+ }
96
+
97
+ return nonTerminalNodeVerified;
98
+ }
99
+
100
+ verifyArgumentNode(argumentNode, combinatorArgumentNode, context) {
101
+ let argumentNodeVerified = false;
102
+
103
+ const termNode = termNodeQuery(argumentNode);
104
+
105
+ if (termNode === null) {
106
+ const argumentString = context.nodeAsString(argumentNode);
107
+
108
+ context.error(`The ${argumentString} argument should be a term, not a type`, argumentNode);
109
+ } else {
110
+ const types = [],
111
+ termVerified = verifyTerm(termNode, types, context);
112
+
113
+ if (termVerified) {
114
+ const firstType = first(types),
115
+ termType = firstType, ///
116
+ typeNode = typeNodeQuery(combinatorArgumentNode),
117
+ typeName = typeNameFromTypeNode(typeNode),
118
+ type = (typeName === OBJECT_TYPE_NAME) ?
119
+ objectType : ///
120
+ context.findTypeByTypeName(typeName),
121
+ statementTypeEqualToOrSubTypeOfType = termType.isEqualToOrSubTypeOf(type);
122
+
123
+ if (statementTypeEqualToOrSubTypeOfType) {
124
+ argumentNodeVerified = true;
125
+ }
126
+ }
127
+ }
128
+
129
+ return argumentNodeVerified;
130
+ }
131
+
132
+ verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, context) {
133
+ let metaArgumentNodeVerified = false;
134
+
135
+ const statementNode = statementNodeQuery(metaArgumentNode),
136
+ combinatorMetaTYpeNode = metaTypeNodeQuery(combinatorMetaargumentNode);
137
+
138
+ if (statementNode === null) {
139
+ const metaArgumentString = context.nodeAsString(metaArgumentNode);
140
+
141
+ context.error(`Expected a statement but got a '${metaArgumentString}' meta-type.`, metaArgumentNode);
142
+ } else {
143
+ if (combinatorMetaTYpeNode === null) {
144
+ const combinatorMetaargumentString = context.nodeAsString(combinatorMetaargumentNode);
145
+
146
+ context.error(`Expected a meta-type but got a '${combinatorMetaargumentString}' statement.`, metaArgumentNode);
147
+ } else {
148
+ const combinatorMetaTypeTerminalNode = metaTypeTerminalNodeQuery(combinatorMetaTYpeNode),
149
+ content = combinatorMetaTypeTerminalNode.getContent(),
150
+ contentStatementMetaType = (content === STATEMENT_META_TYPE);
151
+
152
+ if (!contentStatementMetaType) {
153
+ context.error(`Expected the meta-type to be 'Statement' but got '${content}'.`, metaArgumentNode);
154
+ } else {
155
+ metaArgumentNodeVerified = true;
156
+ }
157
+ }
158
+ }
159
+
160
+ return metaArgumentNodeVerified;
161
+ }
162
+ }
163
+
164
+ const statementVerifier = new StatementVerifier();
165
+
45
166
  function verifyStatementAgainstCombinators(statementNode, context) {
46
167
  let statementVerifiedAgainstCombinators = false;
47
168
 
@@ -71,8 +192,7 @@ function verifyStatementAgainstCombinator(statementNode, combinator, context) {
71
192
  const combinatorStatementNode = combinator.getStatementNode(),
72
193
  nonTerminalNodeA = statementNode, ///
73
194
  nonTerminalNodeB = combinatorStatementNode, ///
74
- substitutions = null,
75
- nodeVerified = statementVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, context),
195
+ nodeVerified = statementVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, context),
76
196
  statementVerifiedAgainstCombinator = nodeVerified; ///
77
197
 
78
198
  return statementVerifiedAgainstCombinator;
@@ -95,47 +215,116 @@ function verifyStatementAsTypeAssertion(statementNode, assignments, derived, con
95
215
  function verifyStatementAsEquality(statementNode, assignments, derived, context) {
96
216
  let statementVerifiedAsEquality = false;
97
217
 
98
- const statementString = context.nodeAsString(statementNode);
99
-
100
218
  const combinator = equalityCombinator, ///
101
219
  statementVerifiedAgainstCombinator = verifyStatementAgainstCombinator(statementNode, combinator, context);
102
220
 
103
221
  if (statementVerifiedAgainstCombinator) {
104
- const leftTermNode = leftTermNodeQuery(statementNode),
105
- rightTermNode = rightTermNodeQuery(statementNode);
222
+ const equality = Equality.fromStatementNode(statementNode);
106
223
 
107
224
  if (derived) {
108
- const equality = Equality.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode),
109
- equalityEquates = equality.equate(context);
225
+ const equalities = context.getEqualities(),
226
+ equalityVerified = equality.verify(equalities, context);
110
227
 
111
- statementVerifiedAsEquality = equalityEquates; ///
228
+ statementVerifiedAsEquality = equalityVerified; ///
112
229
  } else {
113
- const types = [],
114
- variables = [],
115
- leftTermVerifiedAsVariable = verifyTermAsVariable(leftTermNode, variables, context);
116
-
117
- if (leftTermVerifiedAsVariable) {
118
- verifyTerm(rightTermNode, types, context);
230
+ const variables = [],
231
+ leftTermNode = equality.getLeftTermNode(),
232
+ rightTermNode = equality.getRightTermNode(),
233
+ leftTermVerifiedAsVariable = verifyTermAsVariable(leftTermNode, variables, context),
234
+ rightTermVerifiedAsVariable = verifyTermAsVariable(rightTermNode, variables, context);
119
235
 
236
+ if (leftTermVerifiedAsVariable && rightTermVerifiedAsVariable) {
120
237
  const firstVariable = first(variables),
238
+ secondVariable = second(variables),
121
239
  leftVariable = firstVariable, ///
122
- firstType = first(types),
123
- rightTermType = firstType, ///
240
+ rightVariable = secondVariable, ///
241
+ leftVariableName = leftVariable.getName(),
124
242
  leftVariableType = leftVariable.getType(),
243
+ rightVariableName = rightVariable.getName(),
244
+ rightVariableType = rightVariable.getType(),
245
+ leftVariableTypeEqualToOrSubTypeOfOfSuperTypeOfRightVariableType = leftVariableType.isEqualToOrSubTypeOfOfSuperTypeOf(rightVariableType);
246
+
247
+ if (!leftVariableTypeEqualToOrSubTypeOfOfSuperTypeOfRightVariableType) {
248
+ const leftVariableTypeName = leftVariableType.getName(),
249
+ rightVariableTypeName = rightVariableType.getName();
250
+
251
+ context.error(`The left '${leftVariableName}' variable's '${leftVariableTypeName}' type is not equal to, a sub-type of or a super-type of the right '${rightVariableName}' variable's '${rightVariableTypeName}' type.`, statementNode);
252
+ } else {
253
+ const leftVariableTypeSuperTypeOfRightVariableType = leftVariableType.isSuperTypeOf(rightVariableType),
254
+ rightVariableTypeSuperTypeOfLeftVariableType = rightVariableType.isSuperTypeOf(leftVariableType);
255
+
256
+ if (leftVariableTypeSuperTypeOfRightVariableType) {
257
+ const type = rightVariableType, ///
258
+ name = leftVariableName, ///
259
+ variable = Variable.fromTypeAndName(type, name),
260
+ assignment = Assignment.fromVariable(variable);
261
+
262
+ assignments.push(assignment);
263
+ }
264
+
265
+ if (rightVariableTypeSuperTypeOfLeftVariableType) {
266
+ const type = leftVariableType, ///
267
+ name = rightVariableName, ///
268
+ variable = Variable.fromTypeAndName(type, name),
269
+ assignment = Assignment.fromVariable(variable);
270
+
271
+ assignments.push(assignment);
272
+ }
273
+
274
+ statementVerifiedAsEquality = true;
275
+ }
276
+ } else if (leftTermVerifiedAsVariable) {
277
+ const types = [];
278
+
279
+ verifyTerm(rightTermNode, types, context);
280
+
281
+ const firstType = first(types),
282
+ firstVariable = first(variables),
283
+ leftVariable = firstVariable, ///
284
+ rightTermType = firstType, ///
125
285
  leftVariableName = leftVariable.getName(),
286
+ leftVariableType = leftVariable.getType(),
126
287
  leftVariableTypeEqualToOrSuperTypeOfRightTermType = leftVariableType.isEqualToOrSuperTypeOf(rightTermType);
127
288
 
128
289
  if (!leftVariableTypeEqualToOrSuperTypeOfRightTermType) {
129
- const rightTermString = nodeAsString(rightTermNode),
290
+ const rightTermString = context.nodeAsString(rightTermNode),
130
291
  rightTermTypeName = rightTermType.getName(),
131
292
  leftVariableTypeName = leftVariableType.getName();
132
293
 
133
294
  context.error(`The left '${leftVariableName}' variable's '${leftVariableTypeName}' type is not equal to or a super-type of the right '${rightTermString}' term's '${rightTermTypeName}' type.`, statementNode);
134
295
  } else {
135
- const type = leftVariableType, ///
296
+ const type = rightTermType, ///
136
297
  name = leftVariableName, ///
137
- termNode = rightTermNode, ///
138
- variable = Variable.fromTypeNameAndTermNode(type, name, termNode),
298
+ variable = Variable.fromTypeAndName(type, name),
299
+ assignment = Assignment.fromVariable(variable);
300
+
301
+ assignments.push(assignment);
302
+
303
+ statementVerifiedAsEquality = true;
304
+ }
305
+ } else if (rightTermVerifiedAsVariable) {
306
+ const types = [];
307
+
308
+ verifyTerm(leftTermNode, types, context);
309
+
310
+ const firstType = first(types),
311
+ firstVariable = first(variables),
312
+ leftTermType = firstType, ///
313
+ rightVariable = firstVariable, ///
314
+ rightVariableName = rightVariable.getName(),
315
+ rightVariableType = rightVariable.getType(),
316
+ rightVariableTypeEqualToOrSuperTypeOfRightTermType = rightVariableType.isEqualToOrSuperTypeOf(leftTermType);
317
+
318
+ if (!rightVariableTypeEqualToOrSuperTypeOfRightTermType) {
319
+ const leftTermString = context.nodeAsString(leftTermNode),
320
+ leftTermTypeName = leftTermType.getName(),
321
+ rightVariableTypeName = rightVariableType.getName();
322
+
323
+ context.error(`The right '${rightVariableName}' variable's '${rightVariableTypeName}' type is not equal to or a super-type of the left '${leftTermString}' term's '${leftTermTypeName}' type.`, statementNode);
324
+ } else {
325
+ const type = leftTermType, ///
326
+ name = rightVariableName, ///
327
+ variable = Variable.fromTypeAndName(type, name),
139
328
  assignment = Assignment.fromVariable(variable);
140
329
 
141
330
  assignments.push(assignment);
@@ -143,15 +332,25 @@ function verifyStatementAsEquality(statementNode, assignments, derived, context)
143
332
  statementVerifiedAsEquality = true;
144
333
  }
145
334
  } else {
146
- const rightTermVerifiedAsVariable = verifyTermAsVariable(rightTermNode, variables, context);
335
+ const types = [];
147
336
 
148
- if (rightTermVerifiedAsVariable) {
149
- const firstVariable = first(variables),
150
- rightVariable = firstVariable, ///
151
- leftTermString = nodeAsString(leftTermNode),
152
- rightVariableName = rightVariable.getName();
337
+ verifyTerm(leftTermNode, types, context);
153
338
 
154
- context.error(`The left '${leftTermString}' term cannot be equated with the right '${rightVariableName}' variable.`, statementNode);
339
+ verifyTerm(rightTermNode, types, context);
340
+
341
+ const firstType = first(types),
342
+ secondType = second(types),
343
+ leftTermType = firstType, ///
344
+ rightTermType = secondType, ///
345
+ leftTermTypeEqualToOrSubTypeOfOfSuperTypeOf = leftTermType.isEqualToOrSubTypeOfOfSuperTypeOf(rightTermType);
346
+
347
+ if (!leftTermTypeEqualToOrSubTypeOfOfSuperTypeOf) {
348
+ const leftTermString = context.nodeAsString(leftTermNode),
349
+ rightTermString = context.nodeAsString(rightTermNode),
350
+ leftTermTypeName = leftTermType.getName(),
351
+ rightTermTypeName = rightTermType.getName();
352
+
353
+ context.error(`The left '${leftTermString}' term's '${leftTermTypeName}' type is not equal to, a sub-type of or a super-type of the right '${rightTermString}' term's '${rightTermTypeName}' type.`, statementNode);
155
354
  } else {
156
355
  statementVerifiedAsEquality = true;
157
356
  }
@@ -160,6 +359,8 @@ function verifyStatementAsEquality(statementNode, assignments, derived, context)
160
359
  }
161
360
 
162
361
  if (statementVerifiedAsEquality) {
362
+ const statementString = context.nodeAsString(statementNode);
363
+
163
364
  context.info(`Verified the '${statementString}' statement as an equality.`, statementNode);
164
365
  }
165
366
 
@@ -1,199 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "default", {
6
- enumerable: true,
7
- get: function() {
8
- return _default;
9
- }
10
- });
11
- var _verifier = /*#__PURE__*/ _interopRequireDefault(require("../verifier"));
12
- var _term = /*#__PURE__*/ _interopRequireDefault(require("../verify/term"));
13
- var _array = require("../utilities/array");
14
- var _type = require("../type");
15
- var _typeNames = require("../typeNames");
16
- var _metaTypes = require("../metaTypes");
17
- var _query = require("../utilities/query");
18
- var _ruleNames = require("../ruleNames");
19
- function _assertThisInitialized(self) {
20
- if (self === void 0) {
21
- throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
22
- }
23
- return self;
24
- }
25
- function _classCallCheck(instance, Constructor) {
26
- if (!(instance instanceof Constructor)) {
27
- throw new TypeError("Cannot call a class as a function");
28
- }
29
- }
30
- function _defineProperties(target, props) {
31
- for(var i = 0; i < props.length; i++){
32
- var descriptor = props[i];
33
- descriptor.enumerable = descriptor.enumerable || false;
34
- descriptor.configurable = true;
35
- if ("value" in descriptor) descriptor.writable = true;
36
- Object.defineProperty(target, descriptor.key, descriptor);
37
- }
38
- }
39
- function _createClass(Constructor, protoProps, staticProps) {
40
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
41
- if (staticProps) _defineProperties(Constructor, staticProps);
42
- return Constructor;
43
- }
44
- function _getPrototypeOf(o) {
45
- _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
46
- return o.__proto__ || Object.getPrototypeOf(o);
47
- };
48
- return _getPrototypeOf(o);
49
- }
50
- function _inherits(subClass, superClass) {
51
- if (typeof superClass !== "function" && superClass !== null) {
52
- throw new TypeError("Super expression must either be null or a function");
53
- }
54
- subClass.prototype = Object.create(superClass && superClass.prototype, {
55
- constructor: {
56
- value: subClass,
57
- writable: true,
58
- configurable: true
59
- }
60
- });
61
- if (superClass) _setPrototypeOf(subClass, superClass);
62
- }
63
- function _interopRequireDefault(obj) {
64
- return obj && obj.__esModule ? obj : {
65
- default: obj
66
- };
67
- }
68
- function _possibleConstructorReturn(self, call) {
69
- if (call && (_typeof(call) === "object" || typeof call === "function")) {
70
- return call;
71
- }
72
- return _assertThisInitialized(self);
73
- }
74
- function _setPrototypeOf(o, p) {
75
- _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
76
- o.__proto__ = p;
77
- return o;
78
- };
79
- return _setPrototypeOf(o, p);
80
- }
81
- var _typeof = function(obj) {
82
- "@swc/helpers - typeof";
83
- return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
84
- };
85
- function _isNativeReflectConstruct() {
86
- if (typeof Reflect === "undefined" || !Reflect.construct) return false;
87
- if (Reflect.construct.sham) return false;
88
- if (typeof Proxy === "function") return true;
89
- try {
90
- Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
91
- return true;
92
- } catch (e) {
93
- return false;
94
- }
95
- }
96
- function _createSuper(Derived) {
97
- var hasNativeReflectConstruct = _isNativeReflectConstruct();
98
- return function _createSuperInternal() {
99
- var Super = _getPrototypeOf(Derived), result;
100
- if (hasNativeReflectConstruct) {
101
- var NewTarget = _getPrototypeOf(this).constructor;
102
- result = Reflect.construct(Super, arguments, NewTarget);
103
- } else {
104
- result = Super.apply(this, arguments);
105
- }
106
- return _possibleConstructorReturn(this, result);
107
- };
108
- }
109
- var termNodeQuery = (0, _query.nodeQuery)("/argument/term!"), typeNodeQuery = (0, _query.nodeQuery)("/argument/type!"), metaTypeNodeQuery = (0, _query.nodeQuery)("/metaArgument/metaType!"), statementNodeQuery = (0, _query.nodeQuery)("/metaArgument/statement!"), metaTypeTerminalNodeQuery = (0, _query.nodeQuery)("/metaType/@meta-type");
110
- var StatementVerifier = /*#__PURE__*/ function(Verifier) {
111
- _inherits(StatementVerifier, Verifier);
112
- var _super = _createSuper(StatementVerifier);
113
- function StatementVerifier() {
114
- _classCallCheck(this, StatementVerifier);
115
- return _super.apply(this, arguments);
116
- }
117
- _createClass(StatementVerifier, [
118
- {
119
- key: "verifyNonTerminalNode",
120
- value: function verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, context) {
121
- var nonTerminalNodeVerified = false;
122
- var nonTerminalNode = nonTerminalNodeA, combinatorNonTerminalNode = nonTerminalNodeB; ///
123
- var ruleName = nonTerminalNode.getRuleName(), combinatorRuleName = combinatorNonTerminalNode.getRuleName(); ///
124
- if (ruleName === combinatorRuleName) {
125
- switch(ruleName){
126
- case _ruleNames.ARGUMENT_RULE_NAME:
127
- {
128
- var argumentNode = nonTerminalNode, combinatorArgumentNode = combinatorNonTerminalNode, argumentNodeVerified = this.verifyArgumentNode(argumentNode, combinatorArgumentNode, substitutions, context);
129
- nonTerminalNodeVerified = argumentNodeVerified; ///
130
- break;
131
- }
132
- case _ruleNames.META_ARGUMENT_RULE_NAME:
133
- {
134
- var metaArgumentNode = nonTerminalNode, combinatorMetaargumentNode = combinatorNonTerminalNode, metaArgumentNodeVerified = this.verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, substitutions, context);
135
- nonTerminalNodeVerified = metaArgumentNodeVerified; ///
136
- break;
137
- }
138
- default:
139
- {
140
- var childNodes = nonTerminalNode.getChildNodes(), combinatorChildNodes = combinatorNonTerminalNode.getChildNodes(), nodesA = childNodes, nodesB = combinatorChildNodes, nodesVerified = this.verifyNodes(nodesA, nodesB, substitutions, context);
141
- nonTerminalNodeVerified = nodesVerified; ///
142
- break;
143
- }
144
- }
145
- }
146
- return nonTerminalNodeVerified;
147
- }
148
- },
149
- {
150
- key: "verifyArgumentNode",
151
- value: function verifyArgumentNode(argumentNode, combinatorArgumentNode, substitutions, context) {
152
- var argumentNodeVerified = false;
153
- var termNode = termNodeQuery(argumentNode);
154
- if (termNode === null) {
155
- var argumentString = context.nodeAsString(argumentNode);
156
- context.error("The ".concat(argumentString, " argument should be a term, not a type"), argumentNode);
157
- } else {
158
- var types = [], termVerified = (0, _term.default)(termNode, types, context);
159
- if (termVerified) {
160
- var firstType = (0, _array.first)(types), termType = firstType, typeNode = typeNodeQuery(combinatorArgumentNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), type = typeName === _typeNames.OBJECT_TYPE_NAME ? _type.objectType : context.findTypeByTypeName(typeName), statementTypeEqualToOrSubTypeOfType = termType.isEqualToOrSubTypeOf(type);
161
- if (statementTypeEqualToOrSubTypeOfType) {
162
- argumentNodeVerified = true;
163
- }
164
- }
165
- }
166
- return argumentNodeVerified;
167
- }
168
- },
169
- {
170
- key: "verifyMetaargumentNode",
171
- value: function verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, substitutions, context) {
172
- var metaArgumentNodeVerified = false;
173
- var statementNode = statementNodeQuery(metaArgumentNode), combinatorMetaTYpeNode = metaTypeNodeQuery(combinatorMetaargumentNode);
174
- if (statementNode === null) {
175
- var metaArgumentString = context.nodeAsString(metaArgumentNode);
176
- context.error("Expected a statement but got a '".concat(metaArgumentString, "' meta-type."), metaArgumentNode);
177
- } else {
178
- if (combinatorMetaTYpeNode === null) {
179
- var combinatorMetaargumentString = context.nodeAsString(combinatorMetaargumentNode);
180
- context.error("Expected a meta-type but got a '".concat(combinatorMetaargumentString, "' statement."), metaArgumentNode);
181
- } else {
182
- var combinatorMetaTypeTerminalNode = metaTypeTerminalNodeQuery(combinatorMetaTYpeNode), content = combinatorMetaTypeTerminalNode.getContent(), contentStatementMetaType = content === _metaTypes.STATEMENT_META_TYPE;
183
- if (!contentStatementMetaType) {
184
- context.error("Expected the meta-type to be 'Statement' but got '".concat(content, "'."), metaArgumentNode);
185
- } else {
186
- metaArgumentNodeVerified = true;
187
- }
188
- }
189
- }
190
- return metaArgumentNodeVerified;
191
- }
192
- }
193
- ]);
194
- return StatementVerifier;
195
- }(_verifier.default);
196
- var statementVerifier = new StatementVerifier();
197
- var _default = statementVerifier;
198
-
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZmllci9zdGF0ZW1lbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJpZmllciBmcm9tIFwiLi4vdmVyaWZpZXJcIjtcbmltcG9ydCB2ZXJpZnlUZXJtIGZyb20gXCIuLi92ZXJpZnkvdGVybVwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IG9iamVjdFR5cGUgfSBmcm9tIFwiLi4vdHlwZVwiO1xuaW1wb3J0IHsgT0JKRUNUX1RZUEVfTkFNRSB9IGZyb20gXCIuLi90eXBlTmFtZXNcIjtcbmltcG9ydCB7IFNUQVRFTUVOVF9NRVRBX1RZUEUgfSBmcm9tIFwiLi4vbWV0YVR5cGVzXCI7XG5pbXBvcnQgeyBub2RlUXVlcnksIHR5cGVOYW1lRnJvbVR5cGVOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9xdWVyeVwiO1xuaW1wb3J0IHsgQVJHVU1FTlRfUlVMRV9OQU1FLCBNRVRBX0FSR1VNRU5UX1JVTEVfTkFNRSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgdGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9hcmd1bWVudC90ZXJtIVwiKSxcbiAgICAgIHR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvYXJndW1lbnQvdHlwZSFcIiksXG4gICAgICBtZXRhVHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9tZXRhQXJndW1lbnQvbWV0YVR5cGUhXCIpLFxuICAgICAgc3RhdGVtZW50Tm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL21ldGFBcmd1bWVudC9zdGF0ZW1lbnQhXCIpLFxuICAgICAgbWV0YVR5cGVUZXJtaW5hbE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9tZXRhVHlwZS9AbWV0YS10eXBlXCIpO1xuXG5jbGFzcyBTdGF0ZW1lbnRWZXJpZmllciBleHRlbmRzIFZlcmlmaWVyIHtcbiAgdmVyaWZ5Tm9uVGVybWluYWxOb2RlKG5vblRlcm1pbmFsTm9kZUEsIG5vblRlcm1pbmFsTm9kZUIsIHN1YnN0aXR1dGlvbnMsIGNvbnRleHQpIHtcbiAgICBsZXQgbm9uVGVybWluYWxOb2RlVmVyaWZpZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vblRlcm1pbmFsTm9kZUEsIC8vL1xuICAgICAgICAgIGNvbWJpbmF0b3JOb25UZXJtaW5hbE5vZGUgPSBub25UZXJtaW5hbE5vZGVCOyAvLy9cblxuICAgIGNvbnN0IHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksIC8vL1xuICAgICAgICAgIGNvbWJpbmF0b3JSdWxlTmFtZSA9IGNvbWJpbmF0b3JOb25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTsgLy8vXG5cbiAgICBpZiAocnVsZU5hbWUgPT09IGNvbWJpbmF0b3JSdWxlTmFtZSkge1xuICAgICAgc3dpdGNoIChydWxlTmFtZSkge1xuICAgICAgICBjYXNlIEFSR1VNRU5UX1JVTEVfTkFNRToge1xuICAgICAgICAgIGNvbnN0IGFyZ3VtZW50Tm9kZSA9IG5vblRlcm1pbmFsTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgY29tYmluYXRvckFyZ3VtZW50Tm9kZSA9IGNvbWJpbmF0b3JOb25UZXJtaW5hbE5vZGUsIC8vL1xuICAgICAgICAgICAgICAgIGFyZ3VtZW50Tm9kZVZlcmlmaWVkID0gdGhpcy52ZXJpZnlBcmd1bWVudE5vZGUoYXJndW1lbnROb2RlLCBjb21iaW5hdG9yQXJndW1lbnROb2RlLCBzdWJzdGl0dXRpb25zLCBjb250ZXh0KTtcblxuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVZlcmlmaWVkID0gYXJndW1lbnROb2RlVmVyaWZpZWQ7IC8vL1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIE1FVEFfQVJHVU1FTlRfUlVMRV9OQU1FOiB7XG4gICAgICAgICAgY29uc3QgbWV0YUFyZ3VtZW50Tm9kZSA9IG5vblRlcm1pbmFsTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgY29tYmluYXRvck1ldGFhcmd1bWVudE5vZGUgPSBjb21iaW5hdG9yTm9uVGVybWluYWxOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICBtZXRhQXJndW1lbnROb2RlVmVyaWZpZWQgPSB0aGlzLnZlcmlmeU1ldGFhcmd1bWVudE5vZGUobWV0YUFyZ3VtZW50Tm9kZSwgY29tYmluYXRvck1ldGFhcmd1bWVudE5vZGUsIHN1YnN0aXR1dGlvbnMsIGNvbnRleHQpO1xuXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlVmVyaWZpZWQgPSBtZXRhQXJndW1lbnROb2RlVmVyaWZpZWQ7IC8vL1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgICAgICAgY29tYmluYXRvckNoaWxkTm9kZXMgPSBjb21iaW5hdG9yTm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICAgICAgICBub2Rlc0EgPSBjaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICAgICAgICBub2Rlc0IgPSBjb21iaW5hdG9yQ2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgICAgICAgbm9kZXNWZXJpZmllZCA9IHRoaXMudmVyaWZ5Tm9kZXMobm9kZXNBLCBub2Rlc0IsIHN1YnN0aXR1dGlvbnMsIGNvbnRleHQpO1xuXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlVmVyaWZpZWQgPSBub2Rlc1ZlcmlmaWVkOyAvLy9cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZVZlcmlmaWVkO1xuICB9XG5cbiAgdmVyaWZ5QXJndW1lbnROb2RlKGFyZ3VtZW50Tm9kZSwgY29tYmluYXRvckFyZ3VtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgY29udGV4dCkge1xuICAgIGxldCBhcmd1bWVudE5vZGVWZXJpZmllZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgdGVybU5vZGUgPSB0ZXJtTm9kZVF1ZXJ5KGFyZ3VtZW50Tm9kZSk7XG5cbiAgICBpZiAodGVybU5vZGUgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGFyZ3VtZW50U3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcoYXJndW1lbnROb2RlKTtcblxuICAgICAgY29udGV4dC5lcnJvcihgVGhlICR7YXJndW1lbnRTdHJpbmd9IGFyZ3VtZW50IHNob3VsZCBiZSBhIHRlcm0sIG5vdCBhIHR5cGVgLCBhcmd1bWVudE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0eXBlcyA9IFtdLFxuICAgICAgICAgICAgdGVybVZlcmlmaWVkID0gdmVyaWZ5VGVybSh0ZXJtTm9kZSwgdHlwZXMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAodGVybVZlcmlmaWVkKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0VHlwZSA9IGZpcnN0KHR5cGVzKSxcbiAgICAgICAgICAgICAgdGVybVR5cGUgPSBmaXJzdFR5cGUsIC8vL1xuICAgICAgICAgICAgICB0eXBlTm9kZSA9IHR5cGVOb2RlUXVlcnkoY29tYmluYXRvckFyZ3VtZW50Tm9kZSksXG4gICAgICAgICAgICAgIHR5cGVOYW1lID0gdHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUpLFxuICAgICAgICAgICAgICB0eXBlID0gKHR5cGVOYW1lID09PSBPQkpFQ1RfVFlQRV9OQU1FKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RUeXBlIDogIC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmZpbmRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSksXG4gICAgICAgICAgICAgIHN0YXRlbWVudFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlID0gdGVybVR5cGUuaXNFcXVhbFRvT3JTdWJUeXBlT2YodHlwZSk7XG5cbiAgICAgICAgaWYgKHN0YXRlbWVudFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlKSB7XG4gICAgICAgICAgYXJndW1lbnROb2RlVmVyaWZpZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyZ3VtZW50Tm9kZVZlcmlmaWVkO1xuICB9XG5cbiAgdmVyaWZ5TWV0YWFyZ3VtZW50Tm9kZShtZXRhQXJndW1lbnROb2RlLCBjb21iaW5hdG9yTWV0YWFyZ3VtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgY29udGV4dCkge1xuICAgIGxldCBtZXRhQXJndW1lbnROb2RlVmVyaWZpZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlUXVlcnkobWV0YUFyZ3VtZW50Tm9kZSksXG4gICAgICAgICAgY29tYmluYXRvck1ldGFUWXBlTm9kZSA9IG1ldGFUeXBlTm9kZVF1ZXJ5KGNvbWJpbmF0b3JNZXRhYXJndW1lbnROb2RlKTtcblxuICAgIGlmIChzdGF0ZW1lbnROb2RlID09PSBudWxsKSB7XG4gICAgICBjb25zdCBtZXRhQXJndW1lbnRTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhQXJndW1lbnROb2RlKTtcblxuICAgICAgY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYSBzdGF0ZW1lbnQgYnV0IGdvdCBhICcke21ldGFBcmd1bWVudFN0cmluZ30nIG1ldGEtdHlwZS5gLCBtZXRhQXJndW1lbnROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvbWJpbmF0b3JNZXRhVFlwZU5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgY29tYmluYXRvck1ldGFhcmd1bWVudFN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKGNvbWJpbmF0b3JNZXRhYXJndW1lbnROb2RlKTtcblxuICAgICAgICBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhIG1ldGEtdHlwZSBidXQgZ290IGEgJyR7Y29tYmluYXRvck1ldGFhcmd1bWVudFN0cmluZ30nIHN0YXRlbWVudC5gLCBtZXRhQXJndW1lbnROb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNvbWJpbmF0b3JNZXRhVHlwZVRlcm1pbmFsTm9kZSA9IG1ldGFUeXBlVGVybWluYWxOb2RlUXVlcnkoY29tYmluYXRvck1ldGFUWXBlTm9kZSksXG4gICAgICAgICAgICAgIGNvbnRlbnQgPSBjb21iaW5hdG9yTWV0YVR5cGVUZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgICAgICBjb250ZW50U3RhdGVtZW50TWV0YVR5cGUgPSAoY29udGVudCA9PT0gU1RBVEVNRU5UX01FVEFfVFlQRSk7XG5cbiAgICAgICAgaWYgKCFjb250ZW50U3RhdGVtZW50TWV0YVR5cGUpIHtcbiAgICAgICAgICBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCB0aGUgbWV0YS10eXBlIHRvIGJlICdTdGF0ZW1lbnQnIGJ1dCBnb3QgJyR7Y29udGVudH0nLmAsIG1ldGFBcmd1bWVudE5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1ldGFBcmd1bWVudE5vZGVWZXJpZmllZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YUFyZ3VtZW50Tm9kZVZlcmlmaWVkO1xuICB9XG59XG5cbmNvbnN0IHN0YXRlbWVudFZlcmlmaWVyID0gbmV3IFN0YXRlbWVudFZlcmlmaWVyKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHN0YXRlbWVudFZlcmlmaWVyO1xuXG4iXSwibmFtZXMiOlsidGVybU5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInR5cGVOb2RlUXVlcnkiLCJtZXRhVHlwZU5vZGVRdWVyeSIsInN0YXRlbWVudE5vZGVRdWVyeSIsIm1ldGFUeXBlVGVybWluYWxOb2RlUXVlcnkiLCJTdGF0ZW1lbnRWZXJpZmllciIsInZlcmlmeU5vblRlcm1pbmFsTm9kZSIsIm5vblRlcm1pbmFsTm9kZUEiLCJub25UZXJtaW5hbE5vZGVCIiwic3Vic3RpdHV0aW9ucyIsImNvbnRleHQiLCJub25UZXJtaW5hbE5vZGVWZXJpZmllZCIsIm5vblRlcm1pbmFsTm9kZSIsImNvbWJpbmF0b3JOb25UZXJtaW5hbE5vZGUiLCJydWxlTmFtZSIsImdldFJ1bGVOYW1lIiwiY29tYmluYXRvclJ1bGVOYW1lIiwiQVJHVU1FTlRfUlVMRV9OQU1FIiwiYXJndW1lbnROb2RlIiwiY29tYmluYXRvckFyZ3VtZW50Tm9kZSIsImFyZ3VtZW50Tm9kZVZlcmlmaWVkIiwidmVyaWZ5QXJndW1lbnROb2RlIiwiTUVUQV9BUkdVTUVOVF9SVUxFX05BTUUiLCJtZXRhQXJndW1lbnROb2RlIiwiY29tYmluYXRvck1ldGFhcmd1bWVudE5vZGUiLCJtZXRhQXJndW1lbnROb2RlVmVyaWZpZWQiLCJ2ZXJpZnlNZXRhYXJndW1lbnROb2RlIiwiY2hpbGROb2RlcyIsImdldENoaWxkTm9kZXMiLCJjb21iaW5hdG9yQ2hpbGROb2RlcyIsIm5vZGVzQSIsIm5vZGVzQiIsIm5vZGVzVmVyaWZpZWQiLCJ2ZXJpZnlOb2RlcyIsInRlcm1Ob2RlIiwiYXJndW1lbnRTdHJpbmciLCJub2RlQXNTdHJpbmciLCJlcnJvciIsInR5cGVzIiwidGVybVZlcmlmaWVkIiwidmVyaWZ5VGVybSIsImZpcnN0VHlwZSIsImZpcnN0IiwidGVybVR5cGUiLCJ0eXBlTm9kZSIsInR5cGVOYW1lIiwidHlwZU5hbWVGcm9tVHlwZU5vZGUiLCJ0eXBlIiwiT0JKRUNUX1RZUEVfTkFNRSIsIm9iamVjdFR5cGUiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJzdGF0ZW1lbnRUeXBlRXF1YWxUb09yU3ViVHlwZU9mVHlwZSIsImlzRXF1YWxUb09yU3ViVHlwZU9mIiwic3RhdGVtZW50Tm9kZSIsImNvbWJpbmF0b3JNZXRhVFlwZU5vZGUiLCJtZXRhQXJndW1lbnRTdHJpbmciLCJjb21iaW5hdG9yTWV0YWFyZ3VtZW50U3RyaW5nIiwiY29tYmluYXRvck1ldGFUeXBlVGVybWluYWxOb2RlIiwiY29udGVudCIsImdldENvbnRlbnQiLCJjb250ZW50U3RhdGVtZW50TWV0YVR5cGUiLCJTVEFURU1FTlRfTUVUQV9UWVBFIiwiVmVyaWZpZXIiLCJzdGF0ZW1lbnRWZXJpZmllciJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBcUlBOzs7ZUFBQTs7OzZEQW5JcUI7eURBQ0U7cUJBRUQ7b0JBQ0s7eUJBQ007eUJBQ0c7cUJBQ1k7eUJBQ1k7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFNUQsSUFBTUEsZ0JBQWdCQyxJQUFBQSxnQkFBUyxFQUFDLG9CQUMxQkMsZ0JBQWdCRCxJQUFBQSxnQkFBUyxFQUFDLG9CQUMxQkUsb0JBQW9CRixJQUFBQSxnQkFBUyxFQUFDLDRCQUM5QkcscUJBQXFCSCxJQUFBQSxnQkFBUyxFQUFDLDZCQUMvQkksNEJBQTRCSixJQUFBQSxnQkFBUyxFQUFDO0FBRTVDLElBQUEsQUFBTUssa0NBaUhILEFBakhIO2NBQU1BOzhCQUFBQTthQUFBQTs4QkFBQUE7OztpQkFBQUE7O1lBQ0pDLEtBQUFBO21CQUFBQSxTQUFBQSxzQkFBc0JDLGdCQUFnQixFQUFFQyxnQkFBZ0IsRUFBRUMsYUFBYSxFQUFFQyxPQUFPLEVBQUU7Z0JBQ2hGLElBQUlDLDBCQUEwQixLQUFLO2dCQUVuQyxJQUFNQyxrQkFBa0JMLGtCQUNsQk0sNEJBQTRCTCxrQkFBa0IsR0FBRztnQkFFdkQsSUFBTU0sV0FBV0YsZ0JBQWdCRyxXQUFXLElBQ3RDQyxxQkFBcUJILDBCQUEwQkUsV0FBVyxJQUFJLEdBQUc7Z0JBRXZFLElBQUlELGFBQWFFLG9CQUFvQjtvQkFDbkMsT0FBUUY7d0JBQ04sS0FBS0csNkJBQWtCOzRCQUFFO2dDQUN2QixJQUFNQyxlQUFlTixpQkFDZk8seUJBQXlCTiwyQkFDekJPLHVCQUF1QixJQUFJLENBQUNDLGtCQUFrQixDQUFDSCxjQUFj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