occam-verify-cli 1.0.382 → 1.0.385

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 (227) hide show
  1. package/lib/action/verify.js +2 -1
  2. package/lib/context/file.js +2 -2
  3. package/lib/context/release.js +2 -2
  4. package/lib/mixins/statement/verify.js +3 -3
  5. package/lib/mixins/step/unify.js +4 -4
  6. package/lib/mixins/term/verify.js +4 -4
  7. package/lib/ontology/assertion/contained.js +316 -0
  8. package/lib/ontology/assertion/defined.js +290 -0
  9. package/lib/ontology/assertion/property.js +271 -0
  10. package/lib/ontology/assertion/satisfies.js +254 -0
  11. package/lib/ontology/assertion/subproof.js +186 -0
  12. package/lib/ontology/assertion/type.js +252 -0
  13. package/lib/{dom → ontology}/axiom.js +3 -3
  14. package/lib/{dom → ontology}/combinator/bracketed.js +4 -4
  15. package/lib/ontology/combinator.js +141 -0
  16. package/lib/ontology/conclusion.js +172 -0
  17. package/lib/{dom → ontology}/conjecture.js +3 -3
  18. package/lib/{dom → ontology}/constructor/bracketed.js +5 -5
  19. package/lib/ontology/constructor.js +171 -0
  20. package/lib/ontology/declaration/combinator.js +168 -0
  21. package/lib/ontology/declaration/complexType.js +346 -0
  22. package/lib/ontology/declaration/constructor.js +199 -0
  23. package/lib/ontology/declaration/metavariable.js +209 -0
  24. package/lib/ontology/declaration/simpleType.js +243 -0
  25. package/lib/ontology/declaration/typePrefix.js +181 -0
  26. package/lib/ontology/declaration/variable.js +197 -0
  27. package/lib/ontology/declaration.js +360 -0
  28. package/lib/ontology/deduction.js +186 -0
  29. package/lib/ontology/derivation.js +155 -0
  30. package/lib/ontology/equality.js +288 -0
  31. package/lib/{dom → ontology}/error.js +3 -3
  32. package/lib/ontology/frame.js +362 -0
  33. package/lib/ontology/hypothesis.js +190 -0
  34. package/lib/ontology/judgement.js +241 -0
  35. package/lib/ontology/label.js +199 -0
  36. package/lib/{dom → ontology}/lemma.js +3 -3
  37. package/lib/{dom → ontology}/metaLemma.js +3 -3
  38. package/lib/{dom → ontology}/metaType.js +3 -3
  39. package/lib/{dom → ontology}/metatheorem.js +3 -3
  40. package/lib/ontology/metavariable.js +504 -0
  41. package/lib/{dom → ontology}/parameter.js +3 -3
  42. package/lib/ontology/premise.js +271 -0
  43. package/lib/ontology/procedureCall.js +243 -0
  44. package/lib/{dom → ontology}/procedureReference.js +3 -3
  45. package/lib/{dom → ontology}/proof.js +4 -4
  46. package/lib/ontology/property.js +166 -0
  47. package/lib/ontology/propertyRelation.js +202 -0
  48. package/lib/ontology/reference.js +293 -0
  49. package/lib/ontology/rule.js +375 -0
  50. package/lib/ontology/section.js +255 -0
  51. package/lib/ontology/signature.js +220 -0
  52. package/lib/{dom → ontology}/statement.js +3 -3
  53. package/lib/ontology/step.js +283 -0
  54. package/lib/ontology/subDerivation.js +147 -0
  55. package/lib/ontology/subproof.js +266 -0
  56. package/lib/ontology/substitution/frame.js +216 -0
  57. package/lib/{dom → ontology}/substitution/reference.js +3 -3
  58. package/lib/{dom → ontology}/substitution/statement.js +3 -3
  59. package/lib/ontology/substitution/term.js +230 -0
  60. package/lib/ontology/substitution.js +207 -0
  61. package/lib/ontology/supposition.js +283 -0
  62. package/lib/ontology/term.js +339 -0
  63. package/lib/{dom → ontology}/theorem.js +3 -3
  64. package/lib/ontology/topLevelAssertion.js +432 -0
  65. package/lib/ontology/topLevelMetaAssertion.js +235 -0
  66. package/lib/ontology/type.js +556 -0
  67. package/lib/ontology/typePrefix.js +99 -0
  68. package/lib/ontology/variable.js +331 -0
  69. package/lib/ontology.js +27 -0
  70. package/lib/preamble.js +60 -60
  71. package/lib/prepare.js +25 -0
  72. package/lib/unifier/intrinsicLevel.js +3 -3
  73. package/lib/unifier/metaLevel.js +7 -7
  74. package/lib/unifier/metavariable.js +3 -3
  75. package/lib/unifier/statementWithCombinator.js +5 -5
  76. package/lib/unifier/termWithConstructor.js +3 -3
  77. package/lib/utilities/brackets.js +5 -5
  78. package/lib/utilities/context.js +12 -12
  79. package/lib/utilities/fileSystem.js +2 -2
  80. package/lib/utilities/json.js +30 -30
  81. package/lib/utilities/node.js +7 -7
  82. package/lib/utilities/release.js +12 -4
  83. package/lib/utilities/releaseContext.js +1 -1
  84. package/lib/utilities/substitutions.js +6 -6
  85. package/lib/utilities/type.js +2 -2
  86. package/lib/verifier/combinator.js +4 -4
  87. package/lib/verifier/constructor.js +3 -3
  88. package/lib/verifier/topLevel.js +18 -18
  89. package/package.json +1 -1
  90. package/src/action/verify.js +2 -0
  91. package/src/context/file.js +1 -1
  92. package/src/context/release.js +1 -1
  93. package/src/mixins/statement/verify.js +2 -2
  94. package/src/mixins/step/unify.js +3 -3
  95. package/src/mixins/term/verify.js +3 -3
  96. package/src/{dom → ontology}/assertion/contained.js +4 -4
  97. package/src/{dom → ontology}/assertion/defined.js +6 -6
  98. package/src/{dom → ontology}/assertion/property.js +5 -5
  99. package/src/{dom → ontology}/assertion/satisfies.js +5 -5
  100. package/src/{dom → ontology}/assertion/subproof.js +4 -4
  101. package/src/{dom → ontology}/assertion/type.js +5 -5
  102. package/src/{dom → ontology}/axiom.js +2 -2
  103. package/src/{dom → ontology}/combinator/bracketed.js +4 -4
  104. package/src/{dom → ontology}/combinator.js +4 -4
  105. package/src/{dom → ontology}/conclusion.js +4 -4
  106. package/src/{dom → ontology}/conjecture.js +2 -2
  107. package/src/{dom → ontology}/constructor/bracketed.js +5 -5
  108. package/src/{dom → ontology}/constructor.js +5 -5
  109. package/src/{dom → ontology}/declaration/combinator.js +4 -4
  110. package/src/{dom → ontology}/declaration/complexType.js +4 -4
  111. package/src/{dom → ontology}/declaration/constructor.js +4 -4
  112. package/src/{dom → ontology}/declaration/metavariable.js +5 -5
  113. package/src/{dom → ontology}/declaration/simpleType.js +4 -4
  114. package/src/{dom → ontology}/declaration/typePrefix.js +4 -4
  115. package/src/{dom → ontology}/declaration/variable.js +4 -4
  116. package/src/{dom → ontology}/declaration.js +5 -5
  117. package/src/{dom → ontology}/deduction.js +4 -4
  118. package/src/{dom → ontology}/derivation.js +4 -4
  119. package/src/{dom → ontology}/equality.js +6 -6
  120. package/src/{dom → ontology}/error.js +2 -2
  121. package/src/{dom → ontology}/frame.js +6 -6
  122. package/src/{dom → ontology}/hypothesis.js +5 -6
  123. package/src/{dom → ontology}/judgement.js +5 -5
  124. package/src/{dom → ontology}/label.js +4 -4
  125. package/src/{dom → ontology}/lemma.js +2 -2
  126. package/src/{dom → ontology}/metaLemma.js +2 -2
  127. package/src/{dom → ontology}/metaType.js +2 -2
  128. package/src/{dom → ontology}/metatheorem.js +2 -2
  129. package/src/{dom → ontology}/metavariable.js +8 -8
  130. package/src/{dom → ontology}/parameter.js +2 -2
  131. package/src/{dom → ontology}/premise.js +5 -5
  132. package/src/{dom → ontology}/procedureCall.js +5 -5
  133. package/src/{dom → ontology}/procedureReference.js +2 -2
  134. package/src/{dom → ontology}/proof.js +4 -4
  135. package/src/{dom → ontology}/property.js +4 -4
  136. package/src/{dom → ontology}/propertyRelation.js +4 -4
  137. package/src/{dom → ontology}/reference.js +6 -6
  138. package/src/{dom → ontology}/rule.js +7 -7
  139. package/src/{dom → ontology}/section.js +8 -8
  140. package/src/{dom → ontology}/signature.js +4 -4
  141. package/src/{dom → ontology}/statement.js +2 -2
  142. package/src/{dom → ontology}/step.js +4 -4
  143. package/src/{dom → ontology}/subDerivation.js +4 -4
  144. package/src/{dom → ontology}/subproof.js +5 -5
  145. package/src/{dom → ontology}/substitution/frame.js +4 -4
  146. package/src/{dom → ontology}/substitution/reference.js +2 -2
  147. package/src/{dom → ontology}/substitution/statement.js +2 -2
  148. package/src/{dom → ontology}/substitution/term.js +5 -5
  149. package/src/{dom → ontology}/supposition.js +5 -5
  150. package/src/{dom → ontology}/term.js +6 -6
  151. package/src/{dom → ontology}/theorem.js +2 -2
  152. package/src/{dom → ontology}/topLevelAssertion.js +6 -6
  153. package/src/{dom → ontology}/topLevelMetaAssertion.js +2 -2
  154. package/src/{dom → ontology}/type.js +4 -4
  155. package/src/{dom → ontology}/typePrefix.js +3 -5
  156. package/src/{dom → ontology}/variable.js +6 -6
  157. package/src/ontology.js +13 -0
  158. package/src/preamble.js +59 -59
  159. package/src/{configure.js → prepare.js} +1 -1
  160. package/src/unifier/intrinsicLevel.js +2 -2
  161. package/src/unifier/metaLevel.js +6 -6
  162. package/src/unifier/metavariable.js +2 -2
  163. package/src/unifier/statementWithCombinator.js +4 -4
  164. package/src/unifier/termWithConstructor.js +2 -2
  165. package/src/utilities/brackets.js +4 -4
  166. package/src/utilities/context.js +11 -11
  167. package/src/utilities/fileSystem.js +1 -1
  168. package/src/utilities/json.js +29 -29
  169. package/src/utilities/node.js +6 -6
  170. package/src/utilities/release.js +1 -1
  171. package/src/utilities/releaseContext.js +3 -3
  172. package/src/utilities/substitutions.js +5 -5
  173. package/src/utilities/type.js +1 -1
  174. package/src/verifier/combinator.js +3 -3
  175. package/src/verifier/constructor.js +2 -2
  176. package/src/verifier/topLevel.js +17 -17
  177. package/verify.js +2 -2
  178. package/lib/configure.js +0 -25
  179. package/lib/dom/assertion/contained.js +0 -316
  180. package/lib/dom/assertion/defined.js +0 -290
  181. package/lib/dom/assertion/property.js +0 -271
  182. package/lib/dom/assertion/satisfies.js +0 -254
  183. package/lib/dom/assertion/subproof.js +0 -186
  184. package/lib/dom/assertion/type.js +0 -252
  185. package/lib/dom/combinator.js +0 -141
  186. package/lib/dom/conclusion.js +0 -172
  187. package/lib/dom/constructor.js +0 -171
  188. package/lib/dom/declaration/combinator.js +0 -168
  189. package/lib/dom/declaration/complexType.js +0 -346
  190. package/lib/dom/declaration/constructor.js +0 -199
  191. package/lib/dom/declaration/metavariable.js +0 -209
  192. package/lib/dom/declaration/simpleType.js +0 -243
  193. package/lib/dom/declaration/typePrefix.js +0 -181
  194. package/lib/dom/declaration/variable.js +0 -197
  195. package/lib/dom/declaration.js +0 -360
  196. package/lib/dom/deduction.js +0 -186
  197. package/lib/dom/derivation.js +0 -155
  198. package/lib/dom/equality.js +0 -288
  199. package/lib/dom/frame.js +0 -362
  200. package/lib/dom/hypothesis.js +0 -191
  201. package/lib/dom/judgement.js +0 -241
  202. package/lib/dom/label.js +0 -199
  203. package/lib/dom/metavariable.js +0 -504
  204. package/lib/dom/premise.js +0 -271
  205. package/lib/dom/procedureCall.js +0 -243
  206. package/lib/dom/property.js +0 -166
  207. package/lib/dom/propertyRelation.js +0 -202
  208. package/lib/dom/reference.js +0 -293
  209. package/lib/dom/rule.js +0 -375
  210. package/lib/dom/section.js +0 -255
  211. package/lib/dom/signature.js +0 -220
  212. package/lib/dom/step.js +0 -283
  213. package/lib/dom/subDerivation.js +0 -147
  214. package/lib/dom/subproof.js +0 -266
  215. package/lib/dom/substitution/frame.js +0 -216
  216. package/lib/dom/substitution/term.js +0 -230
  217. package/lib/dom/substitution.js +0 -207
  218. package/lib/dom/supposition.js +0 -283
  219. package/lib/dom/term.js +0 -339
  220. package/lib/dom/topLevelAssertion.js +0 -432
  221. package/lib/dom/topLevelMetaAssertion.js +0 -235
  222. package/lib/dom/type.js +0 -556
  223. package/lib/dom/typePrefix.js +0 -100
  224. package/lib/dom/variable.js +0 -331
  225. package/lib/dom.js +0 -27
  226. package/src/dom.js +0 -13
  227. /package/src/{dom → ontology}/substitution.js +0 -0
@@ -1,504 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "default", {
6
- enumerable: true,
7
- get: function() {
8
- return _default;
9
- }
10
- });
11
- var _dom = /*#__PURE__*/ _interop_require_wildcard(require("../dom"));
12
- var _metavariable = /*#__PURE__*/ _interop_require_default(require("../context/partial/metavariable"));
13
- var _constants = require("../constants");
14
- var _json = require("../utilities/json");
15
- var _context = require("../utilities/context");
16
- var _unification = require("../utilities/unification");
17
- function _class_call_check(instance, Constructor) {
18
- if (!(instance instanceof Constructor)) {
19
- throw new TypeError("Cannot call a class as a function");
20
- }
21
- }
22
- function _defineProperties(target, props) {
23
- for(var i = 0; i < props.length; i++){
24
- var descriptor = props[i];
25
- descriptor.enumerable = descriptor.enumerable || false;
26
- descriptor.configurable = true;
27
- if ("value" in descriptor) descriptor.writable = true;
28
- Object.defineProperty(target, descriptor.key, descriptor);
29
- }
30
- }
31
- function _create_class(Constructor, protoProps, staticProps) {
32
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
33
- if (staticProps) _defineProperties(Constructor, staticProps);
34
- return Constructor;
35
- }
36
- function _define_property(obj, key, value) {
37
- if (key in obj) {
38
- Object.defineProperty(obj, key, {
39
- value: value,
40
- enumerable: true,
41
- configurable: true,
42
- writable: true
43
- });
44
- } else {
45
- obj[key] = value;
46
- }
47
- return obj;
48
- }
49
- function _interop_require_default(obj) {
50
- return obj && obj.__esModule ? obj : {
51
- default: obj
52
- };
53
- }
54
- function _getRequireWildcardCache(nodeInterop) {
55
- if (typeof WeakMap !== "function") return null;
56
- var cacheBabelInterop = new WeakMap();
57
- var cacheNodeInterop = new WeakMap();
58
- return (_getRequireWildcardCache = function(nodeInterop) {
59
- return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
60
- })(nodeInterop);
61
- }
62
- function _interop_require_wildcard(obj, nodeInterop) {
63
- if (!nodeInterop && obj && obj.__esModule) {
64
- return obj;
65
- }
66
- if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
67
- return {
68
- default: obj
69
- };
70
- }
71
- var cache = _getRequireWildcardCache(nodeInterop);
72
- if (cache && cache.has(obj)) {
73
- return cache.get(obj);
74
- }
75
- var newObj = {
76
- __proto__: null
77
- };
78
- var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
79
- for(var key in obj){
80
- if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
81
- var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
82
- if (desc && (desc.get || desc.set)) {
83
- Object.defineProperty(newObj, key, desc);
84
- } else {
85
- newObj[key] = obj[key];
86
- }
87
- }
88
- }
89
- newObj.default = obj;
90
- if (cache) {
91
- cache.set(obj, newObj);
92
- }
93
- return newObj;
94
- }
95
- var _Metavariable;
96
- var _default = (0, _dom.domAssigned)((_Metavariable = /*#__PURE__*/ function() {
97
- function Metavariable(string, node, tokens, name, type, metaType) {
98
- _class_call_check(this, Metavariable);
99
- this.string = string;
100
- this.node = node;
101
- this.tokens = tokens;
102
- this.name = name;
103
- this.type = type;
104
- this.metaType = metaType;
105
- }
106
- _create_class(Metavariable, [
107
- {
108
- key: "getString",
109
- value: function getString() {
110
- return this.string;
111
- }
112
- },
113
- {
114
- key: "getNode",
115
- value: function getNode() {
116
- return this.node;
117
- }
118
- },
119
- {
120
- key: "getTokens",
121
- value: function getTokens() {
122
- return this.tokens;
123
- }
124
- },
125
- {
126
- key: "getName",
127
- value: function getName() {
128
- return this.name;
129
- }
130
- },
131
- {
132
- key: "getType",
133
- value: function getType() {
134
- return this.type;
135
- }
136
- },
137
- {
138
- key: "getMetaType",
139
- value: function getMetaType() {
140
- return this.metaType;
141
- }
142
- },
143
- {
144
- key: "setNode",
145
- value: function setNode(node) {
146
- this.node = node;
147
- }
148
- },
149
- {
150
- key: "setTokens",
151
- value: function setTokens(tokens) {
152
- this.tokens = tokens;
153
- }
154
- },
155
- {
156
- key: "setName",
157
- value: function setName(name) {
158
- this.name = name;
159
- }
160
- },
161
- {
162
- key: "setType",
163
- value: function setType(type) {
164
- this.type = type;
165
- }
166
- },
167
- {
168
- key: "setMetaType",
169
- value: function setMetaType(metaType) {
170
- this.metaType = metaType;
171
- }
172
- },
173
- {
174
- key: "matchParameter",
175
- value: function matchParameter(parameter) {
176
- var name = parameter.getName(), nameMatches = name === this.name, parameterMatches = nameMatches; ///
177
- return parameterMatches;
178
- }
179
- },
180
- {
181
- key: "matchMetavariableName",
182
- value: function matchMetavariableName(metavariableName) {
183
- var metavariableNameMatches = metavariableName === this.name;
184
- return metavariableNameMatches;
185
- }
186
- },
187
- {
188
- key: "isMetaTypeEqualTo",
189
- value: function isMetaTypeEqualTo(metaType) {
190
- return this.metaType.isEqualTo(metaType);
191
- }
192
- },
193
- {
194
- key: "isEqualTo",
195
- value: function isEqualTo(metavariable) {
196
- var metavariableString = metavariable.getString(), equalTo = metavariableString === this.string;
197
- return equalTo;
198
- }
199
- },
200
- {
201
- key: "verify",
202
- value: function verify(context) {
203
- var verifies;
204
- var metavariableString = this.string; ///
205
- context.trace("Verifying the '".concat(metavariableString, "' metavariable..."));
206
- var metavariable = this, generalContext = context, specificContext = context, metavariablePresent = generalContext.isMetavariablePresent(metavariable, generalContext, specificContext);
207
- verifies = metavariablePresent; ///
208
- if (verifies) {
209
- context.debug("...verified the '".concat(metavariableString, "' metavariable."));
210
- }
211
- return verifies;
212
- }
213
- },
214
- {
215
- key: "verifyGivenMetaType",
216
- value: function verifyGivenMetaType(metaType, context) {
217
- var verifiesGivenMetaType = false;
218
- var metavariableString = this.string, metaTypeString = metaType.getString();
219
- context.trace("Verifying the '".concat(metavariableString, "' metavariable given the '").concat(metaTypeString, "' meta-type..."));
220
- var metavariable = this; ///
221
- var specificContext = context, generalContext = context; ///
222
- metavariable = generalContext.findMetavariable(metavariable, generalContext, specificContext);
223
- if (metavariable !== null) {
224
- var metavariableMetaTypeEqualToMetaType = metavariable.isMetaTypeEqualTo(metaType);
225
- verifiesGivenMetaType = metavariableMetaTypeEqualToMetaType; ///
226
- }
227
- if (verifiesGivenMetaType) {
228
- context.debug("...verified the '".concat(metavariableString, "' metavariable given the '").concat(metaTypeString, "' meta-type."));
229
- }
230
- return verifiesGivenMetaType;
231
- }
232
- },
233
- {
234
- key: "unifyFrame",
235
- value: function unifyFrame(frame, substitutions, generalContext, specificContext) {
236
- var frameUnifies = false;
237
- var frameString = frame.getString(), metavariableString = this.string; ///
238
- specificContext.trace("Unifying the '".concat(frameString, "' frame with the '").concat(metavariableString, "' metavariable..."));
239
- var frameMetavariableUnifies = this.unifyFrameMetavariable(frame, substitutions, generalContext, specificContext);
240
- if (frameMetavariableUnifies) {
241
- frameUnifies = true;
242
- } else {
243
- var metavariable = this, simpleSubstitutionPresent = substitutions.isSimpleSubstitutionPresentByMetavariable(metavariable);
244
- if (simpleSubstitutionPresent) {
245
- var simpleSubstitution = substitutions.findSimpleSubstitutionByMetavariable(metavariable), substitution = simpleSubstitution, substitutionFrameEqualToFrame = substitution.isFrameEqualTo(frame);
246
- if (substitutionFrameEqualToFrame) {
247
- frameUnifies = true;
248
- }
249
- } else {
250
- var FrameSubstitution = _dom.default.FrameSubstitution, context = specificContext, metavariable1 = this, frameSubstitution = FrameSubstitution.fromFrameAndMetavariable(frame, metavariable1, context), substitution1 = frameSubstitution; ///
251
- substitutions.addSubstitution(substitution1, specificContext);
252
- frameUnifies = true;
253
- }
254
- }
255
- if (frameUnifies) {
256
- specificContext.debug("...unified the '".concat(frameString, "' frame with the '").concat(metavariableString, "' metavariable."));
257
- }
258
- return frameUnifies;
259
- }
260
- },
261
- {
262
- key: "unifyReference",
263
- value: function unifyReference(reference, substitutions, generalContext, specificContext) {
264
- var referenceUnifies = false;
265
- var referenceString = reference.getString(), metavariableString = this.string;
266
- specificContext.trace("Unifying the '".concat(referenceString, "' reference with the '").concat(metavariableString, "' metavariable..."));
267
- var referenceMetavariableUnifies = this.unifyReferenceMetavariable(reference, substitutions, generalContext, specificContext);
268
- if (referenceMetavariableUnifies) {
269
- referenceUnifies = true;
270
- } else {
271
- var context = specificContext, metavariable = this, simpleSubstitutionPresent = substitutions.isSimpleSubstitutionPresentByMetavariable(metavariable);
272
- if (simpleSubstitutionPresent) {
273
- var simpleSubstitution = substitutions.findSimpleSubstitutionByMetavariable(metavariable), substitution = simpleSubstitution, substitutionReferenceEqualToReference = substitution.isReferenceEqualTo(reference, context);
274
- if (substitutionReferenceEqualToReference) {
275
- referenceUnifies = true;
276
- }
277
- } else {
278
- var ReferenceSubstitution = _dom.default.ReferenceSubstitution, metavariable1 = this, referenceSubstitution = ReferenceSubstitution.fromReferenceAndMetavariable(reference, metavariable1, context), substitution1 = referenceSubstitution; ///
279
- substitutions.addSubstitution(substitution1, specificContext);
280
- referenceUnifies = true;
281
- }
282
- }
283
- if (referenceUnifies) {
284
- specificContext.debug("...unified the '".concat(referenceString, "' reference with the '").concat(metavariableString, "' metavariable."));
285
- }
286
- return referenceUnifies;
287
- }
288
- },
289
- {
290
- key: "unifyStatement",
291
- value: function unifyStatement(statement, substitution, substitutions, generalContext, specificContext) {
292
- var statementUnifies = false;
293
- var statementString = statement.getString(), metavariableString = this.string, substitutionString = substitution !== null ? substitution.getString() : _constants.EMPTY_STRING;
294
- specificContext.trace("Unifying the '".concat(statementString, "' statement with the '").concat(metavariableString).concat(substitutionString, "' metavariable..."));
295
- var statementMetavariableUnifies = this.unifyStatementMetavariable(statement, substitutions, generalContext, specificContext);
296
- if (statementMetavariableUnifies) {
297
- statementUnifies = true;
298
- } else {
299
- var context = specificContext, metavariable = this, substitutionPresent = substitutions.isSubstitutionPresentByMetavariableAndSubstitution(metavariable, substitution);
300
- if (substitutionPresent) {
301
- substitution = substitutions.findSubstitutionByMetavariableAndSubstitution(metavariable, substitution); ///
302
- var substitutionStatementEqualToStatement = substitution.isStatementEqualTo(statement, context);
303
- if (substitutionStatementEqualToStatement) {
304
- statementUnifies = true;
305
- }
306
- } else {
307
- var StatementSubstitution = _dom.default.StatementSubstitution, metavariable1 = this, statementSubstitution = StatementSubstitution.fromStatementMetavariableAndSubstitution(statement, metavariable1, substitution, context);
308
- substitution = statementSubstitution; ///
309
- substitutions.addSubstitution(substitution, specificContext);
310
- statementUnifies = true;
311
- }
312
- }
313
- if (statementUnifies) {
314
- specificContext.debug("...unified the '".concat(statementString, "' statement with the '").concat(metavariableString).concat(substitutionString, "' metavariable."));
315
- }
316
- return statementUnifies;
317
- }
318
- },
319
- {
320
- key: "unifyMetavariable",
321
- value: function unifyMetavariable(metavariable, generalContext, specificContext) {
322
- var metavariableUnifies;
323
- var generalMetavariable = this, specificMetavariable = metavariable, generalMetavariableString = generalMetavariable.getString(), specificMetavariableString = specificMetavariable.getString();
324
- specificContext.trace("Unifying the '".concat(specificMetavariableString, "' metavariable with the '").concat(generalMetavariableString, "' metavariable..."));
325
- metavariableUnifies = (0, _unification.unifyMetavariable)(generalMetavariable, specificMetavariable, generalContext, specificContext);
326
- if (metavariableUnifies) {
327
- specificContext.debug("...unified the '".concat(specificMetavariableString, "' metavariable with the '").concat(generalMetavariableString, "' metavariable."));
328
- }
329
- return metavariableUnifies;
330
- }
331
- },
332
- {
333
- key: "unifyFrameMetavariable",
334
- value: function unifyFrameMetavariable(frame, substitutions, generalContext, specificContext) {
335
- var frameMetavariableUnifies = false;
336
- var generalContextFilePath = generalContext.getFilePath(), specificContextFilePath = specificContext.getFilePath();
337
- if (generalContextFilePath === specificContextFilePath) {
338
- var frameString = frame.getString();
339
- if (frameString === this.string) {
340
- frameMetavariableUnifies = true;
341
- } else {
342
- var context = specificContext, metavariable = (0, _context.metavariableFromFrame)(frame, context);
343
- if (metavariable !== null) {
344
- var frameMetavariable = metavariable, metavariableString = this.string, frameMetavariableString = frameMetavariable.getString();
345
- specificContext.trace("Unifying the frame's '".concat(frameMetavariableString, "' metavariable with the '").concat(metavariableString, "' metavariable..."));
346
- var specificMetavariable = frameMetavariable, generalMetavariable = this, metavariableUnifiesIntrinsically = (0, _unification.unifyMetavariableIntrinsically)(generalMetavariable, specificMetavariable, substitutions, generalContext, specificContext);
347
- frameMetavariableUnifies = metavariableUnifiesIntrinsically; ///
348
- if (frameMetavariableUnifies) {
349
- specificContext.debug("...unified the frame's '".concat(frameMetavariableString, "' metavariable with the '").concat(metavariableString, "' metavariable."));
350
- }
351
- }
352
- }
353
- }
354
- return frameMetavariableUnifies;
355
- }
356
- },
357
- {
358
- key: "unifyReferenceMetavariable",
359
- value: function unifyReferenceMetavariable(reference, substitutions, generalContext, specificContext) {
360
- var referenceMetavariableUnifies = false;
361
- var generalContextFilePath = generalContext.getFilePath(), specificContextFilePath = specificContext.getFilePath();
362
- if (generalContextFilePath === specificContextFilePath) {
363
- var referenceString = reference.getString();
364
- if (referenceString === this.string) {
365
- referenceMetavariableUnifies = true;
366
- } else {
367
- var metavariable = reference.getMetavariable();
368
- var referenceMetavariable = metavariable, metavariableString = this.string, referenceMetavariableString = referenceMetavariable.getString();
369
- specificContext.trace("Unifying the reference's ".concat(referenceMetavariableString, "' metavariable with the '").concat(metavariableString, "' metavariable..."));
370
- var specificMetavariable = referenceMetavariable, generalMetavariable = this, metavariableUnifiesIntrinsically = (0, _unification.unifyMetavariableIntrinsically)(generalMetavariable, specificMetavariable, substitutions, generalContext, specificContext);
371
- referenceMetavariableUnifies = metavariableUnifiesIntrinsically; ///
372
- if (referenceMetavariableUnifies) {
373
- specificContext.debug("...unified the reference's '".concat(referenceMetavariableString, "' metavariable with the '").concat(metavariableString, "' metavariable."));
374
- }
375
- }
376
- }
377
- return referenceMetavariableUnifies;
378
- }
379
- },
380
- {
381
- key: "unifyStatementMetavariable",
382
- value: function unifyStatementMetavariable(statement, substitutions, generalContext, specificContext) {
383
- var statementMetavariableUnifies = false;
384
- var generalContextFilePath = generalContext.getFilePath(), specificContextFilePath = specificContext.getFilePath();
385
- if (generalContextFilePath === specificContextFilePath) {
386
- var statementString = statement.getString();
387
- if (statementString === this.string) {
388
- statementMetavariableUnifies = true;
389
- } else {
390
- var context = specificContext, metavariable = (0, _context.metavariableFromStatement)(statement, context);
391
- if (metavariable !== null) {
392
- var statementMetavariable = metavariable, metavariableString = this.string, statementMetavariableString = statementMetavariable.getString();
393
- specificContext.trace("Unifying the statement's ".concat(statementMetavariableString, "' metavariable with the '").concat(metavariableString, "' metavariable..."));
394
- var specificMetavariable = statementMetavariable, generalMetavariable = this, metavariableUnifiesIntrinsically = (0, _unification.unifyMetavariableIntrinsically)(generalMetavariable, specificMetavariable, substitutions, generalContext, specificContext);
395
- statementMetavariableUnifies = metavariableUnifiesIntrinsically; ///
396
- if (statementMetavariableUnifies) {
397
- specificContext.debug("...unified the statement's '".concat(statementMetavariableString, "' metavariable with the '").concat(metavariableString, "' metavariable."));
398
- }
399
- }
400
- }
401
- }
402
- return statementMetavariableUnifies;
403
- }
404
- },
405
- {
406
- key: "toJSON",
407
- value: function toJSON() {
408
- var metaTypeJSON = (0, _json.metaTypeToMetaTypeJSON)(this.metaType), typeJSON = (0, _json.typeToTypeJSON)(this.type), type = typeJSON, metaType = metaTypeJSON, string = this.string, json = {
409
- string: string,
410
- type: type,
411
- metaType: metaType
412
- };
413
- return json;
414
- }
415
- }
416
- ], [
417
- {
418
- key: "fromJSON",
419
- value: function fromJSON(json, context) {
420
- var string = json.string, lexer = context.getLexer(), parser = context.getParser(), metavariablePartialContext = _metavariable.default.fromStringLexerAndParser(string, lexer, parser), metavariableTokens = metavariablePartialContext.getMetavariableTokens(), metavariableNode = metavariablePartialContext.getMetavariableNode(), metavariableName = metavariableNode.getMetavariableName(), name = metavariableName, node = metavariableNode, tokens = metavariableTokens, type = (0, _json.typeFromJSON)(json, context), metaType = (0, _json.metaTypeFromJSON)(json, context), metavariable = new Metavariable(string, node, tokens, name, type, metaType);
421
- return metavariable;
422
- }
423
- },
424
- {
425
- key: "fromLabelNode",
426
- value: function fromLabelNode(labelNode, context) {
427
- var metavariableNode = labelNode.getMetavariableNode(), metavariable = metavariableFromMetavariableNode(metavariableNode, context);
428
- return metavariable;
429
- }
430
- },
431
- {
432
- key: "fromFrameNode",
433
- value: function fromFrameNode(frameNode, context) {
434
- var metavariable = null;
435
- var singularMetavariableNode = frameNode.getSingularMetavariableNode();
436
- if (singularMetavariableNode !== null) {
437
- var metavariableNode = singularMetavariableNode; ///
438
- metavariable = metavariableFromMetavariableNode(metavariableNode, context);
439
- }
440
- return metavariable;
441
- }
442
- },
443
- {
444
- key: "fromReferenceNode",
445
- value: function fromReferenceNode(referenceNode, context) {
446
- var metavariableNode = referenceNode.getMetavariableNode(), metavariable = metavariableFromMetavariableNode(metavariableNode, context);
447
- return metavariable;
448
- }
449
- },
450
- {
451
- key: "fromStatementNode",
452
- value: function fromStatementNode(statementNode, context) {
453
- var metavariable = null;
454
- var metavariableNode = statementNode.getMetavariableNode();
455
- if (metavariableNode !== null) {
456
- metavariable = metavariableFromMetavariableNode(metavariableNode, context);
457
- }
458
- return metavariable;
459
- }
460
- },
461
- {
462
- key: "fromDeclarationNode",
463
- value: function fromDeclarationNode(declarationNode, context) {
464
- var metavariableNode = declarationNode.getMetavariableNode(), metavariable = metavariableFromMetavariableNode(metavariableNode, context);
465
- return metavariable;
466
- }
467
- },
468
- {
469
- key: "fromMetavariableNode",
470
- value: function fromMetavariableNode(metavariableNode, context) {
471
- var metavariable = null;
472
- if (metavariableNode !== null) {
473
- metavariable = metavariableFromMetavariableNode(metavariableNode, context);
474
- }
475
- return metavariable;
476
- }
477
- },
478
- {
479
- key: "fromMetavariableDeclarationNode",
480
- value: function fromMetavariableDeclarationNode(metavariableDeclarationNode, context) {
481
- var MetaType = _dom.default.MetaType, metavariableNode = metavariableDeclarationNode.getMetavariableNode(), type = typeFromMetavariableDeclarationNode(metavariableDeclarationNode, context), metaType = MetaType.fromMetavariableDeclarationNode(metavariableDeclarationNode, context), metavariable = metavariableFromMetavariableNode(metavariableNode, context);
482
- metavariable.setType(type);
483
- metavariable.setMetaType(metaType);
484
- return metavariable;
485
- }
486
- }
487
- ]);
488
- return Metavariable;
489
- }(), _define_property(_Metavariable, "name", "Metavariable"), _Metavariable));
490
- function metavariableFromMetavariableNode(metavariableNode, context) {
491
- var Metavariable = _dom.default.Metavariable, metavariableName = metavariableNode.getMetavariableName(), type = null, name = metavariableName, node = metavariableNode, string = context.nodeAsString(node), tokens = context.nodeAsTokens(node), metaType = null, metavariable = new Metavariable(string, node, tokens, name, type, metaType);
492
- return metavariable;
493
- }
494
- function typeFromMetavariableDeclarationNode(metavariableDeclarationNode, context) {
495
- var type = null;
496
- var typeNode = metavariableDeclarationNode.getTypeNode();
497
- if (typeNode !== null) {
498
- var nominalTypeName = typeNode.getNominalTypeName();
499
- type = context.findTypeByNominalTypeName(nominalTypeName);
500
- }
501
- return type;
502
- }
503
-
504
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kb20vbWV0YXZhcmlhYmxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgZG9tIGZyb20gXCIuLi9kb21cIjtcbmltcG9ydCBNZXRhdmFyaWFibGVQYXJ0aWFsQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9wYXJ0aWFsL21ldGF2YXJpYWJsZVwiO1xuXG5pbXBvcnQgeyBkb21Bc3NpZ25lZCB9IGZyb20gXCIuLi9kb21cIjtcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHR5cGVGcm9tSlNPTiwgdHlwZVRvVHlwZUpTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcbmltcG9ydCB7IG1ldGFUeXBlRnJvbUpTT04sIG1ldGFUeXBlVG9NZXRhVHlwZUpTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcbmltcG9ydCB7IG1ldGF2YXJpYWJsZUZyb21GcmFtZSwgbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudCB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgdW5pZnlNZXRhdmFyaWFibGUsIHVuaWZ5TWV0YXZhcmlhYmxlSW50cmluc2ljYWxseSB9IGZyb20gXCIuLi91dGlsaXRpZXMvdW5pZmljYXRpb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgZG9tQXNzaWduZWQoY2xhc3MgTWV0YXZhcmlhYmxlIHtcbiAgY29uc3RydWN0b3Ioc3RyaW5nLCBub2RlLCB0b2tlbnMsIG5hbWUsIHR5cGUsIG1ldGFUeXBlKSB7XG4gICAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG4gICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5tZXRhVHlwZSA9IG1ldGFUeXBlO1xuICB9XG5cbiAgZ2V0U3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnN0cmluZztcbiAgfVxuXG4gIGdldE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgfVxuXG4gIGdldFRva2VucygpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnM7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBnZXRNZXRhVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhVHlwZTtcbiAgfVxuXG4gIHNldE5vZGUobm9kZSkge1xuICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gIH1cblxuICBzZXRUb2tlbnModG9rZW5zKSB7XG4gICAgdGhpcy50b2tlbnMgPSB0b2tlbnM7XG4gIH1cblxuICBzZXROYW1lKG5hbWUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgc2V0VHlwZSh0eXBlKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG4gIHNldE1ldGFUeXBlKG1ldGFUeXBlKSB7XG4gICAgdGhpcy5tZXRhVHlwZSA9IG1ldGFUeXBlO1xuICB9XG5cbiAgbWF0Y2hQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG4gICAgY29uc3QgbmFtZSA9IHBhcmFtZXRlci5nZXROYW1lKCksXG4gICAgICAgICAgbmFtZU1hdGNoZXMgPSAobmFtZSA9PT0gdGhpcy5uYW1lKSxcbiAgICAgICAgICBwYXJhbWV0ZXJNYXRjaGVzID0gbmFtZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlck1hdGNoZXM7XG4gIH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWVNYXRjaGVzID0gKG1ldGF2YXJpYWJsZU5hbWUgPT09IHRoaXMubmFtZSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTmFtZU1hdGNoZXM7XG4gIH1cblxuICBpc01ldGFUeXBlRXF1YWxUbyhtZXRhVHlwZSkgeyByZXR1cm4gdGhpcy5tZXRhVHlwZS5pc0VxdWFsVG8obWV0YVR5cGUpOyB9XG5cbiAgaXNFcXVhbFRvKG1ldGF2YXJpYWJsZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBlcXVhbFRvID0gKG1ldGF2YXJpYWJsZVN0cmluZyA9PT0gdGhpcy5zdHJpbmcpO1xuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICB2ZXJpZnkoY29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllcztcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZVN0cmluZyA9IHRoaXMuc3RyaW5nOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGUgPSB0aGlzLCAvLy9cbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGNvbnRleHQsICAvLy9cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0LCAgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlUHJlc2VudCA9IGdlbmVyYWxDb250ZXh0LmlzTWV0YXZhcmlhYmxlUHJlc2VudChtZXRhdmFyaWFibGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgdmVyaWZpZXMgPSBtZXRhdmFyaWFibGVQcmVzZW50OyAvLy9cblxuICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZXM7XG4gIH1cblxuICB2ZXJpZnlHaXZlbk1ldGFUeXBlKG1ldGFUeXBlLCBjb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVzR2l2ZW5NZXRhVHlwZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlU3RyaW5nID0gdGhpcy5zdHJpbmcsICAvLy9cbiAgICAgICAgICBtZXRhVHlwZVN0cmluZyA9IG1ldGFUeXBlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgZ2l2ZW4gdGhlICcke21ldGFUeXBlU3RyaW5nfScgbWV0YS10eXBlLi4uYCk7XG5cbiAgICBsZXQgbWV0YXZhcmlhYmxlID0gdGhpczsgIC8vL1xuXG4gICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dCwgIC8vL1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gY29udGV4dDsgLy8vXG5cbiAgICBtZXRhdmFyaWFibGUgPSBnZW5lcmFsQ29udGV4dC5maW5kTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9NZXRhVHlwZSA9IG1ldGF2YXJpYWJsZS5pc01ldGFUeXBlRXF1YWxUbyhtZXRhVHlwZSk7XG5cbiAgICAgIHZlcmlmaWVzR2l2ZW5NZXRhVHlwZSA9IG1ldGF2YXJpYWJsZU1ldGFUeXBlRXF1YWxUb01ldGFUeXBlOyAgLy8vXG4gICAgfVxuXG4gICAgaWYgKHZlcmlmaWVzR2l2ZW5NZXRhVHlwZSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSBnaXZlbiB0aGUgJyR7bWV0YVR5cGVTdHJpbmd9JyBtZXRhLXR5cGUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVzR2l2ZW5NZXRhVHlwZTtcbiAgfVxuXG4gIHVuaWZ5RnJhbWUoZnJhbWUsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBsZXQgZnJhbWVVbmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBmcmFtZVN0cmluZyA9IGZyYW1lLmdldFN0cmluZygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IHRoaXMuc3RyaW5nOyAvLy9cblxuICAgIHNwZWNpZmljQ29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgd2l0aCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICBjb25zdCBmcmFtZU1ldGF2YXJpYWJsZVVuaWZpZXMgPSB0aGlzLnVuaWZ5RnJhbWVNZXRhdmFyaWFibGUoZnJhbWUsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKGZyYW1lTWV0YXZhcmlhYmxlVW5pZmllcykge1xuICAgICAgZnJhbWVVbmlmaWVzID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlID0gdGhpcywgLy8vXG4gICAgICAgICAgICBzaW1wbGVTdWJzdGl0dXRpb25QcmVzZW50ID0gc3Vic3RpdHV0aW9ucy5pc1NpbXBsZVN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpO1xuXG4gICAgICBpZiAoc2ltcGxlU3Vic3RpdHV0aW9uUHJlc2VudCkge1xuICAgICAgICBjb25zdCBzaW1wbGVTdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25zLmZpbmRTaW1wbGVTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpLFxuICAgICAgICAgICAgICBzdWJzdGl0dXRpb24gPSBzaW1wbGVTdWJzdGl0dXRpb24sICAvLy9cbiAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uRnJhbWVFcXVhbFRvRnJhbWUgPSBzdWJzdGl0dXRpb24uaXNGcmFtZUVxdWFsVG8oZnJhbWUpO1xuXG4gICAgICAgIGlmIChzdWJzdGl0dXRpb25GcmFtZUVxdWFsVG9GcmFtZSkge1xuICAgICAgICAgIGZyYW1lVW5pZmllcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgRnJhbWVTdWJzdGl0dXRpb24gfSA9IGRvbSxcbiAgICAgICAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICBtZXRhdmFyaWFibGUgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gRnJhbWVTdWJzdGl0dXRpb24uZnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlKGZyYW1lLCBtZXRhdmFyaWFibGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBzdWJzdGl0dXRpb24gPSBmcmFtZVN1YnN0aXR1dGlvbjsgIC8vL1xuXG4gICAgICAgIHN1YnN0aXR1dGlvbnMuYWRkU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbiwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBmcmFtZVVuaWZpZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmcmFtZVVuaWZpZXMpIHtcbiAgICAgIHNwZWNpZmljQ29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSB3aXRoIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyYW1lVW5pZmllcztcbiAgfVxuXG4gIHVuaWZ5UmVmZXJlbmNlKHJlZmVyZW5jZSwgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCByZWZlcmVuY2VVbmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gdGhpcy5zdHJpbmc7XG5cbiAgICBzcGVjaWZpY0NvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2Ugd2l0aCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICBjb25zdCByZWZlcmVuY2VNZXRhdmFyaWFibGVVbmlmaWVzID0gdGhpcy51bmlmeVJlZmVyZW5jZU1ldGF2YXJpYWJsZShyZWZlcmVuY2UsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKHJlZmVyZW5jZU1ldGF2YXJpYWJsZVVuaWZpZXMpIHtcbiAgICAgIHJlZmVyZW5jZVVuaWZpZXMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgICBtZXRhdmFyaWFibGUgPSB0aGlzLCAvLy9cbiAgICAgICAgICAgIHNpbXBsZVN1YnN0aXR1dGlvblByZXNlbnQgPSBzdWJzdGl0dXRpb25zLmlzU2ltcGxlU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSk7XG5cbiAgICAgIGlmIChzaW1wbGVTdWJzdGl0dXRpb25QcmVzZW50KSB7XG4gICAgICAgIGNvbnN0IHNpbXBsZVN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMuZmluZFNpbXBsZVN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSksIC8vL1xuICAgICAgICAgICAgICBzdWJzdGl0dXRpb24gPSBzaW1wbGVTdWJzdGl0dXRpb24sICAvLy9cbiAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uUmVmZXJlbmNlRXF1YWxUb1JlZmVyZW5jZSA9IHN1YnN0aXR1dGlvbi5pc1JlZmVyZW5jZUVxdWFsVG8ocmVmZXJlbmNlLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAoc3Vic3RpdHV0aW9uUmVmZXJlbmNlRXF1YWxUb1JlZmVyZW5jZSkge1xuICAgICAgICAgIHJlZmVyZW5jZVVuaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7IFJlZmVyZW5jZVN1YnN0aXR1dGlvbiB9ID0gZG9tLFxuICAgICAgICAgICAgICBtZXRhdmFyaWFibGUgPSB0aGlzLFxuICAgICAgICAgICAgICByZWZlcmVuY2VTdWJzdGl0dXRpb24gPSBSZWZlcmVuY2VTdWJzdGl0dXRpb24uZnJvbVJlZmVyZW5jZUFuZE1ldGF2YXJpYWJsZShyZWZlcmVuY2UsIG1ldGF2YXJpYWJsZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbjsgIC8vL1xuXG4gICAgICAgIHN1YnN0aXR1dGlvbnMuYWRkU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbiwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICByZWZlcmVuY2VVbmlmaWVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVmZXJlbmNlVW5pZmllcykge1xuICAgICAgc3BlY2lmaWNDb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2Ugd2l0aCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlLmApO1xuICAgIH1cblxuICAgIHJldHVybiByZWZlcmVuY2VVbmlmaWVzO1xuICB9XG5cbiAgdW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBzdWJzdGl0dXRpb24sIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBsZXQgc3RhdGVtZW50VW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IHRoaXMuc3RyaW5nLCAvLy9cbiAgICAgICAgICBzdWJzdGl0dXRpb25TdHJpbmcgPSAoc3Vic3RpdHV0aW9uICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uLmdldFN0cmluZygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORztcblxuICAgIHNwZWNpZmljQ29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JHtzdWJzdGl0dXRpb25TdHJpbmd9JyBtZXRhdmFyaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudE1ldGF2YXJpYWJsZVVuaWZpZXMgPSB0aGlzLnVuaWZ5U3RhdGVtZW50TWV0YXZhcmlhYmxlKHN0YXRlbWVudCwgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBpZiAoc3RhdGVtZW50TWV0YXZhcmlhYmxlVW5pZmllcykge1xuICAgICAgc3RhdGVtZW50VW5pZmllcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IHRoaXMsIC8vL1xuICAgICAgICAgICAgc3Vic3RpdHV0aW9uUHJlc2VudCA9IHN1YnN0aXR1dGlvbnMuaXNTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24obWV0YXZhcmlhYmxlLCBzdWJzdGl0dXRpb24pO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uUHJlc2VudCkge1xuICAgICAgICBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25zLmZpbmRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbihtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbik7IC8vL1xuXG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvblN0YXRlbWVudEVxdWFsVG9TdGF0ZW1lbnQgPSBzdWJzdGl0dXRpb24uaXNTdGF0ZW1lbnRFcXVhbFRvKHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN1YnN0aXR1dGlvblN0YXRlbWVudEVxdWFsVG9TdGF0ZW1lbnQpIHtcbiAgICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24gfSA9IGRvbSxcbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlID0gdGhpcyxcbiAgICAgICAgICAgICAgc3RhdGVtZW50U3Vic3RpdHV0aW9uID0gU3RhdGVtZW50U3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnRNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24oc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbiwgY29udGV4dCk7XG5cbiAgICAgICAgc3Vic3RpdHV0aW9uID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uOyAgLy8vXG5cbiAgICAgICAgc3Vic3RpdHV0aW9ucy5hZGRTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uLCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIHN0YXRlbWVudFVuaWZpZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICBzcGVjaWZpY0NvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JHtzdWJzdGl0dXRpb25TdHJpbmd9JyBtZXRhdmFyaWFibGUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXM7XG4gIH1cblxuICB1bmlmeU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBsZXQgbWV0YXZhcmlhYmxlVW5pZmllcztcblxuICAgIGNvbnN0IGdlbmVyYWxNZXRhdmFyaWFibGUgPSB0aGlzLCAvLy9cbiAgICAgICAgICBzcGVjaWZpY01ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZSwgIC8vL1xuICAgICAgICAgIGdlbmVyYWxNZXRhdmFyaWFibGVTdHJpbmcgPSBnZW5lcmFsTWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICAgIHNwZWNpZmljTWV0YXZhcmlhYmxlU3RyaW5nID0gc3BlY2lmaWNNZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBzcGVjaWZpY0NvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzcGVjaWZpY01ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB3aXRoIHRoZSAnJHtnZW5lcmFsTWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICBtZXRhdmFyaWFibGVVbmlmaWVzID0gdW5pZnlNZXRhdmFyaWFibGUoZ2VuZXJhbE1ldGF2YXJpYWJsZSwgc3BlY2lmaWNNZXRhdmFyaWFibGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZVVuaWZpZXMpIHtcbiAgICAgIHNwZWNpZmljQ29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3BlY2lmaWNNZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgd2l0aCB0aGUgJyR7Z2VuZXJhbE1ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlVW5pZmllcztcbiAgfVxuXG4gIHVuaWZ5RnJhbWVNZXRhdmFyaWFibGUoZnJhbWUsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBsZXQgZnJhbWVNZXRhdmFyaWFibGVVbmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBnZW5lcmFsQ29udGV4dEZpbGVQYXRoID0gZ2VuZXJhbENvbnRleHQuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHRGaWxlUGF0aCA9IHNwZWNpZmljQ29udGV4dC5nZXRGaWxlUGF0aCgpO1xuXG4gICAgaWYgKGdlbmVyYWxDb250ZXh0RmlsZVBhdGggPT09IHNwZWNpZmljQ29udGV4dEZpbGVQYXRoKSB7XG4gICAgICBjb25zdCBmcmFtZVN0cmluZyA9IGZyYW1lLmdldFN0cmluZygpO1xuXG4gICAgICBpZiAoZnJhbWVTdHJpbmcgPT09IHRoaXMuc3RyaW5nKSB7XG4gICAgICAgIGZyYW1lTWV0YXZhcmlhYmxlVW5pZmllcyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21GcmFtZShmcmFtZSwgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IGZyYW1lTWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlLCAvLy9cbiAgICAgICAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSB0aGlzLnN0cmluZywgLy8vXG4gICAgICAgICAgICAgICAgZnJhbWVNZXRhdmFyaWFibGVTdHJpbmcgPSBmcmFtZU1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKTtcblxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlIGZyYW1lJ3MgJyR7ZnJhbWVNZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgd2l0aCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICAgICAgICBjb25zdCBzcGVjaWZpY01ldGF2YXJpYWJsZSA9IGZyYW1lTWV0YXZhcmlhYmxlLCAvLy9cbiAgICAgICAgICAgICAgICBnZW5lcmFsTWV0YXZhcmlhYmxlID0gdGhpcywgLy8vXG4gICAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlVW5pZmllc0ludHJpbnNpY2FsbHkgPSB1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkoZ2VuZXJhbE1ldGF2YXJpYWJsZSwgc3BlY2lmaWNNZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgICAgZnJhbWVNZXRhdmFyaWFibGVVbmlmaWVzID0gbWV0YXZhcmlhYmxlVW5pZmllc0ludHJpbnNpY2FsbHk7IC8vL1xuXG4gICAgICAgICAgaWYgKGZyYW1lTWV0YXZhcmlhYmxlVW5pZmllcykge1xuICAgICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSBmcmFtZSdzICcke2ZyYW1lTWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHdpdGggdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZS5gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZnJhbWVNZXRhdmFyaWFibGVVbmlmaWVzO1xuICB9XG5cbiAgdW5pZnlSZWZlcmVuY2VNZXRhdmFyaWFibGUocmVmZXJlbmNlLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IHJlZmVyZW5jZU1ldGF2YXJpYWJsZVVuaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGdlbmVyYWxDb250ZXh0RmlsZVBhdGggPSBnZW5lcmFsQ29udGV4dC5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dEZpbGVQYXRoID0gc3BlY2lmaWNDb250ZXh0LmdldEZpbGVQYXRoKCk7XG5cbiAgICBpZiAoZ2VuZXJhbENvbnRleHRGaWxlUGF0aCA9PT0gc3BlY2lmaWNDb250ZXh0RmlsZVBhdGgpIHtcbiAgICAgIGNvbnN0IHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgICAgaWYgKHJlZmVyZW5jZVN0cmluZyA9PT0gdGhpcy5zdHJpbmcpIHtcbiAgICAgICAgcmVmZXJlbmNlTWV0YXZhcmlhYmxlVW5pZmllcyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGUgPSByZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlKCk7XG5cbiAgICAgICAgY29uc3QgcmVmZXJlbmNlTWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlLCAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gdGhpcy5zdHJpbmcsIC8vL1xuICAgICAgICAgICAgICByZWZlcmVuY2VNZXRhdmFyaWFibGVTdHJpbmcgPSByZWZlcmVuY2VNZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgc3BlY2lmaWNDb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgcmVmZXJlbmNlJ3MgJHtyZWZlcmVuY2VNZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgd2l0aCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICAgICAgY29uc3Qgc3BlY2lmaWNNZXRhdmFyaWFibGUgPSByZWZlcmVuY2VNZXRhdmFyaWFibGUsIC8vL1xuICAgICAgICAgICAgICBnZW5lcmFsTWV0YXZhcmlhYmxlID0gdGhpcywgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZVVuaWZpZXNJbnRyaW5zaWNhbGx5ID0gdW5pZnlNZXRhdmFyaWFibGVJbnRyaW5zaWNhbGx5KGdlbmVyYWxNZXRhdmFyaWFibGUsIHNwZWNpZmljTWV0YXZhcmlhYmxlLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICByZWZlcmVuY2VNZXRhdmFyaWFibGVVbmlmaWVzID0gbWV0YXZhcmlhYmxlVW5pZmllc0ludHJpbnNpY2FsbHk7IC8vL1xuXG4gICAgICAgIGlmIChyZWZlcmVuY2VNZXRhdmFyaWFibGVVbmlmaWVzKSB7XG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSByZWZlcmVuY2UncyAnJHtyZWZlcmVuY2VNZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgd2l0aCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlLmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZmVyZW5jZU1ldGF2YXJpYWJsZVVuaWZpZXM7XG4gIH1cblxuICB1bmlmeVN0YXRlbWVudE1ldGF2YXJpYWJsZShzdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBsZXQgc3RhdGVtZW50TWV0YXZhcmlhYmxlVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgZ2VuZXJhbENvbnRleHRGaWxlUGF0aCA9IGdlbmVyYWxDb250ZXh0LmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0RmlsZVBhdGggPSBzcGVjaWZpY0NvbnRleHQuZ2V0RmlsZVBhdGgoKTtcblxuICAgIGlmIChnZW5lcmFsQ29udGV4dEZpbGVQYXRoID09PSBzcGVjaWZpY0NvbnRleHRGaWxlUGF0aCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50U3RyaW5nID09PSB0aGlzLnN0cmluZykge1xuICAgICAgICBzdGF0ZW1lbnRNZXRhdmFyaWFibGVVbmlmaWVzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChtZXRhdmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBzdGF0ZW1lbnRNZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGUsIC8vL1xuICAgICAgICAgICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IHRoaXMuc3RyaW5nLCAvLy9cbiAgICAgICAgICAgICAgICBzdGF0ZW1lbnRNZXRhdmFyaWFibGVTdHJpbmcgPSBzdGF0ZW1lbnRNZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSBzdGF0ZW1lbnQncyAke3N0YXRlbWVudE1ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB3aXRoIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuLi5gKTtcblxuICAgICAgICAgIGNvbnN0IHNwZWNpZmljTWV0YXZhcmlhYmxlID0gc3RhdGVtZW50TWV0YXZhcmlhYmxlLCAvLy9cbiAgICAgICAgICAgICAgICBnZW5lcmFsTWV0YXZhcmlhYmxlID0gdGhpcywgLy8vXG4gICAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlVW5pZmllc0ludHJpbnNpY2FsbHkgPSB1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkoZ2VuZXJhbE1ldGF2YXJpYWJsZSwgc3BlY2lmaWNNZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgICAgc3RhdGVtZW50TWV0YXZhcmlhYmxlVW5pZmllcyA9IG1ldGF2YXJpYWJsZVVuaWZpZXNJbnRyaW5zaWNhbGx5OyAvLy9cblxuICAgICAgICAgIGlmIChzdGF0ZW1lbnRNZXRhdmFyaWFibGVVbmlmaWVzKSB7XG4gICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlIHN0YXRlbWVudCdzICcke3N0YXRlbWVudE1ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB3aXRoIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlbWVudE1ldGF2YXJpYWJsZVVuaWZpZXM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgbWV0YVR5cGVKU09OID0gbWV0YVR5cGVUb01ldGFUeXBlSlNPTih0aGlzLm1ldGFUeXBlKSxcbiAgICAgICAgICB0eXBlSlNPTiA9IHR5cGVUb1R5cGVKU09OKHRoaXMudHlwZSksXG4gICAgICAgICAgdHlwZSA9IHR5cGVKU09OLCAgLy8vXG4gICAgICAgICAgbWV0YVR5cGUgPSBtZXRhVHlwZUpTT04sICAvLy9cbiAgICAgICAgICBzdHJpbmcgPSB0aGlzLnN0cmluZywgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBtZXRhVHlwZVxuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJNZXRhdmFyaWFibGVcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgIGxleGVyID0gY29udGV4dC5nZXRMZXhlcigpLFxuICAgICAgICAgIHBhcnNlciA9IGNvbnRleHQuZ2V0UGFyc2VyKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlUGFydGlhbENvbnRleHQgPSBNZXRhdmFyaWFibGVQYXJ0aWFsQ29udGV4dC5mcm9tU3RyaW5nTGV4ZXJBbmRQYXJzZXIoc3RyaW5nLCBsZXhlciwgcGFyc2VyKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVUb2tlbnMgPSBtZXRhdmFyaWFibGVQYXJ0aWFsQ29udGV4dC5nZXRNZXRhdmFyaWFibGVUb2tlbnMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gbWV0YXZhcmlhYmxlUGFydGlhbENvbnRleHQuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgICBuYW1lID0gbWV0YXZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgICAgdG9rZW5zID0gbWV0YXZhcmlhYmxlVG9rZW5zLCAvLy9cbiAgICAgICAgICB0eXBlID0gdHlwZUZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIG1ldGFUeXBlID0gbWV0YVR5cGVGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBuZXcgTWV0YXZhcmlhYmxlKHN0cmluZywgbm9kZSwgdG9rZW5zLCBuYW1lLCB0eXBlLCBtZXRhVHlwZSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgc3RhdGljIGZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGxhYmVsTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgc3RhdGljIGZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gICAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgICBjb25zdCBzaW5ndWxhck1ldGF2YXJpYWJsZU5vZGUgPSBmcmFtZU5vZGUuZ2V0U2luZ3VsYXJNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgICBpZiAoc2luZ3VsYXJNZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gc2luZ3VsYXJNZXRhdmFyaWFibGVOb2RlOyAgLy8vXG5cbiAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2VOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICAgIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbURlY2xhcmF0aW9uTm9kZShkZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gZGVjbGFyYXRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICAgIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgICBjb25zdCB7IE1ldGFUeXBlIH0gPSBkb20sXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgICAgdHlwZSA9IHR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgbWV0YVR5cGUgPSBNZXRhVHlwZS5mcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgICBtZXRhdmFyaWFibGUuc2V0VHlwZSh0eXBlKTtcblxuICAgIG1ldGF2YXJpYWJsZS5zZXRNZXRhVHlwZShtZXRhVHlwZSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9XG59KTtcblxuZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGF2YXJpYWJsZSB9ID0gZG9tLFxuICAgICAgICBtZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRNZXRhdmFyaWFibGVOYW1lKCksXG4gICAgICAgIHR5cGUgPSBudWxsLFxuICAgICAgICBuYW1lID0gbWV0YXZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICBub2RlID0gbWV0YXZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdG9rZW5zID0gY29udGV4dC5ub2RlQXNUb2tlbnMobm9kZSksXG4gICAgICAgIG1ldGFUeXBlID0gbnVsbCxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbmV3IE1ldGF2YXJpYWJsZShzdHJpbmcsIG5vZGUsIHRva2VucywgbmFtZSwgdHlwZSwgbWV0YVR5cGUpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmZ1bmN0aW9uIHR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZSA9IG51bGw7XG5cbiAgY29uc3QgdHlwZU5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKTtcblxuICBpZiAodHlwZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgIHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuIl0sIm5hbWVzIjpbImRvbUFzc2lnbmVkIiwiTWV0YXZhcmlhYmxlIiwic3RyaW5nIiwibm9kZSIsInRva2VucyIsIm5hbWUiLCJ0eXBlIiwibWV0YVR5cGUiLCJnZXRTdHJpbmciLCJnZXROb2RlIiwiZ2V0VG9rZW5zIiwiZ2V0TmFtZSIsImdldFR5cGUiLCJnZXRNZXRhVHlwZSIsInNldE5vZGUiLCJzZXRUb2tlbnMiLCJzZXROYW1lIiwic2V0VHlwZSIsInNldE1ldGFUeXBlIiwibWF0Y2hQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJuYW1lTWF0Y2hlcyIsInBhcmFtZXRlck1hdGNoZXMiLCJtYXRjaE1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZU1hdGNoZXMiLCJpc01ldGFUeXBlRXF1YWxUbyIsImlzRXF1YWxUbyIsIm1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZVN0cmluZyIsImVxdWFsVG8iLCJ2ZXJpZnkiLCJjb250ZXh0IiwidmVyaWZpZXMiLCJ0cmFjZSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwibWV0YXZhcmlhYmxlUHJlc2VudCIsImlzTWV0YXZhcmlhYmxlUHJlc2VudCIsImRlYnVnIiwidmVyaWZ5R2l2ZW5NZXRhVHlwZSIsInZlcmlmaWVzR2l2ZW5NZXRhVHlwZSIsIm1ldGFUeXBlU3RyaW5nIiwiZmluZE1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZU1ldGFUeXBlRXF1YWxUb01ldGFUeXBlIiwidW5pZnlGcmFtZSIsImZyYW1lIiwic3Vic3RpdHV0aW9ucyIsImZyYW1lVW5pZmllcyIsImZyYW1lU3RyaW5nIiwiZnJhbWVNZXRhdmFyaWFibGVVbmlmaWVzIiwidW5pZnlGcmFtZU1ldGF2YXJpYWJsZSIsInNpbXBsZVN1YnN0aXR1dGlvblByZXNlbnQiLCJpc1NpbXBsZVN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZSIsInNpbXBsZVN1YnN0aXR1dGlvbiIsImZpbmRTaW1wbGVTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZSIsInN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbkZyYW1lRXF1YWxUb0ZyYW1lIiwiaXNGcmFtZUVxdWFsVG8iLCJGcmFtZVN1YnN0aXR1dGlvbiIsImRvbSIsImZyYW1lU3Vic3RpdHV0aW9uIiwiZnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlIiwiYWRkU3Vic3RpdHV0aW9uIiwidW5pZnlSZWZlcmVuY2UiLCJyZWZlcmVuY2UiLCJyZWZlcmVuY2VVbmlmaWVzIiwicmVmZXJlbmNlU3RyaW5nIiwicmVmZXJlbmNlTWV0YXZhcmlhYmxlVW5pZmllcyIsInVuaWZ5UmVmZXJlbmNlTWV0YXZhcmlhYmxlIiwic3Vic3RpdHV0aW9uUmVmZXJlbmNlRXF1YWxUb1JlZmVyZW5jZSIsImlzUmVmZXJlbmNlRXF1YWxUbyIsIlJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsImZyb21SZWZlcmVuY2VBbmRNZXRhdmFyaWFibGUiLCJ1bmlmeVN0YXRlbWVudCIsInN0YXRlbWVudCIsInN0YXRlbWVudFVuaWZpZXMiLCJzdGF0ZW1lbnRTdHJpbmciLCJzdWJzdGl0dXRpb25TdHJpbmciLCJFTVBUWV9TVFJJTkciLCJzdGF0ZW1lbnRNZXRhdmFyaWFibGVVbmlmaWVzIiwidW5pZnlTdGF0ZW1lbnRNZXRhdmFyaWFibGUiLCJzdWJzdGl0dXRpb25QcmVzZW50IiwiaXNTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24iLCJmaW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25TdGF0ZW1lbnRFcXVhbFRvU3RhdGVtZW50IiwiaXNTdGF0ZW1lbnRFcXVhbFRvIiwiU3RhdGVtZW50U3Vic3RpdHV0aW9uIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uIiwiZnJvbVN0YXRlbWVudE1ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbiIsInVuaWZ5TWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlVW5pZmllcyIsImdlbmVyYWxNZXRhdmFyaWFibGUiLCJzcGVjaWZpY01ldGF2YXJpYWJsZSIsImdlbmVyYWxNZXRhdmFyaWFibGVTdHJpbmciLCJzcGVjaWZpY01ldGF2YXJpYWJsZVN0cmluZyIsImdlbmVyYWxDb250ZXh0RmlsZVBhdGgiLCJnZXRGaWxlUGF0aCIsInNwZWNpZmljQ29udGV4dEZpbGVQYXRoIiwibWV0YXZhcmlhYmxlRnJvbUZyYW1lIiwiZnJhbWVNZXRhdmFyaWFibGUiLCJmcmFtZU1ldGF2YXJpYWJsZVN0cmluZyIsIm1ldGF2YXJpYWJsZVVuaWZpZXNJbnRyaW5zaWNhbGx5IiwidW5pZnlNZXRhdmFyaWFibGVJbnRyaW5zaWNhbGx5IiwiZ2V0TWV0YXZhcmlhYmxlIiwicmVmZXJlbmNlTWV0YXZhcmlhYmxlIiwicmVmZXJlbmNlTWV0YXZhcmlhYmxlU3RyaW5nIiwibWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudCIsInN0YXRlbWVudE1ldGF2YXJpYWJsZSIsInN0YXRlbWVudE1ldGF2YXJpYWJsZVN0cmluZyIsInRvSlNPTiIsIm1ldGFUeXBlSlNPTiIsIm1ldGFUeXBlVG9NZXRhVHlwZUpTT04iLCJ0eXBlSlNPTiIsInR5cGVUb1R5cGVKU09OIiwianNvbiIsImZyb21KU09OIiwibGV4ZXIiLCJnZXRMZXhlciIsInBhcnNlciIsImdldFBhcnNlciIsIm1ldGF2YXJpYWJsZVBhcnRpYWxDb250ZXh0IiwiTWV0YXZhcmlhYmxlUGFydGlhbENvbnRleHQiLCJmcm9tU3RyaW5nTGV4ZXJBbmRQYXJzZXIiLCJtZXRhdmFyaWFibGVUb2tlbnMiLCJnZXRNZXRhdmFyaWFibGVUb2tlbnMiLCJtZXRhdmFyaWFibGVOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJ0eXBlRnJvbUpTT04iLCJtZXRhVHlwZUZyb21KU09OIiwiZnJvbUxhYmVsTm9kZSIsImxhYmVsTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlIiwiZnJvbUZyYW1lTm9kZSIsImZyYW1lTm9kZSIsInNpbmd1bGFyTWV0YXZhcmlhYmxlTm9kZSIsImdldFNpbmd1bGFyTWV0YXZhcmlhYmxlTm9kZSIsImZyb21SZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlTm9kZSIsImZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZSIsImZyb21EZWNsYXJhdGlvbk5vZGUiLCJkZWNsYXJhdGlvbk5vZGUiLCJmcm9tTWV0YXZhcmlhYmxlTm9kZSIsImZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJNZXRhVHlwZSIsInR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibm9kZUFzU3RyaW5nIiwibm9kZUFzVG9rZW5zIiwidHlwZU5vZGUiLCJnZXRUeXBlTm9kZSIsIm5vbWluYWxUeXBlTmFtZSIsImdldE5vbWluYWxUeXBlTmFtZSIsImZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVlBOzs7ZUFBQTs7OzJEQVZnQjttRUFDdUI7eUJBR1Y7b0JBQ2dCO3VCQUVvQjsyQkFDQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFFbEUs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