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
@@ -8,399 +8,194 @@ Object.defineProperty(exports, "default", {
8
8
  return _default;
9
9
  }
10
10
  });
11
- var _occamlanguages = require("occam-languages");
12
- var _elements = require("../elements");
13
- var _context = require("../utilities/context");
14
- var _metaTypeNames = require("../metaTypeNames");
15
- var _metaTypes = require("../metaTypes");
16
- var _unify = require("../process/unify");
17
- var _json = require("../utilities/json");
18
- function _assert_this_initialized(self) {
19
- if (self === void 0) {
20
- throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
11
+ const _occamlanguages = require("occam-languages");
12
+ const _elements = require("../elements");
13
+ const _context = require("../utilities/context");
14
+ const _metaTypeNames = require("../metaTypeNames");
15
+ const _metaTypes = require("../metaTypes");
16
+ const _unify = require("../process/unify");
17
+ const _json = require("../utilities/json");
18
+ const _default = (0, _elements.define)(class Reference extends _occamlanguages.Element {
19
+ constructor(context, string, node, metavariable){
20
+ super(context, string, node);
21
+ this.metavariable = metavariable;
21
22
  }
22
- return self;
23
- }
24
- function _call_super(_this, derived, args) {
25
- derived = _get_prototype_of(derived);
26
- return _possible_constructor_return(_this, _is_native_reflect_construct() ? Reflect.construct(derived, args || [], _get_prototype_of(_this).constructor) : derived.apply(_this, args));
27
- }
28
- function _class_call_check(instance, Constructor) {
29
- if (!(instance instanceof Constructor)) {
30
- throw new TypeError("Cannot call a class as a function");
23
+ getMetavariable() {
24
+ return this.metavariable;
31
25
  }
32
- }
33
- function _construct(Parent, args, Class) {
34
- if (_is_native_reflect_construct()) {
35
- _construct = Reflect.construct;
36
- } else {
37
- _construct = function construct(Parent, args, Class) {
38
- var a = [
39
- null
40
- ];
41
- a.push.apply(a, args);
42
- var Constructor = Function.bind.apply(Parent, a);
43
- var instance = new Constructor();
44
- if (Class) _set_prototype_of(instance, Class.prototype);
45
- return instance;
46
- };
26
+ getReferenceNode() {
27
+ const node = this.getNode(), referenceNode = node; ///
28
+ return referenceNode;
47
29
  }
48
- return _construct.apply(null, arguments);
49
- }
50
- function _defineProperties(target, props) {
51
- for(var i = 0; i < props.length; i++){
52
- var descriptor = props[i];
53
- descriptor.enumerable = descriptor.enumerable || false;
54
- descriptor.configurable = true;
55
- if ("value" in descriptor) descriptor.writable = true;
56
- Object.defineProperty(target, descriptor.key, descriptor);
30
+ getName() {
31
+ return this.metavariable.getName();
57
32
  }
58
- }
59
- function _create_class(Constructor, protoProps, staticProps) {
60
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
61
- if (staticProps) _defineProperties(Constructor, staticProps);
62
- return Constructor;
63
- }
64
- function _define_property(obj, key, value) {
65
- if (key in obj) {
66
- Object.defineProperty(obj, key, {
67
- value: value,
68
- enumerable: true,
69
- configurable: true,
70
- writable: true
71
- });
72
- } else {
73
- obj[key] = value;
33
+ getMetavariableName() {
34
+ const metavariableName = this.metavariable.getName();
35
+ return metavariableName;
74
36
  }
75
- return obj;
76
- }
77
- function _get_prototype_of(o) {
78
- _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {
79
- return o.__proto__ || Object.getPrototypeOf(o);
80
- };
81
- return _get_prototype_of(o);
82
- }
83
- function _inherits(subClass, superClass) {
84
- if (typeof superClass !== "function" && superClass !== null) {
85
- throw new TypeError("Super expression must either be null or a function");
37
+ getMetavariableNode() {
38
+ const metavariableNode = this.metavariable.getNode();
39
+ return metavariableNode;
86
40
  }
87
- subClass.prototype = Object.create(superClass && superClass.prototype, {
88
- constructor: {
89
- value: subClass,
90
- writable: true,
91
- configurable: true
92
- }
93
- });
94
- if (superClass) _set_prototype_of(subClass, superClass);
95
- }
96
- function _is_native_function(fn) {
97
- return Function.toString.call(fn).indexOf("[native code]") !== -1;
98
- }
99
- function _possible_constructor_return(self, call) {
100
- if (call && (_type_of(call) === "object" || typeof call === "function")) {
101
- return call;
41
+ matchReferenceNode(assertionNode) {
42
+ const assertionNodeA = assertionNode; ///
43
+ assertionNode = this.getReferenceNode();
44
+ const assertionNodeB = assertionNode, assertionNodeAAMatchesReferenceBNodeB = assertionNodeA.match(assertionNodeB), equalTo = assertionNodeAAMatchesReferenceBNodeB; ///
45
+ return equalTo;
102
46
  }
103
- return _assert_this_initialized(self);
104
- }
105
- function _set_prototype_of(o, p) {
106
- _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {
107
- o.__proto__ = p;
108
- return o;
109
- };
110
- return _set_prototype_of(o, p);
111
- }
112
- function _type_of(obj) {
113
- "@swc/helpers - typeof";
114
- return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
115
- }
116
- function _wrap_native_super(Class) {
117
- var _cache = typeof Map === "function" ? new Map() : undefined;
118
- _wrap_native_super = function wrapNativeSuper(Class) {
119
- if (Class === null || !_is_native_function(Class)) return Class;
120
- if (typeof Class !== "function") {
121
- throw new TypeError("Super expression must either be null or a function");
122
- }
123
- if (typeof _cache !== "undefined") {
124
- if (_cache.has(Class)) return _cache.get(Class);
125
- _cache.set(Class, Wrapper);
47
+ findValidRefernece(context) {
48
+ const metavariableNode = this.getMetavariableNode(), reference = context.findReferenceByMetavariableNode(metavariableNode), validReference = reference; ///
49
+ return validReference;
50
+ }
51
+ isEqualTo(reference) {
52
+ const referenceNode = reference.getNode(), referenceNodeMatches = this.matchReferenceNode(referenceNode), equalTo = referenceNodeMatches; ///
53
+ return equalTo;
54
+ }
55
+ compareParameter(parameter) {
56
+ let comparesToParamter = false;
57
+ const parameterName = parameter.getName();
58
+ if (parameterName !== null) {
59
+ const metavariableName = this.getMetavariableName();
60
+ if (parameterName === metavariableName) {
61
+ comparesToParamter = true;
62
+ }
126
63
  }
127
- function Wrapper() {
128
- return _construct(Class, arguments, _get_prototype_of(this).constructor);
64
+ return comparesToParamter;
65
+ }
66
+ compareMetavariable(metavariable) {
67
+ let comparesToMetavariable = false;
68
+ let metavariableName;
69
+ metavariableName = this.metavariable.getName();
70
+ const metavariableNameA = metavariableName ///
71
+ ;
72
+ metavariableName = metavariable.getName();
73
+ const metavariableNameB = metavariableName; ///
74
+ if (metavariableNameA === metavariableNameB) {
75
+ comparesToMetavariable = true;
129
76
  }
130
- Wrapper.prototype = Object.create(Class.prototype, {
131
- constructor: {
132
- value: Wrapper,
133
- enumerable: false,
134
- writable: true,
135
- configurable: true
136
- }
137
- });
138
- return _set_prototype_of(Wrapper, Class);
139
- };
140
- return _wrap_native_super(Class);
141
- }
142
- function _is_native_reflect_construct() {
143
- try {
144
- var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
145
- } catch (_) {}
146
- return (_is_native_reflect_construct = function() {
147
- return !!result;
148
- })();
149
- }
150
- var _Reference;
151
- var _default = (0, _elements.define)((_Reference = /*#__PURE__*/ function(Element) {
152
- _inherits(Reference, Element);
153
- function Reference(context, string, node, metavariable) {
154
- _class_call_check(this, Reference);
155
- var _this;
156
- _this = _call_super(this, Reference, [
157
- context,
158
- string,
159
- node
160
- ]);
161
- _this.metavariable = metavariable;
162
- return _this;
77
+ return comparesToMetavariable;
163
78
  }
164
- _create_class(Reference, [
165
- {
166
- key: "getMetavariable",
167
- value: function getMetavariable() {
168
- return this.metavariable;
169
- }
170
- },
171
- {
172
- key: "getReferenceNode",
173
- value: function getReferenceNode() {
174
- var node = this.getNode(), referenceNode = node; ///
175
- return referenceNode;
176
- }
177
- },
178
- {
179
- key: "getName",
180
- value: function getName() {
181
- return this.metavariable.getName();
182
- }
183
- },
184
- {
185
- key: "getMetavariableName",
186
- value: function getMetavariableName() {
187
- var metavariableName = this.metavariable.getName();
188
- return metavariableName;
189
- }
190
- },
191
- {
192
- key: "getMetavariableNode",
193
- value: function getMetavariableNode() {
194
- var metavariableNode = this.metavariable.getNode();
195
- return metavariableNode;
196
- }
197
- },
198
- {
199
- key: "matchReferenceNode",
200
- value: function matchReferenceNode(assertionNode) {
201
- var assertionNodeA = assertionNode; ///
202
- assertionNode = this.getReferenceNode();
203
- var assertionNodeB = assertionNode, assertionNodeAAMatchesReferenceBNodeB = assertionNodeA.match(assertionNodeB), equalTo = assertionNodeAAMatchesReferenceBNodeB; ///
204
- return equalTo;
205
- }
206
- },
207
- {
208
- key: "findValidRefernece",
209
- value: function findValidRefernece(context) {
210
- var metavariableNode = this.getMetavariableNode(), reference = context.findReferenceByMetavariableNode(metavariableNode), validReference = reference; ///
211
- return validReference;
212
- }
213
- },
214
- {
215
- key: "isEqualTo",
216
- value: function isEqualTo(reference) {
217
- var referenceNode = reference.getNode(), referenceNodeMatches = this.matchReferenceNode(referenceNode), equalTo = referenceNodeMatches; ///
218
- return equalTo;
219
- }
220
- },
221
- {
222
- key: "compareParameter",
223
- value: function compareParameter(parameter) {
224
- var comparesToParamter = false;
225
- var parameterName = parameter.getName();
226
- if (parameterName !== null) {
227
- var metavariableName = this.getMetavariableName();
228
- if (parameterName === metavariableName) {
229
- comparesToParamter = true;
230
- }
231
- }
232
- return comparesToParamter;
233
- }
234
- },
235
- {
236
- key: "compareMetavariable",
237
- value: function compareMetavariable(metavariable) {
238
- var comparesToMetavariable = false;
239
- var metavariableName;
240
- metavariableName = this.metavariable.getName();
241
- var metavariableNameA = metavariableName ///
242
- ;
243
- metavariableName = metavariable.getName();
244
- var metavariableNameB = metavariableName; ///
245
- if (metavariableNameA === metavariableNameB) {
246
- comparesToMetavariable = true;
247
- }
248
- return comparesToMetavariable;
249
- }
250
- },
251
- {
252
- key: "compareMetavariableName",
253
- value: function compareMetavariableName(metavariableName) {
254
- return this.metavariable.compareMetavariableName(metavariableName);
255
- }
256
- },
257
- {
258
- key: "matchMetavariableNode",
259
- value: function matchMetavariableNode(metavariableNode) {
260
- return this.metavariable.matchMetavariableNode(metavariableNode);
261
- }
262
- },
263
- {
264
- key: "validate",
265
- value: function validate(context) {
266
- var reference = null;
267
- var referenceString = this.getString(); ///
268
- context.trace("Validating the '".concat(referenceString, "' reference..."));
269
- var validRefernece = this.findValidRefernece(context);
270
- if (validRefernece !== null) {
271
- reference = validRefernece; ///
272
- context.debug("...the '".concat(referenceString, "' reference is alrady valid."));
273
- } else {
274
- var validates = false;
275
- if (!validates) {
276
- var metavariableValidates = this.validateMetavariable(context);
277
- if (metavariableValidates) {
278
- validates = true;
279
- }
280
- }
281
- if (!validates) {
282
- var reference1 = this, labelPresent = context.isLabelPresentByReference(reference1);
283
- if (labelPresent) {
284
- validates = true;
285
- }
286
- }
287
- if (validates) {
288
- reference = this; ///
289
- context.addReference(reference);
290
- context.debug("...validated the '".concat(referenceString, "' reference."));
291
- }
292
- }
293
- return reference;
294
- }
295
- },
296
- {
297
- key: "validateMetavariable",
298
- value: function validateMetavariable(context) {
299
- var metavariableValidates = false;
300
- var referenceString = this.getString(), metavariableString = this.metavariable.getString();
301
- context.trace("Validating the '".concat(referenceString, "' reference's '").concat(metavariableString, "' metavariable....'"));
302
- var metaTypeName = _metaTypeNames.REFERENCE_META_TYPE_NAME, referenceMetaType = context.findMetaTypeByMetaTypeName(metaTypeName), metaType = referenceMetaType, metavariable = context.findMetavariable(this.metavariable);
303
- if (metavariable !== null) {
304
- var metavariableValidatesGivenMetaType = metavariable.validateGivenMetaType(metaType, context);
305
- if (metavariableValidatesGivenMetaType) {
306
- metavariableValidates = true;
307
- }
308
- } else {
309
- context.debug("The '".concat(metavariableString, "' metavariable is not present."));
310
- }
311
- return metavariableValidates;
312
- }
313
- },
314
- {
315
- key: "validateAsMetavariable",
316
- value: function validateAsMetavariable(context) {
317
- var validatesAsMetavariable = false;
318
- var referenceString = this.getString(); ///
319
- context.trace("Validating the '".concat(referenceString, "' reference as a metavaraible..."));
320
- var metavariable = this.getMetavariable(), metavariableName = metavariable.getName(), metavariablePresent = context.isMetavariablePresentByMetavariableName(metavariableName);
321
- if (metavariablePresent) {
322
- validatesAsMetavariable = true;
323
- }
324
- if (validatesAsMetavariable) {
325
- context.debug("...validated the '".concat(referenceString, "' reference as a metavaraible."));
326
- }
327
- return validatesAsMetavariable;
328
- }
329
- },
330
- {
331
- key: "unifyLabel",
332
- value: function unifyLabel(label, context) {
333
- var labelUnifies;
334
- var specificContext = context; ///
335
- context = this.getContext();
336
- var generalContext = context; ///
337
- context = specificContext; ///
338
- var reference = this, labelString = label.getString(), referenceString = reference.getString();
339
- context.trace("Unifying the '".concat(labelString, "' label with the '").concat(referenceString, "' reference..."));
340
- var labelMetavariable = label.getMetavariable(), generalMetavariable = this.metavariable, specificMetavariable = labelMetavariable, metavariableUnifiesIntrinsically = (0, _unify.unifyMetavariableIntrinsically)(generalMetavariable, specificMetavariable, generalContext, specificContext);
341
- labelUnifies = metavariableUnifiesIntrinsically; ///
342
- if (labelUnifies) {
343
- context.debug("...unified the '".concat(labelString, "' label with the '").concat(referenceString, "' reference."));
344
- }
345
- return labelUnifies;
346
- }
347
- },
348
- {
349
- key: "unifyMetavariable",
350
- value: function unifyMetavariable(metavariable, context) {
351
- var _this = this;
352
- var metavariableUnifies = false;
353
- var specificContext = context; ///
354
- context = this.getContext();
355
- var generalContext = context; ///
356
- context = specificContext; ///
357
- var referenceString = this.getString(), metavariableString = metavariable.getString();
358
- context.trace("Unifying the '".concat(metavariableString, "' metavariable with the '").concat(referenceString, "' reference..."));
359
- var metavariableUnifiesIntrinsically = (0, _context.attempt)(function(specificContext) {
360
- var generalMetavariable = _this.metavariable, specificMetavariable = metavariable, metavariableUnifiesIntrinsically = (0, _unify.unifyMetavariableIntrinsically)(generalMetavariable, specificMetavariable, generalContext, specificContext);
361
- return metavariableUnifiesIntrinsically;
362
- }, specificContext);
363
- if (metavariableUnifiesIntrinsically) {
364
- metavariableUnifies = true;
365
- }
366
- if (metavariableUnifies) {
367
- context.debug("...unified the '".concat(metavariableString, "' metavariable with the '").concat(referenceString, "' reference."));
79
+ compareMetavariableName(metavariableName) {
80
+ return this.metavariable.compareMetavariableName(metavariableName);
81
+ }
82
+ matchMetavariableNode(metavariableNode) {
83
+ return this.metavariable.matchMetavariableNode(metavariableNode);
84
+ }
85
+ validate(context) {
86
+ let reference = null;
87
+ const referenceString = this.getString(); ///
88
+ context.trace(`Validating the '${referenceString}' reference...`);
89
+ const validRefernece = this.findValidRefernece(context);
90
+ if (validRefernece !== null) {
91
+ reference = validRefernece; ///
92
+ context.debug(`...the '${referenceString}' reference is alrady valid.`);
93
+ } else {
94
+ let validates = false;
95
+ if (!validates) {
96
+ const metavariableValidates = this.validateMetavariable(context);
97
+ if (metavariableValidates) {
98
+ validates = true;
368
99
  }
369
- return metavariableUnifies;
370
100
  }
371
- },
372
- {
373
- key: "unifyTopLevelMetaAssertion",
374
- value: function unifyTopLevelMetaAssertion(topLevelMetaAssertion, context) {
375
- var topLevelMetaAssertionUnifies;
376
- var reference = this, referenceString = reference.getString(), topLevelMetaAssertionString = topLevelMetaAssertion.getString();
377
- context.trace("Unifying the '".concat(topLevelMetaAssertionString, "' top level meta-assertion with the '").concat(referenceString, "' reference..."));
378
- var label = topLevelMetaAssertion.getLabel(), substitutions = [], labelUnifies = this.unifyLabel(label, substitutions, context);
379
- topLevelMetaAssertionUnifies = labelUnifies; ///
380
- if (topLevelMetaAssertionUnifies) {
381
- context.trace("...unified the '".concat(topLevelMetaAssertionString, "' top level meta-assertion with the '").concat(referenceString, "' reference."));
101
+ if (!validates) {
102
+ const reference = this, labelPresent = context.isLabelPresentByReference(reference);
103
+ if (labelPresent) {
104
+ validates = true;
382
105
  }
383
- return topLevelMetaAssertionUnifies;
384
106
  }
385
- },
386
- {
387
- key: "toJSON",
388
- value: function toJSON() {
389
- var metavariableJSON = (0, _json.metavariableToMetavariableJSON)(this.metavariable), metavariable = metavariableJSON, json = {
390
- metavariable: metavariable
391
- };
392
- return json;
107
+ if (validates) {
108
+ reference = this; ///
109
+ context.addReference(reference);
110
+ context.debug(`...validated the '${referenceString}' reference.`);
393
111
  }
394
112
  }
395
- ], [
396
- {
397
- key: "fromJSON",
398
- value: function fromJSON(json, context) {
399
- debugger;
400
- }
113
+ return reference;
114
+ }
115
+ validateMetavariable(context) {
116
+ let metavariableValidates = false;
117
+ const referenceString = this.getString(), metavariableString = this.metavariable.getString();
118
+ context.trace(`Validating the '${referenceString}' reference's '${metavariableString}' metavariable....'`);
119
+ const metaTypeName = _metaTypeNames.REFERENCE_META_TYPE_NAME, referenceMetaType = context.findMetaTypeByMetaTypeName(metaTypeName), metaType = referenceMetaType, metavariable = context.findMetavariable(this.metavariable);
120
+ if (metavariable !== null) {
121
+ const metavariableValidatesGivenMetaType = metavariable.validateGivenMetaType(metaType, context);
122
+ if (metavariableValidatesGivenMetaType) {
123
+ metavariableValidates = true;
124
+ }
125
+ } else {
126
+ context.debug(`The '${metavariableString}' metavariable is not present.`);
127
+ }
128
+ return metavariableValidates;
129
+ }
130
+ validateAsMetavariable(context) {
131
+ let validatesAsMetavariable = false;
132
+ const referenceString = this.getString(); ///
133
+ context.trace(`Validating the '${referenceString}' reference as a metavaraible...`);
134
+ const metavariable = this.getMetavariable(), metavariableName = metavariable.getName(), metavariablePresent = context.isMetavariablePresentByMetavariableName(metavariableName);
135
+ if (metavariablePresent) {
136
+ validatesAsMetavariable = true;
137
+ }
138
+ if (validatesAsMetavariable) {
139
+ context.debug(`...validated the '${referenceString}' reference as a metavaraible.`);
401
140
  }
402
- ]);
403
- return Reference;
404
- }(_wrap_native_super(_occamlanguages.Element)), _define_property(_Reference, "name", "Reference"), _Reference));
141
+ return validatesAsMetavariable;
142
+ }
143
+ unifyLabel(label, context) {
144
+ let labelUnifies;
145
+ const specificContext = context; ///
146
+ context = this.getContext();
147
+ const generalContext = context; ///
148
+ context = specificContext; ///
149
+ const reference = this, labelString = label.getString(), referenceString = reference.getString();
150
+ context.trace(`Unifying the '${labelString}' label with the '${referenceString}' reference...`);
151
+ const labelMetavariable = label.getMetavariable(), generalMetavariable = this.metavariable, specificMetavariable = labelMetavariable, metavariableUnifiesIntrinsically = (0, _unify.unifyMetavariableIntrinsically)(generalMetavariable, specificMetavariable, generalContext, specificContext);
152
+ labelUnifies = metavariableUnifiesIntrinsically; ///
153
+ if (labelUnifies) {
154
+ context.debug(`...unified the '${labelString}' label with the '${referenceString}' reference.`);
155
+ }
156
+ return labelUnifies;
157
+ }
158
+ unifyMetavariable(metavariable, context) {
159
+ let metavariableUnifies = false;
160
+ const specificContext = context; ///
161
+ context = this.getContext();
162
+ const generalContext = context; ///
163
+ context = specificContext; ///
164
+ const referenceString = this.getString(), metavariableString = metavariable.getString();
165
+ context.trace(`Unifying the '${metavariableString}' metavariable with the '${referenceString}' reference...`);
166
+ const metavariableUnifiesIntrinsically = (0, _context.attempt)((specificContext)=>{
167
+ const generalMetavariable = this.metavariable, specificMetavariable = metavariable, metavariableUnifiesIntrinsically = (0, _unify.unifyMetavariableIntrinsically)(generalMetavariable, specificMetavariable, generalContext, specificContext);
168
+ return metavariableUnifiesIntrinsically;
169
+ }, specificContext);
170
+ if (metavariableUnifiesIntrinsically) {
171
+ metavariableUnifies = true;
172
+ }
173
+ if (metavariableUnifies) {
174
+ context.debug(`...unified the '${metavariableString}' metavariable with the '${referenceString}' reference.`);
175
+ }
176
+ return metavariableUnifies;
177
+ }
178
+ unifyTopLevelMetaAssertion(topLevelMetaAssertion, context) {
179
+ let topLevelMetaAssertionUnifies;
180
+ const reference = this, referenceString = reference.getString(), topLevelMetaAssertionString = topLevelMetaAssertion.getString();
181
+ context.trace(`Unifying the '${topLevelMetaAssertionString}' top level meta-assertion with the '${referenceString}' reference...`);
182
+ const label = topLevelMetaAssertion.getLabel(), substitutions = [], labelUnifies = this.unifyLabel(label, substitutions, context);
183
+ topLevelMetaAssertionUnifies = labelUnifies; ///
184
+ if (topLevelMetaAssertionUnifies) {
185
+ context.trace(`...unified the '${topLevelMetaAssertionString}' top level meta-assertion with the '${referenceString}' reference.`);
186
+ }
187
+ return topLevelMetaAssertionUnifies;
188
+ }
189
+ toJSON() {
190
+ const metavariableJSON = (0, _json.metavariableToMetavariableJSON)(this.metavariable), metavariable = metavariableJSON, json = {
191
+ metavariable
192
+ };
193
+ return json;
194
+ }
195
+ static name = "Reference";
196
+ static fromJSON(json, context) {
197
+ debugger;
198
+ }
199
+ });
405
200
 
406
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3JlZmVyZW5jZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBhdHRlbXB0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBSRUZFUkVOQ0VfTUVUQV9UWVBFX05BTUUgfSBmcm9tIFwiLi4vbWV0YVR5cGVOYW1lc1wiO1xuaW1wb3J0IHsgZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUgfSBmcm9tIFwiLi4vbWV0YVR5cGVzXCI7XG5pbXBvcnQgeyB1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkgfSBmcm9tIFwiLi4vcHJvY2Vzcy91bmlmeVwiO1xuaW1wb3J0IHsgbWV0YXZhcmlhYmxlRnJvbUpTT04sIG1ldGF2YXJpYWJsZVRvTWV0YXZhcmlhYmxlSlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvanNvblwiO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgUmVmZXJlbmNlIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbWV0YXZhcmlhYmxlKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlKTtcblxuICAgIHRoaXMubWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLm1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGdldFJlZmVyZW5jZU5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHJlZmVyZW5jZU5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiByZWZlcmVuY2VOb2RlO1xuICB9XG5cblxuICBnZXROYW1lKCkgeyByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUuZ2V0TmFtZSgpOyB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlTmFtZSgpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gdGhpcy5tZXRhdmFyaWFibGUuZ2V0TmFtZSgpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZU5hbWU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOb2RlKCkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSB0aGlzLm1ldGF2YXJpYWJsZS5nZXROb2RlKCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIG1hdGNoUmVmZXJlbmNlTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzZXJ0aW9uTm9kZUEgPSBhc3NlcnRpb25Ob2RlOyAvLy9cblxuICAgIGFzc2VydGlvbk5vZGUgPSB0aGlzLmdldFJlZmVyZW5jZU5vZGUoKTtcblxuICAgIGNvbnN0IGFzc2VydGlvbk5vZGVCID0gYXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgICAgYXNzZXJ0aW9uTm9kZUFBTWF0Y2hlc1JlZmVyZW5jZUJOb2RlQiA9IGFzc2VydGlvbk5vZGVBLm1hdGNoKGFzc2VydGlvbk5vZGVCKSxcbiAgICAgICAgICBlcXVhbFRvID0gYXNzZXJ0aW9uTm9kZUFBTWF0Y2hlc1JlZmVyZW5jZUJOb2RlQjsgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGZpbmRWYWxpZFJlZmVybmVjZShjb250ZXh0KSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICAgIHJlZmVyZW5jZSA9IGNvbnRleHQuZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICB2YWxpZFJlZmVyZW5jZSA9IHJlZmVyZW5jZTsgIC8vL1xuXG4gICAgcmV0dXJuIHZhbGlkUmVmZXJlbmNlO1xuICB9XG5cbiAgaXNFcXVhbFRvKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2UuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHJlZmVyZW5jZU5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaFJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSksXG4gICAgICAgICAgZXF1YWxUbyA9IHJlZmVyZW5jZU5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGNvbXBhcmVQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG4gICAgbGV0IGNvbXBhcmVzVG9QYXJhbXRlciA9IGZhbHNlO1xuXG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlci5nZXROYW1lKCk7XG5cbiAgICBpZiAocGFyYW1ldGVyTmFtZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpO1xuXG4gICAgICBpZiAocGFyYW1ldGVyTmFtZSA9PT0gbWV0YXZhcmlhYmxlTmFtZSkge1xuICAgICAgICBjb21wYXJlc1RvUGFyYW10ZXIgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb21wYXJlc1RvUGFyYW10ZXI7XG4gIH1cblxuICBjb21wYXJlTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSkge1xuICAgIGxldCBjb21wYXJlc1RvTWV0YXZhcmlhYmxlID0gZmFsc2U7XG5cbiAgICBsZXQgbWV0YXZhcmlhYmxlTmFtZTtcblxuICAgIG1ldGF2YXJpYWJsZU5hbWUgPSB0aGlzLm1ldGF2YXJpYWJsZS5nZXROYW1lKCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lQSA9IG1ldGF2YXJpYWJsZU5hbWUgLy8vXG5cbiAgICBtZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlLmdldE5hbWUoKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWVCID0gbWV0YXZhcmlhYmxlTmFtZTsgLy8vXG5cbiAgICBpZiAobWV0YXZhcmlhYmxlTmFtZUEgPT09IG1ldGF2YXJpYWJsZU5hbWVCKSB7XG4gICAgICBjb21wYXJlc1RvTWV0YXZhcmlhYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb01ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGNvbXBhcmVNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHsgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlLmNvbXBhcmVNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpOyB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHsgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTsgfVxuXG4gIHZhbGlkYXRlKGNvbnRleHQpIHtcbiAgICBsZXQgcmVmZXJlbmNlID0gbnVsbDtcblxuICAgIGNvbnN0IHJlZmVyZW5jZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICBjb25zdCB2YWxpZFJlZmVybmVjZSA9IHRoaXMuZmluZFZhbGlkUmVmZXJuZWNlKGNvbnRleHQpO1xuXG4gICAgaWYgKHZhbGlkUmVmZXJuZWNlICE9PSBudWxsKSB7XG4gICAgICByZWZlcmVuY2UgPSB2YWxpZFJlZmVybmVjZTsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UgaXMgYWxyYWR5IHZhbGlkLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGlmICghdmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZVZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGVNZXRhdmFyaWFibGUoY29udGV4dCk7XG5cbiAgICAgICAgaWYgKG1ldGF2YXJpYWJsZVZhbGlkYXRlcykge1xuICAgICAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF2YWxpZGF0ZXMpIHtcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlID0gdGhpcywgLy8vXG4gICAgICAgICAgICAgIGxhYmVsUHJlc2VudCA9IGNvbnRleHQuaXNMYWJlbFByZXNlbnRCeVJlZmVyZW5jZShyZWZlcmVuY2UpO1xuXG4gICAgICAgIGlmIChsYWJlbFByZXNlbnQpIHtcbiAgICAgICAgICB2YWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgcmVmZXJlbmNlID0gdGhpczsgLy8vXG5cbiAgICAgICAgY29udGV4dC5hZGRSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9XG5cbiAgdmFsaWRhdGVNZXRhdmFyaWFibGUoY29udGV4dCkge1xuICAgIGxldCBtZXRhdmFyaWFibGVWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHJlZmVyZW5jZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IHRoaXMubWV0YXZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlJ3MgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlLi4uLidgKTtcblxuICAgIGNvbnN0IG1ldGFUeXBlTmFtZSA9IFJFRkVSRU5DRV9NRVRBX1RZUEVfTkFNRSxcbiAgICAgICAgICByZWZlcmVuY2VNZXRhVHlwZSA9IGNvbnRleHQuZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKSxcbiAgICAgICAgICBtZXRhVHlwZSA9IHJlZmVyZW5jZU1ldGFUeXBlLCAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmRNZXRhdmFyaWFibGUodGhpcy5tZXRhdmFyaWFibGUpO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlVmFsaWRhdGVzR2l2ZW5NZXRhVHlwZSA9IG1ldGF2YXJpYWJsZS52YWxpZGF0ZUdpdmVuTWV0YVR5cGUobWV0YVR5cGUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlVmFsaWRhdGVzR2l2ZW5NZXRhVHlwZSkge1xuICAgICAgICBtZXRhdmFyaWFibGVWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIGlzIG5vdCBwcmVzZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZUFzTWV0YXZhcmlhYmxlKGNvbnRleHQpIHtcbiAgICBsZXQgdmFsaWRhdGVzQXNNZXRhdmFyaWFibGUgPSBmYWxzZTtcblxuICAgIGNvbnN0IHJlZmVyZW5jZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlIGFzIGEgbWV0YXZhcmFpYmxlLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGUgPSB0aGlzLmdldE1ldGF2YXJpYWJsZSgpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGUuZ2V0TmFtZSgpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZVByZXNlbnQgPSBjb250ZXh0LmlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgIGlmIChtZXRhdmFyaWFibGVQcmVzZW50KSB7XG4gICAgICB2YWxpZGF0ZXNBc01ldGF2YXJpYWJsZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZSBhcyBhIG1ldGF2YXJhaWJsZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzQXNNZXRhdmFyaWFibGU7XG4gIH1cblxuICB1bmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0KSB7XG4gICAgbGV0IGxhYmVsVW5pZmllcztcblxuICAgIGNvbnN0IHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICBjb25zdCByZWZlcmVuY2UgPSB0aGlzLCAvLy9cbiAgICAgICAgICBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpLFxuICAgICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS4uLmApO1xuXG4gICAgY29uc3QgbGFiZWxNZXRhdmFyaWFibGUgPSBsYWJlbC5nZXRNZXRhdmFyaWFibGUoKSxcbiAgICAgICAgICBnZW5lcmFsTWV0YXZhcmlhYmxlID0gdGhpcy5tZXRhdmFyaWFibGUsICAvLy9cbiAgICAgICAgICBzcGVjaWZpY01ldGF2YXJpYWJsZSA9IGxhYmVsTWV0YXZhcmlhYmxlLCAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGVVbmlmaWVzSW50cmluc2ljYWxseSA9IHVuaWZ5TWV0YXZhcmlhYmxlSW50cmluc2ljYWxseShnZW5lcmFsTWV0YXZhcmlhYmxlLCBzcGVjaWZpY01ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBsYWJlbFVuaWZpZXMgPSBtZXRhdmFyaWFibGVVbmlmaWVzSW50cmluc2ljYWxseTsgLy8vXG5cbiAgICBpZiAobGFiZWxVbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFiZWxVbmlmaWVzO1xuICB9XG5cbiAgdW5pZnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBjb250ZXh0KSB7XG4gICAgbGV0IG1ldGF2YXJpYWJsZVVuaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICBjb25zdCByZWZlcmVuY2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS4uLmApO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlVW5pZmllc0ludHJpbnNpY2FsbHkgPSBhdHRlbXB0KChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGdlbmVyYWxNZXRhdmFyaWFibGUgPSB0aGlzLm1ldGF2YXJpYWJsZSwgIC8vL1xuICAgICAgICAgICAgc3BlY2lmaWNNZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGUsIC8vL1xuICAgICAgICAgICAgbWV0YXZhcmlhYmxlVW5pZmllc0ludHJpbnNpY2FsbHkgPSB1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkoZ2VuZXJhbE1ldGF2YXJpYWJsZSwgc3BlY2lmaWNNZXRhdmFyaWFibGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICByZXR1cm4gbWV0YXZhcmlhYmxlVW5pZmllc0ludHJpbnNpY2FsbHk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIGlmIChtZXRhdmFyaWFibGVVbmlmaWVzSW50cmluc2ljYWxseSkge1xuICAgICAgbWV0YXZhcmlhYmxlVW5pZmllcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG1ldGF2YXJpYWJsZVVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB3aXRoIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZVVuaWZpZXM7XG4gIH1cblxuICB1bmlmeVRvcExldmVsTWV0YUFzc2VydGlvbih0b3BMZXZlbE1ldGFBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgICBsZXQgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uVW5pZmllcztcblxuICAgIGNvbnN0IHJlZmVyZW5jZSA9IHRoaXMsIC8vL1xuICAgICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7dG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIG1ldGEtYXNzZXJ0aW9uIHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS4uLmApO1xuXG4gICAgY29uc3QgbGFiZWwgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb24uZ2V0TGFiZWwoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zID0gW10sXG4gICAgICAgICAgbGFiZWxVbmlmaWVzID0gdGhpcy51bmlmeUxhYmVsKGxhYmVsLCBzdWJzdGl0dXRpb25zLCBjb250ZXh0KTtcblxuICAgIHRvcExldmVsTWV0YUFzc2VydGlvblVuaWZpZXMgPSBsYWJlbFVuaWZpZXM7ICAvLy9cblxuICAgIGlmICh0b3BMZXZlbE1ldGFBc3NlcnRpb25VbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi51bmlmaWVkIHRoZSAnJHt0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgbWV0YS1hc3NlcnRpb24gd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0b3BMZXZlbE1ldGFBc3NlcnRpb25VbmlmaWVzO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZUpTT04gPSBtZXRhdmFyaWFibGVUb01ldGF2YXJpYWJsZUpTT04odGhpcy5tZXRhdmFyaWFibGUpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUpTT04sICAvLy9cbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgbWV0YXZhcmlhYmxlXG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlJlZmVyZW5jZVwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgZGVidWdnZXJcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsiZGVmaW5lIiwiUmVmZXJlbmNlIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJtZXRhdmFyaWFibGUiLCJnZXRNZXRhdmFyaWFibGUiLCJnZXRSZWZlcmVuY2VOb2RlIiwiZ2V0Tm9kZSIsInJlZmVyZW5jZU5vZGUiLCJnZXROYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsIm1hdGNoUmVmZXJlbmNlTm9kZSIsImFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25Ob2RlQSIsImFzc2VydGlvbk5vZGVCIiwiYXNzZXJ0aW9uTm9kZUFBTWF0Y2hlc1JlZmVyZW5jZUJOb2RlQiIsIm1hdGNoIiwiZXF1YWxUbyIsImZpbmRWYWxpZFJlZmVybmVjZSIsInJlZmVyZW5jZSIsImZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUiLCJ2YWxpZFJlZmVyZW5jZSIsImlzRXF1YWxUbyIsInJlZmVyZW5jZU5vZGVNYXRjaGVzIiwiY29tcGFyZVBhcmFtZXRlciIsInBhcmFtZXRlciIsImNvbXBhcmVzVG9QYXJhbXRlciIsInBhcmFtZXRlck5hbWUiLCJjb21wYXJlTWV0YXZhcmlhYmxlIiwiY29tcGFyZXNUb01ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZU5hbWVBIiwibWV0YXZhcmlhYmxlTmFtZUIiLCJjb21wYXJlTWV0YXZhcmlhYmxlTmFtZSIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsInZhbGlkYXRlIiwicmVmZXJlbmNlU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YWxpZFJlZmVybmVjZSIsImRlYnVnIiwidmFsaWRhdGVzIiwibWV0YXZhcmlhYmxlVmFsaWRhdGVzIiwidmFsaWRhdGVNZXRhdmFyaWFibGUiLCJsYWJlbFByZXNlbnQiLCJpc0xhYmVsUHJlc2VudEJ5UmVmZXJlbmNlIiwiYWRkUmVmZXJlbmNlIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwibWV0YVR5cGVOYW1lIiwiUkVGRVJFTkNFX01FVEFfVFlQRV9OQU1FIiwicmVmZXJlbmNlTWV0YVR5cGUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsIm1ldGFUeXBlIiwiZmluZE1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZVZhbGlkYXRlc0dpdmVuTWV0YVR5cGUiLCJ2YWxpZGF0ZUdpdmVuTWV0YVR5cGUiLCJ2YWxpZGF0ZUFzTWV0YXZhcmlhYmxlIiwidmFsaWRhdGVzQXNNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVQcmVzZW50IiwiaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lIiwidW5pZnlMYWJlbCIsImxhYmVsIiwibGFiZWxVbmlmaWVzIiwic3BlY2lmaWNDb250ZXh0IiwiZ2V0Q29udGV4dCIsImdlbmVyYWxDb250ZXh0IiwibGFiZWxTdHJpbmciLCJsYWJlbE1ldGF2YXJpYWJsZSIsImdlbmVyYWxNZXRhdmFyaWFibGUiLCJzcGVjaWZpY01ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZVVuaWZpZXNJbnRyaW5zaWNhbGx5IiwidW5pZnlNZXRhdmFyaWFibGVJbnRyaW5zaWNhbGx5IiwidW5pZnlNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVVbmlmaWVzIiwiYXR0ZW1wdCIsInVuaWZ5VG9wTGV2ZWxNZXRhQXNzZXJ0aW9uIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uVW5pZmllcyIsInRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyIsImdldExhYmVsIiwic3Vic3RpdHV0aW9ucyIsInRvSlNPTiIsIm1ldGF2YXJpYWJsZUpTT04iLCJtZXRhdmFyaWFibGVUb01ldGF2YXJpYWJsZUpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJFbGVtZW50IiwibmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBV0E7OztlQUFBOzs7OEJBVHdCO3dCQUVEO3VCQUNDOzZCQUNpQjt5QkFDRTtxQkFDSTtvQkFDc0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBRXJFLFdBQWVBLElBQUFBLGdCQUFNLDhCQUFDOzthQUFNQyxVQUNkQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxZQUFZO2dDQURyQko7O2dCQUV4QixrQkFGd0JBO1lBRWxCQztZQUFTQztZQUFRQzs7UUFFdkIsTUFBS0MsWUFBWSxHQUFHQTs7Ozs7WUFHdEJDLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0QsWUFBWTtZQUMxQjs7O1lBRUFFLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFNSCxPQUFPLElBQUksQ0FBQ0ksT0FBTyxJQUNuQkMsZ0JBQWdCTCxNQUFNLEdBQUc7Z0JBRS9CLE9BQU9LO1lBQ1Q7OztZQUdBQyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQVksT0FBTyxJQUFJLENBQUNMLFlBQVksQ0FBQ0ssT0FBTztZQUFJOzs7WUFFaERDLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFNQyxtQkFBbUIsSUFBSSxDQUFDUCxZQUFZLENBQUNLLE9BQU87Z0JBRWxELE9BQU9FO1lBQ1Q7OztZQUVBQyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBTUMsbUJBQW1CLElBQUksQ0FBQ1QsWUFBWSxD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
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3JlZmVyZW5jZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBhdHRlbXB0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBSRUZFUkVOQ0VfTUVUQV9UWVBFX05BTUUgfSBmcm9tIFwiLi4vbWV0YVR5cGVOYW1lc1wiO1xuaW1wb3J0IHsgZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUgfSBmcm9tIFwiLi4vbWV0YVR5cGVzXCI7XG5pbXBvcnQgeyB1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkgfSBmcm9tIFwiLi4vcHJvY2Vzcy91bmlmeVwiO1xuaW1wb3J0IHsgbWV0YXZhcmlhYmxlRnJvbUpTT04sIG1ldGF2YXJpYWJsZVRvTWV0YXZhcmlhYmxlSlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvanNvblwiO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgUmVmZXJlbmNlIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbWV0YXZhcmlhYmxlKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlKTtcblxuICAgIHRoaXMubWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLm1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGdldFJlZmVyZW5jZU5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHJlZmVyZW5jZU5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiByZWZlcmVuY2VOb2RlO1xuICB9XG5cblxuICBnZXROYW1lKCkgeyByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUuZ2V0TmFtZSgpOyB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlTmFtZSgpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gdGhpcy5tZXRhdmFyaWFibGUuZ2V0TmFtZSgpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZU5hbWU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOb2RlKCkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSB0aGlzLm1ldGF2YXJpYWJsZS5nZXROb2RlKCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIG1hdGNoUmVmZXJlbmNlTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzZXJ0aW9uTm9kZUEgPSBhc3NlcnRpb25Ob2RlOyAvLy9cblxuICAgIGFzc2VydGlvbk5vZGUgPSB0aGlzLmdldFJlZmVyZW5jZU5vZGUoKTtcblxuICAgIGNvbnN0IGFzc2VydGlvbk5vZGVCID0gYXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgICAgYXNzZXJ0aW9uTm9kZUFBTWF0Y2hlc1JlZmVyZW5jZUJOb2RlQiA9IGFzc2VydGlvbk5vZGVBLm1hdGNoKGFzc2VydGlvbk5vZGVCKSxcbiAgICAgICAgICBlcXVhbFRvID0gYXNzZXJ0aW9uTm9kZUFBTWF0Y2hlc1JlZmVyZW5jZUJOb2RlQjsgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGZpbmRWYWxpZFJlZmVybmVjZShjb250ZXh0KSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICAgIHJlZmVyZW5jZSA9IGNvbnRleHQuZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICB2YWxpZFJlZmVyZW5jZSA9IHJlZmVyZW5jZTsgIC8vL1xuXG4gICAgcmV0dXJuIHZhbGlkUmVmZXJlbmNlO1xuICB9XG5cbiAgaXNFcXVhbFRvKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2UuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHJlZmVyZW5jZU5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaFJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSksXG4gICAgICAgICAgZXF1YWxUbyA9IHJlZmVyZW5jZU5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGNvbXBhcmVQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG4gICAgbGV0IGNvbXBhcmVzVG9QYXJhbXRlciA9IGZhbHNlO1xuXG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlci5nZXROYW1lKCk7XG5cbiAgICBpZiAocGFyYW1ldGVyTmFtZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpO1xuXG4gICAgICBpZiAocGFyYW1ldGVyTmFtZSA9PT0gbWV0YXZhcmlhYmxlTmFtZSkge1xuICAgICAgICBjb21wYXJlc1RvUGFyYW10ZXIgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb21wYXJlc1RvUGFyYW10ZXI7XG4gIH1cblxuICBjb21wYXJlTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSkge1xuICAgIGxldCBjb21wYXJlc1RvTWV0YXZhcmlhYmxlID0gZmFsc2U7XG5cbiAgICBsZXQgbWV0YXZhcmlhYmxlTmFtZTtcblxuICAgIG1ldGF2YXJpYWJsZU5hbWUgPSB0aGlzLm1ldGF2YXJpYWJsZS5nZXROYW1lKCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lQSA9IG1ldGF2YXJpYWJsZU5hbWUgLy8vXG5cbiAgICBtZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlLmdldE5hbWUoKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWVCID0gbWV0YXZhcmlhYmxlTmFtZTsgLy8vXG5cbiAgICBpZiAobWV0YXZhcmlhYmxlTmFtZUEgPT09IG1ldGF2YXJpYWJsZU5hbWVCKSB7XG4gICAgICBjb21wYXJlc1RvTWV0YXZhcmlhYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb01ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGNvbXBhcmVNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHsgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlLmNvbXBhcmVNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpOyB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHsgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTsgfVxuXG4gIHZhbGlkYXRlKGNvbnRleHQpIHtcbiAgICBsZXQgcmVmZXJlbmNlID0gbnVsbDtcblxuICAgIGNvbnN0IHJlZmVyZW5jZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICBjb25zdCB2YWxpZFJlZmVybmVjZSA9IHRoaXMuZmluZFZhbGlkUmVmZXJuZWNlKGNvbnRleHQpO1xuXG4gICAgaWYgKHZhbGlkUmVmZXJuZWNlICE9PSBudWxsKSB7XG4gICAgICByZWZlcmVuY2UgPSB2YWxpZFJlZmVybmVjZTsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UgaXMgYWxyYWR5IHZhbGlkLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGlmICghdmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZVZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGVNZXRhdmFyaWFibGUoY29udGV4dCk7XG5cbiAgICAgICAgaWYgKG1ldGF2YXJpYWJsZVZhbGlkYXRlcykge1xuICAgICAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF2YWxpZGF0ZXMpIHtcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlID0gdGhpcywgLy8vXG4gICAgICAgICAgICAgIGxhYmVsUHJlc2VudCA9IGNvbnRleHQuaXNMYWJlbFByZXNlbnRCeVJlZmVyZW5jZShyZWZlcmVuY2UpO1xuXG4gICAgICAgIGlmIChsYWJlbFByZXNlbnQpIHtcbiAgICAgICAgICB2YWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgcmVmZXJlbmNlID0gdGhpczsgLy8vXG5cbiAgICAgICAgY29udGV4dC5hZGRSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9XG5cbiAgdmFsaWRhdGVNZXRhdmFyaWFibGUoY29udGV4dCkge1xuICAgIGxldCBtZXRhdmFyaWFibGVWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHJlZmVyZW5jZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IHRoaXMubWV0YXZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlJ3MgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlLi4uLidgKTtcblxuICAgIGNvbnN0IG1ldGFUeXBlTmFtZSA9IFJFRkVSRU5DRV9NRVRBX1RZUEVfTkFNRSxcbiAgICAgICAgICByZWZlcmVuY2VNZXRhVHlwZSA9IGNvbnRleHQuZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKSxcbiAgICAgICAgICBtZXRhVHlwZSA9IHJlZmVyZW5jZU1ldGFUeXBlLCAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmRNZXRhdmFyaWFibGUodGhpcy5tZXRhdmFyaWFibGUpO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlVmFsaWRhdGVzR2l2ZW5NZXRhVHlwZSA9IG1ldGF2YXJpYWJsZS52YWxpZGF0ZUdpdmVuTWV0YVR5cGUobWV0YVR5cGUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlVmFsaWRhdGVzR2l2ZW5NZXRhVHlwZSkge1xuICAgICAgICBtZXRhdmFyaWFibGVWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIGlzIG5vdCBwcmVzZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZUFzTWV0YXZhcmlhYmxlKGNvbnRleHQpIHtcbiAgICBsZXQgdmFsaWRhdGVzQXNNZXRhdmFyaWFibGUgPSBmYWxzZTtcblxuICAgIGNvbnN0IHJlZmVyZW5jZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlIGFzIGEgbWV0YXZhcmFpYmxlLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGUgPSB0aGlzLmdldE1ldGF2YXJpYWJsZSgpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGUuZ2V0TmFtZSgpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZVByZXNlbnQgPSBjb250ZXh0LmlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgIGlmIChtZXRhdmFyaWFibGVQcmVzZW50KSB7XG4gICAgICB2YWxpZGF0ZXNBc01ldGF2YXJpYWJsZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZSBhcyBhIG1ldGF2YXJhaWJsZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzQXNNZXRhdmFyaWFibGU7XG4gIH1cblxuICB1bmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0KSB7XG4gICAgbGV0IGxhYmVsVW5pZmllcztcblxuICAgIGNvbnN0IHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICBjb25zdCByZWZlcmVuY2UgPSB0aGlzLCAvLy9cbiAgICAgICAgICBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpLFxuICAgICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS4uLmApO1xuXG4gICAgY29uc3QgbGFiZWxNZXRhdmFyaWFibGUgPSBsYWJlbC5nZXRNZXRhdmFyaWFibGUoKSxcbiAgICAgICAgICBnZW5lcmFsTWV0YXZhcmlhYmxlID0gdGhpcy5tZXRhdmFyaWFibGUsICAvLy9cbiAgICAgICAgICBzcGVjaWZpY01ldGF2YXJpYWJsZSA9IGxhYmVsTWV0YXZhcmlhYmxlLCAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGVVbmlmaWVzSW50cmluc2ljYWxseSA9IHVuaWZ5TWV0YXZhcmlhYmxlSW50cmluc2ljYWxseShnZW5lcmFsTWV0YXZhcmlhYmxlLCBzcGVjaWZpY01ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBsYWJlbFVuaWZpZXMgPSBtZXRhdmFyaWFibGVVbmlmaWVzSW50cmluc2ljYWxseTsgLy8vXG5cbiAgICBpZiAobGFiZWxVbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFiZWxVbmlmaWVzO1xuICB9XG5cbiAgdW5pZnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBjb250ZXh0KSB7XG4gICAgbGV0IG1ldGF2YXJpYWJsZVVuaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICBjb25zdCByZWZlcmVuY2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS4uLmApO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlVW5pZmllc0ludHJpbnNpY2FsbHkgPSBhdHRlbXB0KChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGdlbmVyYWxNZXRhdmFyaWFibGUgPSB0aGlzLm1ldGF2YXJpYWJsZSwgIC8vL1xuICAgICAgICAgICAgc3BlY2lmaWNNZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGUsIC8vL1xuICAgICAgICAgICAgbWV0YXZhcmlhYmxlVW5pZmllc0ludHJpbnNpY2FsbHkgPSB1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkoZ2VuZXJhbE1ldGF2YXJpYWJsZSwgc3BlY2lmaWNNZXRhdmFyaWFibGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICByZXR1cm4gbWV0YXZhcmlhYmxlVW5pZmllc0ludHJpbnNpY2FsbHk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIGlmIChtZXRhdmFyaWFibGVVbmlmaWVzSW50cmluc2ljYWxseSkge1xuICAgICAgbWV0YXZhcmlhYmxlVW5pZmllcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG1ldGF2YXJpYWJsZVVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB3aXRoIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZVVuaWZpZXM7XG4gIH1cblxuICB1bmlmeVRvcExldmVsTWV0YUFzc2VydGlvbih0b3BMZXZlbE1ldGFBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgICBsZXQgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uVW5pZmllcztcblxuICAgIGNvbnN0IHJlZmVyZW5jZSA9IHRoaXMsIC8vL1xuICAgICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7dG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIG1ldGEtYXNzZXJ0aW9uIHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS4uLmApO1xuXG4gICAgY29uc3QgbGFiZWwgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb24uZ2V0TGFiZWwoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zID0gW10sXG4gICAgICAgICAgbGFiZWxVbmlmaWVzID0gdGhpcy51bmlmeUxhYmVsKGxhYmVsLCBzdWJzdGl0dXRpb25zLCBjb250ZXh0KTtcblxuICAgIHRvcExldmVsTWV0YUFzc2VydGlvblVuaWZpZXMgPSBsYWJlbFVuaWZpZXM7ICAvLy9cblxuICAgIGlmICh0b3BMZXZlbE1ldGFBc3NlcnRpb25VbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi51bmlmaWVkIHRoZSAnJHt0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgbWV0YS1hc3NlcnRpb24gd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0b3BMZXZlbE1ldGFBc3NlcnRpb25VbmlmaWVzO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZUpTT04gPSBtZXRhdmFyaWFibGVUb01ldGF2YXJpYWJsZUpTT04odGhpcy5tZXRhdmFyaWFibGUpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUpTT04sICAvLy9cbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgbWV0YXZhcmlhYmxlXG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlJlZmVyZW5jZVwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgZGVidWdnZXJcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsiZGVmaW5lIiwiUmVmZXJlbmNlIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwibWV0YXZhcmlhYmxlIiwiZ2V0TWV0YXZhcmlhYmxlIiwiZ2V0UmVmZXJlbmNlTm9kZSIsImdldE5vZGUiLCJyZWZlcmVuY2VOb2RlIiwiZ2V0TmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGVOYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJtYXRjaFJlZmVyZW5jZU5vZGUiLCJhc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZUEiLCJhc3NlcnRpb25Ob2RlQiIsImFzc2VydGlvbk5vZGVBQU1hdGNoZXNSZWZlcmVuY2VCTm9kZUIiLCJtYXRjaCIsImVxdWFsVG8iLCJmaW5kVmFsaWRSZWZlcm5lY2UiLCJyZWZlcmVuY2UiLCJmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlIiwidmFsaWRSZWZlcmVuY2UiLCJpc0VxdWFsVG8iLCJyZWZlcmVuY2VOb2RlTWF0Y2hlcyIsImNvbXBhcmVQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJjb21wYXJlc1RvUGFyYW10ZXIiLCJwYXJhbWV0ZXJOYW1lIiwiY29tcGFyZU1ldGF2YXJpYWJsZSIsImNvbXBhcmVzVG9NZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVOYW1lQSIsIm1ldGF2YXJpYWJsZU5hbWVCIiwiY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJ2YWxpZGF0ZSIsInJlZmVyZW5jZVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmFsaWRSZWZlcm5lY2UiLCJkZWJ1ZyIsInZhbGlkYXRlcyIsIm1ldGF2YXJpYWJsZVZhbGlkYXRlcyIsInZhbGlkYXRlTWV0YXZhcmlhYmxlIiwibGFiZWxQcmVzZW50IiwiaXNMYWJlbFByZXNlbnRCeVJlZmVyZW5jZSIsImFkZFJlZmVyZW5jZSIsIm1ldGF2YXJpYWJsZVN0cmluZyIsIm1ldGFUeXBlTmFtZSIsIlJFRkVSRU5DRV9NRVRBX1RZUEVfTkFNRSIsInJlZmVyZW5jZU1ldGFUeXBlIiwiZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUiLCJtZXRhVHlwZSIsImZpbmRNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVWYWxpZGF0ZXNHaXZlbk1ldGFUeXBlIiwidmFsaWRhdGVHaXZlbk1ldGFUeXBlIiwidmFsaWRhdGVBc01ldGF2YXJpYWJsZSIsInZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlUHJlc2VudCIsImlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZSIsInVuaWZ5TGFiZWwiLCJsYWJlbCIsImxhYmVsVW5pZmllcyIsInNwZWNpZmljQ29udGV4dCIsImdldENvbnRleHQiLCJnZW5lcmFsQ29udGV4dCIsImxhYmVsU3RyaW5nIiwibGFiZWxNZXRhdmFyaWFibGUiLCJnZW5lcmFsTWV0YXZhcmlhYmxlIiwic3BlY2lmaWNNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVVbmlmaWVzSW50cmluc2ljYWxseSIsInVuaWZ5TWV0YXZhcmlhYmxlSW50cmluc2ljYWxseSIsInVuaWZ5TWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlVW5pZmllcyIsImF0dGVtcHQiLCJ1bmlmeVRvcExldmVsTWV0YUFzc2VydGlvbiIsInRvcExldmVsTWV0YUFzc2VydGlvbiIsInRvcExldmVsTWV0YUFzc2VydGlvblVuaWZpZXMiLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmciLCJnZXRMYWJlbCIsInN1YnN0aXR1dGlvbnMiLCJ0b0pTT04iLCJtZXRhdmFyaWFibGVKU09OIiwibWV0YXZhcmlhYmxlVG9NZXRhdmFyaWFibGVKU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBV0E7OztlQUFBOzs7Z0NBVHdCOzBCQUVEO3lCQUNDOytCQUNpQjsyQkFDRTt1QkFDSTtzQkFDc0I7TUFFckUsV0FBZUEsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxrQkFBa0JDLHVCQUFPO0lBQ25ELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFlBQVksQ0FBRTtRQUMvQyxLQUFLLENBQUNILFNBQVNDLFFBQVFDO1FBRXZCLElBQUksQ0FBQ0MsWUFBWSxHQUFHQTtJQUN0QjtJQUVBQyxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUNELFlBQVk7SUFDMUI7SUFFQUUsbUJBQW1CO1FBQ2pCLE1BQU1ILE9BQU8sSUFBSSxDQUFDSSxPQUFPLElBQ25CQyxnQkFBZ0JMLE1BQU0sR0FBRztRQUUvQixPQUFPSztJQUNUO0lBR0FDLFVBQVU7UUFBRSxPQUFPLElBQUksQ0FBQ0wsWUFBWSxDQUFDSyxPQUFPO0lBQUk7SUFFaERDLHNCQUFzQjtRQUNwQixNQUFNQyxtQkFBbUIsSUFBSSxDQUFDUCxZQUFZLENBQUNLLE9BQU87UUFFbEQsT0FBT0U7SUFDVDtJQUVBQyxzQkFBc0I7UUFDcEIsTUFBTUMsbUJBQW1CLElBQUksQ0FBQ1QsWUFBWSxDQUFDRyxPQUFPO1FBRWxELE9BQU9NO0lBQ1Q7SUFFQUMsbUJBQW1CQyxhQUFhLEVBQUU7UUFDaEMsTUFBTUMsaUJBQWlCRCxlQUFlLEdBQUc7UUFFekNBLGdCQUFnQixJQUFJLENBQUNULGdCQUFnQjtRQUVyQyxNQUFNVyxpQkFBaUJGLGVBQ2pCRyx3Q0FBd0NGLGVBQWVHLEtBQUssQ0FBQ0YsaUJBQzdERyxVQUFVRix1Q0FBdUMsR0FBRztRQUUxRCxPQUFPRTtJQUNUO0lBRUFDLG1CQUFtQnBCLE9BQU8sRUFBRTtRQUMxQixNQUFNWSxtQkFBbUIsSUFBSSxDQUFDRCxtQkFBbUIsSUFDM0NVLFlBQVlyQixRQUFRc0IsK0JBQStCLENBQUNWLG1CQUNwRFcsaUJBQWlCRixXQUFZLEdBQUc7UUFFdEMsT0FBT0U7SUFDVDtJQUVBQyxVQUFVSCxTQUFTLEVBQUU7UUFDbkIsTUFBTWQsZ0JBQWdCYyxVQUFVZixPQUFPLElBQ2pDbUIsdUJBQXVCLElBQUksQ0FBQ1osa0JBQWtCLENBQUNOLGdCQUMvQ1ksVUFBVU0sc0JBQXVCLEdBQUc7UUFFMUMsT0FBT047SUFDVDtJQUVBTyxpQkFBaUJDLFNBQVMsRUFBRTtRQUMxQixJQUFJQyxxQkFBcUI7UUFFekIsTUFBTUMsZ0JBQWdCRixVQUFVbkIsT0FBTztRQUV2QyxJQUFJcUIsa0JBQWtCLE1BQU07WUFDMUIsTUFBTW5CLG1CQUFtQixJQUFJLENBQUNELG1CQUFtQjtZQUVqRCxJQUFJb0Isa0JBQWtCbkIsa0JBQWtCO2dCQUN0Q2tCLHFCQUFxQjtZQUN2QjtRQUNGO1FBRUEsT0FBT0E7SUFDVDtJQUVBRSxvQkFBb0IzQixZQUFZLEVBQUU7UUFDaEMsSUFBSTRCLHlCQUF5QjtRQUU3QixJQUFJckI7UUFFSkEsbUJBQW1CLElBQUksQ0FBQ1AsWUFBWSxDQUFDSyxPQUFPO1FBRTVDLE1BQU13QixvQkFBb0J0QixpQkFBaUIsR0FBRzs7UUFFOUNBLG1CQUFtQlAsYUFBYUssT0FBTztRQUV2QyxNQUFNeUIsb0JBQW9CdkIsa0JBQWtCLEdBQUc7UUFFL0MsSUFBSXNCLHNCQUFzQkMsbUJBQW1CO1lBQzNDRix5QkFBeUI7UUFDM0I7UUFFQSxPQUFPQTtJQUNUO0lBRUFHLHdCQUF3QnhCLGdCQUFnQixFQUFFO1FBQUUsT0FBTyxJQUFJLENBQUNQLFlBQVksQ0FBQytCLHVCQUF1QixDQUFDeEI7SUFBbUI7SUFFaEh5QixzQkFBc0J2QixnQkFBZ0IsRUFBRTtRQUFFLE9BQU8sSUFBSSxDQUFDVCxZQUFZLENBQUNnQyxxQkFBcUIsQ0FBQ3ZCO0lBQW1CO0lBRTVHd0IsU0FBU3BDLE9BQU8sRUFBRTtRQUNoQixJQUFJcUIsWUFBWTtRQUVoQixNQUFNZ0Isa0JBQWtCLElBQUksQ0FBQ0MsU0FBUyxJQUFJLEdBQUc7UUFFN0N0QyxRQUFRdUMsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVGLGdCQUFnQixjQUFjLENBQUM7UUFFaEUsTUFBTUcsaUJBQWlCLElBQUksQ0FBQ3BCLGtCQUFrQixDQUFDcEI7UUFFL0MsSUFBSXdDLG1CQUFtQixNQUFNO1lBQzNCbkIsWUFBWW1CLGdCQUFnQixHQUFHO1lBRS9CeEMsUUFBUXlDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRUosZ0JBQWdCLDRCQUE0QixDQUFDO1FBQ3hFLE9BQU87WUFDTCxJQUFJSyxZQUFZO1lBRWhCLElBQUksQ0FBQ0EsV0FBVztnQkFDZCxNQUFNQyx3QkFBd0IsSUFBSSxDQUFDQyxvQkFBb0IsQ0FBQzVDO2dCQUV4RCxJQUFJMkMsdUJBQXVCO29CQUN6QkQsWUFBWTtnQkFDZDtZQUNGO1lBRUEsSUFBSSxDQUFDQSxXQUFXO2dCQUNkLE1BQU1yQixZQUFZLElBQUksRUFDaEJ3QixlQUFlN0MsUUFBUThDLHlCQUF5QixDQUFDekI7Z0JBRXZELElBQUl3QixjQUFjO29CQUNoQkgsWUFBWTtnQkFDZDtZQUNGO1lBRUEsSUFBSUEsV0FBVztnQkFDYnJCLFlBQVksSUFBSSxFQUFFLEdBQUc7Z0JBRXJCckIsUUFBUStDLFlBQVksQ0FBQzFCO2dCQUVyQnJCLFFBQVF5QyxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsRUFBRUosZ0JBQWdCLFlBQVksQ0FBQztZQUNsRTtRQUNGO1FBRUEsT0FBT2hCO0lBQ1Q7SUFFQXVCLHFCQUFxQjVDLE9BQU8sRUFBRTtRQUM1QixJQUFJMkMsd0JBQXdCO1FBRTVCLE1BQU1OLGtCQUFrQixJQUFJLENBQUNDLFNBQVMsSUFDaENVLHFCQUFxQixJQUFJLENBQUM3QyxZQUFZLENBQUNtQyxTQUFTO1FBRXREdEMsUUFBUXVDLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFRixnQkFBZ0IsZUFBZSxFQUFFVyxtQkFBbUIsbUJBQW1CLENBQUM7UUFFekcsTUFBTUMsZUFBZUMsdUNBQXdCLEVBQ3ZDQyxvQkFBb0JuRCxRQUFRb0QsMEJBQTBCLENBQUNILGVBQ3ZESSxXQUFXRixtQkFDWGhELGVBQWVILFFBQVFzRCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUNuRCxZQUFZO1FBRS9ELElBQUlBLGlCQUFpQixNQUFNO1lBQ3pCLE1BQU1vRCxxQ0FBcUNwRCxhQUFhcUQscUJBQXFCLENBQUNILFVBQVVyRDtZQUV4RixJQUFJdUQsb0NBQW9DO2dCQUN0Q1osd0JBQXdCO1lBQzFCO1FBQ0YsT0FBTztZQUNMM0MsUUFBUXlDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRU8sbUJBQW1CLDhCQUE4QixDQUFDO1FBQzFFO1FBRUEsT0FBT0w7SUFDVDtJQUVBYyx1QkFBdUJ6RCxPQUFPLEVBQUU7UUFDOUIsSUFBSTBELDBCQUEwQjtRQUU5QixNQUFNckIsa0JBQWtCLElBQUksQ0FBQ0MsU0FBUyxJQUFJLEdBQUc7UUFFN0N0QyxRQUFRdUMsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVGLGdCQUFnQixnQ0FBZ0MsQ0FBQztRQUVsRixNQUFNbEMsZUFBZSxJQUFJLENBQUNDLGVBQWUsSUFDbkNNLG1CQUFtQlAsYUFBYUssT0FBTyxJQUN2Q21ELHNCQUFzQjNELFFBQVE0RCx1Q0FBdUMsQ0FBQ2xEO1FBRTVFLElBQUlpRCxxQkFBcUI7WUFDdkJELDBCQUEwQjtRQUM1QjtRQUVBLElBQUlBLHlCQUF5QjtZQUMzQjFELFFBQVF5QyxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsRUFBRUosZ0JBQWdCLDhCQUE4QixDQUFDO1FBQ3BGO1FBRUEsT0FBT3FCO0lBQ1Q7SUFFQUcsV0FBV0MsS0FBSyxFQUFFOUQsT0FBTyxFQUFFO1FBQ3pCLElBQUkrRDtRQUVKLE1BQU1DLGtCQUFrQmhFLFNBQVMsR0FBRztRQUVwQ0EsVUFBVSxJQUFJLENBQUNpRSxVQUFVO1FBRXpCLE1BQU1DLGlCQUFpQmxFLFNBQVUsR0FBRztRQUVwQ0EsVUFBVWdFLGlCQUFrQixHQUFHO1FBRS9CLE1BQU0zQyxZQUFZLElBQUksRUFDaEI4QyxjQUFjTCxNQUFNeEIsU0FBUyxJQUM3QkQsa0JBQWtCaEIsVUFBVWlCLFNBQVM7UUFFM0N0QyxRQUFRdUMsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFNEIsWUFBWSxrQkFBa0IsRUFBRTlCLGdCQUFnQixjQUFjLENBQUM7UUFFOUYsTUFBTStCLG9CQUFvQk4sTUFBTTFELGVBQWUsSUFDekNpRSxzQkFBc0IsSUFBSSxDQUFDbEUsWUFBWSxFQUN2Q21FLHVCQUF1QkYsbUJBQ3ZCRyxtQ0FBbUNDLElBQUFBLHFDQUE4QixFQUFDSCxxQkFBcUJDLHNCQUFzQkosZ0JBQWdCRjtRQUVuSUQsZUFBZVEsa0NBQWtDLEdBQUc7UUFFcEQsSUFBSVIsY0FBYztZQUNoQi9ELFFBQVF5QyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRTBCLFlBQVksa0JBQWtCLEVBQUU5QixnQkFBZ0IsWUFBWSxDQUFDO1FBQ2hHO1FBRUEsT0FBTzBCO0lBQ1Q7SUFFQVUsa0JBQWtCdEUsWUFBWSxFQUFFSCxPQUFPLEVBQUU7UUFDdkMsSUFBSTBFLHNCQUFzQjtRQUUxQixNQUFNVixrQkFBa0JoRSxTQUFTLEdBQUc7UUFFcENBLFVBQVUsSUFBSSxDQUFDaUUsVUFBVTtRQUV6QixNQUFNQyxpQkFBaUJsRSxTQUFVLEdBQUc7UUFFcENBLFVBQVVnRSxpQkFBa0IsR0FBRztRQUUvQixNQUFNM0Isa0JBQWtCLElBQUksQ0FBQ0MsU0FBUyxJQUNoQ1UscUJBQXFCN0MsYUFBYW1DLFNBQVM7UUFFakR0QyxRQUFRdUMsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFUyxtQkFBbUIseUJBQXlCLEVBQUVYLGdCQUFnQixjQUFjLENBQUM7UUFFNUcsTUFBTWtDLG1DQUFtQ0ksSUFBQUEsZ0JBQU8sRUFBQyxDQUFDWDtZQUNoRCxNQUFNSyxzQkFBc0IsSUFBSSxDQUFDbEUsWUFBWSxFQUN2Q21FLHVCQUF1Qm5FLGNBQ3ZCb0UsbUNBQW1DQyxJQUFBQSxxQ0FBOEIsRUFBQ0gscUJBQXFCQyxzQkFBc0JKLGdCQUFnQkY7WUFFbkksT0FBT087UUFDVCxHQUFHUDtRQUVILElBQUlPLGtDQUFrQztZQUNwQ0csc0JBQXNCO1FBQ3hCO1FBRUEsSUFBSUEscUJBQXFCO1lBQ3ZCMUUsUUFBUXlDLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFTyxtQkFBbUIseUJBQXlCLEVBQUVYLGdCQUFnQixZQUFZLENBQUM7UUFDOUc7UUFFQSxPQUFPcUM7SUFDVDtJQUVBRSwyQkFBMkJDLHFCQUFxQixFQUFFN0UsT0FBTyxFQUFFO1FBQ3pELElBQUk4RTtRQUVKLE1BQU16RCxZQUFZLElBQUksRUFDaEJnQixrQkFBa0JoQixVQUFVaUIsU0FBUyxJQUNyQ3lDLDhCQUE4QkYsc0JBQXNCdkMsU0FBUztRQUVuRXRDLFFBQVF1QyxLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUV3Qyw0QkFBNEIscUNBQXFDLEVBQUUxQyxnQkFBZ0IsY0FBYyxDQUFDO1FBRWpJLE1BQU15QixRQUFRZSxzQkFBc0JHLFFBQVEsSUFDdENDLGdCQUFnQixFQUFFLEVBQ2xCbEIsZUFBZSxJQUFJLENBQUNGLFVBQVUsQ0FBQ0MsT0FBT21CLGVBQWVqRjtRQUUzRDhFLCtCQUErQmYsY0FBZSxHQUFHO1FBRWpELElBQUllLDhCQUE4QjtZQUNoQzlFLFFBQVF1QyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRXdDLDRCQUE0QixxQ0FBcUMsRUFBRTFDLGdCQUFnQixZQUFZLENBQUM7UUFDbkk7UUFFQSxPQUFPeUM7SUFDVDtJQUVBSSxTQUFTO1FBQ1AsTUFBTUMsbUJBQW1CQyxJQUFBQSxvQ0FBOEIsRUFBQyxJQUFJLENBQUNqRixZQUFZLEdBQ25FQSxlQUFlZ0Ysa0JBQ2ZFLE9BQU87WUFDTGxGO1FBQ0Y7UUFFTixPQUFPa0Y7SUFDVDtJQUVBLE9BQU9DLE9BQU8sWUFBWTtJQUUxQixPQUFPQyxTQUFTRixJQUFJLEVBQUVyRixPQUFPLEVBQUU7UUFDN0IsUUFBUTtJQUNWO0FBQ0YifQ==