occam-verify-cli 1.0.427 → 1.0.436

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 (125) hide show
  1. package/lib/context/file.js +1 -1
  2. package/lib/element/assertion.js +115 -24
  3. package/lib/element/assumption.js +120 -20
  4. package/lib/element/axiomLemmaTheoremConjecture.js +118 -30
  5. package/lib/element/conclusion.js +113 -25
  6. package/lib/element/declaration.js +112 -37
  7. package/lib/element/deduction.js +112 -66
  8. package/lib/element/derivation.js +114 -5
  9. package/lib/element/equality.js +119 -26
  10. package/lib/element/equivalence.js +129 -40
  11. package/lib/element/equivalences.js +122 -7
  12. package/lib/element/error.js +115 -32
  13. package/lib/element/frame.js +119 -59
  14. package/lib/element/hypothesis.js +115 -27
  15. package/lib/element/judgement.js +120 -33
  16. package/lib/element/label.js +116 -63
  17. package/lib/element/lemma.js +1 -9
  18. package/lib/element/metaLemma.js +1 -8
  19. package/lib/element/metaLemmaMetatheorem.js +117 -29
  20. package/lib/element/metaType.js +68 -61
  21. package/lib/element/metatheorem.js +1 -8
  22. package/lib/element/metavariable.js +122 -93
  23. package/lib/element/parameter.js +120 -20
  24. package/lib/element/premise.js +114 -35
  25. package/lib/element/procedureCall.js +117 -99
  26. package/lib/element/procedureReference.js +120 -20
  27. package/lib/element/proof.js +111 -55
  28. package/lib/element/property.js +121 -35
  29. package/lib/element/propertyRelation.js +116 -72
  30. package/lib/element/reference.js +120 -70
  31. package/lib/element/rule.js +116 -41
  32. package/lib/element/section.js +114 -133
  33. package/lib/element/signature.js +120 -20
  34. package/lib/element/statement/combinator/bracketed.js +4 -9
  35. package/lib/element/statement.js +110 -125
  36. package/lib/element/step.js +115 -27
  37. package/lib/element/subDerivation.js +111 -43
  38. package/lib/element/subproof.js +115 -20
  39. package/lib/element/substitution.js +115 -31
  40. package/lib/element/substitutions.js +120 -6
  41. package/lib/element/supposition.js +114 -35
  42. package/lib/element/term/constructor/bracketed.js +4 -8
  43. package/lib/element/term.js +111 -98
  44. package/lib/element/theorem.js +1 -8
  45. package/lib/element/type.js +71 -91
  46. package/lib/element/typePrefix.js +120 -20
  47. package/lib/element/variable.js +116 -111
  48. package/lib/element.js +67 -0
  49. package/lib/node/equivalence.js +116 -0
  50. package/lib/node/{nonsense.js → equivalences.js} +10 -10
  51. package/lib/node/frame.js +11 -5
  52. package/lib/node/procedureReference.js +6 -6
  53. package/lib/node/statement.js +11 -5
  54. package/lib/node/term.js +8 -1
  55. package/lib/nonTerminalNodeMap.js +5 -4
  56. package/lib/process/instantiate.js +13 -38
  57. package/lib/process/verify.js +22 -29
  58. package/lib/ruleNames.js +9 -5
  59. package/lib/utilities/brackets.js +11 -11
  60. package/lib/utilities/element.js +606 -99
  61. package/lib/utilities/instance.js +61 -0
  62. package/lib/utilities/string.js +87 -34
  63. package/package.json +6 -6
  64. package/src/context/file.js +1 -1
  65. package/src/element/assertion.js +4 -16
  66. package/src/element/assumption.js +5 -12
  67. package/src/element/axiomLemmaTheoremConjecture.js +4 -16
  68. package/src/element/conclusion.js +4 -16
  69. package/src/element/declaration.js +4 -16
  70. package/src/element/deduction.js +5 -19
  71. package/src/element/derivation.js +5 -2
  72. package/src/element/equality.js +4 -16
  73. package/src/element/equivalence.js +25 -37
  74. package/src/element/equivalences.js +12 -6
  75. package/src/element/error.js +4 -24
  76. package/src/element/frame.js +5 -56
  77. package/src/element/hypothesis.js +6 -23
  78. package/src/element/judgement.js +5 -30
  79. package/src/element/label.js +8 -19
  80. package/src/element/lemma.js +0 -7
  81. package/src/element/metaLemma.js +0 -7
  82. package/src/element/metaLemmaMetatheorem.js +4 -16
  83. package/src/element/metaType.js +23 -64
  84. package/src/element/metatheorem.js +0 -7
  85. package/src/element/metavariable.js +6 -94
  86. package/src/element/parameter.js +10 -18
  87. package/src/element/premise.js +4 -31
  88. package/src/element/procedureCall.js +5 -77
  89. package/src/element/procedureReference.js +7 -17
  90. package/src/element/proof.js +5 -17
  91. package/src/element/property.js +8 -30
  92. package/src/element/propertyRelation.js +5 -33
  93. package/src/element/reference.js +8 -72
  94. package/src/element/rule.js +4 -41
  95. package/src/element/section.js +4 -129
  96. package/src/element/signature.js +7 -13
  97. package/src/element/statement/combinator/bracketed.js +3 -9
  98. package/src/element/statement.js +3 -126
  99. package/src/element/step.js +4 -16
  100. package/src/element/subDerivation.js +5 -3
  101. package/src/element/subproof.js +5 -12
  102. package/src/element/substitution.js +4 -24
  103. package/src/element/substitutions.js +6 -2
  104. package/src/element/supposition.js +4 -31
  105. package/src/element/term/constructor/bracketed.js +4 -9
  106. package/src/element/term.js +6 -59
  107. package/src/element/theorem.js +0 -7
  108. package/src/element/type.js +9 -104
  109. package/src/element/typePrefix.js +8 -13
  110. package/src/element/variable.js +6 -109
  111. package/src/element.js +29 -0
  112. package/src/node/equivalence.js +16 -0
  113. package/src/node/{nonsense.js → equivalences.js} +2 -2
  114. package/src/node/frame.js +10 -5
  115. package/src/node/procedureReference.js +4 -4
  116. package/src/node/statement.js +10 -5
  117. package/src/node/term.js +7 -0
  118. package/src/nonTerminalNodeMap.js +7 -4
  119. package/src/process/instantiate.js +8 -36
  120. package/src/process/verify.js +42 -47
  121. package/src/ruleNames.js +2 -1
  122. package/src/utilities/brackets.js +13 -13
  123. package/src/utilities/element.js +760 -139
  124. package/src/utilities/instance.js +53 -0
  125. package/src/utilities/string.js +118 -59
@@ -27,6 +27,9 @@ _export(exports, {
27
27
  get axiomFromAxiomNode () {
28
28
  return axiomFromAxiomNode;
29
29
  },
30
+ get axiomFromSectionNode () {
31
+ return axiomFromSectionNode;
32
+ },
30
33
  get combinatorDeclarationFromCombinatorDeclarationNode () {
31
34
  return combinatorDeclarationFromCombinatorDeclarationNode;
32
35
  },
@@ -39,8 +42,20 @@ _export(exports, {
39
42
  get conclusinoFromConclusionNode () {
40
43
  return conclusinoFromConclusionNode;
41
44
  },
42
- get conjectureromAxiomNode () {
43
- return conjectureromAxiomNode;
45
+ get conclusionFromConclusionNode () {
46
+ return conclusionFromConclusionNode;
47
+ },
48
+ get conclusionFromPremiseNode () {
49
+ return conclusionFromPremiseNode;
50
+ },
51
+ get conclusionFromRuleNode () {
52
+ return conclusionFromRuleNode;
53
+ },
54
+ get conjectureFromSectionNode () {
55
+ return conjectureFromSectionNode;
56
+ },
57
+ get conjectureroConjectureNode () {
58
+ return conjectureroConjectureNode;
44
59
  },
45
60
  get constructorDeclarationFromConstructorDeclarationNode () {
46
61
  return constructorDeclarationFromConstructorDeclarationNode;
@@ -60,6 +75,9 @@ _export(exports, {
60
75
  get deductionFromDeductionNode () {
61
76
  return deductionFromDeductionNode;
62
77
  },
78
+ get deductionFromMetaLemmaMetatheoremNode () {
79
+ return deductionFromMetaLemmaMetatheoremNode;
80
+ },
63
81
  get definedAssertionFromDefinedAssertionNode () {
64
82
  return definedAssertionFromDefinedAssertionNode;
65
83
  },
@@ -78,6 +96,12 @@ _export(exports, {
78
96
  get equalityFromStatementNode () {
79
97
  return equalityFromStatementNode;
80
98
  },
99
+ get equivalenceFromEquivalenceNode () {
100
+ return equivalenceFromEquivalenceNode;
101
+ },
102
+ get errorFromErrorNode () {
103
+ return errorFromErrorNode;
104
+ },
81
105
  get frameFromContainedAssertionNode () {
82
106
  return frameFromContainedAssertionNode;
83
107
  },
@@ -90,23 +114,56 @@ _export(exports, {
90
114
  get frameFromFrameSubstitutionNode () {
91
115
  return frameFromFrameSubstitutionNode;
92
116
  },
117
+ get frameFromJudgementNode () {
118
+ return frameFromJudgementNode;
119
+ },
93
120
  get frameSubstitutionFromFrameSubstitutionNode () {
94
121
  return frameSubstitutionFromFrameSubstitutionNode;
95
122
  },
96
123
  get frameSubstitutionFromStatementNode () {
97
124
  return frameSubstitutionFromStatementNode;
98
125
  },
126
+ get hypothesesFromHypothesisNodes () {
127
+ return hypothesesFromHypothesisNodes;
128
+ },
129
+ get hypothesisFromHypothesisNode () {
130
+ return hypothesisFromHypothesisNode;
131
+ },
132
+ get hyppothesisFromHypothesisNode () {
133
+ return hyppothesisFromHypothesisNode;
134
+ },
99
135
  get identifierFromVarialbeNode () {
100
136
  return identifierFromVarialbeNode;
101
137
  },
138
+ get judgementFomStatementNode () {
139
+ return judgementFomStatementNode;
140
+ },
141
+ get judgementFromJudgementNode () {
142
+ return judgementFromJudgementNode;
143
+ },
144
+ get labelFromLabelNode () {
145
+ return labelFromLabelNode;
146
+ },
147
+ get labelFromMetaLemmaMetatheoremNode () {
148
+ return labelFromMetaLemmaMetatheoremNode;
149
+ },
102
150
  get labelsFromAxiomLemmaTheoremConjectureNode () {
103
151
  return labelsFromAxiomLemmaTheoremConjectureNode;
104
152
  },
105
153
  get labelsFromLabelNodes () {
106
154
  return labelsFromLabelNodes;
107
155
  },
108
- get lemmaromAxiomNode () {
109
- return lemmaromAxiomNode;
156
+ get labelsFromRuleNode () {
157
+ return labelsFromRuleNode;
158
+ },
159
+ get lemmaFromLemmaNode () {
160
+ return lemmaFromLemmaNode;
161
+ },
162
+ get lemmaFromSectionNode () {
163
+ return lemmaFromSectionNode;
164
+ },
165
+ get metaLemmaFromMetaLemmaNode () {
166
+ return metaLemmaFromMetaLemmaNode;
110
167
  },
111
168
  get metaTypeFromMetaTypeNode () {
112
169
  return metaTypeFromMetaTypeNode;
@@ -114,12 +171,24 @@ _export(exports, {
114
171
  get metaTypeFromMetavariableDeclarationNode () {
115
172
  return metaTypeFromMetavariableDeclarationNode;
116
173
  },
174
+ get metatheoremFromMetaLemmaNode () {
175
+ return metatheoremFromMetaLemmaNode;
176
+ },
117
177
  get metavariableDeclarationFromMetavariableDeclarationNode () {
118
178
  return metavariableDeclarationFromMetavariableDeclarationNode;
119
179
  },
180
+ get metavariableFromAssumptionNode () {
181
+ return metavariableFromAssumptionNode;
182
+ },
183
+ get metavariableFromFrameNode () {
184
+ return metavariableFromFrameNode;
185
+ },
120
186
  get metavariableFromFrameSubstitutionNode () {
121
187
  return metavariableFromFrameSubstitutionNode;
122
188
  },
189
+ get metavariableFromLabelNode () {
190
+ return metavariableFromLabelNode;
191
+ },
123
192
  get metavariableFromMetavariableDeclarationNode () {
124
193
  return metavariableFromMetavariableDeclarationNode;
125
194
  },
@@ -132,21 +201,69 @@ _export(exports, {
132
201
  get metavariableFromReferenceSubstitutionNode () {
133
202
  return metavariableFromReferenceSubstitutionNode;
134
203
  },
204
+ get metavariableFromStatementNode () {
205
+ return metavariableFromStatementNode;
206
+ },
135
207
  get metavariableFromStatementSubstitutionNode () {
136
208
  return metavariableFromStatementSubstitutionNode;
137
209
  },
210
+ get nameFromProcedureReferenceNode () {
211
+ return nameFromProcedureReferenceNode;
212
+ },
213
+ get parameterFromParameterNode () {
214
+ return parameterFromParameterNode;
215
+ },
216
+ get parameterNameFromParameterNode () {
217
+ return parameterNameFromParameterNode;
218
+ },
219
+ get parametersFromParameterNodes () {
220
+ return parametersFromParameterNodes;
221
+ },
222
+ get parametersFromProcedureCallNode () {
223
+ return parametersFromProcedureCallNode;
224
+ },
138
225
  get prefixedFromComplexTypeDeclarationNode () {
139
226
  return prefixedFromComplexTypeDeclarationNode;
140
227
  },
141
228
  get prefixedFromSimpleTypeDeclarationNode () {
142
229
  return prefixedFromSimpleTypeDeclarationNode;
143
230
  },
231
+ get premiseFromPremiseNode () {
232
+ return premiseFromPremiseNode;
233
+ },
234
+ get premisesFromPremiseNodes () {
235
+ return premisesFromPremiseNodes;
236
+ },
237
+ get premisesFromRuleNode () {
238
+ return premisesFromRuleNode;
239
+ },
240
+ get procedureCallFromPremiseNode () {
241
+ return procedureCallFromPremiseNode;
242
+ },
243
+ get procedureCallFromProcedureCallNode () {
244
+ return procedureCallFromProcedureCallNode;
245
+ },
246
+ get procedureCallFromSuppositionNode () {
247
+ return procedureCallFromSuppositionNode;
248
+ },
249
+ get procedureReferenceFromProcedureCallNode () {
250
+ return procedureReferenceFromProcedureCallNode;
251
+ },
252
+ get procedureReferenceFromProcedureReferenceNode () {
253
+ return procedureReferenceFromProcedureReferenceNode;
254
+ },
144
255
  get proofFromAxiomLemmaTheoremConjectureNode () {
145
256
  return proofFromAxiomLemmaTheoremConjectureNode;
146
257
  },
258
+ get proofFromMetaLemmaMetatheoremNode () {
259
+ return proofFromMetaLemmaMetatheoremNode;
260
+ },
147
261
  get proofFromProofNode () {
148
262
  return proofFromProofNode;
149
263
  },
264
+ get proofFromRuleNode () {
265
+ return proofFromRuleNode;
266
+ },
150
267
  get propertiesFromComplexTypeDeclarationNode () {
151
268
  return propertiesFromComplexTypeDeclarationNode;
152
269
  },
@@ -177,6 +294,12 @@ _export(exports, {
177
294
  get referenceFromAssumptionNode () {
178
295
  return referenceFromAssumptionNode;
179
296
  },
297
+ get referenceFromMetavariableNode () {
298
+ return referenceFromMetavariableNode;
299
+ },
300
+ get referenceFromProcedureCallNode () {
301
+ return referenceFromProcedureCallNode;
302
+ },
180
303
  get referenceFromReferenceNode () {
181
304
  return referenceFromReferenceNode;
182
305
  },
@@ -192,6 +315,9 @@ _export(exports, {
192
315
  get referenceSubstitutionFromReferenceSubstitutionNode () {
193
316
  return referenceSubstitutionFromReferenceSubstitutionNode;
194
317
  },
318
+ get ruleFromRuleNode () {
319
+ return ruleFromRuleNode;
320
+ },
195
321
  get satisfiesAssertionFromSatisfiesAssertionNode () {
196
322
  return satisfiesAssertionFromSatisfiesAssertionNode;
197
323
  },
@@ -201,6 +327,9 @@ _export(exports, {
201
327
  get satisfiesAssertionFromStepNode () {
202
328
  return satisfiesAssertionFromStepNode;
203
329
  },
330
+ get sectionFromSectionNode () {
331
+ return sectionFromSectionNode;
332
+ },
204
333
  get signatureFromAxiomLemmaTheoremConjectureNode () {
205
334
  return signatureFromAxiomLemmaTheoremConjectureNode;
206
335
  },
@@ -216,6 +345,9 @@ _export(exports, {
216
345
  get statementFromAssumptionNode () {
217
346
  return statementFromAssumptionNode;
218
347
  },
348
+ get statementFromCombinatorDeclarationNode () {
349
+ return statementFromCombinatorDeclarationNode;
350
+ },
219
351
  get statementFromConclusionNode () {
220
352
  return statementFromConclusionNode;
221
353
  },
@@ -225,6 +357,12 @@ _export(exports, {
225
357
  get statementFromDeductionNode () {
226
358
  return statementFromDeductionNode;
227
359
  },
360
+ get statementFromHypothesisNode () {
361
+ return statementFromHypothesisNode;
362
+ },
363
+ get statementFromPremiseNode () {
364
+ return statementFromPremiseNode;
365
+ },
228
366
  get statementFromStatementNode () {
229
367
  return statementFromStatementNode;
230
368
  },
@@ -234,6 +372,9 @@ _export(exports, {
234
372
  get statementFromStepNode () {
235
373
  return statementFromStepNode;
236
374
  },
375
+ get statementFromSuppositionNode () {
376
+ return statementFromSuppositionNode;
377
+ },
237
378
  get statementSubstitutionFromStatementSubstitutionNode () {
238
379
  return statementSubstitutionFromStatementSubstitutionNode;
239
380
  },
@@ -282,15 +423,24 @@ _export(exports, {
282
423
  get superTypesFromSuperTypeNodes () {
283
424
  return superTypesFromSuperTypeNodes;
284
425
  },
426
+ get suppositionFromSuppositionNode () {
427
+ return suppositionFromSuppositionNode;
428
+ },
285
429
  get suppositionsFromAxiomLemmaTheoremConjectureNode () {
286
430
  return suppositionsFromAxiomLemmaTheoremConjectureNode;
287
431
  },
432
+ get suppositionsFromMetaLemmaMetatheoremNode () {
433
+ return suppositionsFromMetaLemmaMetatheoremNode;
434
+ },
288
435
  get suppositionsFromSubproofNode () {
289
436
  return suppositionsFromSubproofNode;
290
437
  },
291
438
  get suppositionsFromSuppositionNodes () {
292
439
  return suppositionsFromSuppositionNodes;
293
440
  },
441
+ get termFromConstructorDeclarationNode () {
442
+ return termFromConstructorDeclarationNode;
443
+ },
294
444
  get termFromContainedAssertionNode () {
295
445
  return termFromContainedAssertionNode;
296
446
  },
@@ -318,14 +468,20 @@ _export(exports, {
318
468
  get termSubstitutionFromTermSubstitutionNode () {
319
469
  return termSubstitutionFromTermSubstitutionNode;
320
470
  },
471
+ get termsFromEquivalenceNode () {
472
+ return termsFromEquivalenceNode;
473
+ },
321
474
  get termsFromSignatureNode () {
322
475
  return termsFromSignatureNode;
323
476
  },
324
477
  get termsFromTermNodes () {
325
478
  return termsFromTermNodes;
326
479
  },
327
- get theoremromAxiomNode () {
328
- return theoremromAxiomNode;
480
+ get theoremFromSectionNode () {
481
+ return theoremFromSectionNode;
482
+ },
483
+ get theoremFromTheoremNode () {
484
+ return theoremFromTheoremNode;
329
485
  },
330
486
  get typeAssertinFromStatementNode () {
331
487
  return typeAssertinFromStatementNode;
@@ -336,6 +492,12 @@ _export(exports, {
336
492
  get typeFromComplexTypeDeclarationNode () {
337
493
  return typeFromComplexTypeDeclarationNode;
338
494
  },
495
+ get typeFromConstructorDeclarationNode () {
496
+ return typeFromConstructorDeclarationNode;
497
+ },
498
+ get typeFromPropertyDeclarationNode () {
499
+ return typeFromPropertyDeclarationNode;
500
+ },
339
501
  get typeFromSimpleTypeDeclarationNode () {
340
502
  return typeFromSimpleTypeDeclarationNode;
341
503
  },
@@ -357,6 +519,9 @@ _export(exports, {
357
519
  get variableDeclarationFromVariableDeclarationNode () {
358
520
  return variableDeclarationFromVariableDeclarationNode;
359
521
  },
522
+ get variableFromTermNode () {
523
+ return variableFromTermNode;
524
+ },
360
525
  get variableFromTermSubstitutionNode () {
361
526
  return variableFromTermSubstitutionNode;
362
527
  },
@@ -369,8 +534,8 @@ _export(exports, {
369
534
  });
370
535
  var _elements = /*#__PURE__*/ _interop_require_default(require("../elements"));
371
536
  var _type = require("../element/type");
537
+ var _instantiate = require("../process/instantiate");
372
538
  var _string = require("../utilities/string");
373
- var _node = /*#__PURE__*/ _interop_require_default(require("occam-parsers/lib/mixins/node"));
374
539
  function _interop_require_default(obj) {
375
540
  return obj && obj.__esModule ? obj : {
376
541
  default: obj
@@ -382,60 +547,76 @@ function typeFromTypeNode(typeNode, context) {
382
547
  type = _type.baseType;
383
548
  } else {
384
549
  var Type = _elements.default.Type, typeName = typeNode.getTypeName(), typePrefixName = typeNode.getTypePrefixName(), nominalTypeName = typeNode.getNominalTypeName(), string = nominalTypeName, node = typeNode, name = typeName, prefixName = typePrefixName, superTypes = null, properties = null, provisional = null;
385
- type = new Type(string, node, name, prefixName, superTypes, properties, provisional);
550
+ type = new Type(context, string, node, name, prefixName, superTypes, properties, provisional);
386
551
  }
387
552
  return type;
388
553
  }
389
554
  function termFromTermNode(termNode, context) {
390
- var Term = _elements.default.Term, node = termNode, string = context.nodeAsString(node), type = null, term = new Term(string, node, type);
555
+ var Term = _elements.default.Term, node = termNode, string = context.nodeAsString(node), type = null, term = new Term(context, string, node, type);
391
556
  return term;
392
557
  }
393
558
  function stepFromStepNode(stepNode, context) {
394
559
  var Step = _elements.default.Step, node = stepNode, string = context.nodeAsString(node), statement = statementFromStepNode(stepNode, context), reference = referenceFromStepNode(stepNode, context), satisfiesAssertion = satisfiesAssertionFromStepNode(stepNode, context), step = new Step(context, string, node, statement, reference, satisfiesAssertion);
395
560
  return step;
396
561
  }
397
- function lemmaromAxiomNode(lemmaNode, context) {
398
- var Lemma = _elements.default.Lemma, axiomLemmaTheoremConjectureNode = lemmaNode, proof = proofFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), labels = labelsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), deduction = deductionFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), suppositions = suppositionsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), signature = signatureFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), hypotheses = [], node = lemmaNode, string = (0, _string.stringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), lemma = new Lemma(context, string, node, labels, suppositions, deduction, proof, signature, hypotheses);
562
+ function ruleFromRuleNode(ruleNode, context) {
563
+ var Rule = _elements.default.Rule, proof = proofFromRuleNode(ruleNode, context), labels = labelsFromRuleNode(ruleNode, context), premises = premisesFromRuleNode(ruleNode, context), conclusion = conclusionFromRuleNode(ruleNode, context), ruleString = (0, _string.rulsStringFromLabelsPremisesAndConclusion)(labels, premises, conclusion), node = ruleNode, string = ruleString, rule = new Rule(context, string, node, labels, premises, conclusion, proof);
564
+ return rule;
565
+ }
566
+ function labelFromLabelNode(labelNode, context) {
567
+ var Label = _elements.default.Label, node = labelNode, string = context.nodeAsString(node), metavariable = metavariableFromLabelNode(labelNode, context), label = new Label(context, string, node, metavariable);
568
+ return label;
569
+ }
570
+ function errorFromErrorNode(errorNode, context) {
571
+ var Error = _elements.default.Error, node = errorNode, string = context.nodeAsString(node), error = new Error(context, string, node);
572
+ return error;
573
+ }
574
+ function lemmaFromLemmaNode(lemmaNode, context) {
575
+ var Lemma = _elements.default.Lemma, axiomLemmaTheoremConjectureNode = lemmaNode, proof = proofFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), labels = labelsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), deduction = deductionFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), suppositions = suppositionsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), signature = signatureFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), hypotheses = [], axiomLemmaTheoremConjectureString = (0, _string.axiomLemmaTheoremConjectureStringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), node = lemmaNode, string = axiomLemmaTheoremConjectureString, lemma = new Lemma(context, string, node, labels, suppositions, deduction, proof, signature, hypotheses);
399
576
  return lemma;
400
577
  }
401
578
  function frameFromFrameNode(frameNode, context) {
402
- var Frame = _elements.default.Frame, node = frameNode, string = context.nodeAsString(node), assumptions = assumptionsFromFrameNode(frameNode, context), frame = new Frame(string, node, assumptions);
579
+ var Frame = _elements.default.Frame, node = frameNode, string = context.nodeAsString(node), assumptions = assumptionsFromFrameNode(frameNode, context), frame = new Frame(context, string, node, assumptions);
403
580
  return frame;
404
581
  }
405
582
  function proofFromProofNode(proofNode, context) {
406
- var Proof = _elements.default.Proof, node = proofNode, string = null, derivation = derivationFromProofNode(proofNode, context), proof = new Proof(string, node, derivation);
583
+ var Proof = _elements.default.Proof, node = proofNode, string = null, derivation = derivationFromProofNode(proofNode, context), proof = new Proof(context, string, node, derivation);
407
584
  return proof;
408
585
  }
409
586
  function axiomFromAxiomNode(axiomNode, context) {
410
- var Axiom = _elements.default.Axiom, axiomLemmaTheoremConjectureNode = axiomNode, proof = null, labels = labelsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), deduction = deductionFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), suppositions = suppositionsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), signature = signatureFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), hypotheses = [], node = axiomNode, string = (0, _string.stringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), axiom = new Axiom(context, string, node, labels, suppositions, deduction, proof, signature, hypotheses);
587
+ var Axiom = _elements.default.Axiom, axiomLemmaTheoremConjectureNode = axiomNode, proof = null, labels = labelsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), deduction = deductionFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), suppositions = suppositionsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), signature = signatureFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), hypotheses = [], axiomLemmaTheoremConjectureString = (0, _string.axiomLemmaTheoremConjectureStringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), node = axiomNode, string = axiomLemmaTheoremConjectureString, axiom = new Axiom(context, string, node, labels, suppositions, deduction, proof, signature, hypotheses);
411
588
  return axiom;
412
589
  }
413
- function theoremromAxiomNode(theoremNode, context) {
414
- var Theorem = _elements.default.Theorem, axiomLemmaTheoremConjectureNode = theoremNode, proof = proofFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), labels = labelsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), deduction = deductionFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), suppositions = suppositionsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), signature = signatureFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), hypotheses = [], node = theoremNode, string = (0, _string.stringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), theorem = new Theorem(context, string, node, labels, suppositions, deduction, proof, signature, hypotheses);
415
- return theorem;
590
+ function sectionFromSectionNode(sectionNode, context) {
591
+ var hypothesisNodes = sectionNode.getHypothesisNodes(), hypotheses = hypothesesFromHypothesisNodes(hypothesisNodes, context), axiom = axiomFromSectionNode(sectionNode, context), lemma = lemmaFromSectionNode(sectionNode, context), theorem = theoremFromSectionNode(sectionNode, context), conjecture = conjectureFromSectionNode(sectionNode, context), sectionString = (0, _string.sectionStringFromHypothesesAxiomLemmaTheoremAndConjecture)(hypotheses, axiom, lemma, theorem, conjecture, context), node = sectionNode, string = sectionString, section = new Section(context, string, node, hypotheses, axiom, lemma, theorem, conjecture);
592
+ return section;
416
593
  }
417
- function conjectureromAxiomNode(conjectureNode, context) {
418
- var Conjecture = _elements.default.Conjecture, axiomLemmaTheoremConjectureNode = conjectureNode, proof = proofFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), labels = labelsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), deduction = deductionFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), suppositions = suppositionsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), signature = signatureFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), hypotheses = [], node = conjectureNode, string = (0, _string.stringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), conjecture = new Conjecture(context, string, node, labels, suppositions, deduction, proof, signature, hypotheses);
419
- return conjecture;
594
+ function premiseFromPremiseNode(premiseNode, context) {
595
+ var Premise = _elements.default.Premise, node = premiseNode, string = context.nodeAsString(node), statement = statementFromPremiseNode(premiseNode, context), procedureCall = procedureCallFromPremiseNode(premiseNode, context), premise = new Premise(context, string, node, statement, procedureCall);
596
+ return premise;
597
+ }
598
+ function theoremFromTheoremNode(theoremNode, context) {
599
+ var Theorem = _elements.default.Theorem, axiomLemmaTheoremConjectureNode = theoremNode, proof = proofFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), labels = labelsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), deduction = deductionFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), suppositions = suppositionsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), signature = signatureFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), hypotheses = [], axiomLemmaTheoremConjectureString = (0, _string.axiomLemmaTheoremConjectureStringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), node = theoremNode, string = axiomLemmaTheoremConjectureString, theorem = new Theorem(context, string, node, labels, suppositions, deduction, proof, signature, hypotheses);
600
+ return theorem;
420
601
  }
421
602
  function equalityFromEqualityNode(equalityNode, context) {
422
603
  var Equality1 = _elements.default.Equality, node = equalityNode, string = context.nodeAsString(node), leftTermNode = equalityNode.getLeftTermNode(), rightTermNode = equalityNode.getRightTermNode(), leftTerm = termFromTermNode(leftTermNode, context), rightTerm = termFromTermNode(rightTermNode, context), equality = new Equality1(string, leftTerm, rightTerm);
423
604
  return equality;
424
605
  }
425
606
  function metaTypeFromMetaTypeNode(metaTypeNode, context) {
426
- var MetaType = _elements.default.MetaType, node = metaTypeNode, string = context.nodeAsString(node), metaTypeName = metaTypeNode.getMetaTypeName(), name = metaTypeName, metaType = new MetaType(string, node, name);
607
+ var MetaType = _elements.default.MetaType, node = metaTypeNode, string = context.nodeAsString(node), metaTypeName = metaTypeNode.getMetaTypeName(), name = metaTypeName, metaType = new MetaType(context, string, node, name);
427
608
  return metaType;
428
609
  }
429
610
  function propertyFromPropertyNode(propertyNode, context) {
430
- var Property = _elements.default.Property, node = propertyNode, string = context.nodeAsString(node), propertyName = propertyNode.getPropertyName(), nominalTypeName = null, name = propertyName, property = new Property(string, node, name, nominalTypeName);
611
+ var Property = _elements.default.Property, node = propertyNode, string = context.nodeAsString(node), propertyName = propertyNode.getPropertyName(), nominalTypeName = null, name = propertyName, property = new Property(context, string, node, name, nominalTypeName);
431
612
  return property;
432
613
  }
433
614
  function variableFromVariableNode(variableNode, context) {
434
- var Variable = _elements.default.Variable, node = variableNode, string = context.nodeAsString(node), type = null, identifier = identifierFromVarialbeNode(variableNode, context), propertyRelations = [], variable = new Variable(string, node, type, identifier, propertyRelations);
615
+ var Variable = _elements.default.Variable, node = variableNode, string = context.nodeAsString(node), type = null, identifier = identifierFromVarialbeNode(variableNode, context), propertyRelations = [], variable = new Variable(context, string, node, type, identifier, propertyRelations);
435
616
  return variable;
436
617
  }
437
618
  function subproofFromSubproofNode(subproofNode, context) {
438
- var SubProof = _elements.default.SubProof, node = subproofNode, suppositions = suppositionsFromSubproofNode(subproofNode, context), subDerivation = subDerivationFromSubproofNode(subproofNode, context), subproofString = (0, _string.subproofStringFromSubproofNode)(subproofNode, context), string = subproofString, subproof = new SubProof(string, node, suppositions, subDerivation);
619
+ var SubProof = _elements.default.SubProof, node = subproofNode, suppositions = suppositionsFromSubproofNode(subproofNode, context), subDerivation = subDerivationFromSubproofNode(subproofNode, context), subproofString = (0, _string.subproofStringFromSubproofNode)(subproofNode, context), string = subproofString, subproof = new SubProof(context, string, node, suppositions, subDerivation);
439
620
  return subproof;
440
621
  }
441
622
  function equalityFromStatementNode(statementNode, context) {
@@ -452,45 +633,97 @@ function deductionFromDeductionNode(deductionNode, context) {
452
633
  return deduction;
453
634
  }
454
635
  function statementFromStatementNode(statementNode, context) {
455
- var Statement = _elements.default.Statement, node = statementNode, string = context.nodeAsString(node), statement = new Statement(string, node);
636
+ var Statement = _elements.default.Statement, node = statementNode, string = context.nodeAsString(node), statement = new Statement(context, string, node);
456
637
  return statement;
457
638
  }
458
639
  function signatureFromSignatureNode(signatureNode, context) {
459
- var Signature = _elements.default.Signature, node = signatureNode, string = context.nodeAsString(node), terms = termsFromSignatureNode(signatureNode, context), signature = new Signature(string, node, terms);
640
+ var Signature = _elements.default.Signature, node = signatureNode, string = context.nodeAsString(node), terms = termsFromSignatureNode(signatureNode, context), signature = new Signature(context, string, node, terms);
460
641
  return signature;
461
642
  }
462
643
  function referenceFromReferenceNode(referenceNode, context) {
463
- var Reference = _elements.default.Reference, node = referenceNode, string = context.nodeAsString(node), metavariable = metavariableFromReferenceNode(referenceNode, context), reference = new Reference(string, node, metavariable);
644
+ var Reference = _elements.default.Reference, node = referenceNode, string = context.nodeAsString(node), metavariable = metavariableFromReferenceNode(referenceNode, context), reference = new Reference(context, string, node, metavariable);
464
645
  return reference;
465
646
  }
647
+ function conjectureroConjectureNode(conjectureNode, context) {
648
+ var Conjecture = _elements.default.Conjecture, axiomLemmaTheoremConjectureNode = conjectureNode, proof = proofFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), labels = labelsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), deduction = deductionFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), suppositions = suppositionsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), signature = signatureFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), hypotheses = [], axiomLemmaTheoremConjectureString = (0, _string.axiomLemmaTheoremConjectureStringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), node = conjectureNode, string = axiomLemmaTheoremConjectureString, conjecture = new Conjecture(context, string, node, labels, suppositions, deduction, proof, signature, hypotheses);
649
+ return conjecture;
650
+ }
651
+ function judgementFromJudgementNode(judgementNode, context) {
652
+ var Judgement = _elements.default.Judgement, node = judgementNode, string = context.nodeAsString(node), frame = frameFromJudgementNode(judgementNode, context), assumption = assumptionFromJudgementNode(judgementNode, context), judgement = new Judgement(context, string, node, frame, assumption);
653
+ return judgement;
654
+ }
655
+ function metaLemmaFromMetaLemmaNode(metaLemmaNode1, context) {
656
+ var MetaLemma = _elements.default.MetaLemma, metaLemmaMetathoremNode = metaLemmaNode1, proof = proofFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context), label = labelFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context), deduction = deductionFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context), suppositions = suppositionsFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context), substitutions = null, node = metaLemmaNode1, string = (0, _string.metaLemmaMetatheoremStringFromLabelSuppositionsAndDeduction)(label, suppositions, deduction), metaLemma = new MetaLemma(context, string, node, label, suppositions, deduction, proof, substitutions);
657
+ return metaLemma;
658
+ }
659
+ function parameterFromParameterNode(parameterNode, context) {
660
+ var Parameter = _elements.default.Parameter, node = parameterNode, string = context.nodeAsString(node), parameterName = parameterNode.getParameterName(), name = parameterName, parameter = new Parameter(context, string, node, name);
661
+ return parameter;
662
+ }
663
+ function hypothesisFromHypothesisNode(hypotheseNode, context) {
664
+ var Hypothsis = _elements.default.Hypothsis, node = hypotheseNode, string = context.nodeAsString(node), statement = statementFromHypothesisNode(hypotheseNode, context), parameter = new Hypothsis(context, string, node, statement);
665
+ return parameter;
666
+ }
667
+ function conclusionFromConclusionNode(conclusionNode, context) {
668
+ var Conclusion = _elements.default.Conclusion, node = conclusionNode, string = context.nodeAsString(node), statement = statementFromConclusionNode(conclusionNode, context), conclusion = new Conclusion(context, string, node, statement);
669
+ return conclusion;
670
+ }
466
671
  function conclusinoFromConclusionNode(conclusinoNode, context) {
467
672
  var Conclusion = _elements.default.Conclusion, node = conclusinoNode, string = context.nodeAsString(node), statement = statementFromConclusionNode(conclusinoNode, context), conclusino = new Conclusion(context, string, node, statement);
468
673
  return conclusino;
469
674
  }
470
675
  function assumptionFromAssumptionNode(assumptionNode, context) {
471
- var Assumption = _elements.default.Assumption, node = assumptionNode, string = context.nodeAsString(node), statement = statementFromAssumptionNode(assumptionNode, context), reference = referenceFromAssumptionNode(assumptionNode, context), assumption = new Assumption(string, node, statement, reference);
676
+ var Assumption = _elements.default.Assumption, node = assumptionNode, string = context.nodeAsString(node), statement = statementFromAssumptionNode(assumptionNode, context), reference = referenceFromAssumptionNode(assumptionNode, context), assumption = new Assumption(context, string, node, statement, reference);
472
677
  return assumption;
473
678
  }
474
679
  function derivationFromDerivationNode(derivationNode, context) {
475
- var Derivation = _elements.default.Derivation, node = derivationNode, string = null, stepsOrSubproofs = stepsOrSubproofsFromDerivationNode(derivationNode, context), derivation = new Derivation(string, node, stepsOrSubproofs);
680
+ var Derivation = _elements.default.Derivation, node = derivationNode, string = null, stepsOrSubproofs = stepsOrSubproofsFromDerivationNode(derivationNode, context), derivation = new Derivation(context, string, node, stepsOrSubproofs);
476
681
  return derivation;
477
682
  }
478
683
  function typePrefixFromTypePrefixNode(typePrefixNode, context) {
479
- var TypePrefix = _elements.default.TypePrefix, node = typePrefixNode, string = context.nodeAsString(node), term = termFromTypePrefixNode(typePrefixNode, context), type = typeFromTypePrefixNode(typePrefixNode, context), typePrefix = new TypePrefix(string, node, term, type);
684
+ var TypePrefix = _elements.default.TypePrefix, node = typePrefixNode, string = context.nodeAsString(node), term = termFromTypePrefixNode(typePrefixNode, context), type = typeFromTypePrefixNode(typePrefixNode, context), typePrefix = new TypePrefix(context, string, node, term, type);
480
685
  return typePrefix;
481
686
  }
687
+ function metatheoremFromMetaLemmaNode(metatheoremNode, context) {
688
+ var Metatehorem = _elements.default.Metatehorem, metaLemmaMetathoremNode = metatheoremNode, proof = proofFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context), label = labelFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context), deduction = deductionFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context), suppositions = suppositionsFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context), substitutions = null, node = metaLemmaNode, string = (0, _string.metaLemmaMetatheoremStringFromLabelSuppositionsAndDeduction)(label, suppositions, deduction), metatheorem = new Metatehorem(context, string, node, label, suppositions, deduction, proof, substitutions);
689
+ return metatheorem;
690
+ }
691
+ function referenceFromMetavariableNode(metavariableNode, context) {
692
+ var metavariableString = context.nodeAsString(metavariableNode), referenceString = metavariableString, string = referenceString, referenceNode = (0, _instantiate.instantiateReference)(string, context), reference = referenceFromReferenceNode(referenceNode, context);
693
+ return reference;
694
+ }
695
+ function hyppothesisFromHypothesisNode(hypothesisNode, context) {
696
+ var Hypothesis = _elements.default.Hypothesis, node = hypothesisNode, string = context.nodeAsString(node), statement = statementFromHypothesisNode(hypothesisNode, context), hypothesis = new Hypothesis(context, string, node, statement);
697
+ return hypothesis;
698
+ }
699
+ function suppositionFromSuppositionNode(suppositionNode, context) {
700
+ var Supposition = _elements.default.Supposition, node = suppositionNode, string = context.nodeAsString(node), statement = statementFromSuppositionNode(suppositionNode, context), procedureCall = procedureCallFromSuppositionNode(suppositionNode, context), supposition = new Supposition(context, string, node, statement, procedureCall);
701
+ return supposition;
702
+ }
703
+ function equivalenceFromEquivalenceNode(equivalenceNode, context) {
704
+ var Equivalence = _elements.default.Equivalence, node = equivalenceNode, terms = termsFromEquivalenceNode(equivalenceNode, context), equivalenceString = (0, _string.equivalenceStringFromTerms)(terms), string = equivalenceString, equivalence = new Equivalence(context, string, node, terms);
705
+ return equivalence;
706
+ }
707
+ function nameFromProcedureReferenceNode(procedureReferenceNode, context) {
708
+ var name = procedureReferenceNode.getName();
709
+ return name;
710
+ }
482
711
  function metavariableFromMetavariableNode(metavariableNode, context) {
483
- var Metavariable = _elements.default.Metavariable, node = metavariableNode, string = context.nodeAsString(node), metavariableName = metavariableNode.getMetavariableName(), name = metavariableName, type = null, metaType = null, metavariable = new Metavariable(string, node, name, type, metaType);
712
+ var Metavariable = _elements.default.Metavariable, node = metavariableNode, string = context.nodeAsString(node), metavariableName = metavariableNode.getMetavariableName(), name = metavariableName, type = null, metaType = null, metavariable = new Metavariable(context, string, node, name, type, metaType);
484
713
  return metavariable;
485
714
  }
486
715
  function subDerivationFromSubDerivationNode(subDerivationNode, context) {
487
- var SubDerivation = _elements.default.SubDerivation, node = subDerivationNode, string = null, stepsOrSubproofs = stepsOrSubproofsFromSubDerivationNode(subDerivationNode, context), subDerivation = new SubDerivation(string, node, stepsOrSubproofs);
716
+ var SubDerivation = _elements.default.SubDerivation, node = subDerivationNode, string = null, stepsOrSubproofs = stepsOrSubproofsFromSubDerivationNode(subDerivationNode, context), subDerivation = new SubDerivation(context, string, node, stepsOrSubproofs);
488
717
  return subDerivation;
489
718
  }
490
719
  function typeAssertionFromTypeAssertionNode(typeAssertionNode, context) {
491
- var TypeAssertion = _elements.default.TypeAssertion, node = typeAssertionNode, string = context.nodeAsString(node), term = termFromTypeAssertionNode(typeAssertionNode, context), type = typeFromTypeAssertionNode(typeAssertionNode, context), typeAssertion = new TypeAssertion(string, node, term, type);
720
+ var TypeAssertion = _elements.default.TypeAssertion, node = typeAssertionNode, string = context.nodeAsString(node), term = termFromTypeAssertionNode(typeAssertionNode, context), type = typeFromTypeAssertionNode(typeAssertionNode, context), typeAssertion = new TypeAssertion(context, string, node, term, type);
492
721
  return typeAssertion;
493
722
  }
723
+ function procedureCallFromProcedureCallNode(procedureCallNode, context) {
724
+ var ProcedureCall = _elements.default.ProcedureCall, parameters = parametersFromProcedureCallNode(procedureCallNode, context), procedureReference = procedureReferenceFromProcedureCallNode(procedureCallNode, context), procedureCallString = (0, _string.procedureCallStringFromProcedureReferenceAndParameters)(procedureReference, parameters), node = procedureCallNode, string = procedureCallString, procedureCall = new ProcedureCall(context, string, node, parameters, procedureReference);
725
+ return procedureCall;
726
+ }
494
727
  function stepsOrSubproofFromStepOrSubproofNode(stepOrSubproofNode, context) {
495
728
  var step = stepFromStepOrSubproofNode(stepOrSubproofNode, context), subproof = subproofFromStepOrSubproofNode(stepOrSubproofNode, context), stepOrSubproof = step || subproof;
496
729
  return stepOrSubproof;
@@ -504,11 +737,11 @@ function prefixedFromComplexTypeDeclarationNode(complexTypeDeclarationNode, cont
504
737
  return prefixed;
505
738
  }
506
739
  function definedAssertionFromDefinedAssertionNode(definedAssertionNode, context) {
507
- var DefinedAssertion = _elements.default.DefinedAssertion, node = definedAssertionNode, string = context.nodeAsString(node), negated = definedAssertionNode.isNegated(), term = termFromDefinedAssertionNode(definedAssertionNode, context), frame = frameFromDefinedAssertionNode(definedAssertionNode, context), definedAssertion = new DefinedAssertion(string, node, term, frame, negated);
740
+ var DefinedAssertion = _elements.default.DefinedAssertion, node = definedAssertionNode, string = context.nodeAsString(node), negated = definedAssertionNode.isNegated(), term = termFromDefinedAssertionNode(definedAssertionNode, context), frame = frameFromDefinedAssertionNode(definedAssertionNode, context), definedAssertion = new DefinedAssertion(context, string, node, term, frame, negated);
508
741
  return definedAssertion;
509
742
  }
510
743
  function propertyRelationFromPropertyRelationNode(propertyRelationNode, context) {
511
- var PropertyRelation = _elements.default.PropertyRelation, node = propertyRelationNode, string = context.nodeAsString(node), property = propertyFromPropertyRelationNode(propertyRelationNode, context), term = termFromPropertyRelationNode(propertyRelationNode, context), propertyRelation = new PropertyRelation(string, node, property, term);
744
+ var PropertyRelation = _elements.default.PropertyRelation, node = propertyRelationNode, string = context.nodeAsString(node), property = propertyFromPropertyRelationNode(propertyRelationNode, context), term = termFromPropertyRelationNode(propertyRelationNode, context), propertyRelation = new PropertyRelation(context, string, node, property, term);
512
745
  return propertyRelation;
513
746
  }
514
747
  function termSubstitutionFromTermSubstitutionNode(termSubstitutionNode, context) {
@@ -520,23 +753,27 @@ function frameSubstitutionFromFrameSubstitutionNode(frameSubstitutionNode, conte
520
753
  return frameSubstitution;
521
754
  }
522
755
  function propertyAssertionFromPropertyAssertionNode(propertyAssertionNode, context) {
523
- var PropertyAssertion = _elements.default.PropertyAssertion, node = propertyAssertionNode, string = context.nodeAsString(node), term = termFromPropertyAssertionNode(propertyAssertionNode, context), propertyRelation = propertyRelationFromPropertyAssertionNode(propertyAssertionNode, context), propertyAssertion = new PropertyAssertion(string, node, term, propertyRelation);
756
+ var PropertyAssertion = _elements.default.PropertyAssertion, node = propertyAssertionNode, string = context.nodeAsString(node), term = termFromPropertyAssertionNode(propertyAssertionNode, context), propertyRelation = propertyRelationFromPropertyAssertionNode(propertyAssertionNode, context), propertyAssertion = new PropertyAssertion(context, string, node, term, propertyRelation);
524
757
  return propertyAssertion;
525
758
  }
526
759
  function subproofAssertionFromSubproofAssertionNode(subproofAssertionNode, context) {
527
- var SubproofAssertion = _elements.default.SubproofAssertion, node = subproofAssertionNode, string = context.nodeAsString(node), statements = statementsFromSubproofAssertionNode(subproofAssertionNode, context), subproofAssertion = new SubproofAssertion(string, node, statements);
760
+ var SubproofAssertion = _elements.default.SubproofAssertion, node = subproofAssertionNode, string = context.nodeAsString(node), statements = statementsFromSubproofAssertionNode(subproofAssertionNode, context), subproofAssertion = new SubproofAssertion(context, string, node, statements);
528
761
  return subproofAssertion;
529
762
  }
530
763
  function containedAssertionFromContainedAssertionNode(containedAssertionNode, context) {
531
- var ContainedAssertion = _elements.default.ContainedAssertion, node = containedAssertionNode, string = context.nodeAsString(node), negated = containedAssertionNode.isNegated(), term = termFromContainedAssertionNode(containedAssertionNode, context), frame = frameFromContainedAssertionNode(containedAssertionNode, context), statement = statementFromContainedAssertionNode(containedAssertionNode, context), containedAssertion = new ContainedAssertion(string, node, term, frame, negated, statement);
764
+ var ContainedAssertion = _elements.default.ContainedAssertion, node = containedAssertionNode, string = context.nodeAsString(node), negated = containedAssertionNode.isNegated(), term = termFromContainedAssertionNode(containedAssertionNode, context), frame = frameFromContainedAssertionNode(containedAssertionNode, context), statement = statementFromContainedAssertionNode(containedAssertionNode, context), containedAssertion = new ContainedAssertion(context, string, node, term, frame, negated, statement);
532
765
  return containedAssertion;
533
766
  }
534
767
  function satisfiesAssertionFromSatisfiesAssertionNode(satisfiesAssertionNode, context) {
535
- var SatisfiesAssertion = _elements.default.SatisfiesAssertion, node = satisfiesAssertionNode, string = context.nodeAsString(node), signature = signatureFromSatisfiesAssertionNode(satisfiesAssertionNode, context), reference = referenceFromSatisfiesAssertionNode(satisfiesAssertionNode, context), satisfiesAssertion = new SatisfiesAssertion(string, node, signature, reference);
768
+ var SatisfiesAssertion = _elements.default.SatisfiesAssertion, node = satisfiesAssertionNode, string = context.nodeAsString(node), signature = signatureFromSatisfiesAssertionNode(satisfiesAssertionNode, context), reference = referenceFromSatisfiesAssertionNode(satisfiesAssertionNode, context), satisfiesAssertion = new SatisfiesAssertion(context, string, node, signature, reference);
536
769
  return satisfiesAssertion;
537
770
  }
771
+ function procedureReferenceFromProcedureReferenceNode(procedureReferenceNode, context) {
772
+ var ProcedureReference = _elements.default.ProcedureReference, node = procedureReferenceNode, string = context.nodeAsString(node), name = nameFromProcedureReferenceNode(procedureReferenceNode, context), variableDeclaration = new ProcedureReference(context, string, node, name);
773
+ return variableDeclaration;
774
+ }
538
775
  function variableDeclarationFromVariableDeclarationNode(variableDeclarationNode, context) {
539
- var VariableDeclaration = _elements.default.VariableDeclaration, node = variableDeclarationNode, string = context.nodeAsString(node), varialbe = variableFromVariableNode(variableDeclarationNode, context), variableDeclaration = new VariableDeclaration(context, string, node, varialbe);
776
+ var VariableDeclaration = _elements.default.VariableDeclaration, node = variableDeclarationNode, string = context.nodeAsString(node), variable = variableFromVariableNode(variableDeclarationNode, context), variableDeclaration = new VariableDeclaration(context, string, node, variable);
540
777
  return variableDeclaration;
541
778
  }
542
779
  function typePrefixDeclarationFromTypePrefixDeclarationNode(typePrefixDeclarationNode, context) {
@@ -551,12 +788,8 @@ function simpleTypeDeclarationFromSimpleTypeDeclarationNode(simpleTypeDeclaratio
551
788
  var SimpleTypeDeclaration = _elements.default.SimpleTypeDeclaration, node = simpleTypeDeclarationNode, string = context.nodeAsString(node), type = typeFromSimpleTypeDeclarationNode(simpleTypeDeclarationNode, context), prefixed = prefixedFromSimpleTypeDeclarationNode(simpleTypeDeclarationNode, context), simpleTypeDeclaration = new SimpleTypeDeclaration(context, string, node, type, prefixed);
552
789
  return simpleTypeDeclaration;
553
790
  }
554
- function statementSubstitutionFromStatementSubstitutionNode(statementSubstitutionNode, substitution, context) {
555
- if (context === undefined) {
556
- context = substitution; ///
557
- substitution = null;
558
- }
559
- var StatementSubstitution = _elements.default.StatementSubstitution, node = statementSubstitutionNode, string = context.nodeAsString(node), resolved = true, statement = statementFromStatementSubstitutionNode(statementSubstitutionNode, context), metavariable = metavariableFromStatementSubstitutionNode(statementSubstitutionNode, context), statementSubstitution = new StatementSubstitution(context, string, node, resolved, statement, metavariable, substitution);
791
+ function statementSubstitutionFromStatementSubstitutionNode(statementSubstitutionNode, context) {
792
+ var StatementSubstitution = _elements.default.StatementSubstitution, node = statementSubstitutionNode, string = context.nodeAsString(node), resolved = true, statement = statementFromStatementSubstitutionNode(statementSubstitutionNode, context), metavariable = metavariableFromStatementSubstitutionNode(statementSubstitutionNode, context), substitution = null, statementSubstitution = new StatementSubstitution(context, string, node, resolved, statement, metavariable, substitution);
560
793
  return statementSubstitution;
561
794
  }
562
795
  function referenceSubstitutionFromReferenceSubstitutionNode(referenceSubstitutionNode, context) {
@@ -572,9 +805,43 @@ function complexTypeDeclarationFromComplexTypeDeclarationNode(complexTypeDeclara
572
805
  return complexTypeDeclaration;
573
806
  }
574
807
  function metavariableDeclarationFromMetavariableDeclarationNode(metavariableDeclarationNode, context) {
575
- var MetavariableDeclaration = _elements.default.MetavariableDeclaration, node = metavariableDeclarationNode, string = context.nodeAsString(node), metavarialbe = metavariableFromMetavariableNode(metavariableDeclarationNode, context), metavariableDeclaration = new MetavariableDeclaration(context, string, node, metavarialbe);
808
+ var MetavariableDeclaration = _elements.default.MetavariableDeclaration, node = metavariableDeclarationNode, string = context.nodeAsString(node), metaType = metaTypeFromMetavariableDeclarationNode(metavariableDeclarationNode, context), metavariable = metavariableFromMetavariableDeclarationNode(metavariableDeclarationNode, context);
809
+ metavariable.setMetaType(metaType);
810
+ var metavariableDeclaration = new MetavariableDeclaration(context, string, node, metavariable);
576
811
  return metavariableDeclaration;
577
812
  }
813
+ function proofFromRuleNode(ruleNode, context) {
814
+ var proof = null;
815
+ var proofNode = ruleNode.getProofNode();
816
+ if (proofNode !== null) {
817
+ proof = proofFromProofNode(proofNode, context);
818
+ }
819
+ return proof;
820
+ }
821
+ function axiomFromSectionNode(sectionNode, context) {
822
+ var axiom = null;
823
+ var axiomNode = sectionNode.getAxiomNode();
824
+ if (axiomNode !== null) {
825
+ axiom = axiomFromAxiomNode(axiomNode, context);
826
+ }
827
+ return axiom;
828
+ }
829
+ function lemmaFromSectionNode(sectionNode, context) {
830
+ var lemma = null;
831
+ var lemmaNode = sectionNode.getLemmaNode();
832
+ if (lemmaNode !== null) {
833
+ lemma = lemmaFromLemmaNode(lemmaNode, context);
834
+ }
835
+ return lemma;
836
+ }
837
+ function variableFromTermNode(termNode, context) {
838
+ var variable = null;
839
+ var variableNode = termNode.getVariableNode();
840
+ if (variableNode !== null) {
841
+ variable = variableFromVariableNode(variableNode, context);
842
+ }
843
+ return variable;
844
+ }
578
845
  function statementFromStepNode(stepNode, context) {
579
846
  var statement = null;
580
847
  var statementNode = stepNode.getStatementNode();
@@ -591,6 +858,30 @@ function referenceFromStepNode(stepNode, context) {
591
858
  }
592
859
  return reference;
593
860
  }
861
+ function conclusionFromRuleNode(ruleNode, context) {
862
+ var conclusion = null;
863
+ var conclusionNode = ruleNode.getConclusionNode();
864
+ if (conclusionNode !== null) {
865
+ conclusion = conclusionFromConclusionNode(conclusionNode, context);
866
+ }
867
+ return conclusion;
868
+ }
869
+ function theoremFromSectionNode(sectionNode, context) {
870
+ var theorem = null;
871
+ var theoremNode = sectionNode.getTheoremNode();
872
+ if (theoremNode !== null) {
873
+ theorem = theoremFromTheoremNode(theoremNode, context);
874
+ }
875
+ return theorem;
876
+ }
877
+ function frameFromJudgementNode(judgementNode, context) {
878
+ var frame = null;
879
+ var frameNode = judgementNode.getFrameNode();
880
+ if (frameNode !== null) {
881
+ frame = frameFromFrameNode(frameNode, context);
882
+ }
883
+ return frame;
884
+ }
594
885
  function derivationFromProofNode(proofNode, context) {
595
886
  var derivation = null;
596
887
  var derivationNode = proofNode.getDerivationNode();
@@ -599,6 +890,46 @@ function derivationFromProofNode(proofNode, context) {
599
890
  }
600
891
  return derivation;
601
892
  }
893
+ function statementFromPremiseNode(premiseNode, context) {
894
+ var statement = null;
895
+ var statementNode = premiseNode.getStatementNode();
896
+ if (statementNode !== null) {
897
+ statement = statementFromStatementNode(statementNode, context);
898
+ }
899
+ return statement;
900
+ }
901
+ function metavariableFromLabelNode(labelNode, context) {
902
+ var metavariable = null;
903
+ var metavariableNode = labelNode.getMetavariableNode();
904
+ if (metavariableNode !== null) {
905
+ metavariable = metavariableFromMetavariableNode(metavariableNode, context);
906
+ }
907
+ return metavariable;
908
+ }
909
+ function conjectureFromSectionNode(sectionNode, context) {
910
+ var conjecture = null;
911
+ var conjectureNode = sectionNode.getConjectureNode();
912
+ if (conjectureNode !== null) {
913
+ conjecture = conjectureFromConjectureNode(conjectureNode, context);
914
+ }
915
+ return conjecture;
916
+ }
917
+ function conclusionFromPremiseNode(premiseNode, context) {
918
+ var conclusion = null;
919
+ var conclusionNode = premiseNode.getConclusionNode();
920
+ if (conclusionNode !== null) {
921
+ conclusion = conclusionFromConclusionNode(conclusionNode, context);
922
+ }
923
+ return conclusion;
924
+ }
925
+ function judgementFomStatementNode(statementNode, context) {
926
+ var judgement = null;
927
+ var judgementNode = statementNode.getJudgementNode();
928
+ if (judgementNode !== null) {
929
+ judgement = judgementFromJudgementNode(judgementNode, context);
930
+ }
931
+ return judgement;
932
+ }
602
933
  function termFromTypeAssertionNode(typeAssertionNode, context) {
603
934
  var term = null;
604
935
  var termNode = typeAssertionNode.getTermNode();
@@ -615,14 +946,13 @@ function typeFromTypeAssertionNode(typeAssertionNode, context) {
615
946
  }
616
947
  return type;
617
948
  }
618
- function stepFromStepOrSubproofNode(stepOrSubproofNode, context) {
619
- var step = null;
620
- var stepOrSubproofNodeStepNode = stepOrSubproofNode.isStepNode();
621
- if (stepOrSubproofNodeStepNode) {
622
- var stepNode = stepOrSubproofNode; ///
623
- step = stepFromStepNode(stepNode, context);
949
+ function metavariableFromFrameNode(frameNode, context) {
950
+ var metavariable = null;
951
+ var metavariableNode = frameNode.getMetavariableNode();
952
+ if (metavariableNode !== null) {
953
+ metavariable = metavariableFromMetavariableNode(metavariableNode, context);
624
954
  }
625
- return step;
955
+ return metavariable;
626
956
  }
627
957
  function identifierFromVarialbeNode(variableNode, context) {
628
958
  var variableIdentifier = variableNode.getVariableIdentifier(), identifier = variableIdentifier; ///
@@ -636,6 +966,15 @@ function statementFromDeductionNode(deductionNode, context) {
636
966
  }
637
967
  return statement;
638
968
  }
969
+ function stepFromStepOrSubproofNode(stepOrSubproofNode, context) {
970
+ var step = null;
971
+ var stepOrSubproofNodeStepNode = stepOrSubproofNode.isStepNode();
972
+ if (stepOrSubproofNodeStepNode) {
973
+ var stepNode = stepOrSubproofNode; ///
974
+ step = stepFromStepNode(stepNode, context);
975
+ }
976
+ return step;
977
+ }
639
978
  function statementFromConclusionNode(conclusinoNode, context) {
640
979
  var statement = null;
641
980
  var statementNode = conclusinoNode.getStatementNode();
@@ -654,9 +993,9 @@ function statementFromAssumptionNode(assumptionNode, context) {
654
993
  }
655
994
  function referenceFromAssumptionNode(assumptionNode, context) {
656
995
  var reference = null;
657
- var referenceNode = assumptionNode.getReferenceNode();
658
- if (referenceNode !== null) {
659
- reference = referenceFromReferenceNode(referenceNode, context);
996
+ var metavariableNode = assumptionNode.getMetavariableNode();
997
+ if (metavariableNode !== null) {
998
+ reference = referenceFromMetavariableNode(metavariableNode, context);
660
999
  }
661
1000
  return reference;
662
1001
  }
@@ -668,6 +1007,30 @@ function assumptionFromJudgementNode(judgementNode, context) {
668
1007
  }
669
1008
  return assumption;
670
1009
  }
1010
+ function statementFromHypothesisNode(hypothesisNode, context) {
1011
+ var statement = null;
1012
+ var statementNode = hypothesisNode.getStatementNode();
1013
+ if (statementNode !== null) {
1014
+ statement = statementFromStatementNode(statementNode, context);
1015
+ }
1016
+ return statement;
1017
+ }
1018
+ function procedureCallFromPremiseNode(premiseNode, context) {
1019
+ var procedureCall = null;
1020
+ var procedureCallNode = premiseNode.getProcedureCallNode();
1021
+ if (procedureCallNode !== null) {
1022
+ procedureCall = procedureCallFromProcedureCallNode(procedureCallNode, context);
1023
+ }
1024
+ return procedureCall;
1025
+ }
1026
+ function statementFromSuppositionNode(suppositionNode, context) {
1027
+ var statement = null;
1028
+ var statementNode = suppositionNode.getStatementNode();
1029
+ if (statementNode !== null) {
1030
+ statement = statementFromStatementNode(statementNode, context);
1031
+ }
1032
+ return statement; ///
1033
+ }
671
1034
  function termFromDefinedAssertionNode(definedAssertionNode, context) {
672
1035
  var term = null;
673
1036
  var termNode = definedAssertionNode.getTermNode();
@@ -692,6 +1055,15 @@ function termFromTermSubstitutionNode(termSubstitutionNode, context) {
692
1055
  }
693
1056
  return term;
694
1057
  }
1058
+ function metavariableFromStatementNode(statementNode, context) {
1059
+ var metavariable = null;
1060
+ var singularMetavariableNode = statementNode.getSingularMetavariableNode();
1061
+ if (singularMetavariableNode !== null) {
1062
+ var metavariableNode = singularMetavariableNode; ///
1063
+ metavariable = metavariableFromMetavariableNode(metavariableNode, context);
1064
+ }
1065
+ return metavariable;
1066
+ }
695
1067
  function subDerivationFromSubproofNode(subproofNode, context) {
696
1068
  var subDerviation = null;
697
1069
  var subDerivationNode = subproofNode.getSubDerivationNode();
@@ -710,9 +1082,9 @@ function typeAssertinFromStatementNode(statementNode, context) {
710
1082
  }
711
1083
  function metavariableFromReferenceNode(referenceNode, context) {
712
1084
  var metavariable = null;
713
- var metavariableNode = referenceNode.getTermNode();
1085
+ var metavariableNode = referenceNode.getMetavariableNode();
714
1086
  if (metavariableNode !== null) {
715
- metavariable = metavariableFromMetavaraibleNode(metavariableNode, context);
1087
+ metavariable = metavariableFromMetavariableNode(metavariableNode, context);
716
1088
  }
717
1089
  return metavariable;
718
1090
  }
@@ -732,14 +1104,6 @@ function termFromPropertyAssertionNode(propertyAssertionNode, context) {
732
1104
  }
733
1105
  return term;
734
1106
  }
735
- function frameFromFrameSubstitutionNode(frameSubstitutionNode, context) {
736
- var frame = null;
737
- var frameNode = frameSubstitutionNode.getFrameNode();
738
- if (frameNode !== null) {
739
- frame = frameFromFrameNode(frameNode, context);
740
- }
741
- return frame;
742
- }
743
1107
  function satisfiesAssertionFromStepNode(stepNode, context) {
744
1108
  var satisfiesAssertion = null;
745
1109
  var satisfiesAssertionNode = stepNode.getSatisfiedAssertionNode();
@@ -748,6 +1112,34 @@ function satisfiesAssertionFromStepNode(stepNode, context) {
748
1112
  }
749
1113
  return satisfiesAssertion;
750
1114
  }
1115
+ function parameterNameFromParameterNode(parameterNode, context) {
1116
+ var parameterName = parameterNode.getParameterName();
1117
+ return parameterName;
1118
+ }
1119
+ function metavariableFromAssumptionNode(assumptionNode, context) {
1120
+ var metavariable = null;
1121
+ var metavariableNode = assumptionNode.getMetavariableNode();
1122
+ if (metavariableNode !== null) {
1123
+ metavariable = metavariableFromMetavariableNode(metavariableNode, context);
1124
+ }
1125
+ return metavariable;
1126
+ }
1127
+ function referenceFromProcedureCallNode(procedureCallNode, context) {
1128
+ var reference = null;
1129
+ var referenceNode = procedureCallNode.getReferenceNode();
1130
+ if (referenceNode !== null) {
1131
+ reference = referenceFromReferenceNode(referenceNode, context);
1132
+ }
1133
+ return reference;
1134
+ }
1135
+ function frameFromFrameSubstitutionNode(frameSubstitutionNode, context) {
1136
+ var frame = null;
1137
+ var frameNode = frameSubstitutionNode.getFrameNode();
1138
+ if (frameNode !== null) {
1139
+ frame = frameFromFrameNode(frameNode, context);
1140
+ }
1141
+ return frame;
1142
+ }
751
1143
  function subproofFromStepOrSubproofNode(subproofOrSubproofNode, context) {
752
1144
  var subproof = null;
753
1145
  var subproofOrSubproofNodeSubproofNode = subproofOrSubproofNode.isSubproofNode();
@@ -765,6 +1157,14 @@ function termFromContainedAssertionNode(containedAssertionNode, context) {
765
1157
  }
766
1158
  return term;
767
1159
  }
1160
+ function typeFromPropertyDeclarationNode(propertyDeclarationNode, context) {
1161
+ var type = null;
1162
+ var typeNode = propertyDeclarationNode.getTypeNode();
1163
+ if (typeNode !== null) {
1164
+ type = typeFromTypeNode(typeNode, context);
1165
+ }
1166
+ return type;
1167
+ }
768
1168
  function frameFromContainedAssertionNode(containedAssertionNode, context) {
769
1169
  var frame = null;
770
1170
  var frameNode = containedAssertionNode.getFrameNode();
@@ -789,6 +1189,14 @@ function variableFromTermSubstitutionNode(termSubstitutionNode, context) {
789
1189
  }
790
1190
  return variable;
791
1191
  }
1192
+ function procedureCallFromSuppositionNode(suppositionNode, context) {
1193
+ var procedureCall = null;
1194
+ var procedureCallNode = suppositionNode.getProcedureCallNode();
1195
+ if (procedureCallNode !== null) {
1196
+ procedureCall = procedureCallFromProcedureCallNode(procedureCallNode, context);
1197
+ }
1198
+ return procedureCall;
1199
+ }
792
1200
  function definedAssertionFromStatementNode(statementNode, context) {
793
1201
  var definedAssertion = null;
794
1202
  var definedAssertionNode = statementNode.getDefinedAssertionNode();
@@ -797,14 +1205,6 @@ function definedAssertionFromStatementNode(statementNode, context) {
797
1205
  }
798
1206
  return definedAssertion;
799
1207
  }
800
- function typeFromSimpleTypeDeclarationNode(simpleTypeDeclarationNode, context) {
801
- var type = null;
802
- var typeNode = simpleTypeDeclarationNode.getTypeNode();
803
- if (typeNode !== null) {
804
- type = typeFromTypeNode(typeNode, context);
805
- }
806
- return type;
807
- }
808
1208
  function termSubstitutionFromStatementNode(statementNode, context) {
809
1209
  var termSubstitution = null;
810
1210
  var termSubstitutionNode = statementNode.getTermSubstitutionNode();
@@ -813,6 +1213,30 @@ function termSubstitutionFromStatementNode(statementNode, context) {
813
1213
  }
814
1214
  return termSubstitution;
815
1215
  }
1216
+ function proofFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context) {
1217
+ var proof = null;
1218
+ var proofNode = metaLemmaMetathoremNode.getProofNode();
1219
+ if (proofNode !== null) {
1220
+ proof = proofFromProofNode(proofNode, context);
1221
+ }
1222
+ return proof;
1223
+ }
1224
+ function labelFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context) {
1225
+ var label = null;
1226
+ var labelNode = metaLemmaMetathoremNode.getLabelNode();
1227
+ if (labelNode !== null) {
1228
+ label = labelFromLabelNode(labelNode, context);
1229
+ }
1230
+ return label;
1231
+ }
1232
+ function typeFromSimpleTypeDeclarationNode(simpleTypeDeclarationNode, context) {
1233
+ var type = null;
1234
+ var typeNode = simpleTypeDeclarationNode.getTypeNode();
1235
+ if (typeNode !== null) {
1236
+ type = typeFromTypeNode(typeNode, context);
1237
+ }
1238
+ return type;
1239
+ }
816
1240
  function frameSubstitutionFromStatementNode(statementNode, context) {
817
1241
  var frameSubstitution = null;
818
1242
  var frameSubstitutionNode = statementNode.getFrameSubstitutionNode();
@@ -844,6 +1268,14 @@ function subproofAssertionFromStatementNode(statementNode, context) {
844
1268
  }
845
1269
  return subproofAssertion;
846
1270
  }
1271
+ function termFromConstructorDeclarationNode(constructorDeclarationNode, context) {
1272
+ var term = null;
1273
+ var termNode = constructorDeclarationNode.getTermNode();
1274
+ if (termNode !== null) {
1275
+ term = termFromTermNode(termNode, context);
1276
+ }
1277
+ return term;
1278
+ }
847
1279
  function typeFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context) {
848
1280
  var type = null;
849
1281
  var typeNode = complexTypeDeclarationNode.getTypeNode();
@@ -852,6 +1284,16 @@ function typeFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context)
852
1284
  }
853
1285
  return type;
854
1286
  }
1287
+ function typeFromConstructorDeclarationNode(constructorDeclarationNode, context) {
1288
+ var type;
1289
+ var typeNode = constructorDeclarationNode.getTypeNode();
1290
+ if (typeNode !== null) {
1291
+ type = typeFromTypeNode(typeNode, context);
1292
+ } else {
1293
+ type = _type.baseType;
1294
+ }
1295
+ return type;
1296
+ }
855
1297
  function containedAssertionFromStatementNode(statementNode, context) {
856
1298
  0;
857
1299
  var containedAssertion = null;
@@ -861,14 +1303,6 @@ function containedAssertionFromStatementNode(statementNode, context) {
861
1303
  }
862
1304
  return containedAssertion;
863
1305
  }
864
- function statementFromContainedAssertionNode(containedAssertionNode, context) {
865
- var statement = null;
866
- var statementNode = containedAssertionNode.getStatementNode();
867
- if (statementNode !== null) {
868
- statement = statementFromStatementNode(statementNode, context);
869
- }
870
- return statement;
871
- }
872
1306
  function satisfiesAssertionFromStatementNode(statementNode, context) {
873
1307
  var satisfiesAssertion = null;
874
1308
  var satisfiesAssertionNode = statementNode.getSatisfiedAssertionNode();
@@ -877,6 +1311,14 @@ function satisfiesAssertionFromStatementNode(statementNode, context) {
877
1311
  }
878
1312
  return satisfiesAssertion;
879
1313
  }
1314
+ function statementFromContainedAssertionNode(containedAssertionNode, context) {
1315
+ var statement = null;
1316
+ var statementNode = containedAssertionNode.getStatementNode();
1317
+ if (statementNode !== null) {
1318
+ statement = statementFromStatementNode(statementNode, context);
1319
+ }
1320
+ return statement;
1321
+ }
880
1322
  function propertyFromPropertyDeclarationNode(propertyDeclarationNode, context) {
881
1323
  var property = null;
882
1324
  var propertyNode = propertyDeclarationNode.getPropertyNode();
@@ -895,9 +1337,9 @@ function signatureFromSatisfiesAssertionNode(satisfiesAssertionNode, context) {
895
1337
  }
896
1338
  function referenceFromSatisfiesAssertionNode(satisfiesAssertionNode, context) {
897
1339
  var reference = null;
898
- var referenceNode = satisfiesAssertionNode.getReferenceNode();
899
- if (referenceNode !== null) {
900
- reference = referenceFromReferenceNode(referenceNode, context);
1340
+ var metavariableNode = satisfiesAssertionNode.getMetavariableNode();
1341
+ if (metavariableNode !== null) {
1342
+ reference = referenceFromMetavariableNode(metavariableNode, context);
901
1343
  }
902
1344
  return reference;
903
1345
  }
@@ -924,6 +1366,14 @@ function metavariableFromFrameSubstitutionNode(frameSubstitutionNode, context) {
924
1366
  }
925
1367
  return metavariable;
926
1368
  }
1369
+ function deductionFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context) {
1370
+ var deduction = null;
1371
+ var deductionNode = metaLemmaMetathoremNode.getDeductionNode();
1372
+ if (deductionNode !== null) {
1373
+ deduction = deductionFromDeductionNode(deductionNode, context);
1374
+ }
1375
+ return deduction;
1376
+ }
927
1377
  function statementFromStatementSubstitutionNode(statementSubstitutionNode, context) {
928
1378
  var statement = null;
929
1379
  var statementNode = statementSubstitutionNode.getStatementNode();
@@ -940,6 +1390,22 @@ function referenceFromReferenceSubstitutionNode(referenceSubstitutionNode, conte
940
1390
  }
941
1391
  return reference;
942
1392
  }
1393
+ function statementFromCombinatorDeclarationNode(combinatorDeclarationNode, context) {
1394
+ var statement = null;
1395
+ var statementNode = combinatorDeclarationNode.getStatementNode();
1396
+ if (statementNode !== null) {
1397
+ statement = statementFromStatementNode(statementNode, context);
1398
+ }
1399
+ return statement;
1400
+ }
1401
+ function procedureReferenceFromProcedureCallNode(procedureCallNode, context) {
1402
+ var procedureReference = null;
1403
+ var procedureReferenceNode = procedureCallNode.getProcedureReferenceNode();
1404
+ if (procedureReferenceNode !== null) {
1405
+ procedureReference = procedureReferenceFromProcedureReferenceNode(procedureReferenceNode, context);
1406
+ }
1407
+ return procedureReference;
1408
+ }
943
1409
  function typePrefixFromTypePrefixDeclarationNode(typePrefixDeclarationNode, context) {
944
1410
  var typePrefix = null;
945
1411
  var typePrefixNode = typePrefixDeclarationNode.getTypePrefixNode();
@@ -965,6 +1431,14 @@ function metaTypeFromMetavariableDeclarationNode(metavariableDeclarationNode, co
965
1431
  }
966
1432
  return metaType;
967
1433
  }
1434
+ function proofFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context) {
1435
+ var proof = null;
1436
+ var proofNode = axiomLemmaTheoremConjectureNode.getProofNode();
1437
+ if (proofNode !== null) {
1438
+ proof = proofFromProofNode(proofNode, context);
1439
+ }
1440
+ return proof;
1441
+ }
968
1442
  function propertyRelationFromPropertyAssertionNode(propertyAssertionNode, context) {
969
1443
  var propertyRelation = null;
970
1444
  var propertyRelationNode = propertyAssertionNode.getPropertyRelationNode();
@@ -998,14 +1472,6 @@ function metavariableFromReferenceSubstitutionNode(referenceSubstitutionNode, co
998
1472
  }
999
1473
  return metavariable;
1000
1474
  }
1001
- function proofFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context) {
1002
- var proof = null;
1003
- var proofNode = axiomLemmaTheoremConjectureNode.getProofNode();
1004
- if (proofNode !== null) {
1005
- proof = proofFromProofNode(proofNode, context);
1006
- }
1007
- return proof;
1008
- }
1009
1475
  function metavariableFromMetavariableDeclarationNode(metavariableDeclarationNode, context) {
1010
1476
  var metavariable = null;
1011
1477
  var metavariableNode = metavariableDeclarationNode.getMetavariableNode();
@@ -1030,10 +1496,6 @@ function signatureFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectur
1030
1496
  }
1031
1497
  return signature;
1032
1498
  }
1033
- function suppositionsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context) {
1034
- var suppositionNodes = axiomLemmaTheoremConjectureNode.getSuppositionNodes(), suppositions = suppositionsFromSuppositionNodes(suppositionNodes, context);
1035
- return suppositions;
1036
- }
1037
1499
  function termsFromTermNodes(termNodes, context) {
1038
1500
  var terms = termNodes.map(function(termNode) {
1039
1501
  var term = termFromTermNode(termNode, context);
@@ -1048,6 +1510,13 @@ function labelsFromLabelNodes(labelNodes, context) {
1048
1510
  });
1049
1511
  return labels;
1050
1512
  }
1513
+ function premisesFromPremiseNodes(premiseNodes, context) {
1514
+ var premises = premiseNodes.map(function(premiseNode) {
1515
+ var premise = premiseFromPremiseNode(premiseNode, context);
1516
+ return premise;
1517
+ });
1518
+ return premises;
1519
+ }
1051
1520
  function statementsFromStatementNodes(statementNodes, context) {
1052
1521
  var statements = statementNodes.map(function(statementNode) {
1053
1522
  var statement = statementFromStatementNode(statementNode, context);
@@ -1066,6 +1535,20 @@ function superTypesFromSuperTypeNodes(superTypeNodes, context) {
1066
1535
  }
1067
1536
  return superTypes;
1068
1537
  }
1538
+ function parametersFromParameterNodes(parameterNodes, context) {
1539
+ var parameters = parameterNodes.map(function(parameterNode) {
1540
+ var parameter = parameterFromParameterNode(parameterNode, context);
1541
+ return parameter;
1542
+ });
1543
+ return parameters;
1544
+ }
1545
+ function hypothesesFromHypothesisNodes(hypothesisNodes, context) {
1546
+ var hypotheses = hypothesisNodes.map(function(hypotheseNode) {
1547
+ var hypothesis = hypothesisFromHypothesisNode(hypotheseNode, context);
1548
+ return hypothesis;
1549
+ });
1550
+ return hypotheses;
1551
+ }
1069
1552
  function assumptionsFromAssumptionNodes(assumptionNodes, context) {
1070
1553
  var assumptions = assumptionNodes.map(function(assumptionNode) {
1071
1554
  var assumption = assumptionFromAssumptionNode(assumptionNode, context);
@@ -1087,6 +1570,14 @@ function propertiesFromPropertyDeclarationNodes(propertyDeclarationNodes, contex
1087
1570
  });
1088
1571
  return properties;
1089
1572
  }
1573
+ function labelsFromRuleNode(ruleNode, context) {
1574
+ var labelNodes = ruleNode.getLabelNodes(), labels = labelsFromLabelNodes(labelNodes, context);
1575
+ return labels;
1576
+ }
1577
+ function premisesFromRuleNode(ruleNode, context) {
1578
+ var premiseNodes = ruleNode.getPremiseNodes(), premises = premisesFromPremiseNodes(premiseNodes, context);
1579
+ return premises;
1580
+ }
1090
1581
  function termsFromSignatureNode(signatureNode, context) {
1091
1582
  var termNodes = signatureNode.getAssumptionNodes(), terms = termsFromTermNodes(termNodes, context);
1092
1583
  return terms;
@@ -1095,10 +1586,18 @@ function assumptionsFromFrameNode(frameNode, context) {
1095
1586
  var assumptionNodes = frameNode.getAssumptionNodes(), assumptions = assumptionsFromAssumptionNodes(assumptionNodes, context);
1096
1587
  return assumptions;
1097
1588
  }
1589
+ function termsFromEquivalenceNode(equivalenceNode, context) {
1590
+ var termNodes = equivalenceNode.getTermNodes(), terms = termsFromTermNodes(termNodes, context);
1591
+ return terms;
1592
+ }
1098
1593
  function suppositionsFromSubproofNode(subproofNode, context) {
1099
1594
  var suppositionNodes = subproofNode.getSuppositionNodes(), suppositions = suppositionsFromSuppositionNodes(suppositionNodes, context);
1100
1595
  return suppositions;
1101
1596
  }
1597
+ function parametersFromProcedureCallNode(procedureCallNode, context) {
1598
+ var parameterNodes = procedureCallNode.getParameterNodes(), parameters = parametersFromParameterNodes(parameterNodes, context);
1599
+ return parameters;
1600
+ }
1102
1601
  function statementsFromSubproofAssertionNode(subproofAssertionNode, context) {
1103
1602
  var statementNodes = subproofAssertionNode.getStatementNodes(), statements = statementsFromStatementNodes(statementNodes, context);
1104
1603
  return statements;
@@ -1111,10 +1610,18 @@ function superTypesFromComplexTypeDeclarationNode(complexTypeDeclarationNode, co
1111
1610
  var superTypeNodes = complexTypeDeclarationNode.getSuperTypeNodes(), superTypes = superTypesFromSuperTypeNodes(superTypeNodes, context);
1112
1611
  return superTypes;
1113
1612
  }
1613
+ function suppositionsFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context) {
1614
+ var suppositionNodes = metaLemmaMetathoremNode.getSuppositionNodes(), suppositions = suppositionsFromSuppositionNodes(suppositionNodes, context);
1615
+ return suppositions;
1616
+ }
1114
1617
  function labelsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context) {
1115
1618
  var labelNodes = axiomLemmaTheoremConjectureNode.getLabelNodes(), labels = labelsFromLabelNodes(labelNodes, context);
1116
1619
  return labels;
1117
1620
  }
1621
+ function suppositionsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context) {
1622
+ var suppositionNodes = axiomLemmaTheoremConjectureNode.getSuppositionNodes(), suppositions = suppositionsFromSuppositionNodes(suppositionNodes, context);
1623
+ return suppositions;
1624
+ }
1118
1625
  function _typeFromMetavariableDeclarationNode(metavariableDeclarationNode, context) {
1119
1626
  var type = null;
1120
1627
  var typeNode = metavariableDeclarationNode.getTypeNode();
@@ -1125,4 +1632,4 @@ function _typeFromMetavariableDeclarationNode(metavariableDeclarationNode, conte
1125
1632
  return type;
1126
1633
  }
1127
1634
 
1128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZSB9IGZyb20gXCIuLi9lbGVtZW50L3R5cGVcIjtcbmltcG9ydCB7IHN1YnByb29mU3RyaW5nRnJvbVN1YnByb29mTm9kZSwgc3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgbm9kZSBmcm9tIFwib2NjYW0tcGFyc2Vycy9saWIvbWl4aW5zL25vZGVcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGU7XG5cbiAgaWYgKHR5cGVOb2RlID09PSBudWxsKSB7XG4gICAgdHlwZSA9IGJhc2VUeXBlO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgdHlwZU5hbWUgPSB0eXBlTm9kZS5nZXRUeXBlTmFtZSgpLFxuICAgICAgICAgIHR5cGVQcmVmaXhOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZVByZWZpeE5hbWUoKSxcbiAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKSxcbiAgICAgICAgICBzdHJpbmcgPSBub21pbmFsVHlwZU5hbWUsICAvLy9cbiAgICAgICAgICBub2RlID0gdHlwZU5vZGUsICAvLy9cbiAgICAgICAgICBuYW1lID0gdHlwZU5hbWUsICAvLy9cbiAgICAgICAgICBwcmVmaXhOYW1lID0gdHlwZVByZWZpeE5hbWUsICAvLy9cbiAgICAgICAgICBzdXBlclR5cGVzID0gbnVsbCxcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gbnVsbCxcbiAgICAgICAgICBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgICB0eXBlID0gbmV3IFR5cGUoc3RyaW5nLCBub2RlLCBuYW1lLCBwcmVmaXhOYW1lLCBzdXBlclR5cGVzLCBwcm9wZXJ0aWVzLCBwcm92aXNpb25hbCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0eXBlID0gbnVsbCxcbiAgICAgICAgdGVybSA9IG5ldyBUZXJtKHN0cmluZywgbm9kZSwgdHlwZSk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RlcCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGVwTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGVwID0gbmV3IFN0ZXAoY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uKTtcblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbW1hcm9tQXhpb21Ob2RlKGxlbW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExlbW1hIH0gPSBlbGVtZW50cyxcbiAgICAgICAgYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSA9IGxlbW1hTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gW10sXG4gICAgICAgIG5vZGUgPSBsZW1tYU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBzdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBsZW1tYSA9IG5ldyBMZW1tYShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBsZW1tYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBGcmFtZSB9ID0gZWxlbWVudHMsXG4gICAgbm9kZSA9IGZyYW1lTm9kZSwgLy8vXG4gICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSxcbiAgICBmcmFtZSA9IG5ldyBGcmFtZShzdHJpbmcsIG5vZGUsIGFzc3VtcHRpb25zKTtcblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvb2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvb2ZOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgZGVyaXZhdGlvbiA9IGRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb29mID0gbmV3IFByb29mKHN0cmluZywgbm9kZSwgZGVyaXZhdGlvbik7XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEF4aW9tIH0gPSBlbGVtZW50cyxcbiAgICAgICAgYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSA9IGF4aW9tTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IG51bGwsXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gW10sXG4gICAgICAgIG5vZGUgPSBheGlvbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBzdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBheGlvbSA9IG5ldyBBeGlvbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBheGlvbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoZW9yZW1yb21BeGlvbU5vZGUodGhlb3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUaGVvcmVtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSA9IHRoZW9yZW1Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBbXSxcbiAgICAgICAgbm9kZSA9IHRoZW9yZW1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gc3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgdGhlb3JlbSA9IG5ldyBUaGVvcmVtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlcm9tQXhpb21Ob2RlKGNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uamVjdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUgPSBjb25qZWN0dXJlTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gW10sXG4gICAgICAgIG5vZGUgPSBjb25qZWN0dXJlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIGNvbmplY3R1cmUgPSBuZXcgQ29uamVjdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBjb25qZWN0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVxdWFsaXR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVxdWFsaXR5Tm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGVmdFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICByaWdodFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICAgbGVmdFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmlnaHRUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGVxdWFsaXR5ID0gbmV3IEVxdWFsaXR5KHN0cmluZywgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgcmV0dXJuIGVxdWFsaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVGcm9tTWV0YVR5cGVOb2RlKG1ldGFUeXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGFUeXBlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGFUeXBlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbWV0YVR5cGVOYW1lID0gbWV0YVR5cGVOb2RlLmdldE1ldGFUeXBlTmFtZSgpLFxuICAgICAgICBuYW1lID0gbWV0YVR5cGVOYW1lLCAgLy8vXG4gICAgICAgIG1ldGFUeXBlID0gbmV3IE1ldGFUeXBlKHN0cmluZywgbm9kZSwgbmFtZSk7XG5cbiAgcmV0dXJuIG1ldGFUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb3BlcnR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb3BlcnR5Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5vZGUuZ2V0UHJvcGVydHlOYW1lKCksXG4gICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBwcm9wZXJ0eU5hbWUsICAvLy9cbiAgICAgICAgcHJvcGVydHkgPSBuZXcgUHJvcGVydHkoc3RyaW5nLCBub2RlLCBuYW1lLCBub21pbmFsVHlwZU5hbWUpO1xuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHR5cGUgPSBudWxsLFxuICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21WYXJpYWxiZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlSZWxhdGlvbnMgPSBbXSxcbiAgICAgICAgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoc3RyaW5nLCBub2RlLCB0eXBlLCBpZGVudGlmaWVyLCBwcm9wZXJ0eVJlbGF0aW9ucyk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YlByb29mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YnByb29mTm9kZSwgLy8vXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3ViRGVyaXZhdGlvbiA9IHN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnByb29mU3RyaW5nID0gc3VicHJvb2ZTdHJpbmdGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0cmluZyA9IHN1YnByb29mU3RyaW5nLCAgLy8vXG4gICAgICAgIHN1YnByb29mID0gbmV3IFN1YlByb29mKHN0cmluZywgbm9kZSwgc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uKTtcblxuICByZXR1cm4gc3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGVxdWFsaXR5ID0gbnVsbDtcblxuICBjb25zdCBlcXVhbGl0eU5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEVxdWFsaXR5Tm9kZSgpO1xuXG4gIGlmIChlcXVhbGl0eU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBub2RlID0gZXF1YWxpdHlOb2RlLCAgLy8vXG4gICAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICByaWdodFRlcm0gPSByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCk7XG5cbiAgICBlcXVhbGl0eSA9IG5ldyBFcXVhbGl0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuICB9XG5cbiAgcmV0dXJuIGVxdWFsaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZHVjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWR1Y3Rpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBuZXcgRGVkdWN0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN0YXRlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGF0ZW1lbnROb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IG5ldyBTdGF0ZW1lbnQoc3RyaW5nLCBub2RlKTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzaWduYXR1cmVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShzdHJpbmcsIG5vZGUsIHRlcm1zKTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSBuZXcgUmVmZXJlbmNlKHN0cmluZywgbm9kZSwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2x1c2lub0Zyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW5vTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmNsdXNpb24gfSA9IGVsZW1lbnRzLFxuICAgIG5vZGUgPSBjb25jbHVzaW5vTm9kZSwgLy8vXG4gICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpbm9Ob2RlLCBjb250ZXh0KSxcbiAgICBjb25jbHVzaW5vID0gbmV3IENvbmNsdXNpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb25jbHVzaW5vO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEFzc3VtcHRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYXNzdW1wdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXNzdW1wdGlvbiA9IG5ldyBBc3N1bXB0aW9uKHN0cmluZywgbm9kZSwgc3RhdGVtZW50LCByZWZlcmVuY2UpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlcml2YXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVyaXZhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZXJpdmF0aW9uID0gbmV3IERlcml2YXRpb24oc3RyaW5nLCBub2RlLCBzdGVwc09yU3VicHJvb2ZzKTtcblxuICByZXR1cm4gZGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlUHJlZml4IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVQcmVmaXhOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlUHJlZml4ID0gbmV3IFR5cGVQcmVmaXgoc3RyaW5nLCBub2RlLCB0ZXJtLCB0eXBlKTtcblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbWV0YXZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICBuYW1lID0gbWV0YXZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICB0eXBlID0gbnVsbCxcbiAgICAgICAgbWV0YVR5cGUgPSBudWxsLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBuZXcgTWV0YXZhcmlhYmxlKHN0cmluZywgbm9kZSwgbmFtZSwgdHlwZSwgbWV0YVR5cGUpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3ViRGVyaXZhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJEZXJpdmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3ViRGVyaXZhdGlvbiA9IG5ldyBTdWJEZXJpdmF0aW9uKHN0cmluZywgbm9kZSwgc3RlcHNPclN1YnByb29mcyk7XG5cbiAgcmV0dXJuIHN1YkRlcml2YXRpb247XG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBc3NlcnRpb25Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlQXNzZXJ0aW9uID0gbmV3IFR5cGVBc3NlcnRpb24oc3RyaW5nLCBub2RlLCB0ZXJtLCB0eXBlKTtcblxuICByZXR1cm4gdHlwZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXAgPSBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGVwT3JTdWJwcm9vZiA9IChzdGVwIHx8IHN1YnByb29mKTtcblxuICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhlZEZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJlZml4ZWQgPSBzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLmlzUHJlZml4ZWQoKTtcblxuICByZXR1cm4gcHJlZml4ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhlZEZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcmVmaXhlZCA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmlzUHJlZml4ZWQoKTtcblxuICByZXR1cm4gcHJlZml4ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRGVmaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbmVnYXRlZCA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uID0gbmV3IERlZmluZWRBc3NlcnRpb24oc3RyaW5nLCBub2RlLCB0ZXJtLCBmcmFtZSwgbmVnYXRlZCk7XG5cbiAgcmV0dXJuIGRlZmluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHlSZWxhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlSZWxhdGlvbiA9IG5ldyBQcm9wZXJ0eVJlbGF0aW9uKHN0cmluZywgbm9kZSwgcHJvcGVydHksIHRlcm0pO1xuXG4gIHJldHVybiBwcm9wZXJ0eVJlbGF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm1TdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBuZXcgVGVybVN1YnN0aXR1dGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHRlcm0sIHZhcmlhYmxlKTtcblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBGcmFtZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBuZXcgRnJhbWVTdWJzdGl0dXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBmcmFtZSwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gZnJhbWVTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHlBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlSZWxhdGlvbiA9IHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gbmV3IFByb3BlcnR5QXNzZXJ0aW9uKHN0cmluZywgbm9kZSwgdGVybSwgcHJvcGVydHlSZWxhdGlvbik7XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YnByb29mQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSBuZXcgU3VicHJvb2ZBc3NlcnRpb24oc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnRzKTtcblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29udGFpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG5lZ2F0ZWQgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb250YWluZWRBc3NlcnRpb24gPSBuZXcgQ29udGFpbmVkQXNzZXJ0aW9uKHN0cmluZywgbm9kZSwgdGVybSwgZnJhbWUsIG5lZ2F0ZWQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTYXRpc2ZpZXNBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb24gPSBuZXcgU2F0aXNmaWVzQXNzZXJ0aW9uKHN0cmluZywgbm9kZSwgc2lnbmF0dXJlLCByZWZlcmVuY2UpO1xuXG4gIHJldHVybiBzYXRpc2ZpZXNBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdmFyaWFsYmUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB2YXJpYWxiZSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4RGVjbGFyYXRpb25Gcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZVByZWZpeERlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSwgIC8vL1xuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlUHJlZml4RGVjbGFyYXRpb24gPSBuZXcgVHlwZVByZWZpeERlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdHlwZVByZWZpeCk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXhEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21iaW5hdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBjb21iaW5hdG9yID0gY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb21iaW5hdG9yRGVjbGFyYXRpb24gPSBuZXcgQ29tYmluYXRvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgY29tYmluYXRvcik7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsZVR5cGVEZWNsYXJhdGlvbkZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaW1wbGVUeXBlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcmVmaXhlZCA9IHByZWZpeGVkRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpbXBsZVR5cGVEZWNsYXJhdGlvbiA9IG5ldyBTaW1wbGVUeXBlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0eXBlLCBwcmVmaXhlZCk7XG5cbiAgcmV0dXJuIHNpbXBsZVR5cGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudFN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIHN1YnN0aXR1dGlvbiwgY29udGV4dCkge1xuICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29udGV4dCA9IHN1YnN0aXR1dGlvbjsgLy8vXG5cbiAgICBzdWJzdGl0dXRpb24gPSBudWxsO1xuICB9XG5cbiAgY29uc3QgeyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgcmVzb2x2ZWQgPSB0cnVlLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvbiA9IG5ldyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCByZXNvbHZlZCwgc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbik7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2VTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2VTdWJzdGl0dXRpb24gPSBuZXcgUmVmZXJlbmNlU3Vic3RpdHV0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgcmVmZXJlbmNlLCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiByZWZlcmVuY2VTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgY29uc3RydWN0b3IpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGxleFR5cGVEZWNsYXJhdGlvbkZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbXBsZXhUeXBlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJlZml4ZWQgPSBwcmVmaXhlZEZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbXBsZXhUeXBlRGVjbGFyYXRpb24gPSBuZXcgQ29tcGxleFR5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHR5cGUsIHByZWZpeGVkKTtcblxuICByZXR1cm4gY29tcGxleFR5cGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG1ldGF2YXJpYWxiZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbWV0YXZhcmlhbGJlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0ZXBOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmVmZXJlbmNlID0gbnVsbDtcblxuICBjb25zdCByZWZlcmVuY2VOb2RlID0gc3RlcE5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpO1xuXG4gIGlmIChyZWZlcmVuY2VOb2RlICE9PSBudWxsKSB7XG4gICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBkZXJpdmF0aW9uID0gbnVsbDtcblxuICBjb25zdCBkZXJpdmF0aW9uTm9kZSA9IHByb29mTm9kZS5nZXREZXJpdmF0aW9uTm9kZSgpO1xuXG4gIGlmIChkZXJpdmF0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGRlcml2YXRpb24gPSBkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBkZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZSA9IG51bGw7XG5cbiAgY29uc3QgdHlwZU5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZS5nZXRUeXBlTm9kZSgpO1xuXG4gIGlmICh0eXBlTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcEZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGVwID0gbnVsbDtcblxuICBjb25zdCBzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSA9IHN0ZXBPclN1YnByb29mTm9kZS5pc1N0ZXBOb2RlKCk7XG5cbiAgaWYgKHN0ZXBPclN1YnByb29mTm9kZVN0ZXBOb2RlKSB7XG4gICAgY29uc3Qgc3RlcE5vZGUgPSBzdGVwT3JTdWJwcm9vZk5vZGU7ICAvLy9cblxuICAgIHN0ZXAgPSBzdGVwRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGVwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21WYXJpYWxiZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgaWRlbnRpZmllciA9IHZhcmlhYmxlSWRlbnRpZmllcjsgIC8vL1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gZGVkdWN0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lub05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbmNsdXNpbm9Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZU5vZGUgIT09IG51bGwpIHtcbiAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgYXNzdW1wdGlvbiA9IG51bGw7XG5cbiAgY29uc3QgYXNzdW1wdGlvbk5vZGUgPSBqdWRnZW1lbnROb2RlLmdldEFzc3VtcHRpb25Ob2RlKCk7XG5cbiAgaWYgKGFzc3VtcHRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IHByb3BlcnR5UmVsYXRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1YkRlcnZpYXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHN1YkRlcml2YXRpb25Ob2RlID0gc3VicHJvb2ZOb2RlLmdldFN1YkRlcml2YXRpb25Ob2RlKCk7XG5cbiAgaWYgKHN1YkRlcml2YXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc3ViRGVydmlhdGlvbiA9IHN1YkRlcml2YXRpb25Gcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN1YkRlcnZpYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQXNzZXJ0aW5Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCB0eXBlQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0VHlwZUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAodHlwZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHJlZmVyZW5jZU5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyYWlibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVOb2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNhdGlzZmllc0Fzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSA9IHN0ZXBOb2RlLmdldFNhdGlzZmllZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdWJwcm9vZk9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSA9IHN1YnByb29mT3JTdWJwcm9vZk5vZGUuaXNTdWJwcm9vZk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSkge1xuICAgIGNvbnN0IHN1YnByb29mTm9kZSA9IHN1YnByb29mT3JTdWJwcm9vZk5vZGU7ICAvLy9cblxuICAgIHN1YnByb29mID0gc3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldEZyYW1lTm9kZSgpO1xuXG4gIGlmIChmcmFtZU5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpXG4gIH1cblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHkgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5Tm9kZSA9IHByb3BlcnR5UmVsYXRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHByb3BlcnR5Tm9kZSAhPT0gbnVsbCkge1xuICAgIHByb3BlcnR5ID0gcHJvcGVydHlGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvcGVydHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBkZWZpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoZGVmaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlTm9kZSA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKTtcblxuICBpZiAodHlwZU5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1TdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICBjb25zdCB0ZXJtU3Vic3RpdHV0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0VGVybVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICBpZiAodGVybVN1YnN0aXR1dGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtU3Vic3RpdHV0aW9uID0gdGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWVTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lU3Vic3RpdHV0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RnJhbWVTdWJzdGl0dXRpb25Ob2RlKCk7XG5cbiAgaWYgKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZnJhbWVTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBkZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwc09yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwc09yU3VicHJvb2ZzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9wZXJ0eUFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRQcm9wZXJ0eUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAocHJvcGVydHlBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgcHJvcGVydHlBc3NlcnRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0eUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VicHJvb2ZBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHN1YnByb29mQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHN1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlTm9kZSA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCk7XG5cbiAgaWYgKHR5cGVOb2RlICE9PSBudWxsKSB7XG4gICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7MFxuICBsZXQgY29udGFpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRDb250YWluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNhdGlzZmllc0Fzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U2F0aXNmaWVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2F0aXNmaWVzQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eU5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZS5nZXRQcm9wZXJ0eU5vZGUoKTtcblxuICBpZiAocHJvcGVydHlOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNpZ25hdHVyZSA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlTm9kZSA9IHNhdGlzZmllc0Fzc2VydGlvbk5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpO1xuXG4gIGlmIChzaWduYXR1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmVmZXJlbmNlID0gbnVsbDtcblxuICBjb25zdCByZWZlcmVuY2VOb2RlID0gc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZU5vZGUgIT09IG51bGwpIHtcbiAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwT3JTdWJwcm9vZk5vZGVzID0gc3ViRGVyaXZhdGlvbk5vZGUuZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcygpLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcE9yU3VicHJvb2ZOb2Rlcy5tYXAoKHN0ZXBPclN1YnByb29mTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0ZXBPclN1YnByb29mID0gc3RlcHNPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RlcHNPclN1YnByb29mcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLmdldFJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlUHJlZml4ID0gbnVsbDtcblxuICBjb25zdCB0eXBlUHJlZml4Tm9kZSA9IHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZVByZWZpeE5vZGUoKTtcblxuICBpZiAodHlwZVByZWZpeE5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZShjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb21iaW5hdG9yID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IENvbWJpbmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICBjb21iaW5hdG9yID0gbmV3IENvbWJpbmF0b3Ioc3RhdGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBjb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YVR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGFUeXBlTm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRNZXRhVHlwZU5vZGUoKTtcblxuICBpZiAobWV0YVR5cGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YVR5cGUgPSBtZXRhVHlwZUZyb21NZXRhVHlwZU5vZGUobWV0YVR5cGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHlSZWxhdGlvbiA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlSZWxhdGlvbk5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUuZ2V0UHJvcGVydHlSZWxhdGlvbk5vZGUoKTtcblxuICBpZiAocHJvcGVydHlSZWxhdGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eVJlbGF0aW9uID0gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvcGVydHlSZWxhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb25zdHJ1Y3RvciA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBDb25zdHJ1Y3RvciB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gICAgY29uc3RydWN0b3IgPSBuZXcgQ29uc3RydWN0b3IodGVybSk7XG4gIH1cblxuICByZXR1cm4gY29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9vZiA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2ZOb2RlID0gYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBsZXQgZGVkdWN0aW9uID0gbnVsbDtcblxuICBjb25zdCBkZWR1Y3Rpb25Ob2RlID0gYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZS5nZXREZWR1Y3Rpb25Ob2RlKCk7XG5cbiAgaWYgKGRlZHVjdGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmUgPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZU5vZGUgPSBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLmdldFNpZ25hdHVyZU5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1zID0gdGVybU5vZGVzLm1hcCgodGVybU5vZGUpID0+IHtcbiAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBsYWJlbHMgPSBsYWJlbE5vZGVzLm1hcCgobGFiZWxOb2RlKSA9PiB7XG4gICAgY29uc3QgbGFiZWwgPSBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBsYWJlbDtcbiAgfSk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMoc3RhdGVtZW50Tm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50cyA9IHN0YXRlbWVudE5vZGVzLm1hcCgoc3RhdGVtZW50Tm9kZSkgPT4ge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbVN1cGVyVHlwZU5vZGVzKHN1cGVyVHlwZU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cGVyVHlwZXMgPSBzdXBlclR5cGVOb2Rlcy5tYXAoKHN1cGVyVHlwZU5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB0eXBlTm9kZSA9IHN1cGVyVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgICBzdXBlclR5cGUgPSB0eXBlOyAgLy8vXG5cbiAgICAgICAgICByZXR1cm4gc3VwZXJUeXBlO1xuICAgICAgICB9KSxcbiAgICAgICAgc3VwZXJUeXBlc0xlbmd0aCA9IHN1cGVyVHlwZXMubGVuZ3RoO1xuXG4gIGlmIChzdXBlclR5cGVzTGVuZ3RoID09PSAwKSB7XG4gICAgY29uc3Qgc3VwZXJUeXBlID0gYmFzZVR5cGU7IC8vL1xuXG4gICAgc3VwZXJUeXBlcy5wdXNoKHN1cGVyVHlwZSk7XG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2Rlcyhhc3N1bXB0aW9uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uTm9kZXMubWFwKChhc3N1bXB0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uTm9kZXMubWFwKChzdXBwb3NpdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbiA9IHN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uO1xuICB9KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydGllc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMocHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMubWFwKChwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9KTtcblxuICByZXR1cm4gcHJvcGVydGllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZXMgPSBzaWduYXR1cmVOb2RlLmdldEFzc3VtcHRpb25Ob2RlcygpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbk5vZGVzID0gZnJhbWVOb2RlLmdldEFzc3VtcHRpb25Ob2RlcygpLFxuICAgICAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2Rlcyhhc3N1bXB0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSBzdWJwcm9vZk5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGVzID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGVzKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzKHN0YXRlbWVudE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0UHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKCksXG4gICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2Rlcyhwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBlclR5cGVOb2RlcyA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFN1cGVyVHlwZU5vZGVzKCksXG4gICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbVN1cGVyVHlwZU5vZGVzKHN1cGVyVHlwZU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxOb2RlcyA9IGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5cblxuXG5leHBvcnQgZnVuY3Rpb24gX3R5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZSA9IG51bGw7XG5cbiAgY29uc3QgdHlwZU5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKTtcblxuICBpZiAodHlwZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgIHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuIl0sIm5hbWVzIjpbIl90eXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsImFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uRnJvbUp1ZGdlbWVudE5vZGUiLCJhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMiLCJhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUiLCJheGlvbUZyb21BeGlvbU5vZGUiLCJjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsImNvbWJpbmF0b3JGcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25Gcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJjb25jbHVzaW5vRnJvbUNvbmNsdXNpb25Ob2RlIiwiY29uamVjdHVyZXJvbUF4aW9tTm9kZSIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJkZWR1Y3Rpb25Gcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSIsImRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlIiwiZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUiLCJkZXJpdmF0aW9uRnJvbVByb29mTm9kZSIsImVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUiLCJmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21GcmFtZU5vZGUiLCJmcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJmcmFtZVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiaWRlbnRpZmllckZyb21WYXJpYWxiZU5vZGUiLCJsYWJlbHNGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSIsImxhYmVsc0Zyb21MYWJlbE5vZGVzIiwibGVtbWFyb21BeGlvbU5vZGUiLCJtZXRhVHlwZUZyb21NZXRhVHlwZU5vZGUiLCJtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwicHJlZml4ZWRGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcmVmaXhlZEZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwicHJvb2ZGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSIsInByb29mRnJvbVByb29mTm9kZSIsInByb3BlcnRpZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0aWVzRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJwcm9wZXJ0eUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbVN0ZXBOb2RlIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlIiwic2lnbmF0dXJlRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUiLCJzaWduYXR1cmVGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInN0YXRlbWVudEZyb21EZWR1Y3Rpb25Ob2RlIiwic3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudEZyb21TdGVwTm9kZSIsInN0YXRlbWVudFN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3RlcEZyb21TdGVwTm9kZSIsInN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcHNPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUiLCJzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN1YnByb29mRnJvbVN1YnByb29mTm9kZSIsInN1cGVyVHlwZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJzdXBlclR5cGVzRnJvbVN1cGVyVHlwZU5vZGVzIiwic3VwcG9zaXRpb25zRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlIiwic3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMiLCJ0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwidGVybUZyb21UZXJtTm9kZSIsInRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlIiwidGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1zRnJvbVNpZ25hdHVyZU5vZGUiLCJ0ZXJtc0Zyb21UZXJtTm9kZXMiLCJ0aGVvcmVtcm9tQXhpb21Ob2RlIiwidHlwZUFzc2VydGluRnJvbVN0YXRlbWVudE5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRnJvbVR5cGVOb2RlIiwidHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUiLCJ0eXBlTm9kZSIsImNvbnRleHQiLCJ0eXBlIiwiYmFzZVR5cGUiLCJUeXBlIiwiZWxlbWVudHMiLCJ0eXBlTmFtZSIsImdldFR5cGVOYW1lIiwidHlwZVByZWZpeE5hbWUiLCJnZXRUeXBlUHJlZml4TmFtZSIsIm5vbWluYWxUeXBlTmFtZSIsImdldE5vbWluYWxUeXBlTmFtZSIsInN0cmluZyIsIm5vZGUiLCJuYW1lIiwicHJlZml4TmFtZSIsInN1cGVyVHlwZXMiLCJwcm9wZXJ0aWVzIiwicHJvdmlzaW9uYWwiLCJ0ZXJtTm9kZSIsIlRlcm0iLCJub2RlQXNTdHJpbmciLCJ0ZXJtIiwic3RlcE5vZGUiLCJTdGVwIiwic3RhdGVtZW50IiwicmVmZXJlbmNlIiwic2F0aXNmaWVzQXNzZXJ0aW9uIiwic3RlcCIsImxlbW1hTm9kZSIsIkxlbW1hIiwiYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSIsInByb29mIiwibGFiZWxzIiwiZGVkdWN0aW9uIiwic3VwcG9zaXRpb25zIiwic2lnbmF0dXJlIiwiaHlwb3RoZXNlcyIsInN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24iLCJsZW1tYSIsImZyYW1lTm9kZSIsIkZyYW1lIiwiYXNzdW1wdGlvbnMiLCJmcmFtZSIsInByb29mTm9kZSIsIlByb29mIiwiZGVyaXZhdGlvbiIsImF4aW9tTm9kZSIsIkF4aW9tIiwiYXhpb20iLCJ0aGVvcmVtTm9kZSIsIlRoZW9yZW0iLCJ0aGVvcmVtIiwiY29uamVjdHVyZU5vZGUiLCJDb25qZWN0dXJlIiwiY29uamVjdHVyZSIsImVxdWFsaXR5Tm9kZSIsIkVxdWFsaXR5IiwibGVmdFRlcm1Ob2RlIiwiZ2V0TGVmdFRlcm1Ob2RlIiwicmlnaHRUZXJtTm9kZSIsImdldFJpZ2h0VGVybU5vZGUiLCJsZWZ0VGVybSIsInJpZ2h0VGVybSIsImVxdWFsaXR5IiwibWV0YVR5cGVOb2RlIiwiTWV0YVR5cGUiLCJtZXRhVHlwZU5hbWUiLCJnZXRNZXRhVHlwZU5hbWUiLCJtZXRhVHlwZSIsInByb3BlcnR5Tm9kZSIsIlByb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiZ2V0UHJvcGVydHlOYW1lIiwicHJvcGVydHkiLCJ2YXJpYWJsZU5vZGUiLCJWYXJpYWJsZSIsImlkZW50aWZpZXIiLCJwcm9wZXJ0eVJlbGF0aW9ucyIsInZhcmlhYmxlIiwic3VicHJvb2ZOb2RlIiwiU3ViUHJvb2YiLCJzdWJEZXJpdmF0aW9uIiwic3VicHJvb2ZTdHJpbmciLCJzdWJwcm9vZlN0cmluZ0Zyb21TdWJwcm9vZk5vZGUiLCJzdWJwcm9vZiIsInN0YXRlbWVudE5vZGUiLCJnZXRFcXVhbGl0eU5vZGUiLCJsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJyaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwiZGVkdWN0aW9uTm9kZSIsIkRlZHVjdGlvbiIsIlN0YXRlbWVudCIsInNpZ25hdHVyZU5vZGUiLCJTaWduYXR1cmUiLCJ0ZXJtcyIsInJlZmVyZW5jZU5vZGUiLCJSZWZlcmVuY2UiLCJtZXRhdmFyaWFibGUiLCJjb25jbHVzaW5vTm9kZSIsIkNvbmNsdXNpb24iLCJjb25jbHVzaW5vIiwiYXNzdW1wdGlvbk5vZGUiLCJBc3N1bXB0aW9uIiwiYXNzdW1wdGlvbiIsImRlcml2YXRpb25Ob2RlIiwiRGVyaXZhdGlvbiIsInN0ZXBzT3JTdWJwcm9vZnMiLCJ0eXBlUHJlZml4Tm9kZSIsIlR5cGVQcmVmaXgiLCJ0ZXJtRnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZUZyb21UeXBlUHJlZml4Tm9kZSIsInR5cGVQcmVmaXgiLCJtZXRhdmFyaWFibGVOb2RlIiwiTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJzdWJEZXJpdmF0aW9uTm9kZSIsIlN1YkRlcml2YXRpb24iLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsIlR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uIiwic3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcE9yU3VicHJvb2YiLCJzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwicHJlZml4ZWQiLCJpc1ByZWZpeGVkIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJkZWZpbmVkQXNzZXJ0aW9uTm9kZSIsIkRlZmluZWRBc3NlcnRpb24iLCJuZWdhdGVkIiwiaXNOZWdhdGVkIiwiZGVmaW5lZEFzc2VydGlvbiIsInByb3BlcnR5UmVsYXRpb25Ob2RlIiwiUHJvcGVydHlSZWxhdGlvbiIsInByb3BlcnR5UmVsYXRpb24iLCJ0ZXJtU3Vic3RpdHV0aW9uTm9kZSIsIlRlcm1TdWJzdGl0dXRpb24iLCJ0ZXJtU3Vic3RpdHV0aW9uIiwiZnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiRnJhbWVTdWJzdGl0dXRpb24iLCJmcmFtZVN1YnN0aXR1dGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsIlByb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudHMiLCJzdWJwcm9vZkFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJDb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwiU2F0aXNmaWVzQXNzZXJ0aW9uIiwidmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJWYXJpYWJsZURlY2xhcmF0aW9uIiwidmFyaWFsYmUiLCJ2YXJpYWJsZURlY2xhcmF0aW9uIiwidHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSIsIlR5cGVQcmVmaXhEZWNsYXJhdGlvbiIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbiIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJDb21iaW5hdG9yRGVjbGFyYXRpb24iLCJjb21iaW5hdG9yIiwiY29tYmluYXRvckRlY2xhcmF0aW9uIiwiU2ltcGxlVHlwZURlY2xhcmF0aW9uIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbiIsInVuZGVmaW5lZCIsIlN0YXRlbWVudFN1YnN0aXR1dGlvbiIsInJlc29sdmVkIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsIlJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29uc3RydWN0b3JEZWNsYXJhdGlvbiIsImNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbiIsIkNvbXBsZXhUeXBlRGVjbGFyYXRpb24iLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwiTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24iLCJtZXRhdmFyaWFsYmUiLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbiIsImdldFN0YXRlbWVudE5vZGUiLCJnZXRSZWZlcmVuY2VOb2RlIiwiZ2V0RGVyaXZhdGlvbk5vZGUiLCJnZXRUZXJtTm9kZSIsImdldFR5cGVOb2RlIiwic3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUiLCJpc1N0ZXBOb2RlIiwidmFyaWFibGVJZGVudGlmaWVyIiwiZ2V0VmFyaWFibGVJZGVudGlmaWVyIiwianVkZ2VtZW50Tm9kZSIsImdldEFzc3VtcHRpb25Ob2RlIiwic3ViRGVydmlhdGlvbiIsImdldFN1YkRlcml2YXRpb25Ob2RlIiwiZ2V0VHlwZUFzc2VydGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmFpYmxlTm9kZSIsImdldEZyYW1lTm9kZSIsImdldFNhdGlzZmllZEFzc2VydGlvbk5vZGUiLCJzdWJwcm9vZk9yU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSIsImlzU3VicHJvb2ZOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImdldERlZmluZWRBc3NlcnRpb25Ob2RlIiwiZ2V0VGVybVN1YnN0aXR1dGlvbk5vZGUiLCJnZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJzdGVwT3JTdWJwcm9vZk5vZGVzIiwiZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcyIsIm1hcCIsImdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsImdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldENvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsImdldFByb3BlcnR5Tm9kZSIsImdldFNpZ25hdHVyZU5vZGUiLCJnZXRWYXJpYWJsZU5vZGUiLCJnZXRUeXBlUHJlZml4Tm9kZSIsIkNvbWJpbmF0b3IiLCJnZXRNZXRhVHlwZU5vZGUiLCJnZXRQcm9wZXJ0eVJlbGF0aW9uTm9kZSIsIkNvbnN0cnVjdG9yIiwiZ2V0UHJvb2ZOb2RlIiwiZ2V0RGVkdWN0aW9uTm9kZSIsInN1cHBvc2l0aW9uTm9kZXMiLCJnZXRTdXBwb3NpdGlvbk5vZGVzIiwidGVybU5vZGVzIiwibGFiZWxOb2RlcyIsImxhYmVsTm9kZSIsImxhYmVsIiwibGFiZWxGcm9tTGFiZWxOb2RlIiwic3RhdGVtZW50Tm9kZXMiLCJzdXBlclR5cGVOb2RlcyIsInN1cGVyVHlwZU5vZGUiLCJzdXBlclR5cGUiLCJzdXBlclR5cGVzTGVuZ3RoIiwibGVuZ3RoIiwicHVzaCIsImFzc3VtcHRpb25Ob2RlcyIsInN1cHBvc2l0aW9uTm9kZSIsInN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzIiwiZ2V0QXNzdW1wdGlvbk5vZGVzIiwiZ2V0U3RhdGVtZW50Tm9kZXMiLCJnZXRQcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMiLCJnZXRTdXBlclR5cGVOb2RlcyIsImdldExhYmVsTm9kZXMiLCJmaW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUF1MUNnQkE7ZUFBQUE7O1FBL2tDQUM7ZUFBQUE7O1FBdVpBQztlQUFBQTs7UUFzbUJBQztlQUFBQTs7UUFxQ0FDO2VBQUFBOztRQWh0Q0FDO2VBQUFBOztRQW1YQUM7ZUFBQUE7O1FBa29CQUM7ZUFBQUE7O1FBdGtCQUM7ZUFB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
1635
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZSB9IGZyb20gXCIuLi9lbGVtZW50L3R5cGVcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlUmVmZXJlbmNlIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IGVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zLFxuICAgICAgICAgc3VicHJvb2ZTdHJpbmdGcm9tU3VicHJvb2ZOb2RlLFxuICAgICAgICAgcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24sXG4gICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMsXG4gICAgICAgICBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNBeGlvbUxlbW1hVGhlb3JlbUFuZENvbmplY3R1cmUsXG4gICAgICAgICBtZXRhTGVtbWFNZXRhdGhlb3JlbVN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbixcbiAgICAgICAgIGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZVN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZTtcblxuICBpZiAodHlwZU5vZGUgPT09IG51bGwpIHtcbiAgICB0eXBlID0gYmFzZVR5cGU7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICB0eXBlTmFtZSA9IHR5cGVOb2RlLmdldFR5cGVOYW1lKCksXG4gICAgICAgICAgdHlwZVByZWZpeE5hbWUgPSB0eXBlTm9kZS5nZXRUeXBlUHJlZml4TmFtZSgpLFxuICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IHR5cGVOb2RlLmdldE5vbWluYWxUeXBlTmFtZSgpLFxuICAgICAgICAgIHN0cmluZyA9IG5vbWluYWxUeXBlTmFtZSwgIC8vL1xuICAgICAgICAgIG5vZGUgPSB0eXBlTm9kZSwgIC8vL1xuICAgICAgICAgIG5hbWUgPSB0eXBlTmFtZSwgIC8vL1xuICAgICAgICAgIHByZWZpeE5hbWUgPSB0eXBlUHJlZml4TmFtZSwgIC8vL1xuICAgICAgICAgIHN1cGVyVHlwZXMgPSBudWxsLFxuICAgICAgICAgIHByb3BlcnRpZXMgPSBudWxsLFxuICAgICAgICAgIHByb3Zpc2lvbmFsID0gbnVsbDtcblxuICAgIHR5cGUgPSBuZXcgVHlwZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIG5hbWUsIHByZWZpeE5hbWUsIHN1cGVyVHlwZXMsIHByb3BlcnRpZXMsIHByb3Zpc2lvbmFsKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdGVybU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHR5cGUgPSBudWxsLFxuICAgICAgICB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0eXBlKTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGVwIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0ZXBOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0ZXAgPSBuZXcgU3RlcChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24pO1xuXG4gIHJldHVybiBzdGVwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZUZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJ1bGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJlbWlzZXMgPSBwcmVtaXNlc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbmNsdXNpb24gPSBjb25jbHVzaW9uRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcnVsZVN0cmluZyA9IHJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uKGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pLFxuICAgICAgICBub2RlID0gcnVsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gcnVsZVN0cmluZywgIC8vL1xuICAgICAgICBydWxlID0gbmV3IFJ1bGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uLCBwcm9vZik7XG5cbiAgcmV0dXJuIHJ1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGFiZWxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBuZXcgTGFiZWwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yRnJvbUVycm9yTm9kZShlcnJvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcnJvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcnJvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoY29udGV4dCwgc3RyaW5nLCBub2RlKTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21MZW1tYU5vZGUobGVtbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGVtbWEgfSA9IGVsZW1lbnRzLFxuICAgICAgICBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlID0gbGVtbWFOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBbXSxcbiAgICAgICAgYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlU3RyaW5nID0gYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IGxlbW1hTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZVN0cmluZywgLy8vXG4gICAgICAgIGxlbW1hID0gbmV3IExlbW1hKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEZyYW1lIH0gPSBlbGVtZW50cyxcbiAgICBub2RlID0gZnJhbWVOb2RlLCAvLy9cbiAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpLFxuICAgIGZyYW1lID0gbmV3IEZyYW1lKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYXNzdW1wdGlvbnMpO1xuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9vZiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9vZk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBkZXJpdmF0aW9uID0gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvb2YgPSBuZXcgUHJvb2YoY29udGV4dCwgc3RyaW5nLCBub2RlLCBkZXJpdmF0aW9uKTtcblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlvbUZyb21BeGlvbU5vZGUoYXhpb21Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQXhpb20gfSA9IGVsZW1lbnRzLFxuICAgICAgICBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlID0gYXhpb21Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gbnVsbCxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBbXSxcbiAgICAgICAgYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlU3RyaW5nID0gYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IGF4aW9tTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZVN0cmluZywgLy8vXG4gICAgICAgIGF4aW9tID0gbmV3IEF4aW9tKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGF4aW9tO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VjdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2lzTm9kZXMgPSBzZWN0aW9uTm9kZS5nZXRIeXBvdGhlc2lzTm9kZXMoKSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzKGh5cG90aGVzaXNOb2RlcywgY29udGV4dCksXG4gICAgICAgIGF4aW9tID0gYXhpb21Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsZW1tYSA9IGxlbW1hRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25qZWN0dXJlID0gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNlY3Rpb25TdHJpbmcgPSBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNBeGlvbUxlbW1hVGhlb3JlbUFuZENvbmplY3R1cmUoaHlwb3RoZXNlcywgYXhpb20sIGxlbW1hLCB0aGVvcmVtLCBjb25qZWN0dXJlLCBjb250ZXh0KSxcbiAgICAgICAgbm9kZSA9IHNlY3Rpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gc2VjdGlvblN0cmluZywgLy8vXG4gICAgICAgIHNlY3Rpb24gPSBuZXcgU2VjdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGh5cG90aGVzZXMsIGF4aW9tLCBsZW1tYSwgdGhlb3JlbSwgY29uamVjdHVyZSk7XG5cbiAgcmV0dXJuIHNlY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJlbWlzZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcmVtaXNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByZW1pc2UgPSBuZXcgUHJlbWlzZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCwgcHJvY2VkdXJlQ2FsbCk7XG5cbiAgcmV0dXJuIHByZW1pc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUodGhlb3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUaGVvcmVtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSA9IHRoZW9yZW1Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBbXSxcbiAgICAgICAgYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlU3RyaW5nID0gYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IHRoZW9yZW1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlU3RyaW5nLCAvLy9cbiAgICAgICAgdGhlb3JlbSA9IG5ldyBUaGVvcmVtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXF1YWxpdHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXF1YWxpdHlOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsZWZ0VGVybU5vZGUgPSBlcXVhbGl0eU5vZGUuZ2V0TGVmdFRlcm1Ob2RlKCksXG4gICAgICAgIHJpZ2h0VGVybU5vZGUgPSBlcXVhbGl0eU5vZGUuZ2V0UmlnaHRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyaWdodFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXF1YWxpdHkgPSBuZXcgRXF1YWxpdHkoc3RyaW5nLCBsZWZ0VGVybSwgcmlnaHRUZXJtKTtcblxuICByZXR1cm4gZXF1YWxpdHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhVHlwZUZyb21NZXRhVHlwZU5vZGUobWV0YVR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YVR5cGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbWV0YVR5cGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBtZXRhVHlwZU5hbWUgPSBtZXRhVHlwZU5vZGUuZ2V0TWV0YVR5cGVOYW1lKCksXG4gICAgICAgIG5hbWUgPSBtZXRhVHlwZU5hbWUsICAvLy9cbiAgICAgICAgbWV0YVR5cGUgPSBuZXcgTWV0YVR5cGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBuYW1lKTtcblxuICByZXR1cm4gbWV0YVR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHkgfSA9IGVsZW1lbnRzLFxuICAgIG5vZGUgPSBwcm9wZXJ0eU5vZGUsIC8vL1xuICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5Tm9kZS5nZXRQcm9wZXJ0eU5hbWUoKSxcbiAgICBub21pbmFsVHlwZU5hbWUgPSBudWxsLFxuICAgIG5hbWUgPSBwcm9wZXJ0eU5hbWUsICAvLy9cbiAgICBwcm9wZXJ0eSA9IG5ldyBQcm9wZXJ0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIG5hbWUsIG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdHlwZSA9IG51bGwsXG4gICAgICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbVZhcmlhbGJlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9ucyA9IFtdLFxuICAgICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHR5cGUsIGlkZW50aWZpZXIsIHByb3BlcnR5UmVsYXRpb25zKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3ViUHJvb2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZOb2RlLCAvLy9cbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJEZXJpdmF0aW9uID0gc3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VicHJvb2ZTdHJpbmcgPSBzdWJwcm9vZlN0cmluZ0Zyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gc3VicHJvb2ZTdHJpbmcsICAvLy9cbiAgICAgICAgc3VicHJvb2YgPSBuZXcgU3ViUHJvb2YoY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdXBwb3NpdGlvbnMsIHN1YkRlcml2YXRpb24pO1xuXG4gIHJldHVybiBzdWJwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgZXF1YWxpdHkgPSBudWxsO1xuXG4gIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RXF1YWxpdHlOb2RlKCk7XG5cbiAgaWYgKGVxdWFsaXR5Tm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IG5vZGUgPSBlcXVhbGl0eU5vZGUsICAvLy9cbiAgICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgICBsZWZ0VGVybSA9IGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcblxuICAgIGVxdWFsaXR5ID0gbmV3IEVxdWFsaXR5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG4gIH1cblxuICByZXR1cm4gZXF1YWxpdHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRGVkdWN0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlZHVjdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IG5ldyBEZWR1Y3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgc3RhdGVtZW50ID0gbmV3IFN0YXRlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2lnbmF0dXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNpZ25hdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdGVybXMpO1xuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IG5ldyBSZWZlcmVuY2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlcm9Db25qZWN0dXJlTm9kZShjb25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmplY3R1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlID0gY29uamVjdHVyZU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IFtdLFxuICAgICAgICBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVTdHJpbmcgPSBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVTdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gY29uamVjdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVTdHJpbmcsIC8vL1xuICAgICAgICBjb25qZWN0dXJlID0gbmV3IENvbmplY3R1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gY29uamVjdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBKdWRnZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0ganVkZ2VtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGp1ZGdlbWVudCA9IG5ldyBKdWRnZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBmcmFtZSwgYXNzdW1wdGlvbik7XG5cbiAgcmV0dXJuIGp1ZGdlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZW1tYUZyb21NZXRhTGVtbWFOb2RlKG1ldGFMZW1tYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhTGVtbWEgfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSA9IG1ldGFMZW1tYU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21NZXRhTGVtbWFNZXRhdGhlb3JlbU5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbU1ldGFMZW1tYU1ldGF0aGVvcmVtTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21NZXRhTGVtbWFNZXRhdGhlb3JlbU5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tTWV0YUxlbW1hTWV0YXRoZW9yZW1Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3Vic3RpdHV0aW9ucyA9IG51bGwsXG4gICAgICAgIG5vZGUgPSBtZXRhTGVtbWFOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gbWV0YUxlbW1hTWV0YXRoZW9yZW1TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbWV0YUxlbW1hID0gbmV3IE1ldGFMZW1tYShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHN1YnN0aXR1dGlvbnMpO1xuXG4gIHJldHVybiBtZXRhTGVtbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUGFyYW1ldGVyIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHBhcmFtZXRlck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlck5vZGUuZ2V0UGFyYW1ldGVyTmFtZSgpLFxuICAgICAgICBuYW1lID0gcGFyYW1ldGVyTmFtZSwgIC8vL1xuICAgICAgICBwYXJhbWV0ZXIgPSBuZXcgUGFyYW1ldGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbmFtZSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEh5cG90aHNpcyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBoeXBvdGhlc2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcGFyYW1ldGVyID0gbmV3IEh5cG90aHNpcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25jbHVzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbmNsdXNpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbmNsdXNpb24gPSBuZXcgQ29uY2x1c2lvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jbHVzaW5vRnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpbm9Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uY2x1c2lvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25jbHVzaW5vTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lub05vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25jbHVzaW5vID0gbmV3IENvbmNsdXNpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb25jbHVzaW5vO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEFzc3VtcHRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYXNzdW1wdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXNzdW1wdGlvbiA9IG5ldyBBc3N1bXB0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc3RhdGVtZW50LCByZWZlcmVuY2UpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlcml2YXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVyaXZhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZXJpdmF0aW9uID0gbmV3IERlcml2YXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGVwc09yU3VicHJvb2ZzKTtcblxuICByZXR1cm4gZGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlUHJlZml4IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVQcmVmaXhOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlUHJlZml4ID0gbmV3IFR5cGVQcmVmaXgoY29udGV4dCwgc3RyaW5nLCBub2RlLCB0ZXJtLCB0eXBlKTtcblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF0aGVvcmVtRnJvbU1ldGFMZW1tYU5vZGUobWV0YXRoZW9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXRlaG9yZW0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSA9IG1ldGF0aGVvcmVtTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbU1ldGFMZW1tYU1ldGF0aGVvcmVtTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tTWV0YUxlbW1hTWV0YXRoZW9yZW1Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbU1ldGFMZW1tYU1ldGF0aGVvcmVtTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21NZXRhTGVtbWFNZXRhdGhlb3JlbU5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdGl0dXRpb25zID0gbnVsbCxcbiAgICAgICAgbm9kZSA9IG1ldGFMZW1tYU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBtZXRhTGVtbWFNZXRhdGhlb3JlbVN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBtZXRhdGhlb3JlbSA9IG5ldyBNZXRhdGVob3JlbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHN1YnN0aXR1dGlvbnMpO1xuXG4gIHJldHVybiBtZXRhdGhlb3JlbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IG1ldGF2YXJpYWJsZVN0cmluZywgLy8vXG4gICAgICAgIHN0cmluZyA9IHJlZmVyZW5jZVN0cmluZywgIC8vL1xuICAgICAgICByZWZlcmVuY2VOb2RlID0gaW5zdGFudGlhdGVSZWZlcmVuY2Uoc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cHBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzaXNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgSHlwb3RoZXNpcyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBoeXBvdGhlc2lzTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNpc05vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2lzID0gbmV3IEh5cG90aGVzaXMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBoeXBvdGhlc2lzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VwcG9zaXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VwcG9zaXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9uID0gbmV3IFN1cHBvc2l0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcXVpdmFsZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcXVpdmFsZW5jZU5vZGUsIC8vL1xuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBlcXVpdmFsZW5jZVN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSxcbiAgICAgICAgc3RyaW5nID0gZXF1aXZhbGVuY2VTdHJpbmcsIC8vL1xuICAgICAgICBlcXVpdmFsZW5jZSA9IG5ldyBFcXVpdmFsZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHRlcm1zKTtcblxuICByZXR1cm4gZXF1aXZhbGVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcHJvY2VkdXJlUmVmZXJlbmNlTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IG1ldGF2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgdHlwZSA9IG51bGwsXG4gICAgICAgIG1ldGFUeXBlID0gbnVsbCxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbmV3IE1ldGF2YXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIG5hbWUsIHR5cGUsIG1ldGFUeXBlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YkRlcml2YXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3ViRGVyaXZhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YkRlcml2YXRpb24gPSBuZXcgU3ViRGVyaXZhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0ZXBzT3JTdWJwcm9vZnMpO1xuXG4gIHJldHVybiBzdWJEZXJpdmF0aW9uO1xuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZUFzc2VydGlvbiA9IG5ldyBUeXBlQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlQ2FsbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbFN0cmluZyA9IHByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyhwcm9jZWR1cmVSZWZlcmVuY2UsIHBhcmFtZXRlcnMpLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBwcm9jZWR1cmVDYWxsU3RyaW5nLCAvLy9cbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IG5ldyBQcm9jZWR1cmVDYWxsKGNvbnRleHQsIHN0cmluZywgbm9kZSwgcGFyYW1ldGVycywgcHJvY2VkdXJlUmVmZXJlbmNlKTtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXAgPSBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGVwT3JTdWJwcm9vZiA9IChzdGVwIHx8IHN1YnByb29mKTtcblxuICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhlZEZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJlZml4ZWQgPSBzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLmlzUHJlZml4ZWQoKTtcblxuICByZXR1cm4gcHJlZml4ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhlZEZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcmVmaXhlZCA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmlzUHJlZml4ZWQoKTtcblxuICByZXR1cm4gcHJlZml4ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRGVmaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbmVnYXRlZCA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uID0gbmV3IERlZmluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0ZXJtLCBmcmFtZSwgbmVnYXRlZCk7XG5cbiAgcmV0dXJuIGRlZmluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHlSZWxhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlSZWxhdGlvbiA9IG5ldyBQcm9wZXJ0eVJlbGF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgcHJvcGVydHksIHRlcm0pO1xuXG4gIHJldHVybiBwcm9wZXJ0eVJlbGF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm1TdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBuZXcgVGVybVN1YnN0aXR1dGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHRlcm0sIHZhcmlhYmxlKTtcblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBGcmFtZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBuZXcgRnJhbWVTdWJzdGl0dXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBmcmFtZSwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gZnJhbWVTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHlBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlSZWxhdGlvbiA9IHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gbmV3IFByb3BlcnR5QXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdGVybSwgcHJvcGVydHlSZWxhdGlvbik7XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YnByb29mQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSBuZXcgU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnRzKTtcblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29udGFpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG5lZ2F0ZWQgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb250YWluZWRBc3NlcnRpb24gPSBuZXcgQ29udGFpbmVkQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdGVybSwgZnJhbWUsIG5lZ2F0ZWQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTYXRpc2ZpZXNBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb24gPSBuZXcgU2F0aXNmaWVzQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc2lnbmF0dXJlLCByZWZlcmVuY2UpO1xuXG4gIHJldHVybiBzYXRpc2ZpZXNBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgUHJvY2VkdXJlUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbmFtZSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4RGVjbGFyYXRpb25Gcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZVByZWZpeERlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSwgIC8vL1xuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlUHJlZml4RGVjbGFyYXRpb24gPSBuZXcgVHlwZVByZWZpeERlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdHlwZVByZWZpeCk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXhEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21iaW5hdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBjb21iaW5hdG9yID0gY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb21iaW5hdG9yRGVjbGFyYXRpb24gPSBuZXcgQ29tYmluYXRvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgY29tYmluYXRvcik7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsZVR5cGVEZWNsYXJhdGlvbkZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaW1wbGVUeXBlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcmVmaXhlZCA9IHByZWZpeGVkRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpbXBsZVR5cGVEZWNsYXJhdGlvbiA9IG5ldyBTaW1wbGVUeXBlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0eXBlLCBwcmVmaXhlZCk7XG5cbiAgcmV0dXJuIHNpbXBsZVR5cGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudFN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgcmVzb2x2ZWQgPSB0cnVlLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvbiA9IG5ldyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCByZXNvbHZlZCwgc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbik7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2VTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2VTdWJzdGl0dXRpb24gPSBuZXcgUmVmZXJlbmNlU3Vic3RpdHV0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgcmVmZXJlbmNlLCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiByZWZlcmVuY2VTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgY29uc3RydWN0b3IpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGxleFR5cGVEZWNsYXJhdGlvbkZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbXBsZXhUeXBlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJlZml4ZWQgPSBwcmVmaXhlZEZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbXBsZXhUeXBlRGVjbGFyYXRpb24gPSBuZXcgQ29tcGxleFR5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHR5cGUsIHByZWZpeGVkKTtcblxuICByZXR1cm4gY29tcGxleFR5cGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG1ldGFUeXBlID0gbWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBtZXRhdmFyaWFibGUuc2V0TWV0YVR5cGUobWV0YVR5cGUpO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvb2YgPSBudWxsO1xuXG4gIGNvbnN0IHByb29mTm9kZSA9IHJ1bGVOb2RlLmdldFByb29mTm9kZSgpO1xuXG4gIGlmIChwcm9vZk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpb21Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGF4aW9tID0gbnVsbDtcblxuICBjb25zdCBheGlvbU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRBeGlvbU5vZGUoKTtcblxuICBpZiAoYXhpb21Ob2RlICE9PSBudWxsKSB7XG4gICAgYXhpb20gPSBheGlvbUZyb21BeGlvbU5vZGUoYXhpb21Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBheGlvbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbW1hRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBsZW1tYSA9IG51bGw7XG5cbiAgY29uc3QgbGVtbWFOb2RlID0gc2VjdGlvbk5vZGUuZ2V0TGVtbWFOb2RlKCk7XG5cbiAgaWYgKGxlbW1hTm9kZSAhPT0gbnVsbCkge1xuICAgIGxlbW1hID0gbGVtbWFGcm9tTGVtbWFOb2RlKGxlbW1hTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbGVtbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGVwTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHN0ZXBOb2RlLmdldFJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGNvbmNsdXNpb24gPSBudWxsO1xuXG4gIGNvbnN0IGNvbmNsdXNpb25Ob2RlID0gcnVsZU5vZGUuZ2V0Q29uY2x1c2lvbk5vZGUoKTtcblxuICBpZiAoY29uY2x1c2lvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gY29uY2x1c2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRoZW9yZW0gPSBudWxsO1xuXG4gIGNvbnN0IHRoZW9yZW1Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0VGhlb3JlbU5vZGUoKTtcblxuICBpZiAodGhlb3JlbU5vZGUgIT09IG51bGwpIHtcbiAgICB0aGVvcmVtID0gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGhlb3JlbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTm9kZSA9IGp1ZGdlbWVudE5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmF0aW9uRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGRlcml2YXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGRlcml2YXRpb25Ob2RlID0gcHJvb2ZOb2RlLmdldERlcml2YXRpb25Ob2RlKCk7XG5cbiAgaWYgKGRlcml2YXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZGVyaXZhdGlvbiA9IGRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHByZW1pc2VOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBsYWJlbE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgY29uamVjdHVyZSA9IG51bGw7XG5cbiAgY29uc3QgY29uamVjdHVyZU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRDb25qZWN0dXJlTm9kZSgpO1xuXG4gIGlmIChjb25qZWN0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbmplY3R1cmUgPSBjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlKGNvbmplY3R1cmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb25qZWN0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2x1c2lvbkZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBsZXQgY29uY2x1c2lvbiA9IG51bGw7XG5cbiAgY29uc3QgY29uY2x1c2lvbk5vZGUgPSBwcmVtaXNlTm9kZS5nZXRDb25jbHVzaW9uTm9kZSgpO1xuXG4gIGlmIChjb25jbHVzaW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbmNsdXNpb24gPSBjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb25jbHVzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganVkZ2VtZW50Rm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBqdWRnZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IGp1ZGdlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEp1ZGdlbWVudE5vZGUoKTtcblxuICBpZiAoanVkZ2VtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGp1ZGdlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdHlwZUFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVOb2RlID0gdHlwZUFzc2VydGlvbk5vZGUuZ2V0VHlwZU5vZGUoKTtcblxuICBpZiAodHlwZU5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBmcmFtZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21WYXJpYWxiZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgaWRlbnRpZmllciA9IHZhcmlhYmxlSWRlbnRpZmllcjsgIC8vL1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gZGVkdWN0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXAgPSBudWxsO1xuXG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZVN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlLmlzU3RlcE5vZGUoKTtcblxuICBpZiAoc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUpIHtcbiAgICBjb25zdCBzdGVwTm9kZSA9IHN0ZXBPclN1YnByb29mTm9kZTsgIC8vL1xuXG4gICAgc3RlcCA9IHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lub05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbmNsdXNpbm9Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgYXNzdW1wdGlvbiA9IG51bGw7XG5cbiAgY29uc3QgYXNzdW1wdGlvbk5vZGUgPSBqdWRnZW1lbnROb2RlLmdldEFzc3VtcHRpb25Ob2RlKCk7XG5cbiAgaWYgKGFzc3VtcHRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNpc05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGh5cG90aGVzaXNOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gcHJlbWlzZU5vZGUuZ2V0UHJvY2VkdXJlQ2FsbE5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlQ2FsbE5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdXBwb3NpdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50OyAvLy9cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gcHJvcGVydHlSZWxhdGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3Qgc2luZ3VsYXJNZXRhdmFyaWFibGVOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTaW5ndWxhck1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAoc2luZ3VsYXJNZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHNpbmd1bGFyTWV0YXZhcmlhYmxlTm9kZTsgIC8vL1xuXG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJEZXJ2aWF0aW9uID0gbnVsbDtcblxuICBjb25zdCBzdWJEZXJpdmF0aW9uTm9kZSA9IHN1YnByb29mTm9kZS5nZXRTdWJEZXJpdmF0aW9uTm9kZSgpO1xuXG4gIGlmIChzdWJEZXJpdmF0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHN1YkRlcnZpYXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJEZXJ2aWF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUFzc2VydGluRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZUFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFR5cGVBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHR5cGVBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2VOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVOb2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2F0aXNmaWVzQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlID0gc3RlcE5vZGUuZ2V0U2F0aXNmaWVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2F0aXNmaWVzQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyTmFtZUZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlck5vZGUuZ2V0UGFyYW1ldGVyTmFtZSgpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3VicHJvb2ZPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VicHJvb2YgPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUgPSBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlLmlzU3VicHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUpIHtcbiAgICBjb25zdCBzdWJwcm9vZk5vZGUgPSBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZSA9IG51bGw7XG5cbiAgY29uc3QgdHlwZU5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpO1xuXG4gIGlmICh0eXBlTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVOb2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRGcmFtZU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KVxuICB9XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eU5vZGUgPSBwcm9wZXJ0eVJlbGF0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eU5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgZGVmaW5lZEFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZGVmaW5lZEFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldERlZmluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKGRlZmluZWRBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZGVmaW5lZEFzc2VydGlvbiA9IGRlZmluZWRBc3NlcnRpb25Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgY29uc3QgdGVybVN1YnN0aXR1dGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFRlcm1TdWJzdGl0dXRpb25Ob2RlKCk7XG5cbiAgaWYgKHRlcm1TdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybVN1YnN0aXR1dGlvbiA9IHRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1TdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21NZXRhTGVtbWFNZXRhdGhlb3JlbU5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbU1ldGFMZW1tYU1ldGF0aGVvcmVtTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCkge1xuICBsZXQgbGFiZWwgPSBudWxsO1xuXG4gIGNvbnN0IGxhYmVsTm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLmdldExhYmVsTm9kZSgpO1xuXG4gIGlmIChsYWJlbE5vZGUgIT09IG51bGwpIHtcbiAgICBsYWJlbCA9IGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVOb2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpO1xuXG4gIGlmICh0eXBlTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICBpZiAoZnJhbWVTdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWVTdWJzdGl0dXRpb24gPSBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlcyA9IGRlcml2YXRpb25Ob2RlLmdldFN0ZXBPclN1YnByb29mTm9kZXMoKSxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBPclN1YnByb29mTm9kZXMubWFwKChzdGVwT3JTdWJwcm9vZk5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGVwT3JTdWJwcm9vZiA9IHN0ZXBzT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzT3JTdWJwcm9vZnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5QXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZkFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVOb2RlID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKTtcblxuICBpZiAodHlwZU5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGU7XG5cbiAgY29uc3QgdHlwZU5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpO1xuXG4gIGlmICh0eXBlTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcbiAgfSBlbHNlIHtcbiAgICB0eXBlID0gYmFzZVR5cGU7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHswXG4gIGxldCBjb250YWluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldENvbnRhaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnRhaW5lZEFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvbkZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNhdGlzZmllc0Fzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U2F0aXNmaWVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2F0aXNmaWVzQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHkgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5Tm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLmdldFByb3BlcnR5Tm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eU5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2lnbmF0dXJlID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVOb2RlID0gc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZS5nZXRTaWduYXR1cmVOb2RlKCk7XG5cbiAgaWYgKHNpZ25hdHVyZU5vZGUgIT09IG51bGwpIHtcbiAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBzdWJEZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwc09yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwc09yU3VicHJvb2ZzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tTWV0YUxlbW1hTWV0YXRoZW9yZW1Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBkZWR1Y3Rpb24gPSBudWxsO1xuXG4gIGNvbnN0IGRlZHVjdGlvbk5vZGUgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZS5nZXREZWR1Y3Rpb25Ob2RlKCk7XG5cbiAgaWYgKGRlZHVjdGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpO1xuXG4gIGlmIChyZWZlcmVuY2VOb2RlICE9PSBudWxsKSB7XG4gICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZVJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlUHJlZml4ID0gbnVsbDtcblxuICBjb25zdCB0eXBlUHJlZml4Tm9kZSA9IHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZVByZWZpeE5vZGUoKTtcblxuICBpZiAodHlwZVByZWZpeE5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZShjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb21iaW5hdG9yID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IENvbWJpbmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICBjb21iaW5hdG9yID0gbmV3IENvbWJpbmF0b3Ioc3RhdGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBjb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YVR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGFUeXBlTm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRNZXRhVHlwZU5vZGUoKTtcblxuICBpZiAobWV0YVR5cGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YVR5cGUgPSBtZXRhVHlwZUZyb21NZXRhVHlwZU5vZGUobWV0YVR5cGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvb2YgPSBudWxsO1xuXG4gIGNvbnN0IHByb29mTm9kZSA9IGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUuZ2V0UHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHByb29mTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5UmVsYXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5UmVsYXRpb25Ob2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLmdldFByb3BlcnR5UmVsYXRpb25Ob2RlKCk7XG5cbiAgaWYgKHByb3BlcnR5UmVsYXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgcHJvcGVydHlSZWxhdGlvbiA9IHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgY29uc3RydWN0b3IgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgQ29uc3RydWN0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgIGNvbnN0cnVjdG9yID0gbmV3IENvbnN0cnVjdG9yKHRlcm0pO1xuICB9XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBsZXQgZGVkdWN0aW9uID0gbnVsbDtcblxuICBjb25zdCBkZWR1Y3Rpb25Ob2RlID0gYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZS5nZXREZWR1Y3Rpb25Ob2RlKCk7XG5cbiAgaWYgKGRlZHVjdGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmUgPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZU5vZGUgPSBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLmdldFNpZ25hdHVyZU5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybXMgPSB0ZXJtTm9kZXMubWFwKCh0ZXJtTm9kZSkgPT4ge1xuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVscyA9IGxhYmVsTm9kZXMubWFwKChsYWJlbE5vZGUpID0+IHtcbiAgICBjb25zdCBsYWJlbCA9IGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGxhYmVsO1xuICB9KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzKHByZW1pc2VOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBwcmVtaXNlcyA9IHByZW1pc2VOb2Rlcy5tYXAoKHByZW1pc2VOb2RlKSA9PiB7XG4gICAgY29uc3QgcHJlbWlzZSA9IHByZW1pc2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByZW1pc2U7XG4gIH0pO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMoc3RhdGVtZW50Tm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50cyA9IHN0YXRlbWVudE5vZGVzLm1hcCgoc3RhdGVtZW50Tm9kZSkgPT4ge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbVN1cGVyVHlwZU5vZGVzKHN1cGVyVHlwZU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cGVyVHlwZXMgPSBzdXBlclR5cGVOb2Rlcy5tYXAoKHN1cGVyVHlwZU5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB0eXBlTm9kZSA9IHN1cGVyVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgICBzdXBlclR5cGUgPSB0eXBlOyAgLy8vXG5cbiAgICAgICAgICByZXR1cm4gc3VwZXJUeXBlO1xuICAgICAgICB9KSxcbiAgICAgICAgc3VwZXJUeXBlc0xlbmd0aCA9IHN1cGVyVHlwZXMubGVuZ3RoO1xuXG4gIGlmIChzdXBlclR5cGVzTGVuZ3RoID09PSAwKSB7XG4gICAgY29uc3Qgc3VwZXJUeXBlID0gYmFzZVR5cGU7IC8vL1xuXG4gICAgc3VwZXJUeXBlcy5wdXNoKHN1cGVyVHlwZSk7XG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMocGFyYW1ldGVyTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVycyA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyTm9kZSkgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgfSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbUh5cG90aGVzaXNOb2RlcyhoeXBvdGhlc2lzTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNlcyA9IGh5cG90aGVzaXNOb2Rlcy5tYXAoKGh5cG90aGVzZU5vZGUpID0+IHtcbiAgICBjb25zdCBoeXBvdGhlc2lzID0gaHlwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBoeXBvdGhlc2lzO1xuICB9KTtcblxuICByZXR1cm4gaHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2Rlcyhhc3N1bXB0aW9uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uTm9kZXMubWFwKChhc3N1bXB0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uTm9kZXMubWFwKChzdXBwb3NpdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbiA9IHN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uO1xuICB9KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydGllc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMocHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMubWFwKChwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9KTtcblxuICByZXR1cm4gcHJvcGVydGllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gcnVsZU5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZXNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJlbWlzZU5vZGVzID0gcnVsZU5vZGUuZ2V0UHJlbWlzZU5vZGVzKCksXG4gICAgICAgIHByZW1pc2VzID0gcHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzKHByZW1pc2VOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByZW1pc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IHNpZ25hdHVyZU5vZGUuZ2V0QXNzdW1wdGlvbk5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9uTm9kZXMgPSBmcmFtZU5vZGUuZ2V0QXNzdW1wdGlvbk5vZGVzKCksXG4gICAgICAgIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzKGFzc3VtcHRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZXMgPSBlcXVpdmFsZW5jZU5vZGUuZ2V0VGVybU5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IHN1YnByb29mTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlck5vZGVzID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0UGFyYW1ldGVyTm9kZXMoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMocGFyYW1ldGVyTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGVzID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGVzKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzKHN0YXRlbWVudE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0UHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKCksXG4gICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2Rlcyhwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBlclR5cGVOb2RlcyA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFN1cGVyVHlwZU5vZGVzKCksXG4gICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbVN1cGVyVHlwZU5vZGVzKHN1cGVyVHlwZU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21NZXRhTGVtbWFNZXRhdGhlb3JlbU5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxOb2RlcyA9IGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cblxuXG5cbmV4cG9ydCBmdW5jdGlvbiBfdHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlTm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpO1xuXG4gIGlmICh0eXBlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IG5vbWluYWxUeXBlTmFtZSA9IHR5cGVOb2RlLmdldE5vbWluYWxUeXBlTmFtZSgpO1xuXG4gICAgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG4iXSwibmFtZXMiOlsiX3R5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwiYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25Gcm9tSnVkZ2VtZW50Tm9kZSIsImFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2RlcyIsImFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZSIsImF4aW9tRnJvbUF4aW9tTm9kZSIsImF4aW9tRnJvbVNlY3Rpb25Ob2RlIiwiY29tYmluYXRvckRlY2xhcmF0aW9uRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlIiwiY29uY2x1c2lub0Zyb21Db25jbHVzaW9uTm9kZSIsImNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUiLCJjb25jbHVzaW9uRnJvbVByZW1pc2VOb2RlIiwiY29uY2x1c2lvbkZyb21SdWxlTm9kZSIsImNvbmplY3R1cmVGcm9tU2VjdGlvbk5vZGUiLCJjb25qZWN0dXJlcm9Db25qZWN0dXJlTm9kZSIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJkZWR1Y3Rpb25Gcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSIsImRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlIiwiZGVkdWN0aW9uRnJvbU1ldGFMZW1tYU1ldGF0aGVvcmVtTm9kZSIsImRlZmluZWRBc3NlcnRpb25Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlIiwiZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUiLCJlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUiLCJlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlIiwiZXF1aXZhbGVuY2VGcm9tRXF1aXZhbGVuY2VOb2RlIiwiZXJyb3JGcm9tRXJyb3JOb2RlIiwiZnJhbWVGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImZyYW1lRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tRnJhbWVOb2RlIiwiZnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiZnJhbWVGcm9tSnVkZ2VtZW50Tm9kZSIsImZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsImZyYW1lU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJoeXBvdGhlc2VzRnJvbUh5cG90aGVzaXNOb2RlcyIsImh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUiLCJoeXBwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZSIsImlkZW50aWZpZXJGcm9tVmFyaWFsYmVOb2RlIiwianVkZ2VtZW50Rm9tU3RhdGVtZW50Tm9kZSIsImp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlIiwibGFiZWxGcm9tTGFiZWxOb2RlIiwibGFiZWxGcm9tTWV0YUxlbW1hTWV0YXRoZW9yZW1Ob2RlIiwibGFiZWxzRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUiLCJsYWJlbHNGcm9tTGFiZWxOb2RlcyIsImxhYmVsc0Zyb21SdWxlTm9kZSIsImxlbW1hRnJvbUxlbW1hTm9kZSIsImxlbW1hRnJvbVNlY3Rpb25Ob2RlIiwibWV0YUxlbW1hRnJvbU1ldGFMZW1tYU5vZGUiLCJtZXRhVHlwZUZyb21NZXRhVHlwZU5vZGUiLCJtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdGhlb3JlbUZyb21NZXRhTGVtbWFOb2RlIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbUFzc3VtcHRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTGFiZWxOb2RlIiwibWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlIiwibWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlck5hbWVGcm9tUGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMiLCJwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJlZml4ZWRGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcmVmaXhlZEZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwicHJlbWlzZUZyb21QcmVtaXNlTm9kZSIsInByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyIsInByZW1pc2VzRnJvbVJ1bGVOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwicHJvb2ZGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSIsInByb29mRnJvbU1ldGFMZW1tYU1ldGF0aGVvcmVtTm9kZSIsInByb29mRnJvbVByb29mTm9kZSIsInByb29mRnJvbVJ1bGVOb2RlIiwicHJvcGVydGllc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInByb3BlcnRpZXNGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwicHJvcGVydHlGcm9tUHJvcGVydHlOb2RlIiwicHJvcGVydHlGcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUiLCJwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUiLCJyZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUiLCJyZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZSIsInJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJyZWZlcmVuY2VGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21TdGVwTm9kZSIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwicnVsZUZyb21SdWxlTm9kZSIsInNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwic2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RlcE5vZGUiLCJzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlIiwic2lnbmF0dXJlRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUiLCJzaWduYXR1cmVGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZSIsInN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUiLCJzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3RhdGVtZW50RnJvbVN0ZXBOb2RlIiwic3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZSIsInN0YXRlbWVudFN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3RlcEZyb21TdGVwTm9kZSIsInN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcHNPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUiLCJzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN1YnByb29mRnJvbVN1YnByb29mTm9kZSIsInN1cGVyVHlwZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJzdXBlclR5cGVzRnJvbVN1cGVyVHlwZU5vZGVzIiwic3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlIiwic3VwcG9zaXRpb25zRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tTWV0YUxlbW1hTWV0YXRoZW9yZW1Ob2RlIiwic3VwcG9zaXRpb25zRnJvbVN1YnByb29mTm9kZSIsInN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzIiwidGVybUZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUiLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwidGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwidGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlIiwidGVybXNGcm9tU2lnbmF0dXJlTm9kZSIsInRlcm1zRnJvbVRlcm1Ob2RlcyIsInRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUiLCJ0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlIiwidHlwZUFzc2VydGluRnJvbVN0YXRlbWVudE5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVGcm9tVHlwZU5vZGUiLCJ0eXBlUHJlZml4RGVjbGFyYXRpb25Gcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSIsInR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSIsInR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeE5vZGUiLCJ2YXJpYWJsZURlY2xhcmF0aW9uRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwidmFyaWFibGVGcm9tVGVybU5vZGUiLCJ2YXJpYWJsZUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIiwidHlwZU5vZGUiLCJjb250ZXh0IiwidHlwZSIsImJhc2VUeXBlIiwiVHlwZSIsImVsZW1lbnRzIiwidHlwZU5hbWUiLCJnZXRUeXBlTmFtZSIsInR5cGVQcmVmaXhOYW1lIiwiZ2V0VHlwZVByZWZpeE5hbWUiLCJub21pbmFsVHlwZU5hbWUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJzdHJpbmciLCJub2RlIiwibmFtZSIsInByZWZpeE5hbWUiLCJzdXBlclR5cGVzIiwicHJvcGVydGllcyIsInByb3Zpc2lvbmFsIiwidGVybU5vZGUiLCJUZXJtIiwibm9kZUFzU3RyaW5nIiwidGVybSIsInN0ZXBOb2RlIiwiU3RlcCIsInN0YXRlbWVudCIsInJlZmVyZW5jZSIsInNhdGlzZmllc0Fzc2VydGlvbiIsInN0ZXAiLCJydWxlTm9kZSIsIlJ1bGUiLCJwcm9vZiIsImxhYmVscyIsInByZW1pc2VzIiwiY29uY2x1c2lvbiIsInJ1bGVTdHJpbmciLCJydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbiIsInJ1bGUiLCJsYWJlbE5vZGUiLCJMYWJlbCIsIm1ldGF2YXJpYWJsZSIsImxhYmVsIiwiZXJyb3JOb2RlIiwiRXJyb3IiLCJlcnJvciIsImxlbW1hTm9kZSIsIkxlbW1hIiwiYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSIsImRlZHVjdGlvbiIsInN1cHBvc2l0aW9ucyIsInNpZ25hdHVyZSIsImh5cG90aGVzZXMiLCJheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVTdHJpbmciLCJheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVTdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwibGVtbWEiLCJmcmFtZU5vZGUiLCJGcmFtZSIsImFzc3VtcHRpb25zIiwiZnJhbWUiLCJwcm9vZk5vZGUiLCJQcm9vZiIsImRlcml2YXRpb24iLCJheGlvbU5vZGUiLCJBeGlvbSIsImF4aW9tIiwic2VjdGlvbk5vZGUiLCJoeXBvdGhlc2lzTm9kZXMiLCJnZXRIeXBvdGhlc2lzTm9kZXMiLCJ0aGVvcmVtIiwiY29uamVjdHVyZSIsInNlY3Rpb25TdHJpbmciLCJzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNBeGlvbUxlbW1hVGhlb3JlbUFuZENvbmplY3R1cmUiLCJzZWN0aW9uIiwiU2VjdGlvbiIsInByZW1pc2VOb2RlIiwiUHJlbWlzZSIsInByb2NlZHVyZUNhbGwiLCJwcmVtaXNlIiwidGhlb3JlbU5vZGUiLCJUaGVvcmVtIiwiZXF1YWxpdHlOb2RlIiwiRXF1YWxpdHkiLCJsZWZ0VGVybU5vZGUiLCJnZXRMZWZ0VGVybU5vZGUiLCJyaWdodFRlcm1Ob2RlIiwiZ2V0UmlnaHRUZXJtTm9kZSIsImxlZnRUZXJtIiwicmlnaHRUZXJtIiwiZXF1YWxpdHkiLCJtZXRhVHlwZU5vZGUiLCJNZXRhVHlwZSIsIm1ldGFUeXBlTmFtZSIsImdldE1ldGFUeXBlTmFtZSIsIm1ldGFUeXBlIiwicHJvcGVydHlOb2RlIiwiUHJvcGVydHkiLCJwcm9wZXJ0eU5hbWUiLCJnZXRQcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0eSIsInZhcmlhYmxlTm9kZSIsIlZhcmlhYmxlIiwiaWRlbnRpZmllciIsInByb3BlcnR5UmVsYXRpb25zIiwidmFyaWFibGUiLCJzdWJwcm9vZk5vZGUiLCJTdWJQcm9vZiIsInN1YkRlcml2YXRpb24iLCJzdWJwcm9vZlN0cmluZyIsInN1YnByb29mU3RyaW5nRnJvbVN1YnByb29mTm9kZSIsInN1YnByb29mIiwic3RhdGVtZW50Tm9kZSIsImdldEVxdWFsaXR5Tm9kZSIsImxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZSIsInJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJkZWR1Y3Rpb25Ob2RlIiwiRGVkdWN0aW9uIiwiU3RhdGVtZW50Iiwic2lnbmF0dXJlTm9kZSIsIlNpZ25hdHVyZSIsInRlcm1zIiwicmVmZXJlbmNlTm9kZSIsIlJlZmVyZW5jZSIsImNvbmplY3R1cmVOb2RlIiwiQ29uamVjdHVyZSIsImp1ZGdlbWVudE5vZGUiLCJKdWRnZW1lbnQiLCJhc3N1bXB0aW9uIiwianVkZ2VtZW50IiwibWV0YUxlbW1hTm9kZSIsIk1ldGFMZW1tYSIsIm1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlIiwic3Vic3RpdHV0aW9ucyIsIm1ldGFMZW1tYU1ldGF0aGVvcmVtU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwibWV0YUxlbW1hIiwicGFyYW1ldGVyTm9kZSIsIlBhcmFtZXRlciIsInBhcmFtZXRlck5hbWUiLCJnZXRQYXJhbWV0ZXJOYW1lIiwicGFyYW1ldGVyIiwiaHlwb3RoZXNlTm9kZSIsIkh5cG90aHNpcyIsImNvbmNsdXNpb25Ob2RlIiwiQ29uY2x1c2lvbiIsImNvbmNsdXNpbm9Ob2RlIiwiY29uY2x1c2lubyIsImFzc3VtcHRpb25Ob2RlIiwiQXNzdW1wdGlvbiIsImRlcml2YXRpb25Ob2RlIiwiRGVyaXZhdGlvbiIsInN0ZXBzT3JTdWJwcm9vZnMiLCJ0eXBlUHJlZml4Tm9kZSIsIlR5cGVQcmVmaXgiLCJ0ZXJtRnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZUZyb21UeXBlUHJlZml4Tm9kZSIsInR5cGVQcmVmaXgiLCJtZXRhdGhlb3JlbU5vZGUiLCJNZXRhdGVob3JlbSIsIm1ldGF0aGVvcmVtIiwibWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZVN0cmluZyIsInJlZmVyZW5jZVN0cmluZyIsImluc3RhbnRpYXRlUmVmZXJlbmNlIiwiaHlwb3RoZXNpc05vZGUiLCJIeXBvdGhlc2lzIiwiaHlwb3RoZXNpcyIsInN1cHBvc2l0aW9uTm9kZSIsIlN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb24iLCJlcXVpdmFsZW5jZU5vZGUiLCJFcXVpdmFsZW5jZSIsImVxdWl2YWxlbmNlU3RyaW5nIiwiZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXMiLCJlcXVpdmFsZW5jZSIsInByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJnZXROYW1lIiwiTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJzdWJEZXJpdmF0aW9uTm9kZSIsIlN1YkRlcml2YXRpb24iLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsIlR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uIiwicHJvY2VkdXJlQ2FsbE5vZGUiLCJQcm9jZWR1cmVDYWxsIiwicGFyYW1ldGVycyIsInByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZUNhbGxTdHJpbmciLCJwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMiLCJzdGVwT3JTdWJwcm9vZk5vZGUiLCJzdGVwT3JTdWJwcm9vZiIsInNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcmVmaXhlZCIsImlzUHJlZml4ZWQiLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsImRlZmluZWRBc3NlcnRpb25Ob2RlIiwiRGVmaW5lZEFzc2VydGlvbiIsIm5lZ2F0ZWQiLCJpc05lZ2F0ZWQiLCJkZWZpbmVkQXNzZXJ0aW9uIiwicHJvcGVydHlSZWxhdGlvbk5vZGUiLCJQcm9wZXJ0eVJlbGF0aW9uIiwicHJvcGVydHlSZWxhdGlvbiIsInRlcm1TdWJzdGl0dXRpb25Ob2RlIiwiVGVybVN1YnN0aXR1dGlvbiIsInRlcm1TdWJzdGl0dXRpb24iLCJmcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJGcmFtZVN1YnN0aXR1dGlvbiIsImZyYW1lU3Vic3RpdHV0aW9uIiwicHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiUHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsIlN1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50cyIsInN1YnByb29mQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIkNvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbiIsInNhdGlzZmllc0Fzc2VydGlvbk5vZGUiLCJTYXRpc2ZpZXNBc3NlcnRpb24iLCJQcm9jZWR1cmVSZWZlcmVuY2UiLCJ2YXJpYWJsZURlY2xhcmF0aW9uIiwidmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJWYXJpYWJsZURlY2xhcmF0aW9uIiwidHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSIsIlR5cGVQcmVmaXhEZWNsYXJhdGlvbiIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbiIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJDb21iaW5hdG9yRGVjbGFyYXRpb24iLCJjb21iaW5hdG9yIiwiY29tYmluYXRvckRlY2xhcmF0aW9uIiwiU2ltcGxlVHlwZURlY2xhcmF0aW9uIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsIlN0YXRlbWVudFN1YnN0aXR1dGlvbiIsInJlc29sdmVkIiwic3Vic3RpdHV0aW9uIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsIlJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29uc3RydWN0b3JEZWNsYXJhdGlvbiIsImNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbiIsIkNvbXBsZXhUeXBlRGVjbGFyYXRpb24iLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwiTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24iLCJzZXRNZXRhVHlwZSIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwiZ2V0UHJvb2ZOb2RlIiwiZ2V0QXhpb21Ob2RlIiwiZ2V0TGVtbWFOb2RlIiwiZ2V0VmFyaWFibGVOb2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImdldFJlZmVyZW5jZU5vZGUiLCJnZXRDb25jbHVzaW9uTm9kZSIsImdldFRoZW9yZW1Ob2RlIiwiZ2V0RnJhbWVOb2RlIiwiZ2V0RGVyaXZhdGlvbk5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwiZ2V0Q29uamVjdHVyZU5vZGUiLCJjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlIiwiZ2V0SnVkZ2VtZW50Tm9kZSIsImdldFRlcm1Ob2RlIiwiZ2V0VHlwZU5vZGUiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSIsImlzU3RlcE5vZGUiLCJnZXRBc3N1bXB0aW9uTm9kZSIsImdldFByb2NlZHVyZUNhbGxOb2RlIiwic2luZ3VsYXJNZXRhdmFyaWFibGVOb2RlIiwiZ2V0U2luZ3VsYXJNZXRhdmFyaWFibGVOb2RlIiwic3ViRGVydmlhdGlvbiIsImdldFN1YkRlcml2YXRpb25Ob2RlIiwiZ2V0VHlwZUFzc2VydGlvbk5vZGUiLCJnZXRTYXRpc2ZpZWRBc3NlcnRpb25Ob2RlIiwic3VicHJvb2ZPclN1YnByb29mTm9kZSIsInN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUiLCJpc1N1YnByb29mTm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwiZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUiLCJnZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSIsImdldExhYmVsTm9kZSIsImdldEZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsInN0ZXBPclN1YnByb29mTm9kZXMiLCJnZXRTdGVwT3JTdWJwcm9vZk5vZGVzIiwibWFwIiwiZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImdldFByb3BlcnR5Tm9kZSIsImdldFNpZ25hdHVyZU5vZGUiLCJnZXREZWR1Y3Rpb25Ob2RlIiwiZ2V0UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsImdldFR5cGVQcmVmaXhOb2RlIiwiQ29tYmluYXRvciIsImdldE1ldGFUeXBlTm9kZSIsImdldFByb3BlcnR5UmVsYXRpb25Ob2RlIiwiQ29uc3RydWN0b3IiLCJ0ZXJtTm9kZXMiLCJsYWJlbE5vZGVzIiwicHJlbWlzZU5vZGVzIiwic3RhdGVtZW50Tm9kZXMiLCJzdXBlclR5cGVOb2RlcyIsInN1cGVyVHlwZU5vZGUiLCJzdXBlclR5cGUiLCJzdXBlclR5cGVzTGVuZ3RoIiwibGVuZ3RoIiwicHVzaCIsInBhcmFtZXRlck5vZGVzIiwiYXNzdW1wdGlvbk5vZGVzIiwic3VwcG9zaXRpb25Ob2RlcyIsInByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyIsImdldExhYmVsTm9kZXMiLCJnZXRQcmVtaXNlTm9kZXMiLCJnZXRBc3N1bXB0aW9uTm9kZXMiLCJnZXRUZXJtTm9kZXMiLCJnZXRTdXBwb3NpdGlvbk5vZGVzIiwiZ2V0UGFyYW1ldGVyTm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsImdldFByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyIsImdldFN1cGVyVHlwZU5vZGVzIiwiZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBbzhEZ0JBO2VBQUFBOztRQTlqREFDO2VBQUFBOztRQXVvQkFDO2VBQUFBOztRQTJ6QkFDO2VBQUFBOztRQW1EQUM7ZUFBQUE7O1FBenZEQUM7ZUFBQUE7O1FBMG5CQUM7ZUFBQUE7O1FBNUZBQztlQUFBQTs7UUEyOUJBQztlQUFBQTs7UUFwNkJBQztlQUFBQTs7UUEzVkFDO2VBQUFBOztRQVZBQztlQUFBQTs7UUEwaEJBQztlQUFBQTs7UUFwRkFDO2VBQUFBOztRQXdFQUM7ZUFBQUE7O1FBOWtCQUM7ZUFBQUE7O1FBMlpBQztlQUFBQTs7UUFpK0JBQztlQUFBQTs7UUFwa0NBQztlQUFBQTs7UUE4MUJBQztlQUFBQTs7UUF5UkFDO2VBQUFBOztRQXQ5Q0FDO2VBQUFBOztRQXd5Q0FDO2VBQUFBOztRQTNnQ0FDO2VBQUFB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