occam-furtle 2.0.331 → 2.0.335
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.
- package/lib/element/expression/negated.js +2 -2
- package/lib/element/nodesQuery.js +2 -2
- package/lib/element/primitive.js +128 -60
- package/lib/element/returnBlock.js +3 -3
- package/lib/element/statement/return.js +2 -2
- package/lib/element/step.js +8 -8
- package/lib/element/term/logical.js +11 -11
- package/lib/element/term.js +19 -5
- package/lib/node/primitive.js +40 -1
- package/lib/utilities/element.js +211 -84
- package/lib/utilities/primitive.js +6 -5
- package/lib/utilities/string.js +42 -14
- package/package.json +4 -4
- package/src/element/expression/negated.js +1 -1
- package/src/element/nodesQuery.js +1 -1
- package/src/element/primitive.js +105 -62
- package/src/element/returnBlock.js +2 -2
- package/src/element/statement/return.js +1 -1
- package/src/element/step.js +6 -6
- package/src/element/term/logical.js +5 -5
- package/src/element/term.js +25 -4
- package/src/node/primitive.js +47 -0
- package/src/utilities/element.js +272 -119
- package/src/utilities/primitive.js +13 -20
- package/src/utilities/string.js +48 -18
- package/test/main.js +0 -113
package/lib/utilities/element.js
CHANGED
|
@@ -30,24 +30,36 @@ _export(exports, {
|
|
|
30
30
|
get arrayAssignmentFromStepNode () {
|
|
31
31
|
return arrayAssignmentFromStepNode;
|
|
32
32
|
},
|
|
33
|
-
get booleanFromPrimitiveNode () {
|
|
34
|
-
return booleanFromPrimitiveNode;
|
|
35
|
-
},
|
|
36
33
|
get bracketedExpressionFromBracketedExpressionNode () {
|
|
37
34
|
return bracketedExpressionFromBracketedExpressionNode;
|
|
38
35
|
},
|
|
39
36
|
get bracketedExpressionFromExpressionNode () {
|
|
40
37
|
return bracketedExpressionFromExpressionNode;
|
|
41
38
|
},
|
|
39
|
+
get bracketedTermFromBracketedTermNode () {
|
|
40
|
+
return bracketedTermFromBracketedTermNode;
|
|
41
|
+
},
|
|
42
|
+
get bracketedTermFromTermNode () {
|
|
43
|
+
return bracketedTermFromTermNode;
|
|
44
|
+
},
|
|
42
45
|
get comparisonExpressionFromComparisonExpressionNode () {
|
|
43
46
|
return comparisonExpressionFromComparisonExpressionNode;
|
|
44
47
|
},
|
|
45
48
|
get comparisonExpressionFromExpressionNode () {
|
|
46
49
|
return comparisonExpressionFromExpressionNode;
|
|
47
50
|
},
|
|
51
|
+
get comparisonTermFromComparisonTermNode () {
|
|
52
|
+
return comparisonTermFromComparisonTermNode;
|
|
53
|
+
},
|
|
54
|
+
get comparisonTermFromTermNode () {
|
|
55
|
+
return comparisonTermFromTermNode;
|
|
56
|
+
},
|
|
48
57
|
get disjunctionFromLogicalExpressionNode () {
|
|
49
58
|
return disjunctionFromLogicalExpressionNode;
|
|
50
59
|
},
|
|
60
|
+
get disjunctionFromLogicalTermNode () {
|
|
61
|
+
return disjunctionFromLogicalTermNode;
|
|
62
|
+
},
|
|
51
63
|
get elseExpressionFromTernaryNode () {
|
|
52
64
|
return elseExpressionFromTernaryNode;
|
|
53
65
|
},
|
|
@@ -72,9 +84,6 @@ _export(exports, {
|
|
|
72
84
|
get expressionFromReduceNode () {
|
|
73
85
|
return expressionFromReduceNode;
|
|
74
86
|
},
|
|
75
|
-
get expressionFromTernaryNode () {
|
|
76
|
-
return expressionFromTernaryNode;
|
|
77
|
-
},
|
|
78
87
|
get expressionFromTypeAndVariableNode () {
|
|
79
88
|
return expressionFromTypeAndVariableNode;
|
|
80
89
|
},
|
|
@@ -96,18 +105,30 @@ _export(exports, {
|
|
|
96
105
|
get labelFromProcedureDeclarationNode () {
|
|
97
106
|
return labelFromProcedureDeclarationNode;
|
|
98
107
|
},
|
|
99
|
-
get
|
|
100
|
-
return
|
|
108
|
+
get leftExpressionFromCompzrisonExpressionNode () {
|
|
109
|
+
return leftExpressionFromCompzrisonExpressionNode;
|
|
101
110
|
},
|
|
102
111
|
get leftExpressionFromLogicalExpressionNode () {
|
|
103
112
|
return leftExpressionFromLogicalExpressionNode;
|
|
104
113
|
},
|
|
114
|
+
get leftTermFromCompzrisonTermNode () {
|
|
115
|
+
return leftTermFromCompzrisonTermNode;
|
|
116
|
+
},
|
|
117
|
+
get leftTermFromLogicalTermNode () {
|
|
118
|
+
return leftTermFromLogicalTermNode;
|
|
119
|
+
},
|
|
105
120
|
get logicalExpressionFromExpressionNode () {
|
|
106
121
|
return logicalExpressionFromExpressionNode;
|
|
107
122
|
},
|
|
108
123
|
get logicalExpressionFromLogicalExpressionNode () {
|
|
109
124
|
return logicalExpressionFromLogicalExpressionNode;
|
|
110
125
|
},
|
|
126
|
+
get logicalTermFromLogicalTermNode () {
|
|
127
|
+
return logicalTermFromLogicalTermNode;
|
|
128
|
+
},
|
|
129
|
+
get logicalTermFromTermNode () {
|
|
130
|
+
return logicalTermFromTermNode;
|
|
131
|
+
},
|
|
111
132
|
get nameFromLabelNode () {
|
|
112
133
|
return nameFromLabelNode;
|
|
113
134
|
},
|
|
@@ -144,8 +165,14 @@ _export(exports, {
|
|
|
144
165
|
get negatedFromComparisonExpressionNode () {
|
|
145
166
|
return negatedFromComparisonExpressionNode;
|
|
146
167
|
},
|
|
147
|
-
get
|
|
148
|
-
return
|
|
168
|
+
get negatedFromComparisonTermNode () {
|
|
169
|
+
return negatedFromComparisonTermNode;
|
|
170
|
+
},
|
|
171
|
+
get negatedTermFromNegatedTermNode () {
|
|
172
|
+
return negatedTermFromNegatedTermNode;
|
|
173
|
+
},
|
|
174
|
+
get negatedTermFromTermNode () {
|
|
175
|
+
return negatedTermFromTermNode;
|
|
149
176
|
},
|
|
150
177
|
get nodeQueryFromExpressionNode () {
|
|
151
178
|
return nodeQueryFromExpressionNode;
|
|
@@ -153,9 +180,6 @@ _export(exports, {
|
|
|
153
180
|
get nodeQueryFromNodeQueryNode () {
|
|
154
181
|
return nodeQueryFromNodeQueryNode;
|
|
155
182
|
},
|
|
156
|
-
get nodesFromPrimitiveNode () {
|
|
157
|
-
return nodesFromPrimitiveNode;
|
|
158
|
-
},
|
|
159
183
|
get nodesQueryFromExpressionNode () {
|
|
160
184
|
return nodesQueryFromExpressionNode;
|
|
161
185
|
},
|
|
@@ -165,9 +189,6 @@ _export(exports, {
|
|
|
165
189
|
get nonsensicalFromReturnBlockNode () {
|
|
166
190
|
return nonsensicalFromReturnBlockNode;
|
|
167
191
|
},
|
|
168
|
-
get numberFromPrimitiveNode () {
|
|
169
|
-
return numberFromPrimitiveNode;
|
|
170
|
-
},
|
|
171
192
|
get objectAssignmentFromObjectAssignmentNode () {
|
|
172
193
|
return objectAssignmentFromObjectAssignmentNode;
|
|
173
194
|
},
|
|
@@ -249,12 +270,18 @@ _export(exports, {
|
|
|
249
270
|
get returnStatementFromReturnStatementNode () {
|
|
250
271
|
return returnStatementFromReturnStatementNode;
|
|
251
272
|
},
|
|
252
|
-
get
|
|
253
|
-
return
|
|
273
|
+
get rightExpressionFromCompzrisonExpressionNode () {
|
|
274
|
+
return rightExpressionFromCompzrisonExpressionNode;
|
|
254
275
|
},
|
|
255
276
|
get rightExpressionFromLogicalExpressionNode () {
|
|
256
277
|
return rightExpressionFromLogicalExpressionNode;
|
|
257
278
|
},
|
|
279
|
+
get rightTermFromCompzrisonTermNode () {
|
|
280
|
+
return rightTermFromCompzrisonTermNode;
|
|
281
|
+
},
|
|
282
|
+
get rightTermFromLogicalTermNode () {
|
|
283
|
+
return rightTermFromLogicalTermNode;
|
|
284
|
+
},
|
|
258
285
|
get someFromExpressionNode () {
|
|
259
286
|
return someFromExpressionNode;
|
|
260
287
|
},
|
|
@@ -267,8 +294,11 @@ _export(exports, {
|
|
|
267
294
|
get stepsFromReturnBlockNode () {
|
|
268
295
|
return stepsFromReturnBlockNode;
|
|
269
296
|
},
|
|
270
|
-
get
|
|
271
|
-
return
|
|
297
|
+
get termFromBracketedTermNode () {
|
|
298
|
+
return termFromBracketedTermNode;
|
|
299
|
+
},
|
|
300
|
+
get termFromNegatedTermNode () {
|
|
301
|
+
return termFromNegatedTermNode;
|
|
272
302
|
},
|
|
273
303
|
get termFromReturnStatementNode () {
|
|
274
304
|
return termFromReturnStatementNode;
|
|
@@ -276,6 +306,9 @@ _export(exports, {
|
|
|
276
306
|
get termFromTermNode () {
|
|
277
307
|
return termFromTermNode;
|
|
278
308
|
},
|
|
309
|
+
get termFromTernaryNode () {
|
|
310
|
+
return termFromTernaryNode;
|
|
311
|
+
},
|
|
279
312
|
get termsArrayFromTermNodes () {
|
|
280
313
|
return termsArrayFromTermNodes;
|
|
281
314
|
},
|
|
@@ -291,8 +324,11 @@ _export(exports, {
|
|
|
291
324
|
get ternaryFromTernaryNode () {
|
|
292
325
|
return ternaryFromTernaryNode;
|
|
293
326
|
},
|
|
294
|
-
get
|
|
295
|
-
return
|
|
327
|
+
get typeFromLogicalExpressionNode () {
|
|
328
|
+
return typeFromLogicalExpressionNode;
|
|
329
|
+
},
|
|
330
|
+
get typeFromLogicalTermNode () {
|
|
331
|
+
return typeFromLogicalTermNode;
|
|
296
332
|
},
|
|
297
333
|
get typeFromNamedParameterNode () {
|
|
298
334
|
return typeFromNamedParameterNode;
|
|
@@ -303,20 +339,29 @@ _export(exports, {
|
|
|
303
339
|
get typeFromParaneterNode () {
|
|
304
340
|
return typeFromParaneterNode;
|
|
305
341
|
},
|
|
342
|
+
get typeFromPrimitiveNode () {
|
|
343
|
+
return typeFromPrimitiveNode;
|
|
344
|
+
},
|
|
306
345
|
get typeFromProcedureAnonymousProcedureNode () {
|
|
307
346
|
return typeFromProcedureAnonymousProcedureNode;
|
|
308
347
|
},
|
|
309
348
|
get typeFromProcedureDeclarationNode () {
|
|
310
349
|
return typeFromProcedureDeclarationNode;
|
|
311
350
|
},
|
|
351
|
+
get typeFromVariableAssignmentsNode () {
|
|
352
|
+
return typeFromVariableAssignmentsNode;
|
|
353
|
+
},
|
|
312
354
|
get typeFromVariableNode () {
|
|
313
355
|
return typeFromVariableNode;
|
|
314
356
|
},
|
|
357
|
+
get valueFromPrimitiveNode () {
|
|
358
|
+
return valueFromPrimitiveNode;
|
|
359
|
+
},
|
|
315
360
|
get variableAssignmentFromTypeAndVariableAssignmentNode () {
|
|
316
361
|
return variableAssignmentFromTypeAndVariableAssignmentNode;
|
|
317
362
|
},
|
|
318
|
-
get
|
|
319
|
-
return
|
|
363
|
+
get variableAssignmentsArrayFromTypeAndVariableAssignmentsNode () {
|
|
364
|
+
return variableAssignmentsArrayFromTypeAndVariableAssignmentsNode;
|
|
320
365
|
},
|
|
321
366
|
get variableAssignmentsFromStepNode () {
|
|
322
367
|
return variableAssignmentsFromStepNode;
|
|
@@ -379,7 +424,13 @@ function someFromSomeNode(someNode, context) {
|
|
|
379
424
|
return some;
|
|
380
425
|
}
|
|
381
426
|
function termFromTermNode(termNode, context) {
|
|
382
|
-
var Term = _elements.default.Term,
|
|
427
|
+
var Term = _elements.default.Term, variable = variableFromTermNode(termNode, context), primitive = primitiveFromTermNode(termNode, context), negatedTerm = negatedTermFromTermNode(termNode, context), logicalTerm = logicalTermFromTermNode(termNode, context), bracketedTerm = bracketedTermFromTermNode(termNode, context), comparisonTerm = comparisonTermFromTermNode(termNode, context), properties = [
|
|
428
|
+
variable,
|
|
429
|
+
negatedTerm,
|
|
430
|
+
logicalTerm,
|
|
431
|
+
bracketedTerm,
|
|
432
|
+
comparisonTerm
|
|
433
|
+
], termString = (0, _string.termStringFromPrimitiveAndProperties)(primitive, properties, context), string = termString, term = new Term(string, variable, primitive, negatedTerm, logicalTerm, bracketedTerm, comparisonTerm);
|
|
383
434
|
return term;
|
|
384
435
|
}
|
|
385
436
|
function termsFromTermsNode(termsNode, context) {
|
|
@@ -403,7 +454,7 @@ function reduceFromReduceNode(reduceNode, context) {
|
|
|
403
454
|
return reduce;
|
|
404
455
|
}
|
|
405
456
|
function ternaryFromTernaryNode(ternaryNode, context) {
|
|
406
|
-
var Ternary = _elements.default.Ternary,
|
|
457
|
+
var Ternary = _elements.default.Ternary, term = termFromTernaryNode(ternaryNode, context), ifExpression = ifExpressionFromTernaryNode(ternaryNode, context), elseExpression = elseExpressionFromTernaryNode(ternaryNode, context), ternaryString = (0, _string.ternaryStringFromTerm)(term), string = ternaryString, ternary = new Ternary(string, term, ifExpression, elseExpression);
|
|
407
458
|
return ternary;
|
|
408
459
|
}
|
|
409
460
|
function variableFromVariableNode(variableNode, context) {
|
|
@@ -428,7 +479,7 @@ function nodeQueryFromNodeQueryNode(nodeQueryNode, context) {
|
|
|
428
479
|
return nodeQuery;
|
|
429
480
|
}
|
|
430
481
|
function primitiveFromPrimitiveNode(primitiveNode, context) {
|
|
431
|
-
var Primitive = _elements.default.Primitive, primitiveString = context.nodeAsString(primitiveNode), string = primitiveString,
|
|
482
|
+
var Primitive = _elements.default.Primitive, primitiveString = context.nodeAsString(primitiveNode), string = primitiveString, type = typeFromPrimitiveNode(primitiveNode, context), value = valueFromPrimitiveNode(primitiveNode, context), primitive = new Primitive(string, type, value);
|
|
432
483
|
return primitive;
|
|
433
484
|
}
|
|
434
485
|
function nodesQueryFromNodesQueryNode(nodesQueryNode, context) {
|
|
@@ -448,12 +499,12 @@ function expressionFromExpressionNode(expressionNode, context) {
|
|
|
448
499
|
variable,
|
|
449
500
|
nodeQuery,
|
|
450
501
|
nodesQuery,
|
|
451
|
-
comparisonExpression,
|
|
452
502
|
returnBlock,
|
|
453
503
|
procedureCall,
|
|
454
504
|
negatedExpression,
|
|
455
505
|
logicalExpression,
|
|
456
|
-
bracketedExpression
|
|
506
|
+
bracketedExpression,
|
|
507
|
+
comparisonExpression
|
|
457
508
|
], expressionString = (0, _string.expressionStringFromPrimitiveAndProperties)(primitive, properties, context), string = expressionString, expression = new Expression(string, variable, primitive, some, every, reduce, ternary, nodeQuery, nodesQuery, returnBlock, procedureCall, negatedExpression, logicalExpression, bracketedExpression, comparisonExpression);
|
|
458
509
|
return expression;
|
|
459
510
|
}
|
|
@@ -493,30 +544,38 @@ function negatedExpressionFromNegatedExpressionNode(negatedExpressionNode, conte
|
|
|
493
544
|
var NegatedExpression = _elements.default.NegatedExpression, node = negatedExpressionNode, string = context.nodeAsString(node), expressionNode = negatedExpressionNode.getExpressionNode(), type = typeFromNegatedExpressionNode(expressionNode, context), expression = expressionFromNegatedExpressionNode(negatedExpressionNode, context), negatedExpression = new NegatedExpression(string, type, expression);
|
|
494
545
|
return negatedExpression;
|
|
495
546
|
}
|
|
547
|
+
function logicalExpressionFromLogicalExpressionNode(logicalExpressionNode, context) {
|
|
548
|
+
var LogicalExpression = _elements.default.LogicalExpression, node = logicalExpressionNode, string = context.nodeAsString(node), type = typeFromLogicalExpressionNode(logicalExpressionNode, context), disjunction = disjunctionFromLogicalExpressionNode(logicalExpressionNode, context), leftExpression = leftExpressionFromLogicalExpressionNode(logicalExpressionNode, context), rightExpression = rightExpressionFromLogicalExpressionNode(logicalExpressionNode, context), logicalExpression = new LogicalExpression(string, type, disjunction, leftExpression, rightExpression);
|
|
549
|
+
return logicalExpression;
|
|
550
|
+
}
|
|
496
551
|
function anonymousProcedureFromAnonymousProcedureNode(anonymousProcedureNode, context) {
|
|
497
552
|
var AnonymousProcedure = _elements.default.AnonymousProcedure, type = typeFromProcedureAnonymousProcedureNode(anonymousProcedureNode, context), parameters = parametersFromAnonymousProcedureNode(anonymousProcedureNode, context), returnBlock = returnBlockFromAnonymousProcedureNode(anonymousProcedureNode, context), nonymousProcedureString = (0, _string.anonymousProcedureStringFromTypeParametersAndReturnBlock)(type, parameters, returnBlock), string = nonymousProcedureString, anonymousProcedure = new AnonymousProcedure(string, type, parameters, returnBlock);
|
|
498
553
|
return anonymousProcedure;
|
|
499
554
|
}
|
|
555
|
+
function variableAssignmentsFromVariableAssignmentsNode(variableAssignmentsNode, context) {
|
|
556
|
+
var VariableAssignments = _elements.default.VariableAssignments, type = typeFromVariableAssignmentsNode(variableAssignmentsNode, context), variableAssignmentsArray = variableAssignmentsArrayFromTypeAndVariableAssignmentsNode(type, variableAssignmentsNode, context), variableAssignmentString = (0, _string.variableAssignmentStringFromTypeAndVariableAssignmentsArray)(type, variableAssignmentsArray), array = variableAssignmentsArray, string = variableAssignmentString, variableAssignments = new VariableAssignments(string, array);
|
|
557
|
+
return variableAssignments;
|
|
558
|
+
}
|
|
500
559
|
function bracketedExpressionFromBracketedExpressionNode(bracketedExpressionNode, context) {
|
|
501
560
|
var BracketedExpression = _elements.default.BracketedExpression, node = bracketedExpressionNode, string = context.nodeAsString(node), expression = expressionFromBracketedExpressionNode(bracketedExpressionNode, context), bracketedExpression = new BracketedExpression(string, expression);
|
|
502
561
|
return bracketedExpression;
|
|
503
562
|
}
|
|
504
|
-
function
|
|
505
|
-
var
|
|
506
|
-
return
|
|
563
|
+
function comparisonExpressionFromComparisonExpressionNode(comparisonExpressionNode, context) {
|
|
564
|
+
var ComparisonExpression = _elements.default.ComparisonExpression, node = comparisonExpressionNode, string = context.nodeAsString(node), negated = negatedFromComparisonExpressionNode(comparisonExpressionNode, context), leftExpression = leftExpressionFromCompzrisonExpressionNode(comparisonExpressionNode, context), rightExpression = rightExpressionFromCompzrisonExpressionNode(comparisonExpressionNode, context), comparisonExpression = new ComparisonExpression(string, negated, leftExpression, rightExpression);
|
|
565
|
+
return comparisonExpression;
|
|
507
566
|
}
|
|
508
567
|
function procedureDeclarationFromProcedureDeclarationNode(procedureDeclarationNode, context) {
|
|
509
568
|
var ProcedureDeclaration = _elements.default.ProcedureDeclaration, procedure = procedureFromProcedureDeclarationNode(procedureDeclarationNode, context), procedureDeclarationString = (0, _string.procedureDeclarationStringFromProcedure)(procedure), string = procedureDeclarationString, procedureDeclaration = new ProcedureDeclaration(string, procedure);
|
|
510
569
|
return procedureDeclaration;
|
|
511
570
|
}
|
|
512
|
-
function comparisonExpressionFromComparisonExpressionNode(comparisonExpressionNode, context) {
|
|
513
|
-
var ComparisonExpression = _elements.default.ComparisonExpression, node = comparisonExpressionNode, string = context.nodeAsString(node), negated = negatedFromComparisonExpressionNode(comparisonExpressionNode, context), leftExpression = leftExpressionFromCompzrisonNode(comparisonExpressionNode, context), rightExpression = rightExpressionFromCompzrisonNode(comparisonExpressionNode, context), comparisonExpression = new ComparisonExpression(string, negated, leftExpression, rightExpression);
|
|
514
|
-
return comparisonExpression;
|
|
515
|
-
}
|
|
516
571
|
function nameFromLabelNode(labelNode, context) {
|
|
517
572
|
var name = labelNode.getName();
|
|
518
573
|
return name;
|
|
519
574
|
}
|
|
575
|
+
function termFromTernaryNode(ternaryNode, context) {
|
|
576
|
+
var termNode = ternaryNode.getTermNode(), term = termFromTermNode(termNode, context);
|
|
577
|
+
return term;
|
|
578
|
+
}
|
|
520
579
|
function variableFromSomeNode(someNode, context) {
|
|
521
580
|
var variableNode = someNode.getVariableNode(), variable = variableFromVariableNode(variableNode, context);
|
|
522
581
|
return variable;
|
|
@@ -561,13 +620,9 @@ function nameFromReferenceNode(referenceNode, context) {
|
|
|
561
620
|
var name = referenceNode.getName();
|
|
562
621
|
return name;
|
|
563
622
|
}
|
|
564
|
-
function
|
|
565
|
-
var
|
|
566
|
-
return
|
|
567
|
-
}
|
|
568
|
-
function nodesFromPrimitiveNode(primitiveNode, context) {
|
|
569
|
-
var nodes = null;
|
|
570
|
-
return nodes;
|
|
623
|
+
function typeFromPrimitiveNode(primitiveNode, context) {
|
|
624
|
+
var type = primitiveNode.getType();
|
|
625
|
+
return type;
|
|
571
626
|
}
|
|
572
627
|
function variableFromReduceNode(reduceNode, context) {
|
|
573
628
|
var variableNode = reduceNode.getVariableNode(), variable = variableFromVariableNode(variableNode, context);
|
|
@@ -585,9 +640,9 @@ function queryFromNodeQueryNode(nodeQueryNode, context) {
|
|
|
585
640
|
var string = nodeQueryNode.getString(), expressionString = string, query = _occamquery.Query.fromExpressionString(expressionString);
|
|
586
641
|
return query;
|
|
587
642
|
}
|
|
588
|
-
function
|
|
589
|
-
var
|
|
590
|
-
return
|
|
643
|
+
function valueFromPrimitiveNode(primitiveNode, context) {
|
|
644
|
+
var value = primitiveNode.getValue();
|
|
645
|
+
return value;
|
|
591
646
|
}
|
|
592
647
|
function queryFromNodesQueryNode(nodesQueryNode, context) {
|
|
593
648
|
var string = nodesQueryNode.getString(), expressionString = string, query = _occamquery.Query.fromExpressionString(expressionString);
|
|
@@ -601,9 +656,29 @@ function everyFromExpressionNode(expressionNode, context) {
|
|
|
601
656
|
}
|
|
602
657
|
return every;
|
|
603
658
|
}
|
|
604
|
-
function
|
|
605
|
-
var
|
|
606
|
-
|
|
659
|
+
function negatedTermFromTermNode(termNode, context) {
|
|
660
|
+
var negatedTerm = null;
|
|
661
|
+
var negatedTermNode = termNode.getNegatedTermNode();
|
|
662
|
+
if (negatedTermNode !== null) {
|
|
663
|
+
negatedTerm = negatedTermFromNegatedTermNode(negatedTermNode, context);
|
|
664
|
+
}
|
|
665
|
+
return negatedTerm;
|
|
666
|
+
}
|
|
667
|
+
function logicalTermFromTermNode(termNode, context) {
|
|
668
|
+
var logicalTerm = null;
|
|
669
|
+
var logicalTermNode = termNode.getLogicalTermNode();
|
|
670
|
+
if (logicalTermNode !== null) {
|
|
671
|
+
logicalTerm = logicalTermFromLogicalTermNode(logicalTermNode, context);
|
|
672
|
+
}
|
|
673
|
+
return logicalTerm;
|
|
674
|
+
}
|
|
675
|
+
function typeFromLogicalTermNode(logicalTermNode, context) {
|
|
676
|
+
var type = _types.BOOLEAN_TYPE;
|
|
677
|
+
return type;
|
|
678
|
+
}
|
|
679
|
+
function termFromNegatedTermNode(negatedTermNode, context) {
|
|
680
|
+
var termNode = negatedTermNode.getTermNode(), term = termFromTermNode(termNode, context);
|
|
681
|
+
return term;
|
|
607
682
|
}
|
|
608
683
|
function expressionFromReduceNode(reduceNode, context) {
|
|
609
684
|
var expressionNode = reduceNode.getExpressionNode(), expression = expressionFromExpressionNode(expressionNode, context);
|
|
@@ -624,10 +699,6 @@ function stepsFromReturnBlockNode(returnBlockNode, context) {
|
|
|
624
699
|
});
|
|
625
700
|
return steps;
|
|
626
701
|
}
|
|
627
|
-
function expressionFromTernaryNode(ternaryNode, context) {
|
|
628
|
-
var expressionNode = ternaryNode.getExpressionNode(), expression = expressionFromExpressionNode(expressionNode, context);
|
|
629
|
-
return expression;
|
|
630
|
-
}
|
|
631
702
|
function variableFromNodeQueryNode(nodeQueryNode, context) {
|
|
632
703
|
var variableNode = nodeQueryNode.getVariableNode(), variable = variableFromVariableNode(variableNode, context);
|
|
633
704
|
return variable;
|
|
@@ -640,6 +711,26 @@ function ternaryFromExpressionNode(expressionNode, context) {
|
|
|
640
711
|
}
|
|
641
712
|
return ternary;
|
|
642
713
|
}
|
|
714
|
+
function bracketedTermFromTermNode(termNode, context) {
|
|
715
|
+
var bracketedTerm = null;
|
|
716
|
+
var bracketedTermNode = termNode.getBracketedTermNode();
|
|
717
|
+
if (bracketedTermNode !== null) {
|
|
718
|
+
bracketedTerm = bracketedTermFromBracketedTermNode(bracketedTermNode, context);
|
|
719
|
+
}
|
|
720
|
+
return bracketedTerm;
|
|
721
|
+
}
|
|
722
|
+
function termFromBracketedTermNode(bracketedTermNode, context) {
|
|
723
|
+
var termNode = bracketedTermNode.getTermNode(), term = termFromTermNode(termNode, context);
|
|
724
|
+
return term;
|
|
725
|
+
}
|
|
726
|
+
function comparisonTermFromTermNode(termNOde, context) {
|
|
727
|
+
var comparisonTerm = null;
|
|
728
|
+
var comparisonTermNode = termNOde.getComparisonTermNode();
|
|
729
|
+
if (comparisonTermNode !== null) {
|
|
730
|
+
comparisonTerm = comparisonTermFromComparisonTermNode(comparisonTermNode, context);
|
|
731
|
+
}
|
|
732
|
+
return comparisonTerm;
|
|
733
|
+
}
|
|
643
734
|
function expressionFromVariableNode(variableNode, context) {
|
|
644
735
|
var expression = null;
|
|
645
736
|
return expression;
|
|
@@ -668,6 +759,10 @@ function nameFromNamedParameterNode(namedParameterNode, context) {
|
|
|
668
759
|
var name = namedParameterNode.getName();
|
|
669
760
|
return name;
|
|
670
761
|
}
|
|
762
|
+
function leftTermFromLogicalTermNode(logicalTermNode, context) {
|
|
763
|
+
var leftTermNode = logicalTermNode.getLeftTermNode(), leftTerm = termFromTermNode(leftTermNode, context);
|
|
764
|
+
return leftTerm;
|
|
765
|
+
}
|
|
671
766
|
function arrayAssignmentFromStepNode(stepNode, context) {
|
|
672
767
|
var arrayAssignment = null;
|
|
673
768
|
var arrayAssignmentNode = stepNode.getArrayAssignmentNode();
|
|
@@ -720,6 +815,14 @@ function nodesQueryFromExpressionNode(expressionNode, context) {
|
|
|
720
815
|
}
|
|
721
816
|
return nodesQuery;
|
|
722
817
|
}
|
|
818
|
+
function rightTermFromLogicalTermNode(logicalTermNode, context) {
|
|
819
|
+
var rightTermNode = logicalTermNode.getRightTermNode(), rightTerm = termFromTermNode(rightTermNode, context);
|
|
820
|
+
return rightTerm;
|
|
821
|
+
}
|
|
822
|
+
function negatedFromComparisonTermNode(comparisonTermNode, context) {
|
|
823
|
+
var negated = comparisonTermNode.isNegated();
|
|
824
|
+
return negated;
|
|
825
|
+
}
|
|
723
826
|
function elseExpressionFromTernaryNode(ternaryNode, context) {
|
|
724
827
|
var elseExpressionNode = ternaryNode.getElseExpressionNode(), elseExpression = expressionFromExpressionNode(elseExpressionNode, context);
|
|
725
828
|
return elseExpression;
|
|
@@ -736,7 +839,7 @@ function typeFromNegatedExpressionNode(negatedExpressionNode, context) {
|
|
|
736
839
|
var type = _types.BOOLEAN_TYPE;
|
|
737
840
|
return type;
|
|
738
841
|
}
|
|
739
|
-
function
|
|
842
|
+
function typeFromLogicalExpressionNode(logicalExpressionNode, context) {
|
|
740
843
|
var type = _types.BOOLEAN_TYPE;
|
|
741
844
|
return type;
|
|
742
845
|
}
|
|
@@ -752,9 +855,21 @@ function referenceFromProcedureCallNode(procedureCallNode, context) {
|
|
|
752
855
|
var referenceNode = procedureCallNode.getReferenceNode(), reference = referenceFromReferenceNode(referenceNode, context);
|
|
753
856
|
return reference;
|
|
754
857
|
}
|
|
755
|
-
function
|
|
756
|
-
var
|
|
757
|
-
return
|
|
858
|
+
function leftTermFromCompzrisonTermNode(comparisonTermNode, context) {
|
|
859
|
+
var leftTermNode = comparisonTermNode.getLeftTermNode(), leftTerm = termFromTermNode(leftTermNode, context);
|
|
860
|
+
return leftTerm;
|
|
861
|
+
}
|
|
862
|
+
function disjunctionFromLogicalTermNode(logicalTermNode, context) {
|
|
863
|
+
var disjunction = logicalTermNode.isDisjunction();
|
|
864
|
+
return disjunction;
|
|
865
|
+
}
|
|
866
|
+
function negatedTermFromNegatedTermNode(negatedTermNode, context) {
|
|
867
|
+
var NegatedTerm = _elements.default.NegatedTerm, node = negatedTermNode, string = context.nodeAsString(node), termNode = negatedTermNode.getTermNode(), type = typeFromNegatedTermNode(termNode, context), term = termFromNegatedTermNode(negatedTermNode, context), negatedTerm = new NegatedTerm(string, type, term);
|
|
868
|
+
return negatedTerm;
|
|
869
|
+
}
|
|
870
|
+
function logicalTermFromLogicalTermNode(logicalTermNode, context) {
|
|
871
|
+
var LogicalTerm = _elements.default.LogicalTerm, node = logicalTermNode, string = context.nodeAsString(node), type = typeFromLogicalTermNode(logicalTermNode, context), disjunction = disjunctionFromLogicalTermNode(logicalTermNode, context), leftTerm = leftTermFromLogicalTermNode(logicalTermNode, context), rightTerm = rightTermFromLogicalTermNode(logicalTermNode, context), logicalTerm = new LogicalTerm(string, type, disjunction, leftTerm, rightTerm);
|
|
872
|
+
return logicalTerm;
|
|
758
873
|
}
|
|
759
874
|
function variableFromTypeAndVariableNode(type, variableNode, context) {
|
|
760
875
|
var Variable = _elements.default.Variable, name = nameFromVariableNode(variableNode), expression = expressionFromTypeAndVariableNode(type, variableNode, context), variableString = (0, _string.variableStringFromName)(name), string = variableString, variable = new Variable(string, type, name, expression);
|
|
@@ -784,18 +899,22 @@ function procedureCallFromExpressionNode(expressionNode, context) {
|
|
|
784
899
|
}
|
|
785
900
|
return procedureCall;
|
|
786
901
|
}
|
|
902
|
+
function rightTermFromCompzrisonTermNode(comparisonTermNode, context) {
|
|
903
|
+
var rightTermNode = comparisonTermNode.getLeftTermNode(), rightTerm = termFromTermNode(rightTermNode, context);
|
|
904
|
+
return rightTerm;
|
|
905
|
+
}
|
|
787
906
|
function variableFromArrayAssignmentNode(arrayAssignmentNode, context) {
|
|
788
907
|
var variableNode = arrayAssignmentNode.getVariableNode(), variable = variableFromVariableNode(variableNode, context);
|
|
789
908
|
return variable;
|
|
790
909
|
}
|
|
910
|
+
function typeFromVariableAssignmentsNode(variableAssignmentsNode, context) {
|
|
911
|
+
var type = variableAssignmentsNode.getType();
|
|
912
|
+
return type;
|
|
913
|
+
}
|
|
791
914
|
function anonymousProcedureFromReduceNode(reduceNode, context) {
|
|
792
915
|
var anonymousProcedureNode = reduceNode.getAnonymousProcedureNode(), anonymousProcedure = anonymousProcedureFromAnonymousProcedureNode(anonymousProcedureNode, context);
|
|
793
916
|
return anonymousProcedure;
|
|
794
917
|
}
|
|
795
|
-
function leftExpressionFromCompzrisonNode(comparisonExpressionNode, context) {
|
|
796
|
-
var leftExpressionNode = comparisonExpressionNode.getLeftExpressionNode(), leftExpression = expressionFromExpressionNode(leftExpressionNode, context);
|
|
797
|
-
return leftExpression;
|
|
798
|
-
}
|
|
799
918
|
function variableFromObjectAssignmentNode(objectAssignmentNode, context) {
|
|
800
919
|
var variableNode = objectAssignmentNode.getVariableNode(), variable = variableFromVariableNode(variableNode, context);
|
|
801
920
|
return variable;
|
|
@@ -808,10 +927,6 @@ function expressionFromTypeAndVariableNode(type, variableNode, context) {
|
|
|
808
927
|
var expression = null;
|
|
809
928
|
return expression;
|
|
810
929
|
}
|
|
811
|
-
function rightExpressionFromCompzrisonNode(comparisonExpressionNode, context) {
|
|
812
|
-
var rightExpressionNode = comparisonExpressionNode.getLeftExpressionNode(), rightExpression = expressionFromExpressionNode(rightExpressionNode, context);
|
|
813
|
-
return rightExpression;
|
|
814
|
-
}
|
|
815
930
|
function parametersFromArrayAssignmentNode(arrayAssignmentNode, context) {
|
|
816
931
|
var parametersNode = arrayAssignmentNode.getParametersNode(), parameters = parametersFromParametersNode(parametersNode, context);
|
|
817
932
|
return parameters;
|
|
@@ -824,6 +939,10 @@ function returnStatementFromReturnBlockNode(returnBlockNode, context) {
|
|
|
824
939
|
var returnStatementNode = returnBlockNode.getReturnStatementNode(), returnStatement = returnStatementFromReturnStatementNode(returnStatementNode, context);
|
|
825
940
|
return returnStatement;
|
|
826
941
|
}
|
|
942
|
+
function bracketedTermFromBracketedTermNode(bracketedTermNode, context) {
|
|
943
|
+
var BracketedTerm = _elements.default.BracketedTerm, node = bracketedTermNode, string = context.nodeAsString(node), term = termFromBracketedTermNode(bracketedTermNode, context), bracketedTerm = new BracketedTerm(string, term);
|
|
944
|
+
return bracketedTerm;
|
|
945
|
+
}
|
|
827
946
|
function negatedExpressionFromExpressionNode(expressionNode, context) {
|
|
828
947
|
var negatedExpression = null;
|
|
829
948
|
var negatedExpressionNode = expressionNode.getNegatedExpressionNode();
|
|
@@ -832,6 +951,14 @@ function negatedExpressionFromExpressionNode(expressionNode, context) {
|
|
|
832
951
|
}
|
|
833
952
|
return negatedExpression;
|
|
834
953
|
}
|
|
954
|
+
function expressionFromNegatedExpressionNode(negatedExpressionNode, context) {
|
|
955
|
+
var expressionNode = negatedExpressionNode.getExpressionNode(), expression = expressionFromExpressionNode(expressionNode, context);
|
|
956
|
+
return expression;
|
|
957
|
+
}
|
|
958
|
+
function negatedFromComparisonExpressionNode(comparisonExpressionNode, context) {
|
|
959
|
+
var negated = comparisonExpressionNode.isNegated();
|
|
960
|
+
return negated;
|
|
961
|
+
}
|
|
835
962
|
function logicalExpressionFromExpressionNode(expressionNode, context) {
|
|
836
963
|
var logicalExpression = null;
|
|
837
964
|
var logicalExpressionNode = expressionNode.getLogicalExpressionNode();
|
|
@@ -840,14 +967,6 @@ function logicalExpressionFromExpressionNode(expressionNode, context) {
|
|
|
840
967
|
}
|
|
841
968
|
return logicalExpression;
|
|
842
969
|
}
|
|
843
|
-
function negatedFromComparisonExpressionNode(comparisonExpressionNode, context) {
|
|
844
|
-
var negated = comparisonExpressionNode.isNegated();
|
|
845
|
-
return negated;
|
|
846
|
-
}
|
|
847
|
-
function expressionFromNegatedExpressionNode(negatedExpressionNode, context) {
|
|
848
|
-
var expressionNode = negatedExpressionNode.getExpressionNode(), expression = expressionFromExpressionNode(expressionNode, context);
|
|
849
|
-
return expression;
|
|
850
|
-
}
|
|
851
970
|
function expressionFromVariableAssignmentNode(variableAssigmentNode, context) {
|
|
852
971
|
var expressionNode = variableAssigmentNode.getExpressionNode(), expression = expressionFromExpressionNode(expressionNode, context);
|
|
853
972
|
return expression;
|
|
@@ -860,10 +979,18 @@ function parametersFromAnonymousProcedureNode(anonymousProcedureNode, context) {
|
|
|
860
979
|
var parametersNode = anonymousProcedureNode.getParametersNode(), parameters = parametersFromParametersNode(parametersNode, context);
|
|
861
980
|
return parameters;
|
|
862
981
|
}
|
|
982
|
+
function comparisonTermFromComparisonTermNode(comparisonTermNode, context) {
|
|
983
|
+
var ComparisonTerm = _elements.default.ComparisonTerm, node = comparisonTermNode, string = context.nodeAsString(node), negated = negatedFromComparisonTermNode(comparisonTermNode, context), leftTerm = leftTermFromCompzrisonTermNode(comparisonTermNode, context), rightTerm = rightTermFromCompzrisonTermNode(comparisonTermNode, context), comparisonTerm = new ComparisonTerm(string, negated, leftTerm, rightTerm);
|
|
984
|
+
return comparisonTerm;
|
|
985
|
+
}
|
|
863
986
|
function returnBlockFromAnonymousProcedureNode(anonymousProcedureNode, context) {
|
|
864
987
|
var returnBlockNode = anonymousProcedureNode.getReturnBlockNode(), returnBlock = returnBlockFromReturnBlockNode(returnBlockNode, context);
|
|
865
988
|
return returnBlock;
|
|
866
989
|
}
|
|
990
|
+
function procedureFromProcedureDeclarationNode(procedureDeclarationNode, context) {
|
|
991
|
+
var Procedure = _elements.default.Procedure, type = typeFromProcedureDeclarationNode(procedureDeclarationNode, context), label = labelFromProcedureDeclarationNode(procedureDeclarationNode, context), parameters = parametersFromProcedureDeclarationNode(procedureDeclarationNode, context), returnBlock = returnBlockFromProcedureDeclarationNode(procedureDeclarationNode, context), procedureString = (0, _string.procedureStringFromTypeLabelParametersAndReturnBlock)(type, label, parameters, returnBlock), string = procedureString, procedure = new Procedure(string, type, label, parameters, returnBlock);
|
|
992
|
+
return procedure;
|
|
993
|
+
}
|
|
867
994
|
function bracketedExpressionFromExpressionNode(expressionNode, context) {
|
|
868
995
|
var bracketedExpression = null;
|
|
869
996
|
var bracketedExpressionNode = expressionNode.getBracketedExpressionNode();
|
|
@@ -876,10 +1003,6 @@ function expressionFromBracketedExpressionNode(bracketedExpressionNode, context)
|
|
|
876
1003
|
var expressionNode = bracketedExpressionNode.getExpressionNode(), expression = expressionFromExpressionNode(expressionNode, context);
|
|
877
1004
|
return expression;
|
|
878
1005
|
}
|
|
879
|
-
function procedureFromProcedureDeclarationNode(procedureDeclarationNode, context) {
|
|
880
|
-
var Procedure = _elements.default.Procedure, type = typeFromProcedureDeclarationNode(procedureDeclarationNode, context), label = labelFromProcedureDeclarationNode(procedureDeclarationNode, context), parameters = parametersFromProcedureDeclarationNode(procedureDeclarationNode, context), returnBlock = returnBlockFromProcedureDeclarationNode(procedureDeclarationNode, context), procedureString = (0, _string.procedureStringFromTypeLabelParametersAndReturnBlock)(type, label, parameters, returnBlock), string = procedureString, procedure = new Procedure(string, type, label, parameters, returnBlock);
|
|
881
|
-
return procedure;
|
|
882
|
-
}
|
|
883
1006
|
function comparisonExpressionFromExpressionNode(expressionNOde, context) {
|
|
884
1007
|
var comparisonExpression = null;
|
|
885
1008
|
var comparisonExpressionNode = expressionNOde.getComparisonExpressionNode();
|
|
@@ -912,12 +1035,16 @@ function variableFromTypeAndVariableAssignmentNode(type, variableAssignmentNode,
|
|
|
912
1035
|
var variableNode = variableAssignmentNode.getVariableNode(), variable = variableFromTypeAndVariableNode(type, variableNode, context);
|
|
913
1036
|
return variable;
|
|
914
1037
|
}
|
|
915
|
-
function
|
|
916
|
-
var
|
|
917
|
-
return
|
|
1038
|
+
function leftExpressionFromCompzrisonExpressionNode(comparisonExpressionNode, context) {
|
|
1039
|
+
var leftExpressionNode = comparisonExpressionNode.getLeftExpressionNode(), leftExpression = expressionFromExpressionNode(leftExpressionNode, context);
|
|
1040
|
+
return leftExpression;
|
|
1041
|
+
}
|
|
1042
|
+
function rightExpressionFromCompzrisonExpressionNode(comparisonExpressionNode, context) {
|
|
1043
|
+
var rightExpressionNode = comparisonExpressionNode.getLeftExpressionNode(), rightExpression = expressionFromExpressionNode(rightExpressionNode, context);
|
|
1044
|
+
return rightExpression;
|
|
918
1045
|
}
|
|
919
1046
|
function variableAssignmentFromTypeAndVariableAssignmentNode(type, variableAssignmentNode, context) {
|
|
920
|
-
var VariableAssignment = _elements.default.VariableAssignment, variable = variableFromTypeAndVariableAssignmentNode(type, variableAssignmentNode, context), expression = expressionFromVariableAssignmentNode(variableAssignmentNode, context), variableAssignmentString = (0, _string.
|
|
1047
|
+
var VariableAssignment = _elements.default.VariableAssignment, variable = variableFromTypeAndVariableAssignmentNode(type, variableAssignmentNode, context), expression = expressionFromVariableAssignmentNode(variableAssignmentNode, context), variableAssignmentString = (0, _string.variableAssignmentStringFromTypeAndVariable)(type, variable, context), string = variableAssignmentString, assignment = new VariableAssignment(string, variable, expression);
|
|
921
1048
|
return assignment;
|
|
922
1049
|
}
|
|
923
1050
|
function termsArrayFromTermNodes(termNodes, context) {
|
|
@@ -941,12 +1068,12 @@ function namedParamtersArrayFromNamedParameterNodes(namedParameterNodes, context
|
|
|
941
1068
|
});
|
|
942
1069
|
return namedParamtersArray;
|
|
943
1070
|
}
|
|
944
|
-
function
|
|
945
|
-
var
|
|
1071
|
+
function variableAssignmentsArrayFromTypeAndVariableAssignmentsNode(type, variableAssignmentsNode, context) {
|
|
1072
|
+
var variableAssignmentNodes = variableAssignmentsNode.getVariableAssignmentNodes(), variableAssignmentsArray = variableAssignmentNodes.map(function(variableAssignmentNode) {
|
|
946
1073
|
var variableAssignment = variableAssignmentFromTypeAndVariableAssignmentNode(type, variableAssignmentNode, context);
|
|
947
1074
|
return variableAssignment;
|
|
948
1075
|
});
|
|
949
1076
|
return variableAssignmentsArray;
|
|
950
1077
|
}
|
|
951
1078
|
|
|
952
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tcXVlcnlcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBCT09MRUFOX1RZUEUgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUsXG4gICAgICAgICBwcm9jZWR1cmVEZWNsYXJhdGlvblN0cmluZ0Zyb21Qcm9jZWR1cmUsXG4gICAgICAgICByZXR1cm5CbG9ja1N0cmluZ0Zyb21SZXR1cm5TdGF0ZW1lbnROb2RlLFxuICAgICAgICAgZXhwcmVzc2lvblN0cmluZ0Zyb21QcmltaXRpdmVBbmRQcm9wZXJ0aWVzLFxuICAgICAgICAgc29tZVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSxcbiAgICAgICAgIGV2ZXJ5U3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlLFxuICAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVZhcmlhYmxlLFxuICAgICAgICAgcHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVMYWJlbFBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayxcbiAgICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21WYXJpYWJsZUFzc2lnbm1lbnRzQXJyYXksXG4gICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmdGcm9tVHlwZVBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayxcbiAgICAgICAgIHJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGVwIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0ZXBOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBhcnJheUFzc2lnbm1lbnQgPSBhcnJheUFzc2lnbm1lbnRGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBvYmplY3RBc3NpZ21lbnQgPSBvYmplY3RBc3NpZ25tZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVzRGVjbGFyYXRpb24gPSB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RlcCA9IG5ldyBTdGVwKHN0cmluZywgYXJyYXlBc3NpZ25tZW50LCBvYmplY3RBc3NpZ21lbnQsIHZhcmlhYmxlc0RlY2xhcmF0aW9uKTtcblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTb21lIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNvbWVTdHJpbmcgPSBzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlKHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpLFxuICAgICAgICBzdHJpbmcgPSBzb21lU3RyaW5nLCAgLy8vXG4gICAgICAgIHNvbWUgPSBuZXcgU29tZShzdHJpbmcsIHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpO1xuXG4gIHJldHVybiBzb21lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdGVybU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtID0gbmV3IFRlcm0oc3RyaW5nLCB2YXJpYWJsZSwgcHJpbWl0aXZlKTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbVRlcm1zTm9kZSh0ZXJtc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtcyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtc05vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdGVybU5vZGVzID0gdGVybXNOb2RlLmdldFRlcm1Ob2RlcygpLFxuICAgICAgICB0ZXJtc0FycmF5ID0gdGVybXNBcnJheUZyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSB0ZXJtc0FycmF5LCAvLy9cbiAgICAgICAgdGVybXMgPSBuZXcgVGVybXMoc3RyaW5nLCBhcnJheSk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JGcm9tRXJyb3JOb2RlKGVycm9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVycm9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVycm9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihzdHJpbmcpO1xuXG4gIHJldHVybiBlcnJvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5RnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFdmVyeSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXZlcnlTdHJpbmcgPSBldmVyeVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSh2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKSxcbiAgICAgICAgc3RyaW5nID0gZXZlcnlTdHJpbmcsIC8vL1xuICAgICAgICBldmVyeSA9IG5ldyBFdmVyeShzdHJpbmcsIHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpO1xuXG4gIHJldHVybiBldmVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBsYWJlbE5vZGUsXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBuZXcgTGFiZWwoc3RyaW5nLCBuYW1lKTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2VGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVkdWNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpbml0aWFsRXhwcmVzc2lvbiA9IGluaXRpYWxFeHByZXNzaW9uRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWR1Y2VTdHJpbmcgPSByZWR1Y2VTdHJpbmdGcm9tVmFyaWFibGVJbml0aWFsRXhwcmVzc2lvbkFuZEFub255bW91c1Byb2NlZHVyZSh2YXJpYWJsZSwgaW5pdGlhbEV4cHJlc3Npb24sIGFub255bW91c1Byb2NlZHVyZSksXG4gICAgICAgIHN0cmluZyA9IHJlZHVjZVN0cmluZywgIC8vL1xuICAgICAgICByZWR1Y2UgPSBuZXcgUmVkdWNlKHN0cmluZywgdmFyaWFibGUsIGluaXRpYWxFeHByZXNzaW9uLCBhbm9ueW1vdXNQcm9jZWR1cmUpO1xuXG4gIHJldHVybiByZWR1Y2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJuYXJ5RnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybmFyeSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJuYXJ5Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGlmRXhwcmVzc2lvbiA9IGlmRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGVsc2VFeHByZXNzaW9uID0gZWxzZUV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJuYXJ5ID0gbmV3IFRlcm5hcnkoc3RyaW5nLCBleHByZXNzaW9uLCBpZkV4cHJlc3Npb24sIGVsc2VFeHByZXNzaW9uKTtcblxuICByZXR1cm4gdGVybmFyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKHN0cmluZywgdHlwZSwgbmFtZSwgZXhwcmVzc2lvbik7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IG5ldyBSZWZlcmVuY2Uoc3RyaW5nLCBuYW1lKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBsZXQgcGFyYW1ldGVyID0gbnVsbDtcblxuICBjb25zdCB0eXBlID0gdHlwZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gIGlmICh0eXBlICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBQYXJhbWV0ZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJOb2RlLCAvLy9cbiAgICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgICBuYW1lID0gbmFtZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gICAgcGFyYW1ldGVyID0gbmV3IFBhcmFtZXRlcihzdHJpbmcsIHR5cGUsIG5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHBhcmFtZXRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZGVRdWVyeUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBOb2RlUXVlcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbm9kZVF1ZXJ5Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHF1ZXJ5ID0gcXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9kZVF1ZXJ5ID0gbmV3IE5vZGVRdWVyeShzdHJpbmcsIHZhcmlhYmxlLCBxdWVyeSk7XG5cbiAgcmV0dXJuIG5vZGVRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW1pdGl2ZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcmltaXRpdmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwcmltaXRpdmVTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhwcmltaXRpdmVOb2RlKSxcbiAgICAgICAgc3RyaW5nID0gcHJpbWl0aXZlU3RyaW5nLCAvLy9cbiAgICAgICAgbm9kZSA9IG5vZGVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9kZXMgPSBub2Rlc0Zyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBudW1iZXIgPSBudW1iZXJGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYm9vbGVhbiA9IGJvb2xlYW5Gcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nTGl0ZXJhbCA9IHN0cmluZ0xpdGVyYWxGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJpbWl0aXZlID0gbmV3IFByaW1pdGl2ZShzdHJpbmcsIG5vZGUsIG5vZGVzLCBudW1iZXIsIGJvb2xlYW4sIHN0cmluZ0xpdGVyYWwpO1xuXG4gIHJldHVybiBwcmltaXRpdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2Rlc1F1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTm9kZXNRdWVyeSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBub2Rlc1F1ZXJ5Tm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHF1ZXJ5ID0gcXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub2Rlc1F1ZXJ5ID0gbmV3IE5vZGVzUXVlcnkoc3RyaW5nLCB2YXJpYWJsZSwgcXVlcnkpO1xuXG4gIHJldHVybiBub2Rlc1F1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJzTm9kZShwYXJhbWV0ZXJzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlcnMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcGFyYW1ldGVyc05vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHBhcmFtdGVyc0FycmF5ID0gcGFyYW10ZXJzQXJyYXlGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpLFxuICAgICAgICBhcnJheSA9IHBhcmFtdGVyc0FycmF5LCAvLy9cbiAgICAgICAgcGFyYW1ldGVycyA9IG5ldyBQYXJhbWV0ZXJzKHN0cmluZywgYXJyYXkpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEV4cHJlc3Npb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJpbWl0aXZlID0gcHJpbWl0aXZlRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc29tZSA9IHNvbWVGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBldmVyeSA9IGV2ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVkdWNlID0gcmVkdWNlRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybmFyeSA9IHRlcm5hcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub2RlUXVlcnkgPSBub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5lZ2F0ZWRFeHByZXNzaW9uID0gbmVnYXRlZEV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsb2dpY2FsRXhwcmVzc2lvbiA9IGxvZ2ljYWxFeHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJhY2tldGVkRXhwcmVzc2lvbiA9IGJyYWNrZXRlZEV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb21wYXJpc29uRXhwcmVzc2lvbiA9IGNvbXBhcmlzb25FeHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICBzb21lLFxuICAgICAgICAgIGV2ZXJ5LFxuICAgICAgICAgIHJlZHVjZSxcbiAgICAgICAgICB0ZXJuYXJ5LFxuICAgICAgICAgIHZhcmlhYmxlLFxuICAgICAgICAgIG5vZGVRdWVyeSxcbiAgICAgICAgICBub2Rlc1F1ZXJ5LFxuICAgICAgICAgIGNvbXBhcmlzb25FeHByZXNzaW9uLFxuICAgICAgICAgIHJldHVybkJsb2NrLFxuICAgICAgICAgIHByb2NlZHVyZUNhbGwsXG4gICAgICAgICAgbmVnYXRlZEV4cHJlc3Npb24sXG4gICAgICAgICAgbG9naWNhbEV4cHJlc3Npb24sXG4gICAgICAgICAgYnJhY2tldGVkRXhwcmVzc2lvblxuICAgICAgICBdLFxuICAgICAgICBleHByZXNzaW9uU3RyaW5nID0gZXhwcmVzc2lvblN0cmluZ0Zyb21QcmltaXRpdmVBbmRQcm9wZXJ0aWVzKHByaW1pdGl2ZSwgcHJvcGVydGllcywgY29udGV4dCksXG4gICAgICAgIHN0cmluZyA9IGV4cHJlc3Npb25TdHJpbmcsICAvLy9cbiAgICAgICAgZXhwcmVzc2lvbiA9IG5ldyBFeHByZXNzaW9uKHN0cmluZywgdmFyaWFibGUsIHByaW1pdGl2ZSwgc29tZSwgZXZlcnksIHJlZHVjZSwgdGVybmFyeSwgbm9kZVF1ZXJ5LCBub2Rlc1F1ZXJ5LCByZXR1cm5CbG9jaywgcHJvY2VkdXJlQ2FsbCwgbmVnYXRlZEV4cHJlc3Npb24sIGxvZ2ljYWxFeHByZXNzaW9uLCBicmFja2V0ZWRFeHByZXNzaW9uLCBjb21wYXJpc29uRXhwcmVzc2lvbik7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmV0dXJuQmxvY2sgfSA9IGVsZW1lbnRzLFxuICAgICAgICBzdGVwcyA9IHN0ZXBzRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpLFxuICAgICAgICBub25zZW5zaWNhbCA9IG5vbnNlbnNpY2FsRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5TdGF0ZW1lbnQgPSByZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJldHVybkJsb2NrU3RyaW5nID0gcmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnQpLFxuICAgICAgICBzdHJpbmcgPSByZXR1cm5CbG9ja1N0cmluZywgLy8vXG4gICAgICAgIHJldHVybkJsb2NrID0gbmV3IFJldHVybkJsb2NrKHN0cmluZywgc3RlcHMsIG5vbnNlbnNpY2FsLCByZXR1cm5TdGF0ZW1lbnQpO1xuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVDYWxsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCksXG4gICAgICAgIGV4cHJlc3Npb25zID0gdGVybXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gbmV3IFByb2NlZHVyZUNhbGwoc3RyaW5nLCByZWZlcmVuY2UsIGV4cHJlc3Npb25zKTtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVkUGFyYW1ldGVyRnJvbU5hbWVkUGFyYW1ldGVyTm9kZShuYW1lZFBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBOYW1lZFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBuYW1lZFBhcmFtZXRlck5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbU5hbWVkUGFyYW1ldGVyTm9kZShuYW1lZFBhcmFtZXRlck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21OYW1lZFBhcmFtZXRlck5vZGUobmFtZWRQYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYWxpYXMgPSBhbGlhc0Zyb21OYW1lZFBhcmFtZXRlck5vZGUobmFtZWRQYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmFtZWRQYXJhbWV0ZXIgPSBuZXcgTmFtZWRQYXJhbWV0ZXIoc3RyaW5nLCB0eXBlLCBuYW1lLCBhbGlhcyk7XG5cbiAgcmV0dXJuIG5hbWVkUGFyYW1ldGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRQYXJhbWV0ZXJzRnJvbU5hbWVkUGFyYW1ldGVyc05vZGUobmFtZWRQYXJhbWV0ZXJzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5hbWVkUGFyYW1ldGVycyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBuYW1lZFBhcmFtZXRlcnNOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG5hbWVkUGFyYW1ldGVyTm9kZXMgPSBuYW1lZFBhcmFtZXRlcnNOb2RlLmdldE5hbWVkUGFyYW1ldGVyTm9kZXMoKSxcbiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzQXJyYXkgPSBuYW1lZFBhcmFtdGVyc0FycmF5RnJvbU5hbWVkUGFyYW1ldGVyTm9kZXMobmFtZWRQYXJhbWV0ZXJOb2RlcywgY29udGV4dCksXG4gICAgICAgIGFycmF5ID0gbmFtZWRQYXJhbWV0ZXJzQXJyYXksIC8vL1xuICAgICAgICBuYW1lZFBhcmFtZXRlcnMgPSBuZXcgTmFtZWRQYXJhbWV0ZXJzKHN0cmluZywgYXJyYXkpO1xuXG4gIHJldHVybiBuYW1lZFBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUFzc2lnbm1lbnRGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZShhcnJheUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQXJyYXlBc3NpZ25tZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGFycmF5QXNzaWdubWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhcnJheUFzc2lnbm1lbnQgPSBuZXcgQXJyYXlBc3NpZ25tZW50KHN0cmluZywgdmFyaWFibGUsIHBhcmFtZXRlcnMpO1xuXG4gIHJldHVybiBhcnJheUFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmV0dXJuU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJldHVyblN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuU3RhdGVtZW50ID0gbmV3IFJldHVyblN0YXRlbWVudChzdHJpbmcsIHRlcm0pO1xuXG4gIHJldHVybiByZXR1cm5TdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lZFBhcmFtZXRlcnNGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZWRQYXJhbWV0ZXJzTm9kZSA9IG9iamVjdEFzc2lnbm1lbnROb2RlLmdldE5hbWVkUGFyYW1ldGVyc05vZGUoKSxcbiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzID0gbmFtZWRQYXJhbWV0ZXJzRnJvbU5hbWVkUGFyYW1ldGVyc05vZGUobmFtZWRQYXJhbWV0ZXJzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG5hbWVkUGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdEFzc2lnbm1lbnRGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBPYmplY3RBc3NpZ21lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gb2JqZWN0QXNzaWdubWVudE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lZFBhcmFtZXRlcnMgPSBuYW1lZFBhcmFtZXRlcnNGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBvYmplY3RBc3NpZ25tZW50ID0gbmV3IE9iamVjdEFzc2lnbWVudChzdHJpbmcsIHZhcmlhYmxlLCBuYW1lZFBhcmFtZXRlcnMpO1xuXG4gIHJldHVybiBvYmplY3RBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZEV4cHJlc3Npb25Gcm9tTmVnYXRlZEV4cHJlc3Npb25Ob2RlKG5lZ2F0ZWRFeHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5lZ2F0ZWRFeHByZXNzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5lZ2F0ZWRFeHByZXNzaW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBleHByZXNzaW9uTm9kZSA9IG5lZ2F0ZWRFeHByZXNzaW9uTm9kZS5nZXRFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21OZWdhdGVkRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21OZWdhdGVkRXhwcmVzc2lvbk5vZGUobmVnYXRlZEV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmVnYXRlZEV4cHJlc3Npb24gPSBuZXcgTmVnYXRlZEV4cHJlc3Npb24oc3RyaW5nLCB0eXBlLCBleHByZXNzaW9uKTtcblxuICByZXR1cm4gbmVnYXRlZEV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQW5vbnltb3VzUHJvY2VkdXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvY2VkdXJlQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub255bW91c1Byb2NlZHVyZVN0cmluZyA9IGFub255bW91c1Byb2NlZHVyZVN0cmluZ0Zyb21UeXBlUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrKHR5cGUsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKSxcbiAgICAgICAgc3RyaW5nID0gbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcsIC8vL1xuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBuZXcgQW5vbnltb3VzUHJvY2VkdXJlKHN0cmluZywgdHlwZSwgcGFyYW1ldGVycywgcmV0dXJuQmxvY2spO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmFja2V0ZWRFeHByZXNzaW9uRnJvbUJyYWNrZXRlZEV4cHJlc3Npb25Ob2RlKGJyYWNrZXRlZEV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQnJhY2tldGVkRXhwcmVzc2lvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBicmFja2V0ZWRFeHByZXNzaW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLCAgLy8vXG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUJyYWNrZXRlZEV4cHJlc3Npb25Ob2RlKGJyYWNrZXRlZEV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJhY2tldGVkRXhwcmVzc2lvbiA9IG5ldyBCcmFja2V0ZWRFeHByZXNzaW9uKHN0cmluZywgZXhwcmVzc2lvbik7XG5cbiAgcmV0dXJuIGJyYWNrZXRlZEV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVBc3NpZ25tZW50cyB9ID0gZWxlbWVudHMsXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSA9IHZhcmlhYmxlQXNzaWdubWVudHNBcnJheUZyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZyA9IHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21WYXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkodmFyaWFibGVBc3NpZ25tZW50c0FycmF5KSxcbiAgICAgICAgYXJyYXkgPSB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXksIC8vL1xuICAgICAgICBzdHJpbmcgPSB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcsICAvLy9cbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50cyA9IG5ldyBWYXJpYWJsZUFzc2lnbm1lbnRzKHN0cmluZywgYXJyYXkpO1xuXG4gIHJldHVybiB2YXJpYWJsZUFzc2lnbm1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlRGVjbGFyYXRpb25Gcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlKHByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb2NlZHVyZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcHJvY2VkdXJlID0gcHJvY2VkdXJlRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVEZWNsYXJhdGlvblN0cmluZyA9IHByb2NlZHVyZURlY2xhcmF0aW9uU3RyaW5nRnJvbVByb2NlZHVyZShwcm9jZWR1cmUpLFxuICAgICAgICBzdHJpbmcgPSBwcm9jZWR1cmVEZWNsYXJhdGlvblN0cmluZywgIC8vL1xuICAgICAgICBwcm9jZWR1cmVEZWNsYXJhdGlvbiA9IG5ldyBQcm9jZWR1cmVEZWNsYXJhdGlvbihzdHJpbmcsIHByb2NlZHVyZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyaXNvbkV4cHJlc3Npb25Gcm9tQ29tcGFyaXNvbkV4cHJlc3Npb25Ob2RlKGNvbXBhcmlzb25FeHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbXBhcmlzb25FeHByZXNzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbXBhcmlzb25FeHByZXNzaW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbmVnYXRlZCA9IG5lZ2F0ZWRGcm9tQ29tcGFyaXNvbkV4cHJlc3Npb25Ob2RlKGNvbXBhcmlzb25FeHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlZnRFeHByZXNzaW9uID0gbGVmdEV4cHJlc3Npb25Gcm9tQ29tcHpyaXNvbk5vZGUoY29tcGFyaXNvbkV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRFeHByZXNzaW9uID0gcmlnaHRFeHByZXNzaW9uRnJvbUNvbXB6cmlzb25Ob2RlKGNvbXBhcmlzb25FeHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbXBhcmlzb25FeHByZXNzaW9uID0gbmV3IENvbXBhcmlzb25FeHByZXNzaW9uKHN0cmluZywgbmVnYXRlZCwgbGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbik7XG5cbiAgcmV0dXJuIGNvbXBhcmlzb25FeHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBsYWJlbE5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gc29tZU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdGVybU5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgY29uc3QgbmFtZSA9IHZhcmlhYmxlTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmltaXRpdmVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByaW1pdGl2ZSA9IG51bGw7XG5cbiAgY29uc3QgcHJpbWl0aXZlTm9kZSA9IHRlcm1Ob2RlLmdldFByaW1pdGl2ZU5vZGUoKTtcblxuICBpZiAocHJpbWl0aXZlTm9kZSAhPT0gbnVsbCkge1xuICAgIHByaW1pdGl2ZSA9IHByaW1pdGl2ZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByaW1pdGl2ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gZXZlcnlOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBwYXJhbWV0ZXJOb2RlLmdldFR5cGUoKTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSByZWZlcmVuY2VOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZGVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5vZGUgPSBwcmltaXRpdmVOb2RlLmdldE5vZGUoKTtcblxuICByZXR1cm4gbm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZGVzRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBub2RlcyA9IG51bGw7XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHJlZHVjZU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc29tZSA9IG51bGw7XG5cbiAgY29uc3Qgc29tZU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRTb21lTm9kZSgpO1xuXG4gIGlmIChzb21lTm9kZSAhPT0gbnVsbCkge1xuICAgIHNvbWUgPSBzb21lRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzb21lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0cmluZyA9IG5vZGVRdWVyeU5vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIGV4cHJlc3Npb25TdHJpbmcgPSBzdHJpbmcsICAvLy9cbiAgICAgICAgcXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvblN0cmluZyhleHByZXNzaW9uU3RyaW5nKTtcblxuICByZXR1cm4gcXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBudW1iZXJGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG51bWJlciA9IHByaW1pdGl2ZU5vZGUuZ2V0TnVtYmVyKCk7XG5cbiAgcmV0dXJuIG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0cmluZyA9IG5vZGVzUXVlcnlOb2RlLmdldFN0cmluZygpLFxuICAgICAgICBleHByZXNzaW9uU3RyaW5nID0gc3RyaW5nLCAgLy8vXG4gICAgICAgIHF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb25TdHJpbmcoZXhwcmVzc2lvblN0cmluZyk7XG5cbiAgcmV0dXJuIHF1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGV2ZXJ5ID0gbnVsbDtcblxuICBjb25zdCBldmVyeU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRFdmVyeU5vZGUoKTtcblxuICBpZiAoZXZlcnlOb2RlICE9PSBudWxsKSB7XG4gICAgZXZlcnkgPSBldmVyeUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBldmVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvb2xlYW5Gcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJvb2xlYW4gPSBwcmltaXRpdmVOb2RlLmdldEJvb2xlYW4oKTtcblxuICByZXR1cm4gYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGV4cHJlc3Npb25Ob2RlID0gcmVkdWNlTm9kZS5nZXRFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2VGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZHVjZSA9IG51bGw7XG5cbiAgY29uc3QgcmVkdWNlTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFJlZHVjZU5vZGUoKTtcblxuICBpZiAocmVkdWNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHJlZHVjZSA9IHJlZHVjZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZHVjZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcE5vZGVzID0gcmV0dXJuQmxvY2tOb2RlLmdldFN0ZXBOb2RlcygpLFxuICAgICAgICBzdGVwcyA9IHN0ZXBOb2Rlcy5tYXAoKHN0ZXBOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcCA9IHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0ZXA7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZXhwcmVzc2lvbk5vZGUgPSB0ZXJuYXJ5Tm9kZS5nZXRFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gbm9kZVF1ZXJ5Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJuYXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJuYXJ5ID0gbnVsbDtcblxuICBjb25zdCB0ZXJuYXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFRlcm5hcnlOb2RlKCk7XG5cbiAgaWYgKHRlcm5hcnlOb2RlICE9PSBudWxsKSB7XG4gICAgdGVybmFyeSA9IHRlcm5hcnlGcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm5hcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHByZXNzaW9uRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZXhwcmVzc2lvbiA9IG51bGw7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBub2Rlc1F1ZXJ5Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybXNOb2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0VGVybXNOb2RlKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybXNOb2RlKHRlcm1zTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21OYW1lZFBhcmFtZXRlck5vZGUobmFtZWRQYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBuYW1lZFBhcmFtZXRlck5vZGUuZ2V0VHlwZSgpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21OYW1lZFBhcmFtZXRlck5vZGUobmFtZWRQYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBuYW1lZFBhcmFtZXRlck5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlBc3NpZ25tZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBhcnJheUFzc2lnbm1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IGFycmF5QXNzaWdubWVudE5vZGUgPSBzdGVwTm9kZS5nZXRBcnJheUFzc2lnbm1lbnROb2RlKCk7XG5cbiAgaWYgKGFycmF5QXNzaWdubWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBhcnJheUFzc2lnbm1lbnQgPSBhcnJheUFzc2lnbm1lbnRGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZShhcnJheUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBhcnJheUFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZkV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaWZFeHByZXNzaW9uTm9kZSA9IHRlcm5hcnlOb2RlLmdldElmRXhwcmVzc2lvbk5vZGUoKSxcbiAgICAgICAgaWZFeHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShpZkV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gaWZFeHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbWl0aXZlRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcmltaXRpdmUgPSBudWxsO1xuXG4gIGNvbnN0IHByaW1pdGl2ZU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRQcmltaXRpdmVOb2RlKCk7XG5cbiAgaWYgKHByaW1pdGl2ZU5vZGUgIT09IG51bGwpIHtcbiAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcmltaXRpdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG5vZGVRdWVyeSA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZVF1ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldE5vZGVRdWVyeU5vZGUoKTtcblxuICBpZiAobm9kZVF1ZXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIG5vZGVRdWVyeSA9IG5vZGVRdWVyeUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsaWFzRnJvbU5hbWVkUGFyYW1ldGVyTm9kZShuYW1lZFBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYWxpYXMgPSBuYW1lZFBhcmFtZXRlck5vZGUuZ2V0QWxpYXMoKTtcblxuICByZXR1cm4gYWxpYXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IHJldHVyblN0YXRlbWVudE5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0QXNzaWdubWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgb2JqZWN0QXNzaWdubWVudCA9IG51bGw7XG5cbiAgY29uc3Qgb2JqZWN0QXNzaWdubWVudE5vZGUgPSBzdGVwTm9kZS5nZXRPYmplY3RBc3NpZ25tZW50Tm9kZSgpO1xuXG4gIGlmIChvYmplY3RBc3NpZ25tZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIG9iamVjdEFzc2lnbm1lbnQgPSBvYmplY3RBc3NpZ25tZW50RnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBvYmplY3RBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZXNRdWVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbm9kZXNRdWVyeSA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXNRdWVyeU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXROb2Rlc1F1ZXJ5Tm9kZSgpO1xuXG4gIGlmIChub2Rlc1F1ZXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIG5vZGVzUXVlcnkgPSBub2Rlc1F1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBub2Rlc1F1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZWxzZUV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZWxzZUV4cHJlc3Npb25Ob2RlID0gdGVybmFyeU5vZGUuZ2V0RWxzZUV4cHJlc3Npb25Ob2RlKCksXG4gICAgICAgIGVsc2VFeHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShlbHNlRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBlbHNlRXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCByZXR1cm5CbG9jayA9IG51bGw7XG5cbiAgY29uc3QgcmV0dXJuQmxvY2tOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0UmV0dXJuQmxvY2tOb2RlKCk7XG5cbiAgaWYgKHJldHVybkJsb2NrTm9kZSAhPT0gbnVsbCkge1xuICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmV0dXJuQmxvY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbU5lZ2F0ZWRFeHByZXNzaW9uTm9kZShuZWdhdGVkRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IEJPT0xFQU5fVFlQRTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTG9nY2lhbEV4cHJlc3Npb25Ob2RlKGxvZ2ljYWxFeHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gQk9PTEVBTl9UWVBFO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFub255bW91c1Byb2NlZHVyZU5vZGUgPSBzb21lTm9kZS5nZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5vbnNlbnNpY2FsID0gcmV0dXJuQmxvY2tOb2RlLmlzTm9uc2Vuc2ljYWwoKTtcblxuICByZXR1cm4gbm9uc2Vuc2ljYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ0xpdGVyYWxGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0cmluZ0xpdGVyYWwgPSBwcmltaXRpdmVOb2RlLmdldFN0cmluZ0xpdGVyYWwoKTtcblxuICByZXR1cm4gc3RyaW5nTGl0ZXJhbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSh0eXBlLCB2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZVN0cmluZyA9IHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUobmFtZSksXG4gICAgICAgIHN0cmluZyA9IHZhcmlhYmxlU3RyaW5nLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKHN0cmluZywgdHlwZSwgbmFtZSwgZXhwcmVzc2lvbik7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50c0Zyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGVBc3NpZ25tZW50cyA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50c05vZGUgPSBzdGVwTm9kZS5nZXRWYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlQXNzaWdubWVudHMgPSB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZUFzc2lnbm1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYW5vbnltb3VzUHJvY2VkdXJlTm9kZSA9IGV2ZXJ5Tm9kZS5nZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsRXhwcmVzc2lvbkZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaW5pdGlhbEV4cHJlc3Npb24gPSBleHByZXNzaW9uOyAvLy9cblxuICByZXR1cm4gaW5pdGlhbEV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gYXJyYXlBc3NpZ25tZW50Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFub255bW91c1Byb2NlZHVyZU5vZGUgPSByZWR1Y2VOb2RlLmdldEFub255bW91c1Byb2NlZHVyZU5vZGUoKSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFub255bW91c1Byb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRFeHByZXNzaW9uRnJvbUNvbXB6cmlzb25Ob2RlKGNvbXBhcmlzb25FeHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsZWZ0RXhwcmVzc2lvbk5vZGUgPSBjb21wYXJpc29uRXhwcmVzc2lvbk5vZGUuZ2V0TGVmdEV4cHJlc3Npb25Ob2RlKCksXG4gICAgICAgIGxlZnRFeHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShsZWZ0RXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsZWZ0RXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG9iamVjdEFzc2lnbm1lbnROb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlKHByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gcHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGUoKTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSh0eXBlLCB2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZXhwcmVzc2lvbiA9IG51bGw7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodEV4cHJlc3Npb25Gcm9tQ29tcHpyaXNvbk5vZGUoY29tcGFyaXNvbkV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJpZ2h0RXhwcmVzc2lvbk5vZGUgPSBjb21wYXJpc29uRXhwcmVzc2lvbk5vZGUuZ2V0TGVmdEV4cHJlc3Npb25Ob2RlKCksXG4gICAgICAgIHJpZ2h0RXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUocmlnaHRFeHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJpZ2h0RXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZShhcnJheUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlcnNOb2RlID0gYXJyYXlBc3NpZ25tZW50Tm9kZS5nZXRQYXJhbWV0ZXJzTm9kZSgpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJzTm9kZShwYXJhbWV0ZXJzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUocHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVsTm9kZSA9IHByb2NlZHVyZURlY2xhcmF0aW9uTm9kZS5nZXRMYWJlbE5vZGUoKSxcbiAgICAgICAgbGFiZWwgPSBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXR1cm5TdGF0ZW1lbnROb2RlID0gcmV0dXJuQmxvY2tOb2RlLmdldFJldHVyblN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgcmV0dXJuU3RhdGVtZW50ID0gcmV0dXJuU3RhdGVtZW50RnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJldHVyblN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRFeHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBuZWdhdGVkRXhwcmVzc2lvbiA9IG51bGw7XG5cbiAgY29uc3QgbmVnYXRlZEV4cHJlc3Npb25Ob2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0TmVnYXRlZEV4cHJlc3Npb25Ob2RlKCk7XG5cbiAgaWYgKG5lZ2F0ZWRFeHByZXNzaW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIG5lZ2F0ZWRFeHByZXNzaW9uID0gbmVnYXRlZEV4cHJlc3Npb25Gcm9tTmVnYXRlZEV4cHJlc3Npb25Ob2RlKG5lZ2F0ZWRFeHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbmVnYXRlZEV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dpY2FsRXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbG9naWNhbEV4cHJlc3Npb24gPSBudWxsO1xuXG4gIGNvbnN0IGxvZ2ljYWxFeHByZXNzaW9uTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldExvZ2ljYWxFeHByZXNzaW9uTm9kZSgpO1xuXG4gIGlmIChsb2dpY2FsRXhwcmVzc2lvbk5vZGUgIT09IG51bGwpIHtcbiAgICBsb2dpY2FsRXhwcmVzc2lvbiA9IGxvZ2ljYWxFeHByZXNzaW9uRnJvbUxvZ2ljYWxFeHByZXNzaW9uTm9kZShsb2dpY2FsRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxvZ2ljYWxFeHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZEZyb21Db21wYXJpc29uRXhwcmVzc2lvbk5vZGUoY29tcGFyaXNvbkV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBjb21wYXJpc29uRXhwcmVzc2lvbk5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHByZXNzaW9uRnJvbU5lZ2F0ZWRFeHByZXNzaW9uTm9kZShuZWdhdGVkRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZXhwcmVzc2lvbk5vZGUgPSBuZWdhdGVkRXhwcmVzc2lvbk5vZGUuZ2V0RXhwcmVzc2lvbk5vZGUoKSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvbkZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlKHZhcmlhYmxlQXNzaWdtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBleHByZXNzaW9uTm9kZSA9IHZhcmlhYmxlQXNzaWdtZW50Tm9kZS5nZXRFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNqdW5jdGlvbkZyb21Mb2dpY2FsRXhwcmVzc2lvbk5vZGUobG9naWNhbEV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRpc2p1bmN0aW9uID0gbG9naWNhbEV4cHJlc3Npb25Ob2RlLmlzRGlzanVuY3Rpb24oKTtcblxuICByZXR1cm4gZGlzanVuY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0UGFyYW1ldGVyc05vZGUoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJldHVybkJsb2NrTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0UmV0dXJuQmxvY2tOb2RlKCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJldHVybkJsb2NrO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkRXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgYnJhY2tldGVkRXhwcmVzc2lvbiA9IG51bGw7XG5cbiAgY29uc3QgYnJhY2tldGVkRXhwcmVzc2lvbk5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRCcmFja2V0ZWRFeHByZXNzaW9uTm9kZSgpO1xuXG4gIGlmIChicmFja2V0ZWRFeHByZXNzaW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGJyYWNrZXRlZEV4cHJlc3Npb24gPSBicmFja2V0ZWRFeHByZXNzaW9uRnJvbUJyYWNrZXRlZEV4cHJlc3Npb25Ob2RlKGJyYWNrZXRlZEV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBicmFja2V0ZWRFeHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvbkZyb21CcmFja2V0ZWRFeHByZXNzaW9uTm9kZShicmFja2V0ZWRFeHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBleHByZXNzaW9uTm9kZSA9IGJyYWNrZXRlZEV4cHJlc3Npb25Ob2RlLmdldEV4cHJlc3Npb25Ob2RlKCksXG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUZyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUocHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlKHByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlKHByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVTdHJpbmcgPSBwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrKHR5cGUsIGxhYmVsLCBwYXJhbWV0ZXJzLCByZXR1cm5CbG9jayksXG4gICAgICAgIHN0cmluZyA9IHByb2NlZHVyZVN0cmluZywgLy8vXG4gICAgICAgIHByb2NlZHVyZSA9IG5ldyBQcm9jZWR1cmUoc3RyaW5nLCB0eXBlLCBsYWJlbCwgcGFyYW1ldGVycywgcmV0dXJuQmxvY2spO1xuXG4gIHJldHVybiBwcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJpc29uRXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTk9kZSwgY29udGV4dCkge1xuICBsZXQgY29tcGFyaXNvbkV4cHJlc3Npb24gPSBudWxsO1xuXG4gIGNvbnN0IGNvbXBhcmlzb25FeHByZXNzaW9uTm9kZSA9IGV4cHJlc3Npb25OT2RlLmdldENvbXBhcmlzb25FeHByZXNzaW9uTm9kZSgpO1xuXG4gIGlmIChjb21wYXJpc29uRXhwcmVzc2lvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb21wYXJpc29uRXhwcmVzc2lvbiA9IGNvbXBhcmlzb25FeHByZXNzaW9uRnJvbUNvbXBhcmlzb25FeHByZXNzaW9uTm9kZShjb21wYXJpc29uRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbXBhcmlzb25FeHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUocHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlcnNOb2RlID0gcHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLmdldFBhcmFtZXRlcnNOb2RlKCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUHJvY2VkdXJlQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLmdldFR5cGUoKTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmV0dXJuQmxvY2tOb2RlID0gcHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLmdldFJldHVybkJsb2NrTm9kZSgpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRFeHByZXNzaW9uRnJvbUxvZ2ljYWxFeHByZXNzaW9uTm9kZShsb2dpY2FsRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdEV4cHJlc3Npb25Ob2RlID0gbG9naWNhbEV4cHJlc3Npb25Ob2RlLmdldExlZnRFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICBsZWZ0RXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUobGVmdEV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdEV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodEV4cHJlc3Npb25Gcm9tTG9naWNhbEV4cHJlc3Npb25Ob2RlKGxvZ2ljYWxFeHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodEV4cHJlc3Npb25Ob2RlID0gbG9naWNhbEV4cHJlc3Npb25Ob2RlLmdldFJpZ2h0RXhwcmVzc2lvbk5vZGUoKSxcbiAgICAgICAgcmlnaHRFeHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShyaWdodEV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmlnaHRFeHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dpY2FsRXhwcmVzc2lvbkZyb21Mb2dpY2FsRXhwcmVzc2lvbk5vZGUobG9naWNhbEV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTG9naWNhbEV4cHJlc3Npb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbG9naWNhbEV4cHJlc3Npb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUxvZ2NpYWxFeHByZXNzaW9uTm9kZShsb2dpY2FsRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkaXNqdW5jdGlvbiA9IGRpc2p1bmN0aW9uRnJvbUxvZ2ljYWxFeHByZXNzaW9uTm9kZShsb2dpY2FsRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsZWZ0RXhwcmVzc2lvbiA9IGxlZnRFeHByZXNzaW9uRnJvbUxvZ2ljYWxFeHByZXNzaW9uTm9kZShsb2dpY2FsRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByaWdodEV4cHJlc3Npb24gPSByaWdodEV4cHJlc3Npb25Gcm9tTG9naWNhbEV4cHJlc3Npb25Ob2RlKGxvZ2ljYWxFeHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxvZ2ljYWxFeHByZXNzaW9uID0gbmV3IExvZ2ljYWxFeHByZXNzaW9uKHN0cmluZywgdHlwZSwgZGlzanVuY3Rpb24sIGxlZnRFeHByZXNzaW9uLCByaWdodEV4cHJlc3Npb24pO1xuXG4gIHJldHVybiBsb2dpY2FsRXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudEZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVBc3NpZ25tZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tVmFyaWFibGVBc3NpZ25tZW50Tm9kZSh2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVZhcmlhYmxlKGV4cHJlc3Npb24sIHZhcmlhYmxlLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nLCAgLy8vXG4gICAgICAgIGFzc2lnbm1lbnQgPSBuZXcgVmFyaWFibGVBc3NpZ25tZW50KHN0cmluZywgdmFyaWFibGUsIGV4cHJlc3Npb24pO1xuXG4gIHJldHVybiBhc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNBcnJheUZyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1zQXJyYXkgPSB0ZXJtTm9kZXMubWFwKCh0ZXJtTm9kZSkgPT4geyAvLy9cbiAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbXRlcnNBcnJheUZyb21QYXJhbWV0ZXJzTm9kZShwYXJhbWV0ZXJzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHBhcmFtZXRlcnNOb2RlLmdldFBhcmFtZXRlck5vZGVzKCksXG4gICAgICAgIHBhcmFtdGVyc0FycmF5ID0gcGFyYW1ldGVyTm9kZXMubWFwKChwYXJhbWV0ZXJOb2RlKSA9PiB7IC8vL1xuICAgICAgICAgIGNvbnN0IHBhcmFtZXRlciA9IHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHBhcmFtdGVyc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRQYXJhbXRlcnNBcnJheUZyb21OYW1lZFBhcmFtZXRlck5vZGVzKG5hbWVkUGFyYW1ldGVyTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZWRQYXJhbXRlcnNBcnJheSA9IG5hbWVkUGFyYW1ldGVyTm9kZXMubWFwKChuYW1lZFBhcmFtZXRlck5vZGUpID0+IHsgLy8vXG4gICAgY29uc3QgbmFtZWRQYXJhbWV0ZXIgPSBuYW1lZFBhcmFtZXRlckZyb21OYW1lZFBhcmFtZXRlck5vZGUobmFtZWRQYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBuYW1lZFBhcmFtZXRlcjtcbiAgfSk7XG5cbiAgcmV0dXJuIG5hbWVkUGFyYW10ZXJzQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXlGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUodmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLmdldFR5cGUoKSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50Tm9kZXMgPSB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZS5nZXRWYXJpYWJsZUFzc2lnbm1lbnROb2RlcygpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkgPSB2YXJpYWJsZUFzc2lnbm1lbnROb2Rlcy5tYXAoKHZhcmlhYmxlQXNzaWdubWVudE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZUFzc2lnbm1lbnQgPSB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50O1xuICAgICAgICB9KTtcblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50c0FycmF5O1xufVxuIl0sIm5hbWVzIjpbImFsaWFzRnJvbU5hbWVkUGFyYW1ldGVyTm9kZSIsImFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwiYW5vbnltb3VzUHJvY2VkdXJlRnJvbUV2ZXJ5Tm9kZSIsImFub255bW91c1Byb2NlZHVyZUZyb21SZWR1Y2VOb2RlIiwiYW5vbnltb3VzUHJvY2VkdXJlRnJvbVNvbWVOb2RlIiwiYXJyYXlBc3NpZ25tZW50RnJvbUFycmF5QXNzaWdubWVudE5vZGUiLCJhcnJheUFzc2lnbm1lbnRGcm9tU3RlcE5vZGUiLCJib29sZWFuRnJvbVByaW1pdGl2ZU5vZGUiLCJicmFja2V0ZWRFeHByZXNzaW9uRnJvbUJyYWNrZXRlZEV4cHJlc3Npb25Ob2RlIiwiYnJhY2tldGVkRXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZSIsImNvbXBhcmlzb25FeHByZXNzaW9uRnJvbUNvbXBhcmlzb25FeHByZXNzaW9uTm9kZSIsImNvbXBhcmlzb25FeHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlIiwiZGlzanVuY3Rpb25Gcm9tTG9naWNhbEV4cHJlc3Npb25Ob2RlIiwiZWxzZUV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUiLCJlcnJvckZyb21FcnJvck5vZGUiLCJldmVyeUZyb21FdmVyeU5vZGUiLCJldmVyeUZyb21FeHByZXNzaW9uTm9kZSIsImV4cHJlc3Npb25Gcm9tQnJhY2tldGVkRXhwcmVzc2lvbk5vZGUiLCJleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlIiwiZXhwcmVzc2lvbkZyb21OZWdhdGVkRXhwcmVzc2lvbk5vZGUiLCJleHByZXNzaW9uRnJvbVJlZHVjZU5vZGUiLCJleHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlIiwiZXhwcmVzc2lvbkZyb21UeXBlQW5kVmFyaWFibGVOb2RlIiwiZXhwcmVzc2lvbkZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlIiwiZXhwcmVzc2lvbkZyb21WYXJpYWJsZU5vZGUiLCJpZkV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUiLCJpbml0aWFsRXhwcmVzc2lvbkZyb21SZWR1Y2VOb2RlIiwibGFiZWxGcm9tTGFiZWxOb2RlIiwibGFiZWxGcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlIiwibGVmdEV4cHJlc3Npb25Gcm9tQ29tcHpyaXNvbk5vZGUiLCJsZWZ0RXhwcmVzc2lvbkZyb21Mb2dpY2FsRXhwcmVzc2lvbk5vZGUiLCJsb2dpY2FsRXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZSIsImxvZ2ljYWxFeHByZXNzaW9uRnJvbUxvZ2ljYWxFeHByZXNzaW9uTm9kZSIsIm5hbWVGcm9tTGFiZWxOb2RlIiwibmFtZUZyb21OYW1lZFBhcmFtZXRlck5vZGUiLCJuYW1lRnJvbVBhcmFuZXRlck5vZGUiLCJuYW1lRnJvbVJlZmVyZW5jZU5vZGUiLCJuYW1lRnJvbVZhcmlhYmxlTm9kZSIsIm5hbWVkUGFyYW1ldGVyRnJvbU5hbWVkUGFyYW1ldGVyTm9kZSIsIm5hbWVkUGFyYW1ldGVyc0Zyb21OYW1lZFBhcmFtZXRlcnNOb2RlIiwibmFtZWRQYXJhbWV0ZXJzRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlIiwibmFtZWRQYXJhbXRlcnNBcnJheUZyb21OYW1lZFBhcmFtZXRlck5vZGVzIiwibmVnYXRlZEV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUiLCJuZWdhdGVkRXhwcmVzc2lvbkZyb21OZWdhdGVkRXhwcmVzc2lvbk5vZGUiLCJuZWdhdGVkRnJvbUNvbXBhcmlzb25FeHByZXNzaW9uTm9kZSIsIm5vZGVGcm9tUHJpbWl0aXZlTm9kZSIsIm5vZGVRdWVyeUZyb21FeHByZXNzaW9uTm9kZSIsIm5vZGVRdWVyeUZyb21Ob2RlUXVlcnlOb2RlIiwibm9kZXNGcm9tUHJpbWl0aXZlTm9kZSIsIm5vZGVzUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJub2Rlc1F1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlIiwibm9uc2Vuc2ljYWxGcm9tUmV0dXJuQmxvY2tOb2RlIiwibnVtYmVyRnJvbVByaW1pdGl2ZU5vZGUiLCJvYmplY3RBc3NpZ25tZW50RnJvbU9iamVjdEFzc2lnbm1lbnROb2RlIiwib2JqZWN0QXNzaWdubWVudEZyb21TdGVwTm9kZSIsInBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlIiwicGFyYW1ldGVyc0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwicGFyYW1ldGVyc0Zyb21BcnJheUFzc2lnbm1lbnROb2RlIiwicGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJzTm9kZSIsInBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlIiwicGFyYW10ZXJzQXJyYXlGcm9tUGFyYW1ldGVyc05vZGUiLCJwcmltaXRpdmVGcm9tRXhwcmVzc2lvbk5vZGUiLCJwcmltaXRpdmVGcm9tUHJpbWl0aXZlTm9kZSIsInByaW1pdGl2ZUZyb21UZXJtTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlRGVjbGFyYXRpb25Gcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlIiwicHJvY2VkdXJlRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSIsInF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUiLCJxdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZSIsInJlZHVjZUZyb21FeHByZXNzaW9uTm9kZSIsInJlZHVjZUZyb21SZWR1Y2VOb2RlIiwicmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZXR1cm5CbG9ja0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwicmV0dXJuQmxvY2tGcm9tRXhwcmVzc2lvbk5vZGUiLCJyZXR1cm5CbG9ja0Zyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUiLCJyZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUiLCJyZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuQmxvY2tOb2RlIiwicmV0dXJuU3RhdGVtZW50RnJvbVJldHVyblN0YXRlbWVudE5vZGUiLCJyaWdodEV4cHJlc3Npb25Gcm9tQ29tcHpyaXNvbk5vZGUiLCJyaWdodEV4cHJlc3Npb25Gcm9tTG9naWNhbEV4cHJlc3Npb25Ob2RlIiwic29tZUZyb21FeHByZXNzaW9uTm9kZSIsInNvbWVGcm9tU29tZU5vZGUiLCJzdGVwRnJvbVN0ZXBOb2RlIiwic3RlcHNGcm9tUmV0dXJuQmxvY2tOb2RlIiwic3RyaW5nTGl0ZXJhbEZyb21QcmltaXRpdmVOb2RlIiwidGVybUZyb21SZXR1cm5TdGF0ZW1lbnROb2RlIiwidGVybUZyb21UZXJtTm9kZSIsInRlcm1zQXJyYXlGcm9tVGVybU5vZGVzIiwidGVybXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJ0ZXJtc0Zyb21UZXJtc05vZGUiLCJ0ZXJuYXJ5RnJvbUV4cHJlc3Npb25Ob2RlIiwidGVybmFyeUZyb21UZXJuYXJ5Tm9kZSIsInR5cGVGcm9tTG9nY2lhbEV4cHJlc3Npb25Ob2RlIiwidHlwZUZyb21OYW1lZFBhcmFtZXRlck5vZGUiLCJ0eXBlRnJvbU5lZ2F0ZWRFeHByZXNzaW9uTm9kZSIsInR5cGVGcm9tUGFyYW5ldGVyTm9kZSIsInR5cGVGcm9tUHJvY2VkdXJlQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsInR5cGVGcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21WYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXlGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVN0ZXBOb2RlIiwidmFyaWFibGVBc3NpZ25tZW50c0Zyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsInZhcmlhYmxlRnJvbUFycmF5QXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUZyb21FdmVyeU5vZGUiLCJ2YXJpYWJsZUZyb21FeHByZXNzaW9uTm9kZSIsInZhcmlhYmxlRnJvbU5vZGVRdWVyeU5vZGUiLCJ2YXJpYWJsZUZyb21Ob2Rlc1F1ZXJ5Tm9kZSIsInZhcmlhYmxlRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlIiwidmFyaWFibGVGcm9tUmVkdWNlTm9kZSIsInZhcmlhYmxlRnJvbVNvbWVOb2RlIiwidmFyaWFibGVGcm9tVGVybU5vZGUiLCJ2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSIsInZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUiLCJzdGVwTm9kZSIsImNvbnRleHQiLCJTdGVwIiwiZWxlbWVudHMiLCJub2RlIiwic3RyaW5nIiwibm9kZUFzU3RyaW5nIiwiYXJyYXlBc3NpZ25tZW50Iiwib2JqZWN0QXNzaWdtZW50IiwidmFyaWFibGVzRGVjbGFyYXRpb24iLCJzdGVwIiwic29tZU5vZGUiLCJTb21lIiwidmFyaWFibGUiLCJhbm9ueW1vdXNQcm9jZWR1cmUiLCJzb21lU3RyaW5nIiwic29tZVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSIsInNvbWUiLCJ0ZXJtTm9kZSIsIlRlcm0iLCJwcmltaXRpdmUiLCJ0ZXJtIiwidGVybXNOb2RlIiwiVGVybXMiLCJ0ZXJtTm9kZXMiLCJnZXRUZXJtTm9kZXMiLCJ0ZXJtc0FycmF5IiwiYXJyYXkiLCJ0ZXJtcyIsImVycm9yTm9kZSIsIkVycm9yIiwiZXJyb3IiLCJldmVyeU5vZGUiLCJFdmVyeSIsImV2ZXJ5U3RyaW5nIiwiZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUiLCJldmVyeSIsImxhYmVsTm9kZSIsIkxhYmVsIiwibmFtZSIsImxhYmVsIiwicmVkdWNlTm9kZSIsIlJlZHVjZSIsImluaXRpYWxFeHByZXNzaW9uIiwicmVkdWNlU3RyaW5nIiwicmVkdWNlU3RyaW5nRnJvbVZhcmlhYmxlSW5pdGlhbEV4cHJlc3Npb25BbmRBbm9ueW1vdXNQcm9jZWR1cmUiLCJyZWR1Y2UiLCJ0ZXJuYXJ5Tm9kZSIsIlRlcm5hcnkiLCJleHByZXNzaW9uIiwiaWZFeHByZXNzaW9uIiwiZWxzZUV4cHJlc3Npb24iLCJ0ZXJuYXJ5IiwidmFyaWFibGVOb2RlIiwiVmFyaWFibGUiLCJ0eXBlIiwicmVmZXJlbmNlTm9kZSIsIlJlZmVyZW5jZSIsInJlZmVyZW5jZSIsInBhcmFtZXRlck5vZGUiLCJwYXJhbWV0ZXIiLCJQYXJhbWV0ZXIiLCJub2RlUXVlcnlOb2RlIiwiTm9kZVF1ZXJ5IiwicXVlcnkiLCJub2RlUXVlcnkiLCJwcmltaXRpdmVOb2RlIiwiUHJpbWl0aXZlIiwicHJpbWl0aXZlU3RyaW5nIiwibm9kZXMiLCJudW1iZXIiLCJib29sZWFuIiwic3RyaW5nTGl0ZXJhbCIsIm5vZGVzUXVlcnlOb2RlIiwiTm9kZXNRdWVyeSIsIm5vZGVzUXVlcnkiLCJwYXJhbWV0ZXJzTm9kZSIsIlBhcmFtZXRlcnMiLCJwYXJhbXRlcnNBcnJheSIsInBhcmFtZXRlcnMiLCJleHByZXNzaW9uTm9kZSIsIkV4cHJlc3Npb24iLCJyZXR1cm5CbG9jayIsInByb2NlZHVyZUNhbGwiLCJuZWdhdGVkRXhwcmVzc2lvbiIsImxvZ2ljYWxFeHByZXNzaW9uIiwiYnJhY2tldGVkRXhwcmVzc2lvbiIsImNvbXBhcmlzb25FeHByZXNzaW9uIiwicHJvcGVydGllcyIsImV4cHJlc3Npb25TdHJpbmciLCJleHByZXNzaW9uU3RyaW5nRnJvbVByaW1pdGl2ZUFuZFByb3BlcnRpZXMiLCJyZXR1cm5CbG9ja05vZGUiLCJSZXR1cm5CbG9jayIsInN0ZXBzIiwibm9uc2Vuc2ljYWwiLCJyZXR1cm5TdGF0ZW1lbnQiLCJyZXR1cm5CbG9ja1N0cmluZyIsInJldHVybkJsb2NrU3RyaW5nRnJvbVJldHVyblN0YXRlbWVudE5vZGUiLCJwcm9jZWR1cmVDYWxsTm9kZSIsIlByb2NlZHVyZUNhbGwiLCJleHByZXNzaW9ucyIsIm5hbWVkUGFyYW1ldGVyTm9kZSIsIk5hbWVkUGFyYW1ldGVyIiwiYWxpYXMiLCJuYW1lZFBhcmFtZXRlciIsIm5hbWVkUGFyYW1ldGVyc05vZGUiLCJOYW1lZFBhcmFtZXRlcnMiLCJuYW1lZFBhcmFtZXRlck5vZGVzIiwiZ2V0TmFtZWRQYXJhbWV0ZXJOb2RlcyIsIm5hbWVkUGFyYW1ldGVyc0FycmF5IiwibmFtZWRQYXJhbWV0ZXJzIiwiYXJyYXlBc3NpZ25tZW50Tm9kZSIsIkFycmF5QXNzaWdubWVudCIsInJldHVyblN0YXRlbWVudE5vZGUiLCJSZXR1cm5TdGF0ZW1lbnQiLCJvYmplY3RBc3NpZ25tZW50Tm9kZSIsImdldE5hbWVkUGFyYW1ldGVyc05vZGUiLCJPYmplY3RBc3NpZ21lbnQiLCJvYmplY3RBc3NpZ25tZW50IiwibmVnYXRlZEV4cHJlc3Npb25Ob2RlIiwiTmVnYXRlZEV4cHJlc3Npb24iLCJnZXRFeHByZXNzaW9uTm9kZSIsImFub255bW91c1Byb2NlZHVyZU5vZGUiLCJBbm9ueW1vdXNQcm9jZWR1cmUiLCJub255bW91c1Byb2NlZHVyZVN0cmluZyIsImFub255bW91c1Byb2NlZHVyZVN0cmluZ0Zyb21UeXBlUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrIiwiYnJhY2tldGVkRXhwcmVzc2lvbk5vZGUiLCJCcmFja2V0ZWRFeHByZXNzaW9uIiwidmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJWYXJpYWJsZUFzc2lnbm1lbnRzIiwidmFyaWFibGVBc3NpZ25tZW50c0FycmF5IiwidmFyaWFibGVBc3NpZ25tZW50U3RyaW5nIiwidmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVZhcmlhYmxlQXNzaWdubWVudHNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudHMiLCJwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUiLCJQcm9jZWR1cmVEZWNsYXJhdGlvbiIsInByb2NlZHVyZSIsInByb2NlZHVyZURlY2xhcmF0aW9uU3RyaW5nIiwicHJvY2VkdXJlRGVjbGFyYXRpb25TdHJpbmdGcm9tUHJvY2VkdXJlIiwicHJvY2VkdXJlRGVjbGFyYXRpb24iLCJjb21wYXJpc29uRXhwcmVzc2lvbk5vZGUiLCJDb21wYXJpc29uRXhwcmVzc2lvbiIsIm5lZ2F0ZWQiLCJsZWZ0RXhwcmVzc2lvbiIsInJpZ2h0RXhwcmVzc2lvbiIsImdldE5hbWUiLCJnZXRWYXJpYWJsZU5vZGUiLCJnZXRQcmltaXRpdmVOb2RlIiwiZ2V0VHlwZSIsImdldE5vZGUiLCJnZXRTb21lTm9kZSIsImdldFN0cmluZyIsIlF1ZXJ5IiwiZnJvbUV4cHJlc3Npb25TdHJpbmciLCJnZXROdW1iZXIiLCJnZXRFdmVyeU5vZGUiLCJnZXRCb29sZWFuIiwiZ2V0UmVkdWNlTm9kZSIsInN0ZXBOb2RlcyIsImdldFN0ZXBOb2RlcyIsIm1hcCIsImdldFRlcm5hcnlOb2RlIiwiZ2V0VGVybXNOb2RlIiwiZ2V0QXJyYXlBc3NpZ25tZW50Tm9kZSIsImlmRXhwcmVzc2lvbk5vZGUiLCJnZXRJZkV4cHJlc3Npb25Ob2RlIiwiZ2V0Tm9kZVF1ZXJ5Tm9kZSIsImdldEFsaWFzIiwiZ2V0VGVybU5vZGUiLCJnZXRPYmplY3RBc3NpZ25tZW50Tm9kZSIsImdldE5vZGVzUXVlcnlOb2RlIiwiZWxzZUV4cHJlc3Npb25Ob2RlIiwiZ2V0RWxzZUV4cHJlc3Npb25Ob2RlIiwiZ2V0UmV0dXJuQmxvY2tOb2RlIiwiQk9PTEVBTl9UWVBFIiwibG9naWNhbEV4cHJlc3Npb25Ob2RlIiwiZ2V0QW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsImlzTm9uc2Vuc2ljYWwiLCJnZXRSZWZlcmVuY2VOb2RlIiwiZ2V0U3RyaW5nTGl0ZXJhbCIsInZhcmlhYmxlU3RyaW5nIiwidmFyaWFibGVTdHJpbmdGcm9tTmFtZSIsImdldFZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwiZ2V0UHJvY2VkdXJlQ2FsbE5vZGUiLCJsZWZ0RXhwcmVzc2lvbk5vZGUiLCJnZXRMZWZ0RXhwcmVzc2lvbk5vZGUiLCJyaWdodEV4cHJlc3Npb25Ob2RlIiwiZ2V0UGFyYW1ldGVyc05vZGUiLCJnZXRMYWJlbE5vZGUiLCJnZXRSZXR1cm5TdGF0ZW1lbnROb2RlIiwiZ2V0TmVnYXRlZEV4cHJlc3Npb25Ob2RlIiwiZ2V0TG9naWNhbEV4cHJlc3Npb25Ob2RlIiwiaXNOZWdhdGVkIiwidmFyaWFibGVBc3NpZ21lbnROb2RlIiwiZGlzanVuY3Rpb24iLCJpc0Rpc2p1bmN0aW9uIiwiZ2V0QnJhY2tldGVkRXhwcmVzc2lvbk5vZGUiLCJQcm9jZWR1cmUiLCJwcm9jZWR1cmVTdHJpbmciLCJwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrIiwiZXhwcmVzc2lvbk5PZGUiLCJnZXRDb21wYXJpc29uRXhwcmVzc2lvbk5vZGUiLCJnZXRSaWdodEV4cHJlc3Npb25Ob2RlIiwidmFyaWFibGVBc3NpZ25tZW50Tm9kZSIsIkxvZ2ljYWxFeHByZXNzaW9uIiwiVmFyaWFibGVBc3NpZ25tZW50IiwidmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVZhcmlhYmxlIiwiYXNzaWdubWVudCIsInBhcmFtZXRlck5vZGVzIiwiZ2V0UGFyYW1ldGVyTm9kZXMiLCJuYW1lZFBhcmFtdGVyc0FycmF5IiwidmFyaWFibGVBc3NpZ25tZW50Tm9kZXMiLCJnZXRWYXJpYWJsZUFzc2lnbm1lbnROb2RlcyIsInZhcmlhYmxlQXNzaWdubWVudCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBNHFCZ0JBO2VBQUFBOztRQXZWQUM7ZUFBQUE7O1FBNGNBQztlQUFBQTs7UUFpQ0FDO2VBQUFBOztRQWxGQUM7ZUFBQUE7O1FBOWNBQztlQUFBQTs7UUErVkFDO2VBQUFBOztRQTFHQUM7ZUFBQUE7O1FBdExBQztlQUFBQTs7UUE4bEJBQztlQUFBQTs7UUEvakJBQztlQUFBQTs7UUErbEJBQztlQUFBQTs7UUFwREFDO2VBQUFBOztRQTFOQUM7ZUFBQUE7O1FBaHBCQUM7ZUFBQUE7O1FBU0FDO2VBQUFBOztRQWljQUM7ZUFBQUE7O1FBZ2NBQztlQUFBQTs7UUE5dkJBQztlQUFBQTs7UUFndEJBQztlQUFBQTs7UUFoWUFDO2VBQUFBOztRQThCQUM7ZUFBQUE7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
|
|
1079
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tcXVlcnlcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBCT09MRUFOX1RZUEUgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IHRlcm5hcnlTdHJpbmdGcm9tVGVybSxcbiAgICAgICAgIHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUsXG4gICAgICAgICB0ZXJtU3RyaW5nRnJvbVByaW1pdGl2ZUFuZFByb3BlcnRpZXMsXG4gICAgICAgICBwcm9jZWR1cmVEZWNsYXJhdGlvblN0cmluZ0Zyb21Qcm9jZWR1cmUsXG4gICAgICAgICByZXR1cm5CbG9ja1N0cmluZ0Zyb21SZXR1cm5TdGF0ZW1lbnROb2RlLFxuICAgICAgICAgZXhwcmVzc2lvblN0cmluZ0Zyb21QcmltaXRpdmVBbmRQcm9wZXJ0aWVzLFxuICAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZSxcbiAgICAgICAgIHNvbWVTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUsXG4gICAgICAgICBldmVyeVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSxcbiAgICAgICAgIHByb2NlZHVyZVN0cmluZ0Zyb21UeXBlTGFiZWxQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2ssXG4gICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmdGcm9tVHlwZVBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayxcbiAgICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c0FycmF5LFxuICAgICAgICAgcmVkdWNlU3RyaW5nRnJvbVZhcmlhYmxlSW5pdGlhbEV4cHJlc3Npb25BbmRBbm9ueW1vdXNQcm9jZWR1cmUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN0ZXAgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RlcE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGFycmF5QXNzaWdubWVudCA9IGFycmF5QXNzaWdubWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIG9iamVjdEFzc2lnbWVudCA9IG9iamVjdEFzc2lnbm1lbnRGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZXNEZWNsYXJhdGlvbiA9IHZhcmlhYmxlQXNzaWdubWVudHNGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGVwID0gbmV3IFN0ZXAoc3RyaW5nLCBhcnJheUFzc2lnbm1lbnQsIG9iamVjdEFzc2lnbWVudCwgdmFyaWFibGVzRGVjbGFyYXRpb24pO1xuXG4gIHJldHVybiBzdGVwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNvbWUgfSA9IGVsZW1lbnRzLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc29tZVN0cmluZyA9IHNvbWVTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUodmFyaWFibGUsIGFub255bW91c1Byb2NlZHVyZSksXG4gICAgICAgIHN0cmluZyA9IHNvbWVTdHJpbmcsICAvLy9cbiAgICAgICAgc29tZSA9IG5ldyBTb21lKHN0cmluZywgdmFyaWFibGUsIGFub255bW91c1Byb2NlZHVyZSk7XG5cbiAgcmV0dXJuIHNvbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuZWdhdGVkVGVybSA9IG5lZ2F0ZWRUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbG9naWNhbFRlcm0gPSBsb2dpY2FsVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyYWNrZXRlZFRlcm0gPSBicmFja2V0ZWRUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29tcGFyaXNvblRlcm0gPSBjb21wYXJpc29uVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICAgICAgdmFyaWFibGUsXG4gICAgICAgICAgbmVnYXRlZFRlcm0sXG4gICAgICAgICAgbG9naWNhbFRlcm0sXG4gICAgICAgICAgYnJhY2tldGVkVGVybSxcbiAgICAgICAgICBjb21wYXJpc29uVGVybVxuICAgICAgICBdLFxuICAgICAgICB0ZXJtU3RyaW5nID0gdGVybVN0cmluZ0Zyb21QcmltaXRpdmVBbmRQcm9wZXJ0aWVzKHByaW1pdGl2ZSwgcHJvcGVydGllcywgY29udGV4dCksXG4gICAgICAgIHN0cmluZyA9IHRlcm1TdHJpbmcsICAvLy9cbiAgICAgICAgdGVybSA9IG5ldyBUZXJtKHN0cmluZywgdmFyaWFibGUsIHByaW1pdGl2ZSwgbmVnYXRlZFRlcm0sIGxvZ2ljYWxUZXJtLCBicmFja2V0ZWRUZXJtLCBjb21wYXJpc29uVGVybSk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21UZXJtc05vZGUodGVybXNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdGVybXNOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm1Ob2RlcyA9IHRlcm1zTm9kZS5nZXRUZXJtTm9kZXMoKSxcbiAgICAgICAgdGVybXNBcnJheSA9IHRlcm1zQXJyYXlGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCksXG4gICAgICAgIGFycmF5ID0gdGVybXNBcnJheSwgLy8vXG4gICAgICAgIHRlcm1zID0gbmV3IFRlcm1zKHN0cmluZywgYXJyYXkpO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yRnJvbUVycm9yTm9kZShlcnJvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcnJvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcnJvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3Ioc3RyaW5nKTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXZlcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGV2ZXJ5U3RyaW5nID0gZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUodmFyaWFibGUsIGFub255bW91c1Byb2NlZHVyZSksXG4gICAgICAgIHN0cmluZyA9IGV2ZXJ5U3RyaW5nLCAvLy9cbiAgICAgICAgZXZlcnkgPSBuZXcgRXZlcnkoc3RyaW5nLCB2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKTtcblxuICByZXR1cm4gZXZlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGFiZWxOb2RlLFxuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbmV3IExhYmVsKHN0cmluZywgbmFtZSk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZHVjZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaW5pdGlhbEV4cHJlc3Npb24gPSBpbml0aWFsRXhwcmVzc2lvbkZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVkdWNlU3RyaW5nID0gcmVkdWNlU3RyaW5nRnJvbVZhcmlhYmxlSW5pdGlhbEV4cHJlc3Npb25BbmRBbm9ueW1vdXNQcm9jZWR1cmUodmFyaWFibGUsIGluaXRpYWxFeHByZXNzaW9uLCBhbm9ueW1vdXNQcm9jZWR1cmUpLFxuICAgICAgICBzdHJpbmcgPSByZWR1Y2VTdHJpbmcsICAvLy9cbiAgICAgICAgcmVkdWNlID0gbmV3IFJlZHVjZShzdHJpbmcsIHZhcmlhYmxlLCBpbml0aWFsRXhwcmVzc2lvbiwgYW5vbnltb3VzUHJvY2VkdXJlKTtcblxuICByZXR1cm4gcmVkdWNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybmFyeUZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm5hcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGlmRXhwcmVzc2lvbiA9IGlmRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGVsc2VFeHByZXNzaW9uID0gZWxzZUV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJuYXJ5U3RyaW5nID0gdGVybmFyeVN0cmluZ0Zyb21UZXJtKHRlcm0pLFxuICAgICAgICBzdHJpbmcgPSB0ZXJuYXJ5U3RyaW5nLCAvLy9cbiAgICAgICAgdGVybmFyeSA9IG5ldyBUZXJuYXJ5KHN0cmluZywgdGVybSwgaWZFeHByZXNzaW9uLCBlbHNlRXhwcmVzc2lvbik7XG5cbiAgcmV0dXJuIHRlcm5hcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShzdHJpbmcsIHR5cGUsIG5hbWUsIGV4cHJlc3Npb24pO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVmZXJlbmNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSBuZXcgUmVmZXJlbmNlKHN0cmluZywgbmFtZSk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHBhcmFtZXRlciA9IG51bGw7XG5cbiAgY29uc3QgdHlwZSA9IHR5cGVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgUGFyYW1ldGVyIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBub2RlID0gcGFyYW1ldGVyTm9kZSwgLy8vXG4gICAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgICAgbmFtZSA9IG5hbWVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICAgIHBhcmFtZXRlciA9IG5ldyBQYXJhbWV0ZXIoc3RyaW5nLCB0eXBlLCBuYW1lKTtcbiAgfVxuXG4gIHJldHVybiBwYXJhbWV0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2RlUXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTm9kZVF1ZXJ5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5vZGVRdWVyeU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBxdWVyeSA9IHF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIG5vZGVRdWVyeSA9IG5ldyBOb2RlUXVlcnkoc3RyaW5nLCB2YXJpYWJsZSwgcXVlcnkpO1xuXG4gIHJldHVybiBub2RlUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmltaXRpdmVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJpbWl0aXZlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcHJpbWl0aXZlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocHJpbWl0aXZlTm9kZSksXG4gICAgICAgIHN0cmluZyA9IHByaW1pdGl2ZVN0cmluZywgLy8vXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJpbWl0aXZlID0gbmV3IFByaW1pdGl2ZShzdHJpbmcsIHR5cGUsIHZhbHVlKTtcblxuICByZXR1cm4gcHJpbWl0aXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZXNRdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5vZGVzUXVlcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbm9kZXNRdWVyeU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBxdWVyeSA9IHF1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9kZXNRdWVyeSA9IG5ldyBOb2Rlc1F1ZXJ5KHN0cmluZywgdmFyaWFibGUsIHF1ZXJ5KTtcblxuICByZXR1cm4gbm9kZXNRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQYXJhbWV0ZXJzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHBhcmFtZXRlcnNOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBwYXJhbXRlcnNBcnJheSA9IHBhcmFtdGVyc0FycmF5RnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSBwYXJhbXRlcnNBcnJheSwgLy8vXG4gICAgICAgIHBhcmFtZXRlcnMgPSBuZXcgUGFyYW1ldGVycyhzdHJpbmcsIGFycmF5KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFeHByZXNzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByaW1pdGl2ZSA9IHByaW1pdGl2ZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNvbWUgPSBzb21lRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXZlcnkgPSBldmVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZHVjZSA9IHJlZHVjZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm5hcnkgPSB0ZXJuYXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9kZXNRdWVyeSA9IG5vZGVzUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuZWdhdGVkRXhwcmVzc2lvbiA9IG5lZ2F0ZWRFeHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbG9naWNhbEV4cHJlc3Npb24gPSBsb2dpY2FsRXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyYWNrZXRlZEV4cHJlc3Npb24gPSBicmFja2V0ZWRFeHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29tcGFyaXNvbkV4cHJlc3Npb24gPSBjb21wYXJpc29uRXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICAgICAgc29tZSxcbiAgICAgICAgICBldmVyeSxcbiAgICAgICAgICByZWR1Y2UsXG4gICAgICAgICAgdGVybmFyeSxcbiAgICAgICAgICB2YXJpYWJsZSxcbiAgICAgICAgICBub2RlUXVlcnksXG4gICAgICAgICAgbm9kZXNRdWVyeSxcbiAgICAgICAgICByZXR1cm5CbG9jayxcbiAgICAgICAgICBwcm9jZWR1cmVDYWxsLFxuICAgICAgICAgIG5lZ2F0ZWRFeHByZXNzaW9uLFxuICAgICAgICAgIGxvZ2ljYWxFeHByZXNzaW9uLFxuICAgICAgICAgIGJyYWNrZXRlZEV4cHJlc3Npb24sXG4gICAgICAgICAgY29tcGFyaXNvbkV4cHJlc3Npb25cbiAgICAgICAgXSxcbiAgICAgICAgZXhwcmVzc2lvblN0cmluZyA9IGV4cHJlc3Npb25TdHJpbmdGcm9tUHJpbWl0aXZlQW5kUHJvcGVydGllcyhwcmltaXRpdmUsIHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSBleHByZXNzaW9uU3RyaW5nLCAgLy8vXG4gICAgICAgIGV4cHJlc3Npb24gPSBuZXcgRXhwcmVzc2lvbihzdHJpbmcsIHZhcmlhYmxlLCBwcmltaXRpdmUsIHNvbWUsIGV2ZXJ5LCByZWR1Y2UsIHRlcm5hcnksIG5vZGVRdWVyeSwgbm9kZXNRdWVyeSwgcmV0dXJuQmxvY2ssIHByb2NlZHVyZUNhbGwsIG5lZ2F0ZWRFeHByZXNzaW9uLCBsb2dpY2FsRXhwcmVzc2lvbiwgYnJhY2tldGVkRXhwcmVzc2lvbiwgY29tcGFyaXNvbkV4cHJlc3Npb24pO1xuXG4gIHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJldHVybkJsb2NrIH0gPSBlbGVtZW50cyxcbiAgICAgICAgc3RlcHMgPSBzdGVwc0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9uc2Vuc2ljYWwgPSBub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuU3RhdGVtZW50ID0gcmV0dXJuU3RhdGVtZW50RnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9ja1N0cmluZyA9IHJldHVybkJsb2NrU3RyaW5nRnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50KSxcbiAgICAgICAgc3RyaW5nID0gcmV0dXJuQmxvY2tTdHJpbmcsIC8vL1xuICAgICAgICByZXR1cm5CbG9jayA9IG5ldyBSZXR1cm5CbG9jayhzdHJpbmcsIHN0ZXBzLCBub25zZW5zaWNhbCwgcmV0dXJuU3RhdGVtZW50KTtcblxuICByZXR1cm4gcmV0dXJuQmxvY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlQ2FsbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9jZWR1cmVDYWxsTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBleHByZXNzaW9ucyA9IHRlcm1zRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IG5ldyBQcm9jZWR1cmVDYWxsKHN0cmluZywgcmVmZXJlbmNlLCBleHByZXNzaW9ucyk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lZFBhcmFtZXRlckZyb21OYW1lZFBhcmFtZXRlck5vZGUobmFtZWRQYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTmFtZWRQYXJhbWV0ZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbmFtZWRQYXJhbWV0ZXJOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21OYW1lZFBhcmFtZXRlck5vZGUobmFtZWRQYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tTmFtZWRQYXJhbWV0ZXJOb2RlKG5hbWVkUGFyYW1ldGVyTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFsaWFzID0gYWxpYXNGcm9tTmFtZWRQYXJhbWV0ZXJOb2RlKG5hbWVkUGFyYW1ldGVyTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5hbWVkUGFyYW1ldGVyID0gbmV3IE5hbWVkUGFyYW1ldGVyKHN0cmluZywgdHlwZSwgbmFtZSwgYWxpYXMpO1xuXG4gIHJldHVybiBuYW1lZFBhcmFtZXRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVkUGFyYW1ldGVyc0Zyb21OYW1lZFBhcmFtZXRlcnNOb2RlKG5hbWVkUGFyYW1ldGVyc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBOYW1lZFBhcmFtZXRlcnMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbmFtZWRQYXJhbWV0ZXJzTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBuYW1lZFBhcmFtZXRlck5vZGVzID0gbmFtZWRQYXJhbWV0ZXJzTm9kZS5nZXROYW1lZFBhcmFtZXRlck5vZGVzKCksXG4gICAgICAgIG5hbWVkUGFyYW1ldGVyc0FycmF5ID0gbmFtZWRQYXJhbXRlcnNBcnJheUZyb21OYW1lZFBhcmFtZXRlck5vZGVzKG5hbWVkUGFyYW1ldGVyTm9kZXMsIGNvbnRleHQpLFxuICAgICAgICBhcnJheSA9IG5hbWVkUGFyYW1ldGVyc0FycmF5LCAvLy9cbiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzID0gbmV3IE5hbWVkUGFyYW1ldGVycyhzdHJpbmcsIGFycmF5KTtcblxuICByZXR1cm4gbmFtZWRQYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlBc3NpZ25tZW50RnJvbUFycmF5QXNzaWdubWVudE5vZGUoYXJyYXlBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEFycmF5QXNzaWdubWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBhcnJheUFzc2lnbm1lbnROb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZShhcnJheUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZShhcnJheUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXlBc3NpZ25tZW50ID0gbmV3IEFycmF5QXNzaWdubWVudChzdHJpbmcsIHZhcmlhYmxlLCBwYXJhbWV0ZXJzKTtcblxuICByZXR1cm4gYXJyYXlBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuU3RhdGVtZW50RnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJldHVyblN0YXRlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZXR1cm5TdGF0ZW1lbnROb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHJldHVyblN0YXRlbWVudCA9IG5ldyBSZXR1cm5TdGF0ZW1lbnQoc3RyaW5nLCB0ZXJtKTtcblxuICByZXR1cm4gcmV0dXJuU3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRQYXJhbWV0ZXJzRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWVkUGFyYW1ldGVyc05vZGUgPSBvYmplY3RBc3NpZ25tZW50Tm9kZS5nZXROYW1lZFBhcmFtZXRlcnNOb2RlKCksXG4gICAgICAgIG5hbWVkUGFyYW1ldGVycyA9IG5hbWVkUGFyYW1ldGVyc0Zyb21OYW1lZFBhcmFtZXRlcnNOb2RlKG5hbWVkUGFyYW1ldGVyc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBuYW1lZFBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RBc3NpZ25tZW50RnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgT2JqZWN0QXNzaWdtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG9iamVjdEFzc2lnbm1lbnROb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzID0gbmFtZWRQYXJhbWV0ZXJzRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgb2JqZWN0QXNzaWdubWVudCA9IG5ldyBPYmplY3RBc3NpZ21lbnQoc3RyaW5nLCB2YXJpYWJsZSwgbmFtZWRQYXJhbWV0ZXJzKTtcblxuICByZXR1cm4gb2JqZWN0QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRFeHByZXNzaW9uRnJvbU5lZ2F0ZWRFeHByZXNzaW9uTm9kZShuZWdhdGVkRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBOZWdhdGVkRXhwcmVzc2lvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBuZWdhdGVkRXhwcmVzc2lvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgZXhwcmVzc2lvbk5vZGUgPSBuZWdhdGVkRXhwcmVzc2lvbk5vZGUuZ2V0RXhwcmVzc2lvbk5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tTmVnYXRlZEV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tTmVnYXRlZEV4cHJlc3Npb25Ob2RlKG5lZ2F0ZWRFeHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5lZ2F0ZWRFeHByZXNzaW9uID0gbmV3IE5lZ2F0ZWRFeHByZXNzaW9uKHN0cmluZywgdHlwZSwgZXhwcmVzc2lvbik7XG5cbiAgcmV0dXJuIG5lZ2F0ZWRFeHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9naWNhbEV4cHJlc3Npb25Gcm9tTG9naWNhbEV4cHJlc3Npb25Ob2RlKGxvZ2ljYWxFeHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExvZ2ljYWxFeHByZXNzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxvZ2ljYWxFeHByZXNzaW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Mb2dpY2FsRXhwcmVzc2lvbk5vZGUobG9naWNhbEV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGlzanVuY3Rpb24gPSBkaXNqdW5jdGlvbkZyb21Mb2dpY2FsRXhwcmVzc2lvbk5vZGUobG9naWNhbEV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVmdEV4cHJlc3Npb24gPSBsZWZ0RXhwcmVzc2lvbkZyb21Mb2dpY2FsRXhwcmVzc2lvbk5vZGUobG9naWNhbEV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRFeHByZXNzaW9uID0gcmlnaHRFeHByZXNzaW9uRnJvbUxvZ2ljYWxFeHByZXNzaW9uTm9kZShsb2dpY2FsRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsb2dpY2FsRXhwcmVzc2lvbiA9IG5ldyBMb2dpY2FsRXhwcmVzc2lvbihzdHJpbmcsIHR5cGUsIGRpc2p1bmN0aW9uLCBsZWZ0RXhwcmVzc2lvbiwgcmlnaHRFeHByZXNzaW9uKTtcblxuICByZXR1cm4gbG9naWNhbEV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQW5vbnltb3VzUHJvY2VkdXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvY2VkdXJlQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub255bW91c1Byb2NlZHVyZVN0cmluZyA9IGFub255bW91c1Byb2NlZHVyZVN0cmluZ0Zyb21UeXBlUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrKHR5cGUsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKSxcbiAgICAgICAgc3RyaW5nID0gbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcsIC8vL1xuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBuZXcgQW5vbnltb3VzUHJvY2VkdXJlKHN0cmluZywgdHlwZSwgcGFyYW1ldGVycywgcmV0dXJuQmxvY2spO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVBc3NpZ25tZW50cyB9ID0gZWxlbWVudHMsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50c0FycmF5ID0gdmFyaWFibGVBc3NpZ25tZW50c0FycmF5RnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZyA9IHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c0FycmF5KHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSksXG4gICAgICAgIGFycmF5ID0gdmFyaWFibGVBc3NpZ25tZW50c0FycmF5LCAvLy9cbiAgICAgICAgc3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudHMgPSBuZXcgVmFyaWFibGVBc3NpZ25tZW50cyhzdHJpbmcsIGFycmF5KTtcblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZEV4cHJlc3Npb25Gcm9tQnJhY2tldGVkRXhwcmVzc2lvbk5vZGUoYnJhY2tldGVkRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCcmFja2V0ZWRFeHByZXNzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJyYWNrZXRlZEV4cHJlc3Npb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksICAvLy9cbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tQnJhY2tldGVkRXhwcmVzc2lvbk5vZGUoYnJhY2tldGVkRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBicmFja2V0ZWRFeHByZXNzaW9uID0gbmV3IEJyYWNrZXRlZEV4cHJlc3Npb24oc3RyaW5nLCBleHByZXNzaW9uKTtcblxuICByZXR1cm4gYnJhY2tldGVkRXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmlzb25FeHByZXNzaW9uRnJvbUNvbXBhcmlzb25FeHByZXNzaW9uTm9kZShjb21wYXJpc29uRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21wYXJpc29uRXhwcmVzc2lvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21wYXJpc29uRXhwcmVzc2lvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG5lZ2F0ZWQgPSBuZWdhdGVkRnJvbUNvbXBhcmlzb25FeHByZXNzaW9uTm9kZShjb21wYXJpc29uRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsZWZ0RXhwcmVzc2lvbiA9IGxlZnRFeHByZXNzaW9uRnJvbUNvbXB6cmlzb25FeHByZXNzaW9uTm9kZShjb21wYXJpc29uRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByaWdodEV4cHJlc3Npb24gPSByaWdodEV4cHJlc3Npb25Gcm9tQ29tcHpyaXNvbkV4cHJlc3Npb25Ob2RlKGNvbXBhcmlzb25FeHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbXBhcmlzb25FeHByZXNzaW9uID0gbmV3IENvbXBhcmlzb25FeHByZXNzaW9uKHN0cmluZywgbmVnYXRlZCwgbGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbik7XG5cbiAgcmV0dXJuIGNvbXBhcmlzb25FeHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlRGVjbGFyYXRpb25Gcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlKHByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb2NlZHVyZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcHJvY2VkdXJlID0gcHJvY2VkdXJlRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVEZWNsYXJhdGlvblN0cmluZyA9IHByb2NlZHVyZURlY2xhcmF0aW9uU3RyaW5nRnJvbVByb2NlZHVyZShwcm9jZWR1cmUpLFxuICAgICAgICBzdHJpbmcgPSBwcm9jZWR1cmVEZWNsYXJhdGlvblN0cmluZywgIC8vL1xuICAgICAgICBwcm9jZWR1cmVEZWNsYXJhdGlvbiA9IG5ldyBQcm9jZWR1cmVEZWNsYXJhdGlvbihzdHJpbmcsIHByb2NlZHVyZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBsYWJlbE5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IHRlcm5hcnlOb2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHNvbWVOb2RlLmdldFZhcmlhYmxlTm9kZSgpLCAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSB7XG4gIGNvbnN0IG5hbWUgPSB2YXJpYWJsZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbWl0aXZlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcmltaXRpdmUgPSBudWxsO1xuXG4gIGNvbnN0IHByaW1pdGl2ZU5vZGUgPSB0ZXJtTm9kZS5nZXRQcmltaXRpdmVOb2RlKCk7XG5cbiAgaWYgKHByaW1pdGl2ZU5vZGUgIT09IG51bGwpIHtcbiAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcmltaXRpdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGV2ZXJ5Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVBhcmFuZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gcGFyYW1ldGVyTm9kZS5nZXRUeXBlKCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVBhcmFuZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcGFyYW1ldGVyTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcmVmZXJlbmNlTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gcHJpbWl0aXZlTm9kZS5nZXRUeXBlKCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gcmVkdWNlTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzb21lID0gbnVsbDtcblxuICBjb25zdCBzb21lTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFNvbWVOb2RlKCk7XG5cbiAgaWYgKHNvbWVOb2RlICE9PSBudWxsKSB7XG4gICAgc29tZSA9IHNvbWVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNvbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RyaW5nID0gbm9kZVF1ZXJ5Tm9kZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgZXhwcmVzc2lvblN0cmluZyA9IHN0cmluZywgIC8vL1xuICAgICAgICBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uU3RyaW5nKGV4cHJlc3Npb25TdHJpbmcpO1xuXG4gIHJldHVybiBxdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZSA9IHByaW1pdGl2ZU5vZGUuZ2V0VmFsdWUoKTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBub2Rlc1F1ZXJ5Tm9kZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgZXhwcmVzc2lvblN0cmluZyA9IHN0cmluZywgIC8vL1xuICAgICAgICBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uU3RyaW5nKGV4cHJlc3Npb25TdHJpbmcpO1xuXG4gIHJldHVybiBxdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBldmVyeSA9IG51bGw7XG5cbiAgY29uc3QgZXZlcnlOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0RXZlcnlOb2RlKCk7XG5cbiAgaWYgKGV2ZXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIGV2ZXJ5ID0gZXZlcnlGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZXZlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgbmVnYXRlZFRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IG5lZ2F0ZWRUZXJtTm9kZSA9IHRlcm1Ob2RlLmdldE5lZ2F0ZWRUZXJtTm9kZSgpO1xuXG4gIGlmIChuZWdhdGVkVGVybU5vZGUgIT09IG51bGwpIHtcbiAgICBuZWdhdGVkVGVybSA9IG5lZ2F0ZWRUZXJtRnJvbU5lZ2F0ZWRUZXJtTm9kZShuZWdhdGVkVGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5lZ2F0ZWRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9naWNhbFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGxvZ2ljYWxUZXJtID0gbnVsbDtcblxuICBjb25zdCBsb2dpY2FsVGVybU5vZGUgPSB0ZXJtTm9kZS5nZXRMb2dpY2FsVGVybU5vZGUoKTtcblxuICBpZiAobG9naWNhbFRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgbG9naWNhbFRlcm0gPSBsb2dpY2FsVGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBsb2dpY2FsVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gQk9PTEVBTl9UWVBFO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gbmVnYXRlZFRlcm1Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvbkZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZXhwcmVzc2lvbk5vZGUgPSByZWR1Y2VOb2RlLmdldEV4cHJlc3Npb25Ob2RlKCksXG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmVkdWNlID0gbnVsbDtcblxuICBjb25zdCByZWR1Y2VOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0UmVkdWNlTm9kZSgpO1xuXG4gIGlmIChyZWR1Y2VOb2RlICE9PSBudWxsKSB7XG4gICAgcmVkdWNlID0gcmVkdWNlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVkdWNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcHNGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwTm9kZXMgPSByZXR1cm5CbG9ja05vZGUuZ2V0U3RlcE5vZGVzKCksXG4gICAgICAgIHN0ZXBzID0gc3RlcE5vZGVzLm1hcCgoc3RlcE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGVwID0gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG5vZGVRdWVyeU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybmFyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybmFyeSA9IG51bGw7XG5cbiAgY29uc3QgdGVybmFyeU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRUZXJuYXJ5Tm9kZSgpO1xuXG4gIGlmICh0ZXJuYXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm5hcnkgPSB0ZXJuYXJ5RnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJuYXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgYnJhY2tldGVkVGVybSA9IG51bGw7XG5cbiAgY29uc3QgYnJhY2tldGVkVGVybU5vZGUgPSB0ZXJtTm9kZS5nZXRCcmFja2V0ZWRUZXJtTm9kZSgpO1xuXG4gIGlmIChicmFja2V0ZWRUZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIGJyYWNrZXRlZFRlcm0gPSBicmFja2V0ZWRUZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlKGJyYWNrZXRlZFRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBicmFja2V0ZWRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZShicmFja2V0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGJyYWNrZXRlZFRlcm1Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyaXNvblRlcm1Gcm9tVGVybU5vZGUodGVybU5PZGUsIGNvbnRleHQpIHtcbiAgbGV0IGNvbXBhcmlzb25UZXJtID0gbnVsbDtcblxuICBjb25zdCBjb21wYXJpc29uVGVybU5vZGUgPSB0ZXJtTk9kZS5nZXRDb21wYXJpc29uVGVybU5vZGUoKTtcblxuICBpZiAoY29tcGFyaXNvblRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgY29tcGFyaXNvblRlcm0gPSBjb21wYXJpc29uVGVybUZyb21Db21wYXJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb21wYXJpc29uVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBleHByZXNzaW9uID0gbnVsbDtcblxuICByZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG5vZGVzUXVlcnlOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtc05vZGUgPSBwcm9jZWR1cmVDYWxsTm9kZS5nZXRUZXJtc05vZGUoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtc05vZGUodGVybXNOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbU5hbWVkUGFyYW1ldGVyTm9kZShuYW1lZFBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG5hbWVkUGFyYW1ldGVyTm9kZS5nZXRUeXBlKCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbU5hbWVkUGFyYW1ldGVyTm9kZShuYW1lZFBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IG5hbWVkUGFyYW1ldGVyTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxlZnRUZXJtTm9kZSA9IGxvZ2ljYWxUZXJtTm9kZS5nZXRMZWZ0VGVybU5vZGUoKSxcbiAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUFzc2lnbm1lbnRGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGFycmF5QXNzaWdubWVudCA9IG51bGw7XG5cbiAgY29uc3QgYXJyYXlBc3NpZ25tZW50Tm9kZSA9IHN0ZXBOb2RlLmdldEFycmF5QXNzaWdubWVudE5vZGUoKTtcblxuICBpZiAoYXJyYXlBc3NpZ25tZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGFycmF5QXNzaWdubWVudCA9IGFycmF5QXNzaWdubWVudEZyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlmRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBpZkV4cHJlc3Npb25Ob2RlID0gdGVybmFyeU5vZGUuZ2V0SWZFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICBpZkV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGlmRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBpZkV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmltaXRpdmVGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByaW1pdGl2ZSA9IG51bGw7XG5cbiAgY29uc3QgcHJpbWl0aXZlTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFByaW1pdGl2ZU5vZGUoKTtcblxuICBpZiAocHJpbWl0aXZlTm9kZSAhPT0gbnVsbCkge1xuICAgIHByaW1pdGl2ZSA9IHByaW1pdGl2ZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByaW1pdGl2ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZGVRdWVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbm9kZVF1ZXJ5ID0gbnVsbDtcblxuICBjb25zdCBub2RlUXVlcnlOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0Tm9kZVF1ZXJ5Tm9kZSgpO1xuXG4gIGlmIChub2RlUXVlcnlOb2RlICE9PSBudWxsKSB7XG4gICAgbm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbm9kZVF1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxpYXNGcm9tTmFtZWRQYXJhbWV0ZXJOb2RlKG5hbWVkUGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhbGlhcyA9IG5hbWVkUGFyYW1ldGVyTm9kZS5nZXRBbGlhcygpO1xuXG4gIHJldHVybiBhbGlhcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gcmV0dXJuU3RhdGVtZW50Tm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RBc3NpZ25tZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBvYmplY3RBc3NpZ25tZW50ID0gbnVsbDtcblxuICBjb25zdCBvYmplY3RBc3NpZ25tZW50Tm9kZSA9IHN0ZXBOb2RlLmdldE9iamVjdEFzc2lnbm1lbnROb2RlKCk7XG5cbiAgaWYgKG9iamVjdEFzc2lnbm1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgb2JqZWN0QXNzaWdubWVudCA9IG9iamVjdEFzc2lnbm1lbnRGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG9iamVjdEFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2Rlc1F1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBub2Rlc1F1ZXJ5ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc1F1ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldE5vZGVzUXVlcnlOb2RlKCk7XG5cbiAgaWYgKG5vZGVzUXVlcnlOb2RlICE9PSBudWxsKSB7XG4gICAgbm9kZXNRdWVyeSA9IG5vZGVzUXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gbG9naWNhbFRlcm1Ob2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUNvbXBhcmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmVnYXRlZCA9IGNvbXBhcmlzb25UZXJtTm9kZS5pc05lZ2F0ZWQoKTtcblxuICByZXR1cm4gbmVnYXRlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVsc2VFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGVsc2VFeHByZXNzaW9uTm9kZSA9IHRlcm5hcnlOb2RlLmdldEVsc2VFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICBlbHNlRXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZWxzZUV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZWxzZUV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5CbG9ja0Zyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmV0dXJuQmxvY2sgPSBudWxsO1xuXG4gIGNvbnN0IHJldHVybkJsb2NrTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFJldHVybkJsb2NrTm9kZSgpO1xuXG4gIGlmIChyZXR1cm5CbG9ja05vZGUgIT09IG51bGwpIHtcbiAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJldHVybkJsb2NrO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21OZWdhdGVkRXhwcmVzc2lvbk5vZGUobmVnYXRlZEV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBCT09MRUFOX1RZUEU7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUxvZ2ljYWxFeHByZXNzaW9uTm9kZShsb2dpY2FsRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IEJPT0xFQU5fVFlQRTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFub255bW91c1Byb2NlZHVyZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlID0gc29tZU5vZGUuZ2V0QW5vbnltb3VzUHJvY2VkdXJlTm9kZSgpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYW5vbnltb3VzUHJvY2VkdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9uc2Vuc2ljYWxGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBub25zZW5zaWNhbCA9IHJldHVybkJsb2NrTm9kZS5pc05vbnNlbnNpY2FsKCk7XG5cbiAgcmV0dXJuIG5vbnNlbnNpY2FsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBwcm9jZWR1cmVDYWxsTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxlZnRUZXJtTm9kZSA9IGNvbXBhcmlzb25UZXJtTm9kZS5nZXRMZWZ0VGVybU5vZGUoKSxcbiAgICAgICAgbGVmdFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxlZnRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzanVuY3Rpb25Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkaXNqdW5jdGlvbiA9IGxvZ2ljYWxUZXJtTm9kZS5pc0Rpc2p1bmN0aW9uKCk7XG5cbiAgcmV0dXJuIGRpc2p1bmN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZFRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlKG5lZ2F0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5lZ2F0ZWRUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5lZ2F0ZWRUZXJtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0ZXJtTm9kZSA9IG5lZ2F0ZWRUZXJtTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21OZWdhdGVkVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmVnYXRlZFRlcm0gPSBuZXcgTmVnYXRlZFRlcm0oc3RyaW5nLCB0eXBlLCB0ZXJtKTtcblxuICByZXR1cm4gbmVnYXRlZFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dpY2FsVGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTG9naWNhbFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbG9naWNhbFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkaXNqdW5jdGlvbiA9IGRpc2p1bmN0aW9uRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsZWZ0VGVybSA9IGxlZnRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByaWdodFRlcm0gPSByaWdodFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxvZ2ljYWxUZXJtID0gbmV3IExvZ2ljYWxUZXJtKHN0cmluZywgdHlwZSwgZGlzanVuY3Rpb24sIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuXG4gIHJldHVybiBsb2dpY2FsVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSh0eXBlLCB2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZVN0cmluZyA9IHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUobmFtZSksXG4gICAgICAgIHN0cmluZyA9IHZhcmlhYmxlU3RyaW5nLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKHN0cmluZywgdHlwZSwgbmFtZSwgZXhwcmVzc2lvbik7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50c0Zyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGVBc3NpZ25tZW50cyA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50c05vZGUgPSBzdGVwTm9kZS5nZXRWYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlQXNzaWdubWVudHMgPSB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZUFzc2lnbm1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYW5vbnltb3VzUHJvY2VkdXJlTm9kZSA9IGV2ZXJ5Tm9kZS5nZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsRXhwcmVzc2lvbkZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaW5pdGlhbEV4cHJlc3Npb24gPSBleHByZXNzaW9uOyAvLy9cblxuICByZXR1cm4gaW5pdGlhbEV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gY29tcGFyaXNvblRlcm1Ob2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gYXJyYXlBc3NpZ25tZW50Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZS5nZXRUeXBlKCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFub255bW91c1Byb2NlZHVyZU5vZGUgPSByZWR1Y2VOb2RlLmdldEFub255bW91c1Byb2NlZHVyZU5vZGUoKSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFub255bW91c1Byb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG9iamVjdEFzc2lnbm1lbnROb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlKHByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gcHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGUoKTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSh0eXBlLCB2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZXhwcmVzc2lvbiA9IG51bGw7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbUFycmF5QXNzaWdubWVudE5vZGUoYXJyYXlBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzTm9kZSA9IGFycmF5QXNzaWdubWVudE5vZGUuZ2V0UGFyYW1ldGVyc05vZGUoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlKHByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGUgPSBwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUuZ2V0TGFiZWxOb2RlKCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuU3RhdGVtZW50RnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmV0dXJuU3RhdGVtZW50Tm9kZSA9IHJldHVybkJsb2NrTm9kZS5nZXRSZXR1cm5TdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHJldHVyblN0YXRlbWVudCA9IHJldHVyblN0YXRlbWVudEZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXR1cm5TdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmFja2V0ZWRUZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlKGJyYWNrZXRlZFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQnJhY2tldGVkVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBicmFja2V0ZWRUZXJtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLCAgLy8vXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlKGJyYWNrZXRlZFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJhY2tldGVkVGVybSA9IG5ldyBCcmFja2V0ZWRUZXJtKHN0cmluZywgdGVybSk7XG5cbiAgcmV0dXJuIGJyYWNrZXRlZFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbmVnYXRlZEV4cHJlc3Npb24gPSBudWxsO1xuXG4gIGNvbnN0IG5lZ2F0ZWRFeHByZXNzaW9uTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldE5lZ2F0ZWRFeHByZXNzaW9uTm9kZSgpO1xuXG4gIGlmIChuZWdhdGVkRXhwcmVzc2lvbk5vZGUgIT09IG51bGwpIHtcbiAgICBuZWdhdGVkRXhwcmVzc2lvbiA9IG5lZ2F0ZWRFeHByZXNzaW9uRnJvbU5lZ2F0ZWRFeHByZXNzaW9uTm9kZShuZWdhdGVkRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5lZ2F0ZWRFeHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvbkZyb21OZWdhdGVkRXhwcmVzc2lvbk5vZGUobmVnYXRlZEV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGV4cHJlc3Npb25Ob2RlID0gbmVnYXRlZEV4cHJlc3Npb25Ob2RlLmdldEV4cHJlc3Npb25Ob2RlKCksXG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29tcGFyaXNvbkV4cHJlc3Npb25Ob2RlKGNvbXBhcmlzb25FeHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gY29tcGFyaXNvbkV4cHJlc3Npb25Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9naWNhbEV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGxvZ2ljYWxFeHByZXNzaW9uID0gbnVsbDtcblxuICBjb25zdCBsb2dpY2FsRXhwcmVzc2lvbk5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRMb2dpY2FsRXhwcmVzc2lvbk5vZGUoKTtcblxuICBpZiAobG9naWNhbEV4cHJlc3Npb25Ob2RlICE9PSBudWxsKSB7XG4gICAgbG9naWNhbEV4cHJlc3Npb24gPSBsb2dpY2FsRXhwcmVzc2lvbkZyb21Mb2dpY2FsRXhwcmVzc2lvbk5vZGUobG9naWNhbEV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBsb2dpY2FsRXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tVmFyaWFibGVBc3NpZ25tZW50Tm9kZSh2YXJpYWJsZUFzc2lnbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZXhwcmVzc2lvbk5vZGUgPSB2YXJpYWJsZUFzc2lnbWVudE5vZGUuZ2V0RXhwcmVzc2lvbk5vZGUoKSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzanVuY3Rpb25Gcm9tTG9naWNhbEV4cHJlc3Npb25Ob2RlKGxvZ2ljYWxFeHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkaXNqdW5jdGlvbiA9IGxvZ2ljYWxFeHByZXNzaW9uTm9kZS5pc0Rpc2p1bmN0aW9uKCk7XG5cbiAgcmV0dXJuIGRpc2p1bmN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyc05vZGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLmdldFBhcmFtZXRlcnNOb2RlKCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmlzb25UZXJtRnJvbUNvbXBhcmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21wYXJpc29uVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21wYXJpc29uVGVybU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG5lZ2F0ZWQgPSBuZWdhdGVkRnJvbUNvbXBhcmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsZWZ0VGVybSA9IGxlZnRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByaWdodFRlcm0gPSByaWdodFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbXBhcmlzb25UZXJtID0gbmV3IENvbXBhcmlzb25UZXJtKHN0cmluZywgbmVnYXRlZCwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgcmV0dXJuIGNvbXBhcmlzb25UZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJldHVybkJsb2NrTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0UmV0dXJuQmxvY2tOb2RlKCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJldHVybkJsb2NrO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUocHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBsYWJlbEZyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUocHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlKHByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlKHByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVN0cmluZyA9IHByb2NlZHVyZVN0cmluZ0Zyb21UeXBlTGFiZWxQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2sodHlwZSwgbGFiZWwsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKSxcbiAgICAgICAgc3RyaW5nID0gcHJvY2VkdXJlU3RyaW5nLCAvLy9cbiAgICAgICAgcHJvY2VkdXJlID0gbmV3IFByb2NlZHVyZShzdHJpbmcsIHR5cGUsIGxhYmVsLCBwYXJhbWV0ZXJzLCByZXR1cm5CbG9jayk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZEV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGJyYWNrZXRlZEV4cHJlc3Npb24gPSBudWxsO1xuXG4gIGNvbnN0IGJyYWNrZXRlZEV4cHJlc3Npb25Ob2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0QnJhY2tldGVkRXhwcmVzc2lvbk5vZGUoKTtcblxuICBpZiAoYnJhY2tldGVkRXhwcmVzc2lvbk5vZGUgIT09IG51bGwpIHtcbiAgICBicmFja2V0ZWRFeHByZXNzaW9uID0gYnJhY2tldGVkRXhwcmVzc2lvbkZyb21CcmFja2V0ZWRFeHByZXNzaW9uTm9kZShicmFja2V0ZWRFeHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYnJhY2tldGVkRXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tQnJhY2tldGVkRXhwcmVzc2lvbk5vZGUoYnJhY2tldGVkRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZXhwcmVzc2lvbk5vZGUgPSBicmFja2V0ZWRFeHByZXNzaW9uTm9kZS5nZXRFeHByZXNzaW9uTm9kZSgpLFxuICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmlzb25FeHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25OT2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb21wYXJpc29uRXhwcmVzc2lvbiA9IG51bGw7XG5cbiAgY29uc3QgY29tcGFyaXNvbkV4cHJlc3Npb25Ob2RlID0gZXhwcmVzc2lvbk5PZGUuZ2V0Q29tcGFyaXNvbkV4cHJlc3Npb25Ob2RlKCk7XG5cbiAgaWYgKGNvbXBhcmlzb25FeHByZXNzaW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbXBhcmlzb25FeHByZXNzaW9uID0gY29tcGFyaXNvbkV4cHJlc3Npb25Gcm9tQ29tcGFyaXNvbkV4cHJlc3Npb25Ob2RlKGNvbXBhcmlzb25FeHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gY29tcGFyaXNvbkV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyc05vZGUgPSBwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUuZ2V0UGFyYW1ldGVyc05vZGUoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Qcm9jZWR1cmVBbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0VHlwZSgpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuQmxvY2tGcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlKHByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXR1cm5CbG9ja05vZGUgPSBwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUuZ2V0UmV0dXJuQmxvY2tOb2RlKCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJldHVybkJsb2NrO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVmdEV4cHJlc3Npb25Gcm9tTG9naWNhbEV4cHJlc3Npb25Ob2RlKGxvZ2ljYWxFeHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsZWZ0RXhwcmVzc2lvbk5vZGUgPSBsb2dpY2FsRXhwcmVzc2lvbk5vZGUuZ2V0TGVmdEV4cHJlc3Npb25Ob2RlKCksXG4gICAgICAgIGxlZnRFeHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShsZWZ0RXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsZWZ0RXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJpZ2h0RXhwcmVzc2lvbkZyb21Mb2dpY2FsRXhwcmVzc2lvbk5vZGUobG9naWNhbEV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJpZ2h0RXhwcmVzc2lvbk5vZGUgPSBsb2dpY2FsRXhwcmVzc2lvbk5vZGUuZ2V0UmlnaHRFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICByaWdodEV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKHJpZ2h0RXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodEV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlQXNzaWdubWVudE5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSh0eXBlLCB2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRFeHByZXNzaW9uRnJvbUNvbXB6cmlzb25FeHByZXNzaW9uTm9kZShjb21wYXJpc29uRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdEV4cHJlc3Npb25Ob2RlID0gY29tcGFyaXNvbkV4cHJlc3Npb25Ob2RlLmdldExlZnRFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICBsZWZ0RXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUobGVmdEV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdEV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodEV4cHJlc3Npb25Gcm9tQ29tcHpyaXNvbkV4cHJlc3Npb25Ob2RlKGNvbXBhcmlzb25FeHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodEV4cHJlc3Npb25Ob2RlID0gY29tcGFyaXNvbkV4cHJlc3Npb25Ob2RlLmdldExlZnRFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICByaWdodEV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKHJpZ2h0RXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodEV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlQXNzaWdubWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbVZhcmlhYmxlQXNzaWdubWVudE5vZGUodmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZyA9IHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUodHlwZSwgdmFyaWFibGUsIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcsICAvLy9cbiAgICAgICAgYXNzaWdubWVudCA9IG5ldyBWYXJpYWJsZUFzc2lnbm1lbnQoc3RyaW5nLCB2YXJpYWJsZSwgZXhwcmVzc2lvbik7XG5cbiAgcmV0dXJuIGFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0FycmF5RnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybXNBcnJheSA9IHRlcm1Ob2Rlcy5tYXAoKHRlcm1Ob2RlKSA9PiB7IC8vL1xuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9KTtcblxuICByZXR1cm4gdGVybXNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtdGVyc0FycmF5RnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlck5vZGVzID0gcGFyYW1ldGVyc05vZGUuZ2V0UGFyYW1ldGVyTm9kZXMoKSxcbiAgICAgICAgcGFyYW10ZXJzQXJyYXkgPSBwYXJhbWV0ZXJOb2Rlcy5tYXAoKHBhcmFtZXRlck5vZGUpID0+IHsgLy8vXG4gICAgICAgICAgY29uc3QgcGFyYW1ldGVyID0gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gcGFyYW10ZXJzQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lZFBhcmFtdGVyc0FycmF5RnJvbU5hbWVkUGFyYW1ldGVyTm9kZXMobmFtZWRQYXJhbWV0ZXJOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBuYW1lZFBhcmFtdGVyc0FycmF5ID0gbmFtZWRQYXJhbWV0ZXJOb2Rlcy5tYXAoKG5hbWVkUGFyYW1ldGVyTm9kZSkgPT4geyAvLy9cbiAgICBjb25zdCBuYW1lZFBhcmFtZXRlciA9IG5hbWVkUGFyYW1ldGVyRnJvbU5hbWVkUGFyYW1ldGVyTm9kZShuYW1lZFBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG5hbWVkUGFyYW1ldGVyO1xuICB9KTtcblxuICByZXR1cm4gbmFtZWRQYXJhbXRlcnNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c05vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50Tm9kZXMgPSB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZS5nZXRWYXJpYWJsZUFzc2lnbm1lbnROb2RlcygpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkgPSB2YXJpYWJsZUFzc2lnbm1lbnROb2Rlcy5tYXAoKHZhcmlhYmxlQXNzaWdubWVudE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZUFzc2lnbm1lbnQgPSB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50O1xuICAgICAgICB9KTtcblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50c0FycmF5O1xufVxuIl0sIm5hbWVzIjpbImFsaWFzRnJvbU5hbWVkUGFyYW1ldGVyTm9kZSIsImFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwiYW5vbnltb3VzUHJvY2VkdXJlRnJvbUV2ZXJ5Tm9kZSIsImFub255bW91c1Byb2NlZHVyZUZyb21SZWR1Y2VOb2RlIiwiYW5vbnltb3VzUHJvY2VkdXJlRnJvbVNvbWVOb2RlIiwiYXJyYXlBc3NpZ25tZW50RnJvbUFycmF5QXNzaWdubWVudE5vZGUiLCJhcnJheUFzc2lnbm1lbnRGcm9tU3RlcE5vZGUiLCJicmFja2V0ZWRFeHByZXNzaW9uRnJvbUJyYWNrZXRlZEV4cHJlc3Npb25Ob2RlIiwiYnJhY2tldGVkRXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZSIsImJyYWNrZXRlZFRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUiLCJicmFja2V0ZWRUZXJtRnJvbVRlcm1Ob2RlIiwiY29tcGFyaXNvbkV4cHJlc3Npb25Gcm9tQ29tcGFyaXNvbkV4cHJlc3Npb25Ob2RlIiwiY29tcGFyaXNvbkV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUiLCJjb21wYXJpc29uVGVybUZyb21Db21wYXJpc29uVGVybU5vZGUiLCJjb21wYXJpc29uVGVybUZyb21UZXJtTm9kZSIsImRpc2p1bmN0aW9uRnJvbUxvZ2ljYWxFeHByZXNzaW9uTm9kZSIsImRpc2p1bmN0aW9uRnJvbUxvZ2ljYWxUZXJtTm9kZSIsImVsc2VFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlIiwiZXJyb3JGcm9tRXJyb3JOb2RlIiwiZXZlcnlGcm9tRXZlcnlOb2RlIiwiZXZlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJleHByZXNzaW9uRnJvbUJyYWNrZXRlZEV4cHJlc3Npb25Ob2RlIiwiZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZSIsImV4cHJlc3Npb25Gcm9tTmVnYXRlZEV4cHJlc3Npb25Ob2RlIiwiZXhwcmVzc2lvbkZyb21SZWR1Y2VOb2RlIiwiZXhwcmVzc2lvbkZyb21UeXBlQW5kVmFyaWFibGVOb2RlIiwiZXhwcmVzc2lvbkZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlIiwiZXhwcmVzc2lvbkZyb21WYXJpYWJsZU5vZGUiLCJpZkV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUiLCJpbml0aWFsRXhwcmVzc2lvbkZyb21SZWR1Y2VOb2RlIiwibGFiZWxGcm9tTGFiZWxOb2RlIiwibGFiZWxGcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlIiwibGVmdEV4cHJlc3Npb25Gcm9tQ29tcHpyaXNvbkV4cHJlc3Npb25Ob2RlIiwibGVmdEV4cHJlc3Npb25Gcm9tTG9naWNhbEV4cHJlc3Npb25Ob2RlIiwibGVmdFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlIiwibGVmdFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlIiwibG9naWNhbEV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUiLCJsb2dpY2FsRXhwcmVzc2lvbkZyb21Mb2dpY2FsRXhwcmVzc2lvbk5vZGUiLCJsb2dpY2FsVGVybUZyb21Mb2dpY2FsVGVybU5vZGUiLCJsb2dpY2FsVGVybUZyb21UZXJtTm9kZSIsIm5hbWVGcm9tTGFiZWxOb2RlIiwibmFtZUZyb21OYW1lZFBhcmFtZXRlck5vZGUiLCJuYW1lRnJvbVBhcmFuZXRlck5vZGUiLCJuYW1lRnJvbVJlZmVyZW5jZU5vZGUiLCJuYW1lRnJvbVZhcmlhYmxlTm9kZSIsIm5hbWVkUGFyYW1ldGVyRnJvbU5hbWVkUGFyYW1ldGVyTm9kZSIsIm5hbWVkUGFyYW1ldGVyc0Zyb21OYW1lZFBhcmFtZXRlcnNOb2RlIiwibmFtZWRQYXJhbWV0ZXJzRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlIiwibmFtZWRQYXJhbXRlcnNBcnJheUZyb21OYW1lZFBhcmFtZXRlck5vZGVzIiwibmVnYXRlZEV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUiLCJuZWdhdGVkRXhwcmVzc2lvbkZyb21OZWdhdGVkRXhwcmVzc2lvbk5vZGUiLCJuZWdhdGVkRnJvbUNvbXBhcmlzb25FeHByZXNzaW9uTm9kZSIsIm5lZ2F0ZWRGcm9tQ29tcGFyaXNvblRlcm1Ob2RlIiwibmVnYXRlZFRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlIiwibmVnYXRlZFRlcm1Gcm9tVGVybU5vZGUiLCJub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJub2RlUXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZSIsIm5vZGVzUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJub2Rlc1F1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlIiwibm9uc2Vuc2ljYWxGcm9tUmV0dXJuQmxvY2tOb2RlIiwib2JqZWN0QXNzaWdubWVudEZyb21PYmplY3RBc3NpZ25tZW50Tm9kZSIsIm9iamVjdEFzc2lnbm1lbnRGcm9tU3RlcE5vZGUiLCJwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlcnNGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsInBhcmFtZXRlcnNGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZSIsInBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUiLCJwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSIsInBhcmFtdGVyc0FycmF5RnJvbVBhcmFtZXRlcnNOb2RlIiwicHJpbWl0aXZlRnJvbUV4cHJlc3Npb25Ob2RlIiwicHJpbWl0aXZlRnJvbVByaW1pdGl2ZU5vZGUiLCJwcmltaXRpdmVGcm9tVGVybU5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbUV4cHJlc3Npb25Ob2RlIiwicHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZURlY2xhcmF0aW9uRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSIsInByb2NlZHVyZUZyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUiLCJxdWVyeUZyb21Ob2RlUXVlcnlOb2RlIiwicXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUiLCJyZWR1Y2VGcm9tRXhwcmVzc2lvbk5vZGUiLCJyZWR1Y2VGcm9tUmVkdWNlTm9kZSIsInJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlIiwicmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsInJldHVybkJsb2NrRnJvbUV4cHJlc3Npb25Ob2RlIiwicmV0dXJuQmxvY2tGcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlIiwicmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlIiwicmV0dXJuU3RhdGVtZW50RnJvbVJldHVybkJsb2NrTm9kZSIsInJldHVyblN0YXRlbWVudEZyb21SZXR1cm5TdGF0ZW1lbnROb2RlIiwicmlnaHRFeHByZXNzaW9uRnJvbUNvbXB6cmlzb25FeHByZXNzaW9uTm9kZSIsInJpZ2h0RXhwcmVzc2lvbkZyb21Mb2dpY2FsRXhwcmVzc2lvbk5vZGUiLCJyaWdodFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlIiwicmlnaHRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZSIsInNvbWVGcm9tRXhwcmVzc2lvbk5vZGUiLCJzb21lRnJvbVNvbWVOb2RlIiwic3RlcEZyb21TdGVwTm9kZSIsInN0ZXBzRnJvbVJldHVybkJsb2NrTm9kZSIsInRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUiLCJ0ZXJtRnJvbU5lZ2F0ZWRUZXJtTm9kZSIsInRlcm1Gcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSIsInRlcm1Gcm9tVGVybU5vZGUiLCJ0ZXJtRnJvbVRlcm5hcnlOb2RlIiwidGVybXNBcnJheUZyb21UZXJtTm9kZXMiLCJ0ZXJtc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInRlcm1zRnJvbVRlcm1zTm9kZSIsInRlcm5hcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJ0ZXJuYXJ5RnJvbVRlcm5hcnlOb2RlIiwidHlwZUZyb21Mb2dpY2FsRXhwcmVzc2lvbk5vZGUiLCJ0eXBlRnJvbUxvZ2ljYWxUZXJtTm9kZSIsInR5cGVGcm9tTmFtZWRQYXJhbWV0ZXJOb2RlIiwidHlwZUZyb21OZWdhdGVkRXhwcmVzc2lvbk5vZGUiLCJ0eXBlRnJvbVBhcmFuZXRlck5vZGUiLCJ0eXBlRnJvbVByaW1pdGl2ZU5vZGUiLCJ0eXBlRnJvbVByb2NlZHVyZUFub255bW91c1Byb2NlZHVyZU5vZGUiLCJ0eXBlRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJ0eXBlRnJvbVZhcmlhYmxlTm9kZSIsInZhbHVlRnJvbVByaW1pdGl2ZU5vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXlGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwidmFyaWFibGVBc3NpZ25tZW50c0Zyb21TdGVwTm9kZSIsInZhcmlhYmxlQXNzaWdubWVudHNGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJ2YXJpYWJsZUZyb21BcnJheUFzc2lnbm1lbnROb2RlIiwidmFyaWFibGVGcm9tRXZlcnlOb2RlIiwidmFyaWFibGVGcm9tRXhwcmVzc2lvbk5vZGUiLCJ2YXJpYWJsZUZyb21Ob2RlUXVlcnlOb2RlIiwidmFyaWFibGVGcm9tTm9kZXNRdWVyeU5vZGUiLCJ2YXJpYWJsZUZyb21PYmplY3RBc3NpZ25tZW50Tm9kZSIsInZhcmlhYmxlRnJvbVJlZHVjZU5vZGUiLCJ2YXJpYWJsZUZyb21Tb21lTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1Ob2RlIiwidmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVOb2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIiwic3RlcE5vZGUiLCJjb250ZXh0IiwiU3RlcCIsImVsZW1lbnRzIiwibm9kZSIsInN0cmluZyIsIm5vZGVBc1N0cmluZyIsImFycmF5QXNzaWdubWVudCIsIm9iamVjdEFzc2lnbWVudCIsInZhcmlhYmxlc0RlY2xhcmF0aW9uIiwic3RlcCIsInNvbWVOb2RlIiwiU29tZSIsInZhcmlhYmxlIiwiYW5vbnltb3VzUHJvY2VkdXJlIiwic29tZVN0cmluZyIsInNvbWVTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUiLCJzb21lIiwidGVybU5vZGUiLCJUZXJtIiwicHJpbWl0aXZlIiwibmVnYXRlZFRlcm0iLCJsb2dpY2FsVGVybSIsImJyYWNrZXRlZFRlcm0iLCJjb21wYXJpc29uVGVybSIsInByb3BlcnRpZXMiLCJ0ZXJtU3RyaW5nIiwidGVybVN0cmluZ0Zyb21QcmltaXRpdmVBbmRQcm9wZXJ0aWVzIiwidGVybSIsInRlcm1zTm9kZSIsIlRlcm1zIiwidGVybU5vZGVzIiwiZ2V0VGVybU5vZGVzIiwidGVybXNBcnJheSIsImFycmF5IiwidGVybXMiLCJlcnJvck5vZGUiLCJFcnJvciIsImVycm9yIiwiZXZlcnlOb2RlIiwiRXZlcnkiLCJldmVyeVN0cmluZyIsImV2ZXJ5U3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwiZXZlcnkiLCJsYWJlbE5vZGUiLCJMYWJlbCIsIm5hbWUiLCJsYWJlbCIsInJlZHVjZU5vZGUiLCJSZWR1Y2UiLCJpbml0aWFsRXhwcmVzc2lvbiIsInJlZHVjZVN0cmluZyIsInJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwicmVkdWNlIiwidGVybmFyeU5vZGUiLCJUZXJuYXJ5IiwiaWZFeHByZXNzaW9uIiwiZWxzZUV4cHJlc3Npb24iLCJ0ZXJuYXJ5U3RyaW5nIiwidGVybmFyeVN0cmluZ0Zyb21UZXJtIiwidGVybmFyeSIsInZhcmlhYmxlTm9kZSIsIlZhcmlhYmxlIiwidHlwZSIsImV4cHJlc3Npb24iLCJyZWZlcmVuY2VOb2RlIiwiUmVmZXJlbmNlIiwicmVmZXJlbmNlIiwicGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlciIsIlBhcmFtZXRlciIsIm5vZGVRdWVyeU5vZGUiLCJOb2RlUXVlcnkiLCJxdWVyeSIsIm5vZGVRdWVyeSIsInByaW1pdGl2ZU5vZGUiLCJQcmltaXRpdmUiLCJwcmltaXRpdmVTdHJpbmciLCJ2YWx1ZSIsIm5vZGVzUXVlcnlOb2RlIiwiTm9kZXNRdWVyeSIsIm5vZGVzUXVlcnkiLCJwYXJhbWV0ZXJzTm9kZSIsIlBhcmFtZXRlcnMiLCJwYXJhbXRlcnNBcnJheSIsInBhcmFtZXRlcnMiLCJleHByZXNzaW9uTm9kZSIsIkV4cHJlc3Npb24iLCJyZXR1cm5CbG9jayIsInByb2NlZHVyZUNhbGwiLCJuZWdhdGVkRXhwcmVzc2lvbiIsImxvZ2ljYWxFeHByZXNzaW9uIiwiYnJhY2tldGVkRXhwcmVzc2lvbiIsImNvbXBhcmlzb25FeHByZXNzaW9uIiwiZXhwcmVzc2lvblN0cmluZyIsImV4cHJlc3Npb25TdHJpbmdGcm9tUHJpbWl0aXZlQW5kUHJvcGVydGllcyIsInJldHVybkJsb2NrTm9kZSIsIlJldHVybkJsb2NrIiwic3RlcHMiLCJub25zZW5zaWNhbCIsInJldHVyblN0YXRlbWVudCIsInJldHVybkJsb2NrU3RyaW5nIiwicmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSIsInByb2NlZHVyZUNhbGxOb2RlIiwiUHJvY2VkdXJlQ2FsbCIsImV4cHJlc3Npb25zIiwibmFtZWRQYXJhbWV0ZXJOb2RlIiwiTmFtZWRQYXJhbWV0ZXIiLCJhbGlhcyIsIm5hbWVkUGFyYW1ldGVyIiwibmFtZWRQYXJhbWV0ZXJzTm9kZSIsIk5hbWVkUGFyYW1ldGVycyIsIm5hbWVkUGFyYW1ldGVyTm9kZXMiLCJnZXROYW1lZFBhcmFtZXRlck5vZGVzIiwibmFtZWRQYXJhbWV0ZXJzQXJyYXkiLCJuYW1lZFBhcmFtZXRlcnMiLCJhcnJheUFzc2lnbm1lbnROb2RlIiwiQXJyYXlBc3NpZ25tZW50IiwicmV0dXJuU3RhdGVtZW50Tm9kZSIsIlJldHVyblN0YXRlbWVudCIsIm9iamVjdEFzc2lnbm1lbnROb2RlIiwiZ2V0TmFtZWRQYXJhbWV0ZXJzTm9kZSIsIk9iamVjdEFzc2lnbWVudCIsIm9iamVjdEFzc2lnbm1lbnQiLCJuZWdhdGVkRXhwcmVzc2lvbk5vZGUiLCJOZWdhdGVkRXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Ob2RlIiwibG9naWNhbEV4cHJlc3Npb25Ob2RlIiwiTG9naWNhbEV4cHJlc3Npb24iLCJkaXNqdW5jdGlvbiIsImxlZnRFeHByZXNzaW9uIiwicmlnaHRFeHByZXNzaW9uIiwiYW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsIkFub255bW91c1Byb2NlZHVyZSIsIm5vbnltb3VzUHJvY2VkdXJlU3RyaW5nIiwiYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2siLCJ2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsIlZhcmlhYmxlQXNzaWdubWVudHMiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkiLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmciLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudHMiLCJicmFja2V0ZWRFeHByZXNzaW9uTm9kZSIsIkJyYWNrZXRlZEV4cHJlc3Npb24iLCJjb21wYXJpc29uRXhwcmVzc2lvbk5vZGUiLCJDb21wYXJpc29uRXhwcmVzc2lvbiIsIm5lZ2F0ZWQiLCJwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUiLCJQcm9jZWR1cmVEZWNsYXJhdGlvbiIsInByb2NlZHVyZSIsInByb2NlZHVyZURlY2xhcmF0aW9uU3RyaW5nIiwicHJvY2VkdXJlRGVjbGFyYXRpb25TdHJpbmdGcm9tUHJvY2VkdXJlIiwicHJvY2VkdXJlRGVjbGFyYXRpb24iLCJnZXROYW1lIiwiZ2V0VGVybU5vZGUiLCJnZXRWYXJpYWJsZU5vZGUiLCJnZXRQcmltaXRpdmVOb2RlIiwiZ2V0VHlwZSIsImdldFNvbWVOb2RlIiwiZ2V0U3RyaW5nIiwiUXVlcnkiLCJmcm9tRXhwcmVzc2lvblN0cmluZyIsImdldFZhbHVlIiwiZ2V0RXZlcnlOb2RlIiwibmVnYXRlZFRlcm1Ob2RlIiwiZ2V0TmVnYXRlZFRlcm1Ob2RlIiwibG9naWNhbFRlcm1Ob2RlIiwiZ2V0TG9naWNhbFRlcm1Ob2RlIiwiQk9PTEVBTl9UWVBFIiwiZ2V0UmVkdWNlTm9kZSIsInN0ZXBOb2RlcyIsImdldFN0ZXBOb2RlcyIsIm1hcCIsImdldFRlcm5hcnlOb2RlIiwiYnJhY2tldGVkVGVybU5vZGUiLCJnZXRCcmFja2V0ZWRUZXJtTm9kZSIsInRlcm1OT2RlIiwiY29tcGFyaXNvblRlcm1Ob2RlIiwiZ2V0Q29tcGFyaXNvblRlcm1Ob2RlIiwiZ2V0VGVybXNOb2RlIiwibGVmdFRlcm1Ob2RlIiwiZ2V0TGVmdFRlcm1Ob2RlIiwibGVmdFRlcm0iLCJnZXRBcnJheUFzc2lnbm1lbnROb2RlIiwiaWZFeHByZXNzaW9uTm9kZSIsImdldElmRXhwcmVzc2lvbk5vZGUiLCJnZXROb2RlUXVlcnlOb2RlIiwiZ2V0QWxpYXMiLCJnZXRPYmplY3RBc3NpZ25tZW50Tm9kZSIsImdldE5vZGVzUXVlcnlOb2RlIiwicmlnaHRUZXJtTm9kZSIsImdldFJpZ2h0VGVybU5vZGUiLCJyaWdodFRlcm0iLCJpc05lZ2F0ZWQiLCJlbHNlRXhwcmVzc2lvbk5vZGUiLCJnZXRFbHNlRXhwcmVzc2lvbk5vZGUiLCJnZXRSZXR1cm5CbG9ja05vZGUiLCJnZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwiaXNOb25zZW5zaWNhbCIsImdldFJlZmVyZW5jZU5vZGUiLCJpc0Rpc2p1bmN0aW9uIiwiTmVnYXRlZFRlcm0iLCJ0eXBlRnJvbU5lZ2F0ZWRUZXJtTm9kZSIsIkxvZ2ljYWxUZXJtIiwidmFyaWFibGVTdHJpbmciLCJ2YXJpYWJsZVN0cmluZ0Zyb21OYW1lIiwiZ2V0VmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJnZXRQcm9jZWR1cmVDYWxsTm9kZSIsImdldFBhcmFtZXRlcnNOb2RlIiwiZ2V0TGFiZWxOb2RlIiwiZ2V0UmV0dXJuU3RhdGVtZW50Tm9kZSIsIkJyYWNrZXRlZFRlcm0iLCJnZXROZWdhdGVkRXhwcmVzc2lvbk5vZGUiLCJnZXRMb2dpY2FsRXhwcmVzc2lvbk5vZGUiLCJ2YXJpYWJsZUFzc2lnbWVudE5vZGUiLCJDb21wYXJpc29uVGVybSIsIlByb2NlZHVyZSIsInByb2NlZHVyZVN0cmluZyIsInByb2NlZHVyZVN0cmluZ0Zyb21UeXBlTGFiZWxQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2siLCJnZXRCcmFja2V0ZWRFeHByZXNzaW9uTm9kZSIsImV4cHJlc3Npb25OT2RlIiwiZ2V0Q29tcGFyaXNvbkV4cHJlc3Npb25Ob2RlIiwibGVmdEV4cHJlc3Npb25Ob2RlIiwiZ2V0TGVmdEV4cHJlc3Npb25Ob2RlIiwicmlnaHRFeHByZXNzaW9uTm9kZSIsImdldFJpZ2h0RXhwcmVzc2lvbk5vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnROb2RlIiwiVmFyaWFibGVBc3NpZ25tZW50IiwidmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZSIsImFzc2lnbm1lbnQiLCJwYXJhbWV0ZXJOb2RlcyIsImdldFBhcmFtZXRlck5vZGVzIiwibmFtZWRQYXJhbXRlcnNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudE5vZGVzIiwiZ2V0VmFyaWFibGVBc3NpZ25tZW50Tm9kZXMiLCJ2YXJpYWJsZUFzc2lnbm1lbnQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQW13QmdCQTtlQUFBQTs7UUF2WkFDO2VBQUFBOztRQXlqQkFDO2VBQUFBOztRQThDQUM7ZUFBQUE7O1FBL0hBQztlQUFBQTs7UUF4aUJBQztlQUFBQTs7UUE0YUFDO2VBQUFBOztRQXBWQUM7ZUFBQUE7O1FBaXVCQUM7ZUFBQUE7O1FBbkdBQztlQUFBQTs7UUE1WEFDO2VBQUFBOztRQXhQQUM7ZUFBQUE7O1FBMHVCQUM7ZUFBQUE7O1FBbkRBQztlQUFBQTs7UUE1YUFDO2VBQUFBOztRQStaQUM7ZUFBQUE7O1FBek1BQztlQUFBQTs7UUExREFDO2VBQUFBOztRQXZ1QkFDO2VBQUFBOztRQVNBQztlQUFBQTs7UUE2Y0FDO2VBQUFBOztRQTZrQkFDO2VBQUFBOztRQTE1QkFDO2VBQUFBOztRQWkwQkFDO2VBQUFBOztRQW5jQUM7ZUFBQUE7O1FBa1pBQztlQUFBQTs7UUEwRUFDO2VBQUFBOztRQTVZQUM7ZUFBQUE7O1FBK0RBQztlQUFBQTs7UUF3TUFDO2VBQUFBOztRQTEwQkFDO2VBQUFBOztRQWs1QkFDO2VBQUFBOztRQXlMQUM7ZUFBQUE7O1FBckJBQztlQUFBQTs7UUFoVEFDO2VBQUFBOztR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
|