occam-verify-cli 1.0.662 → 1.0.664

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 (211) hide show
  1. package/.swcrc +3 -0
  2. package/lib/abbreviations.js +10 -10
  3. package/lib/action/help.js +27 -2
  4. package/lib/action/verify.js +33 -205
  5. package/lib/action/version.js +6 -6
  6. package/lib/commands.js +4 -4
  7. package/lib/constants.js +16 -16
  8. package/lib/context/ephemeral.js +337 -540
  9. package/lib/context/file/nominal.js +545 -1040
  10. package/lib/context/liminal.js +159 -325
  11. package/lib/context/literal.js +34 -138
  12. package/lib/context/nominal.js +29 -124
  13. package/lib/context/scoped.js +163 -325
  14. package/lib/context/synthetic.js +31 -126
  15. package/lib/context.js +230 -482
  16. package/lib/defaults.js +8 -8
  17. package/lib/element/assertion/contained.js +159 -299
  18. package/lib/element/assertion/defined.js +145 -279
  19. package/lib/element/assertion/property.js +132 -266
  20. package/lib/element/assertion/satisfies.js +108 -239
  21. package/lib/element/assertion/subproof.js +88 -207
  22. package/lib/element/assertion/type.js +132 -262
  23. package/lib/element/assertion.js +17 -156
  24. package/lib/element/assumption.js +187 -386
  25. package/lib/element/combinator/bracketed.js +19 -142
  26. package/lib/element/combinator.js +65 -228
  27. package/lib/element/conclusion.js +72 -370
  28. package/lib/element/constructor/bracketed.js +34 -157
  29. package/lib/element/constructor.js +81 -253
  30. package/lib/element/declaration/combinator.js +41 -286
  31. package/lib/element/declaration/complexType.js +184 -452
  32. package/lib/element/declaration/constructor.js +69 -323
  33. package/lib/element/declaration/metavariable.js +70 -317
  34. package/lib/element/declaration/simpleType.js +117 -378
  35. package/lib/element/declaration/typePrefix.js +54 -299
  36. package/lib/element/declaration/variable.js +74 -328
  37. package/lib/element/declaration.js +3 -114
  38. package/lib/element/deduction.js +76 -378
  39. package/lib/element/derivation.js +31 -340
  40. package/lib/element/equality.js +152 -347
  41. package/lib/element/equivalence.js +160 -385
  42. package/lib/element/equivalences.js +132 -356
  43. package/lib/element/error.js +16 -290
  44. package/lib/element/frame.js +210 -418
  45. package/lib/element/hypothesis.js +56 -354
  46. package/lib/element/judgement.js +120 -305
  47. package/lib/element/label.js +62 -236
  48. package/lib/element/metaType.js +35 -200
  49. package/lib/element/metavariable.js +249 -459
  50. package/lib/element/parameter.js +39 -202
  51. package/lib/element/procedureCall.js +74 -381
  52. package/lib/element/procedureReference.js +27 -186
  53. package/lib/element/proof.js +38 -349
  54. package/lib/element/proofAssertion/premise.js +174 -466
  55. package/lib/element/proofAssertion/step.js +144 -495
  56. package/lib/element/proofAssertion/supposition.js +170 -466
  57. package/lib/element/proofAssertion.js +47 -195
  58. package/lib/element/property.js +36 -201
  59. package/lib/element/propertyRelation.js +62 -223
  60. package/lib/element/reference.js +173 -378
  61. package/lib/element/rule.js +178 -673
  62. package/lib/element/section.js +47 -356
  63. package/lib/element/signature.js +96 -264
  64. package/lib/element/statement.js +195 -395
  65. package/lib/element/subDerivation.js +32 -341
  66. package/lib/element/subproof.js +73 -448
  67. package/lib/element/substitution/frame.js +114 -257
  68. package/lib/element/substitution/reference.js +108 -248
  69. package/lib/element/substitution/statement.js +223 -397
  70. package/lib/element/substitution/term.js +123 -266
  71. package/lib/element/substitution.js +97 -296
  72. package/lib/element/term.js +139 -339
  73. package/lib/element/topLevelAssertion/axiom.js +153 -459
  74. package/lib/element/topLevelAssertion/conjecture.js +24 -295
  75. package/lib/element/topLevelAssertion/lemma.js +22 -289
  76. package/lib/element/topLevelAssertion/theorem.js +24 -295
  77. package/lib/element/topLevelAssertion.js +218 -718
  78. package/lib/element/topLevelMetaAssertion/metaLemma.js +24 -290
  79. package/lib/element/topLevelMetaAssertion/metatheorem.js +24 -290
  80. package/lib/element/topLevelMetaAssertion.js +109 -509
  81. package/lib/element/type.js +198 -435
  82. package/lib/element/typePrefix.js +27 -186
  83. package/lib/element/variable.js +119 -308
  84. package/lib/elements.js +4 -4
  85. package/lib/index.js +4 -4
  86. package/lib/main.js +18 -18
  87. package/lib/messages.js +2 -2
  88. package/lib/metaTypeNames.js +4 -4
  89. package/lib/metaTypes.js +10 -10
  90. package/lib/node/argument.js +15 -109
  91. package/lib/node/assertion/contained.js +33 -130
  92. package/lib/node/assertion/defined.js +29 -123
  93. package/lib/node/assertion/property.js +18 -112
  94. package/lib/node/assertion/satisfies.js +14 -105
  95. package/lib/node/assertion/subproof.js +10 -98
  96. package/lib/node/assertion/type.js +14 -105
  97. package/lib/node/assertion.js +5 -89
  98. package/lib/node/assumption.js +12 -103
  99. package/lib/node/body/axiom.js +5 -89
  100. package/lib/node/body/conjecture.js +5 -89
  101. package/lib/node/body/lemma.js +5 -89
  102. package/lib/node/body/metaLemma.js +5 -89
  103. package/lib/node/body/metatheorem.js +5 -89
  104. package/lib/node/body/rule.js +26 -126
  105. package/lib/node/body/theorem.js +5 -89
  106. package/lib/node/body.js +15 -109
  107. package/lib/node/combinator.js +9 -97
  108. package/lib/node/conclusion.js +12 -103
  109. package/lib/node/constructor.js +9 -97
  110. package/lib/node/declaration/combinator.js +10 -98
  111. package/lib/node/declaration/complexType.js +53 -162
  112. package/lib/node/declaration/constructor.js +29 -123
  113. package/lib/node/declaration/metavariable.js +18 -112
  114. package/lib/node/declaration/property.js +26 -123
  115. package/lib/node/declaration/simpleType.js +52 -158
  116. package/lib/node/declaration/typePrefix.js +14 -105
  117. package/lib/node/declaration/variable.js +33 -130
  118. package/lib/node/declaration.js +5 -89
  119. package/lib/node/deduction.js +12 -103
  120. package/lib/node/derivation.js +12 -125
  121. package/lib/node/document.js +5 -89
  122. package/lib/node/equality.js +17 -111
  123. package/lib/node/equivalence.js +9 -97
  124. package/lib/node/equivalences.js +5 -89
  125. package/lib/node/error.js +5 -89
  126. package/lib/node/frame.js +26 -123
  127. package/lib/node/header/axiom.js +10 -98
  128. package/lib/node/header/conjecture.js +5 -89
  129. package/lib/node/header/lemma.js +5 -89
  130. package/lib/node/header/metaLemma.js +5 -89
  131. package/lib/node/header/metatheorem.js +5 -89
  132. package/lib/node/header/rule.js +5 -89
  133. package/lib/node/header/theorem.js +5 -89
  134. package/lib/node/header.js +30 -130
  135. package/lib/node/hypothesis.js +12 -103
  136. package/lib/node/judgement.js +15 -109
  137. package/lib/node/label.js +9 -97
  138. package/lib/node/labels.js +9 -97
  139. package/lib/node/metaArgument.js +9 -97
  140. package/lib/node/metaType.js +16 -104
  141. package/lib/node/metavariable.js +23 -117
  142. package/lib/node/parameter.js +32 -123
  143. package/lib/node/parenthesisedLabel.js +9 -97
  144. package/lib/node/parenthesisedLabels.js +12 -103
  145. package/lib/node/placeholder.js +5 -89
  146. package/lib/node/procedureCall.js +15 -109
  147. package/lib/node/procedureReference.js +16 -104
  148. package/lib/node/proof.js +9 -97
  149. package/lib/node/proofAssertion/premise.js +10 -98
  150. package/lib/node/proofAssertion/step.js +32 -132
  151. package/lib/node/proofAssertion/supposition.js +10 -98
  152. package/lib/node/proofAssertion.js +12 -103
  153. package/lib/node/property.js +15 -106
  154. package/lib/node/propertyRelation.js +15 -109
  155. package/lib/node/qualification.js +12 -103
  156. package/lib/node/reference.js +9 -97
  157. package/lib/node/rule.js +26 -129
  158. package/lib/node/section.js +22 -122
  159. package/lib/node/signature.js +9 -97
  160. package/lib/node/statement.js +93 -238
  161. package/lib/node/subDerivation.js +12 -125
  162. package/lib/node/subproof.js +18 -115
  163. package/lib/node/substitution/frame.js +22 -119
  164. package/lib/node/substitution/reference.js +22 -119
  165. package/lib/node/substitution/statement.js +42 -151
  166. package/lib/node/substitution/term.js +22 -119
  167. package/lib/node/substitution.js +5 -89
  168. package/lib/node/term.js +51 -160
  169. package/lib/node/topLevelAssertion/axiom.js +8 -105
  170. package/lib/node/topLevelAssertion/conjecture.js +8 -105
  171. package/lib/node/topLevelAssertion/lemma.js +8 -105
  172. package/lib/node/topLevelAssertion/theorem.js +8 -105
  173. package/lib/node/topLevelAssertion.js +29 -135
  174. package/lib/node/topLevelMetaAssertion/metaLemma.js +8 -105
  175. package/lib/node/topLevelMetaAssertion/metatheorem.js +8 -105
  176. package/lib/node/topLevelMetaAssertion.js +25 -128
  177. package/lib/node/type.js +43 -140
  178. package/lib/node/typePrefix.js +16 -104
  179. package/lib/node/types.js +9 -97
  180. package/lib/node/variable.js +16 -104
  181. package/lib/nominal/lexer.js +3 -68
  182. package/lib/nominal/parser.js +7 -85
  183. package/lib/nonTerminalNodeMap.js +171 -101
  184. package/lib/options.js +6 -6
  185. package/lib/preamble.js +62 -62
  186. package/lib/prepare.js +4 -4
  187. package/lib/process/assign.js +20 -20
  188. package/lib/process/equate.js +39 -117
  189. package/lib/process/instantiate.js +10 -9
  190. package/lib/process/unify.js +199 -325
  191. package/lib/process/validate.js +87 -195
  192. package/lib/process/verify.js +263 -786
  193. package/lib/ruleNames.js +84 -84
  194. package/lib/tokenTypes.js +3 -3
  195. package/lib/utilities/bnf.js +7 -7
  196. package/lib/utilities/brackets.js +18 -18
  197. package/lib/utilities/clock.js +8 -8
  198. package/lib/utilities/context.js +23 -191
  199. package/lib/utilities/element.js +276 -276
  200. package/lib/utilities/equivalence.js +7 -7
  201. package/lib/utilities/fileContext.js +9 -9
  202. package/lib/utilities/instance.js +14 -14
  203. package/lib/utilities/json.js +211 -211
  204. package/lib/utilities/releaseContext.js +19 -147
  205. package/lib/utilities/statement.js +10 -10
  206. package/lib/utilities/string.js +47 -47
  207. package/lib/utilities/substitutions.js +19 -19
  208. package/lib/utilities/type.js +5 -5
  209. package/lib/utilities/unification.js +196 -426
  210. package/lib/utilities/validation.js +72 -72
  211. package/package.json +1 -1
@@ -19,829 +19,306 @@ _export(exports, {
19
19
  return verifyTermAsConstructor;
20
20
  }
21
21
  });
22
- var _occamlanguages = require("occam-languages");
23
- var _element = require("../utilities/element");
24
- function _assert_this_initialized(self) {
25
- if (self === void 0) {
26
- throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
27
- }
28
- return self;
29
- }
30
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
31
- try {
32
- var info = gen[key](arg);
33
- var value = info.value;
34
- } catch (error) {
35
- reject(error);
36
- return;
37
- }
38
- if (info.done) {
39
- resolve(value);
40
- } else {
41
- Promise.resolve(value).then(_next, _throw);
42
- }
43
- }
44
- function _async_to_generator(fn) {
45
- return function() {
46
- var self = this, args = arguments;
47
- return new Promise(function(resolve, reject) {
48
- var gen = fn.apply(self, args);
49
- function _next(value) {
50
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
22
+ const _occamlanguages = require("occam-languages");
23
+ const _element = require("../utilities/element");
24
+ const { nodeQuery } = _occamlanguages.queryUtilities;
25
+ const ruleNodeQuery = nodeQuery("/rule"), termNodeQuery = nodeQuery("/term"), typeNodeQuery = nodeQuery("/type"), errorNodeQuery = nodeQuery("/error"), axiomNodeQuery = nodeQuery("/axiom"), lemmaNodeQuery = nodeQuery("/lemma"), sectionNodeQuery = nodeQuery("/section"), theoremNodeQuery = nodeQuery("/theorem"), metaLemmaNodeQuery = nodeQuery("/metaLemma"), statementNodeQuery = nodeQuery("/statement"), conjectureNodeQuery = nodeQuery("/conjecture"), metatheoremNodeQuery = nodeQuery("/metatheorem"), variableDeclarationNodeQuery = nodeQuery("/variableDeclaration"), combinatorDeclarationNodeQuery = nodeQuery("/combinatorDeclaration"), simpleTypeDeclarationNodeQuery = nodeQuery("/simpleTypeDeclaration"), typePrefixDeclarationNodeQuery = nodeQuery("/typePrefixDeclaration"), constructorDeclarationNodeQuery = nodeQuery("/constructorDeclaration"), complexTypeDeclarationNodeQuery = nodeQuery("/complexTypeDeclaration"), metavariableDeclarationNodeQuery = nodeQuery("/metavariableDeclaration");
26
+ class TopLevelPass extends _occamlanguages.AsyncPass {
27
+ static maps = [
28
+ {
29
+ nodeQuery: errorNodeQuery,
30
+ run: async (errorNode, context)=>{
31
+ let success = false;
32
+ const error = (0, _element.errorFromErrorNode)(errorNode, context), errorVerifies = await error.verify();
33
+ if (errorVerifies) {
34
+ success = true;
35
+ }
36
+ return success;
51
37
  }
52
- function _throw(err) {
53
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
38
+ },
39
+ {
40
+ nodeQuery: ruleNodeQuery,
41
+ run: async (ruleNode, context)=>{
42
+ let success = false;
43
+ const rule = (0, _element.ruleFromRuleNode)(ruleNode, context), ruleVerifies = await rule.verify();
44
+ if (ruleVerifies) {
45
+ success = true;
46
+ }
47
+ return success;
54
48
  }
55
- _next(undefined);
56
- });
57
- };
58
- }
59
- function _call_super(_this, derived, args) {
60
- derived = _get_prototype_of(derived);
61
- return _possible_constructor_return(_this, _is_native_reflect_construct() ? Reflect.construct(derived, args || [], _get_prototype_of(_this).constructor) : derived.apply(_this, args));
62
- }
63
- function _class_call_check(instance, Constructor) {
64
- if (!(instance instanceof Constructor)) {
65
- throw new TypeError("Cannot call a class as a function");
66
- }
67
- }
68
- function _defineProperties(target, props) {
69
- for(var i = 0; i < props.length; i++){
70
- var descriptor = props[i];
71
- descriptor.enumerable = descriptor.enumerable || false;
72
- descriptor.configurable = true;
73
- if ("value" in descriptor) descriptor.writable = true;
74
- Object.defineProperty(target, descriptor.key, descriptor);
75
- }
76
- }
77
- function _create_class(Constructor, protoProps, staticProps) {
78
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
79
- if (staticProps) _defineProperties(Constructor, staticProps);
80
- return Constructor;
81
- }
82
- function _define_property(obj, key, value) {
83
- if (key in obj) {
84
- Object.defineProperty(obj, key, {
85
- value: value,
86
- enumerable: true,
87
- configurable: true,
88
- writable: true
89
- });
90
- } else {
91
- obj[key] = value;
92
- }
93
- return obj;
94
- }
95
- function _get_prototype_of(o) {
96
- _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {
97
- return o.__proto__ || Object.getPrototypeOf(o);
98
- };
99
- return _get_prototype_of(o);
100
- }
101
- function _inherits(subClass, superClass) {
102
- if (typeof superClass !== "function" && superClass !== null) {
103
- throw new TypeError("Super expression must either be null or a function");
104
- }
105
- subClass.prototype = Object.create(superClass && superClass.prototype, {
106
- constructor: {
107
- value: subClass,
108
- writable: true,
109
- configurable: true
110
- }
111
- });
112
- if (superClass) _set_prototype_of(subClass, superClass);
113
- }
114
- function _possible_constructor_return(self, call) {
115
- if (call && (_type_of(call) === "object" || typeof call === "function")) {
116
- return call;
117
- }
118
- return _assert_this_initialized(self);
119
- }
120
- function _set_prototype_of(o, p) {
121
- _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {
122
- o.__proto__ = p;
123
- return o;
124
- };
125
- return _set_prototype_of(o, p);
126
- }
127
- function _type_of(obj) {
128
- "@swc/helpers - typeof";
129
- return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
130
- }
131
- function _is_native_reflect_construct() {
132
- try {
133
- var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
134
- } catch (_) {}
135
- return (_is_native_reflect_construct = function() {
136
- return !!result;
137
- })();
138
- }
139
- function _ts_generator(thisArg, body) {
140
- var f, y, t, _ = {
141
- label: 0,
142
- sent: function() {
143
- if (t[0] & 1) throw t[1];
144
- return t[1];
145
49
  },
146
- trys: [],
147
- ops: []
148
- }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
149
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() {
150
- return this;
151
- }), g;
152
- function verb(n) {
153
- return function(v) {
154
- return step([
155
- n,
156
- v
157
- ]);
158
- };
159
- }
160
- function step(op) {
161
- if (f) throw new TypeError("Generator is already executing.");
162
- while(g && (g = 0, op[0] && (_ = 0)), _)try {
163
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
164
- if (y = 0, t) op = [
165
- op[0] & 2,
166
- t.value
167
- ];
168
- switch(op[0]){
169
- case 0:
170
- case 1:
171
- t = op;
172
- break;
173
- case 4:
174
- _.label++;
175
- return {
176
- value: op[1],
177
- done: false
178
- };
179
- case 5:
180
- _.label++;
181
- y = op[1];
182
- op = [
183
- 0
184
- ];
185
- continue;
186
- case 7:
187
- op = _.ops.pop();
188
- _.trys.pop();
189
- continue;
190
- default:
191
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
192
- _ = 0;
193
- continue;
194
- }
195
- if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
196
- _.label = op[1];
197
- break;
198
- }
199
- if (op[0] === 6 && _.label < t[1]) {
200
- _.label = t[1];
201
- t = op;
202
- break;
203
- }
204
- if (t && _.label < t[2]) {
205
- _.label = t[2];
206
- _.ops.push(op);
207
- break;
208
- }
209
- if (t[2]) _.ops.pop();
210
- _.trys.pop();
211
- continue;
50
+ {
51
+ nodeQuery: axiomNodeQuery,
52
+ run: async (axiomNode, context)=>{
53
+ let success = false;
54
+ const axiom = (0, _element.axiomFromAxiomNode)(axiomNode, context), axiomVerifies = await axiom.verify();
55
+ if (axiomVerifies) {
56
+ success = true;
57
+ }
58
+ return success;
59
+ }
60
+ },
61
+ {
62
+ nodeQuery: lemmaNodeQuery,
63
+ run: async (lemmaNode, context)=>{
64
+ let success = false;
65
+ const lemma = (0, _element.lemmaFromLemmaNode)(lemmaNode, context), lemmaVerifies = await lemma.verify();
66
+ if (lemmaVerifies) {
67
+ success = true;
68
+ }
69
+ return success;
70
+ }
71
+ },
72
+ {
73
+ nodeQuery: sectionNodeQuery,
74
+ run: async (sectionNode, context)=>{
75
+ let success = false;
76
+ const section = (0, _element.sectionFromSectionNode)(sectionNode, context), sectionVerifies = await section.verify();
77
+ if (sectionVerifies) {
78
+ success = true;
79
+ }
80
+ return success;
81
+ }
82
+ },
83
+ {
84
+ nodeQuery: theoremNodeQuery,
85
+ run: async (theoremNode, context)=>{
86
+ let success = false;
87
+ const theorem = (0, _element.theoremFromTheoremNode)(theoremNode, context), theoremVerifies = await theorem.verify();
88
+ if (theoremVerifies) {
89
+ success = true;
90
+ }
91
+ return success;
92
+ }
93
+ },
94
+ {
95
+ nodeQuery: metaLemmaNodeQuery,
96
+ run: async (metaLemmaNode, context)=>{
97
+ let success = false;
98
+ const metaLemma = (0, _element.metaLemmaFromMetaLemmaNode)(metaLemmaNode, context), metaLemmaVerifies = await metaLemma.verify();
99
+ if (metaLemmaVerifies) {
100
+ success = true;
101
+ }
102
+ return success;
103
+ }
104
+ },
105
+ {
106
+ nodeQuery: conjectureNodeQuery,
107
+ run: async (conjectureNode, context)=>{
108
+ let success = false;
109
+ const conjecture = (0, _element.conjectureFromConjectureNode)(conjectureNode, context), conjectureVerifies = await conjecture.verify();
110
+ if (conjectureVerifies) {
111
+ success = true;
112
+ }
113
+ return success;
114
+ }
115
+ },
116
+ {
117
+ nodeQuery: metatheoremNodeQuery,
118
+ run: async (metatheoremNode, context)=>{
119
+ let success = false;
120
+ const metatheorem = (0, _element.metatheoremFromMetatheoremNode)(metatheoremNode, context), metatheoremVerifies = await metatheorem.verify();
121
+ if (metatheoremVerifies) {
122
+ success = true;
123
+ }
124
+ return success;
125
+ }
126
+ },
127
+ {
128
+ nodeQuery: variableDeclarationNodeQuery,
129
+ run: async (variableDeclarationNode, context)=>{
130
+ let success = false;
131
+ const variableDeclaration = (0, _element.variableDeclarationFromVariableDeclarationNode)(variableDeclarationNode, context), variableDeclarationVerifies = await variableDeclaration.verify();
132
+ if (variableDeclarationVerifies) {
133
+ success = true;
134
+ }
135
+ return success;
136
+ }
137
+ },
138
+ {
139
+ nodeQuery: simpleTypeDeclarationNodeQuery,
140
+ run: async (simpleTypeDeclarationNode, context)=>{
141
+ let success = false;
142
+ const simpleTypeDeclaration = (0, _element.simpleTypeDeclarationFromSimpleTypeDeclarationNode)(simpleTypeDeclarationNode, context), simpleTypeDeclarationVerifies = await simpleTypeDeclaration.verify();
143
+ if (simpleTypeDeclarationVerifies) {
144
+ success = true;
145
+ }
146
+ return success;
147
+ }
148
+ },
149
+ {
150
+ nodeQuery: typePrefixDeclarationNodeQuery,
151
+ run: async (typePrefixDeclarationNode, context)=>{
152
+ let success = false;
153
+ const typePrefixDeclaration = (0, _element.typePrefixDeclarationFromTypePrefixDeclarationNode)(typePrefixDeclarationNode, context), typePrefixDeclarationVerifies = await typePrefixDeclaration.verify();
154
+ if (typePrefixDeclarationVerifies) {
155
+ success = true;
156
+ }
157
+ return success;
158
+ }
159
+ },
160
+ {
161
+ nodeQuery: combinatorDeclarationNodeQuery,
162
+ run: async (combinatorDeclarationNode, context)=>{
163
+ let success = false;
164
+ const combinatorDeclaration = (0, _element.combinatorDeclarationFromCombinatorDeclarationNode)(combinatorDeclarationNode, context), combinatorDeclarationVerifies = await combinatorDeclaration.verify();
165
+ if (combinatorDeclarationVerifies) {
166
+ success = true;
167
+ }
168
+ return success;
169
+ }
170
+ },
171
+ {
172
+ nodeQuery: constructorDeclarationNodeQuery,
173
+ run: async (constructorDeclarationNode, context)=>{
174
+ let success = false;
175
+ const constructorDeclaration = (0, _element.constructorDeclarationFromConstructorDeclarationNode)(constructorDeclarationNode, context), constructorDeclarationVerifies = await constructorDeclaration.verify();
176
+ if (constructorDeclarationVerifies) {
177
+ success = true;
178
+ }
179
+ return success;
180
+ }
181
+ },
182
+ {
183
+ nodeQuery: complexTypeDeclarationNodeQuery,
184
+ run: async (complexTypeDeclarationNode, context)=>{
185
+ let success = false;
186
+ const complexTypeDeclaration = (0, _element.complexTypeDeclarationFromComplexTypeDeclarationNode)(complexTypeDeclarationNode, context), complexTypeDeclarationVerifies = await complexTypeDeclaration.verify();
187
+ if (complexTypeDeclarationVerifies) {
188
+ success = true;
189
+ }
190
+ return success;
191
+ }
192
+ },
193
+ {
194
+ nodeQuery: metavariableDeclarationNodeQuery,
195
+ run: async (metavariableDeclarationNode, context)=>{
196
+ let success = false;
197
+ const metavariableDeclaration = (0, _element.metavariableDeclarationFromMetavariableDeclarationNode)(metavariableDeclarationNode, context), metavariableDeclarationVerifies = await metavariableDeclaration.verify();
198
+ if (metavariableDeclarationVerifies) {
199
+ success = true;
200
+ }
201
+ return success;
212
202
  }
213
- op = body.call(thisArg, _);
214
- } catch (e) {
215
- op = [
216
- 6,
217
- e
218
- ];
219
- y = 0;
220
- } finally{
221
- f = t = 0;
222
203
  }
223
- if (op[0] & 5) throw op[1];
224
- return {
225
- value: op[0] ? op[1] : void 0,
226
- done: true
227
- };
228
- }
204
+ ];
229
205
  }
230
- var nodeQuery = _occamlanguages.queryUtilities.nodeQuery;
231
- var ruleNodeQuery = nodeQuery("/rule"), termNodeQuery = nodeQuery("/term"), typeNodeQuery = nodeQuery("/type"), errorNodeQuery = nodeQuery("/error"), axiomNodeQuery = nodeQuery("/axiom"), lemmaNodeQuery = nodeQuery("/lemma"), sectionNodeQuery = nodeQuery("/section"), theoremNodeQuery = nodeQuery("/theorem"), metaLemmaNodeQuery = nodeQuery("/metaLemma"), statementNodeQuery = nodeQuery("/statement"), conjectureNodeQuery = nodeQuery("/conjecture"), metatheoremNodeQuery = nodeQuery("/metatheorem"), variableDeclarationNodeQuery = nodeQuery("/variableDeclaration"), combinatorDeclarationNodeQuery = nodeQuery("/combinatorDeclaration"), simpleTypeDeclarationNodeQuery = nodeQuery("/simpleTypeDeclaration"), typePrefixDeclarationNodeQuery = nodeQuery("/typePrefixDeclaration"), constructorDeclarationNodeQuery = nodeQuery("/constructorDeclaration"), complexTypeDeclarationNodeQuery = nodeQuery("/complexTypeDeclaration"), metavariableDeclarationNodeQuery = nodeQuery("/metavariableDeclaration");
232
- var TopLevelPass = /*#__PURE__*/ function(AsyncPass) {
233
- _inherits(TopLevelPass, AsyncPass);
234
- function TopLevelPass() {
235
- _class_call_check(this, TopLevelPass);
236
- return _call_super(this, TopLevelPass, arguments);
237
- }
238
- return TopLevelPass;
239
- }(_occamlanguages.AsyncPass);
240
- _define_property(TopLevelPass, "maps", [
241
- {
242
- nodeQuery: errorNodeQuery,
243
- run: function(errorNode, context) {
244
- return _async_to_generator(function() {
245
- var success, error, errorVerifies;
246
- return _ts_generator(this, function(_state) {
247
- switch(_state.label){
248
- case 0:
249
- success = false;
250
- error = (0, _element.errorFromErrorNode)(errorNode, context);
251
- return [
252
- 4,
253
- error.verify()
254
- ];
255
- case 1:
256
- errorVerifies = _state.sent();
257
- if (errorVerifies) {
258
- success = true;
259
- }
260
- return [
261
- 2,
262
- success
263
- ];
264
- }
265
- });
266
- })();
267
- }
268
- },
269
- {
270
- nodeQuery: ruleNodeQuery,
271
- run: function(ruleNode, context) {
272
- return _async_to_generator(function() {
273
- var success, rule, ruleVerifies;
274
- return _ts_generator(this, function(_state) {
275
- switch(_state.label){
276
- case 0:
277
- success = false;
278
- rule = (0, _element.ruleFromRuleNode)(ruleNode, context);
279
- return [
280
- 4,
281
- rule.verify()
282
- ];
283
- case 1:
284
- ruleVerifies = _state.sent();
285
- if (ruleVerifies) {
286
- success = true;
287
- }
288
- return [
289
- 2,
290
- success
291
- ];
292
- }
293
- });
294
- })();
206
+ class ConbinatorPass extends _occamlanguages.SimplePass {
207
+ run(statementNode, context) {
208
+ let success = false;
209
+ const nonTerminalNode = statementNode, childNodes = nonTerminalNode.getChildNodes(), descended = this.descend(childNodes, context);
210
+ if (descended) {
211
+ success = true;
295
212
  }
296
- },
297
- {
298
- nodeQuery: axiomNodeQuery,
299
- run: function(axiomNode, context) {
300
- return _async_to_generator(function() {
301
- var success, axiom, axiomVerifies;
302
- return _ts_generator(this, function(_state) {
303
- switch(_state.label){
304
- case 0:
305
- success = false;
306
- axiom = (0, _element.axiomFromAxiomNode)(axiomNode, context);
307
- return [
308
- 4,
309
- axiom.verify()
310
- ];
311
- case 1:
312
- axiomVerifies = _state.sent();
313
- if (axiomVerifies) {
314
- success = true;
315
- }
316
- return [
317
- 2,
318
- success
319
- ];
320
- }
321
- });
322
- })();
323
- }
324
- },
325
- {
326
- nodeQuery: lemmaNodeQuery,
327
- run: function(lemmaNode, context) {
328
- return _async_to_generator(function() {
329
- var success, lemma, lemmaVerifies;
330
- return _ts_generator(this, function(_state) {
331
- switch(_state.label){
332
- case 0:
333
- success = false;
334
- lemma = (0, _element.lemmaFromLemmaNode)(lemmaNode, context);
335
- return [
336
- 4,
337
- lemma.verify()
338
- ];
339
- case 1:
340
- lemmaVerifies = _state.sent();
341
- if (lemmaVerifies) {
342
- success = true;
343
- }
344
- return [
345
- 2,
346
- success
347
- ];
348
- }
349
- });
350
- })();
351
- }
352
- },
353
- {
354
- nodeQuery: sectionNodeQuery,
355
- run: function(sectionNode, context) {
356
- return _async_to_generator(function() {
357
- var success, section, sectionVerifies;
358
- return _ts_generator(this, function(_state) {
359
- switch(_state.label){
360
- case 0:
361
- success = false;
362
- section = (0, _element.sectionFromSectionNode)(sectionNode, context);
363
- return [
364
- 4,
365
- section.verify()
366
- ];
367
- case 1:
368
- sectionVerifies = _state.sent();
369
- if (sectionVerifies) {
370
- success = true;
371
- }
372
- return [
373
- 2,
374
- success
375
- ];
376
- }
377
- });
378
- })();
379
- }
380
- },
381
- {
382
- nodeQuery: theoremNodeQuery,
383
- run: function(theoremNode, context) {
384
- return _async_to_generator(function() {
385
- var success, theorem, theoremVerifies;
386
- return _ts_generator(this, function(_state) {
387
- switch(_state.label){
388
- case 0:
389
- success = false;
390
- theorem = (0, _element.theoremFromTheoremNode)(theoremNode, context);
391
- return [
392
- 4,
393
- theorem.verify()
394
- ];
395
- case 1:
396
- theoremVerifies = _state.sent();
397
- if (theoremVerifies) {
398
- success = true;
399
- }
400
- return [
401
- 2,
402
- success
403
- ];
404
- }
405
- });
406
- })();
407
- }
408
- },
409
- {
410
- nodeQuery: metaLemmaNodeQuery,
411
- run: function(metaLemmaNode, context) {
412
- return _async_to_generator(function() {
413
- var success, metaLemma, metaLemmaVerifies;
414
- return _ts_generator(this, function(_state) {
415
- switch(_state.label){
416
- case 0:
417
- success = false;
418
- metaLemma = (0, _element.metaLemmaFromMetaLemmaNode)(metaLemmaNode, context);
419
- return [
420
- 4,
421
- metaLemma.verify()
422
- ];
423
- case 1:
424
- metaLemmaVerifies = _state.sent();
425
- if (metaLemmaVerifies) {
426
- success = true;
427
- }
428
- return [
429
- 2,
430
- success
431
- ];
432
- }
433
- });
434
- })();
435
- }
436
- },
437
- {
438
- nodeQuery: conjectureNodeQuery,
439
- run: function(conjectureNode, context) {
440
- return _async_to_generator(function() {
441
- var success, conjecture, conjectureVerifies;
442
- return _ts_generator(this, function(_state) {
443
- switch(_state.label){
444
- case 0:
445
- success = false;
446
- conjecture = (0, _element.conjectureFromConjectureNode)(conjectureNode, context);
447
- return [
448
- 4,
449
- conjecture.verify()
450
- ];
451
- case 1:
452
- conjectureVerifies = _state.sent();
453
- if (conjectureVerifies) {
454
- success = true;
455
- }
456
- return [
457
- 2,
458
- success
459
- ];
460
- }
461
- });
462
- })();
463
- }
464
- },
465
- {
466
- nodeQuery: metatheoremNodeQuery,
467
- run: function(metatheoremNode, context) {
468
- return _async_to_generator(function() {
469
- var success, metatheorem, metatheoremVerifies;
470
- return _ts_generator(this, function(_state) {
471
- switch(_state.label){
472
- case 0:
473
- success = false;
474
- metatheorem = (0, _element.metatheoremFromMetatheoremNode)(metatheoremNode, context);
475
- return [
476
- 4,
477
- metatheorem.verify()
478
- ];
479
- case 1:
480
- metatheoremVerifies = _state.sent();
481
- if (metatheoremVerifies) {
482
- success = true;
483
- }
484
- return [
485
- 2,
486
- success
487
- ];
488
- }
489
- });
490
- })();
491
- }
492
- },
493
- {
494
- nodeQuery: variableDeclarationNodeQuery,
495
- run: function(variableDeclarationNode, context) {
496
- return _async_to_generator(function() {
497
- var success, variableDeclaration, variableDeclarationVerifies;
498
- return _ts_generator(this, function(_state) {
499
- switch(_state.label){
500
- case 0:
501
- success = false;
502
- variableDeclaration = (0, _element.variableDeclarationFromVariableDeclarationNode)(variableDeclarationNode, context);
503
- return [
504
- 4,
505
- variableDeclaration.verify()
506
- ];
507
- case 1:
508
- variableDeclarationVerifies = _state.sent();
509
- if (variableDeclarationVerifies) {
510
- success = true;
511
- }
512
- return [
513
- 2,
514
- success
515
- ];
516
- }
517
- });
518
- })();
519
- }
520
- },
521
- {
522
- nodeQuery: simpleTypeDeclarationNodeQuery,
523
- run: function(simpleTypeDeclarationNode, context) {
524
- return _async_to_generator(function() {
525
- var success, simpleTypeDeclaration, simpleTypeDeclarationVerifies;
526
- return _ts_generator(this, function(_state) {
527
- switch(_state.label){
528
- case 0:
529
- success = false;
530
- simpleTypeDeclaration = (0, _element.simpleTypeDeclarationFromSimpleTypeDeclarationNode)(simpleTypeDeclarationNode, context);
531
- return [
532
- 4,
533
- simpleTypeDeclaration.verify()
534
- ];
535
- case 1:
536
- simpleTypeDeclarationVerifies = _state.sent();
537
- if (simpleTypeDeclarationVerifies) {
538
- success = true;
539
- }
540
- return [
541
- 2,
542
- success
543
- ];
544
- }
545
- });
546
- })();
547
- }
548
- },
549
- {
550
- nodeQuery: typePrefixDeclarationNodeQuery,
551
- run: function(typePrefixDeclarationNode, context) {
552
- return _async_to_generator(function() {
553
- var success, typePrefixDeclaration, typePrefixDeclarationVerifies;
554
- return _ts_generator(this, function(_state) {
555
- switch(_state.label){
556
- case 0:
557
- success = false;
558
- typePrefixDeclaration = (0, _element.typePrefixDeclarationFromTypePrefixDeclarationNode)(typePrefixDeclarationNode, context);
559
- return [
560
- 4,
561
- typePrefixDeclaration.verify()
562
- ];
563
- case 1:
564
- typePrefixDeclarationVerifies = _state.sent();
565
- if (typePrefixDeclarationVerifies) {
566
- success = true;
567
- }
568
- return [
569
- 2,
570
- success
571
- ];
572
- }
573
- });
574
- })();
575
- }
576
- },
577
- {
578
- nodeQuery: combinatorDeclarationNodeQuery,
579
- run: function(combinatorDeclarationNode, context) {
580
- return _async_to_generator(function() {
581
- var success, combinatorDeclaration, combinatorDeclarationVerifies;
582
- return _ts_generator(this, function(_state) {
583
- switch(_state.label){
584
- case 0:
585
- success = false;
586
- combinatorDeclaration = (0, _element.combinatorDeclarationFromCombinatorDeclarationNode)(combinatorDeclarationNode, context);
587
- return [
588
- 4,
589
- combinatorDeclaration.verify()
590
- ];
591
- case 1:
592
- combinatorDeclarationVerifies = _state.sent();
593
- if (combinatorDeclarationVerifies) {
594
- success = true;
595
- }
596
- return [
597
- 2,
598
- success
599
- ];
600
- }
601
- });
602
- })();
603
- }
604
- },
605
- {
606
- nodeQuery: constructorDeclarationNodeQuery,
607
- run: function(constructorDeclarationNode, context) {
608
- return _async_to_generator(function() {
609
- var success, constructorDeclaration, constructorDeclarationVerifies;
610
- return _ts_generator(this, function(_state) {
611
- switch(_state.label){
612
- case 0:
613
- success = false;
614
- constructorDeclaration = (0, _element.constructorDeclarationFromConstructorDeclarationNode)(constructorDeclarationNode, context);
615
- return [
616
- 4,
617
- constructorDeclaration.verify()
618
- ];
619
- case 1:
620
- constructorDeclarationVerifies = _state.sent();
621
- if (constructorDeclarationVerifies) {
622
- success = true;
623
- }
624
- return [
625
- 2,
626
- success
627
- ];
628
- }
629
- });
630
- })();
631
- }
632
- },
633
- {
634
- nodeQuery: complexTypeDeclarationNodeQuery,
635
- run: function(complexTypeDeclarationNode, context) {
636
- return _async_to_generator(function() {
637
- var success, complexTypeDeclaration, complexTypeDeclarationVerifies;
638
- return _ts_generator(this, function(_state) {
639
- switch(_state.label){
640
- case 0:
641
- success = false;
642
- complexTypeDeclaration = (0, _element.complexTypeDeclarationFromComplexTypeDeclarationNode)(complexTypeDeclarationNode, context);
643
- return [
644
- 4,
645
- complexTypeDeclaration.verify()
646
- ];
647
- case 1:
648
- complexTypeDeclarationVerifies = _state.sent();
649
- if (complexTypeDeclarationVerifies) {
650
- success = true;
651
- }
652
- return [
653
- 2,
654
- success
655
- ];
656
- }
657
- });
658
- })();
659
- }
660
- },
661
- {
662
- nodeQuery: metavariableDeclarationNodeQuery,
663
- run: function(metavariableDeclarationNode, context) {
664
- return _async_to_generator(function() {
665
- var success, metavariableDeclaration, metavariableDeclarationVerifies;
666
- return _ts_generator(this, function(_state) {
667
- switch(_state.label){
668
- case 0:
669
- success = false;
670
- metavariableDeclaration = (0, _element.metavariableDeclarationFromMetavariableDeclarationNode)(metavariableDeclarationNode, context);
671
- return [
672
- 4,
673
- metavariableDeclaration.verify()
674
- ];
675
- case 1:
676
- metavariableDeclarationVerifies = _state.sent();
677
- if (metavariableDeclarationVerifies) {
678
- success = true;
679
- }
680
- return [
681
- 2,
682
- success
683
- ];
684
- }
685
- });
686
- })();
687
- }
688
- }
689
- ]);
690
- var ConbinatorPass = /*#__PURE__*/ function(SimplePass) {
691
- _inherits(ConbinatorPass, SimplePass);
692
- function ConbinatorPass() {
693
- _class_call_check(this, ConbinatorPass);
694
- return _call_super(this, ConbinatorPass, arguments);
213
+ return success;
695
214
  }
696
- _create_class(ConbinatorPass, [
215
+ static maps = [
697
216
  {
698
- key: "run",
699
- value: function run(statementNode, context) {
700
- var success = false;
701
- var nonTerminalNode = statementNode, childNodes = nonTerminalNode.getChildNodes(), descended = this.descend(childNodes, context);
702
- if (descended) {
217
+ nodeQuery: statementNodeQuery,
218
+ run: (statementNode, context)=>{
219
+ let success = false;
220
+ let statement;
221
+ const stated = true;
222
+ statement = (0, _element.statementFromStatementNode)(statementNode, context);
223
+ statement = statement.validate(stated, context);
224
+ if (statement !== null) {
703
225
  success = true;
704
226
  }
705
227
  return success;
706
228
  }
707
- }
708
- ]);
709
- return ConbinatorPass;
710
- }(_occamlanguages.SimplePass);
711
- _define_property(ConbinatorPass, "maps", [
712
- {
713
- nodeQuery: statementNodeQuery,
714
- run: function(statementNode, context) {
715
- var success = false;
716
- var statement;
717
- var stated = true;
718
- statement = (0, _element.statementFromStatementNode)(statementNode, context);
719
- statement = statement.validate(stated, context);
720
- if (statement !== null) {
721
- success = true;
229
+ },
230
+ {
231
+ nodeQuery: termNodeQuery,
232
+ run: (termNode, context)=>{
233
+ let success = false;
234
+ let term;
235
+ term = (0, _element.termFromTermNode)(termNode, context);
236
+ term = term.validate(context, ()=>{
237
+ const validatesForwards = true;
238
+ return validatesForwards;
239
+ });
240
+ if (term !== null) {
241
+ success = true;
242
+ }
243
+ return success;
722
244
  }
723
- return success;
724
- }
725
- },
726
- {
727
- nodeQuery: termNodeQuery,
728
- run: function(termNode, context) {
729
- var success = false;
730
- var term;
731
- term = (0, _element.termFromTermNode)(termNode, context);
732
- term = term.validate(context, function() {
733
- var validatesForwards = true;
734
- return validatesForwards;
735
- });
736
- if (term !== null) {
737
- success = true;
245
+ },
246
+ {
247
+ nodeQuery: typeNodeQuery,
248
+ run: (typeNode, context)=>{
249
+ let success = false;
250
+ const nominalTypeName = typeNode.getNominalTypeName(), typePresent = context.isTypePresentByNominalTypeName(nominalTypeName);
251
+ if (typePresent) {
252
+ success = true;
253
+ }
254
+ return success;
738
255
  }
739
- return success;
740
256
  }
741
- },
742
- {
743
- nodeQuery: typeNodeQuery,
744
- run: function(typeNode, context) {
745
- var success = false;
746
- var nominalTypeName = typeNode.getNominalTypeName(), typePresent = context.isTypePresentByNominalTypeName(nominalTypeName);
747
- if (typePresent) {
748
- success = true;
749
- }
750
- return success;
257
+ ];
258
+ }
259
+ class ConstructorPass extends _occamlanguages.SimplePass {
260
+ run(termNode, context) {
261
+ let success = false;
262
+ const nonTerminalNode = termNode, childNodes = nonTerminalNode.getChildNodes(), descended = this.descend(childNodes, context);
263
+ if (descended) {
264
+ success = true;
751
265
  }
266
+ return success;
752
267
  }
753
- ]);
754
- var ConstructorPass = /*#__PURE__*/ function(SimplePass) {
755
- _inherits(ConstructorPass, SimplePass);
756
- function ConstructorPass() {
757
- _class_call_check(this, ConstructorPass);
758
- return _call_super(this, ConstructorPass, arguments);
759
- }
760
- _create_class(ConstructorPass, [
268
+ static maps = [
761
269
  {
762
- key: "run",
763
- value: function run(termNode, context) {
764
- var success = false;
765
- var nonTerminalNode = termNode, childNodes = nonTerminalNode.getChildNodes(), descended = this.descend(childNodes, context);
766
- if (descended) {
270
+ nodeQuery: termNodeQuery,
271
+ run: (termNode, context)=>{
272
+ let success = false;
273
+ let term;
274
+ term = (0, _element.termFromTermNode)(termNode, context);
275
+ term = term.validate(context, ()=>{
276
+ const validatesForwards = true;
277
+ return validatesForwards;
278
+ });
279
+ if (term !== null) {
767
280
  success = true;
768
281
  }
769
282
  return success;
770
283
  }
771
- }
772
- ]);
773
- return ConstructorPass;
774
- }(_occamlanguages.SimplePass);
775
- _define_property(ConstructorPass, "maps", [
776
- {
777
- nodeQuery: termNodeQuery,
778
- run: function(termNode, context) {
779
- var success = false;
780
- var term;
781
- term = (0, _element.termFromTermNode)(termNode, context);
782
- term = term.validate(context, function() {
783
- var validatesForwards = true;
784
- return validatesForwards;
785
- });
786
- if (term !== null) {
787
- success = true;
788
- }
789
- return success;
790
- }
791
- },
792
- {
793
- nodeQuery: typeNodeQuery,
794
- run: function(typeNode, context) {
795
- var success = false;
796
- var nominalTypeName = typeNode.getNominalTypeName(), typePresent = context.isTypePresentByNominalTypeName(nominalTypeName);
797
- if (typePresent) {
798
- success = true;
284
+ },
285
+ {
286
+ nodeQuery: typeNodeQuery,
287
+ run: (typeNode, context)=>{
288
+ let success = false;
289
+ const nominalTypeName = typeNode.getNominalTypeName(), typePresent = context.isTypePresentByNominalTypeName(nominalTypeName);
290
+ if (typePresent) {
291
+ success = true;
292
+ }
293
+ return success;
799
294
  }
800
- return success;
801
295
  }
296
+ ];
297
+ }
298
+ const topLevelPass = new TopLevelPass(), combinatorPass = new ConbinatorPass(), constructorPass = new ConstructorPass();
299
+ async function verifyFile(fileNode, context) {
300
+ let fileVerifies = false;
301
+ const node = fileNode, sucess = await topLevelPass.run(node, context);
302
+ if (sucess) {
303
+ fileVerifies = true;
802
304
  }
803
- ]);
804
- var topLevelPass = new TopLevelPass(), combinatorPass = new ConbinatorPass(), constructorPass = new ConstructorPass();
805
- function verifyFile(fileNode, context) {
806
- return _async_to_generator(function() {
807
- var fileVerifies, node, sucess;
808
- return _ts_generator(this, function(_state) {
809
- switch(_state.label){
810
- case 0:
811
- fileVerifies = false;
812
- node = fileNode;
813
- return [
814
- 4,
815
- topLevelPass.run(node, context)
816
- ];
817
- case 1:
818
- sucess = _state.sent();
819
- if (sucess) {
820
- fileVerifies = true;
821
- }
822
- return [
823
- 2,
824
- fileVerifies
825
- ];
826
- }
827
- });
828
- })();
305
+ return fileVerifies;
829
306
  }
830
307
  function verifyTermAsConstructor(term, context) {
831
- var termVerifiesAsConstructor = false;
832
- var termNode = term.getNode(), success = constructorPass.run(termNode, context);
308
+ let termVerifiesAsConstructor = false;
309
+ const termNode = term.getNode(), success = constructorPass.run(termNode, context);
833
310
  if (success) {
834
311
  termVerifiesAsConstructor = true;
835
312
  }
836
313
  return termVerifiesAsConstructor;
837
314
  }
838
315
  function verifyStatementAsCombinator(statement, context) {
839
- var statementVerifiesAsCombinator = false;
840
- var statementNode = statement.getNode(), success = combinatorPass.run(statementNode, context);
316
+ let statementVerifiesAsCombinator = false;
317
+ const statementNode = statement.getNode(), success = combinatorPass.run(statementNode, context);
841
318
  if (success) {
842
319
  statementVerifiesAsCombinator = true;
843
320
  }
844
321
  return statementVerifiesAsCombinator;
845
322
  }
846
323
 
847
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3ZlcmlmeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQXN5bmNQYXNzLCBTaW1wbGVQYXNzLCBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIlxuXG5pbXBvcnQgeyB0ZXJtRnJvbVRlcm1Ob2RlLCBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHsgcnVsZUZyb21SdWxlTm9kZSxcbiAgICAgICAgIGVycm9yRnJvbUVycm9yTm9kZSxcbiAgICAgICAgIGF4aW9tRnJvbUF4aW9tTm9kZSxcbiAgICAgICAgIGxlbW1hRnJvbUxlbW1hTm9kZSxcbiAgICAgICAgIHNlY3Rpb25Gcm9tU2VjdGlvbk5vZGUsXG4gICAgICAgICB0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlLFxuICAgICAgICAgbWV0YUxlbW1hRnJvbU1ldGFMZW1tYU5vZGUsXG4gICAgICAgICBjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlLFxuICAgICAgICAgbWV0YXRoZW9yZW1Gcm9tTWV0YXRoZW9yZW1Ob2RlLFxuICAgICAgICAgdmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSxcbiAgICAgICAgIHNpbXBsZVR5cGVEZWNsYXJhdGlvbkZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLFxuICAgICAgICAgdHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsXG4gICAgICAgICBjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSxcbiAgICAgICAgIGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsXG4gICAgICAgICBjb21wbGV4VHlwZURlY2xhcmF0aW9uRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLFxuICAgICAgICAgbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgbm9kZVF1ZXJ5IH0gPSBxdWVyeVV0aWxpdGllcztcblxuY29uc3QgcnVsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9ydWxlXCIpLFxuICAgICAgdGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90ZXJtXCIpLFxuICAgICAgdHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90eXBlXCIpLFxuICAgICAgZXJyb3JOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZXJyb3JcIiksXG4gICAgICBheGlvbU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9heGlvbVwiKSxcbiAgICAgIGxlbW1hTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2xlbW1hXCIpLFxuICAgICAgc2VjdGlvbk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zZWN0aW9uXCIpLFxuICAgICAgdGhlb3JlbU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90aGVvcmVtXCIpLFxuICAgICAgbWV0YUxlbW1hTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL21ldGFMZW1tYVwiKSxcbiAgICAgIHN0YXRlbWVudE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnRcIiksXG4gICAgICBjb25qZWN0dXJlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2NvbmplY3R1cmVcIiksXG4gICAgICBtZXRhdGhlb3JlbU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9tZXRhdGhlb3JlbVwiKSxcbiAgICAgIHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdmFyaWFibGVEZWNsYXJhdGlvblwiKSxcbiAgICAgIGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9jb21iaW5hdG9yRGVjbGFyYXRpb25cIiksXG4gICAgICBzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc2ltcGxlVHlwZURlY2xhcmF0aW9uXCIpLFxuICAgICAgdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3R5cGVQcmVmaXhEZWNsYXJhdGlvblwiKSxcbiAgICAgIGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvY29uc3RydWN0b3JEZWNsYXJhdGlvblwiKSxcbiAgICAgIGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvY29tcGxleFR5cGVEZWNsYXJhdGlvblwiKSxcbiAgICAgIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL21ldGF2YXJpYWJsZURlY2xhcmF0aW9uXCIpO1xuXG5jbGFzcyBUb3BMZXZlbFBhc3MgZXh0ZW5kcyBBc3luY1Bhc3Mge1xuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IGVycm9yTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiBhc3luYyAoZXJyb3JOb2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgZXJyb3IgPSBlcnJvckZyb21FcnJvck5vZGUoZXJyb3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgZXJyb3JWZXJpZmllcyA9IGF3YWl0IGVycm9yLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChlcnJvclZlcmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogcnVsZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKHJ1bGVOb2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgcnVsZSA9IHJ1bGVGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBydWxlVmVyaWZpZXMgPSBhd2FpdCBydWxlLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChydWxlVmVyaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiBheGlvbU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKGF4aW9tTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGF4aW9tID0gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIGF4aW9tVmVyaWZpZXMgPSBhd2FpdCBheGlvbS52ZXJpZnkoKTtcblxuICAgICAgICBpZiAoYXhpb21WZXJpZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IGxlbW1hTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiBhc3luYyAobGVtbWFOb2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbGVtbWEgPSBsZW1tYUZyb21MZW1tYU5vZGUobGVtbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbGVtbWFWZXJpZmllcyA9IGF3YWl0IGxlbW1hLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChsZW1tYVZlcmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogc2VjdGlvbk5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3Qgc2VjdGlvbiA9IHNlY3Rpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBzZWN0aW9uVmVyaWZpZXMgPSBhd2FpdCBzZWN0aW9uLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChzZWN0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiB0aGVvcmVtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiBhc3luYyAodGhlb3JlbU5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCB0aGVvcmVtID0gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHRoZW9yZW1WZXJpZmllcyA9IGF3YWl0IHRoZW9yZW0udmVyaWZ5KCk7XG5cbiAgICAgICAgaWYgKHRoZW9yZW1WZXJpZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IG1ldGFMZW1tYU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKG1ldGFMZW1tYU5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBtZXRhTGVtbWEgPSBtZXRhTGVtbWFGcm9tTWV0YUxlbW1hTm9kZShtZXRhTGVtbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbWV0YUxlbW1hVmVyaWZpZXMgPSBhd2FpdCBtZXRhTGVtbWEudmVyaWZ5KCk7XG5cbiAgICAgICAgaWYgKG1ldGFMZW1tYVZlcmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogY29uamVjdHVyZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKGNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgY29uamVjdHVyZSA9IGNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUoY29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBjb25qZWN0dXJlVmVyaWZpZXMgPSBhd2FpdCBjb25qZWN0dXJlLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChjb25qZWN0dXJlVmVyaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiBtZXRhdGhlb3JlbU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKG1ldGF0aGVvcmVtTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IG1ldGF0aGVvcmVtID0gbWV0YXRoZW9yZW1Gcm9tTWV0YXRoZW9yZW1Ob2RlKG1ldGF0aGVvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIG1ldGF0aGVvcmVtVmVyaWZpZXMgPSBhd2FpdCBtZXRhdGhlb3JlbS52ZXJpZnkoKTtcblxuICAgICAgICBpZiAobWV0YXRoZW9yZW1WZXJpZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlUXVlcnksXG4gICAgICBydW46IGFzeW5jICh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlRGVjbGFyYXRpb24gPSB2YXJpYWJsZURlY2xhcmF0aW9uRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgdmFyaWFibGVEZWNsYXJhdGlvblZlcmlmaWVzID0gYXdhaXQgdmFyaWFibGVEZWNsYXJhdGlvbi52ZXJpZnkoKTtcblxuICAgICAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvblZlcmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiBhc3luYyAoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHNpbXBsZVR5cGVEZWNsYXJhdGlvbiA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbkZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBzaW1wbGVUeXBlRGVjbGFyYXRpb25WZXJpZmllcyA9IGF3YWl0IHNpbXBsZVR5cGVEZWNsYXJhdGlvbi52ZXJpZnkoKTtcblxuICAgICAgICBpZiAoc2ltcGxlVHlwZURlY2xhcmF0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiB0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlUXVlcnksXG4gICAgICBydW46IGFzeW5jICh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgdHlwZVByZWZpeERlY2xhcmF0aW9uID0gdHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHR5cGVQcmVmaXhEZWNsYXJhdGlvblZlcmlmaWVzID0gYXdhaXQgdHlwZVByZWZpeERlY2xhcmF0aW9uLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmICh0eXBlUHJlZml4RGVjbGFyYXRpb25WZXJpZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBjb21iaW5hdG9yRGVjbGFyYXRpb24gPSBjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZShjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgY29tYmluYXRvckRlY2xhcmF0aW9uVmVyaWZpZXMgPSBhd2FpdCBjb21iaW5hdG9yRGVjbGFyYXRpb24udmVyaWZ5KCk7XG5cbiAgICAgICAgaWYgKGNvbWJpbmF0b3JEZWNsYXJhdGlvblZlcmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uVmVyaWZpZXMgPSBhd2FpdCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChjb25zdHJ1Y3RvckRlY2xhcmF0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiBhc3luYyAoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBjb21wbGV4VHlwZURlY2xhcmF0aW9uID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbkZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIGNvbXBsZXhUeXBlRGVjbGFyYXRpb25WZXJpZmllcyA9IGF3YWl0IGNvbXBsZXhUeXBlRGVjbGFyYXRpb24udmVyaWZ5KCk7XG5cbiAgICAgICAgaWYgKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25WZXJpZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiBhc3luYyAobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25WZXJpZmllcyA9IGF3YWl0IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChtZXRhdmFyaWFibGVEZWNsYXJhdGlvblZlcmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIENvbmJpbmF0b3JQYXNzIGV4dGVuZHMgU2ltcGxlUGFzcyB7XG4gIHJ1bihzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSwgLy8vXG4gICAgICAgICAgZGVzY2VuZGVkID0gdGhpcy5kZXNjZW5kKGNoaWxkTm9kZXMsIGNvbnRleHQpO1xuXG4gICAgaWYgKGRlc2NlbmRlZCkge1xuICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH1cblxuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IHN0YXRlbWVudE5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBsZXQgc3RhdGVtZW50O1xuXG4gICAgICAgIGNvbnN0IHN0YXRlZCA9IHRydWU7XG5cbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50LnZhbGlkYXRlKHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46ICh0ZXJtTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGxldCB0ZXJtO1xuXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICB0ZXJtID0gdGVybS52YWxpZGF0ZShjb250ZXh0LCAoKSA9PiB7IC8vL1xuICAgICAgICAgIGNvbnN0IHZhbGlkYXRlc0ZvcndhcmRzID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiB2YWxpZGF0ZXNGb3J3YXJkcztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiB0eXBlTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAodHlwZU5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKSxcbiAgICAgICAgICAgICAgdHlwZVByZXNlbnQgPSBjb250ZXh0LmlzVHlwZVByZXNlbnRCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICAgIGlmICh0eXBlUHJlc2VudCkge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBDb25zdHJ1Y3RvclBhc3MgZXh0ZW5kcyBTaW1wbGVQYXNzIHtcbiAgcnVuKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRlcm1Ob2RlLCAgLy8vXG4gICAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksIC8vL1xuICAgICAgICAgIGRlc2NlbmRlZCA9IHRoaXMuZGVzY2VuZChjaGlsZE5vZGVzLCBjb250ZXh0KTtcblxuICAgIGlmIChkZXNjZW5kZWQpIHtcbiAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAodGVybU5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBsZXQgdGVybTtcblxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgdGVybSA9IHRlcm0udmFsaWRhdGUoY29udGV4dCwgKCkgPT4geyAvLy9cbiAgICAgICAgICBjb25zdCB2YWxpZGF0ZXNGb3J3YXJkcyA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzRm9yd2FyZHM7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKHR5cGVOb2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3Qgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCksXG4gICAgICAgICAgICAgIHR5cGVQcmVzZW50ID0gY29udGV4dC5pc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZVByZXNlbnQpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY29uc3QgdG9wTGV2ZWxQYXNzID0gbmV3IFRvcExldmVsUGFzcygpLFxuICAgICAgY29tYmluYXRvclBhc3MgPSBuZXcgQ29uYmluYXRvclBhc3MoKSxcbiAgICAgIGNvbnN0cnVjdG9yUGFzcyA9IG5ldyBDb25zdHJ1Y3RvclBhc3MoKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeUZpbGUoZmlsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZpbGVWZXJpZmllcyA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGUgPSBmaWxlTm9kZSwgLy8vXG4gICAgICAgIHN1Y2VzcyA9IGF3YWl0IHRvcExldmVsUGFzcy5ydW4obm9kZSwgY29udGV4dCk7XG5cbiAgaWYgKHN1Y2Vzcykge1xuICAgIGZpbGVWZXJpZmllcyA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gZmlsZVZlcmlmaWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5VGVybUFzQ29uc3RydWN0b3IodGVybSwgY29udGV4dCkge1xuICBsZXQgdGVybVZlcmlmaWVzQXNDb25zdHJ1Y3RvciA9IGZhbHNlO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIHN1Y2Nlc3MgPSBjb25zdHJ1Y3RvclBhc3MucnVuKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICBpZiAoc3VjY2Vzcykge1xuICAgIHRlcm1WZXJpZmllc0FzQ29uc3RydWN0b3IgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1WZXJpZmllc0FzQ29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlTdGF0ZW1lbnRBc0NvbWJpbmF0b3Ioc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWZXJpZmllc0FzQ29tYmluYXRvciA9IGZhbHNlO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBzdWNjZXNzID0gY29tYmluYXRvclBhc3MucnVuKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGlmIChzdWNjZXNzKSB7XG4gICAgc3RhdGVtZW50VmVyaWZpZXNBc0NvbWJpbmF0b3IgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZlcmlmaWVzQXNDb21iaW5hdG9yO1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeUZpbGUiLCJ2ZXJpZnlTdGF0ZW1lbnRBc0NvbWJpbmF0b3IiLCJ2ZXJpZnlUZXJtQXNDb25zdHJ1Y3RvciIsIm5vZGVRdWVyeSIsInF1ZXJ5VXRpbGl0aWVzIiwicnVsZU5vZGVRdWVyeSIsInRlcm1Ob2RlUXVlcnkiLCJ0eXBlTm9kZVF1ZXJ5IiwiZXJyb3JOb2RlUXVlcnkiLCJheGlvbU5vZGVRdWVyeSIsImxlbW1hTm9kZVF1ZXJ5Iiwic2VjdGlvbk5vZGVRdWVyeSIsInRoZW9yZW1Ob2RlUXVlcnkiLCJtZXRhTGVtbWFOb2RlUXVlcnkiLCJzdGF0ZW1lbnROb2RlUXVlcnkiLCJjb25qZWN0dXJlTm9kZVF1ZXJ5IiwibWV0YXRoZW9yZW1Ob2RlUXVlcnkiLCJ2YXJpYWJsZURlY2xhcmF0aW9uTm9kZVF1ZXJ5IiwiY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZVF1ZXJ5Iiwic2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZVF1ZXJ5IiwidHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZVF1ZXJ5IiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGVRdWVyeSIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlUXVlcnkiLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGVRdWVyeSIsIlRvcExldmVsUGFzcyIsIkFzeW5jUGFzcyIsIm1hcHMiLCJydW4iLCJlcnJvck5vZGUiLCJjb250ZXh0Iiwic3VjY2VzcyIsImVycm9yIiwiZXJyb3JWZXJpZmllcyIsImVycm9yRnJvbUVycm9yTm9kZSIsInZlcmlmeSIsInJ1bGVOb2RlIiwicnVsZSIsInJ1bGVWZXJpZmllcyIsInJ1bGVGcm9tUnVsZU5vZGUiLCJheGlvbU5vZGUiLCJheGlvbSIsImF4aW9tVmVyaWZpZXMiLCJheGlvbUZyb21BeGlvbU5vZGUiLCJsZW1tYU5vZGUiLCJsZW1tYSIsImxlbW1hVmVyaWZpZXMiLCJsZW1tYUZyb21MZW1tYU5vZGUiLCJzZWN0aW9uTm9kZSIsInNlY3Rpb24iLCJzZWN0aW9uVmVyaWZpZXMiLCJzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlIiwidGhlb3JlbU5vZGUiLCJ0aGVvcmVtIiwidGhlb3JlbVZlcmlmaWVzIiwidGhlb3JlbUZyb21UaGVvcmVtTm9kZSIsIm1ldGFMZW1tYU5vZGUiLCJtZXRhTGVtbWEiLCJtZXRhTGVtbWFWZXJpZmllcyIsIm1ldGFMZW1tYUZyb21NZXRhTGVtbWFOb2RlIiwiY29uamVjdHVyZU5vZGUiLCJjb25qZWN0dXJlIiwiY29uamVjdHVyZVZlcmlmaWVzIiwiY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZSIsIm1ldGF0aGVvcmVtTm9kZSIsIm1ldGF0aGVvcmVtIiwibWV0YXRoZW9yZW1WZXJpZmllcyIsIm1ldGF0aGVvcmVtRnJvbU1ldGF0aGVvcmVtTm9kZSIsInZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbiIsInZhcmlhYmxlRGVjbGFyYXRpb25WZXJpZmllcyIsInZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uVmVyaWZpZXMiLCJzaW1wbGVUeXBlRGVjbGFyYXRpb25Gcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RGVjbGFyYXRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb25WZXJpZmllcyIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbkZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbiIsImNvbWJpbmF0b3JEZWNsYXJhdGlvblZlcmlmaWVzIiwiY29tYmluYXRvckRlY2xhcmF0aW9uRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb24iLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uVmVyaWZpZXMiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvblZlcmlmaWVzIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvbkZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25WZXJpZmllcyIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIkNvbmJpbmF0b3JQYXNzIiwic3RhdGVtZW50Tm9kZSIsIm5vblRlcm1pbmFsTm9kZSIsImNoaWxkTm9kZXMiLCJnZXRDaGlsZE5vZGVzIiwiZGVzY2VuZGVkIiwiZGVzY2VuZCIsIlNpbXBsZVBhc3MiLCJzdGF0ZW1lbnQiLCJzdGF0ZWQiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInZhbGlkYXRlIiwidGVybU5vZGUiLCJ0ZXJtIiwidGVybUZyb21UZXJtTm9kZSIsInZhbGlkYXRlc0ZvcndhcmRzIiwidHlwZU5vZGUiLCJub21pbmFsVHlwZU5hbWUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJ0eXBlUHJlc2VudCIsImlzVHlwZVByZXNlbnRCeU5vbWluYWxUeXBlTmFtZSIsIkNvbnN0cnVjdG9yUGFzcyIsInRvcExldmVsUGFzcyIsImNvbWJpbmF0b3JQYXNzIiwiY29uc3RydWN0b3JQYXNzIiwiZmlsZU5vZGUiLCJmaWxlVmVyaWZpZXMiLCJub2RlIiwic3VjZXNzIiwidGVybVZlcmlmaWVzQXNDb25zdHJ1Y3RvciIsImdldE5vZGUiLCJzdGF0ZW1lbnRWZXJpZmllc0FzQ29tYmluYXRvciJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBeWFzQkE7ZUFBQUE7O1FBMEJOQztlQUFBQTs7UUFiQUM7ZUFBQUE7Ozs4QkFwYnNDO3VCQUVPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQjdELElBQU0sQUFBRUMsWUFBY0MsOEJBQWMsQ0FBNUJEO0FBRVIsSUFBTUUsZ0JBQWdCRixVQUFVLFVBQzFCRyxnQkFBZ0JILFVBQVUsVUFDMUJJLGdCQUFnQkosVUFBVSxVQUMxQkssaUJBQWlCTCxVQUFVLFdBQzNCTSxpQkFBaUJOLFVBQVUsV0FDM0JPLGlCQUFpQlAsVUFBVSxXQUMzQlEsbUJBQW1CUixVQUFVLGFBQzdCUyxtQkFBbUJULFVBQVUsYUFDN0JVLHFCQUFxQlYsVUFBVSxlQUMvQlcscUJBQXFCWCxVQUFVLGVBQy9CWSxzQkFBc0JaLFVBQVUsZ0JBQ2hDYSx1QkFBdUJiLFVBQVUsaUJB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
324
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3ZlcmlmeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQXN5bmNQYXNzLCBTaW1wbGVQYXNzLCBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIlxuXG5pbXBvcnQgeyB0ZXJtRnJvbVRlcm1Ob2RlLCBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHsgcnVsZUZyb21SdWxlTm9kZSxcbiAgICAgICAgIGVycm9yRnJvbUVycm9yTm9kZSxcbiAgICAgICAgIGF4aW9tRnJvbUF4aW9tTm9kZSxcbiAgICAgICAgIGxlbW1hRnJvbUxlbW1hTm9kZSxcbiAgICAgICAgIHNlY3Rpb25Gcm9tU2VjdGlvbk5vZGUsXG4gICAgICAgICB0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlLFxuICAgICAgICAgbWV0YUxlbW1hRnJvbU1ldGFMZW1tYU5vZGUsXG4gICAgICAgICBjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlLFxuICAgICAgICAgbWV0YXRoZW9yZW1Gcm9tTWV0YXRoZW9yZW1Ob2RlLFxuICAgICAgICAgdmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSxcbiAgICAgICAgIHNpbXBsZVR5cGVEZWNsYXJhdGlvbkZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLFxuICAgICAgICAgdHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsXG4gICAgICAgICBjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSxcbiAgICAgICAgIGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsXG4gICAgICAgICBjb21wbGV4VHlwZURlY2xhcmF0aW9uRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLFxuICAgICAgICAgbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgbm9kZVF1ZXJ5IH0gPSBxdWVyeVV0aWxpdGllcztcblxuY29uc3QgcnVsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9ydWxlXCIpLFxuICAgICAgdGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90ZXJtXCIpLFxuICAgICAgdHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90eXBlXCIpLFxuICAgICAgZXJyb3JOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZXJyb3JcIiksXG4gICAgICBheGlvbU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9heGlvbVwiKSxcbiAgICAgIGxlbW1hTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2xlbW1hXCIpLFxuICAgICAgc2VjdGlvbk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zZWN0aW9uXCIpLFxuICAgICAgdGhlb3JlbU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90aGVvcmVtXCIpLFxuICAgICAgbWV0YUxlbW1hTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL21ldGFMZW1tYVwiKSxcbiAgICAgIHN0YXRlbWVudE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnRcIiksXG4gICAgICBjb25qZWN0dXJlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2NvbmplY3R1cmVcIiksXG4gICAgICBtZXRhdGhlb3JlbU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9tZXRhdGhlb3JlbVwiKSxcbiAgICAgIHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdmFyaWFibGVEZWNsYXJhdGlvblwiKSxcbiAgICAgIGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9jb21iaW5hdG9yRGVjbGFyYXRpb25cIiksXG4gICAgICBzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc2ltcGxlVHlwZURlY2xhcmF0aW9uXCIpLFxuICAgICAgdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3R5cGVQcmVmaXhEZWNsYXJhdGlvblwiKSxcbiAgICAgIGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvY29uc3RydWN0b3JEZWNsYXJhdGlvblwiKSxcbiAgICAgIGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvY29tcGxleFR5cGVEZWNsYXJhdGlvblwiKSxcbiAgICAgIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL21ldGF2YXJpYWJsZURlY2xhcmF0aW9uXCIpO1xuXG5jbGFzcyBUb3BMZXZlbFBhc3MgZXh0ZW5kcyBBc3luY1Bhc3Mge1xuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IGVycm9yTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiBhc3luYyAoZXJyb3JOb2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgZXJyb3IgPSBlcnJvckZyb21FcnJvck5vZGUoZXJyb3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgZXJyb3JWZXJpZmllcyA9IGF3YWl0IGVycm9yLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChlcnJvclZlcmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogcnVsZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKHJ1bGVOb2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgcnVsZSA9IHJ1bGVGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBydWxlVmVyaWZpZXMgPSBhd2FpdCBydWxlLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChydWxlVmVyaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiBheGlvbU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKGF4aW9tTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGF4aW9tID0gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIGF4aW9tVmVyaWZpZXMgPSBhd2FpdCBheGlvbS52ZXJpZnkoKTtcblxuICAgICAgICBpZiAoYXhpb21WZXJpZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IGxlbW1hTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiBhc3luYyAobGVtbWFOb2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbGVtbWEgPSBsZW1tYUZyb21MZW1tYU5vZGUobGVtbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbGVtbWFWZXJpZmllcyA9IGF3YWl0IGxlbW1hLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChsZW1tYVZlcmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogc2VjdGlvbk5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3Qgc2VjdGlvbiA9IHNlY3Rpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBzZWN0aW9uVmVyaWZpZXMgPSBhd2FpdCBzZWN0aW9uLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChzZWN0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiB0aGVvcmVtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiBhc3luYyAodGhlb3JlbU5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCB0aGVvcmVtID0gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHRoZW9yZW1WZXJpZmllcyA9IGF3YWl0IHRoZW9yZW0udmVyaWZ5KCk7XG5cbiAgICAgICAgaWYgKHRoZW9yZW1WZXJpZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IG1ldGFMZW1tYU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKG1ldGFMZW1tYU5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBtZXRhTGVtbWEgPSBtZXRhTGVtbWFGcm9tTWV0YUxlbW1hTm9kZShtZXRhTGVtbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbWV0YUxlbW1hVmVyaWZpZXMgPSBhd2FpdCBtZXRhTGVtbWEudmVyaWZ5KCk7XG5cbiAgICAgICAgaWYgKG1ldGFMZW1tYVZlcmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogY29uamVjdHVyZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKGNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgY29uamVjdHVyZSA9IGNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUoY29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBjb25qZWN0dXJlVmVyaWZpZXMgPSBhd2FpdCBjb25qZWN0dXJlLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChjb25qZWN0dXJlVmVyaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiBtZXRhdGhlb3JlbU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKG1ldGF0aGVvcmVtTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IG1ldGF0aGVvcmVtID0gbWV0YXRoZW9yZW1Gcm9tTWV0YXRoZW9yZW1Ob2RlKG1ldGF0aGVvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIG1ldGF0aGVvcmVtVmVyaWZpZXMgPSBhd2FpdCBtZXRhdGhlb3JlbS52ZXJpZnkoKTtcblxuICAgICAgICBpZiAobWV0YXRoZW9yZW1WZXJpZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlUXVlcnksXG4gICAgICBydW46IGFzeW5jICh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlRGVjbGFyYXRpb24gPSB2YXJpYWJsZURlY2xhcmF0aW9uRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgdmFyaWFibGVEZWNsYXJhdGlvblZlcmlmaWVzID0gYXdhaXQgdmFyaWFibGVEZWNsYXJhdGlvbi52ZXJpZnkoKTtcblxuICAgICAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvblZlcmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiBhc3luYyAoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHNpbXBsZVR5cGVEZWNsYXJhdGlvbiA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbkZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBzaW1wbGVUeXBlRGVjbGFyYXRpb25WZXJpZmllcyA9IGF3YWl0IHNpbXBsZVR5cGVEZWNsYXJhdGlvbi52ZXJpZnkoKTtcblxuICAgICAgICBpZiAoc2ltcGxlVHlwZURlY2xhcmF0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiB0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlUXVlcnksXG4gICAgICBydW46IGFzeW5jICh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgdHlwZVByZWZpeERlY2xhcmF0aW9uID0gdHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHR5cGVQcmVmaXhEZWNsYXJhdGlvblZlcmlmaWVzID0gYXdhaXQgdHlwZVByZWZpeERlY2xhcmF0aW9uLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmICh0eXBlUHJlZml4RGVjbGFyYXRpb25WZXJpZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBjb21iaW5hdG9yRGVjbGFyYXRpb24gPSBjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZShjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgY29tYmluYXRvckRlY2xhcmF0aW9uVmVyaWZpZXMgPSBhd2FpdCBjb21iaW5hdG9yRGVjbGFyYXRpb24udmVyaWZ5KCk7XG5cbiAgICAgICAgaWYgKGNvbWJpbmF0b3JEZWNsYXJhdGlvblZlcmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uVmVyaWZpZXMgPSBhd2FpdCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChjb25zdHJ1Y3RvckRlY2xhcmF0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiBhc3luYyAoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBjb21wbGV4VHlwZURlY2xhcmF0aW9uID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbkZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIGNvbXBsZXhUeXBlRGVjbGFyYXRpb25WZXJpZmllcyA9IGF3YWl0IGNvbXBsZXhUeXBlRGVjbGFyYXRpb24udmVyaWZ5KCk7XG5cbiAgICAgICAgaWYgKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25WZXJpZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiBhc3luYyAobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25WZXJpZmllcyA9IGF3YWl0IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChtZXRhdmFyaWFibGVEZWNsYXJhdGlvblZlcmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIENvbmJpbmF0b3JQYXNzIGV4dGVuZHMgU2ltcGxlUGFzcyB7XG4gIHJ1bihzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSwgLy8vXG4gICAgICAgICAgZGVzY2VuZGVkID0gdGhpcy5kZXNjZW5kKGNoaWxkTm9kZXMsIGNvbnRleHQpO1xuXG4gICAgaWYgKGRlc2NlbmRlZCkge1xuICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH1cblxuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IHN0YXRlbWVudE5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBsZXQgc3RhdGVtZW50O1xuXG4gICAgICAgIGNvbnN0IHN0YXRlZCA9IHRydWU7XG5cbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50LnZhbGlkYXRlKHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46ICh0ZXJtTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGxldCB0ZXJtO1xuXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICB0ZXJtID0gdGVybS52YWxpZGF0ZShjb250ZXh0LCAoKSA9PiB7IC8vL1xuICAgICAgICAgIGNvbnN0IHZhbGlkYXRlc0ZvcndhcmRzID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiB2YWxpZGF0ZXNGb3J3YXJkcztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiB0eXBlTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAodHlwZU5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKSxcbiAgICAgICAgICAgICAgdHlwZVByZXNlbnQgPSBjb250ZXh0LmlzVHlwZVByZXNlbnRCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICAgIGlmICh0eXBlUHJlc2VudCkge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBDb25zdHJ1Y3RvclBhc3MgZXh0ZW5kcyBTaW1wbGVQYXNzIHtcbiAgcnVuKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRlcm1Ob2RlLCAgLy8vXG4gICAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksIC8vL1xuICAgICAgICAgIGRlc2NlbmRlZCA9IHRoaXMuZGVzY2VuZChjaGlsZE5vZGVzLCBjb250ZXh0KTtcblxuICAgIGlmIChkZXNjZW5kZWQpIHtcbiAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAodGVybU5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBsZXQgdGVybTtcblxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgdGVybSA9IHRlcm0udmFsaWRhdGUoY29udGV4dCwgKCkgPT4geyAvLy9cbiAgICAgICAgICBjb25zdCB2YWxpZGF0ZXNGb3J3YXJkcyA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzRm9yd2FyZHM7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKHR5cGVOb2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3Qgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCksXG4gICAgICAgICAgICAgIHR5cGVQcmVzZW50ID0gY29udGV4dC5pc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZVByZXNlbnQpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY29uc3QgdG9wTGV2ZWxQYXNzID0gbmV3IFRvcExldmVsUGFzcygpLFxuICAgICAgY29tYmluYXRvclBhc3MgPSBuZXcgQ29uYmluYXRvclBhc3MoKSxcbiAgICAgIGNvbnN0cnVjdG9yUGFzcyA9IG5ldyBDb25zdHJ1Y3RvclBhc3MoKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeUZpbGUoZmlsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZpbGVWZXJpZmllcyA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGUgPSBmaWxlTm9kZSwgLy8vXG4gICAgICAgIHN1Y2VzcyA9IGF3YWl0IHRvcExldmVsUGFzcy5ydW4obm9kZSwgY29udGV4dCk7XG5cbiAgaWYgKHN1Y2Vzcykge1xuICAgIGZpbGVWZXJpZmllcyA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gZmlsZVZlcmlmaWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5VGVybUFzQ29uc3RydWN0b3IodGVybSwgY29udGV4dCkge1xuICBsZXQgdGVybVZlcmlmaWVzQXNDb25zdHJ1Y3RvciA9IGZhbHNlO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIHN1Y2Nlc3MgPSBjb25zdHJ1Y3RvclBhc3MucnVuKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICBpZiAoc3VjY2Vzcykge1xuICAgIHRlcm1WZXJpZmllc0FzQ29uc3RydWN0b3IgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1WZXJpZmllc0FzQ29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlTdGF0ZW1lbnRBc0NvbWJpbmF0b3Ioc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWZXJpZmllc0FzQ29tYmluYXRvciA9IGZhbHNlO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBzdWNjZXNzID0gY29tYmluYXRvclBhc3MucnVuKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGlmIChzdWNjZXNzKSB7XG4gICAgc3RhdGVtZW50VmVyaWZpZXNBc0NvbWJpbmF0b3IgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZlcmlmaWVzQXNDb21iaW5hdG9yO1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeUZpbGUiLCJ2ZXJpZnlTdGF0ZW1lbnRBc0NvbWJpbmF0b3IiLCJ2ZXJpZnlUZXJtQXNDb25zdHJ1Y3RvciIsIm5vZGVRdWVyeSIsInF1ZXJ5VXRpbGl0aWVzIiwicnVsZU5vZGVRdWVyeSIsInRlcm1Ob2RlUXVlcnkiLCJ0eXBlTm9kZVF1ZXJ5IiwiZXJyb3JOb2RlUXVlcnkiLCJheGlvbU5vZGVRdWVyeSIsImxlbW1hTm9kZVF1ZXJ5Iiwic2VjdGlvbk5vZGVRdWVyeSIsInRoZW9yZW1Ob2RlUXVlcnkiLCJtZXRhTGVtbWFOb2RlUXVlcnkiLCJzdGF0ZW1lbnROb2RlUXVlcnkiLCJjb25qZWN0dXJlTm9kZVF1ZXJ5IiwibWV0YXRoZW9yZW1Ob2RlUXVlcnkiLCJ2YXJpYWJsZURlY2xhcmF0aW9uTm9kZVF1ZXJ5IiwiY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZVF1ZXJ5Iiwic2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZVF1ZXJ5IiwidHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZVF1ZXJ5IiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGVRdWVyeSIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlUXVlcnkiLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGVRdWVyeSIsIlRvcExldmVsUGFzcyIsIkFzeW5jUGFzcyIsIm1hcHMiLCJydW4iLCJlcnJvck5vZGUiLCJjb250ZXh0Iiwic3VjY2VzcyIsImVycm9yIiwiZXJyb3JGcm9tRXJyb3JOb2RlIiwiZXJyb3JWZXJpZmllcyIsInZlcmlmeSIsInJ1bGVOb2RlIiwicnVsZSIsInJ1bGVGcm9tUnVsZU5vZGUiLCJydWxlVmVyaWZpZXMiLCJheGlvbU5vZGUiLCJheGlvbSIsImF4aW9tRnJvbUF4aW9tTm9kZSIsImF4aW9tVmVyaWZpZXMiLCJsZW1tYU5vZGUiLCJsZW1tYSIsImxlbW1hRnJvbUxlbW1hTm9kZSIsImxlbW1hVmVyaWZpZXMiLCJzZWN0aW9uTm9kZSIsInNlY3Rpb24iLCJzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlIiwic2VjdGlvblZlcmlmaWVzIiwidGhlb3JlbU5vZGUiLCJ0aGVvcmVtIiwidGhlb3JlbUZyb21UaGVvcmVtTm9kZSIsInRoZW9yZW1WZXJpZmllcyIsIm1ldGFMZW1tYU5vZGUiLCJtZXRhTGVtbWEiLCJtZXRhTGVtbWFGcm9tTWV0YUxlbW1hTm9kZSIsIm1ldGFMZW1tYVZlcmlmaWVzIiwiY29uamVjdHVyZU5vZGUiLCJjb25qZWN0dXJlIiwiY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZSIsImNvbmplY3R1cmVWZXJpZmllcyIsIm1ldGF0aGVvcmVtTm9kZSIsIm1ldGF0aGVvcmVtIiwibWV0YXRoZW9yZW1Gcm9tTWV0YXRoZW9yZW1Ob2RlIiwibWV0YXRoZW9yZW1WZXJpZmllcyIsInZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbiIsInZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZURlY2xhcmF0aW9uVmVyaWZpZXMiLCJzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJzaW1wbGVUeXBlRGVjbGFyYXRpb25WZXJpZmllcyIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RGVjbGFyYXRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb25Gcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSIsInR5cGVQcmVmaXhEZWNsYXJhdGlvblZlcmlmaWVzIiwiY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbiIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckRlY2xhcmF0aW9uVmVyaWZpZXMiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb24iLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvblZlcmlmaWVzIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvbkZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25WZXJpZmllcyIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25WZXJpZmllcyIsIkNvbmJpbmF0b3JQYXNzIiwiU2ltcGxlUGFzcyIsInN0YXRlbWVudE5vZGUiLCJub25UZXJtaW5hbE5vZGUiLCJjaGlsZE5vZGVzIiwiZ2V0Q2hpbGROb2RlcyIsImRlc2NlbmRlZCIsImRlc2NlbmQiLCJzdGF0ZW1lbnQiLCJzdGF0ZWQiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInZhbGlkYXRlIiwidGVybU5vZGUiLCJ0ZXJtIiwidGVybUZyb21UZXJtTm9kZSIsInZhbGlkYXRlc0ZvcndhcmRzIiwidHlwZU5vZGUiLCJub21pbmFsVHlwZU5hbWUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJ0eXBlUHJlc2VudCIsImlzVHlwZVByZXNlbnRCeU5vbWluYWxUeXBlTmFtZSIsIkNvbnN0cnVjdG9yUGFzcyIsInRvcExldmVsUGFzcyIsImNvbWJpbmF0b3JQYXNzIiwiY29uc3RydWN0b3JQYXNzIiwiZmlsZU5vZGUiLCJmaWxlVmVyaWZpZXMiLCJub2RlIiwic3VjZXNzIiwidGVybVZlcmlmaWVzQXNDb25zdHJ1Y3RvciIsImdldE5vZGUiLCJzdGF0ZW1lbnRWZXJpZmllc0FzQ29tYmluYXRvciJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBeWFzQkE7ZUFBQUE7O1FBMEJOQztlQUFBQTs7UUFiQUM7ZUFBQUE7OztnQ0FwYnNDO3lCQUVPO0FBa0I3RCxNQUFNLEVBQUVDLFNBQVMsRUFBRSxHQUFHQyw4QkFBYztBQUVwQyxNQUFNQyxnQkFBZ0JGLFVBQVUsVUFDMUJHLGdCQUFnQkgsVUFBVSxVQUMxQkksZ0JBQWdCSixVQUFVLFVBQzFCSyxpQkFBaUJMLFVBQVUsV0FDM0JNLGlCQUFpQk4sVUFBVSxXQUMzQk8saUJBQWlCUCxVQUFVLFdBQzNCUSxtQkFBbUJSLFVBQVUsYUFDN0JTLG1CQUFtQlQsVUFBVSxhQUM3QlUscUJBQXFCVixVQUFVLGVBQy9CVyxxQkFBcUJYLFVBQVUsZUFDL0JZLHNCQUFzQlosVUFBVSxnQkFDaENhLHVCQUF1QmIsVUFBVSxpQkFDakNjLCtCQUErQmQsVUFBVSx5QkFDekNlLGlDQUFpQ2YsVUFBVSwyQkFDM0NnQixpQ0FBaUNoQixVQUFVLDJCQUMzQ2lCLGlDQUFpQ2pCLFVBQVUsMkJBQzNDa0Isa0NBQWtDbEIsVUFBVSw0QkFDNUNtQixrQ0FBa0NuQixVQUFVLDRCQUM1Q29CLG1DQUFtQ3BCLFVBQVU7QUFFbkQsTUFBTXFCLHFCQUFxQkMseUJBQVM7SUFDbEMsT0FBT0MsT0FBTztRQUNaO1lBQ0V2QixXQUFXSztZQUNYbUIsS0FBSyxPQUFPQyxXQUFXQztnQkFDckIsSUFBSUMsVUFBVTtnQkFFZCxNQUFNQyxRQUFRQyxJQUFBQSwyQkFBa0IsRUFBQ0osV0FBV0MsVUFDdENJLGdCQUFnQixNQUFNRixNQUFNRyxNQUFNO2dCQUV4QyxJQUFJRCxlQUFlO29CQUNqQkgsVUFBVTtnQkFDWjtnQkFFQSxPQUFPQTtZQUNUO1FBQ0Y7UUFDQTtZQUNFM0IsV0FBV0U7WUFDWHNCLEtBQUssT0FBT1EsVUFBVU47Z0JBQ3BCLElBQUlDLFVBQVU7Z0JBRWQsTUFBTU0sT0FBT0MsSUFBQUEseUJBQWdCLEVBQUNGLFVBQVVOLFVBQ2xDUyxlQUFlLE1BQU1GLEtBQUtGLE1BQU07Z0JBRXRDLElBQUlJLGNBQWM7b0JBQ2hCUixVQUFVO2dCQUNaO2dCQUVBLE9BQU9BO1lBQ1Q7UUFDRjtRQUNBO1lBQ0UzQixXQUFXTTtZQUNYa0IsS0FBSyxPQUFPWSxXQUFXVjtnQkFDckIsSUFBSUMsVUFBVTtnQkFFZCxNQUFNVSxRQUFRQyxJQUFBQSwyQkFBa0IsRUFBQ0YsV0FBV1YsVUFDdENhLGdCQUFnQixNQUFNRixNQUFNTixNQUFNO2dCQUV4QyxJQUFJUSxlQUFlO29CQUNqQlosVUFBVTtnQkFDWjtnQkFFQSxPQUFPQTtZQUNUO1FBQ0Y7UUFDQTtZQUNFM0IsV0FBV087WUFDWGlCLEtBQUssT0FBT2dCLFdBQVdkO2dCQUNyQixJQUFJQyxVQUFVO2dCQUVkLE1BQU1jLFFBQVFDLElBQUFBLDJCQUFrQixFQUFDRixXQUFXZCxVQUN0Q2lCLGdCQUFnQixNQUFNRixNQUFNVixNQUFNO2dCQUV4QyxJQUFJWSxlQUFlO29CQUNqQmhCLFVBQVU7Z0JBQ1o7Z0JBRUEsT0FBT0E7WUFDVDtRQUNGO1FBQ0E7WUFDRTNCLFdBQVdRO1lBQ1hnQixLQUFLLE9BQU9vQixhQUFhbEI7Z0JBQ3ZCLElBQUlDLFVBQVU7Z0JBRWQsTUFBTWtCLFVBQVVDLElBQUFBLCtCQUFzQixFQUFDRixhQUFhbEIsVUFDOUNxQixrQkFBa0IsTUFBTUYsUUFBUWQsTUFBTTtnQkFFNUMsSUFBSWdCLGlCQUFpQjtvQkFDbkJwQixVQUFVO2dCQUNaO2dCQUVBLE9BQU9BO1lBQ1Q7UUFDRjtRQUNBO1lBQ0UzQixXQUFXUztZQUNYZSxLQUFLLE9BQU93QixhQUFhdEI7Z0JBQ3ZCLElBQUlDLFVBQVU7Z0JBRWQsTUFBTXNCLFVBQVVDLElBQUFBLCtCQUFzQixFQUFDRixhQUFhdEIsVUFDOUN5QixrQkFBa0IsTUFBTUYsUUFBUWxCLE1BQU07Z0JBRTVDLElBQUlvQixpQkFBaUI7b0JBQ25CeEIsVUFBVTtnQkFDWjtnQkFFQSxPQUFPQTtZQUNUO1FBQ0Y7UUFDQTtZQUNFM0IsV0FBV1U7WUFDWGMsS0FBSyxPQUFPNEIsZUFBZTFCO2dCQUN6QixJQUFJQyxVQUFVO2dCQUVkLE1BQU0wQixZQUFZQyxJQUFBQSxtQ0FBMEIsRUFBQ0YsZUFBZTFCLFVBQ3RENkIsb0JBQW9CLE1BQU1GLFVBQVV0QixNQUFNO2dCQUVoRCxJQUFJd0IsbUJBQW1CO29CQUNyQjVCLFVBQVU7Z0JBQ1o7Z0JBRUEsT0FBT0E7WUFDVDtRQUNGO1FBQ0E7WUFDRTNCLFdBQVdZO1lBQ1hZLEtBQUssT0FBT2dDLGdCQUFnQjlCO2dCQUMxQixJQUFJQyxVQUFVO2dCQUVkLE1BQU04QixhQUFhQyxJQUFBQSxxQ0FBNEIsRUFBQ0YsZ0JBQWdCOUIsVUFDMURpQyxxQkFBcUIsTUFBTUYsV0FBVzFCLE1BQU07Z0JBRWxELElBQUk0QixvQkFBb0I7b0JBQ3RCaEMsVUFBVTtnQkFDWjtnQkFFQSxPQUFPQTtZQUNUO1FBQ0Y7UUFDQTtZQUNFM0IsV0FBV2E7WUFDWFcsS0FBSyxPQUFPb0MsaUJBQWlCbEM7Z0JBQzNCLElBQUlDLFVBQVU7Z0JBRWQsTUFBTWtDLGNBQWNDLElBQUFBLHVDQUE4QixFQUFDRixpQkFBaUJsQyxVQUM5RHFDLHNCQUFzQixNQUFNRixZQUFZOUIsTUFBTTtnQkFFcEQsSUFBSWdDLHFCQUFxQjtvQkFDdkJwQyxVQUFVO2dCQUNaO2dCQUVBLE9BQU9BO1lBQ1Q7UUFDRjtRQUNBO1lBQ0UzQixXQUFXYztZQUNYVSxLQUFLLE9BQU93Qyx5QkFBeUJ0QztnQkFDbkMsSUFBSUMsVUFBVTtnQkFFZCxNQUFNc0Msc0JBQXNCQyxJQUFBQSx1REFBOEMsRUFBQ0YseUJBQXlCdEMsVUFDOUZ5Qyw4QkFBOEIsTUFBTUYsb0JBQW9CbEMsTUFBTTtnQkFFcEUsSUFBSW9DLDZCQUE2QjtvQkFDL0J4QyxVQUFVO2dCQUNaO2dCQUVBLE9BQU9BO1lBQ1Q7UUFDRjtRQUNBO1lBQ0UzQixXQUFXZ0I7WUFDWFEsS0FBSyxPQUFPNEMsMkJBQTJCMUM7Z0JBQ3JDLElBQUlDLFVBQVU7Z0JBRWQsTUFBTTBDLHdCQUF3QkMsSUFBQUEsMkRBQWtELEVBQUNGLDJCQUEyQjFDLFVBQ3RHNkMsZ0NBQWdDLE1BQU1GLHNCQUFzQnRDLE1BQU07Z0JBRXhFLElBQUl3QywrQkFBK0I7b0JBQ2pDNUMsVUFBVTtnQkFDWjtnQkFFQSxPQUFPQTtZQUNUO1FBQ0Y7UUFDQTtZQUNFM0IsV0FBV2lCO1lBQ1hPLEtBQUssT0FBT2dELDJCQUEyQjlDO2dCQUNyQyxJQUFJQyxVQUFVO2dCQUVkLE1BQU04Qyx3QkFBd0JDLElBQUFBLDJEQUFrRCxFQUFDRiwyQkFBMkI5QyxVQUN0R2lELGdDQUFnQyxNQUFNRixzQkFBc0IxQyxNQUFNO2dCQUV4RSxJQUFJNEMsK0JBQStCO29CQUNqQ2hELFVBQVU7Z0JBQ1o7Z0JBRUEsT0FBT0E7WUFDVDtRQUNGO1FBQ0E7WUFDRTNCLFdBQVdlO1lBQ1hTLEtBQUssT0FBT29ELDJCQUEyQmxEO2dCQUNyQyxJQUFJQyxVQUFVO2dCQUVkLE1BQU1rRCx3QkFBd0JDLElBQUFBLDJEQUFrRCxFQUFDRiwyQkFBMkJsRCxVQUN0R3FELGdDQUFnQyxNQUFNRixzQkFBc0I5QyxNQUFNO2dCQUV4RSxJQUFJZ0QsK0JBQStCO29CQUNqQ3BELFVBQVU7Z0JBQ1o7Z0JBRUEsT0FBT0E7WUFDVDtRQUNGO1FBQ0E7WUFDRTNCLFdBQVdrQjtZQUNYTSxLQUFLLE9BQU93RCw0QkFBNEJ0RDtnQkFDdEMsSUFBSUMsVUFBVTtnQkFFZCxNQUFNc0QseUJBQXlCQyxJQUFBQSw2REFBb0QsRUFBQ0YsNEJBQTRCdEQsVUFDMUd5RCxpQ0FBaUMsTUFBTUYsdUJBQXVCbEQsTUFBTTtnQkFFMUUsSUFBSW9ELGdDQUFnQztvQkFDbEN4RCxVQUFVO2dCQUNaO2dCQUVBLE9BQU9BO1lBQ1Q7UUFDRjtRQUNBO1lBQ0UzQixXQUFXbUI7WUFDWEssS0FBSyxPQUFPNEQsNEJBQTRCMUQ7Z0JBQ3RDLElBQUlDLFVBQVU7Z0JBRWQsTUFBTTBELHlCQUF5QkMsSUFBQUEsNkRBQW9ELEVBQUNGLDRCQUE0QjFELFVBQzFHNkQsaUNBQWlDLE1BQU1GLHVCQUF1QnRELE1BQU07Z0JBRTFFLElBQUl3RCxnQ0FBZ0M7b0JBQ2xDNUQsVUFBVTtnQkFDWjtnQkFFQSxPQUFPQTtZQUNUO1FBQ0Y7UUFDQTtZQUNFM0IsV0FBV29CO1lBQ1hJLEtBQUssT0FBT2dFLDZCQUE2QjlEO2dCQUN2QyxJQUFJQyxVQUFVO2dCQUVkLE1BQU04RCwwQkFBMEJDLElBQUFBLCtEQUFzRCxFQUFDRiw2QkFBNkI5RCxVQUM5R2lFLGtDQUFrQyxNQUFNRix3QkFBd0IxRCxNQUFNO2dCQUU1RSxJQUFJNEQsaUNBQWlDO29CQUNuQ2hFLFVBQVU7Z0JBQ1o7Z0JBRUEsT0FBT0E7WUFDVDtRQUNGO0tBQ0QsQ0FBQztBQUNKO0FBRUEsTUFBTWlFLHVCQUF1QkMsMEJBQVU7SUFDckNyRSxJQUFJc0UsYUFBYSxFQUFFcEUsT0FBTyxFQUFFO1FBQzFCLElBQUlDLFVBQVU7UUFFZCxNQUFNb0Usa0JBQWtCRCxlQUNsQkUsYUFBYUQsZ0JBQWdCRSxhQUFhLElBQzFDQyxZQUFZLElBQUksQ0FBQ0MsT0FBTyxDQUFDSCxZQUFZdEU7UUFFM0MsSUFBSXdFLFdBQVc7WUFDYnZFLFVBQVU7UUFDWjtRQUVBLE9BQU9BO0lBQ1Q7SUFFQSxPQUFPSixPQUFPO1FBQ1o7WUFDRXZCLFdBQVdXO1lBQ1hhLEtBQUssQ0FBQ3NFLGVBQWVwRTtnQkFDbkIsSUFBSUMsVUFBVTtnQkFFZCxJQUFJeUU7Z0JBRUosTUFBTUMsU0FBUztnQkFFZkQsWUFBWUUsSUFBQUEsbUNBQTBCLEVBQUNSLGVBQWVwRTtnQkFFdEQwRSxZQUFZQSxVQUFVRyxRQUFRLENBQUNGLFFBQVEzRTtnQkFFdkMsSUFBSTBFLGNBQWMsTUFBTTtvQkFDdEJ6RSxVQUFVO2dCQUNaO2dCQUVBLE9BQU9BO1lBQ1Q7UUFDRjtRQUNBO1lBQ0UzQixXQUFXRztZQUNYcUIsS0FBSyxDQUFDZ0YsVUFBVTlFO2dCQUNkLElBQUlDLFVBQVU7Z0JBRWQsSUFBSThFO2dCQUVKQSxPQUFPQyxJQUFBQSx5QkFBZ0IsRUFBQ0YsVUFBVTlFO2dCQUVsQytFLE9BQU9BLEtBQUtGLFFBQVEsQ0FBQzdFLFNBQVM7b0JBQzVCLE1BQU1pRixvQkFBb0I7b0JBRTFCLE9BQU9BO2dCQUNUO2dCQUVBLElBQUlGLFNBQVMsTUFBTTtvQkFDakI5RSxVQUFVO2dCQUNaO2dCQUVBLE9BQU9BO1lBQ1Q7UUFDRjtRQUNBO1lBQ0UzQixXQUFXSTtZQUNYb0IsS0FBSyxDQUFDb0YsVUFBVWxGO2dCQUNkLElBQUlDLFVBQVU7Z0JBRWQsTUFBTWtGLGtCQUFrQkQsU0FBU0Usa0JBQWtCLElBQzdDQyxjQUFjckYsUUFBUXNGLDhCQUE4QixDQUFDSDtnQkFFM0QsSUFBSUUsYUFBYTtvQkFDZnBGLFVBQVU7Z0JBQ1o7Z0JBRUEsT0FBT0E7WUFDVDtRQUNGO0tBQ0QsQ0FBQztBQUNKO0FBRUEsTUFBTXNGLHdCQUF3QnBCLDBCQUFVO0lBQ3RDckUsSUFBSWdGLFFBQVEsRUFBRTlFLE9BQU8sRUFBRTtRQUNyQixJQUFJQyxVQUFVO1FBRWQsTUFBTW9FLGtCQUFrQlMsVUFDbEJSLGFBQWFELGdCQUFnQkUsYUFBYSxJQUMxQ0MsWUFBWSxJQUFJLENBQUNDLE9BQU8sQ0FBQ0gsWUFBWXRFO1FBRTNDLElBQUl3RSxXQUFXO1lBQ2J2RSxVQUFVO1FBQ1o7UUFFQSxPQUFPQTtJQUNUO0lBRUEsT0FBT0osT0FBTztRQUNaO1lBQ0V2QixXQUFXRztZQUNYcUIsS0FBSyxDQUFDZ0YsVUFBVTlFO2dCQUNkLElBQUlDLFVBQVU7Z0JBRWQsSUFBSThFO2dCQUVKQSxPQUFPQyxJQUFBQSx5QkFBZ0IsRUFBQ0YsVUFBVTlFO2dCQUVsQytFLE9BQU9BLEtBQUtGLFFBQVEsQ0FBQzdFLFNBQVM7b0JBQzVCLE1BQU1pRixvQkFBb0I7b0JBRTFCLE9BQU9BO2dCQUNUO2dCQUVBLElBQUlGLFNBQVMsTUFBTTtvQkFDakI5RSxVQUFVO2dCQUNaO2dCQUVBLE9BQU9BO1lBQ1Q7UUFDRjtRQUNBO1lBQ0UzQixXQUFXSTtZQUNYb0IsS0FBSyxDQUFDb0YsVUFBVWxGO2dCQUNkLElBQUlDLFVBQVU7Z0JBRWQsTUFBTWtGLGtCQUFrQkQsU0FBU0Usa0JBQWtCLElBQzdDQyxjQUFjckYsUUFBUXNGLDhCQUE4QixDQUFDSDtnQkFFM0QsSUFBSUUsYUFBYTtvQkFDZnBGLFVBQVU7Z0JBQ1o7Z0JBRUEsT0FBT0E7WUFDVDtRQUNGO0tBQ0QsQ0FBQztBQUNKO0FBRUEsTUFBTXVGLGVBQWUsSUFBSTdGLGdCQUNuQjhGLGlCQUFpQixJQUFJdkIsa0JBQ3JCd0Isa0JBQWtCLElBQUlIO0FBRXJCLGVBQWVwSCxXQUFXd0gsUUFBUSxFQUFFM0YsT0FBTztJQUNoRCxJQUFJNEYsZUFBZTtJQUVuQixNQUFNQyxPQUFPRixVQUNQRyxTQUFTLE1BQU1OLGFBQWExRixHQUFHLENBQUMrRixNQUFNN0Y7SUFFNUMsSUFBSThGLFFBQVE7UUFDVkYsZUFBZTtJQUNqQjtJQUVBLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTdkgsd0JBQXdCMEcsSUFBSSxFQUFFL0UsT0FBTztJQUNuRCxJQUFJK0YsNEJBQTRCO0lBRWhDLE1BQU1qQixXQUFXQyxLQUFLaUIsT0FBTyxJQUN2Qi9GLFVBQVV5RixnQkFBZ0I1RixHQUFHLENBQUNnRixVQUFVOUU7SUFFOUMsSUFBSUMsU0FBUztRQUNYOEYsNEJBQTRCO0lBQzlCO0lBRUEsT0FBT0E7QUFDVDtBQUVPLFNBQVMzSCw0QkFBNEJzRyxTQUFTLEVBQUUxRSxPQUFPO0lBQzVELElBQUlpRyxnQ0FBZ0M7SUFFcEMsTUFBTTdCLGdCQUFnQk0sVUFBVXNCLE9BQU8sSUFDakMvRixVQUFVd0YsZUFBZTNGLEdBQUcsQ0FBQ3NFLGVBQWVwRTtJQUVsRCxJQUFJQyxTQUFTO1FBQ1hnRyxnQ0FBZ0M7SUFDbEM7SUFFQSxPQUFPQTtBQUNUIn0=