@sapui5/sap.fe.base 1.143.0 → 1.144.0
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/package.json +1 -1
- package/src/sap/fe/base/.library +1 -1
- package/src/sap/fe/base/AnnotationEnum.js +5 -3
- package/src/sap/fe/base/AnnotationEnum.ts +5 -2
- package/src/sap/fe/base/BindingToolkit.js +318 -34
- package/src/sap/fe/base/BindingToolkit.ts +639 -53
- package/src/sap/fe/base/BuildingBlockBase.js +4 -2
- package/src/sap/fe/base/BuildingBlockBase.ts +3 -0
- package/src/sap/fe/base/jsx-runtime/jsx-control.js +5 -5
- package/src/sap/fe/base/jsx-runtime/jsx-control.ts +5 -4
- package/src/sap/fe/base/jsx-runtime/jsx-xml.js +4 -2
- package/src/sap/fe/base/jsx-runtime/jsx-xml.ts +3 -1
- package/src/sap/fe/base/library.js +1 -1
|
@@ -14,12 +14,16 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
14
14
|
function isProperty(serviceObject) {
|
|
15
15
|
return serviceObject?._type === "Property";
|
|
16
16
|
}
|
|
17
|
+
_exports.isProperty = isProperty;
|
|
18
|
+
function isActionParameter(serviceObject) {
|
|
19
|
+
return serviceObject?._type === "ActionParameter";
|
|
20
|
+
}
|
|
17
21
|
|
|
18
22
|
/**
|
|
19
23
|
* An expression that evaluates to type T.
|
|
20
24
|
* @typedef BindingToolkitExpression
|
|
21
25
|
*/
|
|
22
|
-
|
|
26
|
+
|
|
23
27
|
const EDM_TYPE_MAPPING = {
|
|
24
28
|
"Edm.Boolean": {
|
|
25
29
|
type: "sap.ui.model.odata.type.Boolean"
|
|
@@ -128,6 +132,8 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
128
132
|
case "EmbeddedBinding":
|
|
129
133
|
case "EmbeddedExpressionBinding":
|
|
130
134
|
return a.value === b.value;
|
|
135
|
+
case "Arithmetic":
|
|
136
|
+
return a.operator === b.operator && _checkExpressionsAreEqual(a.operand1, b.operand1) && _checkExpressionsAreEqual(a.operand2, b.operand2);
|
|
131
137
|
case "Not":
|
|
132
138
|
return _checkExpressionsAreEqual(a.operand, b.operand);
|
|
133
139
|
case "Truthy":
|
|
@@ -298,13 +304,112 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
298
304
|
};
|
|
299
305
|
}
|
|
300
306
|
}
|
|
307
|
+
_exports.or = or;
|
|
308
|
+
function add(leftOperand, rightOperand) {
|
|
309
|
+
return arithmetic("+", leftOperand, rightOperand);
|
|
310
|
+
}
|
|
311
|
+
_exports.add = add;
|
|
312
|
+
function subtract(leftOperand, rightOperand) {
|
|
313
|
+
return arithmetic("-", leftOperand, rightOperand);
|
|
314
|
+
}
|
|
315
|
+
_exports.subtract = subtract;
|
|
316
|
+
function multiply(leftOperand, rightOperand) {
|
|
317
|
+
return arithmetic("*", leftOperand, rightOperand);
|
|
318
|
+
}
|
|
319
|
+
_exports.multiply = multiply;
|
|
320
|
+
function divide(leftOperand, rightOperand) {
|
|
321
|
+
return arithmetic("/", leftOperand, rightOperand);
|
|
322
|
+
}
|
|
323
|
+
_exports.divide = divide;
|
|
324
|
+
function modulo(leftOperand, rightOperand) {
|
|
325
|
+
return arithmetic("%", leftOperand, rightOperand);
|
|
326
|
+
}
|
|
327
|
+
_exports.modulo = modulo;
|
|
328
|
+
function negate(operand) {
|
|
329
|
+
return arithmetic("Neg", operand, null);
|
|
330
|
+
}
|
|
331
|
+
_exports.negate = negate;
|
|
332
|
+
function floor(operand) {
|
|
333
|
+
return arithmetic("Floor", operand, null);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* Arithmetic expression.
|
|
338
|
+
* @param operator
|
|
339
|
+
* @param leftOperand
|
|
340
|
+
* @param rightOperand
|
|
341
|
+
* @returns Expression evaluating to number
|
|
342
|
+
*/
|
|
343
|
+
_exports.floor = floor;
|
|
344
|
+
function arithmetic(operator, leftOperand, rightOperand) {
|
|
345
|
+
const leftExpression = wrapPrimitive(leftOperand);
|
|
346
|
+
const rightExpression = wrapPrimitive(rightOperand);
|
|
347
|
+
if (hasUnresolvableExpression(leftExpression, rightExpression)) {
|
|
348
|
+
return unresolvableExpression;
|
|
349
|
+
}
|
|
350
|
+
if (isConstant(leftExpression) && isConstant(rightExpression)) {
|
|
351
|
+
switch (operator) {
|
|
352
|
+
case "+":
|
|
353
|
+
if (leftExpression.value === null || leftExpression.value === undefined) {
|
|
354
|
+
return constant(rightExpression.value);
|
|
355
|
+
} else if (rightExpression.value === null || rightExpression.value === undefined) {
|
|
356
|
+
return constant(leftExpression.value);
|
|
357
|
+
}
|
|
358
|
+
const sum = leftExpression.value + rightExpression.value;
|
|
359
|
+
return constant(sum);
|
|
360
|
+
case "-":
|
|
361
|
+
if (leftExpression.value === null || leftExpression.value === undefined) {
|
|
362
|
+
return constant(rightExpression.value);
|
|
363
|
+
} else if (rightExpression.value === null || rightExpression.value === undefined) {
|
|
364
|
+
return constant(leftExpression.value);
|
|
365
|
+
}
|
|
366
|
+
const diff = leftExpression.value - rightExpression.value;
|
|
367
|
+
return constant(diff);
|
|
368
|
+
case "/":
|
|
369
|
+
if (leftExpression.value === null || leftExpression.value === undefined || rightExpression.value === null || rightExpression.value === undefined) {
|
|
370
|
+
return constant(0);
|
|
371
|
+
}
|
|
372
|
+
const div = leftExpression.value / rightExpression.value;
|
|
373
|
+
return constant(div);
|
|
374
|
+
case "Neg":
|
|
375
|
+
if (leftExpression.value === null || leftExpression.value === undefined) {
|
|
376
|
+
return constant(0);
|
|
377
|
+
}
|
|
378
|
+
return constant(-leftExpression.value);
|
|
379
|
+
case "%":
|
|
380
|
+
if (leftExpression.value === null || leftExpression.value === undefined || rightExpression.value === null || rightExpression.value === undefined) {
|
|
381
|
+
return constant(0);
|
|
382
|
+
}
|
|
383
|
+
const mod = leftExpression.value % rightExpression.value;
|
|
384
|
+
return constant(mod);
|
|
385
|
+
case "Floor":
|
|
386
|
+
if (leftExpression.value === null || leftExpression.value === undefined) {
|
|
387
|
+
return constant(0);
|
|
388
|
+
}
|
|
389
|
+
return constant(Math.floor(leftExpression.value));
|
|
390
|
+
case "*":
|
|
391
|
+
if (leftExpression.value === null || leftExpression.value === undefined || rightExpression.value === null || rightExpression.value === undefined) {
|
|
392
|
+
return constant(0);
|
|
393
|
+
}
|
|
394
|
+
const mult = leftExpression.value * rightExpression.value;
|
|
395
|
+
return constant(mult);
|
|
396
|
+
}
|
|
397
|
+
} else {
|
|
398
|
+
return {
|
|
399
|
+
_type: "Arithmetic",
|
|
400
|
+
operator: operator,
|
|
401
|
+
operand1: leftExpression,
|
|
402
|
+
operand2: rightExpression
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
}
|
|
301
406
|
|
|
302
407
|
/**
|
|
303
408
|
* Logical `not` operator.
|
|
304
409
|
* @param operand The expression to reverse
|
|
305
410
|
* @returns The resulting expression that evaluates to boolean
|
|
306
411
|
*/
|
|
307
|
-
_exports.
|
|
412
|
+
_exports.arithmetic = arithmetic;
|
|
308
413
|
function not(operand) {
|
|
309
414
|
operand = wrapPrimitive(operand);
|
|
310
415
|
if (hasUnresolvableExpression(operand)) {
|
|
@@ -348,6 +453,11 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
348
453
|
...operand,
|
|
349
454
|
operator: "<"
|
|
350
455
|
};
|
|
456
|
+
default:
|
|
457
|
+
return {
|
|
458
|
+
_type: "Not",
|
|
459
|
+
operand: operand
|
|
460
|
+
};
|
|
351
461
|
}
|
|
352
462
|
} else if (operand._type === "Not") {
|
|
353
463
|
return operand.operand;
|
|
@@ -637,6 +747,10 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
637
747
|
function isComplexAnnotationExpression(annotationValue) {
|
|
638
748
|
return typeof annotationValue === "object" && !isPrimitiveObject(annotationValue);
|
|
639
749
|
}
|
|
750
|
+
let CONVERTER_ROOT_SYMBOL;
|
|
751
|
+
function setConverterRootSymbol(converterRootSymbol) {
|
|
752
|
+
CONVERTER_ROOT_SYMBOL = converterRootSymbol;
|
|
753
|
+
}
|
|
640
754
|
|
|
641
755
|
/**
|
|
642
756
|
* Generate the corresponding annotationValue for a given annotation annotationValue.
|
|
@@ -647,10 +761,15 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
647
761
|
* @param pathVisitor A function to modify the resulting path
|
|
648
762
|
* @returns The annotationValue equivalent to that annotation annotationValue
|
|
649
763
|
*/
|
|
764
|
+
_exports.setConverterRootSymbol = setConverterRootSymbol;
|
|
650
765
|
function getExpressionFromAnnotation(annotationValue) {
|
|
651
766
|
let visitedNavigationPaths = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
652
767
|
let defaultValue = arguments.length > 2 ? arguments[2] : undefined;
|
|
653
768
|
let pathVisitor = arguments.length > 3 ? arguments[3] : undefined;
|
|
769
|
+
let converterRoot;
|
|
770
|
+
if (CONVERTER_ROOT_SYMBOL) {
|
|
771
|
+
converterRoot = annotationValue?.[CONVERTER_ROOT_SYMBOL]?.();
|
|
772
|
+
}
|
|
654
773
|
if (annotationValue === undefined) {
|
|
655
774
|
return wrapPrimitive(defaultValue);
|
|
656
775
|
}
|
|
@@ -662,29 +781,47 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
662
781
|
case "Path":
|
|
663
782
|
return pathInModel(annotationValue.path, undefined, visitedNavigationPaths, pathVisitor);
|
|
664
783
|
case "If":
|
|
665
|
-
return annotationIfExpression(annotationValue.$If, visitedNavigationPaths, pathVisitor);
|
|
784
|
+
return annotationIfExpression(annotationValue.$If, visitedNavigationPaths, pathVisitor, converterRoot);
|
|
666
785
|
case "Not":
|
|
667
|
-
return not(parseAnnotationCondition(annotationValue.$Not, visitedNavigationPaths, pathVisitor));
|
|
786
|
+
return not(parseAnnotationCondition(annotationValue.$Not, visitedNavigationPaths, pathVisitor, converterRoot));
|
|
668
787
|
case "Eq":
|
|
669
|
-
return equal(parseAnnotationCondition(annotationValue.$Eq[0], visitedNavigationPaths, pathVisitor), parseAnnotationCondition(annotationValue.$Eq[1], visitedNavigationPaths, pathVisitor));
|
|
788
|
+
return equal(parseAnnotationCondition(annotationValue.$Eq[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Eq[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
670
789
|
case "Ne":
|
|
671
|
-
return notEqual(parseAnnotationCondition(annotationValue.$Ne[0], visitedNavigationPaths, pathVisitor), parseAnnotationCondition(annotationValue.$Ne[1], visitedNavigationPaths, pathVisitor));
|
|
790
|
+
return notEqual(parseAnnotationCondition(annotationValue.$Ne[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Ne[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
672
791
|
case "Gt":
|
|
673
|
-
return greaterThan(parseAnnotationCondition(annotationValue.$Gt[0], visitedNavigationPaths, pathVisitor), parseAnnotationCondition(annotationValue.$Gt[1], visitedNavigationPaths, pathVisitor));
|
|
792
|
+
return greaterThan(parseAnnotationCondition(annotationValue.$Gt[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Gt[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
674
793
|
case "Ge":
|
|
675
|
-
return greaterOrEqual(parseAnnotationCondition(annotationValue.$Ge[0], visitedNavigationPaths, pathVisitor), parseAnnotationCondition(annotationValue.$Ge[1], visitedNavigationPaths, pathVisitor));
|
|
794
|
+
return greaterOrEqual(parseAnnotationCondition(annotationValue.$Ge[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Ge[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
676
795
|
case "Lt":
|
|
677
|
-
return lessThan(parseAnnotationCondition(annotationValue.$Lt[0], visitedNavigationPaths, pathVisitor), parseAnnotationCondition(annotationValue.$Lt[1], visitedNavigationPaths, pathVisitor));
|
|
796
|
+
return lessThan(parseAnnotationCondition(annotationValue.$Lt[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Lt[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
678
797
|
case "Le":
|
|
679
|
-
return lessOrEqual(parseAnnotationCondition(annotationValue.$Le[0], visitedNavigationPaths, pathVisitor), parseAnnotationCondition(annotationValue.$Le[1], visitedNavigationPaths, pathVisitor));
|
|
798
|
+
return lessOrEqual(parseAnnotationCondition(annotationValue.$Le[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Le[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
680
799
|
case "Or":
|
|
681
800
|
return or(...annotationValue.$Or.map(function (orCondition) {
|
|
682
|
-
return parseAnnotationCondition(orCondition, visitedNavigationPaths, pathVisitor);
|
|
801
|
+
return parseAnnotationCondition(orCondition, visitedNavigationPaths, pathVisitor, converterRoot);
|
|
683
802
|
}));
|
|
684
803
|
case "And":
|
|
685
804
|
return and(...annotationValue.$And.map(function (andCondition) {
|
|
686
|
-
return parseAnnotationCondition(andCondition, visitedNavigationPaths, pathVisitor);
|
|
805
|
+
return parseAnnotationCondition(andCondition, visitedNavigationPaths, pathVisitor, converterRoot);
|
|
687
806
|
}));
|
|
807
|
+
case "In":
|
|
808
|
+
return comparison("In", parseAnnotationCondition(annotationValue.$In[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$In[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
809
|
+
case "Has":
|
|
810
|
+
return comparison("Has", parseAnnotationCondition(annotationValue.$Has[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Has[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
811
|
+
case "Add":
|
|
812
|
+
return add(parseAnnotationCondition(annotationValue.$Add[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Add[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
813
|
+
case "Sub":
|
|
814
|
+
return subtract(parseAnnotationCondition(annotationValue.$Sub[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Sub[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
815
|
+
case "Mul":
|
|
816
|
+
return multiply(parseAnnotationCondition(annotationValue.$Mul[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Mul[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
817
|
+
case "Div":
|
|
818
|
+
return floor(divide(parseAnnotationCondition(annotationValue.$Div[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Div[1], visitedNavigationPaths, pathVisitor, converterRoot)));
|
|
819
|
+
case "DivBy":
|
|
820
|
+
return divide(parseAnnotationCondition(annotationValue.$DivBy[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$DivBy[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
821
|
+
case "Mod":
|
|
822
|
+
return modulo(parseAnnotationCondition(annotationValue.$Mod[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Mod[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
823
|
+
case "Neg":
|
|
824
|
+
return negate(parseAnnotationCondition(annotationValue.$Neg[0], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
688
825
|
case "Apply":
|
|
689
826
|
return annotationApplyExpression(annotationValue, visitedNavigationPaths, pathVisitor);
|
|
690
827
|
case "Constant":
|
|
@@ -700,36 +837,38 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
700
837
|
* @param annotationValue The condition or value from the annotation
|
|
701
838
|
* @param visitedNavigationPaths The path from the root entity set
|
|
702
839
|
* @param pathVisitor A function to modify the resulting path
|
|
840
|
+
* @param converterRoot The root converted metadata
|
|
703
841
|
* @returns An equivalent expression
|
|
704
842
|
*/
|
|
705
843
|
_exports.getExpressionFromAnnotation = getExpressionFromAnnotation;
|
|
706
844
|
function parseAnnotationCondition(annotationValue) {
|
|
707
845
|
let visitedNavigationPaths = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
708
846
|
let pathVisitor = arguments.length > 2 ? arguments[2] : undefined;
|
|
847
|
+
let converterRoot = arguments.length > 3 ? arguments[3] : undefined;
|
|
709
848
|
if (annotationValue === null || typeof annotationValue !== "object") {
|
|
710
849
|
return constant(annotationValue);
|
|
711
850
|
} else if (annotationValue.hasOwnProperty("$Or")) {
|
|
712
851
|
return or(...annotationValue.$Or.map(function (orCondition) {
|
|
713
|
-
return parseAnnotationCondition(orCondition, visitedNavigationPaths, pathVisitor);
|
|
852
|
+
return parseAnnotationCondition(orCondition, visitedNavigationPaths, pathVisitor, converterRoot);
|
|
714
853
|
}));
|
|
715
854
|
} else if (annotationValue.hasOwnProperty("$And")) {
|
|
716
855
|
return and(...annotationValue.$And.map(function (andCondition) {
|
|
717
|
-
return parseAnnotationCondition(andCondition, visitedNavigationPaths, pathVisitor);
|
|
856
|
+
return parseAnnotationCondition(andCondition, visitedNavigationPaths, pathVisitor, converterRoot);
|
|
718
857
|
}));
|
|
719
858
|
} else if (annotationValue.hasOwnProperty("$Not")) {
|
|
720
|
-
return not(parseAnnotationCondition(annotationValue.$Not, visitedNavigationPaths, pathVisitor));
|
|
859
|
+
return not(parseAnnotationCondition(annotationValue.$Not, visitedNavigationPaths, pathVisitor, converterRoot));
|
|
721
860
|
} else if (annotationValue.hasOwnProperty("$Eq")) {
|
|
722
|
-
return equal(parseAnnotationCondition(annotationValue.$Eq[0], visitedNavigationPaths, pathVisitor), parseAnnotationCondition(annotationValue.$Eq[1], visitedNavigationPaths, pathVisitor));
|
|
861
|
+
return equal(parseAnnotationCondition(annotationValue.$Eq[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Eq[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
723
862
|
} else if (annotationValue.hasOwnProperty("$Ne")) {
|
|
724
|
-
return notEqual(parseAnnotationCondition(annotationValue.$Ne[0], visitedNavigationPaths, pathVisitor), parseAnnotationCondition(annotationValue.$Ne[1], visitedNavigationPaths, pathVisitor));
|
|
863
|
+
return notEqual(parseAnnotationCondition(annotationValue.$Ne[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Ne[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
725
864
|
} else if (annotationValue.hasOwnProperty("$Gt")) {
|
|
726
|
-
return greaterThan(parseAnnotationCondition(annotationValue.$Gt[0], visitedNavigationPaths, pathVisitor), parseAnnotationCondition(annotationValue.$Gt[1], visitedNavigationPaths, pathVisitor));
|
|
865
|
+
return greaterThan(parseAnnotationCondition(annotationValue.$Gt[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Gt[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
727
866
|
} else if (annotationValue.hasOwnProperty("$Ge")) {
|
|
728
|
-
return greaterOrEqual(parseAnnotationCondition(annotationValue.$Ge[0], visitedNavigationPaths, pathVisitor), parseAnnotationCondition(annotationValue.$Ge[1], visitedNavigationPaths, pathVisitor));
|
|
867
|
+
return greaterOrEqual(parseAnnotationCondition(annotationValue.$Ge[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Ge[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
729
868
|
} else if (annotationValue.hasOwnProperty("$Lt")) {
|
|
730
|
-
return lessThan(parseAnnotationCondition(annotationValue.$Lt[0], visitedNavigationPaths, pathVisitor), parseAnnotationCondition(annotationValue.$Lt[1], visitedNavigationPaths, pathVisitor));
|
|
869
|
+
return lessThan(parseAnnotationCondition(annotationValue.$Lt[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Lt[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
731
870
|
} else if (annotationValue.hasOwnProperty("$Le")) {
|
|
732
|
-
return lessOrEqual(parseAnnotationCondition(annotationValue.$Le[0], visitedNavigationPaths, pathVisitor), parseAnnotationCondition(annotationValue.$Le[1], visitedNavigationPaths, pathVisitor));
|
|
871
|
+
return lessOrEqual(parseAnnotationCondition(annotationValue.$Le[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Le[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
733
872
|
} else if (annotationValue.hasOwnProperty("$Path")) {
|
|
734
873
|
return pathInModel(annotationValue.$Path, undefined, visitedNavigationPaths, pathVisitor);
|
|
735
874
|
} else if (annotationValue.hasOwnProperty("$Apply")) {
|
|
@@ -744,9 +883,27 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
744
883
|
$If: annotationValue.$If
|
|
745
884
|
}, visitedNavigationPaths, undefined, pathVisitor);
|
|
746
885
|
} else if (annotationValue.hasOwnProperty("$EnumMember")) {
|
|
747
|
-
return constant(resolveEnumValue(annotationValue.$EnumMember));
|
|
748
|
-
}
|
|
749
|
-
|
|
886
|
+
return constant(resolveEnumValue(annotationValue.$EnumMember, converterRoot));
|
|
887
|
+
} else if (annotationValue.hasOwnProperty("$In")) {
|
|
888
|
+
return comparison("In", parseAnnotationCondition(annotationValue.$In[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$In[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
889
|
+
} else if (annotationValue.hasOwnProperty("$Has")) {
|
|
890
|
+
return comparison("Has", parseAnnotationCondition(annotationValue.$Has[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Has[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
891
|
+
} else if (annotationValue.hasOwnProperty("$Add")) {
|
|
892
|
+
return add(parseAnnotationCondition(annotationValue.$Add[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Add[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
893
|
+
} else if (annotationValue.hasOwnProperty("$Sub")) {
|
|
894
|
+
return subtract(parseAnnotationCondition(annotationValue.$Sub[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Sub[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
895
|
+
} else if (annotationValue.hasOwnProperty("$Mul")) {
|
|
896
|
+
return multiply(parseAnnotationCondition(annotationValue.$Mul[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Mul[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
897
|
+
} else if (annotationValue.hasOwnProperty("$Div")) {
|
|
898
|
+
return floor(divide(parseAnnotationCondition(annotationValue.$Div[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Div[1], visitedNavigationPaths, pathVisitor, converterRoot)));
|
|
899
|
+
} else if (annotationValue.hasOwnProperty("$DivBy")) {
|
|
900
|
+
return divide(parseAnnotationCondition(annotationValue.$DivBy[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$DivBy[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
901
|
+
} else if (annotationValue.hasOwnProperty("$Mod")) {
|
|
902
|
+
return modulo(parseAnnotationCondition(annotationValue.$Mod[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue.$Mod[1], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
903
|
+
} else if (annotationValue.hasOwnProperty("$Neg")) {
|
|
904
|
+
return negate(parseAnnotationCondition(annotationValue.$Neg, visitedNavigationPaths, pathVisitor, converterRoot));
|
|
905
|
+
}
|
|
906
|
+
return constant(annotationValue);
|
|
750
907
|
}
|
|
751
908
|
|
|
752
909
|
/**
|
|
@@ -755,12 +912,14 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
755
912
|
* @param annotationValue An If expression returning the type T
|
|
756
913
|
* @param visitedNavigationPaths The path from the root entity set
|
|
757
914
|
* @param pathVisitor A function to modify the resulting path
|
|
915
|
+
* @param converterRoot The root converted metadata
|
|
758
916
|
* @returns The equivalent ifElse expression
|
|
759
917
|
*/
|
|
760
918
|
function annotationIfExpression(annotationValue) {
|
|
761
919
|
let visitedNavigationPaths = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
762
920
|
let pathVisitor = arguments.length > 2 ? arguments[2] : undefined;
|
|
763
|
-
|
|
921
|
+
let converterRoot = arguments.length > 3 ? arguments[3] : undefined;
|
|
922
|
+
return ifElse(parseAnnotationCondition(annotationValue[0], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue[1], visitedNavigationPaths, pathVisitor, converterRoot), parseAnnotationCondition(annotationValue[2], visitedNavigationPaths, pathVisitor, converterRoot));
|
|
764
923
|
}
|
|
765
924
|
// This type is not recursively transformed from the metamodel content, as such we have some ugly things there
|
|
766
925
|
_exports.annotationIfExpression = annotationIfExpression;
|
|
@@ -850,6 +1009,34 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
850
1009
|
return constant(false);
|
|
851
1010
|
}
|
|
852
1011
|
return constant(leftExpression.value >= rightExpression.value);
|
|
1012
|
+
case "Has":
|
|
1013
|
+
{
|
|
1014
|
+
if (leftExpression.value === null || leftExpression.value === undefined || rightExpression.value === null || rightExpression.value === undefined) {
|
|
1015
|
+
return constant(false);
|
|
1016
|
+
}
|
|
1017
|
+
const leftValueInt = leftExpression.value;
|
|
1018
|
+
const rightValueInt = rightExpression.value;
|
|
1019
|
+
return constant(!!(leftValueInt & rightValueInt));
|
|
1020
|
+
}
|
|
1021
|
+
case "In":
|
|
1022
|
+
{
|
|
1023
|
+
if (leftExpression.value === null || leftExpression.value === undefined || rightExpression.value === null || rightExpression.value === undefined) {
|
|
1024
|
+
return constant(false);
|
|
1025
|
+
}
|
|
1026
|
+
// Check all the children of the right expression are constants
|
|
1027
|
+
const allChildrenConstants = rightExpression.value.every(item => isConstant(item));
|
|
1028
|
+
if (allChildrenConstants) {
|
|
1029
|
+
const rightValues = rightExpression.value.map(item => item.value);
|
|
1030
|
+
return constant(rightValues.includes(leftExpression.value));
|
|
1031
|
+
} else {
|
|
1032
|
+
return {
|
|
1033
|
+
_type: "Comparison",
|
|
1034
|
+
operator: operator,
|
|
1035
|
+
operand1: leftExpression,
|
|
1036
|
+
operand2: rightExpression
|
|
1037
|
+
};
|
|
1038
|
+
}
|
|
1039
|
+
}
|
|
853
1040
|
}
|
|
854
1041
|
} else {
|
|
855
1042
|
return {
|
|
@@ -982,6 +1169,18 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
982
1169
|
return comparison("<", leftOperand, rightOperand);
|
|
983
1170
|
}
|
|
984
1171
|
|
|
1172
|
+
/**
|
|
1173
|
+
* Comparison: "Include" (In).
|
|
1174
|
+
* @template T The target type
|
|
1175
|
+
* @param leftOperand The operand on the left side
|
|
1176
|
+
* @param rightOperand The operand on the right side of the comparison
|
|
1177
|
+
* @returns An expression representing the comparison
|
|
1178
|
+
*/
|
|
1179
|
+
_exports.lessThan = lessThan;
|
|
1180
|
+
function includes(leftOperand, rightOperand) {
|
|
1181
|
+
return comparison("In", leftOperand, rightOperand);
|
|
1182
|
+
}
|
|
1183
|
+
|
|
985
1184
|
/**
|
|
986
1185
|
* If-then-else expression.
|
|
987
1186
|
*
|
|
@@ -992,7 +1191,7 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
992
1191
|
* @param onFalse Expression result if the condition evaluates to false
|
|
993
1192
|
* @returns The expression that represents this conditional check
|
|
994
1193
|
*/
|
|
995
|
-
_exports.
|
|
1194
|
+
_exports.includes = includes;
|
|
996
1195
|
function ifElse(condition, onTrue, onFalse) {
|
|
997
1196
|
let conditionExpression = wrapPrimitive(condition);
|
|
998
1197
|
let onTrueExpression = wrapPrimitive(onTrue);
|
|
@@ -1233,16 +1432,18 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
1233
1432
|
parseAsString: false
|
|
1234
1433
|
});
|
|
1235
1434
|
}
|
|
1236
|
-
if (outExpression.type === "sap.ui.model.odata.type.String" && isProperty(property)) {
|
|
1435
|
+
if (outExpression.type === "sap.ui.model.odata.type.String" && (isProperty(property) || isActionParameter(property))) {
|
|
1237
1436
|
if (outExpression.constraints?.isDigitSequence || outExpression.constraints?.nullable !== false && property.nullable === true) {
|
|
1238
1437
|
outExpression.formatOptions.parseKeepsEmptyString = false;
|
|
1239
1438
|
} else {
|
|
1240
1439
|
outExpression.formatOptions.parseKeepsEmptyString = true;
|
|
1241
1440
|
}
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1441
|
+
if (isProperty(property)) {
|
|
1442
|
+
const fiscalType = getFiscalType(property);
|
|
1443
|
+
if (fiscalType) {
|
|
1444
|
+
outExpression.formatOptions.fiscalType = fiscalType;
|
|
1445
|
+
outExpression.type = "sap.fe.core.type.FiscalDate";
|
|
1446
|
+
}
|
|
1246
1447
|
}
|
|
1247
1448
|
}
|
|
1248
1449
|
const typesSupportingParseEmptyValueToZero = ["sap.ui.model.odata.type.Int16", "sap.ui.model.odata.type.Int32", "sap.ui.model.odata.type.Int64", "sap.ui.model.odata.type.Single", "sap.ui.model.odata.type.Double", "sap.ui.model.odata.type.Decimal", "sap.ui.model.odata.type.Byte", "sap.ui.model.odata.type.SByte"];
|
|
@@ -1421,7 +1622,44 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
1421
1622
|
});
|
|
1422
1623
|
return and(...aBindings);
|
|
1423
1624
|
}
|
|
1625
|
+
/**
|
|
1626
|
+
* Shortcut function to determine if a binding can be statically resolvable.
|
|
1627
|
+
* @param exp The expression to evaluate
|
|
1628
|
+
* @returns A Boolean evaluating if there is no relative path dependent on the current context
|
|
1629
|
+
*/
|
|
1424
1630
|
_exports.isEmpty = isEmpty;
|
|
1631
|
+
function isExpressionStaticallyResolvable(exp) {
|
|
1632
|
+
const referencedPaths = [];
|
|
1633
|
+
transformRecursively(exp, "PathInModel", pathExp => {
|
|
1634
|
+
if (pathExp.modelName === undefined && typeof pathExp.path === "string") {
|
|
1635
|
+
referencedPaths.push(pathExp.path);
|
|
1636
|
+
}
|
|
1637
|
+
return pathExp;
|
|
1638
|
+
}, true);
|
|
1639
|
+
if (referencedPaths.length === 0) {
|
|
1640
|
+
return true;
|
|
1641
|
+
}
|
|
1642
|
+
return referencedPaths.every(p => p.startsWith("/"));
|
|
1643
|
+
}
|
|
1644
|
+
_exports.isExpressionStaticallyResolvable = isExpressionStaticallyResolvable;
|
|
1645
|
+
function getStaticallyResolvableExpression(exp, defaultValue) {
|
|
1646
|
+
if (exp._type === "Set") {
|
|
1647
|
+
const newOperands = exp.operands.map(operand => {
|
|
1648
|
+
if (isExpressionStaticallyResolvable(operand) || isConstant(operand)) {
|
|
1649
|
+
return operand;
|
|
1650
|
+
} else {
|
|
1651
|
+
return defaultValue;
|
|
1652
|
+
}
|
|
1653
|
+
});
|
|
1654
|
+
if (exp.operator === "||") {
|
|
1655
|
+
return or(...newOperands);
|
|
1656
|
+
} else {
|
|
1657
|
+
return and(...newOperands);
|
|
1658
|
+
}
|
|
1659
|
+
}
|
|
1660
|
+
return isExpressionStaticallyResolvable(exp) ? exp : defaultValue;
|
|
1661
|
+
}
|
|
1662
|
+
_exports.getStaticallyResolvableExpression = getStaticallyResolvableExpression;
|
|
1425
1663
|
function concat() {
|
|
1426
1664
|
for (var _len4 = arguments.length, inExpressions = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
|
1427
1665
|
inExpressions[_key4] = arguments[_key4];
|
|
@@ -1499,6 +1737,11 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
1499
1737
|
expression = comparison(expression.operator, operand1, operand2);
|
|
1500
1738
|
}
|
|
1501
1739
|
break;
|
|
1740
|
+
case "Arithmetic":
|
|
1741
|
+
const operand1 = transformRecursively(expression.operand1, expressionType, transformFunction, includeAllExpression);
|
|
1742
|
+
const operand2 = transformRecursively(expression.operand2, expressionType, transformFunction, includeAllExpression);
|
|
1743
|
+
expression = arithmetic(expression.operator, operand1, operand2);
|
|
1744
|
+
break;
|
|
1502
1745
|
case "Constant":
|
|
1503
1746
|
const constantValue = expression.value;
|
|
1504
1747
|
if (typeof constantValue === "object" && constantValue) {
|
|
@@ -1732,6 +1975,9 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
1732
1975
|
case "Not":
|
|
1733
1976
|
const notExpression = `!${compileExpression(expr.operand, true)}`;
|
|
1734
1977
|
return wrapBindingExpression(notExpression, embeddedInBinding);
|
|
1978
|
+
case "Arithmetic":
|
|
1979
|
+
const arithmeticExpression = compileArithmeticExpression(expr);
|
|
1980
|
+
return wrapBindingExpression(arithmeticExpression, embeddedInBinding);
|
|
1735
1981
|
case "Truthy":
|
|
1736
1982
|
const truthyExpression = `!!${compileExpression(expr.operand, true)}`;
|
|
1737
1983
|
return wrapBindingExpression(truthyExpression, embeddedInBinding);
|
|
@@ -1745,19 +1991,57 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
1745
1991
|
return "";
|
|
1746
1992
|
}
|
|
1747
1993
|
}
|
|
1994
|
+
_exports.compileExpression = compileExpression;
|
|
1995
|
+
function compileArithmeticExpression(expression) {
|
|
1996
|
+
function compileOperand(operand) {
|
|
1997
|
+
const compiledOperand = compileExpression(operand, true) ?? "undefined";
|
|
1998
|
+
return wrapBindingExpression(compiledOperand, true, needParenthesis(operand));
|
|
1999
|
+
}
|
|
2000
|
+
switch (expression.operator) {
|
|
2001
|
+
case "Neg":
|
|
2002
|
+
return `-(${compileOperand(expression.operand1)})`;
|
|
2003
|
+
case "Floor":
|
|
2004
|
+
return `Math.floor(${compileOperand(expression.operand1)})`;
|
|
2005
|
+
case "%":
|
|
2006
|
+
case "/":
|
|
2007
|
+
case "*":
|
|
2008
|
+
case "+":
|
|
2009
|
+
case "-":
|
|
2010
|
+
return `${compileOperand(expression.operand1)} ${expression.operator} ${compileOperand(expression.operand2)}`;
|
|
2011
|
+
}
|
|
2012
|
+
}
|
|
1748
2013
|
|
|
1749
2014
|
/**
|
|
1750
2015
|
* Compile a comparison expression.
|
|
1751
2016
|
* @param expression The comparison expression.
|
|
1752
2017
|
* @returns The compiled expression. Needs wrapping before it can be used as an expression binding.
|
|
1753
2018
|
*/
|
|
1754
|
-
_exports.compileExpression = compileExpression;
|
|
1755
2019
|
function compileComparisonExpression(expression) {
|
|
1756
2020
|
function compileOperand(operand) {
|
|
1757
2021
|
const compiledOperand = compileExpression(operand, true) ?? "undefined";
|
|
1758
2022
|
return wrapBindingExpression(compiledOperand, true, needParenthesis(operand));
|
|
1759
2023
|
}
|
|
1760
|
-
|
|
2024
|
+
switch (expression.operator) {
|
|
2025
|
+
case "In":
|
|
2026
|
+
{
|
|
2027
|
+
const path = compileOperand(expression.operand1);
|
|
2028
|
+
const collection = compileOperand(expression.operand2) ?? [];
|
|
2029
|
+
return `${collection}.includes(${path})`;
|
|
2030
|
+
}
|
|
2031
|
+
case "Has":
|
|
2032
|
+
{
|
|
2033
|
+
const path = compileOperand(expression.operand1);
|
|
2034
|
+
const flags = compileOperand(expression.operand2) ?? [];
|
|
2035
|
+
return `(${path} & ${flags}) > 0`;
|
|
2036
|
+
}
|
|
2037
|
+
case "===":
|
|
2038
|
+
case "!==":
|
|
2039
|
+
case ">=":
|
|
2040
|
+
case ">":
|
|
2041
|
+
case "<=":
|
|
2042
|
+
case "<":
|
|
2043
|
+
return `${compileOperand(expression.operand1)} ${expression.operator} ${compileOperand(expression.operand2)}`;
|
|
2044
|
+
}
|
|
1761
2045
|
}
|
|
1762
2046
|
|
|
1763
2047
|
/**
|
|
@@ -1830,4 +2114,4 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
1830
2114
|
}
|
|
1831
2115
|
return _exports;
|
|
1832
2116
|
}, false);
|
|
1833
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc1Byb3BlcnR5Iiwic2VydmljZU9iamVjdCIsIl90eXBlIiwiX2V4cG9ydHMiLCJFRE1fVFlQRV9NQVBQSU5HIiwidHlwZSIsImNvbnN0cmFpbnRzIiwiJFByZWNpc2lvbiIsIiRWNCIsIiRTY2FsZSIsIiRNYXhMZW5ndGgiLCIkTnVsbGFibGUiLCJ1bnJlc29sdmFibGVFeHByZXNzaW9uIiwiZXNjYXBlWG1sQXR0cmlidXRlIiwiaW5wdXRTdHJpbmciLCJyZXBsYWNlIiwiaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbiIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJleHByZXNzaW9ucyIsIkFycmF5IiwiX2tleSIsImZpbmQiLCJleHByIiwidW5kZWZpbmVkIiwiX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbCIsImEiLCJiIiwidmFsdWUiLCJvcGVyYW5kIiwib3BlcmF0b3IiLCJvcGVyYW5kcyIsImV2ZXJ5IiwiZXhwcmVzc2lvbiIsInNvbWUiLCJvdGhlckV4cHJlc3Npb24iLCJjb25kaXRpb24iLCJvblRydWUiLCJvbkZhbHNlIiwib3BlcmFuZDEiLCJvcGVyYW5kMiIsImFFeHByZXNzaW9ucyIsImJFeHByZXNzaW9ucyIsImluZGV4IiwicGF0aEluTW9kZWwiLCJtb2RlbE5hbWUiLCJwYXRoIiwidGFyZ2V0RW50aXR5U2V0IiwiZm4iLCJwYXJhbWV0ZXJzIiwiYmluZGluZ1BhcmFtZXRlcnMiLCJvdGhlckZ1bmN0aW9uIiwib2JqIiwicmVmIiwiZmxhdHRlblNldEV4cHJlc3Npb24iLCJyZWR1Y2UiLCJyZXN1bHQiLCJjYW5kaWRhdGVzRm9yRmxhdHRlbmluZyIsImZvckVhY2giLCJjYW5kaWRhdGUiLCJlIiwicHVzaCIsImhhc09wcG9zaXRlRXhwcmVzc2lvbnMiLCJuZWdhdGVkRXhwcmVzc2lvbnMiLCJtYXAiLCJub3QiLCJpIiwiYW5kIiwiX2xlbjIiLCJfa2V5MiIsIndyYXBQcmltaXRpdmUiLCJpc1N0YXRpY0ZhbHNlIiwibm9uVHJpdmlhbEV4cHJlc3Npb24iLCJmaWx0ZXIiLCJpc0ZhbHNlIiwiaXNDb25zdGFudCIsImNvbnN0YW50IiwiaXNWYWxpZCIsImlzVHJ1ZSIsIm9yIiwiX2xlbjMiLCJfa2V5MyIsImlzU3RhdGljVHJ1ZSIsImlzQ29tcGFyaXNvbiIsImlzVHJ1dGh5IiwiYmluZGluZ0V4cHJlc3Npb24iLCJ2aXNpdGVkTmF2aWdhdGlvblBhdGhzIiwicGF0aFZpc2l0b3IiLCJ0YXJnZXRQYXRoIiwibG9jYWxQYXRoIiwiY29uY2F0Iiwiam9pbiIsImNvbnN0YW50VmFsdWUiLCJpc0FycmF5IiwiaXNQcmltaXRpdmVPYmplY3QiLCJ2YWx1ZU9mIiwiT2JqZWN0IiwiZW50cmllcyIsInBsYWluRXhwcmVzc2lvbiIsIl9yZWYiLCJrZXkiLCJ2YWwiLCJ3cmFwcGVkVmFsdWUiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsInRhcmdldFR5cGUiLCJzdGFydHNXaXRoIiwicGF0aEluTW9kZWxSZWdleCIsInBhdGhJbk1vZGVsUmVnZXhNYXRjaCIsImV4ZWMiLCJpc05hTiIsIk51bWJlciIsInJlZmVyZW5jZSIsImJpbmRTdGF0ZSIsInN0YXRlT2JqZWN0UHJvcCIsIl9fYmluZGluZ0luZm8iLCJ0b1N0cmluZyIsIm1vZGVsIiwic29tZXRoaW5nIiwiaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24iLCJtYXliZUNvbnN0YW50IiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJtYXliZUJpbmRpbmciLCJpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbiIsImlzQ29uY2F0RXhwcmVzc2lvbiIsImlzSWZFbHNlRXhwcmVzc2lvbiIsImlzVW5kZWZpbmVkRXhwcmVzc2lvbiIsImV4cHJlc3Npb25Bc0V4cHJlc3Npb24iLCJvYmplY3RUeXBlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiaXNDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb24iLCJhbm5vdGF0aW9uVmFsdWUiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJkZWZhdWx0VmFsdWUiLCJhbm5vdGF0aW9uSWZFeHByZXNzaW9uIiwiJElmIiwicGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uIiwiJE5vdCIsImVxdWFsIiwiJEVxIiwibm90RXF1YWwiLCIkTmUiLCJncmVhdGVyVGhhbiIsIiRHdCIsImdyZWF0ZXJPckVxdWFsIiwiJEdlIiwibGVzc1RoYW4iLCIkTHQiLCJsZXNzT3JFcXVhbCIsIiRMZSIsIiRPciIsIm9yQ29uZGl0aW9uIiwiJEFuZCIsImFuZENvbmRpdGlvbiIsImFubm90YXRpb25BcHBseUV4cHJlc3Npb24iLCJoYXNPd25Qcm9wZXJ0eSIsIiRQYXRoIiwiJEZ1bmN0aW9uIiwiJEFwcGx5IiwicmVzb2x2ZUVudW1WYWx1ZSIsIiRFbnVtTWVtYmVyIiwiaWZFbHNlIiwiY29udmVydFN1YkFwcGx5UGFyYW1ldGVycyIsImFwcGx5UGFyYW0iLCJhcHBseVBhcmFtQ29udmVydGVkIiwiYXBwbHlFeHByZXNzaW9uIiwicGFyYW1ldGVyIiwidGVtcGxhdGUiLCJ0ZW1wbGF0ZVBhcmFtcyIsInNsaWNlIiwidGFyZ2V0T2JqZWN0IiwiJE5hbWUiLCIkTGFiZWxlZEVsZW1lbnQiLCJjb21wYXJpc29uIiwibGVmdE9wZXJhbmQiLCJyaWdodE9wZXJhbmQiLCJsZWZ0RXhwcmVzc2lvbiIsInJpZ2h0RXhwcmVzc2lvbiIsImNoZWNrVW5kZWZpbmVkIiwibGVmdCIsInJpZ2h0IiwicmVkdWNlZCIsImNvbmRpdGlvbkV4cHJlc3Npb24iLCJvblRydWVFeHByZXNzaW9uIiwib25GYWxzZUV4cHJlc3Npb24iLCJwYXRoSWR4IiwibXlJZkVsc2VFeHByZXNzaW9uIiwiZm9ybWF0UmVzdWx0IiwiYWxsUGFydHMiLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsImNvbnN0YW50UGF0aCIsInVuc2hpZnQiLCJKU09OIiwic3RyaW5naWZ5IiwiaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dCIsImZvcm1hdHRlckZ1bmN0aW9uIiwiY29udGV4dEVudGl0eVR5cGUiLCJpZ25vcmVDb21wbGV4VHlwZSIsInBhcmFtZXRlckV4cHJlc3Npb25zIiwia2V5cyIsImZ1bmN0aW9uTmFtZSIsIl9fZnVuY3Rpb25OYW1lIiwiZm9ybWF0dGVyQ2xhc3MiLCJmb3JtYXR0ZXJOYW1lIiwic3BsaXQiLCJteUZvcm1hdEV4cHJlc3Npb24iLCJzZXRVcENvbnN0cmFpbnRzIiwidGFyZ2V0TWFwcGluZyIsInByb3BlcnR5Iiwic2NhbGUiLCJwcmVjaXNpb24iLCJtYXhMZW5ndGgiLCJudWxsYWJsZSIsImFubm90YXRpb25zIiwiVmFsaWRhdGlvbiIsIk1pbmltdW0iLCJtaW5pbXVtIiwiTWF4aW11bSIsIm1heGltdW0iLCJDb21tb24iLCJJc0RpZ2l0U2VxdWVuY2UiLCJpc0RpZ2l0U2VxdWVuY2UiLCJWNCIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIiwiaWdub3JlQ29uc3RyYWludHMiLCJvdXRFeHByZXNzaW9uIiwiZm9ybWF0T3B0aW9ucyIsImluZGV4T2YiLCJhc3NpZ24iLCJwYXJzZUFzU3RyaW5nIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiZmlzY2FsVHlwZSIsImdldEZpc2NhbFR5cGUiLCJ0eXBlc1N1cHBvcnRpbmdQYXJzZUVtcHR5VmFsdWVUb1plcm8iLCJpbmNsdWRlcyIsInBhcnNlRW1wdHlWYWx1ZVRvWmVybyIsImVtcHR5U3RyaW5nIiwiSXNGaXNjYWxZZWFyIiwiSXNGaXNjYWxQZXJpb2QiLCJJc0Zpc2NhbFllYXJQZXJpb2QiLCJJc0Zpc2NhbFF1YXJ0ZXIiLCJJc0Zpc2NhbFllYXJRdWFydGVyIiwiSXNGaXNjYWxXZWVrIiwiSXNGaXNjYWxZZWFyV2VlayIsIklzRGF5T2ZGaXNjYWxZZWFyIiwiYWRkVHlwZUluZm9ybWF0aW9uIiwib0Zvcm1hdE9wdGlvbnMiLCJvQ29uc3RyYWludE9wdGlvbnMiLCJfZ2V0Q29tcGxleFR5cGVGb3JtYXRPcHRpb25zRnJvbUZpcnN0UGFyYW0iLCJ1b21QYXRoIiwibW9kZSIsInByZXNlcnZlRGVjaW1hbHMiLCJza2lwRGVjaW1hbHNWYWxpZGF0aW9uIiwiY3VycmVuY3lQYXRoIiwibWF4RnJhY3Rpb25EaWdpdHMiLCJwYXJhbSIsInNob3dOdW1iZXIiLCJzaG93TWVhc3VyZSIsImRlY2ltYWxQYWRkaW5nIiwiZnVuYyIsIm9uIiwiaXNGb3JtYXR0aW5nRm4iLCJpc0VtcHR5IiwiYUJpbmRpbmdzIiwiZmluYWxFeHByZXNzaW9uIiwiYWx3YXlzS2VlcFRhcmdldFR5cGUiLCJfbGVuNCIsImluRXhwcmVzc2lvbnMiLCJfa2V5NCIsImNvbmNhdGVuYXRlZCIsIm15Q29uY2F0RXhwcmVzc2lvbiIsImluRXhwcmVzc2lvbiIsImV4cHJlc3Npb25UeXBlIiwidHJhbnNmb3JtRnVuY3Rpb24iLCJpbmNsdWRlQWxsRXhwcmVzc2lvbiIsInN1YkV4cHJlc3Npb24iLCJiaW5kaW5nUGFyYW1ldGVyIiwibmVlZFBhcmVudGhlc2lzIiwiY29tcGlsZUNvbnN0YW50T2JqZWN0IiwiaXNOdWxsYWJsZSIsIm9iamVjdHMiLCJwcm9wZXJ0aWVzIiwiY2hpbGRSZXN1bHQiLCJjb21waWxlRXhwcmVzc2lvbiIsImNvbXBpbGVDb25zdGFudCIsImVtYmVkZGVkSW5CaW5kaW5nIiwiZG9Ob3RTdHJpbmdpZnkiLCJjb21waWxlUGF0aEluTW9kZWxFeHByZXNzaW9uIiwiZXhwcmVzc2lvbkZvckJpbmRpbmciLCJlbWJlZGRlZFNlcGFyYXRvciIsImNvbXBsZXhCaW5kaW5nRGVmaW5pdGlvbiIsImNvbXBpbGVQYXRoSW5Nb2RlbCIsIm91dEJpbmRpbmciLCJzZXBhcmF0b3IiLCJjb21waWxlQ29tcGxleFR5cGVFeHByZXNzaW9uIiwiY29tcGlsZVBhdGhQYXJhbWV0ZXIiLCJvdXRwdXRFbmQiLCJoYXNFbGVtZW50cyIsIndyYXBCaW5kaW5nRXhwcmVzc2lvbiIsInBhcmVudGhlc2lzUmVxdWlyZWQiLCJrZWVwVGFyZ2V0VHlwZSIsImhhc0VtYmVkZGVkRnVuY3Rpb25DYWxsT3JCaW5kaW5nIiwic3ViRm4iLCJzdWJTdWJGbiIsImFyZ3VtZW50U3RyaW5nIiwiYXJnIiwiZm5DYWxsIiwic3Vic3RyaW5nIiwiY29tcGFyaXNvbkV4cHJlc3Npb24iLCJjb21waWxlQ29tcGFyaXNvbkV4cHJlc3Npb24iLCJpZkVsc2VFeHByZXNzaW9uIiwic2V0RXhwcmVzc2lvbiIsImNvbmNhdEV4cHJlc3Npb24iLCJuZXN0ZWRFeHByZXNzaW9uIiwibGVuZ3RoRXhwcmVzc2lvbiIsIm5vdEV4cHJlc3Npb24iLCJ0cnV0aHlFeHByZXNzaW9uIiwiZm9ybWF0dGVyRXhwcmVzc2lvbiIsImNvbXBpbGVGb3JtYXR0ZXJFeHByZXNzaW9uIiwiY29tcGxleFR5cGVFeHByZXNzaW9uIiwiY29tcGlsZU9wZXJhbmQiLCJjb21waWxlZE9wZXJhbmQiLCJwYXJ0cyIsInNpbmdsZVBhdGgiLCJvdXRWYWx1ZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQmluZGluZ1Rvb2xraXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuXHRBY3Rpb25QYXJhbWV0ZXIsXG5cdEFuZEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRBbmRDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEJvb2xlYW4sXG5cdENvbmRpdGlvbmFsQ2hlY2tPclZhbHVlLFxuXHRFbnRpdHlTZXQsXG5cdEVudGl0eVR5cGUsXG5cdEVxQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEVxQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRHZUFubm90YXRpb25FeHByZXNzaW9uLFxuXHRHZUNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0R3RBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0R3RDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdElmQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdElmQW5ub3RhdGlvbkV4cHJlc3Npb25WYWx1ZSxcblx0TGVBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0TGVDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdEx0QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEx0Q29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHROZUFubm90YXRpb25FeHByZXNzaW9uLFxuXHROZUNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0Tm90QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdE5vdENvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0T3JBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0T3JDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0UGF0aENvbmRpdGlvbkV4cHJlc3Npb24sXG5cdFByb3BlcnR5LFxuXHRQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSxcblx0Q29uc3RhbnRFeHByZXNzaW9uIGFzIFZvY2FiQ29uc3RhbnRFeHByZXNzaW9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQ29tbW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB7IHJlc29sdmVFbnVtVmFsdWUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQW5ub3RhdGlvbkVudW1cIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ0luZm9Ib2xkZXIgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5cbmV4cG9ydCB0eXBlIFByaW1pdGl2ZVR5cGUgPSBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQgfCBib29sZWFuIHwgb2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZDtcbnR5cGUgRGVmaW5lZFByaW1pdGl2ZVR5cGUgPSBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQgfCBib29sZWFuIHwgb2JqZWN0O1xudHlwZSBQcmltaXRpdmVUeXBlQ2FzdDxQPiA9IFAgZXh0ZW5kcyBTdHJpbmcgPyBzdHJpbmcgOiBQIGV4dGVuZHMgQm9vbGVhbiA/IGJvb2xlYW4gOiBQIGV4dGVuZHMgTnVtYmVyID8gbnVtYmVyIDogUDtcbnR5cGUgQmFzZUV4cHJlc3Npb248X1Q+ID0ge1xuXHRfdHlwZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybWF0T3B0aW9ucyA9IFBhcnRpYWw8e1xuXHRjdXN0b21Vbml0czogUmVjb3JkPHN0cmluZywgb2JqZWN0Pjtcblx0Y3VzdG9tQ3VycmVuY2llczogUmVjb3JkPHN0cmluZywgb2JqZWN0Pjtcblx0ZGVjaW1hbHM6IG51bWJlcjtcblx0ZW1wdHlTdHJpbmc6IG51bGwgfCBudW1iZXIgfCBzdHJpbmc7XG5cdGZpc2NhbFR5cGU6IHN0cmluZztcblx0Z3JvdXBpbmdFbmFibGVkOiBib29sZWFuO1xuXHRtYXhGcmFjdGlvbkRpZ2l0czogbnVtYmVyO1xuXHRtYXhJbnRlZ2VyRGlnaXRzOiBudW1iZXI7XG5cdG1pbkZyYWN0aW9uRGlnaXRzOiBudW1iZXI7XG5cdG1pbkludGVnZXJEaWdpdHM6IG51bWJlcjtcblx0cGFyc2VBc1N0cmluZzogYm9vbGVhbjtcblx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nOiBib29sZWFuO1xuXHRwYXR0ZXJuOiBzdHJpbmc7XG5cdHByZWNpc2lvbjogbnVtYmVyO1xuXHRwcmVzZXJ2ZURlY2ltYWxzOiBib29sZWFuO1xuXHRzaG9ydERlY2ltYWxzOiBudW1iZXI7XG5cdHNob3J0UmVmTnVtYmVyOiBudW1iZXI7XG5cdHNob3dNZWFzdXJlOiBib29sZWFuO1xuXHRzaG93TnVtYmVyOiBib29sZWFuO1xuXHRzaG93U2NhbGU6IGJvb2xlYW47XG5cdHN0eWxlOiBzdHJpbmc7XG59PjtcblxuZXhwb3J0IHR5cGUgQ29uc3RhbnRFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkNvbnN0YW50XCI7XG5cdHZhbHVlOiBUO1xufTtcblxudHlwZSBTZXRPcGVyYXRvciA9IFwiJiZcIiB8IFwifHxcIjtcbmV4cG9ydCB0eXBlIFNldEV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxib29sZWFuPiAmIHtcblx0X3R5cGU6IFwiU2V0XCI7XG5cdG9wZXJhdG9yOiBTZXRPcGVyYXRvcjtcblx0b3BlcmFuZHM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdO1xufTtcblxuZXhwb3J0IHR5cGUgTm90RXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPGJvb2xlYW4+ICYge1xuXHRfdHlwZTogXCJOb3RcIjtcblx0b3BlcmFuZDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcblxuZXhwb3J0IHR5cGUgVHJ1dGh5RXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPGJvb2xlYW4+ICYge1xuXHRfdHlwZTogXCJUcnV0aHlcIjtcblx0b3BlcmFuZDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz47XG59O1xuXG5leHBvcnQgdHlwZSBSZWZlcmVuY2VFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248b2JqZWN0PiAmIHtcblx0X3R5cGU6IFwiUmVmXCI7XG5cdHJlZjogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIEZvcm1hdHRlckV4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiRm9ybWF0dGVyXCI7XG5cdGZuOiBzdHJpbmc7XG5cdHBhcmFtZXRlcnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPltdO1xufTtcblxudHlwZSBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiQ29tcGxleFR5cGVcIjtcblx0dHlwZTogc3RyaW5nO1xuXHRmb3JtYXRPcHRpb25zOiBGb3JtYXRPcHRpb25zO1xuXHRjb25zdHJhaW50czogb2JqZWN0O1xuXHRwYXJhbWV0ZXJzOiBvYmplY3Q7XG5cdGJpbmRpbmdQYXJhbWV0ZXJzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIEZ1bmN0aW9uRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJGdW5jdGlvblwiO1xuXHRvYmo/OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248b2JqZWN0Pjtcblx0Zm46IHN0cmluZztcblx0aXNGb3JtYXR0aW5nRm46IGJvb2xlYW47XG5cdHBhcmFtZXRlcnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPltdO1xufTtcblxuZXhwb3J0IHR5cGUgQ29uY2F0RXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPHN0cmluZz4gJiB7XG5cdF90eXBlOiBcIkNvbmNhdFwiO1xuXHRleHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIExlbmd0aEV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxzdHJpbmc+ICYge1xuXHRfdHlwZTogXCJMZW5ndGhcIjtcblx0cGF0aEluTW9kZWw6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjx1bmtub3duPjtcbn07XG5cbnR5cGUgVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxzdHJpbmc+ICYge1xuXHRfdHlwZTogXCJVbnJlc29sdmFibGVcIjtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYgUGF0aEluTW9kZWxFeHByZXNzaW9uXG4gKi9cbmV4cG9ydCB0eXBlIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJQYXRoSW5Nb2RlbFwiO1xuXHRtb2RlbE5hbWU/OiBzdHJpbmc7XG5cdHBhdGg6IHN0cmluZztcblx0dGFyZ2V0RW50aXR5U2V0PzogRW50aXR5U2V0O1xuXHR0eXBlPzogc3RyaW5nO1xuXHRjb25zdHJhaW50cz86IEJpbmRpbmdDb25zdHJhaW50cztcblx0cGFyYW1ldGVycz86IG9iamVjdDtcblx0dGFyZ2V0VHlwZT86IHN0cmluZztcblx0bW9kZT86IHN0cmluZztcblx0Zm9ybWF0T3B0aW9ucz86IEZvcm1hdE9wdGlvbnM7XG5cdGFsd2F5c0tlZXBUYXJnZXRUeXBlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEVtYmVkZGVkVUk1QmluZGluZ0V4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiRW1iZWRkZWRCaW5kaW5nXCI7XG5cdHZhbHVlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBFbWJlZGRlZFVJNUV4cHJlc3Npb25CaW5kaW5nRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCI7XG5cdHZhbHVlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDb21wYXJpc29uT3BlcmF0b3IgPSBcIj09PVwiIHwgXCIhPT1cIiB8IFwiPj1cIiB8IFwiPlwiIHwgXCI8PVwiIHwgXCI8XCI7XG5leHBvcnQgdHlwZSBDb21wYXJpc29uRXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPGJvb2xlYW4+ICYge1xuXHRfdHlwZTogXCJDb21wYXJpc29uXCI7XG5cdG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3I7XG5cdG9wZXJhbmQxOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj47XG5cdG9wZXJhbmQyOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj47XG59O1xuXG5leHBvcnQgdHlwZSBJZkVsc2VFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIklmRWxzZVwiO1xuXHRjb25kaXRpb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0b25UcnVlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdG9uRmFsc2U6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcbn07XG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wZXJ0eShzZXJ2aWNlT2JqZWN0OiB1bmtub3duKTogc2VydmljZU9iamVjdCBpcyBQcm9wZXJ0eSB7XG5cdHJldHVybiAoc2VydmljZU9iamVjdCBhcyBQcm9wZXJ0eSk/Ll90eXBlID09PSBcIlByb3BlcnR5XCI7XG59XG5cbi8qKlxuICogQW4gZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byB0eXBlIFQuXG4gKiBAdHlwZWRlZiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IHR5cGUgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+ID1cblx0fCBVbnJlc29sdmFibGVQYXRoRXhwcmVzc2lvblxuXHR8IENvbnN0YW50RXhwcmVzc2lvbjxUPlxuXHR8IFNldEV4cHJlc3Npb25cblx0fCBOb3RFeHByZXNzaW9uXG5cdHwgVHJ1dGh5RXhwcmVzc2lvblxuXHR8IENvbmNhdEV4cHJlc3Npb25cblx0fCBMZW5ndGhFeHByZXNzaW9uXG5cdHwgUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+XG5cdHwgRW1iZWRkZWRVSTVCaW5kaW5nRXhwcmVzc2lvbjxUPlxuXHR8IEVtYmVkZGVkVUk1RXhwcmVzc2lvbkJpbmRpbmdFeHByZXNzaW9uPFQ+XG5cdHwgQ29tcGFyaXNvbkV4cHJlc3Npb25cblx0fCBJZkVsc2VFeHByZXNzaW9uPFQ+XG5cdHwgRm9ybWF0dGVyRXhwcmVzc2lvbjxUPlxuXHR8IENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPlxuXHR8IFJlZmVyZW5jZUV4cHJlc3Npb25cblx0fCBGdW5jdGlvbkV4cHJlc3Npb248VD47XG5cbnR5cGUgVHlwZU1hcHBpbmdEZWZpbml0aW9uID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGNvbnN0cmFpbnRzPzoge1xuXHRcdCRQcmVjaXNpb24/OiBzdHJpbmc7XG5cdFx0JFY0Pzogc3RyaW5nO1xuXHRcdCRTY2FsZT86IHN0cmluZztcblx0XHQkTWF4TGVuZ3RoPzogc3RyaW5nO1xuXHRcdCROdWxsYWJsZT86IHN0cmluZztcblx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtLyREZWNpbWFsXCI/OiBzdHJpbmc7XG5cdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bUBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5FeGNsdXNpdmVcIj86IHN0cmluZztcblx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtLyREZWNpbWFsXCI/OiBzdHJpbmc7XG5cdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bUBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5FeGNsdXNpdmVcIj86IHN0cmluZztcblx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEaWdpdFNlcXVlbmNlXCI/OiBzdHJpbmc7XG5cdH07XG59O1xuZXhwb3J0IGNvbnN0IEVETV9UWVBFX01BUFBJTkc6IFJlY29yZDxzdHJpbmcsIFR5cGVNYXBwaW5nRGVmaW5pdGlvbj4gPSB7XG5cdFwiRWRtLkJvb2xlYW5cIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkJvb2xlYW5cIiB9LFxuXHRcIkVkbS5CeXRlXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5CeXRlXCIgfSxcblx0XCJFZG0uRGF0ZVwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGF0ZVwiIH0sXG5cdFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI6IHtcblx0XHRjb25zdHJhaW50czoge1xuXHRcdFx0JFByZWNpc2lvbjogXCJwcmVjaXNpb25cIixcblx0XHRcdCRWNDogXCJWNFwiXG5cdFx0fSxcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRhdGVUaW1lT2Zmc2V0XCJcblx0fSxcblx0XCJFZG0uRGVjaW1hbFwiOiB7XG5cdFx0Y29uc3RyYWludHM6IHtcblx0XHRcdFwiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIjogXCJtaW5pbXVtXCIsXG5cdFx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkV4Y2x1c2l2ZVwiOiBcIm1pbmltdW1FeGNsdXNpdmVcIixcblx0XHRcdFwiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIjogXCJtYXhpbXVtXCIsXG5cdFx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkV4Y2x1c2l2ZVwiOiBcIm1heGltdW1FeGNsdXNpdmVcIixcblx0XHRcdCRQcmVjaXNpb246IFwicHJlY2lzaW9uXCIsXG5cdFx0XHQkU2NhbGU6IFwic2NhbGVcIlxuXHRcdH0sXG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EZWNpbWFsXCJcblx0fSxcblx0XCJFZG0uRG91YmxlXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIiB9LFxuXHRcIkVkbS5HdWlkXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5HdWlkXCIgfSxcblx0XCJFZG0uSW50MTZcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDE2XCIgfSxcblx0XCJFZG0uSW50MzJcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDMyXCIgfSxcblx0XCJFZG0uSW50NjRcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDY0XCIgfSxcblx0XCJFZG0uU0J5dGVcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlNCeXRlXCIgfSxcblx0XCJFZG0uU2luZ2xlXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TaW5nbGVcIiB9LFxuXHRcIkVkbS5TdHJlYW1cIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmVhbVwiIH0sXG5cdFwiRWRtLkJpbmFyeVwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyZWFtXCIgfSxcblx0XCJFZG0uU3RyaW5nXCI6IHtcblx0XHRjb25zdHJhaW50czoge1xuXHRcdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGlnaXRTZXF1ZW5jZVwiOiBcImlzRGlnaXRTZXF1ZW5jZVwiLFxuXHRcdFx0JE1heExlbmd0aDogXCJtYXhMZW5ndGhcIixcblx0XHRcdCROdWxsYWJsZTogXCJudWxsYWJsZVwiXG5cdFx0fSxcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiXG5cdH0sXG5cdFwiRWRtLlRpbWVPZkRheVwiOiB7XG5cdFx0Y29uc3RyYWludHM6IHtcblx0XHRcdCRQcmVjaXNpb246IFwicHJlY2lzaW9uXCJcblx0XHR9LFxuXHRcdHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVGltZU9mRGF5XCJcblx0fVxufTtcblxuLyoqXG4gKiBBbiBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIHR5cGUgVCwgb3IgYSBjb25zdGFudCB2YWx1ZSBvZiB0eXBlIFRcbiAqL1xuZXhwb3J0IHR5cGUgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPiA9IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB8IFQ7XG5cbmV4cG9ydCBjb25zdCB1bnJlc29sdmFibGVFeHByZXNzaW9uOiBVbnJlc29sdmFibGVQYXRoRXhwcmVzc2lvbiA9IHtcblx0X3R5cGU6IFwiVW5yZXNvbHZhYmxlXCJcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVYbWxBdHRyaWJ1dGUoaW5wdXRTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBpbnB1dFN0cmluZy5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKC4uLmV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj5bXSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gZXhwcmVzc2lvbnMuZmluZCgoZXhwcikgPT4gZXhwci5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIikgIT09IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogQ2hlY2sgdHdvIGV4cHJlc3Npb25zIGZvciAoZGVlcCkgZXF1YWxpdHkuXG4gKiBAcGFyYW0gYVxuICogQHBhcmFtIGJcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdHdvIGV4cHJlc3Npb25zIGFyZSBlcXVhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbDxUPihhOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sIGI6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPik6IGJvb2xlYW4ge1xuXHRpZiAoYS5fdHlwZSAhPT0gYi5fdHlwZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHN3aXRjaCAoYS5fdHlwZSkge1xuXHRcdGNhc2UgXCJVbnJlc29sdmFibGVcIjpcblx0XHRcdHJldHVybiBmYWxzZTsgLy8gVW5yZXNvbHZhYmxlIGlzIG5ldmVyIGVxdWFsIHRvIGFueXRoaW5nIGV2ZW4gaXRzZWxmXG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0Y2FzZSBcIkVtYmVkZGVkQmluZGluZ1wiOlxuXHRcdGNhc2UgXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCI6XG5cdFx0XHRyZXR1cm4gYS52YWx1ZSA9PT0gKGIgYXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+KS52YWx1ZTtcblxuXHRcdGNhc2UgXCJOb3RcIjpcblx0XHRcdHJldHVybiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub3BlcmFuZCwgKGIgYXMgTm90RXhwcmVzc2lvbikub3BlcmFuZCk7XG5cdFx0Y2FzZSBcIlRydXRoeVwiOlxuXHRcdFx0cmV0dXJuIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vcGVyYW5kLCAoYiBhcyBUcnV0aHlFeHByZXNzaW9uKS5vcGVyYW5kKTtcblx0XHRjYXNlIFwiU2V0XCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLm9wZXJhdG9yID09PSAoYiBhcyBTZXRFeHByZXNzaW9uKS5vcGVyYXRvciAmJlxuXHRcdFx0XHRhLm9wZXJhbmRzLmxlbmd0aCA9PT0gKGIgYXMgU2V0RXhwcmVzc2lvbikub3BlcmFuZHMubGVuZ3RoICYmXG5cdFx0XHRcdGEub3BlcmFuZHMuZXZlcnkoKGV4cHJlc3Npb24pID0+XG5cdFx0XHRcdFx0KGIgYXMgU2V0RXhwcmVzc2lvbikub3BlcmFuZHMuc29tZSgob3RoZXJFeHByZXNzaW9uKSA9PiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGV4cHJlc3Npb24sIG90aGVyRXhwcmVzc2lvbikpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiSWZFbHNlXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEuY29uZGl0aW9uLCAoYiBhcyBJZkVsc2VFeHByZXNzaW9uPFQ+KS5jb25kaXRpb24pICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vblRydWUsIChiIGFzIElmRWxzZUV4cHJlc3Npb248VD4pLm9uVHJ1ZSkgJiZcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9uRmFsc2UsIChiIGFzIElmRWxzZUV4cHJlc3Npb248VD4pLm9uRmFsc2UpXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIkNvbXBhcmlzb25cIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGEub3BlcmF0b3IgPT09IChiIGFzIENvbXBhcmlzb25FeHByZXNzaW9uKS5vcGVyYXRvciAmJlxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub3BlcmFuZDEsIChiIGFzIENvbXBhcmlzb25FeHByZXNzaW9uKS5vcGVyYW5kMSkgJiZcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9wZXJhbmQyLCAoYiBhcyBDb21wYXJpc29uRXhwcmVzc2lvbikub3BlcmFuZDIpXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIkNvbmNhdFwiOlxuXHRcdFx0Y29uc3QgYUV4cHJlc3Npb25zID0gYS5leHByZXNzaW9ucztcblx0XHRcdGNvbnN0IGJFeHByZXNzaW9ucyA9IChiIGFzIENvbmNhdEV4cHJlc3Npb24pLmV4cHJlc3Npb25zO1xuXHRcdFx0aWYgKGFFeHByZXNzaW9ucy5sZW5ndGggIT09IGJFeHByZXNzaW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFFeHByZXNzaW9ucy5ldmVyeSgoZXhwcmVzc2lvbiwgaW5kZXgpID0+IHtcblx0XHRcdFx0cmV0dXJuIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoZXhwcmVzc2lvbiwgYkV4cHJlc3Npb25zW2luZGV4XSk7XG5cdFx0XHR9KTtcblxuXHRcdGNhc2UgXCJMZW5ndGhcIjpcblx0XHRcdHJldHVybiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEucGF0aEluTW9kZWwsIChiIGFzIExlbmd0aEV4cHJlc3Npb24pLnBhdGhJbk1vZGVsKTtcblxuXHRcdGNhc2UgXCJQYXRoSW5Nb2RlbFwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS5tb2RlbE5hbWUgPT09IChiIGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPikubW9kZWxOYW1lICYmXG5cdFx0XHRcdGEucGF0aCA9PT0gKGIgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+KS5wYXRoICYmXG5cdFx0XHRcdGEudGFyZ2V0RW50aXR5U2V0ID09PSAoYiBhcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4pLnRhcmdldEVudGl0eVNldFxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJGb3JtYXR0ZXJcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGEuZm4gPT09IChiIGFzIEZvcm1hdHRlckV4cHJlc3Npb248VD4pLmZuICYmXG5cdFx0XHRcdGEucGFyYW1ldGVycy5sZW5ndGggPT09IChiIGFzIEZvcm1hdHRlckV4cHJlc3Npb248VD4pLnBhcmFtZXRlcnMubGVuZ3RoICYmXG5cdFx0XHRcdGEucGFyYW1ldGVycy5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKChiIGFzIEZvcm1hdHRlckV4cHJlc3Npb248VD4pLnBhcmFtZXRlcnNbaW5kZXhdLCB2YWx1ZSkpXG5cdFx0XHQpO1xuXHRcdGNhc2UgXCJDb21wbGV4VHlwZVwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS50eXBlID09PSAoYiBhcyBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4pLnR5cGUgJiZcblx0XHRcdFx0YS5iaW5kaW5nUGFyYW1ldGVycy5sZW5ndGggPT09IChiIGFzIENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPikuYmluZGluZ1BhcmFtZXRlcnMubGVuZ3RoICYmXG5cdFx0XHRcdGEuYmluZGluZ1BhcmFtZXRlcnMuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT5cblx0XHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKChiIGFzIENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPikuYmluZGluZ1BhcmFtZXRlcnNbaW5kZXhdLCB2YWx1ZSlcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRjYXNlIFwiRnVuY3Rpb25cIjpcblx0XHRcdGNvbnN0IG90aGVyRnVuY3Rpb24gPSBiIGFzIEZ1bmN0aW9uRXhwcmVzc2lvbjxUPjtcblx0XHRcdGlmIChhLm9iaiA9PT0gdW5kZWZpbmVkIHx8IG90aGVyRnVuY3Rpb24ub2JqID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIGEub2JqID09PSBvdGhlckZ1bmN0aW9uO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLmZuID09PSBvdGhlckZ1bmN0aW9uLmZuICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vYmosIG90aGVyRnVuY3Rpb24ub2JqKSAmJlxuXHRcdFx0XHRhLnBhcmFtZXRlcnMubGVuZ3RoID09PSBvdGhlckZ1bmN0aW9uLnBhcmFtZXRlcnMubGVuZ3RoICYmXG5cdFx0XHRcdGEucGFyYW1ldGVycy5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKG90aGVyRnVuY3Rpb24ucGFyYW1ldGVyc1tpbmRleF0sIHZhbHVlKSlcblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiUmVmXCI6XG5cdFx0XHRyZXR1cm4gYS5yZWYgPT09IChiIGFzIFJlZmVyZW5jZUV4cHJlc3Npb24pLnJlZjtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBuZXN0ZWQgU2V0RXhwcmVzc2lvbiBieSBpbmxpbmluZyBvcGVyYW5kcyBvZiB0eXBlIFNldEV4cHJlc3Npb24gd2l0aCB0aGUgc2FtZSBvcGVyYXRvci5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHRvIGZsYXR0ZW5cbiAqIEByZXR1cm5zIEEgbmV3IFNldEV4cHJlc3Npb24gd2l0aCB0aGUgc2FtZSBvcGVyYXRvclxuICovXG5mdW5jdGlvbiBmbGF0dGVuU2V0RXhwcmVzc2lvbihleHByZXNzaW9uOiBTZXRFeHByZXNzaW9uKTogU2V0RXhwcmVzc2lvbiB7XG5cdHJldHVybiBleHByZXNzaW9uLm9wZXJhbmRzLnJlZHVjZShcblx0XHQocmVzdWx0OiBTZXRFeHByZXNzaW9uLCBvcGVyYW5kKSA9PiB7XG5cdFx0XHRjb25zdCBjYW5kaWRhdGVzRm9yRmxhdHRlbmluZyA9XG5cdFx0XHRcdG9wZXJhbmQuX3R5cGUgPT09IFwiU2V0XCIgJiYgb3BlcmFuZC5vcGVyYXRvciA9PT0gZXhwcmVzc2lvbi5vcGVyYXRvciA/IG9wZXJhbmQub3BlcmFuZHMgOiBbb3BlcmFuZF07XG5cdFx0XHRjYW5kaWRhdGVzRm9yRmxhdHRlbmluZy5mb3JFYWNoKChjYW5kaWRhdGUpID0+IHtcblx0XHRcdFx0aWYgKHJlc3VsdC5vcGVyYW5kcy5ldmVyeSgoZSkgPT4gIV9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoZSwgY2FuZGlkYXRlKSkpIHtcblx0XHRcdFx0XHRyZXN1bHQub3BlcmFuZHMucHVzaChjYW5kaWRhdGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSxcblx0XHR7IF90eXBlOiBcIlNldFwiLCBvcGVyYXRvcjogZXhwcmVzc2lvbi5vcGVyYXRvciwgb3BlcmFuZHM6IFtdIH1cblx0KTtcbn1cblxuLyoqXG4gKiBEZXRlY3RzIHdoZXRoZXIgYW4gYXJyYXkgb2YgYm9vbGVhbiBleHByZXNzaW9ucyBjb250YWlucyBhbiBleHByZXNzaW9uIGFuZCBpdHMgbmVnYXRpb24uXG4gKiBAcGFyYW0gZXhwcmVzc2lvbnMgQXJyYXkgb2YgZXhwcmVzc2lvbnNcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgc2V0IG9mIGV4cHJlc3Npb25zIGNvbnRhaW5zIGFuIGV4cHJlc3Npb24gYW5kIGl0cyBuZWdhdGlvblxuICovXG5mdW5jdGlvbiBoYXNPcHBvc2l0ZUV4cHJlc3Npb25zKGV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSk6IGJvb2xlYW4ge1xuXHRjb25zdCBuZWdhdGVkRXhwcmVzc2lvbnMgPSBleHByZXNzaW9ucy5tYXAobm90KTtcblx0cmV0dXJuIGV4cHJlc3Npb25zLnNvbWUoKGV4cHJlc3Npb24sIGluZGV4KSA9PiB7XG5cdFx0Zm9yIChsZXQgaSA9IGluZGV4ICsgMTsgaSA8IG5lZ2F0ZWRFeHByZXNzaW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoZXhwcmVzc2lvbiwgbmVnYXRlZEV4cHJlc3Npb25zW2ldKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBMb2dpY2FsIGBhbmRgIGV4cHJlc3Npb24uXG4gKlxuICogVGhlIGV4cHJlc3Npb24gaXMgc2ltcGxpZmllZCB0byBmYWxzZSBpZiB0aGlzIGNhbiBiZSBkZWNpZGVkIHN0YXRpY2FsbHkgKHRoYXQgaXMsIGlmIG9uZSBvcGVyYW5kIGlzIGEgY29uc3RhbnRcbiAqIGZhbHNlIG9yIGlmIHRoZSBleHByZXNzaW9uIGNvbnRhaW5zIGFuIG9wZXJhbmQgYW5kIGl0cyBuZWdhdGlvbikuXG4gKiBAcGFyYW0gb3BlcmFuZHMgRXhwcmVzc2lvbnMgdG8gY29ubmVjdCBieSBgYW5kYFxuICogQHJldHVybnMgRXhwcmVzc2lvbiBldmFsdWF0aW5nIHRvIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFuZCguLi5vcGVyYW5kczogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+W10pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBleHByZXNzaW9ucyA9IGZsYXR0ZW5TZXRFeHByZXNzaW9uKHtcblx0XHRfdHlwZTogXCJTZXRcIixcblx0XHRvcGVyYXRvcjogXCImJlwiLFxuXHRcdG9wZXJhbmRzOiBvcGVyYW5kcy5tYXAod3JhcFByaW1pdGl2ZSlcblx0fSkub3BlcmFuZHM7XG5cblx0aWYgKGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24oLi4uZXhwcmVzc2lvbnMpKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdH1cblx0bGV0IGlzU3RhdGljRmFsc2UgPSBmYWxzZTtcblx0Y29uc3Qgbm9uVHJpdmlhbEV4cHJlc3Npb24gPSBleHByZXNzaW9ucy5maWx0ZXIoKGV4cHJlc3Npb24pID0+IHtcblx0XHRpZiAoaXNGYWxzZShleHByZXNzaW9uKSkge1xuXHRcdFx0aXNTdGF0aWNGYWxzZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAhaXNDb25zdGFudChleHByZXNzaW9uKTtcblx0fSk7XG5cdGlmIChpc1N0YXRpY0ZhbHNlKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0fSBlbHNlIGlmIChub25Ucml2aWFsRXhwcmVzc2lvbi5sZW5ndGggPT09IDApIHtcblx0XHQvLyBSZXNvbHZlIHRoZSBjb25zdGFudCB0aGVuXG5cdFx0Y29uc3QgaXNWYWxpZCA9IGV4cHJlc3Npb25zLnJlZHVjZSgocmVzdWx0LCBleHByZXNzaW9uKSA9PiByZXN1bHQgJiYgaXNUcnVlKGV4cHJlc3Npb24pLCB0cnVlKTtcblx0XHRyZXR1cm4gY29uc3RhbnQoaXNWYWxpZCk7XG5cdH0gZWxzZSBpZiAobm9uVHJpdmlhbEV4cHJlc3Npb24ubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIG5vblRyaXZpYWxFeHByZXNzaW9uWzBdO1xuXHR9IGVsc2UgaWYgKGhhc09wcG9zaXRlRXhwcmVzc2lvbnMobm9uVHJpdmlhbEV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0X3R5cGU6IFwiU2V0XCIsXG5cdFx0XHRvcGVyYXRvcjogXCImJlwiLFxuXHRcdFx0b3BlcmFuZHM6IG5vblRyaXZpYWxFeHByZXNzaW9uXG5cdFx0fTtcblx0fVxufVxuXG4vKipcbiAqIExvZ2ljYWwgYG9yYCBleHByZXNzaW9uLlxuICpcbiAqIFRoZSBleHByZXNzaW9uIGlzIHNpbXBsaWZpZWQgdG8gdHJ1ZSBpZiB0aGlzIGNhbiBiZSBkZWNpZGVkIHN0YXRpY2FsbHkgKHRoYXQgaXMsIGlmIG9uZSBvcGVyYW5kIGlzIGEgY29uc3RhbnRcbiAqIHRydWUgb3IgaWYgdGhlIGV4cHJlc3Npb24gY29udGFpbnMgYW4gb3BlcmFuZCBhbmQgaXRzIG5lZ2F0aW9uKS5cbiAqIEBwYXJhbSBvcGVyYW5kcyBFeHByZXNzaW9ucyB0byBjb25uZWN0IGJ5IGBvcmBcbiAqIEByZXR1cm5zIEV4cHJlc3Npb24gZXZhbHVhdGluZyB0byBib29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvciguLi5vcGVyYW5kczogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+W10pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBleHByZXNzaW9ucyA9IGZsYXR0ZW5TZXRFeHByZXNzaW9uKHtcblx0XHRfdHlwZTogXCJTZXRcIixcblx0XHRvcGVyYXRvcjogXCJ8fFwiLFxuXHRcdG9wZXJhbmRzOiBvcGVyYW5kcy5tYXAod3JhcFByaW1pdGl2ZSlcblx0fSkub3BlcmFuZHM7XG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKC4uLmV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGxldCBpc1N0YXRpY1RydWUgPSBmYWxzZTtcblx0Y29uc3Qgbm9uVHJpdmlhbEV4cHJlc3Npb24gPSBleHByZXNzaW9ucy5maWx0ZXIoKGV4cHJlc3Npb24pID0+IHtcblx0XHRpZiAoaXNUcnVlKGV4cHJlc3Npb24pKSB7XG5cdFx0XHRpc1N0YXRpY1RydWUgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gIWlzQ29uc3RhbnQoZXhwcmVzc2lvbikgfHwgZXhwcmVzc2lvbi52YWx1ZTtcblx0fSk7XG5cdGlmIChpc1N0YXRpY1RydWUpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdH0gZWxzZSBpZiAobm9uVHJpdmlhbEV4cHJlc3Npb24ubGVuZ3RoID09PSAwKSB7XG5cdFx0Ly8gUmVzb2x2ZSB0aGUgY29uc3RhbnQgdGhlblxuXHRcdGNvbnN0IGlzVmFsaWQgPSBleHByZXNzaW9ucy5yZWR1Y2UoKHJlc3VsdCwgZXhwcmVzc2lvbikgPT4gcmVzdWx0ICYmIGlzVHJ1ZShleHByZXNzaW9uKSwgdHJ1ZSk7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGlzVmFsaWQpO1xuXHR9IGVsc2UgaWYgKG5vblRyaXZpYWxFeHByZXNzaW9uLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBub25Ucml2aWFsRXhwcmVzc2lvblswXTtcblx0fSBlbHNlIGlmIChoYXNPcHBvc2l0ZUV4cHJlc3Npb25zKG5vblRyaXZpYWxFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0X3R5cGU6IFwiU2V0XCIsXG5cdFx0XHRvcGVyYXRvcjogXCJ8fFwiLFxuXHRcdFx0b3BlcmFuZHM6IG5vblRyaXZpYWxFeHByZXNzaW9uXG5cdFx0fTtcblx0fVxufVxuXG4vKipcbiAqIExvZ2ljYWwgYG5vdGAgb3BlcmF0b3IuXG4gKiBAcGFyYW0gb3BlcmFuZCBUaGUgZXhwcmVzc2lvbiB0byByZXZlcnNlXG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0aW5nIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gYm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gbm90KG9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdG9wZXJhbmQgPSB3cmFwUHJpbWl0aXZlKG9wZXJhbmQpO1xuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbihvcGVyYW5kKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9IGVsc2UgaWYgKGlzQ29uc3RhbnQob3BlcmFuZCkpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoIW9wZXJhbmQudmFsdWUpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdHR5cGVvZiBvcGVyYW5kID09PSBcIm9iamVjdFwiICYmXG5cdFx0b3BlcmFuZC5fdHlwZSA9PT0gXCJTZXRcIiAmJlxuXHRcdG9wZXJhbmQub3BlcmF0b3IgPT09IFwifHxcIiAmJlxuXHRcdG9wZXJhbmQub3BlcmFuZHMuZXZlcnkoKGV4cHJlc3Npb24pID0+IGlzQ29uc3RhbnQoZXhwcmVzc2lvbikgfHwgaXNDb21wYXJpc29uKGV4cHJlc3Npb24pKVxuXHQpIHtcblx0XHRyZXR1cm4gYW5kKC4uLm9wZXJhbmQub3BlcmFuZHMubWFwKChleHByZXNzaW9uKSA9PiBub3QoZXhwcmVzc2lvbikpKTtcblx0fSBlbHNlIGlmIChcblx0XHR0eXBlb2Ygb3BlcmFuZCA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdG9wZXJhbmQuX3R5cGUgPT09IFwiU2V0XCIgJiZcblx0XHRvcGVyYW5kLm9wZXJhdG9yID09PSBcIiYmXCIgJiZcblx0XHRvcGVyYW5kLm9wZXJhbmRzLmV2ZXJ5KChleHByZXNzaW9uKSA9PiBpc0NvbnN0YW50KGV4cHJlc3Npb24pIHx8IGlzQ29tcGFyaXNvbihleHByZXNzaW9uKSlcblx0KSB7XG5cdFx0cmV0dXJuIG9yKC4uLm9wZXJhbmQub3BlcmFuZHMubWFwKChleHByZXNzaW9uKSA9PiBub3QoZXhwcmVzc2lvbikpKTtcblx0fSBlbHNlIGlmIChpc0NvbXBhcmlzb24ob3BlcmFuZCkpIHtcblx0XHQvLyBDcmVhdGUgdGhlIHJldmVyc2UgY29tcGFyaXNvblxuXHRcdHN3aXRjaCAob3BlcmFuZC5vcGVyYXRvcikge1xuXHRcdFx0Y2FzZSBcIiE9PVwiOlxuXHRcdFx0XHRyZXR1cm4geyAuLi5vcGVyYW5kLCBvcGVyYXRvcjogXCI9PT1cIiB9O1xuXHRcdFx0Y2FzZSBcIjxcIjpcblx0XHRcdFx0cmV0dXJuIHsgLi4ub3BlcmFuZCwgb3BlcmF0b3I6IFwiPj1cIiB9O1xuXHRcdFx0Y2FzZSBcIjw9XCI6XG5cdFx0XHRcdHJldHVybiB7IC4uLm9wZXJhbmQsIG9wZXJhdG9yOiBcIj5cIiB9O1xuXHRcdFx0Y2FzZSBcIj09PVwiOlxuXHRcdFx0XHRyZXR1cm4geyAuLi5vcGVyYW5kLCBvcGVyYXRvcjogXCIhPT1cIiB9O1xuXHRcdFx0Y2FzZSBcIj5cIjpcblx0XHRcdFx0cmV0dXJuIHsgLi4ub3BlcmFuZCwgb3BlcmF0b3I6IFwiPD1cIiB9O1xuXHRcdFx0Y2FzZSBcIj49XCI6XG5cdFx0XHRcdHJldHVybiB7IC4uLm9wZXJhbmQsIG9wZXJhdG9yOiBcIjxcIiB9O1xuXHRcdH1cblx0fSBlbHNlIGlmIChvcGVyYW5kLl90eXBlID09PSBcIk5vdFwiKSB7XG5cdFx0cmV0dXJuIG9wZXJhbmQub3BlcmFuZDtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiTm90XCIsXG5cdFx0b3BlcmFuZDogb3BlcmFuZFxuXHR9O1xufVxuXG4vKipcbiAqIEV2YWx1YXRlcyB3aGV0aGVyIGEgYmluZGluZyBleHByZXNzaW9uIGlzIGVxdWFsIHRvIHRydWUgd2l0aCBhIGxvb3NlIGVxdWFsaXR5LlxuICogQHBhcmFtIG9wZXJhbmQgVGhlIGV4cHJlc3Npb24gdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRoZSByZXN1bHRpbmcgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byBib29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RydXRoeShvcGVyYW5kOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGlmIChpc0NvbnN0YW50KG9wZXJhbmQpKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KCEhb3BlcmFuZC52YWx1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIlRydXRoeVwiLFxuXHRcdFx0b3BlcmFuZDogb3BlcmFuZFxuXHRcdH07XG5cdH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgYmluZGluZyBleHByZXNzaW9uIHRoYXQgd2lsbCBiZSBldmFsdWF0ZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcgbW9kZWwuXG4gKiBAcGFyYW0gcGF0aFxuICogQHBhcmFtIG1vZGVsTmFtZVxuICogQHBhcmFtIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHNcbiAqIEBwYXJhbSBwYXRoVmlzaXRvclxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRhdGluZyB0aGF0IHBhdGggaW4gdGhlIG1vZGVsXG4gKiBAZGVwcmVjYXRlZCB1c2UgcGF0aEluTW9kZWwgaW5zdGVhZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYmluZGluZ0V4cHJlc3Npb248VGFyZ2V0VHlwZSBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRwYXRoOiBzdHJpbmcsXG5cdG1vZGVsTmFtZT86IHN0cmluZyxcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRoczogc3RyaW5nW10gPSBbXSxcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogUGF0aEluTW9kZWxFeHByZXNzaW9uPFRhcmdldFR5cGU+IHwgVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gcGF0aEluTW9kZWwocGF0aCwgbW9kZWxOYW1lLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcik7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGJpbmRpbmcgZXhwcmVzc2lvbiB0aGF0IHdpbGwgYmUgZXZhbHVhdGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIG1vZGVsLlxuICogQHRlbXBsYXRlIFRhcmdldFR5cGVcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIG9uIHRoZSBtb2RlbFxuICogQHBhcmFtIFttb2RlbE5hbWVdIFRoZSBuYW1lIG9mIHRoZSBtb2RlbFxuICogQHBhcmFtIFt2aXNpdGVkTmF2aWdhdGlvblBhdGhzXSBUaGUgcGF0aHMgZnJvbSB0aGUgcm9vdCBlbnRpdHlTZXRcbiAqIEBwYXJhbSBbcGF0aFZpc2l0b3JdIEEgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSByZXN1bHRpbmcgcGF0aFxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRhdGluZyB0aGF0IHBhdGggaW4gdGhlIG1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRoSW5Nb2RlbChcblx0cGF0aDogdW5kZWZpbmVkLFxuXHRtb2RlbE5hbWU/OiBzdHJpbmcsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM/OiBzdHJpbmdbXSxcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb247XG5leHBvcnQgZnVuY3Rpb24gcGF0aEluTW9kZWw8VGFyZ2V0VHlwZSBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRwYXRoOiBzdHJpbmcsXG5cdG1vZGVsTmFtZT86IHN0cmluZyxcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRocz86IHN0cmluZ1tdLFxuXHRwYXRoVmlzaXRvcj86IHVuZGVmaW5lZFxuKTogUGF0aEluTW9kZWxFeHByZXNzaW9uPFRhcmdldFR5cGU+O1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhJbk1vZGVsPFRhcmdldFR5cGUgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0cGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtb2RlbE5hbWU/OiBzdHJpbmcsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM/OiBzdHJpbmdbXSxcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb24gfCBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VGFyZ2V0VHlwZT47XG5leHBvcnQgZnVuY3Rpb24gcGF0aEluTW9kZWw8VGFyZ2V0VHlwZSBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1vZGVsTmFtZT86IHN0cmluZyxcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRoczogc3RyaW5nW10gPSBbXSxcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb24gfCBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VGFyZ2V0VHlwZT4ge1xuXHRpZiAocGF0aCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdH1cblx0bGV0IHRhcmdldFBhdGg7XG5cdGlmIChwYXRoVmlzaXRvcikge1xuXHRcdHRhcmdldFBhdGggPSBwYXRoVmlzaXRvcihwYXRoKTtcblx0XHRpZiAodGFyZ2V0UGF0aCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgbG9jYWxQYXRoID0gdmlzaXRlZE5hdmlnYXRpb25QYXRocy5jb25jYXQoKTtcblx0XHRsb2NhbFBhdGgucHVzaChwYXRoKTtcblx0XHR0YXJnZXRQYXRoID0gbG9jYWxQYXRoLmpvaW4oXCIvXCIpO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiUGF0aEluTW9kZWxcIixcblx0XHRtb2RlbE5hbWU6IG1vZGVsTmFtZSxcblx0XHRwYXRoOiB0YXJnZXRQYXRoXG5cdH07XG59XG5cbnR5cGUgUGxhaW5FeHByZXNzaW9uT2JqZWN0ID0geyBbaW5kZXg6IHN0cmluZ106IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiB9O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjb25zdGFudCBleHByZXNzaW9uIGJhc2VkIG9uIGEgcHJpbWl0aXZlIHZhbHVlLlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgY29uc3RhbnQgdG8gd3JhcCBpbiBhbiBleHByZXNzaW9uXG4gKiBAcmV0dXJucyBUaGUgY29uc3RhbnQgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uc3RhbnQ8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KHZhbHVlOiBUKTogQ29uc3RhbnRFeHByZXNzaW9uPFQ+IHtcblx0bGV0IGNvbnN0YW50VmFsdWU6IFQ7XG5cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRjb25zdGFudFZhbHVlID0gdmFsdWUubWFwKHdyYXBQcmltaXRpdmUpIGFzIFQ7XG5cdFx0fSBlbHNlIGlmIChpc1ByaW1pdGl2ZU9iamVjdCh2YWx1ZSkpIHtcblx0XHRcdGNvbnN0YW50VmFsdWUgPSB2YWx1ZS52YWx1ZU9mKCkgYXMgVDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3RhbnRWYWx1ZSA9IE9iamVjdC5lbnRyaWVzKHZhbHVlKS5yZWR1Y2UoKHBsYWluRXhwcmVzc2lvbiwgW2tleSwgdmFsXSkgPT4ge1xuXHRcdFx0XHRjb25zdCB3cmFwcGVkVmFsdWUgPSB3cmFwUHJpbWl0aXZlKHZhbCk7XG5cdFx0XHRcdGlmICh3cmFwcGVkVmFsdWUuX3R5cGUgIT09IFwiQ29uc3RhbnRcIiB8fCB3cmFwcGVkVmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHBsYWluRXhwcmVzc2lvbltrZXldID0gd3JhcHBlZFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBwbGFpbkV4cHJlc3Npb247XG5cdFx0XHR9LCB7fSBhcyBQbGFpbkV4cHJlc3Npb25PYmplY3QpIGFzIFQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0YW50VmFsdWUgPSB2YWx1ZTtcblx0fVxuXG5cdHJldHVybiB7IF90eXBlOiBcIkNvbnN0YW50XCIsIHZhbHVlOiBjb25zdGFudFZhbHVlIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQmluZGluZ1N0cmluZzxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdHZhbHVlOiBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyLFxuXHR0YXJnZXRUeXBlPzogc3RyaW5nXG4pOiBDb25zdGFudEV4cHJlc3Npb248VD4gfCBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4gfCBFbWJlZGRlZFVJNUJpbmRpbmdFeHByZXNzaW9uPFQ+IHwgRW1iZWRkZWRVSTVFeHByZXNzaW9uQmluZGluZ0V4cHJlc3Npb248VD4ge1xuXHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUuc3RhcnRzV2l0aChcIntcIikpIHtcblx0XHRjb25zdCBwYXRoSW5Nb2RlbFJlZ2V4ID0gL157KC4qKT4oLispfSQvOyAvLyBNYXRjaGVzIG1vZGVsIHBhdGhzIGxpa2UgXCJtb2RlbD5wYXRoXCIgb3IgXCI+cGF0aFwiIChkZWZhdWx0IG1vZGVsKVxuXHRcdGNvbnN0IHBhdGhJbk1vZGVsUmVnZXhNYXRjaCA9IHBhdGhJbk1vZGVsUmVnZXguZXhlYyh2YWx1ZSk7XG5cblx0XHRpZiAodmFsdWUuc3RhcnRzV2l0aChcIns9XCIpKSB7XG5cdFx0XHQvLyBFeHByZXNzaW9uIGJpbmRpbmcsIHdlIGNhbiBqdXN0IHJlbW92ZSB0aGUgb3V0ZXIgYmluZGluZyB0aGluZ3Ncblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdF90eXBlOiBcIkVtYmVkZGVkRXhwcmVzc2lvbkJpbmRpbmdcIixcblx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSBpZiAocGF0aEluTW9kZWxSZWdleE1hdGNoKSB7XG5cdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwocGF0aEluTW9kZWxSZWdleE1hdGNoWzJdIHx8IFwiXCIsIHBhdGhJbk1vZGVsUmVnZXhNYXRjaFsxXSB8fCB1bmRlZmluZWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRfdHlwZTogXCJFbWJlZGRlZEJpbmRpbmdcIixcblx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIGlmICh0YXJnZXRUeXBlID09PSBcImJvb2xlYW5cIiAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgKHZhbHVlID09PSBcInRydWVcIiB8fCB2YWx1ZSA9PT0gXCJmYWxzZVwiKSkge1xuXHRcdHJldHVybiBjb25zdGFudCh2YWx1ZSA9PT0gXCJ0cnVlXCIpIGFzIENvbnN0YW50RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmICh0YXJnZXRUeXBlID09PSBcIm51bWJlclwiICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAoIWlzTmFOKE51bWJlcih2YWx1ZSkpIHx8IHZhbHVlID09PSBcIk5hTlwiKSkge1xuXHRcdHJldHVybiBjb25zdGFudChOdW1iZXIodmFsdWUpKSBhcyBDb25zdGFudEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHZhbHVlKSBhcyBDb25zdGFudEV4cHJlc3Npb248VD47XG5cdH1cbn1cblxuLyoqXG4gKiBBIG5hbWVkIHJlZmVyZW5jZS5cbiAqIEBzZWUgZm5cbiAqIEBwYXJhbSByZWZlcmVuY2UgUmVmZXJlbmNlXG4gKiBAcmV0dXJucyBUaGUgb2JqZWN0IHJlZmVyZW5jZSBiaW5kaW5nIHBhcnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZihyZWZlcmVuY2U6IHN0cmluZyB8IG51bGwpOiBSZWZlcmVuY2VFeHByZXNzaW9uIHtcblx0cmV0dXJuIHsgX3R5cGU6IFwiUmVmXCIsIHJlZjogcmVmZXJlbmNlIH07XG59XG5cbi8qKlxuICogV3JhcCBhIHN0YXRlIG9iamVjdCBpbnRvIGEgcGF0aCBpbiBtb2RlbCBleHByZXNzaW9uLlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSBzdGF0ZU9iamVjdFByb3AgVGhlIG9iamVjdCB0byBldmFsdWF0ZSwgaWYgaXQncyBhIGNvbnN0YW50IGl0IHdpbGwgYmUgd3JhcHBlZCBpbiBhIGNvbnN0YW50IGV4cHJlc3Npb24sIGlmIGl0J3MgYSBzdGF0ZSBwcm9wZXJ0eSBpdCB3aWxsIGJlIGJvdW5kXG4gKiBAcGFyYW0ga2V5IFRoZSBrZXkgb2YgdGhlIHN0YXRlIG9iamVjdCB0byBiaW5kXG4gKiBAcmV0dXJucyBUaGUgY29ycmVjdCBiaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gYmluZFN0YXRlPFQgZXh0ZW5kcyBvYmplY3QsIEsgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0c3RhdGVPYmplY3RQcm9wOiBULFxuXHRrZXk6IGtleW9mIFRcbik6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxLPiB8IENvbnN0YW50RXhwcmVzc2lvbjxLPiB7XG5cdGlmICh0eXBlb2Ygc3RhdGVPYmplY3RQcm9wID09PSBcIm9iamVjdFwiICYmIChzdGF0ZU9iamVjdFByb3AgYXMgQmluZGluZ0luZm9Ib2xkZXI8VD4pLl9fYmluZGluZ0luZm8pIHtcblx0XHRyZXR1cm4gcGF0aEluTW9kZWwoXCIvXCIgKyBrZXkudG9TdHJpbmcoKSwgKHN0YXRlT2JqZWN0UHJvcCBhcyBCaW5kaW5nSW5mb0hvbGRlcjxUPikuX19iaW5kaW5nSW5mby5tb2RlbCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHN0YXRlT2JqZWN0UHJvcCkgYXMgdW5rbm93biBhcyBDb25zdGFudEV4cHJlc3Npb248Sz47XG5cdH1cbn1cbi8qKlxuICogV3JhcCBhIHByaW1pdGl2ZSBpbnRvIGEgY29uc3RhbnQgZXhwcmVzc2lvbiBpZiBpdCBpcyBub3QgYWxyZWFkeSBhbiBleHByZXNzaW9uLlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSBzb21ldGhpbmcgVGhlIG9iamVjdCB0byB3cmFwIGluIGEgQ29uc3RhbnQgZXhwcmVzc2lvblxuICogQHJldHVybnMgRWl0aGVyIHRoZSBvcmlnaW5hbCBvYmplY3Qgb3IgdGhlIHdyYXBwZWQgb25lIGRlcGVuZGluZyBvbiB0aGUgY2FzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gd3JhcFByaW1pdGl2ZTxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oc29tZXRoaW5nOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4ge1xuXHRpZiAoaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24oc29tZXRoaW5nKSkge1xuXHRcdHJldHVybiBzb21ldGhpbmcgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9XG5cblx0cmV0dXJuIGNvbnN0YW50KHNvbWV0aGluZyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBleHByZXNzaW9uIG9yIHZhbHVlIHByb3ZpZGVkIGlzIGEgYmluZGluZyB0b29saW5nIGV4cHJlc3Npb24gb3Igbm90LlxuICpcbiAqIEV2ZXJ5IG9iamVjdCBoYXZpbmcgYSBwcm9wZXJ0eSBuYW1lZCBgX3R5cGVgIG9mIHNvbWUgdmFsdWUgaXMgY29uc2lkZXJlZCBhbiBleHByZXNzaW9uLCBldmVuIGlmIHRoZXJlIGlzIGFjdHVhbGx5XG4gKiBubyBzdWNoIGV4cHJlc3Npb24gdHlwZSBzdXBwb3J0ZWQuXG4gKiBAcGFyYW0gZXhwcmVzc2lvblxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBleHByZXNzaW9uIGlzIGEgYmluZGluZyB0b29sa2l0IGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKFxuXHRleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4gfCB1bmtub3duXG4pOiBleHByZXNzaW9uIGlzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiB7XG5cdHJldHVybiAoZXhwcmVzc2lvbiBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4pPy5fdHlwZSAhPT0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZXhwcmVzc2lvbiBvciB2YWx1ZSBwcm92aWRlZCBpcyBjb25zdGFudCBvciBub3QuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSAgbWF5YmVDb25zdGFudCBUaGUgZXhwcmVzc2lvbiBvciBwcmltaXRpdmUgdmFsdWUgdGhhdCBpcyB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgY29uc3RhbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29uc3RhbnQ8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KG1heWJlQ29uc3RhbnQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPik6IG1heWJlQ29uc3RhbnQgaXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+IHtcblx0cmV0dXJuIHR5cGVvZiBtYXliZUNvbnN0YW50ICE9PSBcIm9iamVjdFwiIHx8IChtYXliZUNvbnN0YW50IGFzIEJhc2VFeHByZXNzaW9uPFQ+KS5fdHlwZSA9PT0gXCJDb25zdGFudFwiO1xufVxuXG5mdW5jdGlvbiBpc1RydWUoZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KTogYm9vbGVhbiB7XG5cdHJldHVybiBpc0NvbnN0YW50KGV4cHJlc3Npb24pICYmIGV4cHJlc3Npb24udmFsdWUgPT09IHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRmFsc2UoZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KTogYm9vbGVhbiB7XG5cdHJldHVybiBpc0NvbnN0YW50KGV4cHJlc3Npb24pICYmIGV4cHJlc3Npb24udmFsdWUgPT09IGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZXhwcmVzc2lvbiBvciB2YWx1ZSBwcm92aWRlZCBpcyBhIHBhdGggaW4gbW9kZWwgZXhwcmVzc2lvbiBvciBub3QuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSAgbWF5YmVCaW5kaW5nIFRoZSBleHByZXNzaW9uIG9yIHByaW1pdGl2ZSB2YWx1ZSB0aGF0IGlzIHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBhIHBhdGggaW4gbW9kZWwgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRtYXliZUJpbmRpbmc6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogbWF5YmVCaW5kaW5nIGlzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPiB7XG5cdHJldHVybiAobWF5YmVCaW5kaW5nIGFzIEJhc2VFeHByZXNzaW9uPFQ+KT8uX3R5cGUgPT09IFwiUGF0aEluTW9kZWxcIjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGV4cHJlc3Npb24gb3IgdmFsdWUgcHJvdmlkZWQgaXMgYSBjb21wbGV4IHR5cGUgZXhwcmVzc2lvbi5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtICBtYXliZUJpbmRpbmcgVGhlIGV4cHJlc3Npb24gb3IgcHJpbWl0aXZlIHZhbHVlIHRoYXQgaXMgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGEgcGF0aCBpbiBtb2RlbCBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdG1heWJlQmluZGluZzogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBtYXliZUJpbmRpbmcgaXMgQ29tcGxleFR5cGVFeHByZXNzaW9uPFQ+IHtcblx0cmV0dXJuIChtYXliZUJpbmRpbmcgYXMgQmFzZUV4cHJlc3Npb248VD4pPy5fdHlwZSA9PT0gXCJDb21wbGV4VHlwZVwiO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZXhwcmVzc2lvbiBvciB2YWx1ZSBwcm92aWRlZCBpcyBhIGNvbmNhdCBleHByZXNzaW9uIG9yIG5vdC5cbiAqIEBwYXJhbSBleHByZXNzaW9uXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGV4cHJlc3Npb24gaXMgYSBDb25jYXRFeHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGlzQ29uY2F0RXhwcmVzc2lvbihleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pOiBleHByZXNzaW9uIGlzIENvbmNhdEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gKGV4cHJlc3Npb24gYXMgQmFzZUV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pPy5fdHlwZSA9PT0gXCJDb25jYXRcIjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGV4cHJlc3Npb24gb3IgdmFsdWUgcHJvdmlkZWQgaXMgYSBJZkVsc2UgZXhwcmVzc2lvbiBvciBub3QuXG4gKiBAcGFyYW0gZXhwcmVzc2lvblxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBleHByZXNzaW9uIGlzIGEgSWZFbHNlRXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBpc0lmRWxzZUV4cHJlc3Npb24oZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KTogZXhwcmVzc2lvbiBpcyBDb25jYXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIChleHByZXNzaW9uIGFzIEJhc2VFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KT8uX3R5cGUgPT09IFwiSWZFbHNlXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBleHByZXNzaW9uIHByb3ZpZGVkIGlzIGEgY29tcGFyaXNvbiBvciBub3QuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGV4cHJlc3Npb24gaXMgYSBDb21wYXJpc29uRXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBpc0NvbXBhcmlzb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPik6IGV4cHJlc3Npb24gaXMgQ29tcGFyaXNvbkV4cHJlc3Npb24ge1xuXHRyZXR1cm4gZXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJDb21wYXJpc29uXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGlucHV0IHBhcmFtZXRlciBpcyBhIGNvbnN0YW50IGV4cHJlc3Npb24gb2YgdHlwZSB1bmRlZmluZWQuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgaW5wdXQgZXhwcmVzc2lvbiBvciBvYmplY3QgaW4gZ2VuZXJhbFxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBpbnB1dCBpcyBjb25zdGFudCB3aGljaCBoYXMgdW5kZWZpbmVkIGZvciB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNVbmRlZmluZWRFeHByZXNzaW9uKGV4cHJlc3Npb246IHVua25vd24pOiBleHByZXNzaW9uIGlzIENvbnN0YW50RXhwcmVzc2lvbjx1bmRlZmluZWQ+IHtcblx0Y29uc3QgZXhwcmVzc2lvbkFzRXhwcmVzc2lvbiA9IGV4cHJlc3Npb24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+O1xuXHRyZXR1cm4gZXhwcmVzc2lvbkFzRXhwcmVzc2lvbj8uX3R5cGUgPT09IFwiQ29uc3RhbnRcIiAmJiBleHByZXNzaW9uQXNFeHByZXNzaW9uPy52YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuXG50eXBlIENvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPiA9XG5cdHwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgQXBwbHlBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IElmQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBPckFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgQW5kQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBOZUFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgRXFBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IE5vdEFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgR3RBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEdlQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBMZUFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgTHRBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IFZvY2FiQ29uc3RhbnRFeHByZXNzaW9uPFA+O1xuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZU9iamVjdChvYmplY3RUeXBlOiBvYmplY3QpOiBib29sZWFuIHtcblx0c3dpdGNoIChvYmplY3RUeXBlLmNvbnN0cnVjdG9yLm5hbWUpIHtcblx0XHRjYXNlIFwiU3RyaW5nXCI6XG5cdFx0Y2FzZSBcIk51bWJlclwiOlxuXHRcdGNhc2UgXCJCb29sZWFuXCI6XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG4vKipcbiAqIENoZWNrIGlmIHRoZSBwYXNzZWQgYW5ub3RhdGlvbiBhbm5vdGF0aW9uVmFsdWUgaXMgYSBDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb24uXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSAgYW5ub3RhdGlvblZhbHVlIFRoZSBhbm5vdGF0aW9uIGFubm90YXRpb25WYWx1ZSB0byBldmFsdWF0ZVxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3QgaXMgYSB7Q29tcGxleEFubm90YXRpb25FeHByZXNzaW9ufVxuICovXG5mdW5jdGlvbiBpc0NvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbjxUPihhbm5vdGF0aW9uVmFsdWU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFQ+KTogYW5ub3RhdGlvblZhbHVlIGlzIENvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbjxUPiB7XG5cdHJldHVybiB0eXBlb2YgYW5ub3RhdGlvblZhbHVlID09PSBcIm9iamVjdFwiICYmICFpc1ByaW1pdGl2ZU9iamVjdChhbm5vdGF0aW9uVmFsdWUgYXMgb2JqZWN0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgY29ycmVzcG9uZGluZyBhbm5vdGF0aW9uVmFsdWUgZm9yIGEgZ2l2ZW4gYW5ub3RhdGlvbiBhbm5vdGF0aW9uVmFsdWUuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBhbm5vdGF0aW9uVmFsdWUgVGhlIHNvdXJjZSBhbm5vdGF0aW9uIGFubm90YXRpb25WYWx1ZVxuICogQHBhcmFtIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgVGhlIHBhdGggZnJvbSB0aGUgcm9vdCBlbnRpdHkgc2V0XG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIERlZmF1bHQgdmFsdWUgaWYgdGhlIGFubm90YXRpb25WYWx1ZSBpcyB1bmRlZmluZWRcbiAqIEBwYXJhbSBwYXRoVmlzaXRvciBBIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgcmVzdWx0aW5nIHBhdGhcbiAqIEByZXR1cm5zIFRoZSBhbm5vdGF0aW9uVmFsdWUgZXF1aXZhbGVudCB0byB0aGF0IGFubm90YXRpb24gYW5ub3RhdGlvblZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRhbm5vdGF0aW9uVmFsdWU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFQ+IHwgdW5kZWZpbmVkLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSA9IFtdLFxuXHRkZWZhdWx0VmFsdWU/OiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj4ge1xuXHRpZiAoYW5ub3RhdGlvblZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gd3JhcFByaW1pdGl2ZShkZWZhdWx0VmFsdWUgYXMgUHJpbWl0aXZlVHlwZUNhc3Q8VD4pO1xuXHR9XG5cdGFubm90YXRpb25WYWx1ZSA9IGFubm90YXRpb25WYWx1ZT8udmFsdWVPZigpIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFQ+O1xuXHRpZiAoIWlzQ29tcGxleEFubm90YXRpb25FeHByZXNzaW9uKGFubm90YXRpb25WYWx1ZSkpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoYW5ub3RhdGlvblZhbHVlKTtcblx0fVxuXG5cdHN3aXRjaCAoYW5ub3RhdGlvblZhbHVlLnR5cGUpIHtcblx0XHRjYXNlIFwiUGF0aFwiOlxuXHRcdFx0cmV0dXJuIHBhdGhJbk1vZGVsKGFubm90YXRpb25WYWx1ZS5wYXRoLCB1bmRlZmluZWQsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKTtcblx0XHRjYXNlIFwiSWZcIjpcblx0XHRcdHJldHVybiBhbm5vdGF0aW9uSWZFeHByZXNzaW9uKGFubm90YXRpb25WYWx1ZS4kSWYsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248XG5cdFx0XHRcdFByaW1pdGl2ZVR5cGVDYXN0PFQ+XG5cdFx0XHQ+O1xuXHRcdGNhc2UgXCJOb3RcIjpcblx0XHRcdHJldHVybiBub3QocGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kTm90LCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcikpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxcblx0XHRcdFx0UHJpbWl0aXZlVHlwZUNhc3Q8VD5cblx0XHRcdD47XG5cdFx0Y2FzZSBcIkVxXCI6XG5cdFx0XHRyZXR1cm4gZXF1YWwoXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEVxWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEVxWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiTmVcIjpcblx0XHRcdHJldHVybiBub3RFcXVhbChcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kTmVbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kTmVbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJHdFwiOlxuXHRcdFx0cmV0dXJuIGdyZWF0ZXJUaGFuKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRHdFswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRHdFsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkdlXCI6XG5cdFx0XHRyZXR1cm4gZ3JlYXRlck9yRXF1YWwoXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEdlWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEdlWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiTHRcIjpcblx0XHRcdHJldHVybiBsZXNzVGhhbihcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kTHRbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kTHRbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJMZVwiOlxuXHRcdFx0cmV0dXJuIGxlc3NPckVxdWFsKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRMZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRMZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIk9yXCI6XG5cdFx0XHRyZXR1cm4gb3IoXG5cdFx0XHRcdC4uLmFubm90YXRpb25WYWx1ZS4kT3IubWFwKGZ1bmN0aW9uIChvckNvbmRpdGlvbikge1xuXHRcdFx0XHRcdHJldHVybiBwYXJzZUFubm90YXRpb25Db25kaXRpb248Ym9vbGVhbj4ob3JDb25kaXRpb24sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKTtcblx0XHRcdFx0fSlcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiQW5kXCI6XG5cdFx0XHRyZXR1cm4gYW5kKFxuXHRcdFx0XHQuLi5hbm5vdGF0aW9uVmFsdWUuJEFuZC5tYXAoZnVuY3Rpb24gKGFuZENvbmRpdGlvbikge1xuXHRcdFx0XHRcdHJldHVybiBwYXJzZUFubm90YXRpb25Db25kaXRpb248Ym9vbGVhbj4oYW5kQ29uZGl0aW9uLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcik7XG5cdFx0XHRcdH0pXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkFwcGx5XCI6XG5cdFx0XHRyZXR1cm4gYW5ub3RhdGlvbkFwcGx5RXhwcmVzc2lvbihcblx0XHRcdFx0YW5ub3RhdGlvblZhbHVlIGFzIEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPixcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3Jcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRcdC8vIE5vdCBhIHJlYWwgY2FzZSBidXQgdGhlIHR5cGUgc3lzdGVtIG5lZWRzIGl0XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQoYW5ub3RhdGlvblZhbHVlLnZhbHVlIGFzIFByaW1pdGl2ZVR5cGVDYXN0PFQ+KTtcblx0fVxuXHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcbn1cblxuLyoqXG4gKiBQYXJzZSB0aGUgYW5ub3RhdGlvbiBjb25kaXRpb24gaW50byBhbiBleHByZXNzaW9uLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gYW5ub3RhdGlvblZhbHVlIFRoZSBjb25kaXRpb24gb3IgdmFsdWUgZnJvbSB0aGUgYW5ub3RhdGlvblxuICogQHBhcmFtIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgVGhlIHBhdGggZnJvbSB0aGUgcm9vdCBlbnRpdHkgc2V0XG4gKiBAcGFyYW0gcGF0aFZpc2l0b3IgQSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHJlc3VsdGluZyBwYXRoXG4gKiBAcmV0dXJucyBBbiBlcXVpdmFsZW50IGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gcGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0YW5ub3RhdGlvblZhbHVlOiBDb25kaXRpb25hbENoZWNrT3JWYWx1ZSxcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRoczogc3RyaW5nW10gPSBbXSxcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0aWYgKGFubm90YXRpb25WYWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgYW5ub3RhdGlvblZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGFubm90YXRpb25WYWx1ZSBhcyBUKTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkT3JcIikpIHtcblx0XHRyZXR1cm4gb3IoXG5cdFx0XHQuLi4oKGFubm90YXRpb25WYWx1ZSBhcyBPckNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJE9yLm1hcChmdW5jdGlvbiAob3JDb25kaXRpb24pIHtcblx0XHRcdFx0cmV0dXJuIHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihvckNvbmRpdGlvbiwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHRcdFx0fSkgYXMgdW5rbm93biBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSlcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkQW5kXCIpKSB7XG5cdFx0cmV0dXJuIGFuZChcblx0XHRcdC4uLigoYW5ub3RhdGlvblZhbHVlIGFzIEFuZENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEFuZC5tYXAoZnVuY3Rpb24gKGFuZENvbmRpdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gcGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFuZENvbmRpdGlvbiwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHRcdFx0fSkgYXMgdW5rbm93biBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSlcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkTm90XCIpKSB7XG5cdFx0cmV0dXJuIG5vdChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIE5vdENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJE5vdCwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEVxXCIpKSB7XG5cdFx0cmV0dXJuIGVxdWFsKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgRXFDb25kaXRpb25hbEV4cHJlc3Npb24pLiRFcVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgRXFDb25kaXRpb25hbEV4cHJlc3Npb24pLiRFcVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJE5lXCIpKSB7XG5cdFx0cmV0dXJuIG5vdEVxdWFsKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTmVDb25kaXRpb25hbEV4cHJlc3Npb24pLiROZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTmVDb25kaXRpb25hbEV4cHJlc3Npb24pLiROZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEd0XCIpKSB7XG5cdFx0cmV0dXJuIGdyZWF0ZXJUaGFuKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgR3RDb25kaXRpb25hbEV4cHJlc3Npb24pLiRHdFswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgR3RDb25kaXRpb25hbEV4cHJlc3Npb24pLiRHdFsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEdlXCIpKSB7XG5cdFx0cmV0dXJuIGdyZWF0ZXJPckVxdWFsKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgR2VDb25kaXRpb25hbEV4cHJlc3Npb24pLiRHZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgR2VDb25kaXRpb25hbEV4cHJlc3Npb24pLiRHZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEx0XCIpKSB7XG5cdFx0cmV0dXJuIGxlc3NUaGFuKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTHRDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMdFswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTHRDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMdFsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJExlXCIpKSB7XG5cdFx0cmV0dXJuIGxlc3NPckVxdWFsKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTGVDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTGVDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRyZXR1cm4gcGF0aEluTW9kZWwoKGFubm90YXRpb25WYWx1ZSBhcyBQYXRoQ29uZGl0aW9uRXhwcmVzc2lvbjxUPikuJFBhdGgsIHVuZGVmaW5lZCwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRBcHBseVwiKSkge1xuXHRcdHJldHVybiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IFwiQXBwbHlcIixcblx0XHRcdFx0JEZ1bmN0aW9uOiAoYW5ub3RhdGlvblZhbHVlIGFzIHsgJEZ1bmN0aW9uPzogc3RyaW5nIH0pLiRGdW5jdGlvbixcblx0XHRcdFx0JEFwcGx5OiAoYW5ub3RhdGlvblZhbHVlIGFzIHsgJEFwcGx5PzogdW5rbm93biB9KS4kQXBwbHlcblx0XHRcdH0gYXMgQXBwbHlBbm5vdGF0aW9uRXhwcmVzc2lvbjxUPixcblx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRwYXRoVmlzaXRvclxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRJZlwiKSkge1xuXHRcdHJldHVybiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IFwiSWZcIixcblx0XHRcdFx0JElmOiAoYW5ub3RhdGlvblZhbHVlIGFzIHsgJElmPzogdW5rbm93biB9KS4kSWZcblx0XHRcdH0gYXMgSWZBbm5vdGF0aW9uRXhwcmVzc2lvbjxUPixcblx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRwYXRoVmlzaXRvclxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRFbnVtTWVtYmVyXCIpKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHJlc29sdmVFbnVtVmFsdWUoKGFubm90YXRpb25WYWx1ZSBhcyB7ICRFbnVtTWVtYmVyPzogc3RyaW5nIH0pLiRFbnVtTWVtYmVyKSBhcyBUKTtcblx0fVxuXHRyZXR1cm4gY29uc3RhbnQoZmFsc2UgYXMgVCk7XG59XG5cbi8qKlxuICogUHJvY2VzcyB0aGUge0lmQW5ub3RhdGlvbkV4cHJlc3Npb25WYWx1ZX0gaW50byBhbiBleHByZXNzaW9uLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gYW5ub3RhdGlvblZhbHVlIEFuIElmIGV4cHJlc3Npb24gcmV0dXJuaW5nIHRoZSB0eXBlIFRcbiAqIEBwYXJhbSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzIFRoZSBwYXRoIGZyb20gdGhlIHJvb3QgZW50aXR5IHNldFxuICogQHBhcmFtIHBhdGhWaXNpdG9yIEEgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSByZXN1bHRpbmcgcGF0aFxuICogQHJldHVybnMgVGhlIGVxdWl2YWxlbnQgaWZFbHNlIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFubm90YXRpb25JZkV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRhbm5vdGF0aW9uVmFsdWU6IElmQW5ub3RhdGlvbkV4cHJlc3Npb25WYWx1ZTxUPixcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRoczogc3RyaW5nW10gPSBbXSxcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0cmV0dXJuIGlmRWxzZShcblx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZVsxXSBhcyBDb25kaXRpb25hbENoZWNrT3JWYWx1ZSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWVbMl0gYXMgQ29uZGl0aW9uYWxDaGVja09yVmFsdWUsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHQpO1xufVxuLy8gVGhpcyB0eXBlIGlzIG5vdCByZWN1cnNpdmVseSB0cmFuc2Zvcm1lZCBmcm9tIHRoZSBtZXRhbW9kZWwgY29udGVudCwgYXMgc3VjaCB3ZSBoYXZlIHNvbWUgdWdseSB0aGluZ3MgdGhlcmVcbnR5cGUgU3ViQXBwbHlFeHByZXNzaW9uRnJvbU1ldGFtb2RlbCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuZnVuY3Rpb24gY29udmVydFN1YkFwcGx5UGFyYW1ldGVycyhhcHBseVBhcmFtOiBTdWJBcHBseUV4cHJlc3Npb25Gcm9tTWV0YW1vZGVsKTogU3ViQXBwbHlFeHByZXNzaW9uRnJvbU1ldGFtb2RlbCB8IFByaW1pdGl2ZVR5cGUge1xuXHRsZXQgYXBwbHlQYXJhbUNvbnZlcnRlZCA9IGFwcGx5UGFyYW07XG5cdGlmIChhcHBseVBhcmFtLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRhcHBseVBhcmFtQ29udmVydGVkID0ge1xuXHRcdFx0dHlwZTogXCJQYXRoXCIsXG5cdFx0XHRwYXRoOiBhcHBseVBhcmFtLiRQYXRoXG5cdFx0fSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPjtcblx0fSBlbHNlIGlmIChhcHBseVBhcmFtLmhhc093blByb3BlcnR5KFwiJElmXCIpKSB7XG5cdFx0YXBwbHlQYXJhbUNvbnZlcnRlZCA9IHtcblx0XHRcdHR5cGU6IFwiSWZcIixcblx0XHRcdCRJZjogYXBwbHlQYXJhbS4kSWZcblx0XHR9IGFzIElmQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPjtcblx0fSBlbHNlIGlmIChhcHBseVBhcmFtLmhhc093blByb3BlcnR5KFwiJEFwcGx5XCIpKSB7XG5cdFx0YXBwbHlQYXJhbUNvbnZlcnRlZCA9IHtcblx0XHRcdHR5cGU6IFwiQXBwbHlcIixcblx0XHRcdCRGdW5jdGlvbjogYXBwbHlQYXJhbS4kRnVuY3Rpb24sXG5cdFx0XHQkQXBwbHk6IGFwcGx5UGFyYW0uJEFwcGx5XG5cdFx0fSBhcyBBcHBseUFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz47XG5cdH1cblx0cmV0dXJuIGFwcGx5UGFyYW1Db252ZXJ0ZWQ7XG59XG5cbnR5cGUgT0RhdGFGdW5jdGlvbiA9IFwib2RhdGEuY29uY2F0XCIgfCBcIm9kYXRhLmZpbGxVcmlUZW1wbGF0ZVwiIHwgXCJvZGF0YS51cmlFbmNvZGVcIjtcbmV4cG9ydCBmdW5jdGlvbiBhbm5vdGF0aW9uQXBwbHlFeHByZXNzaW9uKFxuXHRhcHBseUV4cHJlc3Npb246IEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPixcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRoczogc3RyaW5nW10gPSBbXSxcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRzd2l0Y2ggKGFwcGx5RXhwcmVzc2lvbi4kRnVuY3Rpb24gYXMgT0RhdGFGdW5jdGlvbikge1xuXHRcdGNhc2UgXCJvZGF0YS5jb25jYXRcIjpcblx0XHRcdHJldHVybiBjb25jYXQoXG5cdFx0XHRcdC4uLmFwcGx5RXhwcmVzc2lvbi4kQXBwbHkubWFwKChhcHBseVBhcmFtKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdGNvbnZlcnRTdWJBcHBseVBhcmFtZXRlcnMoYXBwbHlQYXJhbSkgYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8c3RyaW5nPixcblx0XHRcdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRwYXRoVmlzaXRvclxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdGNhc2UgXCJvZGF0YS51cmlFbmNvZGVcIjpcblx0XHRcdGNvbnN0IHBhcmFtZXRlciA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0Y29udmVydFN1YkFwcGx5UGFyYW1ldGVycyhcblx0XHRcdFx0XHRhcHBseUV4cHJlc3Npb24uJEFwcGx5WzBdIGFzIHVua25vd24gYXMgU3ViQXBwbHlFeHByZXNzaW9uRnJvbU1ldGFtb2RlbFxuXHRcdFx0XHQpIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4sXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0cGF0aFZpc2l0b3Jcblx0XHRcdCk7XG5cdFx0XHQvLyBUaGUgc2Vjb25kIHBhcmFtZXRlciBmb3IgdXJpRW5jb2RlIGlzIGFsd2F5cyBhIHN0cmluZyBzaW5jZSB0aGUgdGFyZ2V0IGV2YWx1YXRpb24gaXMgYWdhaW5zdCBhIGZvcm1hdFZhbHVlIGNhbGwgaW4gT0RhdGFVdGlscyB3aGljaCBleHBlY3QgdGhlIHRhcmdldCB0eXBlIGFzIHNlY29uZCBwYXJhbWV0ZXJcblx0XHRcdHJldHVybiBmbihcIm9kYXRhLnVyaUVuY29kZVwiLCBbcGFyYW1ldGVyLCBcIkVkbS5TdHJpbmdcIl0sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdFx0Y2FzZSBcIm9kYXRhLmZpbGxVcmlUZW1wbGF0ZVwiOlxuXHRcdFx0Y29uc3QgdGVtcGxhdGUgPSBhcHBseUV4cHJlc3Npb24uJEFwcGx5WzBdO1xuXHRcdFx0Y29uc3QgdGVtcGxhdGVQYXJhbXMgPSBhcHBseUV4cHJlc3Npb24uJEFwcGx5LnNsaWNlKDEpIGFzIHVua25vd24gYXMgU3ViQXBwbHlFeHByZXNzaW9uRnJvbU1ldGFtb2RlbFtdO1xuXHRcdFx0Y29uc3QgdGFyZ2V0T2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4+ID0ge307XG5cdFx0XHR0ZW1wbGF0ZVBhcmFtcy5mb3JFYWNoKChhcHBseVBhcmFtKSA9PiB7XG5cdFx0XHRcdHRhcmdldE9iamVjdFthcHBseVBhcmFtLiROYW1lIGFzIHN0cmluZ10gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdFx0Y29udmVydFN1YkFwcGx5UGFyYW1ldGVycyhcblx0XHRcdFx0XHRcdGFwcGx5UGFyYW0uJExhYmVsZWRFbGVtZW50IGFzIFN1YkFwcGx5RXhwcmVzc2lvbkZyb21NZXRhbW9kZWxcblx0XHRcdFx0XHQpIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4sXG5cdFx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0cGF0aFZpc2l0b3Jcblx0XHRcdFx0KTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGZuKFwib2RhdGEuZmlsbFVyaVRlbXBsYXRlXCIsIFt0ZW1wbGF0ZSwgdGFyZ2V0T2JqZWN0XSwgdW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcbn1cblxuLyoqXG4gKiBHZW5lcmljIGhlbHBlciBmb3IgdGhlIGNvbXBhcmlzb24gb3BlcmF0aW9ucyAoZXF1YWwsIG5vdEVxdWFsLCAuLi4pLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gb3BlcmF0b3IgVGhlIG9wZXJhdG9yIHRvIGFwcGx5XG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgb3BlcmF0b3JcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIG9wZXJhdG9yXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5mdW5jdGlvbiBjb21wYXJpc29uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0b3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGxlZnRFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShsZWZ0T3BlcmFuZCk7XG5cdGNvbnN0IHJpZ2h0RXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUocmlnaHRPcGVyYW5kKTtcblx0aWYgKGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24obGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoaXNDb25zdGFudChsZWZ0RXhwcmVzc2lvbikgJiYgaXNDb25zdGFudChyaWdodEV4cHJlc3Npb24pKSB7XG5cdFx0c3dpdGNoIChvcGVyYXRvcikge1xuXHRcdFx0Y2FzZSBcIiE9PVwiOlxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgIT09IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiPT09XCI6XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHRcdGNhc2UgXCI8XCI6XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA8IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiPD1cIjpcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlIDw9IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiPlwiOlxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgPiByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXHRcdFx0Y2FzZSBcIj49XCI6XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA+PSByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0X3R5cGU6IFwiQ29tcGFyaXNvblwiLFxuXHRcdFx0b3BlcmF0b3I6IG9wZXJhdG9yLFxuXHRcdFx0b3BlcmFuZDE6IGxlZnRFeHByZXNzaW9uLFxuXHRcdFx0b3BlcmFuZDI6IHJpZ2h0RXhwcmVzc2lvblxuXHRcdH07XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmljIGhlbHBlciBmb3IgdGhlIGxlbmd0aCBvZiBhbiBleHByZXNzaW9uLlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGlucHV0IGV4cHJlc3Npb24gcG9pbnRpbmcgdG8gYW4gYXJyYXlcbiAqIEBwYXJhbSBjaGVja1VuZGVmaW5lZCBJcyB0aGUgYXJyYXkgcG90ZW50aWFsbHkgdW5kZWZpbmVkXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgbGVuZ3RoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsZW5ndGgoXG5cdGV4cHJlc3Npb246IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjx1bmtub3duPiB8IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uLFxuXHRjaGVja1VuZGVmaW5lZCA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248bnVtYmVyPiB7XG5cdGlmIChleHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiKSB7XG5cdFx0cmV0dXJuIGV4cHJlc3Npb247XG5cdH1cblx0aWYgKCFjaGVja1VuZGVmaW5lZCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRfdHlwZTogXCJMZW5ndGhcIixcblx0XHRcdHBhdGhJbk1vZGVsOiBleHByZXNzaW9uXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gaWZFbHNlKGVxdWFsKGV4cHJlc3Npb24sIHVuZGVmaW5lZCksIC0xLCBsZW5ndGgoZXhwcmVzc2lvbikpO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwiZXF1YWxcIiAoPT09KS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBsZWZ0RXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUobGVmdE9wZXJhbmQpO1xuXHRjb25zdCByaWdodEV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKHJpZ2h0T3BlcmFuZCk7XG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKGxlZnRFeHByZXNzaW9uLCByaWdodEV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdH1cblxuXHRmdW5jdGlvbiByZWR1Y2UobGVmdDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LCByaWdodDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAobGVmdC5fdHlwZSA9PT0gXCJDb21wYXJpc29uXCIgJiYgaXNUcnVlKHJpZ2h0KSkge1xuXHRcdFx0Ly8gY29tcGFyZShhLCBiKSA9PT0gdHJ1ZSB+fj4gY29tcGFyZShhLCBiKVxuXHRcdFx0cmV0dXJuIGxlZnQ7XG5cdFx0fSBlbHNlIGlmIChsZWZ0Ll90eXBlID09PSBcIkNvbXBhcmlzb25cIiAmJiBpc0ZhbHNlKHJpZ2h0KSkge1xuXHRcdFx0Ly8gY29tcGFyZShhLCBiKSA9PT0gZmFsc2Ugfn4+ICFjb21wYXJlKGEsIGIpXG5cdFx0XHRyZXR1cm4gbm90KGxlZnQpO1xuXHRcdH0gZWxzZSBpZiAobGVmdC5fdHlwZSA9PT0gXCJJZkVsc2VcIiAmJiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGxlZnQub25UcnVlLCByaWdodCkpIHtcblx0XHRcdC8vIChpZiAoeCkgeyBhIH0gZWxzZSB7IGIgfSkgPT09IGEgfn4+IHggfHwgKGIgPT09IGEpXG5cdFx0XHRyZXR1cm4gb3IobGVmdC5jb25kaXRpb24sIGVxdWFsKGxlZnQub25GYWxzZSwgcmlnaHQpKTtcblx0XHR9IGVsc2UgaWYgKGxlZnQuX3R5cGUgPT09IFwiSWZFbHNlXCIgJiYgX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChsZWZ0Lm9uRmFsc2UsIHJpZ2h0KSkge1xuXHRcdFx0Ly8gKGlmICh4KSB7IGEgfSBlbHNlIHsgYiB9KSA9PT0gYiB+fj4gIXggfHwgKGEgPT09IGIpXG5cdFx0XHRyZXR1cm4gb3Iobm90KGxlZnQuY29uZGl0aW9uKSwgZXF1YWwobGVmdC5vblRydWUsIHJpZ2h0KSk7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdGxlZnQuX3R5cGUgPT09IFwiSWZFbHNlXCIgJiZcblx0XHRcdGlzQ29uc3RhbnQobGVmdC5vblRydWUpICYmXG5cdFx0XHRpc0NvbnN0YW50KGxlZnQub25GYWxzZSkgJiZcblx0XHRcdGlzQ29uc3RhbnQocmlnaHQpICYmXG5cdFx0XHQhX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChsZWZ0Lm9uVHJ1ZSwgcmlnaHQpICYmXG5cdFx0XHQhX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChsZWZ0Lm9uRmFsc2UsIHJpZ2h0KVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIGV4cGxvaXQgc3ltbWV0cnk6IGEgPT09IGIgPH4+IGIgPT09IGFcblx0Y29uc3QgcmVkdWNlZCA9IHJlZHVjZShsZWZ0RXhwcmVzc2lvbiwgcmlnaHRFeHByZXNzaW9uKSA/PyByZWR1Y2UocmlnaHRFeHByZXNzaW9uLCBsZWZ0RXhwcmVzc2lvbik7XG5cdHJldHVybiByZWR1Y2VkID8/IGNvbXBhcmlzb24oXCI9PT1cIiwgbGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbik7XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJub3QgZXF1YWxcIiAoIT09KS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3RFcXVhbDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gbm90KGVxdWFsKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcImdyZWF0ZXIgb3IgZXF1YWxcIiAoPj0pLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyZWF0ZXJPckVxdWFsPFQgZXh0ZW5kcyBEZWZpbmVkUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY29tcGFyaXNvbihcIj49XCIsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwiZ3JlYXRlciB0aGFuXCIgKD4pLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyZWF0ZXJUaGFuPFQgZXh0ZW5kcyBEZWZpbmVkUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY29tcGFyaXNvbihcIj5cIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJsZXNzIG9yIGVxdWFsXCIgKDw9KS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsZXNzT3JFcXVhbDxUIGV4dGVuZHMgRGVmaW5lZFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGNvbXBhcmlzb24oXCI8PVwiLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcImxlc3MgdGhhblwiICg8KS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsZXNzVGhhbjxUIGV4dGVuZHMgRGVmaW5lZFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGNvbXBhcmlzb24oXCI8XCIsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpO1xufVxuXG4vKipcbiAqIElmLXRoZW4tZWxzZSBleHByZXNzaW9uLlxuICpcbiAqIEV2YWx1YXRlcyB0byBvblRydWUgaWYgdGhlIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gdHJ1ZSwgZWxzZSBldmFsdWF0ZXMgdG8gb25GYWxzZS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGNvbmRpdGlvbiBUaGUgY29uZGl0aW9uIHRvIGV2YWx1YXRlXG4gKiBAcGFyYW0gb25UcnVlIEV4cHJlc3Npb24gcmVzdWx0IGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWVcbiAqIEBwYXJhbSBvbkZhbHNlIEV4cHJlc3Npb24gcmVzdWx0IGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIGZhbHNlXG4gKiBAcmV0dXJucyBUaGUgZXhwcmVzc2lvbiB0aGF0IHJlcHJlc2VudHMgdGhpcyBjb25kaXRpb25hbCBjaGVja1xuICovXG5leHBvcnQgZnVuY3Rpb24gaWZFbHNlPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0Y29uZGl0aW9uOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4sXG5cdG9uVHJ1ZTogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRvbkZhbHNlOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdGxldCBjb25kaXRpb25FeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShjb25kaXRpb24pO1xuXHRsZXQgb25UcnVlRXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUob25UcnVlKTtcblx0bGV0IG9uRmFsc2VFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShvbkZhbHNlKTtcblxuXHQvLyBzd2FwIGJyYW5jaGVzIGlmIHRoZSBjb25kaXRpb24gaXMgYSBuZWdhdGlvblxuXHRpZiAoY29uZGl0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJOb3RcIikge1xuXHRcdC8vIGlmRWxzZShub3QoWCksIGEsIGIpIC0tPiBpZkVsc2UoWCwgYiwgYSlcblx0XHRbb25UcnVlRXhwcmVzc2lvbiwgb25GYWxzZUV4cHJlc3Npb25dID0gW29uRmFsc2VFeHByZXNzaW9uLCBvblRydWVFeHByZXNzaW9uXTtcblx0XHRjb25kaXRpb25FeHByZXNzaW9uID0gbm90KGNvbmRpdGlvbkV4cHJlc3Npb24pO1xuXHR9XG5cblx0Ly8gaW5saW5lIG5lc3RlZCBpZi1lbHNlIGV4cHJlc3Npb25zOiBvblRydWUgYnJhbmNoXG5cdC8vIGlmRWxzZShYLCBpZkVsc2UoWCwgYSwgYiksIGMpID09PiBpZkVsc2UoWCwgYSwgYylcblx0aWYgKG9uVHJ1ZUV4cHJlc3Npb24uX3R5cGUgPT09IFwiSWZFbHNlXCIgJiYgX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChjb25kaXRpb25FeHByZXNzaW9uLCBvblRydWVFeHByZXNzaW9uLmNvbmRpdGlvbikpIHtcblx0XHRvblRydWVFeHByZXNzaW9uID0gb25UcnVlRXhwcmVzc2lvbi5vblRydWU7XG5cdH1cblxuXHQvLyBpbmxpbmUgbmVzdGVkIGlmLWVsc2UgZXhwcmVzc2lvbnM6IG9uRmFsc2UgYnJhbmNoXG5cdC8vIGlmRWxzZShYLCBhLCBpZkVsc2UoWCwgYiwgYykpID09PiBpZkVsc2UoWCwgYSwgYylcblx0aWYgKG9uRmFsc2VFeHByZXNzaW9uLl90eXBlID09PSBcIklmRWxzZVwiICYmIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoY29uZGl0aW9uRXhwcmVzc2lvbiwgb25GYWxzZUV4cHJlc3Npb24uY29uZGl0aW9uKSkge1xuXHRcdG9uRmFsc2VFeHByZXNzaW9uID0gb25GYWxzZUV4cHJlc3Npb24ub25GYWxzZTtcblx0fVxuXG5cdC8vIChpZiB0cnVlIHRoZW4gYSBlbHNlIGIpICB+fj4gYVxuXHQvLyAoaWYgZmFsc2UgdGhlbiBhIGVsc2UgYikgfn4+IGJcblx0aWYgKGlzQ29uc3RhbnQoY29uZGl0aW9uRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gY29uZGl0aW9uRXhwcmVzc2lvbi52YWx1ZSA/IG9uVHJ1ZUV4cHJlc3Npb24gOiBvbkZhbHNlRXhwcmVzc2lvbjtcblx0fVxuXG5cdC8vIGlmIChpc0NvbnN0YW50Qm9vbGVhbihvblRydWVFeHByZXNzaW9uKSB8fCBpc0NvbnN0YW50Qm9vbGVhbihvbkZhbHNlRXhwcmVzc2lvbikpIHtcblx0Ly8gXHRyZXR1cm4gb3IoYW5kKGNvbmRpdGlvbiwgb25UcnVlRXhwcmVzc2lvbiBhcyBFeHByZXNzaW9uPGJvb2xlYW4+KSwgYW5kKG5vdChjb25kaXRpb24pLCBvbkZhbHNlRXhwcmVzc2lvbiBhcyBFeHByZXNzaW9uPGJvb2xlYW4+KSkgYXMgRXhwcmVzc2lvbjxUPlxuXHQvLyB9XG5cblx0Ly8gKGlmIFggdGhlbiBhIGVsc2UgYSkgfn4+IGFcblx0aWYgKF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwob25UcnVlRXhwcmVzc2lvbiwgb25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIG9uVHJ1ZUV4cHJlc3Npb247XG5cdH1cblxuXHQvLyBpZiBYIHRoZW4gYSBlbHNlIGZhbHNlIH5+PiBYICYmIGFcblx0aWYgKGlzRmFsc2Uob25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGFuZChjb25kaXRpb25FeHByZXNzaW9uLCBvblRydWVFeHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9XG5cblx0Ly8gaWYgWCB0aGVuIGEgZWxzZSB0cnVlIH5+PiAhWCB8fCBhXG5cdGlmIChpc1RydWUob25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIG9yKG5vdChjb25kaXRpb25FeHByZXNzaW9uKSwgb25UcnVlRXhwcmVzc2lvbiBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fVxuXG5cdC8vIGlmIFggdGhlbiBmYWxzZSBlbHNlIGEgfn4+ICFYICYmIGFcblx0aWYgKGlzRmFsc2Uob25UcnVlRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gYW5kKG5vdChjb25kaXRpb25FeHByZXNzaW9uKSwgb25GYWxzZUV4cHJlc3Npb24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH1cblxuXHQvLyBpZiBYIHRoZW4gdHJ1ZSBlbHNlIGEgfn4+IFggfHwgYVxuXHRpZiAoaXNUcnVlKG9uVHJ1ZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIG9yKGNvbmRpdGlvbkV4cHJlc3Npb24sIG9uRmFsc2VFeHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9XG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKGNvbmRpdGlvbkV4cHJlc3Npb24sIG9uVHJ1ZUV4cHJlc3Npb24sIG9uRmFsc2VFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGlmIChpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbihjb25kaXRpb24pIHx8IGlzQ29tcGxleFR5cGVFeHByZXNzaW9uKG9uVHJ1ZSkgfHwgaXNDb21wbGV4VHlwZUV4cHJlc3Npb24ob25GYWxzZSkpIHtcblx0XHRsZXQgcGF0aElkeCA9IDA7XG5cdFx0Y29uc3QgbXlJZkVsc2VFeHByZXNzaW9uID0gZm9ybWF0UmVzdWx0KFtjb25kaXRpb24sIG9uVHJ1ZSwgb25GYWxzZV0sIFwiLl9mb3JtYXR0ZXJzLlN0YW5kYXJkRm9ybWF0dGVyI2lmRWxzZVwiKTtcblx0XHRjb25zdCBhbGxQYXJ0cyA9IFtdO1xuXHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0bXlJZkVsc2VFeHByZXNzaW9uLFxuXHRcdFx0XCJQYXRoSW5Nb2RlbFwiLFxuXHRcdFx0KGNvbnN0YW50UGF0aDogUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+KSA9PiB7XG5cdFx0XHRcdGFsbFBhcnRzLnB1c2goY29uc3RhbnRQYXRoKTtcblx0XHRcdFx0cmV0dXJuIHBhdGhJbk1vZGVsKGAkJHtwYXRoSWR4Kyt9YCwgXCIkXCIpO1xuXHRcdFx0fSxcblx0XHRcdHRydWVcblx0XHQpO1xuXHRcdGFsbFBhcnRzLnVuc2hpZnQoY29uc3RhbnQoSlNPTi5zdHJpbmdpZnkobXlJZkVsc2VFeHByZXNzaW9uKSkpO1xuXHRcdHJldHVybiBmb3JtYXRSZXN1bHQoYWxsUGFydHMsIFwiLl9mb3JtYXR0ZXJzLlN0YW5kYXJkRm9ybWF0dGVyLmJpbmQoJGNvbnRyb2wpI2V2YWx1YXRlQ29tcGxleEV4cHJlc3Npb25cIiwgdW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIklmRWxzZVwiLFxuXHRcdGNvbmRpdGlvbjogY29uZGl0aW9uRXhwcmVzc2lvbixcblx0XHRvblRydWU6IG9uVHJ1ZUV4cHJlc3Npb24sXG5cdFx0b25GYWxzZTogb25GYWxzZUV4cHJlc3Npb25cblx0fTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBleHByZXNzaW9uIGhhcyBhIHJlZmVyZW5jZSB0byB0aGUgZGVmYXVsdCBtb2RlbCAodW5kZWZpbmVkKS5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHRvIGV2YWx1YXRlXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlcmUgaXMgYSByZWZlcmVuY2UgdG8gdGhlIGRlZmF1bHQgY29udGV4dFxuICovXG5mdW5jdGlvbiBoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPik6IGJvb2xlYW4ge1xuXHRzd2l0Y2ggKGV4cHJlc3Npb24uX3R5cGUpIHtcblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRjYXNlIFwiRm9ybWF0dGVyXCI6XG5cdFx0Y2FzZSBcIkNvbXBsZXhUeXBlXCI6XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0Y2FzZSBcIlNldFwiOlxuXHRcdFx0cmV0dXJuIGV4cHJlc3Npb24ub3BlcmFuZHMuc29tZShoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KTtcblx0XHRjYXNlIFwiUGF0aEluTW9kZWxcIjpcblx0XHRcdHJldHVybiBleHByZXNzaW9uLm1vZGVsTmFtZSA9PT0gdW5kZWZpbmVkO1xuXHRcdGNhc2UgXCJDb21wYXJpc29uXCI6XG5cdFx0XHRyZXR1cm4gaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dChleHByZXNzaW9uLm9wZXJhbmQxKSB8fCBoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24ub3BlcmFuZDIpO1xuXHRcdGNhc2UgXCJJZkVsc2VcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5jb25kaXRpb24pIHx8XG5cdFx0XHRcdGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5vblRydWUpIHx8XG5cdFx0XHRcdGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5vbkZhbHNlKVxuXHRcdFx0KTtcblx0XHRjYXNlIFwiTm90XCI6XG5cdFx0Y2FzZSBcIlRydXRoeVwiOlxuXHRcdFx0cmV0dXJuIGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5vcGVyYW5kKTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbi8vIFRoaXMgaXMgb25lIGNhc2Ugd2hlcmUgYW55IGRvZXMgbWFrZSBzZW5zZS4uLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEZuPFQ+ID0gKCguLi5wYXJhbXM6IGFueSkgPT4gVCB8IFByb21pc2U8VD4pICYge1xuXHRfX2Z1bmN0aW9uTmFtZTogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiBXcmFwcGVkVHVwbGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLWlnbm9yZVxudHlwZSBXcmFwcGVkVHVwbGU8VD4gPSB7IFtLIGluIGtleW9mIFRdOiBXcmFwcGVkVHVwbGU8VFtLXT4gfCBFeHByZXNzaW9uT3JQcmltaXRpdmU8VFtLXT4gfCB1bmRlZmluZWQgfTtcblxuLy8gU28sIHRoaXMgd29ya3MgYnV0IEkgY2Fubm90IGdldCBpdCB0byBjb21waWxlIDpELCBidXQgaXQgc3RpbGwgZG9lcyB3aGF0IGlzIGV4cGVjdGVkLi4uXG5cbi8qKlxuICogQSBmdW5jdGlvbiByZWZlcmVuY2Ugb3IgYSBmdW5jdGlvbiBuYW1lLlxuICovXG50eXBlIEZ1bmN0aW9uT3JOYW1lPFQ+ID0gRm48VD4gfCBzdHJpbmc7XG5cbi8qKlxuICogRnVuY3Rpb24gcGFyYW1ldGVycywgZWl0aGVyIGRlcml2ZWQgZnJvbSB0aGUgZnVuY3Rpb24gb3IgYW4gdW50eXBlZCBhcnJheS5cbiAqL1xudHlwZSBGdW5jdGlvblBhcmFtZXRlcnM8VCwgRiBleHRlbmRzIEZ1bmN0aW9uT3JOYW1lPFQ+PiA9IEYgZXh0ZW5kcyBGbjxUPiA/IFBhcmFtZXRlcnM8Rj4gOiB1bmtub3duW107XG5cbi8qKlxuICogQ2FsbHMgYSBmb3JtYXR0ZXIgZnVuY3Rpb24gdG8gcHJvY2VzcyB0aGUgcGFyYW1ldGVycy5cbiAqIElmIHJlcXVpcmVDb250ZXh0IGlzIHNldCB0byB0cnVlIGFuZCBubyBjb250ZXh0IGlzIHBhc3NlZCBhIGRlZmF1bHQgY29udGV4dCB3aWxsIGJlIGFkZGVkIGF1dG9tYXRpY2FsbHkuXG4gKiBAdGVtcGxhdGUgVFxuICogQHRlbXBsYXRlIFVcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIFRoZSBsaXN0IG9mIHBhcmFtZXRlciB0aGF0IHNob3VsZCBtYXRjaCB0aGUgdHlwZSBhbmQgbnVtYmVyIG9mIHRoZSBmb3JtYXR0ZXIgZnVuY3Rpb25cbiAqIEBwYXJhbSBmb3JtYXR0ZXJGdW5jdGlvbiBUaGUgZnVuY3Rpb24gdG8gY2FsbFxuICogQHBhcmFtIFtjb250ZXh0RW50aXR5VHlwZV0gSWYgbm8gcGFyYW1ldGVyIHJlZmVycyB0byB0aGUgY29udGV4dCB0aGVuIHdlIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIGFkZCBhIHJlZmVyZW5jZSB0byB0aGUga2V5cyBmcm9tIHRoZSBlbnRpdHkgdHlwZS5cbiAqIEBwYXJhbSBbaWdub3JlQ29tcGxleFR5cGVdIFdoZXRoZXIgdG8gaWdub3JlIHRoZSB0cmFuc2dmb3JtYXRpb24gdG8gdGhlIFN0YW5kYXJkRm9ybWF0dGVyIG9yIG5vdFxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UmVzdWx0PFQsIFUgZXh0ZW5kcyBGbjxUPj4oXG5cdHBhcmFtZXRlcnM6IFdyYXBwZWRUdXBsZTxQYXJhbWV0ZXJzPFU+Pixcblx0Zm9ybWF0dGVyRnVuY3Rpb246IFUgfCBzdHJpbmcsXG5cdGNvbnRleHRFbnRpdHlUeXBlPzogRW50aXR5VHlwZSxcblx0aWdub3JlQ29tcGxleFR5cGUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0Y29uc3QgcGFyYW1ldGVyRXhwcmVzc2lvbnMgPSAocGFyYW1ldGVycyBhcyBFeHByZXNzaW9uT3JQcmltaXRpdmU8UHJpbWl0aXZlVHlwZT5bXSkubWFwKHdyYXBQcmltaXRpdmUpO1xuXG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKC4uLnBhcmFtZXRlckV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGlmIChjb250ZXh0RW50aXR5VHlwZSkge1xuXHRcdC8vIE90aGVyd2lzZSwgaWYgdGhlIGNvbnRleHQgaXMgcmVxdWlyZWQgYW5kIG5vIGNvbnRleHQgaXMgcHJvdmlkZWQgbWFrZSBzdXJlIHRvIGFkZCB0aGUgZGVmYXVsdCBiaW5kaW5nXG5cdFx0aWYgKCFwYXJhbWV0ZXJFeHByZXNzaW9ucy5zb21lKGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQpKSB7XG5cdFx0XHRjb250ZXh0RW50aXR5VHlwZS5rZXlzLmZvckVhY2goKGtleSkgPT4gcGFyYW1ldGVyRXhwcmVzc2lvbnMucHVzaChwYXRoSW5Nb2RlbChrZXkubmFtZSwgXCJcIikpKTtcblx0XHR9XG5cdH1cblx0bGV0IGZ1bmN0aW9uTmFtZSA9IFwiXCI7XG5cdGlmICh0eXBlb2YgZm9ybWF0dGVyRnVuY3Rpb24gPT09IFwic3RyaW5nXCIpIHtcblx0XHRmdW5jdGlvbk5hbWUgPSBmb3JtYXR0ZXJGdW5jdGlvbjtcblx0fSBlbHNlIHtcblx0XHRmdW5jdGlvbk5hbWUgPSBmb3JtYXR0ZXJGdW5jdGlvbi5fX2Z1bmN0aW9uTmFtZTtcblx0fVxuXHQvLyBGb3JtYXR0ZXJOYW1lIGNhbiBiZSBvZiBmb3JtYXQgc2FwLmZlLmNvcmUueHh4I21ldGhvZE5hbWUgdG8gaGF2ZSBtdWx0aXBsZSBmb3JtYXR0ZXIgaW4gb25lIGNsYXNzXG5cdGNvbnN0IFtmb3JtYXR0ZXJDbGFzcywgZm9ybWF0dGVyTmFtZV0gPSBmdW5jdGlvbk5hbWUuc3BsaXQoXCIjXCIpO1xuXG5cdC8vIEluIHNvbWUgY2FzZSB3ZSBhbHNvIGNhbm5vdCBjYWxsIGRpcmVjdGx5IGEgZnVuY3Rpb24gYmVjYXVzZSBvZiB0b28gY29tcGxleCBpbnB1dCwgaW4gdGhhdCBjYXNlIHdlIG5lZWQgdG8gY29udmVydCB0byBhIHNpbXBsZXIgZnVuY3Rpb24gY2FsbFxuXHRpZiAoXG5cdFx0IWlnbm9yZUNvbXBsZXhUeXBlICYmXG5cdFx0KHBhcmFtZXRlckV4cHJlc3Npb25zLnNvbWUoaXNDb21wbGV4VHlwZUV4cHJlc3Npb24pIHx8XG5cdFx0XHRwYXJhbWV0ZXJFeHByZXNzaW9ucy5zb21lKGlzQ29uY2F0RXhwcmVzc2lvbikgfHxcblx0XHRcdHBhcmFtZXRlckV4cHJlc3Npb25zLnNvbWUoaXNJZkVsc2VFeHByZXNzaW9uKSlcblx0KSB7XG5cdFx0bGV0IHBhdGhJZHggPSAwO1xuXHRcdGNvbnN0IG15Rm9ybWF0RXhwcmVzc2lvbiA9IGZvcm1hdFJlc3VsdChwYXJhbWV0ZXJFeHByZXNzaW9ucywgZnVuY3Rpb25OYW1lLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdGNvbnN0IGFsbFBhcnRzID0gW107XG5cdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRteUZvcm1hdEV4cHJlc3Npb24sXG5cdFx0XHRcIlBhdGhJbk1vZGVsXCIsXG5cdFx0XHQoY29uc3RhbnRQYXRoOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj4pID0+IHtcblx0XHRcdFx0YWxsUGFydHMucHVzaChjb25zdGFudFBhdGgpO1xuXHRcdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoYCQke3BhdGhJZHgrK31gLCBcIiRcIik7XG5cdFx0XHR9LFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdFx0YWxsUGFydHMudW5zaGlmdChjb25zdGFudChKU09OLnN0cmluZ2lmeShteUZvcm1hdEV4cHJlc3Npb24pKSk7XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChhbGxQYXJ0cywgXCIuX2Zvcm1hdHRlcnMuU3RhbmRhcmRGb3JtYXR0ZXIuYmluZCgkY29udHJvbCkjZXZhbHVhdGVDb21wbGV4RXhwcmVzc2lvblwiLCB1bmRlZmluZWQsIHRydWUpO1xuXHR9IGVsc2UgaWYgKCEhZm9ybWF0dGVyTmFtZSAmJiBmb3JtYXR0ZXJOYW1lLmxlbmd0aCA+IDApIHtcblx0XHRwYXJhbWV0ZXJFeHByZXNzaW9ucy51bnNoaWZ0KGNvbnN0YW50KGZvcm1hdHRlck5hbWUpKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiRm9ybWF0dGVyXCIsXG5cdFx0Zm46IGZvcm1hdHRlckNsYXNzLFxuXHRcdHBhcmFtZXRlcnM6IHBhcmFtZXRlckV4cHJlc3Npb25zXG5cdH07XG59XG5cbnR5cGUgQmluZGluZ0NvbnN0cmFpbnRzID0ge1xuXHRzY2FsZT86IG51bWJlcjtcblx0cHJlY2lzaW9uPzogbnVtYmVyO1xuXHRtYXhMZW5ndGg/OiBudW1iZXI7XG5cdG51bGxhYmxlPzogYm9vbGVhbjtcblx0bWluaW11bT86IHN0cmluZztcblx0bWF4aW11bT86IHN0cmluZztcblx0aXNEaWdpdFNlcXVlbmNlPzogYm9vbGVhbjtcblx0VjQ/OiBib29sZWFuO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBzZXRVcENvbnN0cmFpbnRzKHRhcmdldE1hcHBpbmc6IFR5cGVNYXBwaW5nRGVmaW5pdGlvbiwgcHJvcGVydHk6IFByb3BlcnR5IHwgQWN0aW9uUGFyYW1ldGVyKTogQmluZGluZ0NvbnN0cmFpbnRzIHtcblx0Y29uc3QgY29uc3RyYWludHM6IEJpbmRpbmdDb25zdHJhaW50cyA9IHt9O1xuXHRpZiAodGFyZ2V0TWFwcGluZz8uY29uc3RyYWludHM/LiRTY2FsZSAmJiBwcm9wZXJ0eS5zY2FsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3RyYWludHMuc2NhbGUgPSBwcm9wZXJ0eS5zY2FsZTtcblx0fVxuXHRpZiAodGFyZ2V0TWFwcGluZz8uY29uc3RyYWludHM/LiRQcmVjaXNpb24gJiYgcHJvcGVydHkucHJlY2lzaW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHRjb25zdHJhaW50cy5wcmVjaXNpb24gPSBwcm9wZXJ0eS5wcmVjaXNpb247XG5cdH1cblx0aWYgKHRhcmdldE1hcHBpbmc/LmNvbnN0cmFpbnRzPy4kTWF4TGVuZ3RoICYmIHByb3BlcnR5Lm1heExlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3RyYWludHMubWF4TGVuZ3RoID0gcHJvcGVydHkubWF4TGVuZ3RoO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5udWxsYWJsZSA9PT0gZmFsc2UpIHtcblx0XHRjb25zdHJhaW50cy5udWxsYWJsZSA9IGZhbHNlO1xuXHR9XG5cdGlmICh0YXJnZXRNYXBwaW5nPy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIl0gJiYgIWlzTmFOKHByb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtKSkge1xuXHRcdGNvbnN0cmFpbnRzLm1pbmltdW0gPSBgJHtwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bX1gO1xuXHR9XG5cdGlmICh0YXJnZXRNYXBwaW5nPy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIl0gJiYgIWlzTmFOKHByb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtKSkge1xuXHRcdGNvbnN0cmFpbnRzLm1heGltdW0gPSBgJHtwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bX1gO1xuXHR9XG5cdGlmIChcblx0XHRwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0RpZ2l0U2VxdWVuY2UgJiZcblx0XHR0YXJnZXRNYXBwaW5nLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgJiZcblx0XHR0YXJnZXRNYXBwaW5nPy5jb25zdHJhaW50cz8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RpZ2l0U2VxdWVuY2VcIl1cblx0KSB7XG5cdFx0Y29uc3RyYWludHMuaXNEaWdpdFNlcXVlbmNlID0gdHJ1ZTtcblx0fVxuXHRpZiAodGFyZ2V0TWFwcGluZz8uY29uc3RyYWludHM/LiRWNCkge1xuXHRcdGNvbnN0cmFpbnRzLlY0ID0gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gY29uc3RyYWludHM7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSwgYW5kIHNldHMgdXAgdGhlIGZvcm1hdE9wdGlvbnMgYW5kIGNvbnN0cmFpbnRzLlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBQcm9wZXJ0eSBmb3Igd2hpY2ggd2UgYXJlIHNldHRpbmcgdXAgdGhlIGJpbmRpbmdcbiAqIEBwYXJhbSBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIFRoZSBCaW5kaW5nRXhwcmVzc2lvbiBvZiB0aGUgcHJvcGVydHkgYWJvdmUuIFNlcnZlcyBhcyB0aGUgYmFzaXMgdG8gd2hpY2ggaW5mb3JtYXRpb24gY2FuIGJlIGFkZGVkXG4gKiBAcGFyYW0gaWdub3JlQ29uc3RyYWludHMgSWdub3JlIGNvbnN0cmFpbnRzIG9mIHRoZSBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5IHdpdGggZm9ybWF0T3B0aW9ucyBhbmQgY29uc3RyYWludHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb248VD4oXG5cdHByb3BlcnR5OiBQcm9wZXJ0eSB8IEFjdGlvblBhcmFtZXRlcixcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdGlnbm9yZUNvbnN0cmFpbnRzID0gZmFsc2Vcbik6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPiB7XG5cdGNvbnN0IG91dEV4cHJlc3Npb246IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjx1bmtub3duPiA9IHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+O1xuXHRpZiAocHJvcGVydHkuX3R5cGUgIT09IFwiUHJvcGVydHlcIiAmJiBwcm9wZXJ0eS5fdHlwZSAhPT0gXCJBY3Rpb25QYXJhbWV0ZXJcIikge1xuXHRcdHJldHVybiBvdXRFeHByZXNzaW9uO1xuXHR9XG5cdGNvbnN0IHRhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HW3Byb3BlcnR5LnR5cGVdO1xuXHRpZiAoIXRhcmdldE1hcHBpbmcpIHtcblx0XHRyZXR1cm4gb3V0RXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoIW91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucykge1xuXHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IHt9O1xuXHR9XG5cdG91dEV4cHJlc3Npb24uY29uc3RyYWludHMgPSB7fTtcblxuXHRvdXRFeHByZXNzaW9uLnR5cGUgPSB0YXJnZXRNYXBwaW5nLnR5cGU7XG5cdGlmICghaWdub3JlQ29uc3RyYWludHMpIHtcblx0XHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzID0gc2V0VXBDb25zdHJhaW50cyh0YXJnZXRNYXBwaW5nLCBwcm9wZXJ0eSk7XG5cdH1cblxuXHRpZiAoXG5cdFx0KG91dEV4cHJlc3Npb24/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgJiYgb3V0RXhwcmVzc2lvbj8udHlwZSAhPT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQ2NFwiKSB8fFxuXHRcdG91dEV4cHJlc3Npb24/LnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCJcblx0KSB7XG5cdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zID0gT2JqZWN0LmFzc2lnbihvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsIHtcblx0XHRcdHBhcnNlQXNTdHJpbmc6IGZhbHNlXG5cdFx0fSk7XG5cdH1cblx0aWYgKG91dEV4cHJlc3Npb24udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIiAmJiBpc1Byb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdGlmIChvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzPy5pc0RpZ2l0U2VxdWVuY2UgfHwgKG91dEV4cHJlc3Npb24uY29uc3RyYWludHM/Lm51bGxhYmxlICE9PSBmYWxzZSAmJiBwcm9wZXJ0eS5udWxsYWJsZSA9PT0gdHJ1ZSkpIHtcblx0XHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucy5wYXJzZUtlZXBzRW1wdHlTdHJpbmcgPSBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zLnBhcnNlS2VlcHNFbXB0eVN0cmluZyA9IHRydWU7XG5cdFx0fVxuXHRcdGNvbnN0IGZpc2NhbFR5cGUgPSBnZXRGaXNjYWxUeXBlKHByb3BlcnR5KTtcblx0XHRpZiAoZmlzY2FsVHlwZSkge1xuXHRcdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zLmZpc2NhbFR5cGUgPSBmaXNjYWxUeXBlO1xuXHRcdFx0b3V0RXhwcmVzc2lvbi50eXBlID0gXCJzYXAuZmUuY29yZS50eXBlLkZpc2NhbERhdGVcIjtcblx0XHR9XG5cdH1cblx0Y29uc3QgdHlwZXNTdXBwb3J0aW5nUGFyc2VFbXB0eVZhbHVlVG9aZXJvID0gW1xuXHRcdFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50MTZcIixcblx0XHRcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDMyXCIsXG5cdFx0XCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQ2NFwiLFxuXHRcdFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU2luZ2xlXCIsXG5cdFx0XCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIixcblx0XHRcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRlY2ltYWxcIixcblx0XHRcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkJ5dGVcIixcblx0XHRcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlNCeXRlXCJcblx0XTtcblx0aWYgKFxuXHRcdG91dEV4cHJlc3Npb24uY29uc3RyYWludHM/Lm51bGxhYmxlID09PSBmYWxzZSAmJlxuXHRcdG91dEV4cHJlc3Npb24udHlwZSAmJlxuXHRcdHR5cGVzU3VwcG9ydGluZ1BhcnNlRW1wdHlWYWx1ZVRvWmVyby5pbmNsdWRlcyhvdXRFeHByZXNzaW9uLnR5cGUpXG5cdCkge1xuXHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24ob3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zLCB7XG5cdFx0XHRwYXJzZUVtcHR5VmFsdWVUb1plcm86IHRydWVcblx0XHR9KTtcblx0fVxuXHRpZiAoXG5cdFx0b3V0RXhwcmVzc2lvbi5jb25zdHJhaW50cz8ubnVsbGFibGUgIT09IGZhbHNlICYmXG5cdFx0KG91dEV4cHJlc3Npb24udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQ2NFwiIHx8IG91dEV4cHJlc3Npb24udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EZWNpbWFsXCIpXG5cdCkge1xuXHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24ob3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zLCB7XG5cdFx0XHRlbXB0eVN0cmluZzogXCJcIlxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIG91dEV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGaXNjYWxUeXBlID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0Zpc2NhbFllYXIpIHtcblx0XHRyZXR1cm4gQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRmlzY2FsWWVhcjtcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNGaXNjYWxQZXJpb2QpIHtcblx0XHRyZXR1cm4gQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRmlzY2FsUGVyaW9kO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0Zpc2NhbFllYXJQZXJpb2QpIHtcblx0XHRyZXR1cm4gQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRmlzY2FsWWVhclBlcmlvZDtcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNGaXNjYWxRdWFydGVyKSB7XG5cdFx0cmV0dXJuIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0Zpc2NhbFF1YXJ0ZXI7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRmlzY2FsWWVhclF1YXJ0ZXIpIHtcblx0XHRyZXR1cm4gQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRmlzY2FsWWVhclF1YXJ0ZXI7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRmlzY2FsV2Vlaykge1xuXHRcdHJldHVybiBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNGaXNjYWxXZWVrO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0Zpc2NhbFllYXJXZWVrKSB7XG5cdFx0cmV0dXJuIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0Zpc2NhbFllYXJXZWVrO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0RheU9mRmlzY2FsWWVhcikge1xuXHRcdHJldHVybiBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNEYXlPZkZpc2NhbFllYXI7XG5cdH1cbn07XG5cbi8qKlxuICogQ2FsbHMgYSBjb21wbGV4IHR5cGUgdG8gcHJvY2VzcyB0aGUgcGFyYW1ldGVycy5cbiAqIElmIHJlcXVpcmVDb250ZXh0IGlzIHNldCB0byB0cnVlIGFuZCBubyBjb250ZXh0IGlzIHBhc3NlZCwgYSBkZWZhdWx0IGNvbnRleHQgd2lsbCBiZSBhZGRlZCBhdXRvbWF0aWNhbGx5LlxuICogQHRlbXBsYXRlIFRcbiAqIEB0ZW1wbGF0ZSBVXG4gKiBAcGFyYW0gcGFyYW1ldGVycyBUaGUgbGlzdCBvZiBwYXJhbWV0ZXJzIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSB0eXBlIGZvciB0aGUgY29tcGxleCB0eXBlPVxuICogQHBhcmFtIHR5cGUgVGhlIGNvbXBsZXggdHlwZSB0byB1c2VcbiAqIEBwYXJhbSBbY29udGV4dEVudGl0eVR5cGVdIFRoZSBjb250ZXh0IGVudGl0eSB0eXBlIHRvIGNvbnNpZGVyXG4gKiBAcGFyYW0gb0Zvcm1hdE9wdGlvbnNcbiAqIEBwYXJhbSBvQ29uc3RyYWludE9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFR5cGVJbmZvcm1hdGlvbjxULCBVIGV4dGVuZHMgRm48VD4+KFxuXHRwYXJhbWV0ZXJzOiBXcmFwcGVkVHVwbGU8UGFyYW1ldGVyczxVPj4sXG5cdHR5cGU6IHN0cmluZyxcblx0Y29udGV4dEVudGl0eVR5cGU/OiBFbnRpdHlUeXBlLFxuXHRvRm9ybWF0T3B0aW9ucz86IENvbXBsZXhUeXBlRm9ybWF0T3B0aW9ucyxcblx0b0NvbnN0cmFpbnRPcHRpb25zPzogQ29tcGxleFR5cGVDb25zdHJhaW50T3B0aW9uc1xuKTogVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb24gfCBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4gfCBDb25zdGFudEV4cHJlc3Npb248VD4ge1xuXHRjb25zdCBwYXJhbWV0ZXJFeHByZXNzaW9ucyA9IChwYXJhbWV0ZXJzIGFzIEV4cHJlc3Npb25PclByaW1pdGl2ZTxQcmltaXRpdmVUeXBlPltdKS5tYXAod3JhcFByaW1pdGl2ZSk7XG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKC4uLnBhcmFtZXRlckV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdC8vIElmIHRoZXJlIGlzIG9ubHkgb25lIHBhcmFtZXRlciBhbmQgaXQgaXMgYSBjb25zdGFudCBhbmQgd2UgZG9uJ3QgZXhwZWN0IHRoZSBjb250ZXh0IHRoZW4gcmV0dXJuIHRoZSBjb25zdGFudFxuXHRpZiAocGFyYW1ldGVyRXhwcmVzc2lvbnMubGVuZ3RoID09PSAxICYmIGlzQ29uc3RhbnQocGFyYW1ldGVyRXhwcmVzc2lvbnNbMF0pICYmICFjb250ZXh0RW50aXR5VHlwZSkge1xuXHRcdHJldHVybiBwYXJhbWV0ZXJFeHByZXNzaW9uc1swXSBhcyBDb25zdGFudEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoY29udGV4dEVudGl0eVR5cGUpIHtcblx0XHQvLyBPdGhlcndpc2UsIGlmIHRoZSBjb250ZXh0IGlzIHJlcXVpcmVkIGFuZCBubyBjb250ZXh0IGlzIHByb3ZpZGVkIG1ha2Ugc3VyZSB0byBhZGQgdGhlIGRlZmF1bHQgYmluZGluZ1xuXHRcdGlmICghcGFyYW1ldGVyRXhwcmVzc2lvbnMuc29tZShoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KSkge1xuXHRcdFx0Y29udGV4dEVudGl0eVR5cGUua2V5cy5mb3JFYWNoKChrZXkpID0+IHBhcmFtZXRlckV4cHJlc3Npb25zLnB1c2gocGF0aEluTW9kZWwoa2V5Lm5hbWUsIFwiXCIpKSk7XG5cdFx0fVxuXHR9XG5cdG9Gb3JtYXRPcHRpb25zID0gX2dldENvbXBsZXhUeXBlRm9ybWF0T3B0aW9uc0Zyb21GaXJzdFBhcmFtKHBhcmFtZXRlcnNbMF0sIG9Gb3JtYXRPcHRpb25zKTtcblxuXHRpZiAodHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Vbml0XCIpIHtcblx0XHRjb25zdCB1b21QYXRoID0gcGF0aEluTW9kZWwoXCIvIyNAQHJlcXVlc3RVbml0c09mTWVhc3VyZVwiKTtcblx0XHR1b21QYXRoLnRhcmdldFR5cGUgPSBcImFueVwiO1xuXHRcdHVvbVBhdGgubW9kZSA9IFwiT25lVGltZVwiO1xuXHRcdG9Gb3JtYXRPcHRpb25zID8/PSB7fTtcblx0XHRvRm9ybWF0T3B0aW9ucy5wcmVzZXJ2ZURlY2ltYWxzID0gb0NvbnN0cmFpbnRPcHRpb25zPy5za2lwRGVjaW1hbHNWYWxpZGF0aW9uID8/IGZhbHNlO1xuXHRcdHBhcmFtZXRlckV4cHJlc3Npb25zLnB1c2godW9tUGF0aCk7XG5cdH0gZWxzZSBpZiAodHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5DdXJyZW5jeVwiKSB7XG5cdFx0Y29uc3QgY3VycmVuY3lQYXRoID0gcGF0aEluTW9kZWwoXCIvIyNAQHJlcXVlc3RDdXJyZW5jeUNvZGVzXCIpO1xuXHRcdGN1cnJlbmN5UGF0aC50YXJnZXRUeXBlID0gXCJhbnlcIjtcblx0XHRjdXJyZW5jeVBhdGgubW9kZSA9IFwiT25lVGltZVwiO1xuXHRcdG9Gb3JtYXRPcHRpb25zID8/PSB7fTtcblx0XHRpZiAob0NvbnN0cmFpbnRPcHRpb25zPy5za2lwRGVjaW1hbHNWYWxpZGF0aW9uID09PSB0cnVlKSB7XG5cdFx0XHQvLyBUaGlzIGRvZXNuJ3QgZG8gYW55dGhpbmcgYmVjYXVzZSBpdCBnZXRzIG92ZXJ3cml0dGVuIGJ5IHRoZSBgZGVjaW1hbHNgIGZyb20gdGhlIGN1cnJlbmN5IGNvZGUgbGlzdFxuXHRcdFx0b0Zvcm1hdE9wdGlvbnMubWF4RnJhY3Rpb25EaWdpdHMgPSA5OTsgLy8gc2V0dGluZyB0byA5OSB0byBhdm9pZCByb3VuZGluZyBpbiBjdXJyZW5jeSBjb252ZXJzaW9uXG5cdFx0fVxuXG5cdFx0b0Zvcm1hdE9wdGlvbnMucHJlc2VydmVEZWNpbWFscyA9IG9Db25zdHJhaW50T3B0aW9ucz8uc2tpcERlY2ltYWxzVmFsaWRhdGlvbiA/PyBmYWxzZTsgLy8gZGVmYXVsdCB2YWx1ZSBzaW5jZSB3ZSBkb24ndCBoYXZlIGEgQ0xEUlxuXHRcdHBhcmFtZXRlckV4cHJlc3Npb25zLnB1c2goY3VycmVuY3lQYXRoKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiQ29tcGxleFR5cGVcIixcblx0XHR0eXBlOiB0eXBlLFxuXHRcdGZvcm1hdE9wdGlvbnM6IG9Gb3JtYXRPcHRpb25zIHx8IHt9LFxuXHRcdGNvbnN0cmFpbnRzOiBvQ29uc3RyYWludE9wdGlvbnMgfHwge30sXG5cdFx0cGFyYW1ldGVyczoge30sXG5cdFx0YmluZGluZ1BhcmFtZXRlcnM6IHBhcmFtZXRlckV4cHJlc3Npb25zXG5cdH07XG59XG5cbnR5cGUgQ29tcGxleFR5cGVGb3JtYXRPcHRpb25zID0ge1xuXHRkZWNpbWFscz86IG51bWJlcjtcblx0bWF4RnJhY3Rpb25EaWdpdHM/OiBudW1iZXI7XG5cdHNob3dOdW1iZXI/OiBib29sZWFuO1xuXHRzaG93TWVhc3VyZT86IGJvb2xlYW47XG5cdHBhcnNlQXNTdHJpbmc/OiBib29sZWFuO1xuXHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc/OiBib29sZWFuO1xuXHRlbXB0eVN0cmluZz86IHN0cmluZyB8IG51bWJlciB8IG51bGw7XG5cdHNob3dUaW1lPzogYm9vbGVhbjtcblx0c2hvd0RhdGU/OiBib29sZWFuO1xuXHRzaG93VGltZXpvbmU/OiBib29sZWFuO1xuXHRwcmVzZXJ2ZURlY2ltYWxzPzogYm9vbGVhbjtcblx0ZGVjaW1hbFBhZGRpbmc/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBDb21wbGV4VHlwZUNvbnN0cmFpbnRPcHRpb25zID0ge1xuXHRza2lwRGVjaW1hbHNWYWxpZGF0aW9uPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgZm9ybWF0T3B0aW9ucyBmb3IgYSBjb21wbGV4VHlwZSBiYXNlZCBvbiB0aGUgZmlyc3QgcGFyYW1ldGVyLlxuICogQHBhcmFtIHBhcmFtIFRoZSBmaXJzdCBwYXJhbWV0ZXIgb2YgdGhlIGNvbXBsZXggdHlwZVxuICogQHBhcmFtIGZvcm1hdE9wdGlvbnMgSW5pdGlhbCBmb3JtYXRPcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgbW9kaWZpZWQgZm9ybWF0T3B0aW9uc1xuICovXG5mdW5jdGlvbiBfZ2V0Q29tcGxleFR5cGVGb3JtYXRPcHRpb25zRnJvbUZpcnN0UGFyYW0oXG5cdHBhcmFtOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4sXG5cdGZvcm1hdE9wdGlvbnM6IHVuZGVmaW5lZCB8IENvbXBsZXhUeXBlRm9ybWF0T3B0aW9uc1xuKTogQ29tcGxleFR5cGVGb3JtYXRPcHRpb25zIHwgdW5kZWZpbmVkIHtcblx0Ly8gaWYgc2hvd01lYXN1cmUgaXMgc2V0IHRvIGZhbHNlIHdlIHdhbnQgdG8gbm90IHBhcnNlIGFzIHN0cmluZyB0byBzZWUgdGhlIDBcblx0Ly8gd2UgZG8gdGhhdCBhbHNvIGZvciBhbGwgYmluZGluZ3MgYmVjYXVzZSBvdGhlcndpc2UgdGhlIG1kYyBGaWVsZCBpc24ndCBlZGl0YWJsZVxuXHRpZiAoXG5cdFx0IShmb3JtYXRPcHRpb25zICYmIGZvcm1hdE9wdGlvbnMuc2hvd051bWJlciA9PT0gZmFsc2UpICYmXG5cdFx0KHBhcmFtPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwYXJhbT8udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EZWNpbWFsXCIgfHxcblx0XHRcdHBhcmFtPy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKVxuXHQpIHtcblx0XHRpZiAocGFyYW0/LnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50NjRcIiB8fCBwYXJhbT8udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EZWNpbWFsXCIpIHtcblx0XHRcdC8vc2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50NjQgZG8gbm90IHN1cHBvcnQgcGFyc2VBc1N0cmluZyBmYWxzZVxuXHRcdFx0Zm9ybWF0T3B0aW9ucyA9XG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM/LnNob3dNZWFzdXJlID09PSBmYWxzZVxuXHRcdFx0XHRcdD8geyBzaG93TWVhc3VyZTogZmFsc2UsIGRlY2ltYWxQYWRkaW5nOiBmb3JtYXRPcHRpb25zLmRlY2ltYWxQYWRkaW5nLCBlbXB0eVN0cmluZzogZm9ybWF0T3B0aW9ucz8uZW1wdHlTdHJpbmcgfVxuXHRcdFx0XHRcdDogeyBkZWNpbWFsUGFkZGluZzogZm9ybWF0T3B0aW9ucz8uZGVjaW1hbFBhZGRpbmcsIGVtcHR5U3RyaW5nOiBmb3JtYXRPcHRpb25zPy5lbXB0eVN0cmluZyB9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3JtYXRPcHRpb25zID1cblx0XHRcdFx0Zm9ybWF0T3B0aW9ucz8uc2hvd01lYXN1cmUgPT09IGZhbHNlXG5cdFx0XHRcdFx0PyB7XG5cdFx0XHRcdFx0XHRcdHBhcnNlQXNTdHJpbmc6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRzaG93TWVhc3VyZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdGRlY2ltYWxQYWRkaW5nOiBmb3JtYXRPcHRpb25zLmRlY2ltYWxQYWRkaW5nLFxuXHRcdFx0XHRcdFx0XHRlbXB0eVN0cmluZzogZm9ybWF0T3B0aW9ucz8uZW1wdHlTdHJpbmdcblx0XHRcdFx0XHQgIH1cblx0XHRcdFx0XHQ6IHsgcGFyc2VBc1N0cmluZzogZmFsc2UsIGRlY2ltYWxQYWRkaW5nOiBmb3JtYXRPcHRpb25zPy5kZWNpbWFsUGFkZGluZywgZW1wdHlTdHJpbmc6IGZvcm1hdE9wdGlvbnM/LmVtcHR5U3RyaW5nIH07XG5cdFx0fVxuXHRcdGlmIChwYXJhbT8uY29uc3RyYWludHM/Lm51bGxhYmxlICE9PSBmYWxzZSkge1xuXHRcdFx0Zm9ybWF0T3B0aW9ucy5lbXB0eVN0cmluZyA9IG51bGw7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvcm1hdE9wdGlvbnMuZW1wdHlTdHJpbmcgPz89IDA7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmb3JtYXRPcHRpb25zO1xufVxuLyoqXG4gKiBGdW5jdGlvbiBjYWxsLCBvcHRpb25hbGx5IHdpdGggYXJndW1lbnRzLlxuICogQHBhcmFtIGZ1bmMgRnVuY3Rpb24gbmFtZSBvciByZWZlcmVuY2UgdG8gZnVuY3Rpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFyZ3VtZW50c1xuICogQHBhcmFtIG9uIE9iamVjdCB0byBjYWxsIHRoZSBmdW5jdGlvbiBvblxuICogQHBhcmFtIGlzRm9ybWF0dGluZ0ZuXG4gKiBAcmV0dXJucyBFeHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgZnVuY3Rpb24gY2FsbCAobm90IHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwhKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm48VCwgVSBleHRlbmRzIEZ1bmN0aW9uT3JOYW1lPFQ+Pihcblx0ZnVuYzogVSxcblx0cGFyYW1ldGVyczogV3JhcHBlZFR1cGxlPEZ1bmN0aW9uUGFyYW1ldGVyczxULCBVPj4sXG5cdG9uPzogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPG9iamVjdD4sXG5cdGlzRm9ybWF0dGluZ0ZuID0gZmFsc2Vcbik6IEZ1bmN0aW9uRXhwcmVzc2lvbjxUPiB7XG5cdGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHR5cGVvZiBmdW5jID09PSBcInN0cmluZ1wiID8gZnVuYyA6IGZ1bmMuX19mdW5jdGlvbk5hbWU7XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiRnVuY3Rpb25cIixcblx0XHRvYmo6IG9uICE9PSB1bmRlZmluZWQgPyB3cmFwUHJpbWl0aXZlKG9uKSA6IHVuZGVmaW5lZCxcblx0XHRmbjogZnVuY3Rpb25OYW1lLFxuXHRcdGlzRm9ybWF0dGluZ0ZuOiBpc0Zvcm1hdHRpbmdGbixcblx0XHRwYXJhbWV0ZXJzOiAocGFyYW1ldGVycyBhcyBFeHByZXNzaW9uT3JQcmltaXRpdmU8UHJpbWl0aXZlVHlwZT5bXSkubWFwKHdyYXBQcmltaXRpdmUpXG5cdH07XG59XG5cbi8qKlxuICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIGEgYmluZGluZyB2YWx1ZSBpcyBudWxsLCB1bmRlZmluZWQgb3IgZW1wdHkuXG4gKiBAcGFyYW0gZXhwcmVzc2lvblxuICogQHJldHVybnMgQSBCb29sZWFuIGV4cHJlc3Npb24gZXZhbHVhdGluZyB0aGUgZmFjdCB0aGF0IHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgZW1wdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkoZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBhQmluZGluZ3M6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPltdID0gW107XG5cdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGV4cHJlc3Npb24sIFwiUGF0aEluTW9kZWxcIiwgKGV4cHIpID0+IHtcblx0XHRjb25zdCBmaW5hbEV4cHJlc3Npb24gPSB7IC4uLmV4cHIsIGFsd2F5c0tlZXBUYXJnZXRUeXBlOiB0cnVlIH0gYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPHN0cmluZz47XG5cdFx0YUJpbmRpbmdzLnB1c2gob3IoZXF1YWwoZmluYWxFeHByZXNzaW9uLCBcIlwiKSwgZXF1YWwoZXhwciwgdW5kZWZpbmVkKSwgZXF1YWwoZXhwciwgbnVsbCkpKTtcblx0XHRyZXR1cm4gZXhwcjtcblx0fSk7XG5cdHJldHVybiBhbmQoLi4uYUJpbmRpbmdzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdCguLi5pbkV4cHJlc3Npb25zOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8c3RyaW5nPltdKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBleHByZXNzaW9ucyA9IGluRXhwcmVzc2lvbnMubWFwKHdyYXBQcmltaXRpdmUpO1xuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbiguLi5leHByZXNzaW9ucykpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoZXhwcmVzc2lvbnMuZXZlcnkoaXNDb25zdGFudCkpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoXG5cdFx0XHRleHByZXNzaW9ucy5yZWR1Y2UoKGNvbmNhdGVuYXRlZDogc3RyaW5nLCB2YWx1ZSkgPT4ge1xuXHRcdFx0XHRpZiAodmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS52YWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25jYXRlbmF0ZWQgKyB2YWx1ZS52YWx1ZS50b1N0cmluZygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjb25jYXRlbmF0ZWQ7XG5cdFx0XHR9LCBcIlwiKVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAoZXhwcmVzc2lvbnMuc29tZShpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbikpIHtcblx0XHRsZXQgcGF0aElkeCA9IDA7XG5cdFx0Y29uc3QgbXlDb25jYXRFeHByZXNzaW9uID0gZm9ybWF0UmVzdWx0KGV4cHJlc3Npb25zLCBcIi5fZm9ybWF0dGVycy5TdGFuZGFyZEZvcm1hdHRlciNjb25jYXRcIiwgdW5kZWZpbmVkLCB0cnVlKTtcblx0XHRjb25zdCBhbGxQYXJ0cyA9IFtdO1xuXHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KG15Q29uY2F0RXhwcmVzc2lvbiwgXCJQYXRoSW5Nb2RlbFwiLCAoY29uc3RhbnRQYXRoOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj4pID0+IHtcblx0XHRcdGFsbFBhcnRzLnB1c2goY29uc3RhbnRQYXRoKTtcblx0XHRcdHJldHVybiBwYXRoSW5Nb2RlbChgJCR7cGF0aElkeCsrfWAsIFwiJFwiKTtcblx0XHR9KTtcblx0XHRhbGxQYXJ0cy51bnNoaWZ0KGNvbnN0YW50KEpTT04uc3RyaW5naWZ5KG15Q29uY2F0RXhwcmVzc2lvbikpKTtcblx0XHRyZXR1cm4gZm9ybWF0UmVzdWx0KGFsbFBhcnRzLCBcIi5fZm9ybWF0dGVycy5TdGFuZGFyZEZvcm1hdHRlci5iaW5kKCRjb250cm9sKSNldmFsdWF0ZUNvbXBsZXhFeHByZXNzaW9uXCIsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJDb25jYXRcIixcblx0XHRleHByZXNzaW9uczogZXhwcmVzc2lvbnNcblx0fTtcbn1cblxudHlwZSBFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxUIGV4dGVuZHMgRXhwcmVzc2lvblR5cGUsIFY+ID0gVCBleHRlbmRzIFwiQ29uc3RhbnRcIlxuXHQ/IENvbnN0YW50RXhwcmVzc2lvbjxWPlxuXHQ6IFQgZXh0ZW5kcyBcIlBhdGhJbk1vZGVsXCJcblx0PyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248Vj5cblx0OiBUIGV4dGVuZHMgXCJGdW5jdGlvblwiXG5cdD8gRnVuY3Rpb25FeHByZXNzaW9uPFY+XG5cdDogVCBleHRlbmRzIFwiVW5yZXNvbHZhYmxlXCJcblx0PyBVbnJlc29sdmFibGVQYXRoRXhwcmVzc2lvblxuXHQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxWPjtcblxuZXhwb3J0IHR5cGUgVHJhbnNmb3JtRnVuY3Rpb248VCwgVj4gPSAoZXhwcmVzc2lvblBhcnQ6IFQpID0+IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxWPjtcbmV4cG9ydCB0eXBlIEV4cHJlc3Npb25UeXBlID0gUGljazxCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4sIFwiX3R5cGVcIj5bXCJfdHlwZVwiXTtcbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1SZWN1cnNpdmVseTxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZSB8IHVua25vd24sIEVUIGV4dGVuZHMgRXhwcmVzc2lvblR5cGU+KFxuXHRpbkV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPixcblx0ZXhwcmVzc2lvblR5cGU6IEVULFxuXHR0cmFuc2Zvcm1GdW5jdGlvbjogVHJhbnNmb3JtRnVuY3Rpb248RXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIFQ+LCBUPixcblx0aW5jbHVkZUFsbEV4cHJlc3Npb24gPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0bGV0IGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiA9IGluRXhwcmVzc2lvbjtcblx0c3dpdGNoIChleHByZXNzaW9uLl90eXBlKSB7XG5cdFx0Y2FzZSBcIkZ1bmN0aW9uXCI6XG5cdFx0Y2FzZSBcIkZvcm1hdHRlclwiOlxuXHRcdFx0ZXhwcmVzc2lvbi5wYXJhbWV0ZXJzID0gZXhwcmVzc2lvbi5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PlxuXHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShwYXJhbWV0ZXIgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LCBleHByZXNzaW9uVHlwZSwgdHJhbnNmb3JtRnVuY3Rpb24sIGluY2x1ZGVBbGxFeHByZXNzaW9uKVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJDb25jYXRcIjpcblx0XHRcdGV4cHJlc3Npb24uZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uLmV4cHJlc3Npb25zLm1hcCgoc3ViRXhwcmVzc2lvbikgPT5cblx0XHRcdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0c3ViRXhwcmVzc2lvbixcblx0XHRcdFx0XHRleHByZXNzaW9uVHlwZSxcblx0XHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbiBhcyB1bmtub3duIGFzIFRyYW5zZm9ybUZ1bmN0aW9uPEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPEVULCBzdHJpbmc+LCBzdHJpbmc+LFxuXHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0XHRleHByZXNzaW9uID0gY29uY2F0KC4uLmV4cHJlc3Npb24uZXhwcmVzc2lvbnMpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJDb21wbGV4VHlwZVwiOlxuXHRcdFx0ZXhwcmVzc2lvbi5iaW5kaW5nUGFyYW1ldGVycyA9IGV4cHJlc3Npb24uYmluZGluZ1BhcmFtZXRlcnMubWFwKChiaW5kaW5nUGFyYW1ldGVyKSA9PlxuXHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRiaW5kaW5nUGFyYW1ldGVyIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPixcblx0XHRcdFx0XHRleHByZXNzaW9uVHlwZSxcblx0XHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbixcblx0XHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIklmRWxzZVwiOlxuXHRcdFx0Y29uc3Qgb25UcnVlID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdGV4cHJlc3Npb24ub25UcnVlLFxuXHRcdFx0XHRleHByZXNzaW9uVHlwZSxcblx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24gYXMgdW5rbm93biBhcyBUcmFuc2Zvcm1GdW5jdGlvbjxFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgdW5rbm93bj4sIHVua25vd24+LFxuXHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IG9uRmFsc2UgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0ZXhwcmVzc2lvbi5vbkZhbHNlLFxuXHRcdFx0XHRleHByZXNzaW9uVHlwZSxcblx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24gYXMgdW5rbm93biBhcyBUcmFuc2Zvcm1GdW5jdGlvbjxFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgdW5rbm93bj4sIHVua25vd24+LFxuXHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0KTtcblx0XHRcdGxldCBjb25kaXRpb24gPSBleHByZXNzaW9uLmNvbmRpdGlvbjtcblx0XHRcdGlmIChpbmNsdWRlQWxsRXhwcmVzc2lvbikge1xuXHRcdFx0XHRjb25kaXRpb24gPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRleHByZXNzaW9uLmNvbmRpdGlvbixcblx0XHRcdFx0XHRleHByZXNzaW9uVHlwZSxcblx0XHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbiBhcyB1bmtub3duIGFzIFRyYW5zZm9ybUZ1bmN0aW9uPEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPEVULCBib29sZWFuPiwgYm9vbGVhbj4sXG5cdFx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGV4cHJlc3Npb24gPSBpZkVsc2UoY29uZGl0aW9uLCBvblRydWUsIG9uRmFsc2UpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJOb3RcIjpcblx0XHRcdGlmIChpbmNsdWRlQWxsRXhwcmVzc2lvbikge1xuXHRcdFx0XHRjb25zdCBvcGVyYW5kID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0ZXhwcmVzc2lvbi5vcGVyYW5kLFxuXHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uIGFzIHVua25vd24gYXMgVHJhbnNmb3JtRnVuY3Rpb248RXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIGJvb2xlYW4+LCBib29sZWFuPixcblx0XHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0XHRleHByZXNzaW9uID0gbm90KG9wZXJhbmQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJUcnV0aHlcIjpcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJTZXRcIjpcblx0XHRcdGlmIChpbmNsdWRlQWxsRXhwcmVzc2lvbikge1xuXHRcdFx0XHRjb25zdCBvcGVyYW5kcyA9IGV4cHJlc3Npb24ub3BlcmFuZHMubWFwKChvcGVyYW5kKSA9PlxuXHRcdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdFx0b3BlcmFuZCxcblx0XHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24gYXMgdW5rbm93biBhcyBUcmFuc2Zvcm1GdW5jdGlvbjxFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgYm9vbGVhbj4sIGJvb2xlYW4+LFxuXHRcdFx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGV4cHJlc3Npb24gPVxuXHRcdFx0XHRcdGV4cHJlc3Npb24ub3BlcmF0b3IgPT09IFwifHxcIlxuXHRcdFx0XHRcdFx0PyAob3IoLi4ub3BlcmFuZHMpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPilcblx0XHRcdFx0XHRcdDogKGFuZCguLi5vcGVyYW5kcykgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+KTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJDb21wYXJpc29uXCI6XG5cdFx0XHRpZiAoaW5jbHVkZUFsbEV4cHJlc3Npb24pIHtcblx0XHRcdFx0Y29uc3Qgb3BlcmFuZDEgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRleHByZXNzaW9uLm9wZXJhbmQxIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPixcblx0XHRcdFx0XHRleHByZXNzaW9uVHlwZSxcblx0XHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbixcblx0XHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBvcGVyYW5kMiA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdGV4cHJlc3Npb24ub3BlcmFuZDIgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LFxuXHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uLFxuXHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGV4cHJlc3Npb24gPSBjb21wYXJpc29uKGV4cHJlc3Npb24ub3BlcmF0b3IsIG9wZXJhbmQxLCBvcGVyYW5kMikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0XHRjb25zdCBjb25zdGFudFZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4+ID0gZXhwcmVzc2lvbi52YWx1ZSBhcyBSZWNvcmQ8XG5cdFx0XHRcdHN0cmluZyxcblx0XHRcdFx0QmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+XG5cdFx0XHQ+O1xuXHRcdFx0aWYgKHR5cGVvZiBjb25zdGFudFZhbHVlID09PSBcIm9iamVjdFwiICYmIGNvbnN0YW50VmFsdWUpIHtcblx0XHRcdFx0T2JqZWN0LmtleXMoY29uc3RhbnRWYWx1ZSkuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3RhbnRWYWx1ZVtrZXldID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0XHRjb25zdGFudFZhbHVlW2tleV0sXG5cdFx0XHRcdFx0XHRleHByZXNzaW9uVHlwZSxcblx0XHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uIGFzIHVua25vd24gYXMgVHJhbnNmb3JtRnVuY3Rpb248RXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIHVua25vd24+LCB1bmtub3duPixcblx0XHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiUmVmXCI6XG5cdFx0Y2FzZSBcIkxlbmd0aFwiOlxuXHRcdGNhc2UgXCJQYXRoSW5Nb2RlbFwiOlxuXHRcdGNhc2UgXCJFbWJlZGRlZEJpbmRpbmdcIjpcblx0XHRjYXNlIFwiRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ1wiOlxuXHRcdGNhc2UgXCJVbnJlc29sdmFibGVcIjpcblx0XHRcdC8vIERvIG5vdGhpbmdcblx0XHRcdGJyZWFrO1xuXHR9XG5cdGlmIChleHByZXNzaW9uVHlwZSA9PT0gZXhwcmVzc2lvbi5fdHlwZSkge1xuXHRcdGV4cHJlc3Npb24gPSB0cmFuc2Zvcm1GdW5jdGlvbihpbkV4cHJlc3Npb24gYXMgRXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIFQ+KTtcblx0fVxuXHRyZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IHR5cGUgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gPSBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbmNvbnN0IG5lZWRQYXJlbnRoZXNpcyA9IGZ1bmN0aW9uIDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oZXhwcjogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+KTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0IWlzQ29uc3RhbnQoZXhwcikgJiZcblx0XHQhaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24oZXhwcikgJiZcblx0XHRpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbihleHByKSAmJlxuXHRcdGV4cHIuX3R5cGUgIT09IFwiSWZFbHNlXCIgJiZcblx0XHRleHByLl90eXBlICE9PSBcIkZ1bmN0aW9uXCJcblx0KTtcbn07XG5cbi8qKlxuICogQ29tcGlsZXMgYSBjb25zdGFudCBvYmplY3QgdG8gYSBzdHJpbmcuXG4gKiBAcGFyYW0gZXhwclxuICogQHBhcmFtIGlzTnVsbGFibGVcbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gY29tcGlsZUNvbnN0YW50T2JqZWN0KGV4cHI6IENvbnN0YW50RXhwcmVzc2lvbjxvYmplY3Q+LCBpc051bGxhYmxlID0gZmFsc2UpOiBzdHJpbmcge1xuXHRpZiAoaXNOdWxsYWJsZSAmJiBPYmplY3Qua2V5cyhleHByLnZhbHVlKS5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXHRjb25zdCBvYmplY3RzID0gZXhwci52YWx1ZSBhcyBQbGFpbkV4cHJlc3Npb25PYmplY3Q7XG5cdGNvbnN0IHByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdE9iamVjdC5rZXlzKG9iamVjdHMpLmZvckVhY2goKGtleSkgPT4ge1xuXHRcdGNvbnN0IHZhbHVlID0gb2JqZWN0c1trZXldO1xuXHRcdGNvbnN0IGNoaWxkUmVzdWx0ID0gY29tcGlsZUV4cHJlc3Npb24odmFsdWUsIHRydWUsIGZhbHNlLCBpc051bGxhYmxlKTtcblx0XHRpZiAoY2hpbGRSZXN1bHQgJiYgY2hpbGRSZXN1bHQubGVuZ3RoID4gMCkge1xuXHRcdFx0cHJvcGVydGllcy5wdXNoKGAke2tleX06ICR7Y2hpbGRSZXN1bHR9YCk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGB7JHtwcm9wZXJ0aWVzLmpvaW4oXCIsIFwiKX19YDtcbn1cblxuLyoqXG4gKiBDb21waWxlcyBhIENvbnN0YW50IEJpbmRpbmcgRXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBleHByXG4gKiBAcGFyYW0gZW1iZWRkZWRJbkJpbmRpbmdcbiAqIEBwYXJhbSBpc051bGxhYmxlXG4gKiBAcGFyYW0gZG9Ob3RTdHJpbmdpZnlcbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVDb25zdGFudDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cHI6IENvbnN0YW50RXhwcmVzc2lvbjxUPixcblx0ZW1iZWRkZWRJbkJpbmRpbmc6IGJvb2xlYW4sXG5cdGlzTnVsbGFibGU/OiBib29sZWFuLFxuXHRkb05vdFN0cmluZ2lmeT86IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlQ29uc3RhbnQ8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRleHByOiBDb25zdGFudEV4cHJlc3Npb248VD4sXG5cdGVtYmVkZGVkSW5CaW5kaW5nOiBib29sZWFuLFxuXHRpc051bGxhYmxlPzogYm9vbGVhbixcblx0ZG9Ob3RTdHJpbmdpZnk/OiB0cnVlXG4pOiBQcmltaXRpdmVUeXBlO1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVDb25zdGFudDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cHI6IENvbnN0YW50RXhwcmVzc2lvbjxUPixcblx0ZW1iZWRkZWRJbkJpbmRpbmc6IGJvb2xlYW4sXG5cdGlzTnVsbGFibGUgPSBmYWxzZSxcblx0ZG9Ob3RTdHJpbmdpZnkgPSBmYWxzZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBQcmltaXRpdmVUeXBlIHtcblx0aWYgKGV4cHIudmFsdWUgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gZG9Ob3RTdHJpbmdpZnkgPyBudWxsIDogXCJudWxsXCI7XG5cdH1cblx0aWYgKGV4cHIudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBkb05vdFN0cmluZ2lmeSA/IHVuZGVmaW5lZCA6IFwidW5kZWZpbmVkXCI7XG5cdH1cblx0aWYgKHR5cGVvZiBleHByLnZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoZXhwci52YWx1ZSkpIHtcblx0XHRcdGNvbnN0IGVudHJpZXMgPSBleHByLnZhbHVlLm1hcCgoZXhwcmVzc2lvbikgPT4gY29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdHJ1ZSkpO1xuXHRcdFx0cmV0dXJuIGBbJHtlbnRyaWVzLmpvaW4oXCIsIFwiKX1dYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVDb25zdGFudE9iamVjdChleHByIGFzIENvbnN0YW50RXhwcmVzc2lvbjxvYmplY3Q+LCBpc051bGxhYmxlKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRzd2l0Y2ggKHR5cGVvZiBleHByLnZhbHVlKSB7XG5cdFx0XHRjYXNlIFwibnVtYmVyXCI6XG5cdFx0XHRjYXNlIFwiYmlnaW50XCI6XG5cdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0XHRyZXR1cm4gZXhwci52YWx1ZS50b1N0cmluZygpO1xuXHRcdFx0Y2FzZSBcInN0cmluZ1wiOlxuXHRcdFx0XHRyZXR1cm4gYCcke2VzY2FwZVhtbEF0dHJpYnV0ZShleHByLnZhbHVlLnRvU3RyaW5nKCkpfSdgO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBkb05vdFN0cmluZ2lmeSA/IGV4cHIudmFsdWUgOiBleHByLnZhbHVlLnRvU3RyaW5nKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGJpbmRpbmcgc3RyaW5nIGZvciBhIEJpbmRpbmcgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBleHByZXNzaW9uRm9yQmluZGluZyBUaGUgZXhwcmVzc2lvbiB0byBjb21waWxlXG4gKiBAcGFyYW0gZW1iZWRkZWRJbkJpbmRpbmcgV2hldGhlciB0aGUgZXhwcmVzc2lvbiB0byBjb21waWxlIGlzIGVtYmVkZGVkIGludG8gYW5vdGhlciBleHByZXNzaW9uXG4gKiBAcGFyYW0gZW1iZWRkZWRTZXBhcmF0b3IgVGhlIGJpbmRpbmcgdmFsdWUgZXZhbHVhdG9yICgkIG9yICUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2Ugd2FudCB0byBmb3JjZSB0aGUgdHlwZSBvciBub3QpXG4gKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBleHByZXNzaW9uIGJpbmRpbmdcbiAqL1xuZnVuY3Rpb24gY29tcGlsZVBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cHJlc3Npb25Gb3JCaW5kaW5nOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4sXG5cdGVtYmVkZGVkSW5CaW5kaW5nOiBib29sZWFuLFxuXHRlbWJlZGRlZFNlcGFyYXRvcjogc3RyaW5nXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGlmIChcblx0XHRleHByZXNzaW9uRm9yQmluZGluZy50eXBlIHx8XG5cdFx0ZXhwcmVzc2lvbkZvckJpbmRpbmcucGFyYW1ldGVycyB8fFxuXHRcdGV4cHJlc3Npb25Gb3JCaW5kaW5nLnRhcmdldFR5cGUgfHxcblx0XHRleHByZXNzaW9uRm9yQmluZGluZy5mb3JtYXRPcHRpb25zIHx8XG5cdFx0ZXhwcmVzc2lvbkZvckJpbmRpbmcuY29uc3RyYWludHNcblx0KSB7XG5cdFx0Ly8gVGhpcyBpcyBub3cgYSBjb21wbGV4IGJpbmRpbmcgZGVmaW5pdGlvbiwgbGV0J3MgcHJlcGFyZSBmb3IgaXRcblx0XHRjb25zdCBjb21wbGV4QmluZGluZ0RlZmluaXRpb24gPSB7XG5cdFx0XHRwYXRoOiBjb21waWxlUGF0aEluTW9kZWwoZXhwcmVzc2lvbkZvckJpbmRpbmcpLFxuXHRcdFx0dHlwZTogZXhwcmVzc2lvbkZvckJpbmRpbmcudHlwZSxcblx0XHRcdHRhcmdldFR5cGU6IGV4cHJlc3Npb25Gb3JCaW5kaW5nLnRhcmdldFR5cGUsXG5cdFx0XHRwYXJhbWV0ZXJzOiBleHByZXNzaW9uRm9yQmluZGluZy5wYXJhbWV0ZXJzLFxuXHRcdFx0Zm9ybWF0T3B0aW9uczogZXhwcmVzc2lvbkZvckJpbmRpbmcuZm9ybWF0T3B0aW9ucyxcblx0XHRcdGNvbnN0cmFpbnRzOiBleHByZXNzaW9uRm9yQmluZGluZy5jb25zdHJhaW50c1xuXHRcdH07XG5cdFx0Y29uc3Qgb3V0QmluZGluZyA9IGNvbXBpbGVFeHByZXNzaW9uKGNvbXBsZXhCaW5kaW5nRGVmaW5pdGlvbiwgZmFsc2UsIGZhbHNlLCB0cnVlKTtcblx0XHRpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRcdGNvbnN0IHNlcGFyYXRvciA9IGV4cHJlc3Npb25Gb3JCaW5kaW5nLmFsd2F5c0tlZXBUYXJnZXRUeXBlID8gXCIkXCIgOiBlbWJlZGRlZFNlcGFyYXRvcjtcblx0XHRcdHJldHVybiBgJHtzZXBhcmF0b3J9JHtvdXRCaW5kaW5nfWA7XG5cdFx0fVxuXHRcdHJldHVybiBvdXRCaW5kaW5nO1xuXHR9IGVsc2UgaWYgKGVtYmVkZGVkSW5CaW5kaW5nKSB7XG5cdFx0cmV0dXJuIGAke2VtYmVkZGVkU2VwYXJhdG9yfXske2NvbXBpbGVQYXRoSW5Nb2RlbChleHByZXNzaW9uRm9yQmluZGluZyl9fWA7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGB7JHtjb21waWxlUGF0aEluTW9kZWwoZXhwcmVzc2lvbkZvckJpbmRpbmcpfX1gO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGVDb21wbGV4VHlwZUV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KGV4cHJlc3Npb246IENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPik6IHN0cmluZyB7XG5cdGlmIChleHByZXNzaW9uLmJpbmRpbmdQYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBgeyR7Y29tcGlsZVBhdGhQYXJhbWV0ZXIoZXhwcmVzc2lvbi5iaW5kaW5nUGFyYW1ldGVyc1swXSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4sIHRydWUpfSwgdHlwZTogJyR7XG5cdFx0XHRleHByZXNzaW9uLnR5cGVcblx0XHR9J31gO1xuXHR9XG5cblx0bGV0IG91dHB1dEVuZCA9IGBdLCB0eXBlOiAnJHtleHByZXNzaW9uLnR5cGV9J2A7XG5cdGlmIChoYXNFbGVtZW50cyhleHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpKSB7XG5cdFx0b3V0cHV0RW5kICs9IGAsIGZvcm1hdE9wdGlvbnM6ICR7Y29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zKX1gO1xuXHR9XG5cdGlmIChoYXNFbGVtZW50cyhleHByZXNzaW9uLmNvbnN0cmFpbnRzKSkge1xuXHRcdG91dHB1dEVuZCArPSBgLCBjb25zdHJhaW50czogJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLmNvbnN0cmFpbnRzKX1gO1xuXHR9XG5cdGlmIChoYXNFbGVtZW50cyhleHByZXNzaW9uLnBhcmFtZXRlcnMpKSB7XG5cdFx0b3V0cHV0RW5kICs9IGAsIHBhcmFtZXRlcnM6ICR7Y29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbi5wYXJhbWV0ZXJzKX1gO1xuXHR9XG5cdG91dHB1dEVuZCArPSBcIn1cIjtcblxuXHRyZXR1cm4gYHttb2RlOidUd29XYXknLCBwYXJ0czpbJHtleHByZXNzaW9uLmJpbmRpbmdQYXJhbWV0ZXJzXG5cdFx0Lm1hcCgocGFyYW0pID0+IGNvbXBpbGVQYXRoUGFyYW1ldGVyKHBhcmFtIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPikpXG5cdFx0LmpvaW4oXCIsXCIpfSR7b3V0cHV0RW5kfWA7XG59XG5cbi8qKlxuICogV3JhcCB0aGUgY29tcGlsZWQgYmluZGluZyBzdHJpbmcgYXMgcmVxdWlyZWQgZGVwZW5kaW5nIG9uIGl0cyBjb250ZXh0LlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGNvbXBpbGVkIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBlbWJlZGRlZEluQmluZGluZyBUcnVlIGlmIHRoZSBjb21waWxlZCBleHByZXNzaW9uIGlzIHRvIGJlIGVtYmVkZGVkIGluIGEgYmluZGluZ1xuICogQHBhcmFtIHBhcmVudGhlc2lzUmVxdWlyZWQgVHJ1ZSBpZiB0aGUgZW1iZWRkZWQgYmluZGluZyBuZWVkcyB0byBiZSB3cmFwcGVkIGluIHBhcmV0aGVzaXMgc28gdGhhdCBpdCBpcyBldmFsdWF0ZWQgYXMgb25lXG4gKiBAcmV0dXJucyBGaW5hbGl6ZWQgY29tcGlsZWQgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gd3JhcEJpbmRpbmdFeHByZXNzaW9uKFxuXHRleHByZXNzaW9uOiBzdHJpbmcsXG5cdGVtYmVkZGVkSW5CaW5kaW5nOiBib29sZWFuLFxuXHRwYXJlbnRoZXNpc1JlcXVpcmVkID0gZmFsc2Vcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0aWYgKGVtYmVkZGVkSW5CaW5kaW5nKSB7XG5cdFx0aWYgKHBhcmVudGhlc2lzUmVxdWlyZWQpIHtcblx0XHRcdHJldHVybiBgKCR7ZXhwcmVzc2lvbn0pYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGV4cHJlc3Npb247XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBgez0gJHtleHByZXNzaW9ufX1gO1xuXHR9XG59XG5cbi8qKlxuICogQ29tcGlsZSBhbiBleHByZXNzaW9uIGludG8gYW4gZXhwcmVzc2lvbiBiaW5kaW5nLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvbiB0byBjb21waWxlXG4gKiBAcGFyYW0gZW1iZWRkZWRJbkJpbmRpbmcgV2hldGhlciB0aGUgZXhwcmVzc2lvbiB0byBjb21waWxlIGlzIGVtYmVkZGVkIGludG8gYW5vdGhlciBleHByZXNzaW9uXG4gKiBAcGFyYW0ga2VlcFRhcmdldFR5cGUgS2VlcCB0aGUgdGFyZ2V0IHR5cGUgb2YgdGhlIGVtYmVkZGVkIGJpbmRpbmdzIGluc3RlYWQgb2YgY2FzdGluZyB0aGVtIHRvIGFueVxuICogQHBhcmFtIGlzTnVsbGFibGUgV2hldGhlciBiaW5kaW5nIGV4cHJlc3Npb24gY2FuIHJlc29sdmUgdG8gZW1wdHkgc3RyaW5nIG9yIG5vdFxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXhwcmVzc2lvbiBiaW5kaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cHJlc3Npb246IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0ZW1iZWRkZWRJbkJpbmRpbmcgPSBmYWxzZSxcblx0a2VlcFRhcmdldFR5cGUgPSBmYWxzZSxcblx0aXNOdWxsYWJsZSA9IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IGV4cHIgPSB3cmFwUHJpbWl0aXZlKGV4cHJlc3Npb24pO1xuXHRjb25zdCBlbWJlZGRlZFNlcGFyYXRvciA9IGtlZXBUYXJnZXRUeXBlID8gXCIkXCIgOiBcIiVcIjtcblxuXHRzd2l0Y2ggKGV4cHIuX3R5cGUpIHtcblx0XHRjYXNlIFwiVW5yZXNvbHZhYmxlXCI6XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0XHRyZXR1cm4gY29tcGlsZUNvbnN0YW50KGV4cHIsIGVtYmVkZGVkSW5CaW5kaW5nLCBpc051bGxhYmxlKTtcblxuXHRcdGNhc2UgXCJSZWZcIjpcblx0XHRcdHJldHVybiBleHByLnJlZiB8fCBcIm51bGxcIjtcblxuXHRcdGNhc2UgXCJGdW5jdGlvblwiOlxuXHRcdFx0bGV0IGhhc0VtYmVkZGVkRnVuY3Rpb25DYWxsT3JCaW5kaW5nID0gZmFsc2U7XG5cdFx0XHRpZiAoZXhwci5pc0Zvcm1hdHRpbmdGbikge1xuXHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRleHByLFxuXHRcdFx0XHRcdFwiRnVuY3Rpb25cIixcblx0XHRcdFx0XHQoc3ViRm4pID0+IHtcblx0XHRcdFx0XHRcdGlmIChzdWJGbiAhPT0gZXhwciAmJiBzdWJGbi5vYmogPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRoYXNFbWJlZGRlZEZ1bmN0aW9uQ2FsbE9yQmluZGluZyA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gc3ViRm47XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdGV4cHIsXG5cdFx0XHRcdFx0XCJDb25zdGFudFwiLFxuXHRcdFx0XHRcdChzdWJGbjogQ29uc3RhbnRFeHByZXNzaW9uPFQ+KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoKHN1YkZuIGFzIHVua25vd24pICE9PSBleHByICYmIHR5cGVvZiBzdWJGbi52YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShzdWJGbiwgXCJQYXRoSW5Nb2RlbFwiLCAoc3ViU3ViRm4pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRoYXNFbWJlZGRlZEZ1bmN0aW9uQ2FsbE9yQmluZGluZyA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHN1YlN1YkZuO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cmV0dXJuIHN1YkZuO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgYXJndW1lbnRTdHJpbmcgPSBgJHtleHByLnBhcmFtZXRlcnMubWFwKChhcmcpID0+IGNvbXBpbGVFeHByZXNzaW9uKGFyZywgdHJ1ZSkpLmpvaW4oXCIsIFwiKX1gO1xuXHRcdFx0bGV0IGZuQ2FsbCA9XG5cdFx0XHRcdGV4cHIub2JqID09PSB1bmRlZmluZWRcblx0XHRcdFx0XHQ/IGAke2V4cHIuZm59KCR7YXJndW1lbnRTdHJpbmd9KWBcblx0XHRcdFx0XHQ6IGAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHIub2JqLCB0cnVlKX0uJHtleHByLmZufSgke2FyZ3VtZW50U3RyaW5nfSlgO1xuXHRcdFx0aWYgKCFlbWJlZGRlZEluQmluZGluZyAmJiBoYXNFbWJlZGRlZEZ1bmN0aW9uQ2FsbE9yQmluZGluZykge1xuXHRcdFx0XHRmbkNhbGwgPSBgez0gJHtmbkNhbGx9fWA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZm5DYWxsO1xuXG5cdFx0Y2FzZSBcIkVtYmVkZGVkRXhwcmVzc2lvbkJpbmRpbmdcIjpcblx0XHRcdHJldHVybiBlbWJlZGRlZEluQmluZGluZyA/IGAoJHtleHByLnZhbHVlLnN1YnN0cmluZygyLCBleHByLnZhbHVlLmxlbmd0aCAtIDEpfSlgIDogYCR7ZXhwci52YWx1ZX1gO1xuXG5cdFx0Y2FzZSBcIkVtYmVkZGVkQmluZGluZ1wiOlxuXHRcdFx0cmV0dXJuIGVtYmVkZGVkSW5CaW5kaW5nID8gYCR7ZW1iZWRkZWRTZXBhcmF0b3J9JHtleHByLnZhbHVlfWAgOiBgJHtleHByLnZhbHVlfWA7XG5cblx0XHRjYXNlIFwiUGF0aEluTW9kZWxcIjpcblx0XHRcdHJldHVybiBjb21waWxlUGF0aEluTW9kZWxFeHByZXNzaW9uKGV4cHIsIGVtYmVkZGVkSW5CaW5kaW5nLCBlbWJlZGRlZFNlcGFyYXRvcik7XG5cblx0XHRjYXNlIFwiQ29tcGFyaXNvblwiOlxuXHRcdFx0Y29uc3QgY29tcGFyaXNvbkV4cHJlc3Npb24gPSBjb21waWxlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcik7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKGNvbXBhcmlzb25FeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZyk7XG5cblx0XHRjYXNlIFwiSWZFbHNlXCI6XG5cdFx0XHRjb25zdCBpZkVsc2VFeHByZXNzaW9uID0gYCR7Y29tcGlsZUV4cHJlc3Npb24oZXhwci5jb25kaXRpb24sIHRydWUpfSA/ICR7Y29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGV4cHIub25UcnVlLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRrZWVwVGFyZ2V0VHlwZVxuXHRcdFx0KX0gOiAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHIub25GYWxzZSwgdHJ1ZSwga2VlcFRhcmdldFR5cGUpfWA7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKGlmRWxzZUV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nLCB0cnVlKTtcblxuXHRcdGNhc2UgXCJTZXRcIjpcblx0XHRcdGNvbnN0IHNldEV4cHJlc3Npb24gPSBleHByLm9wZXJhbmRzLm1hcCgob3BlcmFuZCkgPT4gY29tcGlsZUV4cHJlc3Npb24ob3BlcmFuZCwgdHJ1ZSkpLmpvaW4oYCAke2V4cHIub3BlcmF0b3J9IGApO1xuXHRcdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbihzZXRFeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZywgdHJ1ZSk7XG5cblx0XHRjYXNlIFwiQ29uY2F0XCI6XG5cdFx0XHRjb25zdCBjb25jYXRFeHByZXNzaW9uID0gZXhwci5leHByZXNzaW9uc1xuXHRcdFx0XHQubWFwKChuZXN0ZWRFeHByZXNzaW9uKSA9PiBjb21waWxlRXhwcmVzc2lvbihuZXN0ZWRFeHByZXNzaW9uLCB0cnVlLCB0cnVlKSlcblx0XHRcdFx0LmpvaW4oXCIgKyBcIik7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKGNvbmNhdEV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nKTtcblxuXHRcdGNhc2UgXCJMZW5ndGhcIjpcblx0XHRcdGNvbnN0IGxlbmd0aEV4cHJlc3Npb24gPSBgJHtjb21waWxlRXhwcmVzc2lvbihleHByLnBhdGhJbk1vZGVsLCB0cnVlKX0ubGVuZ3RoYDtcblx0XHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24obGVuZ3RoRXhwcmVzc2lvbiwgZW1iZWRkZWRJbkJpbmRpbmcpO1xuXG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdFx0Y29uc3Qgbm90RXhwcmVzc2lvbiA9IGAhJHtjb21waWxlRXhwcmVzc2lvbihleHByLm9wZXJhbmQsIHRydWUpfWA7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKG5vdEV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nKTtcblxuXHRcdGNhc2UgXCJUcnV0aHlcIjpcblx0XHRcdGNvbnN0IHRydXRoeUV4cHJlc3Npb24gPSBgISEke2NvbXBpbGVFeHByZXNzaW9uKGV4cHIub3BlcmFuZCwgdHJ1ZSl9YDtcblx0XHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24odHJ1dGh5RXhwcmVzc2lvbiwgZW1iZWRkZWRJbkJpbmRpbmcpO1xuXG5cdFx0Y2FzZSBcIkZvcm1hdHRlclwiOlxuXHRcdFx0Y29uc3QgZm9ybWF0dGVyRXhwcmVzc2lvbiA9IGNvbXBpbGVGb3JtYXR0ZXJFeHByZXNzaW9uKGV4cHIpO1xuXHRcdFx0cmV0dXJuIGVtYmVkZGVkSW5CaW5kaW5nID8gYCQke2Zvcm1hdHRlckV4cHJlc3Npb259YCA6IGZvcm1hdHRlckV4cHJlc3Npb247XG5cblx0XHRjYXNlIFwiQ29tcGxleFR5cGVcIjpcblx0XHRcdGNvbnN0IGNvbXBsZXhUeXBlRXhwcmVzc2lvbiA9IGNvbXBpbGVDb21wbGV4VHlwZUV4cHJlc3Npb24oZXhwcik7XG5cdFx0XHRyZXR1cm4gZW1iZWRkZWRJbkJpbmRpbmcgPyBgJCR7Y29tcGxleFR5cGVFeHByZXNzaW9ufWAgOiBjb21wbGV4VHlwZUV4cHJlc3Npb247XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdH1cbn1cblxuLyoqXG4gKiBDb21waWxlIGEgY29tcGFyaXNvbiBleHByZXNzaW9uLlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGNvbXBhcmlzb24gZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBleHByZXNzaW9uLiBOZWVkcyB3cmFwcGluZyBiZWZvcmUgaXQgY2FuIGJlIHVzZWQgYXMgYW4gZXhwcmVzc2lvbiBiaW5kaW5nLlxuICovXG5mdW5jdGlvbiBjb21waWxlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbjogQ29tcGFyaXNvbkV4cHJlc3Npb24pOiBzdHJpbmcge1xuXHRmdW5jdGlvbiBjb21waWxlT3BlcmFuZChvcGVyYW5kOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0Y29uc3QgY29tcGlsZWRPcGVyYW5kID0gY29tcGlsZUV4cHJlc3Npb24ob3BlcmFuZCwgdHJ1ZSkgPz8gXCJ1bmRlZmluZWRcIjtcblx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKGNvbXBpbGVkT3BlcmFuZCwgdHJ1ZSwgbmVlZFBhcmVudGhlc2lzKG9wZXJhbmQpKTtcblx0fVxuXG5cdHJldHVybiBgJHtjb21waWxlT3BlcmFuZChleHByZXNzaW9uLm9wZXJhbmQxKX0gJHtleHByZXNzaW9uLm9wZXJhdG9yfSAke2NvbXBpbGVPcGVyYW5kKGV4cHJlc3Npb24ub3BlcmFuZDIpfWA7XG59XG5cbi8qKlxuICogQ29tcGlsZSBhIGZvcm1hdHRlciBleHByZXNzaW9uLlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGZvcm1hdHRlciBleHByZXNzaW9uLlxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIGV4cHJlc3Npb24uXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVGb3JtYXR0ZXJFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihleHByZXNzaW9uOiBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+KTogc3RyaW5nIHtcblx0aWYgKGV4cHJlc3Npb24ucGFyYW1ldGVycy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gYHske2NvbXBpbGVQYXRoUGFyYW1ldGVyKGV4cHJlc3Npb24ucGFyYW1ldGVyc1swXSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4sIHRydWUpfSwgZm9ybWF0dGVyOiAnJHtcblx0XHRcdGV4cHJlc3Npb24uZm5cblx0XHR9J31gO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IHBhcnRzID0gZXhwcmVzc2lvbi5wYXJhbWV0ZXJzLm1hcCgocGFyYW0pID0+IHtcblx0XHRcdGlmIChwYXJhbS5fdHlwZSA9PT0gXCJDb21wbGV4VHlwZVwiKSB7XG5cdFx0XHRcdHJldHVybiBjb21waWxlQ29tcGxleFR5cGVFeHByZXNzaW9uKHBhcmFtKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb21waWxlUGF0aFBhcmFtZXRlcihwYXJhbSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBge3BhcnRzOiBbJHtwYXJ0cy5qb2luKFwiLCBcIil9XSwgZm9ybWF0dGVyOiAnJHtleHByZXNzaW9uLmZufSd9YDtcblx0fVxufVxuXG4vKipcbiAqIENvbXBpbGUgdGhlIHBhdGggcGFyYW1ldGVyIG9mIGEgZm9ybWF0dGVyIGNhbGwuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgYmluZGluZyBwYXJ0IHRvIGV2YWx1YXRlXG4gKiBAcGFyYW0gc2luZ2xlUGF0aCBXaGV0aGVyIHRoZXJlIGlzIG9uZSBvciBtdWx0aXBsZSBwYXRoIHRvIGNvbnNpZGVyXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHNuaXBwZXQgdG8gaW5jbHVkZSBpbiB0aGUgb3ZlcmFsbCBiaW5kaW5nIGRlZmluaXRpb25cbiAqL1xuZnVuY3Rpb24gY29tcGlsZVBhdGhQYXJhbWV0ZXIoZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+LCBzaW5nbGVQYXRoID0gZmFsc2UpOiBzdHJpbmcge1xuXHRsZXQgb3V0VmFsdWUgPSBcIlwiO1xuXHRpZiAoZXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJDb25zdGFudFwiKSB7XG5cdFx0aWYgKGV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gU3BlY2lhbCBjYXNlIG90aGVyd2lzZSB0aGUgSlNUb2tlbml6ZXIgY29tcGxhaW5zIGFib3V0IGluY29ycmVjdCBjb250ZW50XG5cdFx0XHRvdXRWYWx1ZSA9IGB2YWx1ZTogJ3VuZGVmaW5lZCdgO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvdXRWYWx1ZSA9IGB2YWx1ZTogJHtjb21waWxlQ29uc3RhbnQoZXhwcmVzc2lvbiwgdHJ1ZSl9YDtcblx0XHR9XG5cdH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJQYXRoSW5Nb2RlbFwiKSB7XG5cdFx0b3V0VmFsdWUgPSBgcGF0aDogJyR7Y29tcGlsZVBhdGhJbk1vZGVsKGV4cHJlc3Npb24pfSdgO1xuXG5cdFx0b3V0VmFsdWUgKz0gZXhwcmVzc2lvbi50eXBlID8gYCwgdHlwZTogJyR7ZXhwcmVzc2lvbi50eXBlfSdgIDogYCwgdGFyZ2V0VHlwZTogJ2FueSdgO1xuXHRcdGlmIChleHByZXNzaW9uLm1vZGUpIHtcblx0XHRcdG91dFZhbHVlICs9IGAsIG1vZGU6ICcke2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24ubW9kZSl9J2A7XG5cdFx0fVxuXHRcdGlmIChoYXNFbGVtZW50cyhleHByZXNzaW9uLmNvbnN0cmFpbnRzKSkge1xuXHRcdFx0b3V0VmFsdWUgKz0gYCwgY29uc3RyYWludHM6ICR7Y29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbi5jb25zdHJhaW50cyl9YDtcblx0XHR9XG5cdFx0aWYgKGhhc0VsZW1lbnRzKGV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucykpIHtcblx0XHRcdG91dFZhbHVlICs9IGAsIGZvcm1hdE9wdGlvbnM6ICR7Y29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zKX1gO1xuXHRcdH1cblx0XHRpZiAoaGFzRWxlbWVudHMoZXhwcmVzc2lvbi5wYXJhbWV0ZXJzKSkge1xuXHRcdFx0b3V0VmFsdWUgKz0gYCwgcGFyYW1ldGVyczogJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLnBhcmFtZXRlcnMpfWA7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdHJldHVybiBzaW5nbGVQYXRoID8gb3V0VmFsdWUgOiBgeyR7b3V0VmFsdWV9fWA7XG59XG5cbmZ1bmN0aW9uIGhhc0VsZW1lbnRzKG9iajogb2JqZWN0IHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdHJldHVybiAhIW9iaiAmJiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA+IDA7XG59XG5cbi8qKlxuICogQ29tcGlsZSBhIGJpbmRpbmcgZXhwcmVzc2lvbiBwYXRoLlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGV4cHJlc3Npb24gdG8gY29tcGlsZS5cbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBwYXRoLlxuICovXG5mdW5jdGlvbiBjb21waWxlUGF0aEluTW9kZWw8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KGV4cHJlc3Npb246IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPik6IHN0cmluZyB7XG5cdHJldHVybiBgJHtleHByZXNzaW9uLm1vZGVsTmFtZSA/IGV4cHJlc3Npb24ubW9kZWxOYW1lICsgXCI+XCIgOiBcIlwifSR7ZXhwcmVzc2lvbi5wYXRofWA7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztFQW9JQTtBQUNBO0FBQ0E7O0VBdUNPLFNBQVNBLFVBQVVBLENBQUNDLGFBQXNCLEVBQTZCO0lBQzdFLE9BQVFBLGFBQWEsRUFBZUMsS0FBSyxLQUFLLFVBQVU7RUFDekQ7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7RUFIQUMsUUFBQSxDQUFBSCxVQUFBLEdBQUFBLFVBQUE7RUFxQ08sTUFBTUksZ0JBQXVELEdBQUc7SUFDdEUsYUFBYSxFQUFFO01BQUVDLElBQUksRUFBRTtJQUFrQyxDQUFDO0lBQzFELFVBQVUsRUFBRTtNQUFFQSxJQUFJLEVBQUU7SUFBK0IsQ0FBQztJQUNwRCxVQUFVLEVBQUU7TUFBRUEsSUFBSSxFQUFFO0lBQStCLENBQUM7SUFDcEQsb0JBQW9CLEVB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
|
|
2117
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc1Byb3BlcnR5Iiwic2VydmljZU9iamVjdCIsIl90eXBlIiwiX2V4cG9ydHMiLCJpc0FjdGlvblBhcmFtZXRlciIsIkVETV9UWVBFX01BUFBJTkciLCJ0eXBlIiwiY29uc3RyYWludHMiLCIkUHJlY2lzaW9uIiwiJFY0IiwiJFNjYWxlIiwiJE1heExlbmd0aCIsIiROdWxsYWJsZSIsInVucmVzb2x2YWJsZUV4cHJlc3Npb24iLCJlc2NhcGVYbWxBdHRyaWJ1dGUiLCJpbnB1dFN0cmluZyIsInJlcGxhY2UiLCJoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImV4cHJlc3Npb25zIiwiQXJyYXkiLCJfa2V5IiwiZmluZCIsImV4cHIiLCJ1bmRlZmluZWQiLCJfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsIiwiYSIsImIiLCJ2YWx1ZSIsIm9wZXJhdG9yIiwib3BlcmFuZDEiLCJvcGVyYW5kMiIsIm9wZXJhbmQiLCJvcGVyYW5kcyIsImV2ZXJ5IiwiZXhwcmVzc2lvbiIsInNvbWUiLCJvdGhlckV4cHJlc3Npb24iLCJjb25kaXRpb24iLCJvblRydWUiLCJvbkZhbHNlIiwiYUV4cHJlc3Npb25zIiwiYkV4cHJlc3Npb25zIiwiaW5kZXgiLCJwYXRoSW5Nb2RlbCIsIm1vZGVsTmFtZSIsInBhdGgiLCJ0YXJnZXRFbnRpdHlTZXQiLCJmbiIsInBhcmFtZXRlcnMiLCJiaW5kaW5nUGFyYW1ldGVycyIsIm90aGVyRnVuY3Rpb24iLCJvYmoiLCJyZWYiLCJmbGF0dGVuU2V0RXhwcmVzc2lvbiIsInJlZHVjZSIsInJlc3VsdCIsImNhbmRpZGF0ZXNGb3JGbGF0dGVuaW5nIiwiZm9yRWFjaCIsImNhbmRpZGF0ZSIsImUiLCJwdXNoIiwiaGFzT3Bwb3NpdGVFeHByZXNzaW9ucyIsIm5lZ2F0ZWRFeHByZXNzaW9ucyIsIm1hcCIsIm5vdCIsImkiLCJhbmQiLCJfbGVuMiIsIl9rZXkyIiwid3JhcFByaW1pdGl2ZSIsImlzU3RhdGljRmFsc2UiLCJub25Ucml2aWFsRXhwcmVzc2lvbiIsImZpbHRlciIsImlzRmFsc2UiLCJpc0NvbnN0YW50IiwiY29uc3RhbnQiLCJpc1ZhbGlkIiwiaXNUcnVlIiwib3IiLCJfbGVuMyIsIl9rZXkzIiwiaXNTdGF0aWNUcnVlIiwiYWRkIiwibGVmdE9wZXJhbmQiLCJyaWdodE9wZXJhbmQiLCJhcml0aG1ldGljIiwic3VidHJhY3QiLCJtdWx0aXBseSIsImRpdmlkZSIsIm1vZHVsbyIsIm5lZ2F0ZSIsImZsb29yIiwibGVmdEV4cHJlc3Npb24iLCJyaWdodEV4cHJlc3Npb24iLCJzdW0iLCJkaWZmIiwiZGl2IiwibW9kIiwiTWF0aCIsIm11bHQiLCJpc0NvbXBhcmlzb24iLCJpc1RydXRoeSIsImJpbmRpbmdFeHByZXNzaW9uIiwidmlzaXRlZE5hdmlnYXRpb25QYXRocyIsInBhdGhWaXNpdG9yIiwidGFyZ2V0UGF0aCIsImxvY2FsUGF0aCIsImNvbmNhdCIsImpvaW4iLCJjb25zdGFudFZhbHVlIiwiaXNBcnJheSIsImlzUHJpbWl0aXZlT2JqZWN0IiwidmFsdWVPZiIsIk9iamVjdCIsImVudHJpZXMiLCJwbGFpbkV4cHJlc3Npb24iLCJfcmVmIiwia2V5IiwidmFsIiwid3JhcHBlZFZhbHVlIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJ0YXJnZXRUeXBlIiwic3RhcnRzV2l0aCIsInBhdGhJbk1vZGVsUmVnZXgiLCJwYXRoSW5Nb2RlbFJlZ2V4TWF0Y2giLCJleGVjIiwiaXNOYU4iLCJOdW1iZXIiLCJyZWZlcmVuY2UiLCJiaW5kU3RhdGUiLCJzdGF0ZU9iamVjdFByb3AiLCJfX2JpbmRpbmdJbmZvIiwidG9TdHJpbmciLCJtb2RlbCIsInNvbWV0aGluZyIsImlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIiwibWF5YmVDb25zdGFudCIsImlzUGF0aEluTW9kZWxFeHByZXNzaW9uIiwibWF5YmVCaW5kaW5nIiwiaXNDb21wbGV4VHlwZUV4cHJlc3Npb24iLCJpc0NvbmNhdEV4cHJlc3Npb24iLCJpc0lmRWxzZUV4cHJlc3Npb24iLCJpc1VuZGVmaW5lZEV4cHJlc3Npb24iLCJleHByZXNzaW9uQXNFeHByZXNzaW9uIiwib2JqZWN0VHlwZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImlzQ29tcGxleEFubm90YXRpb25FeHByZXNzaW9uIiwiYW5ub3RhdGlvblZhbHVlIiwiQ09OVkVSVEVSX1JPT1RfU1lNQk9MIiwic2V0Q29udmVydGVyUm9vdFN5bWJvbCIsImNvbnZlcnRlclJvb3RTeW1ib2wiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJkZWZhdWx0VmFsdWUiLCJjb252ZXJ0ZXJSb290IiwiYW5ub3RhdGlvbklmRXhwcmVzc2lvbiIsIiRJZiIsInBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbiIsIiROb3QiLCJlcXVhbCIsIiRFcSIsIm5vdEVxdWFsIiwiJE5lIiwiZ3JlYXRlclRoYW4iLCIkR3QiLCJncmVhdGVyT3JFcXVhbCIsIiRHZSIsImxlc3NUaGFuIiwiJEx0IiwibGVzc09yRXF1YWwiLCIkTGUiLCIkT3IiLCJvckNvbmRpdGlvbiIsIiRBbmQiLCJhbmRDb25kaXRpb24iLCJjb21wYXJpc29uIiwiJEluIiwiJEhhcyIsIiRBZGQiLCIkU3ViIiwiJE11bCIsIiREaXYiLCIkRGl2QnkiLCIkTW9kIiwiJE5lZyIsImFubm90YXRpb25BcHBseUV4cHJlc3Npb24iLCJoYXNPd25Qcm9wZXJ0eSIsIiRQYXRoIiwiJEZ1bmN0aW9uIiwiJEFwcGx5IiwicmVzb2x2ZUVudW1WYWx1ZSIsIiRFbnVtTWVtYmVyIiwiaWZFbHNlIiwiY29udmVydFN1YkFwcGx5UGFyYW1ldGVycyIsImFwcGx5UGFyYW0iLCJhcHBseVBhcmFtQ29udmVydGVkIiwiYXBwbHlFeHByZXNzaW9uIiwicGFyYW1ldGVyIiwidGVtcGxhdGUiLCJ0ZW1wbGF0ZVBhcmFtcyIsInNsaWNlIiwidGFyZ2V0T2JqZWN0IiwiJE5hbWUiLCIkTGFiZWxlZEVsZW1lbnQiLCJsZWZ0VmFsdWVJbnQiLCJyaWdodFZhbHVlSW50IiwiYWxsQ2hpbGRyZW5Db25zdGFudHMiLCJpdGVtIiwicmlnaHRWYWx1ZXMiLCJpbmNsdWRlcyIsImNoZWNrVW5kZWZpbmVkIiwibGVmdCIsInJpZ2h0IiwicmVkdWNlZCIsImNvbmRpdGlvbkV4cHJlc3Npb24iLCJvblRydWVFeHByZXNzaW9uIiwib25GYWxzZUV4cHJlc3Npb24iLCJwYXRoSWR4IiwibXlJZkVsc2VFeHByZXNzaW9uIiwiZm9ybWF0UmVzdWx0IiwiYWxsUGFydHMiLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsImNvbnN0YW50UGF0aCIsInVuc2hpZnQiLCJKU09OIiwic3RyaW5naWZ5IiwiaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dCIsImZvcm1hdHRlckZ1bmN0aW9uIiwiY29udGV4dEVudGl0eVR5cGUiLCJpZ25vcmVDb21wbGV4VHlwZSIsInBhcmFtZXRlckV4cHJlc3Npb25zIiwia2V5cyIsImZ1bmN0aW9uTmFtZSIsIl9fZnVuY3Rpb25OYW1lIiwiZm9ybWF0dGVyQ2xhc3MiLCJmb3JtYXR0ZXJOYW1lIiwic3BsaXQiLCJteUZvcm1hdEV4cHJlc3Npb24iLCJzZXRVcENvbnN0cmFpbnRzIiwidGFyZ2V0TWFwcGluZyIsInByb3BlcnR5Iiwic2NhbGUiLCJwcmVjaXNpb24iLCJtYXhMZW5ndGgiLCJudWxsYWJsZSIsImFubm90YXRpb25zIiwiVmFsaWRhdGlvbiIsIk1pbmltdW0iLCJtaW5pbXVtIiwiTWF4aW11bSIsIm1heGltdW0iLCJDb21tb24iLCJJc0RpZ2l0U2VxdWVuY2UiLCJpc0RpZ2l0U2VxdWVuY2UiLCJWNCIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIiwiaWdub3JlQ29uc3RyYWludHMiLCJvdXRFeHByZXNzaW9uIiwiZm9ybWF0T3B0aW9ucyIsImluZGV4T2YiLCJhc3NpZ24iLCJwYXJzZUFzU3RyaW5nIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiZmlzY2FsVHlwZSIsImdldEZpc2NhbFR5cGUiLCJ0eXBlc1N1cHBvcnRpbmdQYXJzZUVtcHR5VmFsdWVUb1plcm8iLCJwYXJzZUVtcHR5VmFsdWVUb1plcm8iLCJlbXB0eVN0cmluZyIsIklzRmlzY2FsWWVhciIsIklzRmlzY2FsUGVyaW9kIiwiSXNGaXNjYWxZZWFyUGVyaW9kIiwiSXNGaXNjYWxRdWFydGVyIiwiSXNGaXNjYWxZZWFyUXVhcnRlciIsIklzRmlzY2FsV2VlayIsIklzRmlzY2FsWWVhcldlZWsiLCJJc0RheU9mRmlzY2FsWWVhciIsImFkZFR5cGVJbmZvcm1hdGlvbiIsIm9Gb3JtYXRPcHRpb25zIiwib0NvbnN0cmFpbnRPcHRpb25zIiwiX2dldENvbXBsZXhUeXBlRm9ybWF0T3B0aW9uc0Zyb21GaXJzdFBhcmFtIiwidW9tUGF0aCIsIm1vZGUiLCJwcmVzZXJ2ZURlY2ltYWxzIiwic2tpcERlY2ltYWxzVmFsaWRhdGlvbiIsImN1cnJlbmN5UGF0aCIsIm1heEZyYWN0aW9uRGlnaXRzIiwicGFyYW0iLCJzaG93TnVtYmVyIiwic2hvd01lYXN1cmUiLCJkZWNpbWFsUGFkZGluZyIsImZ1bmMiLCJvbiIsImlzRm9ybWF0dGluZ0ZuIiwiaXNFbXB0eSIsImFCaW5kaW5ncyIsImZpbmFsRXhwcmVzc2lvbiIsImFsd2F5c0tlZXBUYXJnZXRUeXBlIiwiaXNFeHByZXNzaW9uU3RhdGljYWxseVJlc29sdmFibGUiLCJleHAiLCJyZWZlcmVuY2VkUGF0aHMiLCJwYXRoRXhwIiwicCIsImdldFN0YXRpY2FsbHlSZXNvbHZhYmxlRXhwcmVzc2lvbiIsIm5ld09wZXJhbmRzIiwiX2xlbjQiLCJpbkV4cHJlc3Npb25zIiwiX2tleTQiLCJjb25jYXRlbmF0ZWQiLCJteUNvbmNhdEV4cHJlc3Npb24iLCJpbkV4cHJlc3Npb24iLCJleHByZXNzaW9uVHlwZSIsInRyYW5zZm9ybUZ1bmN0aW9uIiwiaW5jbHVkZUFsbEV4cHJlc3Npb24iLCJzdWJFeHByZXNzaW9uIiwiYmluZGluZ1BhcmFtZXRlciIsIm5lZWRQYXJlbnRoZXNpcyIsImNvbXBpbGVDb25zdGFudE9iamVjdCIsImlzTnVsbGFibGUiLCJvYmplY3RzIiwicHJvcGVydGllcyIsImNoaWxkUmVzdWx0IiwiY29tcGlsZUV4cHJlc3Npb24iLCJjb21waWxlQ29uc3RhbnQiLCJlbWJlZGRlZEluQmluZGluZyIsImRvTm90U3RyaW5naWZ5IiwiY29tcGlsZVBhdGhJbk1vZGVsRXhwcmVzc2lvbiIsImV4cHJlc3Npb25Gb3JCaW5kaW5nIiwiZW1iZWRkZWRTZXBhcmF0b3IiLCJjb21wbGV4QmluZGluZ0RlZmluaXRpb24iLCJjb21waWxlUGF0aEluTW9kZWwiLCJvdXRCaW5kaW5nIiwic2VwYXJhdG9yIiwiY29tcGlsZUNvbXBsZXhUeXBlRXhwcmVzc2lvbiIsImNvbXBpbGVQYXRoUGFyYW1ldGVyIiwib3V0cHV0RW5kIiwiaGFzRWxlbWVudHMiLCJ3cmFwQmluZGluZ0V4cHJlc3Npb24iLCJwYXJlbnRoZXNpc1JlcXVpcmVkIiwia2VlcFRhcmdldFR5cGUiLCJoYXNFbWJlZGRlZEZ1bmN0aW9uQ2FsbE9yQmluZGluZyIsInN1YkZuIiwic3ViU3ViRm4iLCJhcmd1bWVudFN0cmluZyIsImFyZyIsImZuQ2FsbCIsInN1YnN0cmluZyIsImNvbXBhcmlzb25FeHByZXNzaW9uIiwiY29tcGlsZUNvbXBhcmlzb25FeHByZXNzaW9uIiwiaWZFbHNlRXhwcmVzc2lvbiIsInNldEV4cHJlc3Npb24iLCJjb25jYXRFeHByZXNzaW9uIiwibmVzdGVkRXhwcmVzc2lvbiIsImxlbmd0aEV4cHJlc3Npb24iLCJub3RFeHByZXNzaW9uIiwiYXJpdGhtZXRpY0V4cHJlc3Npb24iLCJjb21waWxlQXJpdGhtZXRpY0V4cHJlc3Npb24iLCJ0cnV0aHlFeHByZXNzaW9uIiwiZm9ybWF0dGVyRXhwcmVzc2lvbiIsImNvbXBpbGVGb3JtYXR0ZXJFeHByZXNzaW9uIiwiY29tcGxleFR5cGVFeHByZXNzaW9uIiwiY29tcGlsZU9wZXJhbmQiLCJjb21waWxlZE9wZXJhbmQiLCJjb2xsZWN0aW9uIiwiZmxhZ3MiLCJwYXJ0cyIsInNpbmdsZVBhdGgiLCJvdXRWYWx1ZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQmluZGluZ1Rvb2xraXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuXHRBY3Rpb25QYXJhbWV0ZXIsXG5cdEFkZEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRBZGRDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdEFuZEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRBbmRDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEJvb2xlYW4sXG5cdENvbmRpdGlvbmFsQ2hlY2tPclZhbHVlLFxuXHRDb252ZXJ0ZWRNZXRhZGF0YSxcblx0RGl2QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdERpdkJ5QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdERpdkJ5Q29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHREaXZDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdEVudGl0eVNldCxcblx0RW50aXR5VHlwZSxcblx0RXFBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0RXFDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdEdlQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEdlQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRHdEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRHdENvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0SGFzQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEhhc0NvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0SWZBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0SWZBbm5vdGF0aW9uRXhwcmVzc2lvblZhbHVlLFxuXHRJbkFubm90YXRpb25FeHByZXNzaW9uLFxuXHRJbkNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0TGVBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0TGVDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdEx0QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEx0Q29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRNb2RBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0TW9kQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRNdWxBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0TXVsQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHROZUFubm90YXRpb25FeHByZXNzaW9uLFxuXHROZUNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0TmVnQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdE5lZ0NvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0Tm90QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdE5vdENvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0T3JBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0T3JDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0UGF0aENvbmRpdGlvbkV4cHJlc3Npb24sXG5cdFByb3BlcnR5LFxuXHRQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSxcblx0U3ViQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdFN1YkNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0Q29uc3RhbnRFeHByZXNzaW9uIGFzIFZvY2FiQ29uc3RhbnRFeHByZXNzaW9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQ29tbW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB7IHJlc29sdmVFbnVtVmFsdWUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQW5ub3RhdGlvbkVudW1cIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ0luZm9Ib2xkZXIgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5cbmV4cG9ydCB0eXBlIFByaW1pdGl2ZVR5cGUgPSBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQgfCBib29sZWFuIHwgb2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZDtcbnR5cGUgRGVmaW5lZFByaW1pdGl2ZVR5cGUgPSBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQgfCBib29sZWFuIHwgb2JqZWN0O1xudHlwZSBQcmltaXRpdmVUeXBlQ2FzdDxQPiA9IFAgZXh0ZW5kcyBTdHJpbmcgPyBzdHJpbmcgOiBQIGV4dGVuZHMgQm9vbGVhbiA/IGJvb2xlYW4gOiBQIGV4dGVuZHMgTnVtYmVyID8gbnVtYmVyIDogUDtcbnR5cGUgQmFzZUV4cHJlc3Npb248X1Q+ID0ge1xuXHRfdHlwZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybWF0T3B0aW9ucyA9IFBhcnRpYWw8e1xuXHRjdXN0b21Vbml0czogUmVjb3JkPHN0cmluZywgb2JqZWN0Pjtcblx0Y3VzdG9tQ3VycmVuY2llczogUmVjb3JkPHN0cmluZywgb2JqZWN0Pjtcblx0ZGVjaW1hbHM6IG51bWJlcjtcblx0ZW1wdHlTdHJpbmc6IG51bGwgfCBudW1iZXIgfCBzdHJpbmc7XG5cdGZpc2NhbFR5cGU6IHN0cmluZztcblx0Z3JvdXBpbmdFbmFibGVkOiBib29sZWFuO1xuXHRtYXhGcmFjdGlvbkRpZ2l0czogbnVtYmVyO1xuXHRtYXhJbnRlZ2VyRGlnaXRzOiBudW1iZXI7XG5cdG1pbkZyYWN0aW9uRGlnaXRzOiBudW1iZXI7XG5cdG1pbkludGVnZXJEaWdpdHM6IG51bWJlcjtcblx0cGFyc2VBc1N0cmluZzogYm9vbGVhbjtcblx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nOiBib29sZWFuO1xuXHRwYXR0ZXJuOiBzdHJpbmc7XG5cdHByZWNpc2lvbjogbnVtYmVyO1xuXHRwcmVzZXJ2ZURlY2ltYWxzOiBib29sZWFuO1xuXHRzaG9ydERlY2ltYWxzOiBudW1iZXI7XG5cdHNob3J0UmVmTnVtYmVyOiBudW1iZXI7XG5cdHNob3dNZWFzdXJlOiBib29sZWFuO1xuXHRzaG93TnVtYmVyOiBib29sZWFuO1xuXHRzaG93U2NhbGU6IGJvb2xlYW47XG5cdHN0eWxlOiBzdHJpbmc7XG59PjtcblxuZXhwb3J0IHR5cGUgQ29uc3RhbnRFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkNvbnN0YW50XCI7XG5cdHZhbHVlOiBUO1xufTtcblxudHlwZSBTZXRPcGVyYXRvciA9IFwiJiZcIiB8IFwifHxcIjtcbmV4cG9ydCB0eXBlIFNldEV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxib29sZWFuPiAmIHtcblx0X3R5cGU6IFwiU2V0XCI7XG5cdG9wZXJhdG9yOiBTZXRPcGVyYXRvcjtcblx0b3BlcmFuZHM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdO1xufTtcblxuZXhwb3J0IHR5cGUgTm90RXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPGJvb2xlYW4+ICYge1xuXHRfdHlwZTogXCJOb3RcIjtcblx0b3BlcmFuZDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcblxuZXhwb3J0IHR5cGUgVHJ1dGh5RXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPGJvb2xlYW4+ICYge1xuXHRfdHlwZTogXCJUcnV0aHlcIjtcblx0b3BlcmFuZDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz47XG59O1xuXG5leHBvcnQgdHlwZSBSZWZlcmVuY2VFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248b2JqZWN0PiAmIHtcblx0X3R5cGU6IFwiUmVmXCI7XG5cdHJlZjogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIEZvcm1hdHRlckV4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiRm9ybWF0dGVyXCI7XG5cdGZuOiBzdHJpbmc7XG5cdHBhcmFtZXRlcnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPltdO1xufTtcblxudHlwZSBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiQ29tcGxleFR5cGVcIjtcblx0dHlwZTogc3RyaW5nO1xuXHRmb3JtYXRPcHRpb25zOiBGb3JtYXRPcHRpb25zO1xuXHRjb25zdHJhaW50czogb2JqZWN0O1xuXHRwYXJhbWV0ZXJzOiBvYmplY3Q7XG5cdGJpbmRpbmdQYXJhbWV0ZXJzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIEZ1bmN0aW9uRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJGdW5jdGlvblwiO1xuXHRvYmo/OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248b2JqZWN0Pjtcblx0Zm46IHN0cmluZztcblx0aXNGb3JtYXR0aW5nRm46IGJvb2xlYW47XG5cdHBhcmFtZXRlcnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPltdO1xufTtcblxuZXhwb3J0IHR5cGUgQ29uY2F0RXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPHN0cmluZz4gJiB7XG5cdF90eXBlOiBcIkNvbmNhdFwiO1xuXHRleHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIExlbmd0aEV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxzdHJpbmc+ICYge1xuXHRfdHlwZTogXCJMZW5ndGhcIjtcblx0cGF0aEluTW9kZWw6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjx1bmtub3duPjtcbn07XG5cbnR5cGUgVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxzdHJpbmc+ICYge1xuXHRfdHlwZTogXCJVbnJlc29sdmFibGVcIjtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYgUGF0aEluTW9kZWxFeHByZXNzaW9uXG4gKi9cbmV4cG9ydCB0eXBlIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJQYXRoSW5Nb2RlbFwiO1xuXHRtb2RlbE5hbWU/OiBzdHJpbmc7XG5cdHBhdGg6IHN0cmluZztcblx0dGFyZ2V0RW50aXR5U2V0PzogRW50aXR5U2V0O1xuXHR0eXBlPzogc3RyaW5nO1xuXHRjb25zdHJhaW50cz86IEJpbmRpbmdDb25zdHJhaW50cztcblx0cGFyYW1ldGVycz86IG9iamVjdDtcblx0dGFyZ2V0VHlwZT86IHN0cmluZztcblx0bW9kZT86IHN0cmluZztcblx0Zm9ybWF0T3B0aW9ucz86IEZvcm1hdE9wdGlvbnM7XG5cdGFsd2F5c0tlZXBUYXJnZXRUeXBlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEVtYmVkZGVkVUk1QmluZGluZ0V4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiRW1iZWRkZWRCaW5kaW5nXCI7XG5cdHZhbHVlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBFbWJlZGRlZFVJNUV4cHJlc3Npb25CaW5kaW5nRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCI7XG5cdHZhbHVlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDb21wYXJpc29uT3BlcmF0b3IgPSBcIj09PVwiIHwgXCIhPT1cIiB8IFwiPj1cIiB8IFwiPlwiIHwgXCI8PVwiIHwgXCI8XCIgfCBcIkhhc1wiIHwgXCJJblwiO1xuZXhwb3J0IHR5cGUgQ29tcGFyaXNvbkV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxib29sZWFuPiAmIHtcblx0X3R5cGU6IFwiQ29tcGFyaXNvblwiO1xuXHRvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yO1xuXHRvcGVyYW5kMTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+O1xuXHRvcGVyYW5kMjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+O1xufTtcblxuZXhwb3J0IHR5cGUgQXJpdGhtZXRpY09wZXJhdG9yID0gXCIrXCIgfCBcIi1cIiB8IFwiKlwiIHwgXCIvXCIgfCBcIiVcIiB8IFwiTmVnXCIgfCBcIkZsb29yXCI7XG5leHBvcnQgdHlwZSBBcml0aG1ldGljRXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPG51bWJlcj4gJiB7XG5cdF90eXBlOiBcIkFyaXRobWV0aWNcIjtcblx0b3BlcmF0b3I6IEFyaXRobWV0aWNPcGVyYXRvcjtcblx0b3BlcmFuZDE6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPjtcblx0b3BlcmFuZDI6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPjtcbn07XG5leHBvcnQgdHlwZSBJZkVsc2VFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIklmRWxzZVwiO1xuXHRjb25kaXRpb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0b25UcnVlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdG9uRmFsc2U6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcbn07XG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wZXJ0eShzZXJ2aWNlT2JqZWN0OiB1bmtub3duKTogc2VydmljZU9iamVjdCBpcyBQcm9wZXJ0eSB7XG5cdHJldHVybiAoc2VydmljZU9iamVjdCBhcyBQcm9wZXJ0eSk/Ll90eXBlID09PSBcIlByb3BlcnR5XCI7XG59XG5mdW5jdGlvbiBpc0FjdGlvblBhcmFtZXRlcihzZXJ2aWNlT2JqZWN0OiB1bmtub3duKTogc2VydmljZU9iamVjdCBpcyBBY3Rpb25QYXJhbWV0ZXIge1xuXHRyZXR1cm4gKHNlcnZpY2VPYmplY3QgYXMgQWN0aW9uUGFyYW1ldGVyKT8uX3R5cGUgPT09IFwiQWN0aW9uUGFyYW1ldGVyXCI7XG59XG5cbi8qKlxuICogQW4gZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byB0eXBlIFQuXG4gKiBAdHlwZWRlZiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IHR5cGUgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+ID1cblx0fCBVbnJlc29sdmFibGVQYXRoRXhwcmVzc2lvblxuXHR8IENvbnN0YW50RXhwcmVzc2lvbjxUPlxuXHR8IFNldEV4cHJlc3Npb25cblx0fCBOb3RFeHByZXNzaW9uXG5cdHwgVHJ1dGh5RXhwcmVzc2lvblxuXHR8IENvbmNhdEV4cHJlc3Npb25cblx0fCBMZW5ndGhFeHByZXNzaW9uXG5cdHwgUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+XG5cdHwgRW1iZWRkZWRVSTVCaW5kaW5nRXhwcmVzc2lvbjxUPlxuXHR8IEVtYmVkZGVkVUk1RXhwcmVzc2lvbkJpbmRpbmdFeHByZXNzaW9uPFQ+XG5cdHwgQ29tcGFyaXNvbkV4cHJlc3Npb25cblx0fCBJZkVsc2VFeHByZXNzaW9uPFQ+XG5cdHwgRm9ybWF0dGVyRXhwcmVzc2lvbjxUPlxuXHR8IENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPlxuXHR8IFJlZmVyZW5jZUV4cHJlc3Npb25cblx0fCBGdW5jdGlvbkV4cHJlc3Npb248VD5cblx0fCBBcml0aG1ldGljRXhwcmVzc2lvbjtcblxudHlwZSBUeXBlTWFwcGluZ0RlZmluaXRpb24gPSB7XG5cdHR5cGU6IHN0cmluZztcblx0Y29uc3RyYWludHM/OiB7XG5cdFx0JFByZWNpc2lvbj86IHN0cmluZztcblx0XHQkVjQ/OiBzdHJpbmc7XG5cdFx0JFNjYWxlPzogc3RyaW5nO1xuXHRcdCRNYXhMZW5ndGg/OiBzdHJpbmc7XG5cdFx0JE51bGxhYmxlPzogc3RyaW5nO1xuXHRcdFwiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIj86IHN0cmluZztcblx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkV4Y2x1c2l2ZVwiPzogc3RyaW5nO1xuXHRcdFwiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIj86IHN0cmluZztcblx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkV4Y2x1c2l2ZVwiPzogc3RyaW5nO1xuXHRcdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RpZ2l0U2VxdWVuY2VcIj86IHN0cmluZztcblx0fTtcbn07XG5leHBvcnQgY29uc3QgRURNX1RZUEVfTUFQUElORzogUmVjb3JkPHN0cmluZywgVHlwZU1hcHBpbmdEZWZpbml0aW9uPiA9IHtcblx0XCJFZG0uQm9vbGVhblwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQm9vbGVhblwiIH0sXG5cdFwiRWRtLkJ5dGVcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkJ5dGVcIiB9LFxuXHRcIkVkbS5EYXRlXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EYXRlXCIgfSxcblx0XCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjoge1xuXHRcdGNvbnN0cmFpbnRzOiB7XG5cdFx0XHQkUHJlY2lzaW9uOiBcInByZWNpc2lvblwiLFxuXHRcdFx0JFY0OiBcIlY0XCJcblx0XHR9LFxuXHRcdHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGF0ZVRpbWVPZmZzZXRcIlxuXHR9LFxuXHRcIkVkbS5EZWNpbWFsXCI6IHtcblx0XHRjb25zdHJhaW50czoge1xuXHRcdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bS8kRGVjaW1hbFwiOiBcIm1pbmltdW1cIixcblx0XHRcdFwiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW1AT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuRXhjbHVzaXZlXCI6IFwibWluaW11bUV4Y2x1c2l2ZVwiLFxuXHRcdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bS8kRGVjaW1hbFwiOiBcIm1heGltdW1cIixcblx0XHRcdFwiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW1AT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuRXhjbHVzaXZlXCI6IFwibWF4aW11bUV4Y2x1c2l2ZVwiLFxuXHRcdFx0JFByZWNpc2lvbjogXCJwcmVjaXNpb25cIixcblx0XHRcdCRTY2FsZTogXCJzY2FsZVwiXG5cdFx0fSxcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRlY2ltYWxcIlxuXHR9LFxuXHRcIkVkbS5Eb3VibGVcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiIH0sXG5cdFwiRWRtLkd1aWRcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkd1aWRcIiB9LFxuXHRcIkVkbS5JbnQxNlwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50MTZcIiB9LFxuXHRcIkVkbS5JbnQzMlwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50MzJcIiB9LFxuXHRcIkVkbS5JbnQ2NFwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50NjRcIiB9LFxuXHRcIkVkbS5TQnl0ZVwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU0J5dGVcIiB9LFxuXHRcIkVkbS5TaW5nbGVcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlNpbmdsZVwiIH0sXG5cdFwiRWRtLlN0cmVhbVwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyZWFtXCIgfSxcblx0XCJFZG0uQmluYXJ5XCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJlYW1cIiB9LFxuXHRcIkVkbS5TdHJpbmdcIjoge1xuXHRcdGNvbnN0cmFpbnRzOiB7XG5cdFx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEaWdpdFNlcXVlbmNlXCI6IFwiaXNEaWdpdFNlcXVlbmNlXCIsXG5cdFx0XHQkTWF4TGVuZ3RoOiBcIm1heExlbmd0aFwiLFxuXHRcdFx0JE51bGxhYmxlOiBcIm51bGxhYmxlXCJcblx0XHR9LFxuXHRcdHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCJcblx0fSxcblx0XCJFZG0uVGltZU9mRGF5XCI6IHtcblx0XHRjb25zdHJhaW50czoge1xuXHRcdFx0JFByZWNpc2lvbjogXCJwcmVjaXNpb25cIlxuXHRcdH0sXG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5UaW1lT2ZEYXlcIlxuXHR9XG59O1xuXG4vKipcbiAqIEFuIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gdHlwZSBULCBvciBhIGNvbnN0YW50IHZhbHVlIG9mIHR5cGUgVFxuICovXG5leHBvcnQgdHlwZSBFeHByZXNzaW9uT3JQcmltaXRpdmU8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+ID0gQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHwgVDtcblxuZXhwb3J0IGNvbnN0IHVucmVzb2x2YWJsZUV4cHJlc3Npb246IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uID0ge1xuXHRfdHlwZTogXCJVbnJlc29sdmFibGVcIlxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVhtbEF0dHJpYnV0ZShpbnB1dFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIGlucHV0U3RyaW5nLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24oLi4uZXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPltdKTogYm9vbGVhbiB7XG5cdHJldHVybiBleHByZXNzaW9ucy5maW5kKChleHByKSA9PiBleHByLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiKSAhPT0gdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBDaGVjayB0d28gZXhwcmVzc2lvbnMgZm9yIChkZWVwKSBlcXVhbGl0eS5cbiAqIEBwYXJhbSBhXG4gKiBAcGFyYW0gYlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB0d28gZXhwcmVzc2lvbnMgYXJlIGVxdWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsPFQ+KGE6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiwgYjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+KTogYm9vbGVhbiB7XG5cdGlmIChhLl90eXBlICE9PSBiLl90eXBlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0c3dpdGNoIChhLl90eXBlKSB7XG5cdFx0Y2FzZSBcIlVucmVzb2x2YWJsZVwiOlxuXHRcdFx0cmV0dXJuIGZhbHNlOyAvLyBVbnJlc29sdmFibGUgaXMgbmV2ZXIgZXF1YWwgdG8gYW55dGhpbmcgZXZlbiBpdHNlbGZcblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRjYXNlIFwiRW1iZWRkZWRCaW5kaW5nXCI6XG5cdFx0Y2FzZSBcIkVtYmVkZGVkRXhwcmVzc2lvbkJpbmRpbmdcIjpcblx0XHRcdHJldHVybiBhLnZhbHVlID09PSAoYiBhcyBDb25zdGFudEV4cHJlc3Npb248VD4pLnZhbHVlO1xuXHRcdGNhc2UgXCJBcml0aG1ldGljXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLm9wZXJhdG9yID09PSAoYiBhcyBBcml0aG1ldGljRXhwcmVzc2lvbikub3BlcmF0b3IgJiZcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9wZXJhbmQxLCAoYiBhcyBBcml0aG1ldGljRXhwcmVzc2lvbikub3BlcmFuZDEpICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vcGVyYW5kMiwgKGIgYXMgQXJpdGhtZXRpY0V4cHJlc3Npb24pLm9wZXJhbmQyKVxuXHRcdFx0KTtcblx0XHRjYXNlIFwiTm90XCI6XG5cdFx0XHRyZXR1cm4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9wZXJhbmQsIChiIGFzIE5vdEV4cHJlc3Npb24pLm9wZXJhbmQpO1xuXHRcdGNhc2UgXCJUcnV0aHlcIjpcblx0XHRcdHJldHVybiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub3BlcmFuZCwgKGIgYXMgVHJ1dGh5RXhwcmVzc2lvbikub3BlcmFuZCk7XG5cdFx0Y2FzZSBcIlNldFwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS5vcGVyYXRvciA9PT0gKGIgYXMgU2V0RXhwcmVzc2lvbikub3BlcmF0b3IgJiZcblx0XHRcdFx0YS5vcGVyYW5kcy5sZW5ndGggPT09IChiIGFzIFNldEV4cHJlc3Npb24pLm9wZXJhbmRzLmxlbmd0aCAmJlxuXHRcdFx0XHRhLm9wZXJhbmRzLmV2ZXJ5KChleHByZXNzaW9uKSA9PlxuXHRcdFx0XHRcdChiIGFzIFNldEV4cHJlc3Npb24pLm9wZXJhbmRzLnNvbWUoKG90aGVyRXhwcmVzc2lvbikgPT4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChleHByZXNzaW9uLCBvdGhlckV4cHJlc3Npb24pKVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIklmRWxzZVwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLmNvbmRpdGlvbiwgKGIgYXMgSWZFbHNlRXhwcmVzc2lvbjxUPikuY29uZGl0aW9uKSAmJlxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub25UcnVlLCAoYiBhcyBJZkVsc2VFeHByZXNzaW9uPFQ+KS5vblRydWUpICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vbkZhbHNlLCAoYiBhcyBJZkVsc2VFeHByZXNzaW9uPFQ+KS5vbkZhbHNlKVxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJDb21wYXJpc29uXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLm9wZXJhdG9yID09PSAoYiBhcyBDb21wYXJpc29uRXhwcmVzc2lvbikub3BlcmF0b3IgJiZcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9wZXJhbmQxLCAoYiBhcyBDb21wYXJpc29uRXhwcmVzc2lvbikub3BlcmFuZDEpICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vcGVyYW5kMiwgKGIgYXMgQ29tcGFyaXNvbkV4cHJlc3Npb24pLm9wZXJhbmQyKVxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJDb25jYXRcIjpcblx0XHRcdGNvbnN0IGFFeHByZXNzaW9ucyA9IGEuZXhwcmVzc2lvbnM7XG5cdFx0XHRjb25zdCBiRXhwcmVzc2lvbnMgPSAoYiBhcyBDb25jYXRFeHByZXNzaW9uKS5leHByZXNzaW9ucztcblx0XHRcdGlmIChhRXhwcmVzc2lvbnMubGVuZ3RoICE9PSBiRXhwcmVzc2lvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhRXhwcmVzc2lvbnMuZXZlcnkoKGV4cHJlc3Npb24sIGluZGV4KSA9PiB7XG5cdFx0XHRcdHJldHVybiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGV4cHJlc3Npb24sIGJFeHByZXNzaW9uc1tpbmRleF0pO1xuXHRcdFx0fSk7XG5cblx0XHRjYXNlIFwiTGVuZ3RoXCI6XG5cdFx0XHRyZXR1cm4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLnBhdGhJbk1vZGVsLCAoYiBhcyBMZW5ndGhFeHByZXNzaW9uKS5wYXRoSW5Nb2RlbCk7XG5cblx0XHRjYXNlIFwiUGF0aEluTW9kZWxcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGEubW9kZWxOYW1lID09PSAoYiBhcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4pLm1vZGVsTmFtZSAmJlxuXHRcdFx0XHRhLnBhdGggPT09IChiIGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPikucGF0aCAmJlxuXHRcdFx0XHRhLnRhcmdldEVudGl0eVNldCA9PT0gKGIgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+KS50YXJnZXRFbnRpdHlTZXRcblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiRm9ybWF0dGVyXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLmZuID09PSAoYiBhcyBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+KS5mbiAmJlxuXHRcdFx0XHRhLnBhcmFtZXRlcnMubGVuZ3RoID09PSAoYiBhcyBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+KS5wYXJhbWV0ZXJzLmxlbmd0aCAmJlxuXHRcdFx0XHRhLnBhcmFtZXRlcnMuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbCgoYiBhcyBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+KS5wYXJhbWV0ZXJzW2luZGV4XSwgdmFsdWUpKVxuXHRcdFx0KTtcblx0XHRjYXNlIFwiQ29tcGxleFR5cGVcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGEudHlwZSA9PT0gKGIgYXMgQ29tcGxleFR5cGVFeHByZXNzaW9uPFQ+KS50eXBlICYmXG5cdFx0XHRcdGEuYmluZGluZ1BhcmFtZXRlcnMubGVuZ3RoID09PSAoYiBhcyBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4pLmJpbmRpbmdQYXJhbWV0ZXJzLmxlbmd0aCAmJlxuXHRcdFx0XHRhLmJpbmRpbmdQYXJhbWV0ZXJzLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+XG5cdFx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbCgoYiBhcyBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4pLmJpbmRpbmdQYXJhbWV0ZXJzW2luZGV4XSwgdmFsdWUpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0Y2FzZSBcIkZ1bmN0aW9uXCI6XG5cdFx0XHRjb25zdCBvdGhlckZ1bmN0aW9uID0gYiBhcyBGdW5jdGlvbkV4cHJlc3Npb248VD47XG5cdFx0XHRpZiAoYS5vYmogPT09IHVuZGVmaW5lZCB8fCBvdGhlckZ1bmN0aW9uLm9iaiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiBhLm9iaiA9PT0gb3RoZXJGdW5jdGlvbjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS5mbiA9PT0gb3RoZXJGdW5jdGlvbi5mbiAmJlxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub2JqLCBvdGhlckZ1bmN0aW9uLm9iaikgJiZcblx0XHRcdFx0YS5wYXJhbWV0ZXJzLmxlbmd0aCA9PT0gb3RoZXJGdW5jdGlvbi5wYXJhbWV0ZXJzLmxlbmd0aCAmJlxuXHRcdFx0XHRhLnBhcmFtZXRlcnMuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChvdGhlckZ1bmN0aW9uLnBhcmFtZXRlcnNbaW5kZXhdLCB2YWx1ZSkpXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIlJlZlwiOlxuXHRcdFx0cmV0dXJuIGEucmVmID09PSAoYiBhcyBSZWZlcmVuY2VFeHByZXNzaW9uKS5yZWY7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgbmVzdGVkIFNldEV4cHJlc3Npb24gYnkgaW5saW5pbmcgb3BlcmFuZHMgb2YgdHlwZSBTZXRFeHByZXNzaW9uIHdpdGggdGhlIHNhbWUgb3BlcmF0b3IuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvbiB0byBmbGF0dGVuXG4gKiBAcmV0dXJucyBBIG5ldyBTZXRFeHByZXNzaW9uIHdpdGggdGhlIHNhbWUgb3BlcmF0b3JcbiAqL1xuZnVuY3Rpb24gZmxhdHRlblNldEV4cHJlc3Npb24oZXhwcmVzc2lvbjogU2V0RXhwcmVzc2lvbik6IFNldEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gZXhwcmVzc2lvbi5vcGVyYW5kcy5yZWR1Y2UoXG5cdFx0KHJlc3VsdDogU2V0RXhwcmVzc2lvbiwgb3BlcmFuZCkgPT4ge1xuXHRcdFx0Y29uc3QgY2FuZGlkYXRlc0ZvckZsYXR0ZW5pbmcgPVxuXHRcdFx0XHRvcGVyYW5kLl90eXBlID09PSBcIlNldFwiICYmIG9wZXJhbmQub3BlcmF0b3IgPT09IGV4cHJlc3Npb24ub3BlcmF0b3IgPyBvcGVyYW5kLm9wZXJhbmRzIDogW29wZXJhbmRdO1xuXHRcdFx0Y2FuZGlkYXRlc0ZvckZsYXR0ZW5pbmcuZm9yRWFjaCgoY2FuZGlkYXRlKSA9PiB7XG5cdFx0XHRcdGlmIChyZXN1bHQub3BlcmFuZHMuZXZlcnkoKGUpID0+ICFfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGUsIGNhbmRpZGF0ZSkpKSB7XG5cdFx0XHRcdFx0cmVzdWx0Lm9wZXJhbmRzLnB1c2goY2FuZGlkYXRlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0sXG5cdFx0eyBfdHlwZTogXCJTZXRcIiwgb3BlcmF0b3I6IGV4cHJlc3Npb24ub3BlcmF0b3IsIG9wZXJhbmRzOiBbXSB9XG5cdCk7XG59XG5cbi8qKlxuICogRGV0ZWN0cyB3aGV0aGVyIGFuIGFycmF5IG9mIGJvb2xlYW4gZXhwcmVzc2lvbnMgY29udGFpbnMgYW4gZXhwcmVzc2lvbiBhbmQgaXRzIG5lZ2F0aW9uLlxuICogQHBhcmFtIGV4cHJlc3Npb25zIEFycmF5IG9mIGV4cHJlc3Npb25zXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNldCBvZiBleHByZXNzaW9ucyBjb250YWlucyBhbiBleHByZXNzaW9uIGFuZCBpdHMgbmVnYXRpb25cbiAqL1xuZnVuY3Rpb24gaGFzT3Bwb3NpdGVFeHByZXNzaW9ucyhleHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10pOiBib29sZWFuIHtcblx0Y29uc3QgbmVnYXRlZEV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnMubWFwKG5vdCk7XG5cdHJldHVybiBleHByZXNzaW9ucy5zb21lKChleHByZXNzaW9uLCBpbmRleCkgPT4ge1xuXHRcdGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCBuZWdhdGVkRXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGV4cHJlc3Npb24sIG5lZ2F0ZWRFeHByZXNzaW9uc1tpXSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbi8qKlxuICogTG9naWNhbCBgYW5kYCBleHByZXNzaW9uLlxuICpcbiAqIFRoZSBleHByZXNzaW9uIGlzIHNpbXBsaWZpZWQgdG8gZmFsc2UgaWYgdGhpcyBjYW4gYmUgZGVjaWRlZCBzdGF0aWNhbGx5ICh0aGF0IGlzLCBpZiBvbmUgb3BlcmFuZCBpcyBhIGNvbnN0YW50XG4gKiBmYWxzZSBvciBpZiB0aGUgZXhwcmVzc2lvbiBjb250YWlucyBhbiBvcGVyYW5kIGFuZCBpdHMgbmVnYXRpb24pLlxuICogQHBhcmFtIG9wZXJhbmRzIEV4cHJlc3Npb25zIHRvIGNvbm5lY3QgYnkgYGFuZGBcbiAqIEByZXR1cm5zIEV4cHJlc3Npb24gZXZhbHVhdGluZyB0byBib29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbmQoLi4ub3BlcmFuZHM6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPltdKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgZXhwcmVzc2lvbnMgPSBmbGF0dGVuU2V0RXhwcmVzc2lvbih7XG5cdFx0X3R5cGU6IFwiU2V0XCIsXG5cdFx0b3BlcmF0b3I6IFwiJiZcIixcblx0XHRvcGVyYW5kczogb3BlcmFuZHMubWFwKHdyYXBQcmltaXRpdmUpXG5cdH0pLm9wZXJhbmRzO1xuXG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKC4uLmV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGxldCBpc1N0YXRpY0ZhbHNlID0gZmFsc2U7XG5cdGNvbnN0IG5vblRyaXZpYWxFeHByZXNzaW9uID0gZXhwcmVzc2lvbnMuZmlsdGVyKChleHByZXNzaW9uKSA9PiB7XG5cdFx0aWYgKGlzRmFsc2UoZXhwcmVzc2lvbikpIHtcblx0XHRcdGlzU3RhdGljRmFsc2UgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gIWlzQ29uc3RhbnQoZXhwcmVzc2lvbik7XG5cdH0pO1xuXHRpZiAoaXNTdGF0aWNGYWxzZSkge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH0gZWxzZSBpZiAobm9uVHJpdmlhbEV4cHJlc3Npb24ubGVuZ3RoID09PSAwKSB7XG5cdFx0Ly8gUmVzb2x2ZSB0aGUgY29uc3RhbnQgdGhlblxuXHRcdGNvbnN0IGlzVmFsaWQgPSBleHByZXNzaW9ucy5yZWR1Y2UoKHJlc3VsdCwgZXhwcmVzc2lvbikgPT4gcmVzdWx0ICYmIGlzVHJ1ZShleHByZXNzaW9uKSwgdHJ1ZSk7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGlzVmFsaWQpO1xuXHR9IGVsc2UgaWYgKG5vblRyaXZpYWxFeHByZXNzaW9uLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBub25Ucml2aWFsRXhwcmVzc2lvblswXTtcblx0fSBlbHNlIGlmIChoYXNPcHBvc2l0ZUV4cHJlc3Npb25zKG5vblRyaXZpYWxFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIlNldFwiLFxuXHRcdFx0b3BlcmF0b3I6IFwiJiZcIixcblx0XHRcdG9wZXJhbmRzOiBub25Ucml2aWFsRXhwcmVzc2lvblxuXHRcdH07XG5cdH1cbn1cblxuLyoqXG4gKiBMb2dpY2FsIGBvcmAgZXhwcmVzc2lvbi5cbiAqXG4gKiBUaGUgZXhwcmVzc2lvbiBpcyBzaW1wbGlmaWVkIHRvIHRydWUgaWYgdGhpcyBjYW4gYmUgZGVjaWRlZCBzdGF0aWNhbGx5ICh0aGF0IGlzLCBpZiBvbmUgb3BlcmFuZCBpcyBhIGNvbnN0YW50XG4gKiB0cnVlIG9yIGlmIHRoZSBleHByZXNzaW9uIGNvbnRhaW5zIGFuIG9wZXJhbmQgYW5kIGl0cyBuZWdhdGlvbikuXG4gKiBAcGFyYW0gb3BlcmFuZHMgRXhwcmVzc2lvbnMgdG8gY29ubmVjdCBieSBgb3JgXG4gKiBAcmV0dXJucyBFeHByZXNzaW9uIGV2YWx1YXRpbmcgdG8gYm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gb3IoLi4ub3BlcmFuZHM6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPltdKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgZXhwcmVzc2lvbnMgPSBmbGF0dGVuU2V0RXhwcmVzc2lvbih7XG5cdFx0X3R5cGU6IFwiU2V0XCIsXG5cdFx0b3BlcmF0b3I6IFwifHxcIixcblx0XHRvcGVyYW5kczogb3BlcmFuZHMubWFwKHdyYXBQcmltaXRpdmUpXG5cdH0pLm9wZXJhbmRzO1xuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbiguLi5leHByZXNzaW9ucykpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRsZXQgaXNTdGF0aWNUcnVlID0gZmFsc2U7XG5cdGNvbnN0IG5vblRyaXZpYWxFeHByZXNzaW9uID0gZXhwcmVzc2lvbnMuZmlsdGVyKChleHByZXNzaW9uKSA9PiB7XG5cdFx0aWYgKGlzVHJ1ZShleHByZXNzaW9uKSkge1xuXHRcdFx0aXNTdGF0aWNUcnVlID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuICFpc0NvbnN0YW50KGV4cHJlc3Npb24pIHx8IGV4cHJlc3Npb24udmFsdWU7XG5cdH0pO1xuXHRpZiAoaXNTdGF0aWNUcnVlKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHR9IGVsc2UgaWYgKG5vblRyaXZpYWxFeHByZXNzaW9uLmxlbmd0aCA9PT0gMCkge1xuXHRcdC8vIFJlc29sdmUgdGhlIGNvbnN0YW50IHRoZW5cblx0XHRjb25zdCBpc1ZhbGlkID0gZXhwcmVzc2lvbnMucmVkdWNlKChyZXN1bHQsIGV4cHJlc3Npb24pID0+IHJlc3VsdCAmJiBpc1RydWUoZXhwcmVzc2lvbiksIHRydWUpO1xuXHRcdHJldHVybiBjb25zdGFudChpc1ZhbGlkKTtcblx0fSBlbHNlIGlmIChub25Ucml2aWFsRXhwcmVzc2lvbi5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gbm9uVHJpdmlhbEV4cHJlc3Npb25bMF07XG5cdH0gZWxzZSBpZiAoaGFzT3Bwb3NpdGVFeHByZXNzaW9ucyhub25Ucml2aWFsRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIlNldFwiLFxuXHRcdFx0b3BlcmF0b3I6IFwifHxcIixcblx0XHRcdG9wZXJhbmRzOiBub25Ucml2aWFsRXhwcmVzc2lvblxuXHRcdH07XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248bnVtYmVyPiB7XG5cdHJldHVybiBhcml0aG1ldGljKFwiK1wiLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnRyYWN0PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxudW1iZXI+IHtcblx0cmV0dXJuIGFyaXRobWV0aWMoXCItXCIsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHk8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPG51bWJlcj4ge1xuXHRyZXR1cm4gYXJpdGhtZXRpYyhcIipcIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXZpZGU8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPG51bWJlcj4ge1xuXHRyZXR1cm4gYXJpdGhtZXRpYyhcIi9cIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2R1bG88VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPG51bWJlcj4ge1xuXHRyZXR1cm4gYXJpdGhtZXRpYyhcIiVcIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGU8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KG9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxudW1iZXI+IHtcblx0cmV0dXJuIGFyaXRobWV0aWMoXCJOZWdcIiwgb3BlcmFuZCwgbnVsbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbG9vcjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4ob3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPG51bWJlcj4ge1xuXHRyZXR1cm4gYXJpdGhtZXRpYyhcIkZsb29yXCIsIG9wZXJhbmQsIG51bGwpO1xufVxuXG4vKipcbiAqIEFyaXRobWV0aWMgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBvcGVyYXRvclxuICogQHBhcmFtIGxlZnRPcGVyYW5kXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kXG4gKiBAcmV0dXJucyBFeHByZXNzaW9uIGV2YWx1YXRpbmcgdG8gbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcml0aG1ldGljPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0b3BlcmF0b3I6IEFyaXRobWV0aWNPcGVyYXRvcixcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxudW1iZXI+IHtcblx0Y29uc3QgbGVmdEV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKGxlZnRPcGVyYW5kKTtcblx0Y29uc3QgcmlnaHRFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShyaWdodE9wZXJhbmQpO1xuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbihsZWZ0RXhwcmVzc2lvbiwgcmlnaHRFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGlmIChpc0NvbnN0YW50KGxlZnRFeHByZXNzaW9uKSAmJiBpc0NvbnN0YW50KHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRzd2l0Y2ggKG9wZXJhdG9yKSB7XG5cdFx0XHRjYXNlIFwiK1wiOlxuXHRcdFx0XHRpZiAobGVmdEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHwgbGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25zdGFudChyaWdodEV4cHJlc3Npb24udmFsdWUgYXMgbnVtYmVyKTtcblx0XHRcdFx0fSBlbHNlIGlmIChyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHwgcmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgYXMgbnVtYmVyKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBzdW0gPSAobGVmdEV4cHJlc3Npb24udmFsdWUgYXMgbnVtYmVyKSArIChyaWdodEV4cHJlc3Npb24udmFsdWUgYXMgbnVtYmVyKTtcblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KHN1bSk7XG5cdFx0XHRjYXNlIFwiLVwiOlxuXHRcdFx0XHRpZiAobGVmdEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHwgbGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25zdGFudChyaWdodEV4cHJlc3Npb24udmFsdWUgYXMgbnVtYmVyKTtcblx0XHRcdFx0fSBlbHNlIGlmIChyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHwgcmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgYXMgbnVtYmVyKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBkaWZmID0gKGxlZnRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcikgLSAocmlnaHRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcik7XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChkaWZmKTtcblx0XHRcdGNhc2UgXCIvXCI6XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoMCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgZGl2ID0gKGxlZnRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcikgLyAocmlnaHRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcik7XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChkaXYpO1xuXHRcdFx0Y2FzZSBcIk5lZ1wiOlxuXHRcdFx0XHRpZiAobGVmdEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHwgbGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25zdGFudCgwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoLWxlZnRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHRcdGNhc2UgXCIlXCI6XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoMCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgbW9kID0gKGxlZnRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcikgJSAocmlnaHRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcik7XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChtb2QpO1xuXHRcdFx0Y2FzZSBcIkZsb29yXCI6XG5cdFx0XHRcdGlmIChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fCBsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KDApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChNYXRoLmZsb29yKGxlZnRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcikpO1xuXHRcdFx0Y2FzZSBcIipcIjpcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25zdGFudCgwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBtdWx0ID0gKGxlZnRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcikgKiAocmlnaHRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcik7XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChtdWx0KTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIkFyaXRobWV0aWNcIixcblx0XHRcdG9wZXJhdG9yOiBvcGVyYXRvcixcblx0XHRcdG9wZXJhbmQxOiBsZWZ0RXhwcmVzc2lvbixcblx0XHRcdG9wZXJhbmQyOiByaWdodEV4cHJlc3Npb25cblx0XHR9O1xuXHR9XG59XG5cbi8qKlxuICogTG9naWNhbCBgbm90YCBvcGVyYXRvci5cbiAqIEBwYXJhbSBvcGVyYW5kIFRoZSBleHByZXNzaW9uIHRvIHJldmVyc2VcbiAqIEByZXR1cm5zIFRoZSByZXN1bHRpbmcgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byBib29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3Qob3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0b3BlcmFuZCA9IHdyYXBQcmltaXRpdmUob3BlcmFuZCk7XG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKG9wZXJhbmQpKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdH0gZWxzZSBpZiAoaXNDb25zdGFudChvcGVyYW5kKSkge1xuXHRcdHJldHVybiBjb25zdGFudCghb3BlcmFuZC52YWx1ZSk7XG5cdH0gZWxzZSBpZiAoXG5cdFx0dHlwZW9mIG9wZXJhbmQgPT09IFwib2JqZWN0XCIgJiZcblx0XHRvcGVyYW5kLl90eXBlID09PSBcIlNldFwiICYmXG5cdFx0b3BlcmFuZC5vcGVyYXRvciA9PT0gXCJ8fFwiICYmXG5cdFx0b3BlcmFuZC5vcGVyYW5kcy5ldmVyeSgoZXhwcmVzc2lvbikgPT4gaXNDb25zdGFudChleHByZXNzaW9uKSB8fCBpc0NvbXBhcmlzb24oZXhwcmVzc2lvbikpXG5cdCkge1xuXHRcdHJldHVybiBhbmQoLi4ub3BlcmFuZC5vcGVyYW5kcy5tYXAoKGV4cHJlc3Npb24pID0+IG5vdChleHByZXNzaW9uKSkpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdHR5cGVvZiBvcGVyYW5kID09PSBcIm9iamVjdFwiICYmXG5cdFx0b3BlcmFuZC5fdHlwZSA9PT0gXCJTZXRcIiAmJlxuXHRcdG9wZXJhbmQub3BlcmF0b3IgPT09IFwiJiZcIiAmJlxuXHRcdG9wZXJhbmQub3BlcmFuZHMuZXZlcnkoKGV4cHJlc3Npb24pID0+IGlzQ29uc3RhbnQoZXhwcmVzc2lvbikgfHwgaXNDb21wYXJpc29uKGV4cHJlc3Npb24pKVxuXHQpIHtcblx0XHRyZXR1cm4gb3IoLi4ub3BlcmFuZC5vcGVyYW5kcy5tYXAoKGV4cHJlc3Npb24pID0+IG5vdChleHByZXNzaW9uKSkpO1xuXHR9IGVsc2UgaWYgKGlzQ29tcGFyaXNvbihvcGVyYW5kKSkge1xuXHRcdC8vIENyZWF0ZSB0aGUgcmV2ZXJzZSBjb21wYXJpc29uXG5cdFx0c3dpdGNoIChvcGVyYW5kLm9wZXJhdG9yKSB7XG5cdFx0XHRjYXNlIFwiIT09XCI6XG5cdFx0XHRcdHJldHVybiB7IC4uLm9wZXJhbmQsIG9wZXJhdG9yOiBcIj09PVwiIH07XG5cdFx0XHRjYXNlIFwiPFwiOlxuXHRcdFx0XHRyZXR1cm4geyAuLi5vcGVyYW5kLCBvcGVyYXRvcjogXCI+PVwiIH07XG5cdFx0XHRjYXNlIFwiPD1cIjpcblx0XHRcdFx0cmV0dXJuIHsgLi4ub3BlcmFuZCwgb3BlcmF0b3I6IFwiPlwiIH07XG5cdFx0XHRjYXNlIFwiPT09XCI6XG5cdFx0XHRcdHJldHVybiB7IC4uLm9wZXJhbmQsIG9wZXJhdG9yOiBcIiE9PVwiIH07XG5cdFx0XHRjYXNlIFwiPlwiOlxuXHRcdFx0XHRyZXR1cm4geyAuLi5vcGVyYW5kLCBvcGVyYXRvcjogXCI8PVwiIH07XG5cdFx0XHRjYXNlIFwiPj1cIjpcblx0XHRcdFx0cmV0dXJuIHsgLi4ub3BlcmFuZCwgb3BlcmF0b3I6IFwiPFwiIH07XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdF90eXBlOiBcIk5vdFwiLFxuXHRcdFx0XHRcdG9wZXJhbmQ6IG9wZXJhbmRcblx0XHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSBpZiAob3BlcmFuZC5fdHlwZSA9PT0gXCJOb3RcIikge1xuXHRcdHJldHVybiBvcGVyYW5kLm9wZXJhbmQ7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIk5vdFwiLFxuXHRcdG9wZXJhbmQ6IG9wZXJhbmRcblx0fTtcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZXMgd2hldGhlciBhIGJpbmRpbmcgZXhwcmVzc2lvbiBpcyBlcXVhbCB0byB0cnVlIHdpdGggYSBsb29zZSBlcXVhbGl0eS5cbiAqIEBwYXJhbSBvcGVyYW5kIFRoZSBleHByZXNzaW9uIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0aW5nIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gYm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUcnV0aHkob3BlcmFuZDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRpZiAoaXNDb25zdGFudChvcGVyYW5kKSkge1xuXHRcdHJldHVybiBjb25zdGFudCghIW9wZXJhbmQudmFsdWUpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7XG5cdFx0XHRfdHlwZTogXCJUcnV0aHlcIixcblx0XHRcdG9wZXJhbmQ6IG9wZXJhbmRcblx0XHR9O1xuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGJpbmRpbmcgZXhwcmVzc2lvbiB0aGF0IHdpbGwgYmUgZXZhbHVhdGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIG1vZGVsLlxuICogQHBhcmFtIHBhdGhcbiAqIEBwYXJhbSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzXG4gKiBAcGFyYW0gcGF0aFZpc2l0b3JcbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50YXRpbmcgdGhhdCBwYXRoIGluIHRoZSBtb2RlbFxuICogQGRlcHJlY2F0ZWQgdXNlIHBhdGhJbk1vZGVsIGluc3RlYWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdFeHByZXNzaW9uPFRhcmdldFR5cGUgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0cGF0aDogc3RyaW5nLFxuXHRtb2RlbE5hbWU/OiBzdHJpbmcsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUYXJnZXRUeXBlPiB8IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uIHtcblx0cmV0dXJuIHBhdGhJbk1vZGVsKHBhdGgsIG1vZGVsTmFtZSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBiaW5kaW5nIGV4cHJlc3Npb24gdGhhdCB3aWxsIGJlIGV2YWx1YXRlZCBieSB0aGUgY29ycmVzcG9uZGluZyBtb2RlbC5cbiAqIEB0ZW1wbGF0ZSBUYXJnZXRUeXBlXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBvbiB0aGUgbW9kZWxcbiAqIEBwYXJhbSBbbW9kZWxOYW1lXSBUaGUgbmFtZSBvZiB0aGUgbW9kZWxcbiAqIEBwYXJhbSBbdmlzaXRlZE5hdmlnYXRpb25QYXRoc10gVGhlIHBhdGhzIGZyb20gdGhlIHJvb3QgZW50aXR5U2V0XG4gKiBAcGFyYW0gW3BhdGhWaXNpdG9yXSBBIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgcmVzdWx0aW5nIHBhdGhcbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50YXRpbmcgdGhhdCBwYXRoIGluIHRoZSBtb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0aEluTW9kZWwoXG5cdHBhdGg6IHVuZGVmaW5lZCxcblx0bW9kZWxOYW1lPzogc3RyaW5nLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzPzogc3RyaW5nW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uO1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhJbk1vZGVsPFRhcmdldFR5cGUgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0cGF0aDogc3RyaW5nLFxuXHRtb2RlbE5hbWU/OiBzdHJpbmcsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM/OiBzdHJpbmdbXSxcblx0cGF0aFZpc2l0b3I/OiB1bmRlZmluZWRcbik6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUYXJnZXRUeXBlPjtcbmV4cG9ydCBmdW5jdGlvbiBwYXRoSW5Nb2RlbDxUYXJnZXRUeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bW9kZWxOYW1lPzogc3RyaW5nLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzPzogc3RyaW5nW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uIHwgUGF0aEluTW9kZWxFeHByZXNzaW9uPFRhcmdldFR5cGU+O1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhJbk1vZGVsPFRhcmdldFR5cGUgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0cGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtb2RlbE5hbWU/OiBzdHJpbmcsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uIHwgUGF0aEluTW9kZWxFeHByZXNzaW9uPFRhcmdldFR5cGU+IHtcblx0aWYgKHBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGxldCB0YXJnZXRQYXRoO1xuXHRpZiAocGF0aFZpc2l0b3IpIHtcblx0XHR0YXJnZXRQYXRoID0gcGF0aFZpc2l0b3IocGF0aCk7XG5cdFx0aWYgKHRhcmdldFBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGxvY2FsUGF0aCA9IHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMuY29uY2F0KCk7XG5cdFx0bG9jYWxQYXRoLnB1c2gocGF0aCk7XG5cdFx0dGFyZ2V0UGF0aCA9IGxvY2FsUGF0aC5qb2luKFwiL1wiKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIlBhdGhJbk1vZGVsXCIsXG5cdFx0bW9kZWxOYW1lOiBtb2RlbE5hbWUsXG5cdFx0cGF0aDogdGFyZ2V0UGF0aFxuXHR9O1xufVxuXG50eXBlIFBsYWluRXhwcmVzc2lvbk9iamVjdCA9IHsgW2luZGV4OiBzdHJpbmddOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4gfTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29uc3RhbnQgZXhwcmVzc2lvbiBiYXNlZCBvbiBhIHByaW1pdGl2ZSB2YWx1ZS5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0gdmFsdWUgVGhlIGNvbnN0YW50IHRvIHdyYXAgaW4gYW4gZXhwcmVzc2lvblxuICogQHJldHVybnMgVGhlIGNvbnN0YW50IGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0YW50PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPih2YWx1ZTogVCk6IENvbnN0YW50RXhwcmVzc2lvbjxUPiB7XG5cdGxldCBjb25zdGFudFZhbHVlOiBUO1xuXG5cdGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0Y29uc3RhbnRWYWx1ZSA9IHZhbHVlLm1hcCh3cmFwUHJpbWl0aXZlKSBhcyBUO1xuXHRcdH0gZWxzZSBpZiAoaXNQcmltaXRpdmVPYmplY3QodmFsdWUpKSB7XG5cdFx0XHRjb25zdGFudFZhbHVlID0gdmFsdWUudmFsdWVPZigpIGFzIFQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0YW50VmFsdWUgPSBPYmplY3QuZW50cmllcyh2YWx1ZSkucmVkdWNlKChwbGFpbkV4cHJlc3Npb24sIFtrZXksIHZhbF0pID0+IHtcblx0XHRcdFx0Y29uc3Qgd3JhcHBlZFZhbHVlID0gd3JhcFByaW1pdGl2ZSh2YWwpO1xuXHRcdFx0XHRpZiAod3JhcHBlZFZhbHVlLl90eXBlICE9PSBcIkNvbnN0YW50XCIgfHwgd3JhcHBlZFZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRwbGFpbkV4cHJlc3Npb25ba2V5XSA9IHdyYXBwZWRWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcGxhaW5FeHByZXNzaW9uO1xuXHRcdFx0fSwge30gYXMgUGxhaW5FeHByZXNzaW9uT2JqZWN0KSBhcyBUO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdGFudFZhbHVlID0gdmFsdWU7XG5cdH1cblxuXHRyZXR1cm4geyBfdHlwZTogXCJDb25zdGFudFwiLCB2YWx1ZTogY29uc3RhbnRWYWx1ZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHR2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcixcblx0dGFyZ2V0VHlwZT86IHN0cmluZ1xuKTogQ29uc3RhbnRFeHByZXNzaW9uPFQ+IHwgUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+IHwgRW1iZWRkZWRVSTVCaW5kaW5nRXhwcmVzc2lvbjxUPiB8IEVtYmVkZGVkVUk1RXhwcmVzc2lvbkJpbmRpbmdFeHByZXNzaW9uPFQ+IHtcblx0aWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLnN0YXJ0c1dpdGgoXCJ7XCIpKSB7XG5cdFx0Y29uc3QgcGF0aEluTW9kZWxSZWdleCA9IC9eeyguKik+KC4rKX0kLzsgLy8gTWF0Y2hlcyBtb2RlbCBwYXRocyBsaWtlIFwibW9kZWw+cGF0aFwiIG9yIFwiPnBhdGhcIiAoZGVmYXVsdCBtb2RlbClcblx0XHRjb25zdCBwYXRoSW5Nb2RlbFJlZ2V4TWF0Y2ggPSBwYXRoSW5Nb2RlbFJlZ2V4LmV4ZWModmFsdWUpO1xuXG5cdFx0aWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCJ7PVwiKSkge1xuXHRcdFx0Ly8gRXhwcmVzc2lvbiBiaW5kaW5nLCB3ZSBjYW4ganVzdCByZW1vdmUgdGhlIG91dGVyIGJpbmRpbmcgdGhpbmdzXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRfdHlwZTogXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCIsXG5cdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0fTtcblx0XHR9IGVsc2UgaWYgKHBhdGhJbk1vZGVsUmVnZXhNYXRjaCkge1xuXHRcdFx0cmV0dXJuIHBhdGhJbk1vZGVsKHBhdGhJbk1vZGVsUmVnZXhNYXRjaFsyXSB8fCBcIlwiLCBwYXRoSW5Nb2RlbFJlZ2V4TWF0Y2hbMV0gfHwgdW5kZWZpbmVkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0X3R5cGU6IFwiRW1iZWRkZWRCaW5kaW5nXCIsXG5cdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSBpZiAodGFyZ2V0VHlwZSA9PT0gXCJib29sZWFuXCIgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICh2YWx1ZSA9PT0gXCJ0cnVlXCIgfHwgdmFsdWUgPT09IFwiZmFsc2VcIikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodmFsdWUgPT09IFwidHJ1ZVwiKSBhcyBDb25zdGFudEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAodGFyZ2V0VHlwZSA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgKCFpc05hTihOdW1iZXIodmFsdWUpKSB8fCB2YWx1ZSA9PT0gXCJOYU5cIikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoTnVtYmVyKHZhbHVlKSkgYXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb25zdGFudCh2YWx1ZSkgYXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+O1xuXHR9XG59XG5cbi8qKlxuICogQSBuYW1lZCByZWZlcmVuY2UuXG4gKiBAc2VlIGZuXG4gKiBAcGFyYW0gcmVmZXJlbmNlIFJlZmVyZW5jZVxuICogQHJldHVybnMgVGhlIG9iamVjdCByZWZlcmVuY2UgYmluZGluZyBwYXJ0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWYocmVmZXJlbmNlOiBzdHJpbmcgfCBudWxsKTogUmVmZXJlbmNlRXhwcmVzc2lvbiB7XG5cdHJldHVybiB7IF90eXBlOiBcIlJlZlwiLCByZWY6IHJlZmVyZW5jZSB9O1xufVxuXG4vKipcbiAqIFdyYXAgYSBzdGF0ZSBvYmplY3QgaW50byBhIHBhdGggaW4gbW9kZWwgZXhwcmVzc2lvbi5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0gc3RhdGVPYmplY3RQcm9wIFRoZSBvYmplY3QgdG8gZXZhbHVhdGUsIGlmIGl0J3MgYSBjb25zdGFudCBpdCB3aWxsIGJlIHdyYXBwZWQgaW4gYSBjb25zdGFudCBleHByZXNzaW9uLCBpZiBpdCdzIGEgc3RhdGUgcHJvcGVydHkgaXQgd2lsbCBiZSBib3VuZFxuICogQHBhcmFtIGtleSBUaGUga2V5IG9mIHRoZSBzdGF0ZSBvYmplY3QgdG8gYmluZFxuICogQHJldHVybnMgVGhlIGNvcnJlY3QgYmluZGluZyB0b29sa2l0IGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmRTdGF0ZTxUIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdHN0YXRlT2JqZWN0UHJvcDogVCxcblx0a2V5OiBrZXlvZiBUXG4pOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248Sz4gfCBDb25zdGFudEV4cHJlc3Npb248Sz4ge1xuXHRpZiAodHlwZW9mIHN0YXRlT2JqZWN0UHJvcCA9PT0gXCJvYmplY3RcIiAmJiAoc3RhdGVPYmplY3RQcm9wIGFzIEJpbmRpbmdJbmZvSG9sZGVyPFQ+KS5fX2JpbmRpbmdJbmZvKSB7XG5cdFx0cmV0dXJuIHBhdGhJbk1vZGVsKFwiL1wiICsga2V5LnRvU3RyaW5nKCksIChzdGF0ZU9iamVjdFByb3AgYXMgQmluZGluZ0luZm9Ib2xkZXI8VD4pLl9fYmluZGluZ0luZm8ubW9kZWwpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb25zdGFudChzdGF0ZU9iamVjdFByb3ApIGFzIHVua25vd24gYXMgQ29uc3RhbnRFeHByZXNzaW9uPEs+O1xuXHR9XG59XG4vKipcbiAqIFdyYXAgYSBwcmltaXRpdmUgaW50byBhIGNvbnN0YW50IGV4cHJlc3Npb24gaWYgaXQgaXMgbm90IGFscmVhZHkgYW4gZXhwcmVzc2lvbi5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0gc29tZXRoaW5nIFRoZSBvYmplY3QgdG8gd3JhcCBpbiBhIENvbnN0YW50IGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIEVpdGhlciB0aGUgb3JpZ2luYWwgb2JqZWN0IG9yIHRoZSB3cmFwcGVkIG9uZSBkZXBlbmRpbmcgb24gdGhlIGNhc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXBQcmltaXRpdmU8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KHNvbWV0aGluZzogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0aWYgKGlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKHNvbWV0aGluZykpIHtcblx0XHRyZXR1cm4gc29tZXRoaW5nIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fVxuXG5cdHJldHVybiBjb25zdGFudChzb21ldGhpbmcpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZXhwcmVzc2lvbiBvciB2YWx1ZSBwcm92aWRlZCBpcyBhIGJpbmRpbmcgdG9vbGluZyBleHByZXNzaW9uIG9yIG5vdC5cbiAqXG4gKiBFdmVyeSBvYmplY3QgaGF2aW5nIGEgcHJvcGVydHkgbmFtZWQgYF90eXBlYCBvZiBzb21lIHZhbHVlIGlzIGNvbnNpZGVyZWQgYW4gZXhwcmVzc2lvbiwgZXZlbiBpZiB0aGVyZSBpcyBhY3R1YWxseVxuICogbm8gc3VjaCBleHByZXNzaW9uIHR5cGUgc3VwcG9ydGVkLlxuICogQHBhcmFtIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhIGJpbmRpbmcgdG9vbGtpdCBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbihcblx0ZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHwgdW5rbm93blxuKTogZXhwcmVzc2lvbiBpcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4ge1xuXHRyZXR1cm4gKGV4cHJlc3Npb24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+KT8uX3R5cGUgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGV4cHJlc3Npb24gb3IgdmFsdWUgcHJvdmlkZWQgaXMgY29uc3RhbnQgb3Igbm90LlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gIG1heWJlQ29uc3RhbnQgVGhlIGV4cHJlc3Npb24gb3IgcHJpbWl0aXZlIHZhbHVlIHRoYXQgaXMgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGNvbnN0YW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0YW50PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihtYXliZUNvbnN0YW50OiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4pOiBtYXliZUNvbnN0YW50IGlzIENvbnN0YW50RXhwcmVzc2lvbjxUPiB7XG5cdHJldHVybiB0eXBlb2YgbWF5YmVDb25zdGFudCAhPT0gXCJvYmplY3RcIiB8fCAobWF5YmVDb25zdGFudCBhcyBCYXNlRXhwcmVzc2lvbjxUPikuX3R5cGUgPT09IFwiQ29uc3RhbnRcIjtcbn1cblxuZnVuY3Rpb24gaXNUcnVlKGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gaXNDb25zdGFudChleHByZXNzaW9uKSAmJiBleHByZXNzaW9uLnZhbHVlID09PSB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc0ZhbHNlKGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gaXNDb25zdGFudChleHByZXNzaW9uKSAmJiBleHByZXNzaW9uLnZhbHVlID09PSBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGV4cHJlc3Npb24gb3IgdmFsdWUgcHJvdmlkZWQgaXMgYSBwYXRoIGluIG1vZGVsIGV4cHJlc3Npb24gb3Igbm90LlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gIG1heWJlQmluZGluZyBUaGUgZXhwcmVzc2lvbiBvciBwcmltaXRpdmUgdmFsdWUgdGhhdCBpcyB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgYSBwYXRoIGluIG1vZGVsIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aEluTW9kZWxFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bWF5YmVCaW5kaW5nOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IG1heWJlQmluZGluZyBpcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gKG1heWJlQmluZGluZyBhcyBCYXNlRXhwcmVzc2lvbjxUPik/Ll90eXBlID09PSBcIlBhdGhJbk1vZGVsXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBleHByZXNzaW9uIG9yIHZhbHVlIHByb3ZpZGVkIGlzIGEgY29tcGxleCB0eXBlIGV4cHJlc3Npb24uXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSAgbWF5YmVCaW5kaW5nIFRoZSBleHByZXNzaW9uIG9yIHByaW1pdGl2ZSB2YWx1ZSB0aGF0IGlzIHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBhIHBhdGggaW4gbW9kZWwgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wbGV4VHlwZUV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRtYXliZUJpbmRpbmc6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogbWF5YmVCaW5kaW5nIGlzIENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPiB7XG5cdHJldHVybiAobWF5YmVCaW5kaW5nIGFzIEJhc2VFeHByZXNzaW9uPFQ+KT8uX3R5cGUgPT09IFwiQ29tcGxleFR5cGVcIjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGV4cHJlc3Npb24gb3IgdmFsdWUgcHJvdmlkZWQgaXMgYSBjb25jYXQgZXhwcmVzc2lvbiBvciBub3QuXG4gKiBAcGFyYW0gZXhwcmVzc2lvblxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBleHByZXNzaW9uIGlzIGEgQ29uY2F0RXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBpc0NvbmNhdEV4cHJlc3Npb24oZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KTogZXhwcmVzc2lvbiBpcyBDb25jYXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIChleHByZXNzaW9uIGFzIEJhc2VFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KT8uX3R5cGUgPT09IFwiQ29uY2F0XCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBleHByZXNzaW9uIG9yIHZhbHVlIHByb3ZpZGVkIGlzIGEgSWZFbHNlIGV4cHJlc3Npb24gb3Igbm90LlxuICogQHBhcmFtIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhIElmRWxzZUV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gaXNJZkVsc2VFeHByZXNzaW9uKGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPik6IGV4cHJlc3Npb24gaXMgQ29uY2F0RXhwcmVzc2lvbiB7XG5cdHJldHVybiAoZXhwcmVzc2lvbiBhcyBCYXNlRXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPik/Ll90eXBlID09PSBcIklmRWxzZVwiO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZXhwcmVzc2lvbiBwcm92aWRlZCBpcyBhIGNvbXBhcmlzb24gb3Igbm90LlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvblxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBleHByZXNzaW9uIGlzIGEgQ29tcGFyaXNvbkV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gaXNDb21wYXJpc29uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4pOiBleHByZXNzaW9uIGlzIENvbXBhcmlzb25FeHByZXNzaW9uIHtcblx0cmV0dXJuIGV4cHJlc3Npb24uX3R5cGUgPT09IFwiQ29tcGFyaXNvblwiO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBpbnB1dCBwYXJhbWV0ZXIgaXMgYSBjb25zdGFudCBleHByZXNzaW9uIG9mIHR5cGUgdW5kZWZpbmVkLlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGlucHV0IGV4cHJlc3Npb24gb3Igb2JqZWN0IGluIGdlbmVyYWxcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgaXMgY29uc3RhbnQgd2hpY2ggaGFzIHVuZGVmaW5lZCBmb3IgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVW5kZWZpbmVkRXhwcmVzc2lvbihleHByZXNzaW9uOiB1bmtub3duKTogZXhwcmVzc2lvbiBpcyBDb25zdGFudEV4cHJlc3Npb248dW5kZWZpbmVkPiB7XG5cdGNvbnN0IGV4cHJlc3Npb25Bc0V4cHJlc3Npb24gPSBleHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPjtcblx0cmV0dXJuIGV4cHJlc3Npb25Bc0V4cHJlc3Npb24/Ll90eXBlID09PSBcIkNvbnN0YW50XCIgJiYgZXhwcmVzc2lvbkFzRXhwcmVzc2lvbj8udmFsdWUgPT09IHVuZGVmaW5lZDtcbn1cblxudHlwZSBDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb248UD4gPVxuXHR8IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBJZkFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgT3JBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEFuZEFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgTmVBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEVxQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBOb3RBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEd0QW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBHZUFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgTGVBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEx0QW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBIYXNBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEluQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBBZGRBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IFN1YkFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgTXVsQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBEaXZBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IE1vZEFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgRGl2QnlBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IE5lZ0Fubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgVm9jYWJDb25zdGFudEV4cHJlc3Npb248UD47XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlT2JqZWN0KG9iamVjdFR5cGU6IG9iamVjdCk6IGJvb2xlYW4ge1xuXHRzd2l0Y2ggKG9iamVjdFR5cGUuY29uc3RydWN0b3IubmFtZSkge1xuXHRcdGNhc2UgXCJTdHJpbmdcIjpcblx0XHRjYXNlIFwiTnVtYmVyXCI6XG5cdFx0Y2FzZSBcIkJvb2xlYW5cIjpcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHBhc3NlZCBhbm5vdGF0aW9uIGFubm90YXRpb25WYWx1ZSBpcyBhIENvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbi5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtICBhbm5vdGF0aW9uVmFsdWUgVGhlIGFubm90YXRpb24gYW5ub3RhdGlvblZhbHVlIHRvIGV2YWx1YXRlXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdCBpcyBhIHtDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb259XG4gKi9cbmZ1bmN0aW9uIGlzQ29tcGxleEFubm90YXRpb25FeHByZXNzaW9uPFQ+KGFubm90YXRpb25WYWx1ZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8VD4pOiBhbm5vdGF0aW9uVmFsdWUgaXMgQ29tcGxleEFubm90YXRpb25FeHByZXNzaW9uPFQ+IHtcblx0cmV0dXJuIHR5cGVvZiBhbm5vdGF0aW9uVmFsdWUgPT09IFwib2JqZWN0XCIgJiYgIWlzUHJpbWl0aXZlT2JqZWN0KGFubm90YXRpb25WYWx1ZSBhcyBvYmplY3QpO1xufVxuXG5sZXQgQ09OVkVSVEVSX1JPT1RfU1lNQk9MOiBzeW1ib2wgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gc2V0Q29udmVydGVyUm9vdFN5bWJvbChjb252ZXJ0ZXJSb290U3ltYm9sOiBzeW1ib2wpOiB2b2lkIHtcblx0Q09OVkVSVEVSX1JPT1RfU1lNQk9MID0gY29udmVydGVyUm9vdFN5bWJvbDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgY29ycmVzcG9uZGluZyBhbm5vdGF0aW9uVmFsdWUgZm9yIGEgZ2l2ZW4gYW5ub3RhdGlvbiBhbm5vdGF0aW9uVmFsdWUuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBhbm5vdGF0aW9uVmFsdWUgVGhlIHNvdXJjZSBhbm5vdGF0aW9uIGFubm90YXRpb25WYWx1ZVxuICogQHBhcmFtIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgVGhlIHBhdGggZnJvbSB0aGUgcm9vdCBlbnRpdHkgc2V0XG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIERlZmF1bHQgdmFsdWUgaWYgdGhlIGFubm90YXRpb25WYWx1ZSBpcyB1bmRlZmluZWRcbiAqIEBwYXJhbSBwYXRoVmlzaXRvciBBIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgcmVzdWx0aW5nIHBhdGhcbiAqIEByZXR1cm5zIFRoZSBhbm5vdGF0aW9uVmFsdWUgZXF1aXZhbGVudCB0byB0aGF0IGFubm90YXRpb24gYW5ub3RhdGlvblZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRhbm5vdGF0aW9uVmFsdWU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFQ+IHwgdW5kZWZpbmVkLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSA9IFtdLFxuXHRkZWZhdWx0VmFsdWU/OiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj4ge1xuXHRsZXQgY29udmVydGVyUm9vdDogQ29udmVydGVkTWV0YWRhdGEgfCB1bmRlZmluZWQ7XG5cdGlmIChDT05WRVJURVJfUk9PVF9TWU1CT0wpIHtcblx0XHRjb252ZXJ0ZXJSb290ID0gKGFubm90YXRpb25WYWx1ZT8uW0NPTlZFUlRFUl9ST09UX1NZTUJPTCBhcyBuZXZlcl0gYXMgdW5rbm93biBhcyBGdW5jdGlvbik/LigpIGFzIENvbnZlcnRlZE1ldGFkYXRhIHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKGFubm90YXRpb25WYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHdyYXBQcmltaXRpdmUoZGVmYXVsdFZhbHVlIGFzIFByaW1pdGl2ZVR5cGVDYXN0PFQ+KTtcblx0fVxuXHRhbm5vdGF0aW9uVmFsdWUgPSBhbm5vdGF0aW9uVmFsdWU/LnZhbHVlT2YoKSBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxUPjtcblx0aWYgKCFpc0NvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbihhbm5vdGF0aW9uVmFsdWUpKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGFubm90YXRpb25WYWx1ZSk7XG5cdH1cblxuXHRzd2l0Y2ggKGFubm90YXRpb25WYWx1ZS50eXBlKSB7XG5cdFx0Y2FzZSBcIlBhdGhcIjpcblx0XHRcdHJldHVybiBwYXRoSW5Nb2RlbChhbm5vdGF0aW9uVmFsdWUucGF0aCwgdW5kZWZpbmVkLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcik7XG5cdFx0Y2FzZSBcIklmXCI6XG5cdFx0XHRyZXR1cm4gYW5ub3RhdGlvbklmRXhwcmVzc2lvbihcblx0XHRcdFx0YW5ub3RhdGlvblZhbHVlLiRJZixcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiTm90XCI6XG5cdFx0XHRyZXR1cm4gbm90KFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiROb3QsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJFcVwiOlxuXHRcdFx0cmV0dXJuIGVxdWFsKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRFcVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRFcVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIk5lXCI6XG5cdFx0XHRyZXR1cm4gbm90RXF1YWwoXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJE5lWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdCksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJE5lWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdClcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiR3RcIjpcblx0XHRcdHJldHVybiBncmVhdGVyVGhhbihcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kR3RbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kR3RbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJHZVwiOlxuXHRcdFx0cmV0dXJuIGdyZWF0ZXJPckVxdWFsKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRHZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRHZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkx0XCI6XG5cdFx0XHRyZXR1cm4gbGVzc1RoYW4oXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEx0WzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdCksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEx0WzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdClcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiTGVcIjpcblx0XHRcdHJldHVybiBsZXNzT3JFcXVhbChcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kTGVbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kTGVbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJPclwiOlxuXHRcdFx0cmV0dXJuIG9yKFxuXHRcdFx0XHQuLi5hbm5vdGF0aW9uVmFsdWUuJE9yLm1hcChmdW5jdGlvbiAob3JDb25kaXRpb24pIHtcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uPGJvb2xlYW4+KG9yQ29uZGl0aW9uLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdCk7XG5cdFx0XHRcdH0pXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkFuZFwiOlxuXHRcdFx0cmV0dXJuIGFuZChcblx0XHRcdFx0Li4uYW5ub3RhdGlvblZhbHVlLiRBbmQubWFwKGZ1bmN0aW9uIChhbmRDb25kaXRpb24pIHtcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uPGJvb2xlYW4+KGFuZENvbmRpdGlvbiwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpO1xuXHRcdFx0XHR9KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJJblwiOlxuXHRcdFx0cmV0dXJuIGNvbXBhcmlzb24oXG5cdFx0XHRcdFwiSW5cIixcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kSW5bMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kSW5bMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJIYXNcIjpcblx0XHRcdHJldHVybiBjb21wYXJpc29uKFxuXHRcdFx0XHRcIkhhc1wiLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRIYXNbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kSGFzWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdClcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiQWRkXCI6XG5cdFx0XHRyZXR1cm4gYWRkKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRBZGRbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kQWRkWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdClcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiU3ViXCI6XG5cdFx0XHRyZXR1cm4gc3VidHJhY3QoXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJFN1YlswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRTdWJbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJNdWxcIjpcblx0XHRcdHJldHVybiBtdWx0aXBseShcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kTXVsWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdCksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJE11bFsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkRpdlwiOlxuXHRcdFx0cmV0dXJuIGZsb29yKFxuXHRcdFx0XHRkaXZpZGUoXG5cdFx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kRGl2WzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdCksXG5cdFx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kRGl2WzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdClcblx0XHRcdFx0KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJEaXZCeVwiOlxuXHRcdFx0cmV0dXJuIGRpdmlkZShcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kRGl2QnlbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kRGl2QnlbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJNb2RcIjpcblx0XHRcdHJldHVybiBtb2R1bG8oXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJE1vZFswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRNb2RbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJOZWdcIjpcblx0XHRcdHJldHVybiBuZWdhdGUoXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJE5lZ1swXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkFwcGx5XCI6XG5cdFx0XHRyZXR1cm4gYW5ub3RhdGlvbkFwcGx5RXhwcmVzc2lvbihcblx0XHRcdFx0YW5ub3RhdGlvblZhbHVlIGFzIEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPixcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3Jcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRcdC8vIE5vdCBhIHJlYWwgY2FzZSBidXQgdGhlIHR5cGUgc3lzdGVtIG5lZWRzIGl0XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQoYW5ub3RhdGlvblZhbHVlLnZhbHVlIGFzIFByaW1pdGl2ZVR5cGVDYXN0PFQ+KTtcblx0fVxuXHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcbn1cblxuLyoqXG4gKiBQYXJzZSB0aGUgYW5ub3RhdGlvbiBjb25kaXRpb24gaW50byBhbiBleHByZXNzaW9uLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gYW5ub3RhdGlvblZhbHVlIFRoZSBjb25kaXRpb24gb3IgdmFsdWUgZnJvbSB0aGUgYW5ub3RhdGlvblxuICogQHBhcmFtIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgVGhlIHBhdGggZnJvbSB0aGUgcm9vdCBlbnRpdHkgc2V0XG4gKiBAcGFyYW0gcGF0aFZpc2l0b3IgQSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHJlc3VsdGluZyBwYXRoXG4gKiBAcGFyYW0gY29udmVydGVyUm9vdCBUaGUgcm9vdCBjb252ZXJ0ZWQgbWV0YWRhdGFcbiAqIEByZXR1cm5zIEFuIGVxdWl2YWxlbnQgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBwYXJzZUFubm90YXRpb25Db25kaXRpb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRhbm5vdGF0aW9uVmFsdWU6IENvbmRpdGlvbmFsQ2hlY2tPclZhbHVlLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSA9IFtdLFxuXHRwYXRoVmlzaXRvcj86IEZ1bmN0aW9uLFxuXHRjb252ZXJ0ZXJSb290PzogQ29udmVydGVkTWV0YWRhdGFcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdGlmIChhbm5vdGF0aW9uVmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIGFubm90YXRpb25WYWx1ZSAhPT0gXCJvYmplY3RcIikge1xuXHRcdHJldHVybiBjb25zdGFudChhbm5vdGF0aW9uVmFsdWUgYXMgVCk7XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJE9yXCIpKSB7XG5cdFx0cmV0dXJuIG9yKFxuXHRcdFx0Li4uKChhbm5vdGF0aW9uVmFsdWUgYXMgT3JDb25kaXRpb25hbEV4cHJlc3Npb24pLiRPci5tYXAoZnVuY3Rpb24gKG9yQ29uZGl0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBwYXJzZUFubm90YXRpb25Db25kaXRpb24ob3JDb25kaXRpb24sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KTtcblx0XHRcdH0pIGFzIHVua25vd24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10pXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEFuZFwiKSkge1xuXHRcdHJldHVybiBhbmQoXG5cdFx0XHQuLi4oKGFubm90YXRpb25WYWx1ZSBhcyBBbmRDb25kaXRpb25hbEV4cHJlc3Npb24pLiRBbmQubWFwKGZ1bmN0aW9uIChhbmRDb25kaXRpb24pIHtcblx0XHRcdFx0cmV0dXJuIHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbmRDb25kaXRpb24sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KTtcblx0XHRcdH0pIGFzIHVua25vd24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10pXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJE5vdFwiKSkge1xuXHRcdHJldHVybiBub3QoXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBOb3RDb25kaXRpb25hbEV4cHJlc3Npb24pLiROb3QsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRFcVwiKSkge1xuXHRcdHJldHVybiBlcXVhbChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBFcUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEVxWzBdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBFcUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEVxWzFdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiROZVwiKSkge1xuXHRcdHJldHVybiBub3RFcXVhbChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBOZUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJE5lWzBdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBOZUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJE5lWzFdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRHdFwiKSkge1xuXHRcdHJldHVybiBncmVhdGVyVGhhbihcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBHdENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEd0WzBdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBHdENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEd0WzFdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRHZVwiKSkge1xuXHRcdHJldHVybiBncmVhdGVyT3JFcXVhbChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBHZUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEdlWzBdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBHZUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEdlWzFdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRMdFwiKSkge1xuXHRcdHJldHVybiBsZXNzVGhhbihcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBMdENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEx0WzBdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBMdENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEx0WzFdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRMZVwiKSkge1xuXHRcdHJldHVybiBsZXNzT3JFcXVhbChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBMZUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJExlWzBdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBMZUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJExlWzFdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRQYXRoXCIpKSB7XG5cdFx0cmV0dXJuIHBhdGhJbk1vZGVsKChhbm5vdGF0aW9uVmFsdWUgYXMgUGF0aENvbmRpdGlvbkV4cHJlc3Npb248VD4pLiRQYXRoLCB1bmRlZmluZWQsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkQXBwbHlcIikpIHtcblx0XHRyZXR1cm4gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiBcIkFwcGx5XCIsXG5cdFx0XHRcdCRGdW5jdGlvbjogKGFubm90YXRpb25WYWx1ZSBhcyB7ICRGdW5jdGlvbj86IHN0cmluZyB9KS4kRnVuY3Rpb24sXG5cdFx0XHRcdCRBcHBseTogKGFubm90YXRpb25WYWx1ZSBhcyB7ICRBcHBseT86IHVua25vd24gfSkuJEFwcGx5XG5cdFx0XHR9IGFzIEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb248VD4sXG5cdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0cGF0aFZpc2l0b3Jcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkSWZcIikpIHtcblx0XHRyZXR1cm4gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiBcIklmXCIsXG5cdFx0XHRcdCRJZjogKGFubm90YXRpb25WYWx1ZSBhcyB7ICRJZj86IHVua25vd24gfSkuJElmXG5cdFx0XHR9IGFzIElmQW5ub3RhdGlvbkV4cHJlc3Npb248VD4sXG5cdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0cGF0aFZpc2l0b3Jcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkRW51bU1lbWJlclwiKSkge1xuXHRcdHJldHVybiBjb25zdGFudChyZXNvbHZlRW51bVZhbHVlKChhbm5vdGF0aW9uVmFsdWUgYXMgeyAkRW51bU1lbWJlcj86IHN0cmluZyB9KS4kRW51bU1lbWJlciwgY29udmVydGVyUm9vdCkgYXMgVCk7XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEluXCIpKSB7XG5cdFx0cmV0dXJuIGNvbXBhcmlzb24oXG5cdFx0XHRcIkluXCIsXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgSW5Db25kaXRpb25hbEV4cHJlc3Npb24pLiRJblswXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdCksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgSW5Db25kaXRpb25hbEV4cHJlc3Npb24pLiRJblsxXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdClcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkSGFzXCIpKSB7XG5cdFx0cmV0dXJuIGNvbXBhcmlzb24oXG5cdFx0XHRcIkhhc1wiLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKFxuXHRcdFx0XHQoYW5ub3RhdGlvblZhbHVlIGFzIEhhc0NvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEhhc1swXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdCksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgSGFzQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kSGFzWzFdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRBZGRcIikpIHtcblx0XHRyZXR1cm4gYWRkKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKFxuXHRcdFx0XHQoYW5ub3RhdGlvblZhbHVlIGFzIEFkZENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEFkZFswXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdCksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgQWRkQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kQWRkWzFdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRTdWJcIikpIHtcblx0XHRyZXR1cm4gc3VidHJhY3QoXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgU3ViQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kU3ViWzBdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBTdWJDb25kaXRpb25hbEV4cHJlc3Npb24pLiRTdWJbMV0sXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHBhdGhWaXNpdG9yLFxuXHRcdFx0XHRjb252ZXJ0ZXJSb290XG5cdFx0XHQpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJE11bFwiKSkge1xuXHRcdHJldHVybiBtdWx0aXBseShcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBNdWxDb25kaXRpb25hbEV4cHJlc3Npb24pLiRNdWxbMF0sXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHBhdGhWaXNpdG9yLFxuXHRcdFx0XHRjb252ZXJ0ZXJSb290XG5cdFx0XHQpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKFxuXHRcdFx0XHQoYW5ub3RhdGlvblZhbHVlIGFzIE11bENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJE11bFsxXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdClcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkRGl2XCIpKSB7XG5cdFx0cmV0dXJuIGZsb29yKFxuXHRcdFx0ZGl2aWRlKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBEaXZDb25kaXRpb25hbEV4cHJlc3Npb24pLiREaXZbMF0sXG5cdFx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0XHRjb252ZXJ0ZXJSb290XG5cdFx0XHRcdCksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0XHQoYW5ub3RhdGlvblZhbHVlIGFzIERpdkNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJERpdlsxXSxcblx0XHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRcdHBhdGhWaXNpdG9yLFxuXHRcdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdFx0KVxuXHRcdFx0KVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiREaXZCeVwiKSkge1xuXHRcdHJldHVybiBkaXZpZGUoXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgRGl2QnlDb25kaXRpb25hbEV4cHJlc3Npb24pLiREaXZCeVswXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdCksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgRGl2QnlDb25kaXRpb25hbEV4cHJlc3Npb24pLiREaXZCeVsxXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdClcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkTW9kXCIpKSB7XG5cdFx0cmV0dXJuIG1vZHVsbyhcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBNb2RDb25kaXRpb25hbEV4cHJlc3Npb24pLiRNb2RbMF0sXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHBhdGhWaXNpdG9yLFxuXHRcdFx0XHRjb252ZXJ0ZXJSb290XG5cdFx0XHQpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKFxuXHRcdFx0XHQoYW5ub3RhdGlvblZhbHVlIGFzIE1vZENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJE1vZFsxXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdClcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkTmVnXCIpKSB7XG5cdFx0cmV0dXJuIG5lZ2F0ZShcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIE5lZ0NvbmRpdGlvbmFsRXhwcmVzc2lvbikuJE5lZywgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH1cblx0cmV0dXJuIGNvbnN0YW50KGFubm90YXRpb25WYWx1ZSBhcyBUKTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzIHRoZSB7SWZBbm5vdGF0aW9uRXhwcmVzc2lvblZhbHVlfSBpbnRvIGFuIGV4cHJlc3Npb24uXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBhbm5vdGF0aW9uVmFsdWUgQW4gSWYgZXhwcmVzc2lvbiByZXR1cm5pbmcgdGhlIHR5cGUgVFxuICogQHBhcmFtIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgVGhlIHBhdGggZnJvbSB0aGUgcm9vdCBlbnRpdHkgc2V0XG4gKiBAcGFyYW0gcGF0aFZpc2l0b3IgQSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHJlc3VsdGluZyBwYXRoXG4gKiBAcGFyYW0gY29udmVydGVyUm9vdCBUaGUgcm9vdCBjb252ZXJ0ZWQgbWV0YWRhdGFcbiAqIEByZXR1cm5zIFRoZSBlcXVpdmFsZW50IGlmRWxzZSBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbm5vdGF0aW9uSWZFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0YW5ub3RhdGlvblZhbHVlOiBJZkFubm90YXRpb25FeHByZXNzaW9uVmFsdWU8VD4sXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb24sXG5cdGNvbnZlcnRlclJvb3Q/OiBDb252ZXJ0ZWRNZXRhZGF0YVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0cmV0dXJuIGlmRWxzZShcblx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdCksXG5cdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZVsxXSBhcyBDb25kaXRpb25hbENoZWNrT3JWYWx1ZSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpLFxuXHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWVbMl0gYXMgQ29uZGl0aW9uYWxDaGVja09yVmFsdWUsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KVxuXHQpO1xufVxuLy8gVGhpcyB0eXBlIGlzIG5vdCByZWN1cnNpdmVseSB0cmFuc2Zvcm1lZCBmcm9tIHRoZSBtZXRhbW9kZWwgY29udGVudCwgYXMgc3VjaCB3ZSBoYXZlIHNvbWUgdWdseSB0aGluZ3MgdGhlcmVcbnR5cGUgU3ViQXBwbHlFeHByZXNzaW9uRnJvbU1ldGFtb2RlbCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuZnVuY3Rpb24gY29udmVydFN1YkFwcGx5UGFyYW1ldGVycyhhcHBseVBhcmFtOiBTdWJBcHBseUV4cHJlc3Npb25Gcm9tTWV0YW1vZGVsKTogU3ViQXBwbHlFeHByZXNzaW9uRnJvbU1ldGFtb2RlbCB8IFByaW1pdGl2ZVR5cGUge1xuXHRsZXQgYXBwbHlQYXJhbUNvbnZlcnRlZCA9IGFwcGx5UGFyYW07XG5cdGlmIChhcHBseVBhcmFtLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRhcHBseVBhcmFtQ29udmVydGVkID0ge1xuXHRcdFx0dHlwZTogXCJQYXRoXCIsXG5cdFx0XHRwYXRoOiBhcHBseVBhcmFtLiRQYXRoXG5cdFx0fSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPjtcblx0fSBlbHNlIGlmIChhcHBseVBhcmFtLmhhc093blByb3BlcnR5KFwiJElmXCIpKSB7XG5cdFx0YXBwbHlQYXJhbUNvbnZlcnRlZCA9IHtcblx0XHRcdHR5cGU6IFwiSWZcIixcblx0XHRcdCRJZjogYXBwbHlQYXJhbS4kSWZcblx0XHR9IGFzIElmQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPjtcblx0fSBlbHNlIGlmIChhcHBseVBhcmFtLmhhc093blByb3BlcnR5KFwiJEFwcGx5XCIpKSB7XG5cdFx0YXBwbHlQYXJhbUNvbnZlcnRlZCA9IHtcblx0XHRcdHR5cGU6IFwiQXBwbHlcIixcblx0XHRcdCRGdW5jdGlvbjogYXBwbHlQYXJhbS4kRnVuY3Rpb24sXG5cdFx0XHQkQXBwbHk6IGFwcGx5UGFyYW0uJEFwcGx5XG5cdFx0fSBhcyBBcHBseUFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz47XG5cdH1cblx0cmV0dXJuIGFwcGx5UGFyYW1Db252ZXJ0ZWQ7XG59XG5cbnR5cGUgT0RhdGFGdW5jdGlvbiA9IFwib2RhdGEuY29uY2F0XCIgfCBcIm9kYXRhLmZpbGxVcmlUZW1wbGF0ZVwiIHwgXCJvZGF0YS51cmlFbmNvZGVcIjtcbmV4cG9ydCBmdW5jdGlvbiBhbm5vdGF0aW9uQXBwbHlFeHByZXNzaW9uKFxuXHRhcHBseUV4cHJlc3Npb246IEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPixcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRoczogc3RyaW5nW10gPSBbXSxcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRzd2l0Y2ggKGFwcGx5RXhwcmVzc2lvbi4kRnVuY3Rpb24gYXMgT0RhdGFGdW5jdGlvbikge1xuXHRcdGNhc2UgXCJvZGF0YS5jb25jYXRcIjpcblx0XHRcdHJldHVybiBjb25jYXQoXG5cdFx0XHRcdC4uLmFwcGx5RXhwcmVzc2lvbi4kQXBwbHkubWFwKChhcHBseVBhcmFtKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdGNvbnZlcnRTdWJBcHBseVBhcmFtZXRlcnMoYXBwbHlQYXJhbSkgYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8c3RyaW5nPixcblx0XHRcdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRwYXRoVmlzaXRvclxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdGNhc2UgXCJvZGF0YS51cmlFbmNvZGVcIjpcblx0XHRcdGNvbnN0IHBhcmFtZXRlciA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0Y29udmVydFN1YkFwcGx5UGFyYW1ldGVycyhcblx0XHRcdFx0XHRhcHBseUV4cHJlc3Npb24uJEFwcGx5WzBdIGFzIHVua25vd24gYXMgU3ViQXBwbHlFeHByZXNzaW9uRnJvbU1ldGFtb2RlbFxuXHRcdFx0XHQpIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4sXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0cGF0aFZpc2l0b3Jcblx0XHRcdCk7XG5cdFx0XHQvLyBUaGUgc2Vjb25kIHBhcmFtZXRlciBmb3IgdXJpRW5jb2RlIGlzIGFsd2F5cyBhIHN0cmluZyBzaW5jZSB0aGUgdGFyZ2V0IGV2YWx1YXRpb24gaXMgYWdhaW5zdCBhIGZvcm1hdFZhbHVlIGNhbGwgaW4gT0RhdGFVdGlscyB3aGljaCBleHBlY3QgdGhlIHRhcmdldCB0eXBlIGFzIHNlY29uZCBwYXJhbWV0ZXJcblx0XHRcdHJldHVybiBmbihcIm9kYXRhLnVyaUVuY29kZVwiLCBbcGFyYW1ldGVyLCBcIkVkbS5TdHJpbmdcIl0sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdFx0Y2FzZSBcIm9kYXRhLmZpbGxVcmlUZW1wbGF0ZVwiOlxuXHRcdFx0Y29uc3QgdGVtcGxhdGUgPSBhcHBseUV4cHJlc3Npb24uJEFwcGx5WzBdO1xuXHRcdFx0Y29uc3QgdGVtcGxhdGVQYXJhbXMgPSBhcHBseUV4cHJlc3Npb24uJEFwcGx5LnNsaWNlKDEpIGFzIHVua25vd24gYXMgU3ViQXBwbHlFeHByZXNzaW9uRnJvbU1ldGFtb2RlbFtdO1xuXHRcdFx0Y29uc3QgdGFyZ2V0T2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4+ID0ge307XG5cdFx0XHR0ZW1wbGF0ZVBhcmFtcy5mb3JFYWNoKChhcHBseVBhcmFtKSA9PiB7XG5cdFx0XHRcdHRhcmdldE9iamVjdFthcHBseVBhcmFtLiROYW1lIGFzIHN0cmluZ10gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdFx0Y29udmVydFN1YkFwcGx5UGFyYW1ldGVycyhcblx0XHRcdFx0XHRcdGFwcGx5UGFyYW0uJExhYmVsZWRFbGVtZW50IGFzIFN1YkFwcGx5RXhwcmVzc2lvbkZyb21NZXRhbW9kZWxcblx0XHRcdFx0XHQpIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4sXG5cdFx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0cGF0aFZpc2l0b3Jcblx0XHRcdFx0KTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGZuKFwib2RhdGEuZmlsbFVyaVRlbXBsYXRlXCIsIFt0ZW1wbGF0ZSwgdGFyZ2V0T2JqZWN0XSwgdW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcbn1cblxuLyoqXG4gKiBHZW5lcmljIGhlbHBlciBmb3IgdGhlIGNvbXBhcmlzb24gb3BlcmF0aW9ucyAoZXF1YWwsIG5vdEVxdWFsLCAuLi4pLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gb3BlcmF0b3IgVGhlIG9wZXJhdG9yIHRvIGFwcGx5XG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgb3BlcmF0b3JcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIG9wZXJhdG9yXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5mdW5jdGlvbiBjb21wYXJpc29uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0b3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGxlZnRFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShsZWZ0T3BlcmFuZCk7XG5cdGNvbnN0IHJpZ2h0RXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUocmlnaHRPcGVyYW5kKTtcblx0aWYgKGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24obGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoaXNDb25zdGFudChsZWZ0RXhwcmVzc2lvbikgJiYgaXNDb25zdGFudChyaWdodEV4cHJlc3Npb24pKSB7XG5cdFx0c3dpdGNoIChvcGVyYXRvcikge1xuXHRcdFx0Y2FzZSBcIiE9PVwiOlxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgIT09IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiPT09XCI6XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHRcdGNhc2UgXCI8XCI6XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA8IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiPD1cIjpcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlIDw9IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiPlwiOlxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgPiByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXHRcdFx0Y2FzZSBcIj49XCI6XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA+PSByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXG5cdFx0XHRjYXNlIFwiSGFzXCI6IHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgbGVmdFZhbHVlSW50ID0gbGVmdEV4cHJlc3Npb24udmFsdWUgYXMgbnVtYmVyO1xuXHRcdFx0XHRjb25zdCByaWdodFZhbHVlSW50ID0gcmlnaHRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcjtcblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KCEhKGxlZnRWYWx1ZUludCAmIHJpZ2h0VmFsdWVJbnQpKTtcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJJblwiOiB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIENoZWNrIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIHJpZ2h0IGV4cHJlc3Npb24gYXJlIGNvbnN0YW50c1xuXHRcdFx0XHRjb25zdCBhbGxDaGlsZHJlbkNvbnN0YW50cyA9IChyaWdodEV4cHJlc3Npb24udmFsdWUgYXMgVFtdKS5ldmVyeSgoaXRlbSkgPT4gaXNDb25zdGFudChpdGVtKSk7XG5cdFx0XHRcdGlmIChhbGxDaGlsZHJlbkNvbnN0YW50cykge1xuXHRcdFx0XHRcdGNvbnN0IHJpZ2h0VmFsdWVzID0gKHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSBhcyBDb25zdGFudEV4cHJlc3Npb248VD5bXSkubWFwKChpdGVtKSA9PiBpdGVtLnZhbHVlKTtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQocmlnaHRWYWx1ZXMuaW5jbHVkZXMobGVmdEV4cHJlc3Npb24udmFsdWUpKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0X3R5cGU6IFwiQ29tcGFyaXNvblwiLFxuXHRcdFx0XHRcdFx0b3BlcmF0b3I6IG9wZXJhdG9yLFxuXHRcdFx0XHRcdFx0b3BlcmFuZDE6IGxlZnRFeHByZXNzaW9uLFxuXHRcdFx0XHRcdFx0b3BlcmFuZDI6IHJpZ2h0RXhwcmVzc2lvblxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIkNvbXBhcmlzb25cIixcblx0XHRcdG9wZXJhdG9yOiBvcGVyYXRvcixcblx0XHRcdG9wZXJhbmQxOiBsZWZ0RXhwcmVzc2lvbixcblx0XHRcdG9wZXJhbmQyOiByaWdodEV4cHJlc3Npb25cblx0XHR9O1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJpYyBoZWxwZXIgZm9yIHRoZSBsZW5ndGggb2YgYW4gZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBpbnB1dCBleHByZXNzaW9uIHBvaW50aW5nIHRvIGFuIGFycmF5XG4gKiBAcGFyYW0gY2hlY2tVbmRlZmluZWQgSXMgdGhlIGFycmF5IHBvdGVudGlhbGx5IHVuZGVmaW5lZFxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGxlbmd0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoKFxuXHRleHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj4gfCBVbnJlc29sdmFibGVQYXRoRXhwcmVzc2lvbixcblx0Y2hlY2tVbmRlZmluZWQgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPG51bWJlcj4ge1xuXHRpZiAoZXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIikge1xuXHRcdHJldHVybiBleHByZXNzaW9uO1xuXHR9XG5cdGlmICghY2hlY2tVbmRlZmluZWQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0X3R5cGU6IFwiTGVuZ3RoXCIsXG5cdFx0XHRwYXRoSW5Nb2RlbDogZXhwcmVzc2lvblxuXHRcdH07XG5cdH1cblx0cmV0dXJuIGlmRWxzZShlcXVhbChleHByZXNzaW9uLCB1bmRlZmluZWQpLCAtMSwgbGVuZ3RoKGV4cHJlc3Npb24pKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcImVxdWFsXCIgKD09PSkuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZXF1YWw8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgbGVmdEV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKGxlZnRPcGVyYW5kKTtcblx0Y29uc3QgcmlnaHRFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShyaWdodE9wZXJhbmQpO1xuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbihsZWZ0RXhwcmVzc2lvbiwgcmlnaHRFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGlmIChfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGxlZnRFeHByZXNzaW9uLCByaWdodEV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVkdWNlKGxlZnQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiwgcmlnaHQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGxlZnQuX3R5cGUgPT09IFwiQ29tcGFyaXNvblwiICYmIGlzVHJ1ZShyaWdodCkpIHtcblx0XHRcdC8vIGNvbXBhcmUoYSwgYikgPT09IHRydWUgfn4+IGNvbXBhcmUoYSwgYilcblx0XHRcdHJldHVybiBsZWZ0O1xuXHRcdH0gZWxzZSBpZiAobGVmdC5fdHlwZSA9PT0gXCJDb21wYXJpc29uXCIgJiYgaXNGYWxzZShyaWdodCkpIHtcblx0XHRcdC8vIGNvbXBhcmUoYSwgYikgPT09IGZhbHNlIH5+PiAhY29tcGFyZShhLCBiKVxuXHRcdFx0cmV0dXJuIG5vdChsZWZ0KTtcblx0XHR9IGVsc2UgaWYgKGxlZnQuX3R5cGUgPT09IFwiSWZFbHNlXCIgJiYgX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChsZWZ0Lm9uVHJ1ZSwgcmlnaHQpKSB7XG5cdFx0XHQvLyAoaWYgKHgpIHsgYSB9IGVsc2UgeyBiIH0pID09PSBhIH5+PiB4IHx8IChiID09PSBhKVxuXHRcdFx0cmV0dXJuIG9yKGxlZnQuY29uZGl0aW9uLCBlcXVhbChsZWZ0Lm9uRmFsc2UsIHJpZ2h0KSk7XG5cdFx0fSBlbHNlIGlmIChsZWZ0Ll90eXBlID09PSBcIklmRWxzZVwiICYmIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdC5vbkZhbHNlLCByaWdodCkpIHtcblx0XHRcdC8vIChpZiAoeCkgeyBhIH0gZWxzZSB7IGIgfSkgPT09IGIgfn4+ICF4IHx8IChhID09PSBiKVxuXHRcdFx0cmV0dXJuIG9yKG5vdChsZWZ0LmNvbmRpdGlvbiksIGVxdWFsKGxlZnQub25UcnVlLCByaWdodCkpO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRsZWZ0Ll90eXBlID09PSBcIklmRWxzZVwiICYmXG5cdFx0XHRpc0NvbnN0YW50KGxlZnQub25UcnVlKSAmJlxuXHRcdFx0aXNDb25zdGFudChsZWZ0Lm9uRmFsc2UpICYmXG5cdFx0XHRpc0NvbnN0YW50KHJpZ2h0KSAmJlxuXHRcdFx0IV9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdC5vblRydWUsIHJpZ2h0KSAmJlxuXHRcdFx0IV9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdC5vbkZhbHNlLCByaWdodClcblx0XHQpIHtcblx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBleHBsb2l0IHN5bW1ldHJ5OiBhID09PSBiIDx+PiBiID09PSBhXG5cdGNvbnN0IHJlZHVjZWQgPSByZWR1Y2UobGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikgPz8gcmVkdWNlKHJpZ2h0RXhwcmVzc2lvbiwgbGVmdEV4cHJlc3Npb24pO1xuXHRyZXR1cm4gcmVkdWNlZCA/PyBjb21wYXJpc29uKFwiPT09XCIsIGxlZnRFeHByZXNzaW9uLCByaWdodEV4cHJlc3Npb24pO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwibm90IGVxdWFsXCIgKCE9PSkuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbm90RXF1YWw8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIG5vdChlcXVhbChsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKSk7XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJncmVhdGVyIG9yIGVxdWFsXCIgKD49KS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmVhdGVyT3JFcXVhbDxUIGV4dGVuZHMgRGVmaW5lZFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGNvbXBhcmlzb24oXCI+PVwiLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcImdyZWF0ZXIgdGhhblwiICg+KS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmVhdGVyVGhhbjxUIGV4dGVuZHMgRGVmaW5lZFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGNvbXBhcmlzb24oXCI+XCIsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwibGVzcyBvciBlcXVhbFwiICg8PSkuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbGVzc09yRXF1YWw8VCBleHRlbmRzIERlZmluZWRQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjb21wYXJpc29uKFwiPD1cIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJsZXNzIHRoYW5cIiAoPCkuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbGVzc1RoYW48VCBleHRlbmRzIERlZmluZWRQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjb21wYXJpc29uKFwiPFwiLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcIkluY2x1ZGVcIiAoSW4pLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluY2x1ZGVzPFQgZXh0ZW5kcyBEZWZpbmVkUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFRbXT5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjb21wYXJpc29uKFwiSW5cIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCBhcyBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4pO1xufVxuXG4vKipcbiAqIElmLXRoZW4tZWxzZSBleHByZXNzaW9uLlxuICpcbiAqIEV2YWx1YXRlcyB0byBvblRydWUgaWYgdGhlIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gdHJ1ZSwgZWxzZSBldmFsdWF0ZXMgdG8gb25GYWxzZS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGNvbmRpdGlvbiBUaGUgY29uZGl0aW9uIHRvIGV2YWx1YXRlXG4gKiBAcGFyYW0gb25UcnVlIEV4cHJlc3Npb24gcmVzdWx0IGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWVcbiAqIEBwYXJhbSBvbkZhbHNlIEV4cHJlc3Npb24gcmVzdWx0IGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIGZhbHNlXG4gKiBAcmV0dXJucyBUaGUgZXhwcmVzc2lvbiB0aGF0IHJlcHJlc2VudHMgdGhpcyBjb25kaXRpb25hbCBjaGVja1xuICovXG5leHBvcnQgZnVuY3Rpb24gaWZFbHNlPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0Y29uZGl0aW9uOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4sXG5cdG9uVHJ1ZTogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRvbkZhbHNlOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdGxldCBjb25kaXRpb25FeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShjb25kaXRpb24pO1xuXHRsZXQgb25UcnVlRXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUob25UcnVlKTtcblx0bGV0IG9uRmFsc2VFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShvbkZhbHNlKTtcblxuXHQvLyBzd2FwIGJyYW5jaGVzIGlmIHRoZSBjb25kaXRpb24gaXMgYSBuZWdhdGlvblxuXHRpZiAoY29uZGl0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJOb3RcIikge1xuXHRcdC8vIGlmRWxzZShub3QoWCksIGEsIGIpIC0tPiBpZkVsc2UoWCwgYiwgYSlcblx0XHRbb25UcnVlRXhwcmVzc2lvbiwgb25GYWxzZUV4cHJlc3Npb25dID0gW29uRmFsc2VFeHByZXNzaW9uLCBvblRydWVFeHByZXNzaW9uXTtcblx0XHRjb25kaXRpb25FeHByZXNzaW9uID0gbm90KGNvbmRpdGlvbkV4cHJlc3Npb24pO1xuXHR9XG5cblx0Ly8gaW5saW5lIG5lc3RlZCBpZi1lbHNlIGV4cHJlc3Npb25zOiBvblRydWUgYnJhbmNoXG5cdC8vIGlmRWxzZShYLCBpZkVsc2UoWCwgYSwgYiksIGMpID09PiBpZkVsc2UoWCwgYSwgYylcblx0aWYgKG9uVHJ1ZUV4cHJlc3Npb24uX3R5cGUgPT09IFwiSWZFbHNlXCIgJiYgX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChjb25kaXRpb25FeHByZXNzaW9uLCBvblRydWVFeHByZXNzaW9uLmNvbmRpdGlvbikpIHtcblx0XHRvblRydWVFeHByZXNzaW9uID0gb25UcnVlRXhwcmVzc2lvbi5vblRydWU7XG5cdH1cblxuXHQvLyBpbmxpbmUgbmVzdGVkIGlmLWVsc2UgZXhwcmVzc2lvbnM6IG9uRmFsc2UgYnJhbmNoXG5cdC8vIGlmRWxzZShYLCBhLCBpZkVsc2UoWCwgYiwgYykpID09PiBpZkVsc2UoWCwgYSwgYylcblx0aWYgKG9uRmFsc2VFeHByZXNzaW9uLl90eXBlID09PSBcIklmRWxzZVwiICYmIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoY29uZGl0aW9uRXhwcmVzc2lvbiwgb25GYWxzZUV4cHJlc3Npb24uY29uZGl0aW9uKSkge1xuXHRcdG9uRmFsc2VFeHByZXNzaW9uID0gb25GYWxzZUV4cHJlc3Npb24ub25GYWxzZTtcblx0fVxuXG5cdC8vIChpZiB0cnVlIHRoZW4gYSBlbHNlIGIpICB+fj4gYVxuXHQvLyAoaWYgZmFsc2UgdGhlbiBhIGVsc2UgYikgfn4+IGJcblx0aWYgKGlzQ29uc3RhbnQoY29uZGl0aW9uRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gY29uZGl0aW9uRXhwcmVzc2lvbi52YWx1ZSA/IG9uVHJ1ZUV4cHJlc3Npb24gOiBvbkZhbHNlRXhwcmVzc2lvbjtcblx0fVxuXG5cdC8vIGlmIChpc0NvbnN0YW50Qm9vbGVhbihvblRydWVFeHByZXNzaW9uKSB8fCBpc0NvbnN0YW50Qm9vbGVhbihvbkZhbHNlRXhwcmVzc2lvbikpIHtcblx0Ly8gXHRyZXR1cm4gb3IoYW5kKGNvbmRpdGlvbiwgb25UcnVlRXhwcmVzc2lvbiBhcyBFeHByZXNzaW9uPGJvb2xlYW4+KSwgYW5kKG5vdChjb25kaXRpb24pLCBvbkZhbHNlRXhwcmVzc2lvbiBhcyBFeHByZXNzaW9uPGJvb2xlYW4+KSkgYXMgRXhwcmVzc2lvbjxUPlxuXHQvLyB9XG5cblx0Ly8gKGlmIFggdGhlbiBhIGVsc2UgYSkgfn4+IGFcblx0aWYgKF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwob25UcnVlRXhwcmVzc2lvbiwgb25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIG9uVHJ1ZUV4cHJlc3Npb247XG5cdH1cblxuXHQvLyBpZiBYIHRoZW4gYSBlbHNlIGZhbHNlIH5+PiBYICYmIGFcblx0aWYgKGlzRmFsc2Uob25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGFuZChjb25kaXRpb25FeHByZXNzaW9uLCBvblRydWVFeHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9XG5cblx0Ly8gaWYgWCB0aGVuIGEgZWxzZSB0cnVlIH5+PiAhWCB8fCBhXG5cdGlmIChpc1RydWUob25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIG9yKG5vdChjb25kaXRpb25FeHByZXNzaW9uKSwgb25UcnVlRXhwcmVzc2lvbiBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fVxuXG5cdC8vIGlmIFggdGhlbiBmYWxzZSBlbHNlIGEgfn4+ICFYICYmIGFcblx0aWYgKGlzRmFsc2Uob25UcnVlRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gYW5kKG5vdChjb25kaXRpb25FeHByZXNzaW9uKSwgb25GYWxzZUV4cHJlc3Npb24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH1cblxuXHQvLyBpZiBYIHRoZW4gdHJ1ZSBlbHNlIGEgfn4+IFggfHwgYVxuXHRpZiAoaXNUcnVlKG9uVHJ1ZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIG9yKGNvbmRpdGlvbkV4cHJlc3Npb24sIG9uRmFsc2VFeHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9XG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKGNvbmRpdGlvbkV4cHJlc3Npb24sIG9uVHJ1ZUV4cHJlc3Npb24sIG9uRmFsc2VFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGlmIChpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbihjb25kaXRpb24pIHx8IGlzQ29tcGxleFR5cGVFeHByZXNzaW9uKG9uVHJ1ZSkgfHwgaXNDb21wbGV4VHlwZUV4cHJlc3Npb24ob25GYWxzZSkpIHtcblx0XHRsZXQgcGF0aElkeCA9IDA7XG5cdFx0Y29uc3QgbXlJZkVsc2VFeHByZXNzaW9uID0gZm9ybWF0UmVzdWx0KFtjb25kaXRpb24sIG9uVHJ1ZSwgb25GYWxzZV0sIFwiLl9mb3JtYXR0ZXJzLlN0YW5kYXJkRm9ybWF0dGVyI2lmRWxzZVwiKTtcblx0XHRjb25zdCBhbGxQYXJ0cyA9IFtdO1xuXHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0bXlJZkVsc2VFeHByZXNzaW9uLFxuXHRcdFx0XCJQYXRoSW5Nb2RlbFwiLFxuXHRcdFx0KGNvbnN0YW50UGF0aDogUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+KSA9PiB7XG5cdFx0XHRcdGFsbFBhcnRzLnB1c2goY29uc3RhbnRQYXRoKTtcblx0XHRcdFx0cmV0dXJuIHBhdGhJbk1vZGVsKGAkJHtwYXRoSWR4Kyt9YCwgXCIkXCIpO1xuXHRcdFx0fSxcblx0XHRcdHRydWVcblx0XHQpO1xuXHRcdGFsbFBhcnRzLnVuc2hpZnQoY29uc3RhbnQoSlNPTi5zdHJpbmdpZnkobXlJZkVsc2VFeHByZXNzaW9uKSkpO1xuXHRcdHJldHVybiBmb3JtYXRSZXN1bHQoYWxsUGFydHMsIFwiLl9mb3JtYXR0ZXJzLlN0YW5kYXJkRm9ybWF0dGVyLmJpbmQoJGNvbnRyb2wpI2V2YWx1YXRlQ29tcGxleEV4cHJlc3Npb25cIiwgdW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIklmRWxzZVwiLFxuXHRcdGNvbmRpdGlvbjogY29uZGl0aW9uRXhwcmVzc2lvbixcblx0XHRvblRydWU6IG9uVHJ1ZUV4cHJlc3Npb24sXG5cdFx0b25GYWxzZTogb25GYWxzZUV4cHJlc3Npb25cblx0fTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBleHByZXNzaW9uIGhhcyBhIHJlZmVyZW5jZSB0byB0aGUgZGVmYXVsdCBtb2RlbCAodW5kZWZpbmVkKS5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHRvIGV2YWx1YXRlXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlcmUgaXMgYSByZWZlcmVuY2UgdG8gdGhlIGRlZmF1bHQgY29udGV4dFxuICovXG5mdW5jdGlvbiBoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPik6IGJvb2xlYW4ge1xuXHRzd2l0Y2ggKGV4cHJlc3Npb24uX3R5cGUpIHtcblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRjYXNlIFwiRm9ybWF0dGVyXCI6XG5cdFx0Y2FzZSBcIkNvbXBsZXhUeXBlXCI6XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0Y2FzZSBcIlNldFwiOlxuXHRcdFx0cmV0dXJuIGV4cHJlc3Npb24ub3BlcmFuZHMuc29tZShoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KTtcblx0XHRjYXNlIFwiUGF0aEluTW9kZWxcIjpcblx0XHRcdHJldHVybiBleHByZXNzaW9uLm1vZGVsTmFtZSA9PT0gdW5kZWZpbmVkO1xuXHRcdGNhc2UgXCJDb21wYXJpc29uXCI6XG5cdFx0XHRyZXR1cm4gaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dChleHByZXNzaW9uLm9wZXJhbmQxKSB8fCBoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24ub3BlcmFuZDIpO1xuXHRcdGNhc2UgXCJJZkVsc2VcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5jb25kaXRpb24pIHx8XG5cdFx0XHRcdGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5vblRydWUpIHx8XG5cdFx0XHRcdGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5vbkZhbHNlKVxuXHRcdFx0KTtcblx0XHRjYXNlIFwiTm90XCI6XG5cdFx0Y2FzZSBcIlRydXRoeVwiOlxuXHRcdFx0cmV0dXJuIGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5vcGVyYW5kKTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbi8vIFRoaXMgaXMgb25lIGNhc2Ugd2hlcmUgYW55IGRvZXMgbWFrZSBzZW5zZS4uLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEZuPFQ+ID0gKCguLi5wYXJhbXM6IGFueSkgPT4gVCB8IFByb21pc2U8VD4pICYge1xuXHRfX2Z1bmN0aW9uTmFtZTogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiBXcmFwcGVkVHVwbGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLWlnbm9yZVxudHlwZSBXcmFwcGVkVHVwbGU8VD4gPSB7IFtLIGluIGtleW9mIFRdOiBXcmFwcGVkVHVwbGU8VFtLXT4gfCBFeHByZXNzaW9uT3JQcmltaXRpdmU8VFtLXT4gfCB1bmRlZmluZWQgfTtcblxuLy8gU28sIHRoaXMgd29ya3MgYnV0IEkgY2Fubm90IGdldCBpdCB0byBjb21waWxlIDpELCBidXQgaXQgc3RpbGwgZG9lcyB3aGF0IGlzIGV4cGVjdGVkLi4uXG5cbi8qKlxuICogQSBmdW5jdGlvbiByZWZlcmVuY2Ugb3IgYSBmdW5jdGlvbiBuYW1lLlxuICovXG50eXBlIEZ1bmN0aW9uT3JOYW1lPFQ+ID0gRm48VD4gfCBzdHJpbmc7XG5cbi8qKlxuICogRnVuY3Rpb24gcGFyYW1ldGVycywgZWl0aGVyIGRlcml2ZWQgZnJvbSB0aGUgZnVuY3Rpb24gb3IgYW4gdW50eXBlZCBhcnJheS5cbiAqL1xudHlwZSBGdW5jdGlvblBhcmFtZXRlcnM8VCwgRiBleHRlbmRzIEZ1bmN0aW9uT3JOYW1lPFQ+PiA9IEYgZXh0ZW5kcyBGbjxUPiA/IFBhcmFtZXRlcnM8Rj4gOiB1bmtub3duW107XG5cbi8qKlxuICogQ2FsbHMgYSBmb3JtYXR0ZXIgZnVuY3Rpb24gdG8gcHJvY2VzcyB0aGUgcGFyYW1ldGVycy5cbiAqIElmIHJlcXVpcmVDb250ZXh0IGlzIHNldCB0byB0cnVlIGFuZCBubyBjb250ZXh0IGlzIHBhc3NlZCBhIGRlZmF1bHQgY29udGV4dCB3aWxsIGJlIGFkZGVkIGF1dG9tYXRpY2FsbHkuXG4gKiBAdGVtcGxhdGUgVFxuICogQHRlbXBsYXRlIFVcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIFRoZSBsaXN0IG9mIHBhcmFtZXRlciB0aGF0IHNob3VsZCBtYXRjaCB0aGUgdHlwZSBhbmQgbnVtYmVyIG9mIHRoZSBmb3JtYXR0ZXIgZnVuY3Rpb25cbiAqIEBwYXJhbSBmb3JtYXR0ZXJGdW5jdGlvbiBUaGUgZnVuY3Rpb24gdG8gY2FsbFxuICogQHBhcmFtIFtjb250ZXh0RW50aXR5VHlwZV0gSWYgbm8gcGFyYW1ldGVyIHJlZmVycyB0byB0aGUgY29udGV4dCB0aGVuIHdlIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIGFkZCBhIHJlZmVyZW5jZSB0byB0aGUga2V5cyBmcm9tIHRoZSBlbnRpdHkgdHlwZS5cbiAqIEBwYXJhbSBbaWdub3JlQ29tcGxleFR5cGVdIFdoZXRoZXIgdG8gaWdub3JlIHRoZSB0cmFuc2dmb3JtYXRpb24gdG8gdGhlIFN0YW5kYXJkRm9ybWF0dGVyIG9yIG5vdFxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UmVzdWx0PFQsIFUgZXh0ZW5kcyBGbjxUPj4oXG5cdHBhcmFtZXRlcnM6IFdyYXBwZWRUdXBsZTxQYXJhbWV0ZXJzPFU+Pixcblx0Zm9ybWF0dGVyRnVuY3Rpb246IFUgfCBzdHJpbmcsXG5cdGNvbnRleHRFbnRpdHlUeXBlPzogRW50aXR5VHlwZSxcblx0aWdub3JlQ29tcGxleFR5cGUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0Y29uc3QgcGFyYW1ldGVyRXhwcmVzc2lvbnMgPSAocGFyYW1ldGVycyBhcyBFeHByZXNzaW9uT3JQcmltaXRpdmU8UHJpbWl0aXZlVHlwZT5bXSkubWFwKHdyYXBQcmltaXRpdmUpO1xuXG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKC4uLnBhcmFtZXRlckV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGlmIChjb250ZXh0RW50aXR5VHlwZSkge1xuXHRcdC8vIE90aGVyd2lzZSwgaWYgdGhlIGNvbnRleHQgaXMgcmVxdWlyZWQgYW5kIG5vIGNvbnRleHQgaXMgcHJvdmlkZWQgbWFrZSBzdXJlIHRvIGFkZCB0aGUgZGVmYXVsdCBiaW5kaW5nXG5cdFx0aWYgKCFwYXJhbWV0ZXJFeHByZXNzaW9ucy5zb21lKGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQpKSB7XG5cdFx0XHRjb250ZXh0RW50aXR5VHlwZS5rZXlzLmZvckVhY2goKGtleSkgPT4gcGFyYW1ldGVyRXhwcmVzc2lvbnMucHVzaChwYXRoSW5Nb2RlbChrZXkubmFtZSwgXCJcIikpKTtcblx0XHR9XG5cdH1cblx0bGV0IGZ1bmN0aW9uTmFtZSA9IFwiXCI7XG5cdGlmICh0eXBlb2YgZm9ybWF0dGVyRnVuY3Rpb24gPT09IFwic3RyaW5nXCIpIHtcblx0XHRmdW5jdGlvbk5hbWUgPSBmb3JtYXR0ZXJGdW5jdGlvbjtcblx0fSBlbHNlIHtcblx0XHRmdW5jdGlvbk5hbWUgPSBmb3JtYXR0ZXJGdW5jdGlvbi5fX2Z1bmN0aW9uTmFtZTtcblx0fVxuXHQvLyBGb3JtYXR0ZXJOYW1lIGNhbiBiZSBvZiBmb3JtYXQgc2FwLmZlLmNvcmUueHh4I21ldGhvZE5hbWUgdG8gaGF2ZSBtdWx0aXBsZSBmb3JtYXR0ZXIgaW4gb25lIGNsYXNzXG5cdGNvbnN0IFtmb3JtYXR0ZXJDbGFzcywgZm9ybWF0dGVyTmFtZV0gPSBmdW5jdGlvbk5hbWUuc3BsaXQoXCIjXCIpO1xuXG5cdC8vIEluIHNvbWUgY2FzZSB3ZSBhbHNvIGNhbm5vdCBjYWxsIGRpcmVjdGx5IGEgZnVuY3Rpb24gYmVjYXVzZSBvZiB0b28gY29tcGxleCBpbnB1dCwgaW4gdGhhdCBjYXNlIHdlIG5lZWQgdG8gY29udmVydCB0byBhIHNpbXBsZXIgZnVuY3Rpb24gY2FsbFxuXHRpZiAoXG5cdFx0IWlnbm9yZUNvbXBsZXhUeXBlICYmXG5cdFx0KHBhcmFtZXRlckV4cHJlc3Npb25zLnNvbWUoaXNDb21wbGV4VHlwZUV4cHJlc3Npb24pIHx8XG5cdFx0XHRwYXJhbWV0ZXJFeHByZXNzaW9ucy5zb21lKGlzQ29uY2F0RXhwcmVzc2lvbikgfHxcblx0XHRcdHBhcmFtZXRlckV4cHJlc3Npb25zLnNvbWUoaXNJZkVsc2VFeHByZXNzaW9uKSlcblx0KSB7XG5cdFx0bGV0IHBhdGhJZHggPSAwO1xuXHRcdGNvbnN0IG15Rm9ybWF0RXhwcmVzc2lvbiA9IGZvcm1hdFJlc3VsdChwYXJhbWV0ZXJFeHByZXNzaW9ucywgZnVuY3Rpb25OYW1lLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdGNvbnN0IGFsbFBhcnRzID0gW107XG5cdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRteUZvcm1hdEV4cHJlc3Npb24sXG5cdFx0XHRcIlBhdGhJbk1vZGVsXCIsXG5cdFx0XHQoY29uc3RhbnRQYXRoOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj4pID0+IHtcblx0XHRcdFx0YWxsUGFydHMucHVzaChjb25zdGFudFBhdGgpO1xuXHRcdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoYCQke3BhdGhJZHgrK31gLCBcIiRcIik7XG5cdFx0XHR9LFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdFx0YWxsUGFydHMudW5zaGlmdChjb25zdGFudChKU09OLnN0cmluZ2lmeShteUZvcm1hdEV4cHJlc3Npb24pKSk7XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChhbGxQYXJ0cywgXCIuX2Zvcm1hdHRlcnMuU3RhbmRhcmRGb3JtYXR0ZXIuYmluZCgkY29udHJvbCkjZXZhbHVhdGVDb21wbGV4RXhwcmVzc2lvblwiLCB1bmRlZmluZWQsIHRydWUpO1xuXHR9IGVsc2UgaWYgKCEhZm9ybWF0dGVyTmFtZSAmJiBmb3JtYXR0ZXJOYW1lLmxlbmd0aCA+IDApIHtcblx0XHRwYXJhbWV0ZXJFeHByZXNzaW9ucy51bnNoaWZ0KGNvbnN0YW50KGZvcm1hdHRlck5hbWUpKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiRm9ybWF0dGVyXCIsXG5cdFx0Zm46IGZvcm1hdHRlckNsYXNzLFxuXHRcdHBhcmFtZXRlcnM6IHBhcmFtZXRlckV4cHJlc3Npb25zXG5cdH07XG59XG5cbnR5cGUgQmluZGluZ0NvbnN0cmFpbnRzID0ge1xuXHRzY2FsZT86IG51bWJlciB8IHN0cmluZztcblx0cHJlY2lzaW9uPzogbnVtYmVyO1xuXHRtYXhMZW5ndGg/OiBudW1iZXI7XG5cdG51bGxhYmxlPzogYm9vbGVhbjtcblx0bWluaW11bT86IHN0cmluZztcblx0bWF4aW11bT86IHN0cmluZztcblx0aXNEaWdpdFNlcXVlbmNlPzogYm9vbGVhbjtcblx0VjQ/OiBib29sZWFuO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBzZXRVcENvbnN0cmFpbnRzKHRhcmdldE1hcHBpbmc6IFR5cGVNYXBwaW5nRGVmaW5pdGlvbiwgcHJvcGVydHk6IFByb3BlcnR5IHwgQWN0aW9uUGFyYW1ldGVyKTogQmluZGluZ0NvbnN0cmFpbnRzIHtcblx0Y29uc3QgY29uc3RyYWludHM6IEJpbmRpbmdDb25zdHJhaW50cyA9IHt9O1xuXHRpZiAodGFyZ2V0TWFwcGluZz8uY29uc3RyYWludHM/LiRTY2FsZSAmJiBwcm9wZXJ0eS5zY2FsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3RyYWludHMuc2NhbGUgPSBwcm9wZXJ0eS5zY2FsZTtcblx0fVxuXHRpZiAodGFyZ2V0TWFwcGluZz8uY29uc3RyYWludHM/LiRQcmVjaXNpb24gJiYgcHJvcGVydHkucHJlY2lzaW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHRjb25zdHJhaW50cy5wcmVjaXNpb24gPSBwcm9wZXJ0eS5wcmVjaXNpb247XG5cdH1cblx0aWYgKHRhcmdldE1hcHBpbmc/LmNvbnN0cmFpbnRzPy4kTWF4TGVuZ3RoICYmIHByb3BlcnR5Lm1heExlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3RyYWludHMubWF4TGVuZ3RoID0gcHJvcGVydHkubWF4TGVuZ3RoO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5udWxsYWJsZSA9PT0gZmFsc2UpIHtcblx0XHRjb25zdHJhaW50cy5udWxsYWJsZSA9IGZhbHNlO1xuXHR9XG5cdGlmICh0YXJnZXRNYXBwaW5nPy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIl0gJiYgIWlzTmFOKHByb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtKSkge1xuXHRcdGNvbnN0cmFpbnRzLm1pbmltdW0gPSBgJHtwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bX1gO1xuXHR9XG5cdGlmICh0YXJnZXRNYXBwaW5nPy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIl0gJiYgIWlzTmFOKHByb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtKSkge1xuXHRcdGNvbnN0cmFpbnRzLm1heGltdW0gPSBgJHtwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bX1gO1xuXHR9XG5cdGlmIChcblx0XHRwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0RpZ2l0U2VxdWVuY2UgJiZcblx0XHR0YXJnZXRNYXBwaW5nLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgJiZcblx0XHR0YXJnZXRNYXBwaW5nPy5jb25zdHJhaW50cz8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RpZ2l0U2VxdWVuY2VcIl1cblx0KSB7XG5cdFx0Y29uc3RyYWludHMuaXNEaWdpdFNlcXVlbmNlID0gdHJ1ZTtcblx0fVxuXHRpZiAodGFyZ2V0TWFwcGluZz8uY29uc3RyYWludHM/LiRWNCkge1xuXHRcdGNvbnN0cmFpbnRzLlY0ID0gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gY29uc3RyYWludHM7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSwgYW5kIHNldHMgdXAgdGhlIGZvcm1hdE9wdGlvbnMgYW5kIGNvbnN0cmFpbnRzLlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBQcm9wZXJ0eSBmb3Igd2hpY2ggd2UgYXJlIHNldHRpbmcgdXAgdGhlIGJpbmRpbmdcbiAqIEBwYXJhbSBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIFRoZSBCaW5kaW5nRXhwcmVzc2lvbiBvZiB0aGUgcHJvcGVydHkgYWJvdmUuIFNlcnZlcyBhcyB0aGUgYmFzaXMgdG8gd2hpY2ggaW5mb3JtYXRpb24gY2FuIGJlIGFkZGVkXG4gKiBAcGFyYW0gaWdub3JlQ29uc3RyYWludHMgSWdub3JlIGNvbnN0cmFpbnRzIG9mIHRoZSBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5IHdpdGggZm9ybWF0T3B0aW9ucyBhbmQgY29uc3RyYWludHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb248VD4oXG5cdHByb3BlcnR5OiBQcm9wZXJ0eSB8IEFjdGlvblBhcmFtZXRlcixcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdGlnbm9yZUNvbnN0cmFpbnRzID0gZmFsc2Vcbik6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPiB7XG5cdGNvbnN0IG91dEV4cHJlc3Npb246IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjx1bmtub3duPiA9IHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+O1xuXHRpZiAocHJvcGVydHkuX3R5cGUgIT09IFwiUHJvcGVydHlcIiAmJiBwcm9wZXJ0eS5fdHlwZSAhPT0gXCJBY3Rpb25QYXJhbWV0ZXJcIikge1xuXHRcdHJldHVybiBvdXRFeHByZXNzaW9uO1xuXHR9XG5cdGNvbnN0IHRhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HW3Byb3BlcnR5LnR5cGVdO1xuXHRpZiAoIXRhcmdldE1hcHBpbmcpIHtcblx0XHRyZXR1cm4gb3V0RXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoIW91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucykge1xuXHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IHt9O1xuXHR9XG5cdG91dEV4cHJlc3Npb24uY29uc3RyYWludHMgPSB7fTtcblxuXHRvdXRFeHByZXNzaW9uLnR5cGUgPSB0YXJnZXRNYXBwaW5nLnR5cGU7XG5cdGlmICghaWdub3JlQ29uc3RyYWludHMpIHtcblx0XHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzID0gc2V0VXBDb25zdHJhaW50cyh0YXJnZXRNYXBwaW5nLCBwcm9wZXJ0eSk7XG5cdH1cblxuXHRpZiAoXG5cdFx0KG91dEV4cHJlc3Npb24/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgJiYgb3V0RXhwcmVzc2lvbj8udHlwZSAhPT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQ2NFwiKSB8fFxuXHRcdG91dEV4cHJlc3Npb24/LnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCJcblx0KSB7XG5cdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zID0gT2JqZWN0LmFzc2lnbihvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsIHtcblx0XHRcdHBhcnNlQXNTdHJpbmc6IGZhbHNlXG5cdFx0fSk7XG5cdH1cblx0aWYgKG91dEV4cHJlc3Npb24udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIiAmJiAoaXNQcm9wZXJ0eShwcm9wZXJ0eSkgfHwgaXNBY3Rpb25QYXJhbWV0ZXIocHJvcGVydHkpKSkge1xuXHRcdGlmIChvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzPy5pc0RpZ2l0U2VxdWVuY2UgfHwgKG91dEV4cHJlc3Npb24uY29uc3RyYWludHM/Lm51bGxhYmxlICE9PSBmYWxzZSAmJiBwcm9wZXJ0eS5udWxsYWJsZSA9PT0gdHJ1ZSkpIHtcblx0XHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucy5wYXJzZUtlZXBzRW1wdHlTdHJpbmcgPSBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zLnBhcnNlS2VlcHNFbXB0eVN0cmluZyA9IHRydWU7XG5cdFx0fVxuXHRcdGlmIChpc1Byb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdFx0Y29uc3QgZmlzY2FsVHlwZSA9IGdldEZpc2NhbFR5cGUocHJvcGVydHkpO1xuXHRcdFx0aWYgKGZpc2NhbFR5cGUpIHtcblx0XHRcdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zLmZpc2NhbFR5cGUgPSBmaXNjYWxUeXBlO1xuXHRcdFx0XHRvdXRFeHByZXNzaW9uLnR5cGUgPSBcInNhcC5mZS5jb3JlLnR5cGUuRmlzY2FsRGF0ZVwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRjb25zdCB0eXBlc1N1cHBvcnRpbmdQYXJzZUVtcHR5VmFsdWVUb1plcm8gPSBbXG5cdFx0XCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQxNlwiLFxuXHRcdFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50MzJcIixcblx0XHRcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDY0XCIsXG5cdFx0XCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TaW5nbGVcIixcblx0XHRcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiLFxuXHRcdFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGVjaW1hbFwiLFxuXHRcdFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQnl0ZVwiLFxuXHRcdFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU0J5dGVcIlxuXHRdO1xuXHRpZiAoXG5cdFx0b3V0RXhwcmVzc2lvbi5jb25zdHJhaW50cz8ubnVsbGFibGUgPT09IGZhbHNlICYmXG5cdFx0b3V0RXhwcmVzc2lvbi50eXBlICYmXG5cdFx0dHlwZXNTdXBwb3J0aW5nUGFyc2VFbXB0eVZhbHVlVG9aZXJvLmluY2x1ZGVzKG91dEV4cHJlc3Npb24udHlwZSlcblx0KSB7XG5cdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zID0gT2JqZWN0LmFzc2lnbihvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsIHtcblx0XHRcdHBhcnNlRW1wdHlWYWx1ZVRvWmVybzogdHJ1ZVxuXHRcdH0pO1xuXHR9XG5cdGlmIChcblx0XHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzPy5udWxsYWJsZSAhPT0gZmFsc2UgJiZcblx0XHQob3V0RXhwcmVzc2lvbi50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDY0XCIgfHwgb3V0RXhwcmVzc2lvbi50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRlY2ltYWxcIilcblx0KSB7XG5cdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zID0gT2JqZWN0LmFzc2lnbihvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsIHtcblx0XHRcdGVtcHR5U3RyaW5nOiBcIlwiXG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gb3V0RXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGNvbnN0IGdldEZpc2NhbFR5cGUgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRmlzY2FsWWVhcikge1xuXHRcdHJldHVybiBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNGaXNjYWxZZWFyO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0Zpc2NhbFBlcmlvZCkge1xuXHRcdHJldHVybiBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNGaXNjYWxQZXJpb2Q7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRmlzY2FsWWVhclBlcmlvZCkge1xuXHRcdHJldHVybiBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNGaXNjYWxZZWFyUGVyaW9kO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0Zpc2NhbFF1YXJ0ZXIpIHtcblx0XHRyZXR1cm4gQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRmlzY2FsUXVhcnRlcjtcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNGaXNjYWxZZWFyUXVhcnRlcikge1xuXHRcdHJldHVybiBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNGaXNjYWxZZWFyUXVhcnRlcjtcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNGaXNjYWxXZWVrKSB7XG5cdFx0cmV0dXJuIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0Zpc2NhbFdlZWs7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRmlzY2FsWWVhcldlZWspIHtcblx0XHRyZXR1cm4gQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRmlzY2FsWWVhcldlZWs7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRGF5T2ZGaXNjYWxZZWFyKSB7XG5cdFx0cmV0dXJuIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0RheU9mRmlzY2FsWWVhcjtcblx0fVxufTtcblxuLyoqXG4gKiBDYWxscyBhIGNvbXBsZXggdHlwZSB0byBwcm9jZXNzIHRoZSBwYXJhbWV0ZXJzLlxuICogSWYgcmVxdWlyZUNvbnRleHQgaXMgc2V0IHRvIHRydWUgYW5kIG5vIGNvbnRleHQgaXMgcGFzc2VkLCBhIGRlZmF1bHQgY29udGV4dCB3aWxsIGJlIGFkZGVkIGF1dG9tYXRpY2FsbHkuXG4gKiBAdGVtcGxhdGUgVFxuICogQHRlbXBsYXRlIFVcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIFRoZSBsaXN0IG9mIHBhcmFtZXRlcnMgdGhhdCBzaG91bGQgbWF0Y2ggdGhlIHR5cGUgZm9yIHRoZSBjb21wbGV4IHR5cGU9XG4gKiBAcGFyYW0gdHlwZSBUaGUgY29tcGxleCB0eXBlIHRvIHVzZVxuICogQHBhcmFtIFtjb250ZXh0RW50aXR5VHlwZV0gVGhlIGNvbnRleHQgZW50aXR5IHR5cGUgdG8gY29uc2lkZXJcbiAqIEBwYXJhbSBvRm9ybWF0T3B0aW9uc1xuICogQHBhcmFtIG9Db25zdHJhaW50T3B0aW9uc1xuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkVHlwZUluZm9ybWF0aW9uPFQsIFUgZXh0ZW5kcyBGbjxUPj4oXG5cdHBhcmFtZXRlcnM6IFdyYXBwZWRUdXBsZTxQYXJhbWV0ZXJzPFU+Pixcblx0dHlwZTogc3RyaW5nLFxuXHRjb250ZXh0RW50aXR5VHlwZT86IEVudGl0eVR5cGUsXG5cdG9Gb3JtYXRPcHRpb25zPzogQ29tcGxleFR5cGVGb3JtYXRPcHRpb25zLFxuXHRvQ29uc3RyYWludE9wdGlvbnM/OiBDb21wbGV4VHlwZUNvbnN0cmFpbnRPcHRpb25zXG4pOiBVbnJlc29sdmFibGVQYXRoRXhwcmVzc2lvbiB8IENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPiB8IENvbnN0YW50RXhwcmVzc2lvbjxUPiB7XG5cdGNvbnN0IHBhcmFtZXRlckV4cHJlc3Npb25zID0gKHBhcmFtZXRlcnMgYXMgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFByaW1pdGl2ZVR5cGU+W10pLm1hcCh3cmFwUHJpbWl0aXZlKTtcblx0aWYgKGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24oLi4ucGFyYW1ldGVyRXhwcmVzc2lvbnMpKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdH1cblx0Ly8gSWYgdGhlcmUgaXMgb25seSBvbmUgcGFyYW1ldGVyIGFuZCBpdCBpcyBhIGNvbnN0YW50IGFuZCB3ZSBkb24ndCBleHBlY3QgdGhlIGNvbnRleHQgdGhlbiByZXR1cm4gdGhlIGNvbnN0YW50XG5cdGlmIChwYXJhbWV0ZXJFeHByZXNzaW9ucy5sZW5ndGggPT09IDEgJiYgaXNDb25zdGFudChwYXJhbWV0ZXJFeHByZXNzaW9uc1swXSkgJiYgIWNvbnRleHRFbnRpdHlUeXBlKSB7XG5cdFx0cmV0dXJuIHBhcmFtZXRlckV4cHJlc3Npb25zWzBdIGFzIENvbnN0YW50RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChjb250ZXh0RW50aXR5VHlwZSkge1xuXHRcdC8vIE90aGVyd2lzZSwgaWYgdGhlIGNvbnRleHQgaXMgcmVxdWlyZWQgYW5kIG5vIGNvbnRleHQgaXMgcHJvdmlkZWQgbWFrZSBzdXJlIHRvIGFkZCB0aGUgZGVmYXVsdCBiaW5kaW5nXG5cdFx0aWYgKCFwYXJhbWV0ZXJFeHByZXNzaW9ucy5zb21lKGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQpKSB7XG5cdFx0XHRjb250ZXh0RW50aXR5VHlwZS5rZXlzLmZvckVhY2goKGtleSkgPT4gcGFyYW1ldGVyRXhwcmVzc2lvbnMucHVzaChwYXRoSW5Nb2RlbChrZXkubmFtZSwgXCJcIikpKTtcblx0XHR9XG5cdH1cblx0b0Zvcm1hdE9wdGlvbnMgPSBfZ2V0Q29tcGxleFR5cGVGb3JtYXRPcHRpb25zRnJvbUZpcnN0UGFyYW0ocGFyYW1ldGVyc1swXSwgb0Zvcm1hdE9wdGlvbnMpO1xuXG5cdGlmICh0eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlVuaXRcIikge1xuXHRcdGNvbnN0IHVvbVBhdGggPSBwYXRoSW5Nb2RlbChcIi8jI0BAcmVxdWVzdFVuaXRzT2ZNZWFzdXJlXCIpO1xuXHRcdHVvbVBhdGgudGFyZ2V0VHlwZSA9IFwiYW55XCI7XG5cdFx0dW9tUGF0aC5tb2RlID0gXCJPbmVUaW1lXCI7XG5cdFx0b0Zvcm1hdE9wdGlvbnMgPz89IHt9O1xuXHRcdG9Gb3JtYXRPcHRpb25zLnByZXNlcnZlRGVjaW1hbHMgPSBvQ29uc3RyYWludE9wdGlvbnM/LnNraXBEZWNpbWFsc1ZhbGlkYXRpb24gPz8gZmFsc2U7XG5cdFx0cGFyYW1ldGVyRXhwcmVzc2lvbnMucHVzaCh1b21QYXRoKTtcblx0fSBlbHNlIGlmICh0eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkN1cnJlbmN5XCIpIHtcblx0XHRjb25zdCBjdXJyZW5jeVBhdGggPSBwYXRoSW5Nb2RlbChcIi8jI0BAcmVxdWVzdEN1cnJlbmN5Q29kZXNcIik7XG5cdFx0Y3VycmVuY3lQYXRoLnRhcmdldFR5cGUgPSBcImFueVwiO1xuXHRcdGN1cnJlbmN5UGF0aC5tb2RlID0gXCJPbmVUaW1lXCI7XG5cdFx0b0Zvcm1hdE9wdGlvbnMgPz89IHt9O1xuXHRcdGlmIChvQ29uc3RyYWludE9wdGlvbnM/LnNraXBEZWNpbWFsc1ZhbGlkYXRpb24gPT09IHRydWUpIHtcblx0XHRcdC8vIFRoaXMgZG9lc24ndCBkbyBhbnl0aGluZyBiZWNhdXNlIGl0IGdldHMgb3ZlcndyaXR0ZW4gYnkgdGhlIGBkZWNpbWFsc2AgZnJvbSB0aGUgY3VycmVuY3kgY29kZSBsaXN0XG5cdFx0XHRvRm9ybWF0T3B0aW9ucy5tYXhGcmFjdGlvbkRpZ2l0cyA9IDk5OyAvLyBzZXR0aW5nIHRvIDk5IHRvIGF2b2lkIHJvdW5kaW5nIGluIGN1cnJlbmN5IGNvbnZlcnNpb25cblx0XHR9XG5cblx0XHRvRm9ybWF0T3B0aW9ucy5wcmVzZXJ2ZURlY2ltYWxzID0gb0NvbnN0cmFpbnRPcHRpb25zPy5za2lwRGVjaW1hbHNWYWxpZGF0aW9uID8/IGZhbHNlOyAvLyBkZWZhdWx0IHZhbHVlIHNpbmNlIHdlIGRvbid0IGhhdmUgYSBDTERSXG5cdFx0cGFyYW1ldGVyRXhwcmVzc2lvbnMucHVzaChjdXJyZW5jeVBhdGgpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJDb21wbGV4VHlwZVwiLFxuXHRcdHR5cGU6IHR5cGUsXG5cdFx0Zm9ybWF0T3B0aW9uczogb0Zvcm1hdE9wdGlvbnMgfHwge30sXG5cdFx0Y29uc3RyYWludHM6IG9Db25zdHJhaW50T3B0aW9ucyB8fCB7fSxcblx0XHRwYXJhbWV0ZXJzOiB7fSxcblx0XHRiaW5kaW5nUGFyYW1ldGVyczogcGFyYW1ldGVyRXhwcmVzc2lvbnNcblx0fTtcbn1cblxudHlwZSBDb21wbGV4VHlwZUZvcm1hdE9wdGlvbnMgPSB7XG5cdGRlY2ltYWxzPzogbnVtYmVyO1xuXHRtYXhGcmFjdGlvbkRpZ2l0cz86IG51bWJlcjtcblx0c2hvd051bWJlcj86IGJvb2xlYW47XG5cdHNob3dNZWFzdXJlPzogYm9vbGVhbjtcblx0cGFyc2VBc1N0cmluZz86IGJvb2xlYW47XG5cdHBhcnNlS2VlcHNFbXB0eVN0cmluZz86IGJvb2xlYW47XG5cdGVtcHR5U3RyaW5nPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbDtcblx0c2hvd1RpbWU/OiBib29sZWFuO1xuXHRzaG93RGF0ZT86IGJvb2xlYW47XG5cdHNob3dUaW1lem9uZT86IGJvb2xlYW47XG5cdHByZXNlcnZlRGVjaW1hbHM/OiBib29sZWFuO1xuXHRkZWNpbWFsUGFkZGluZz86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIENvbXBsZXhUeXBlQ29uc3RyYWludE9wdGlvbnMgPSB7XG5cdHNraXBEZWNpbWFsc1ZhbGlkYXRpb24/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzIHRoZSBmb3JtYXRPcHRpb25zIGZvciBhIGNvbXBsZXhUeXBlIGJhc2VkIG9uIHRoZSBmaXJzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gcGFyYW0gVGhlIGZpcnN0IHBhcmFtZXRlciBvZiB0aGUgY29tcGxleCB0eXBlXG4gKiBAcGFyYW0gZm9ybWF0T3B0aW9ucyBJbml0aWFsIGZvcm1hdE9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBtb2RpZmllZCBmb3JtYXRPcHRpb25zXG4gKi9cbmZ1bmN0aW9uIF9nZXRDb21wbGV4VHlwZUZvcm1hdE9wdGlvbnNGcm9tRmlyc3RQYXJhbShcblx0cGFyYW06IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPixcblx0Zm9ybWF0T3B0aW9uczogdW5kZWZpbmVkIHwgQ29tcGxleFR5cGVGb3JtYXRPcHRpb25zXG4pOiBDb21wbGV4VHlwZUZvcm1hdE9wdGlvbnMgfCB1bmRlZmluZWQge1xuXHQvLyBpZiBzaG93TWVhc3VyZSBpcyBzZXQgdG8gZmFsc2Ugd2Ugd2FudCB0byBub3QgcGFyc2UgYXMgc3RyaW5nIHRvIHNlZSB0aGUgMFxuXHQvLyB3ZSBkbyB0aGF0IGFsc28gZm9yIGFsbCBiaW5kaW5ncyBiZWNhdXNlIG90aGVyd2lzZSB0aGUgbWRjIEZpZWxkIGlzbid0IGVkaXRhYmxlXG5cdGlmIChcblx0XHQhKGZvcm1hdE9wdGlvbnMgJiYgZm9ybWF0T3B0aW9ucy5zaG93TnVtYmVyID09PSBmYWxzZSkgJiZcblx0XHQocGFyYW0/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdHBhcmFtPy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRlY2ltYWxcIiB8fFxuXHRcdFx0cGFyYW0/LnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCIpXG5cdCkge1xuXHRcdGlmIChwYXJhbT8udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQ2NFwiIHx8IHBhcmFtPy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRlY2ltYWxcIikge1xuXHRcdFx0Ly9zYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQ2NCBkbyBub3Qgc3VwcG9ydCBwYXJzZUFzU3RyaW5nIGZhbHNlXG5cdFx0XHRmb3JtYXRPcHRpb25zID1cblx0XHRcdFx0Zm9ybWF0T3B0aW9ucz8uc2hvd01lYXN1cmUgPT09IGZhbHNlXG5cdFx0XHRcdFx0PyB7IHNob3dNZWFzdXJlOiBmYWxzZSwgZGVjaW1hbFBhZGRpbmc6IGZvcm1hdE9wdGlvbnMuZGVjaW1hbFBhZGRpbmcsIGVtcHR5U3RyaW5nOiBmb3JtYXRPcHRpb25zPy5lbXB0eVN0cmluZyB9XG5cdFx0XHRcdFx0OiB7IGRlY2ltYWxQYWRkaW5nOiBmb3JtYXRPcHRpb25zPy5kZWNpbWFsUGFkZGluZywgZW1wdHlTdHJpbmc6IGZvcm1hdE9wdGlvbnM/LmVtcHR5U3RyaW5nIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvcm1hdE9wdGlvbnMgPVxuXHRcdFx0XHRmb3JtYXRPcHRpb25zPy5zaG93TWVhc3VyZSA9PT0gZmFsc2Vcblx0XHRcdFx0XHQ/IHtcblx0XHRcdFx0XHRcdFx0cGFyc2VBc1N0cmluZzogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdHNob3dNZWFzdXJlOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0ZGVjaW1hbFBhZGRpbmc6IGZvcm1hdE9wdGlvbnMuZGVjaW1hbFBhZGRpbmcsXG5cdFx0XHRcdFx0XHRcdGVtcHR5U3RyaW5nOiBmb3JtYXRPcHRpb25zPy5lbXB0eVN0cmluZ1xuXHRcdFx0XHRcdCAgfVxuXHRcdFx0XHRcdDogeyBwYXJzZUFzU3RyaW5nOiBmYWxzZSwgZGVjaW1hbFBhZGRpbmc6IGZvcm1hdE9wdGlvbnM/LmRlY2ltYWxQYWRkaW5nLCBlbXB0eVN0cmluZzogZm9ybWF0T3B0aW9ucz8uZW1wdHlTdHJpbmcgfTtcblx0XHR9XG5cdFx0aWYgKHBhcmFtPy5jb25zdHJhaW50cz8ubnVsbGFibGUgIT09IGZhbHNlKSB7XG5cdFx0XHRmb3JtYXRPcHRpb25zLmVtcHR5U3RyaW5nID0gbnVsbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9ybWF0T3B0aW9ucy5lbXB0eVN0cmluZyA/Pz0gMDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZvcm1hdE9wdGlvbnM7XG59XG4vKipcbiAqIEZ1bmN0aW9uIGNhbGwsIG9wdGlvbmFsbHkgd2l0aCBhcmd1bWVudHMuXG4gKiBAcGFyYW0gZnVuYyBGdW5jdGlvbiBuYW1lIG9yIHJlZmVyZW5jZSB0byBmdW5jdGlvblxuICogQHBhcmFtIHBhcmFtZXRlcnMgQXJndW1lbnRzXG4gKiBAcGFyYW0gb24gT2JqZWN0IHRvIGNhbGwgdGhlIGZ1bmN0aW9uIG9uXG4gKiBAcGFyYW0gaXNGb3JtYXR0aW5nRm5cbiAqIEByZXR1cm5zIEV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBmdW5jdGlvbiBjYWxsIChub3QgdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gY2FsbCEpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbjxULCBVIGV4dGVuZHMgRnVuY3Rpb25Pck5hbWU8VD4+KFxuXHRmdW5jOiBVLFxuXHRwYXJhbWV0ZXJzOiBXcmFwcGVkVHVwbGU8RnVuY3Rpb25QYXJhbWV0ZXJzPFQsIFU+Pixcblx0b24/OiBFeHByZXNzaW9uT3JQcmltaXRpdmU8b2JqZWN0Pixcblx0aXNGb3JtYXR0aW5nRm4gPSBmYWxzZVxuKTogRnVuY3Rpb25FeHByZXNzaW9uPFQ+IHtcblx0Y29uc3QgZnVuY3Rpb25OYW1lID0gdHlwZW9mIGZ1bmMgPT09IFwic3RyaW5nXCIgPyBmdW5jIDogZnVuYy5fX2Z1bmN0aW9uTmFtZTtcblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJGdW5jdGlvblwiLFxuXHRcdG9iajogb24gIT09IHVuZGVmaW5lZCA/IHdyYXBQcmltaXRpdmUob24pIDogdW5kZWZpbmVkLFxuXHRcdGZuOiBmdW5jdGlvbk5hbWUsXG5cdFx0aXNGb3JtYXR0aW5nRm46IGlzRm9ybWF0dGluZ0ZuLFxuXHRcdHBhcmFtZXRlcnM6IChwYXJhbWV0ZXJzIGFzIEV4cHJlc3Npb25PclByaW1pdGl2ZTxQcmltaXRpdmVUeXBlPltdKS5tYXAod3JhcFByaW1pdGl2ZSlcblx0fTtcbn1cblxuLyoqXG4gKiBTaG9ydGN1dCBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYSBiaW5kaW5nIHZhbHVlIGlzIG51bGwsIHVuZGVmaW5lZCBvciBlbXB0eS5cbiAqIEBwYXJhbSBleHByZXNzaW9uXG4gKiBAcmV0dXJucyBBIEJvb2xlYW4gZXhwcmVzc2lvbiBldmFsdWF0aW5nIHRoZSBmYWN0IHRoYXQgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyBlbXB0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eShleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGFCaW5kaW5nczogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+W10gPSBbXTtcblx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoZXhwcmVzc2lvbiwgXCJQYXRoSW5Nb2RlbFwiLCAoZXhwcikgPT4ge1xuXHRcdGNvbnN0IGZpbmFsRXhwcmVzc2lvbiA9IHsgLi4uZXhwciwgYWx3YXlzS2VlcFRhcmdldFR5cGU6IHRydWUgfSBhcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248c3RyaW5nPjtcblx0XHRhQmluZGluZ3MucHVzaChvcihlcXVhbChmaW5hbEV4cHJlc3Npb24sIFwiXCIpLCBlcXVhbChleHByLCB1bmRlZmluZWQpLCBlcXVhbChleHByLCBudWxsKSkpO1xuXHRcdHJldHVybiBleHByO1xuXHR9KTtcblx0cmV0dXJuIGFuZCguLi5hQmluZGluZ3MpO1xufVxuLyoqXG4gKiBTaG9ydGN1dCBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYSBiaW5kaW5nIGNhbiBiZSBzdGF0aWNhbGx5IHJlc29sdmFibGUuXG4gKiBAcGFyYW0gZXhwIFRoZSBleHByZXNzaW9uIHRvIGV2YWx1YXRlXG4gKiBAcmV0dXJucyBBIEJvb2xlYW4gZXZhbHVhdGluZyBpZiB0aGVyZSBpcyBubyByZWxhdGl2ZSBwYXRoIGRlcGVuZGVudCBvbiB0aGUgY3VycmVudCBjb250ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0V4cHJlc3Npb25TdGF0aWNhbGx5UmVzb2x2YWJsZTxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oZXhwOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4pOiBib29sZWFuIHtcblx0Y29uc3QgcmVmZXJlbmNlZFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHR0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRleHAsXG5cdFx0XCJQYXRoSW5Nb2RlbFwiLFxuXHRcdChwYXRoRXhwKSA9PiB7XG5cdFx0XHRpZiAocGF0aEV4cC5tb2RlbE5hbWUgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcGF0aEV4cC5wYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdHJlZmVyZW5jZWRQYXRocy5wdXNoKHBhdGhFeHAucGF0aCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcGF0aEV4cDtcblx0XHR9LFxuXHRcdHRydWVcblx0KTtcblx0aWYgKHJlZmVyZW5jZWRQYXRocy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gcmVmZXJlbmNlZFBhdGhzLmV2ZXJ5KChwKSA9PiBwLnN0YXJ0c1dpdGgoXCIvXCIpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXRpY2FsbHlSZXNvbHZhYmxlRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LFxuXHRkZWZhdWx0VmFsdWU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0aWYgKGV4cC5fdHlwZSA9PT0gXCJTZXRcIikge1xuXHRcdGNvbnN0IG5ld09wZXJhbmRzID0gZXhwLm9wZXJhbmRzLm1hcCgob3BlcmFuZDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KSA9PiB7XG5cdFx0XHRpZiAoaXNFeHByZXNzaW9uU3RhdGljYWxseVJlc29sdmFibGUob3BlcmFuZCkgfHwgaXNDb25zdGFudChvcGVyYW5kKSkge1xuXHRcdFx0XHRyZXR1cm4gb3BlcmFuZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBkZWZhdWx0VmFsdWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpZiAoZXhwLm9wZXJhdG9yID09PSBcInx8XCIpIHtcblx0XHRcdHJldHVybiBvciguLi4obmV3T3BlcmFuZHMgYXMgdW5rbm93biBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSkpIGFzIHVua25vd24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gYW5kKC4uLihuZXdPcGVyYW5kcyBhcyB1bmtub3duIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdKSkgYXMgdW5rbm93biBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0fVxuXHR9XG5cdHJldHVybiBpc0V4cHJlc3Npb25TdGF0aWNhbGx5UmVzb2x2YWJsZShleHApID8gZXhwIDogZGVmYXVsdFZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0KC4uLmluRXhwcmVzc2lvbnM6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxzdHJpbmc+W10pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IGV4cHJlc3Npb25zID0gaW5FeHByZXNzaW9ucy5tYXAod3JhcFByaW1pdGl2ZSk7XG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKC4uLmV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGlmIChleHByZXNzaW9ucy5ldmVyeShpc0NvbnN0YW50KSkge1xuXHRcdHJldHVybiBjb25zdGFudChcblx0XHRcdGV4cHJlc3Npb25zLnJlZHVjZSgoY29uY2F0ZW5hdGVkOiBzdHJpbmcsIHZhbHVlKSA9PiB7XG5cdFx0XHRcdGlmICh2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLnZhbHVlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbmNhdGVuYXRlZCArIHZhbHVlLnZhbHVlLnRvU3RyaW5nKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGNvbmNhdGVuYXRlZDtcblx0XHRcdH0sIFwiXCIpXG5cdFx0KTtcblx0fSBlbHNlIGlmIChleHByZXNzaW9ucy5zb21lKGlzQ29tcGxleFR5cGVFeHByZXNzaW9uKSkge1xuXHRcdGxldCBwYXRoSWR4ID0gMDtcblx0XHRjb25zdCBteUNvbmNhdEV4cHJlc3Npb24gPSBmb3JtYXRSZXN1bHQoZXhwcmVzc2lvbnMsIFwiLl9mb3JtYXR0ZXJzLlN0YW5kYXJkRm9ybWF0dGVyI2NvbmNhdFwiLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdGNvbnN0IGFsbFBhcnRzID0gW107XG5cdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkobXlDb25jYXRFeHByZXNzaW9uLCBcIlBhdGhJbk1vZGVsXCIsIChjb25zdGFudFBhdGg6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjx1bmtub3duPikgPT4ge1xuXHRcdFx0YWxsUGFydHMucHVzaChjb25zdGFudFBhdGgpO1xuXHRcdFx0cmV0dXJuIHBhdGhJbk1vZGVsKGAkJHtwYXRoSWR4Kyt9YCwgXCIkXCIpO1xuXHRcdH0pO1xuXHRcdGFsbFBhcnRzLnVuc2hpZnQoY29uc3RhbnQoSlNPTi5zdHJpbmdpZnkobXlDb25jYXRFeHByZXNzaW9uKSkpO1xuXHRcdHJldHVybiBmb3JtYXRSZXN1bHQoYWxsUGFydHMsIFwiLl9mb3JtYXR0ZXJzLlN0YW5kYXJkRm9ybWF0dGVyLmJpbmQoJGNvbnRyb2wpI2V2YWx1YXRlQ29tcGxleEV4cHJlc3Npb25cIiwgdW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIkNvbmNhdFwiLFxuXHRcdGV4cHJlc3Npb25zOiBleHByZXNzaW9uc1xuXHR9O1xufVxuXG50eXBlIEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPFQgZXh0ZW5kcyBFeHByZXNzaW9uVHlwZSwgVj4gPSBUIGV4dGVuZHMgXCJDb25zdGFudFwiXG5cdD8gQ29uc3RhbnRFeHByZXNzaW9uPFY+XG5cdDogVCBleHRlbmRzIFwiUGF0aEluTW9kZWxcIlxuXHQ/IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxWPlxuXHQ6IFQgZXh0ZW5kcyBcIkZ1bmN0aW9uXCJcblx0PyBGdW5jdGlvbkV4cHJlc3Npb248Vj5cblx0OiBUIGV4dGVuZHMgXCJVbnJlc29sdmFibGVcIlxuXHQ/IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uXG5cdDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFY+O1xuXG5leHBvcnQgdHlwZSBUcmFuc2Zvcm1GdW5jdGlvbjxULCBWPiA9IChleHByZXNzaW9uUGFydDogVCkgPT4gQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFY+O1xuZXhwb3J0IHR5cGUgRXhwcmVzc2lvblR5cGUgPSBQaWNrPEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiwgXCJfdHlwZVwiPltcIl90eXBlXCJdO1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVJlY3Vyc2l2ZWx5PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlIHwgdW5rbm93biwgRVQgZXh0ZW5kcyBFeHByZXNzaW9uVHlwZT4oXG5cdGluRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LFxuXHRleHByZXNzaW9uVHlwZTogRVQsXG5cdHRyYW5zZm9ybUZ1bmN0aW9uOiBUcmFuc2Zvcm1GdW5jdGlvbjxFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgVD4sIFQ+LFxuXHRpbmNsdWRlQWxsRXhwcmVzc2lvbiA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4ge1xuXHRsZXQgZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+ID0gaW5FeHByZXNzaW9uO1xuXHRzd2l0Y2ggKGV4cHJlc3Npb24uX3R5cGUpIHtcblx0XHRjYXNlIFwiRnVuY3Rpb25cIjpcblx0XHRjYXNlIFwiRm9ybWF0dGVyXCI6XG5cdFx0XHRleHByZXNzaW9uLnBhcmFtZXRlcnMgPSBleHByZXNzaW9uLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+XG5cdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KHBhcmFtZXRlciBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sIGV4cHJlc3Npb25UeXBlLCB0cmFuc2Zvcm1GdW5jdGlvbiwgaW5jbHVkZUFsbEV4cHJlc3Npb24pXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkNvbmNhdFwiOlxuXHRcdFx0ZXhwcmVzc2lvbi5leHByZXNzaW9ucyA9IGV4cHJlc3Npb24uZXhwcmVzc2lvbnMubWFwKChzdWJFeHByZXNzaW9uKSA9PlxuXHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRzdWJFeHByZXNzaW9uLFxuXHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uIGFzIHVua25vd24gYXMgVHJhbnNmb3JtRnVuY3Rpb248RXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIHN0cmluZz4sIHN0cmluZz4sXG5cdFx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRcdGV4cHJlc3Npb24gPSBjb25jYXQoLi4uZXhwcmVzc2lvbi5leHByZXNzaW9ucykgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkNvbXBsZXhUeXBlXCI6XG5cdFx0XHRleHByZXNzaW9uLmJpbmRpbmdQYXJhbWV0ZXJzID0gZXhwcmVzc2lvbi5iaW5kaW5nUGFyYW1ldGVycy5tYXAoKGJpbmRpbmdQYXJhbWV0ZXIpID0+XG5cdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdGJpbmRpbmdQYXJhbWV0ZXIgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LFxuXHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uLFxuXHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiSWZFbHNlXCI6XG5cdFx0XHRjb25zdCBvblRydWUgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0ZXhwcmVzc2lvbi5vblRydWUsXG5cdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbiBhcyB1bmtub3duIGFzIFRyYW5zZm9ybUZ1bmN0aW9uPEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPEVULCB1bmtub3duPiwgdW5rbm93bj4sXG5cdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3Qgb25GYWxzZSA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRleHByZXNzaW9uLm9uRmFsc2UsXG5cdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbiBhcyB1bmtub3duIGFzIFRyYW5zZm9ybUZ1bmN0aW9uPEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPEVULCB1bmtub3duPiwgdW5rbm93bj4sXG5cdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHQpO1xuXHRcdFx0bGV0IGNvbmRpdGlvbiA9IGV4cHJlc3Npb24uY29uZGl0aW9uO1xuXHRcdFx0aWYgKGluY2x1ZGVBbGxFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGNvbmRpdGlvbiA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdGV4cHJlc3Npb24uY29uZGl0aW9uLFxuXHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uIGFzIHVua25vd24gYXMgVHJhbnNmb3JtRnVuY3Rpb248RXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIGJvb2xlYW4+LCBib29sZWFuPixcblx0XHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0ZXhwcmVzc2lvbiA9IGlmRWxzZShjb25kaXRpb24sIG9uVHJ1ZSwgb25GYWxzZSkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdFx0aWYgKGluY2x1ZGVBbGxFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGNvbnN0IG9wZXJhbmQgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRleHByZXNzaW9uLm9wZXJhbmQsXG5cdFx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24gYXMgdW5rbm93biBhcyBUcmFuc2Zvcm1GdW5jdGlvbjxFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgYm9vbGVhbj4sIGJvb2xlYW4+LFxuXHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGV4cHJlc3Npb24gPSBub3Qob3BlcmFuZCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlRydXRoeVwiOlxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlNldFwiOlxuXHRcdFx0aWYgKGluY2x1ZGVBbGxFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGNvbnN0IG9wZXJhbmRzID0gZXhwcmVzc2lvbi5vcGVyYW5kcy5tYXAoKG9wZXJhbmQpID0+XG5cdFx0XHRcdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0XHRvcGVyYW5kLFxuXHRcdFx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbiBhcyB1bmtub3duIGFzIFRyYW5zZm9ybUZ1bmN0aW9uPEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPEVULCBib29sZWFuPiwgYm9vbGVhbj4sXG5cdFx0XHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdFx0ZXhwcmVzc2lvbiA9XG5cdFx0XHRcdFx0ZXhwcmVzc2lvbi5vcGVyYXRvciA9PT0gXCJ8fFwiXG5cdFx0XHRcdFx0XHQ/IChvciguLi5vcGVyYW5kcykgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+KVxuXHRcdFx0XHRcdFx0OiAoYW5kKC4uLm9wZXJhbmRzKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4pO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkNvbXBhcmlzb25cIjpcblx0XHRcdGlmIChpbmNsdWRlQWxsRXhwcmVzc2lvbikge1xuXHRcdFx0XHRjb25zdCBvcGVyYW5kMSA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdGV4cHJlc3Npb24ub3BlcmFuZDEgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LFxuXHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uLFxuXHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IG9wZXJhbmQyID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0ZXhwcmVzc2lvbi5vcGVyYW5kMiBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sXG5cdFx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24sXG5cdFx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdFx0KTtcblx0XHRcdFx0ZXhwcmVzc2lvbiA9IGNvbXBhcmlzb24oZXhwcmVzc2lvbi5vcGVyYXRvciwgb3BlcmFuZDEsIG9wZXJhbmQyKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQXJpdGhtZXRpY1wiOlxuXHRcdFx0Y29uc3Qgb3BlcmFuZDEgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0ZXhwcmVzc2lvbi5vcGVyYW5kMSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sXG5cdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbixcblx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdCk7XG5cdFx0XHRjb25zdCBvcGVyYW5kMiA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRleHByZXNzaW9uLm9wZXJhbmQyIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPixcblx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uLFxuXHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0KTtcblx0XHRcdGV4cHJlc3Npb24gPSBhcml0aG1ldGljKGV4cHJlc3Npb24ub3BlcmF0b3IsIG9wZXJhbmQxLCBvcGVyYW5kMikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0XHRjb25zdCBjb25zdGFudFZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4+ID0gZXhwcmVzc2lvbi52YWx1ZSBhcyBSZWNvcmQ8XG5cdFx0XHRcdHN0cmluZyxcblx0XHRcdFx0QmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+XG5cdFx0XHQ+O1xuXHRcdFx0aWYgKHR5cGVvZiBjb25zdGFudFZhbHVlID09PSBcIm9iamVjdFwiICYmIGNvbnN0YW50VmFsdWUpIHtcblx0XHRcdFx0T2JqZWN0LmtleXMoY29uc3RhbnRWYWx1ZSkuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3RhbnRWYWx1ZVtrZXldID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0XHRjb25zdGFudFZhbHVlW2tleV0sXG5cdFx0XHRcdFx0XHRleHByZXNzaW9uVHlwZSxcblx0XHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uIGFzIHVua25vd24gYXMgVHJhbnNmb3JtRnVuY3Rpb248RXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIHVua25vd24+LCB1bmtub3duPixcblx0XHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiUmVmXCI6XG5cdFx0Y2FzZSBcIkxlbmd0aFwiOlxuXHRcdGNhc2UgXCJQYXRoSW5Nb2RlbFwiOlxuXHRcdGNhc2UgXCJFbWJlZGRlZEJpbmRpbmdcIjpcblx0XHRjYXNlIFwiRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ1wiOlxuXHRcdGNhc2UgXCJVbnJlc29sdmFibGVcIjpcblx0XHRcdC8vIERvIG5vdGhpbmdcblx0XHRcdGJyZWFrO1xuXHR9XG5cdGlmIChleHByZXNzaW9uVHlwZSA9PT0gZXhwcmVzc2lvbi5fdHlwZSkge1xuXHRcdGV4cHJlc3Npb24gPSB0cmFuc2Zvcm1GdW5jdGlvbihpbkV4cHJlc3Npb24gYXMgRXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIFQ+KTtcblx0fVxuXHRyZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IHR5cGUgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gPSBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbmNvbnN0IG5lZWRQYXJlbnRoZXNpcyA9IGZ1bmN0aW9uIDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oZXhwcjogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+KTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0IWlzQ29uc3RhbnQoZXhwcikgJiZcblx0XHQhaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24oZXhwcikgJiZcblx0XHRpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbihleHByKSAmJlxuXHRcdGV4cHIuX3R5cGUgIT09IFwiSWZFbHNlXCIgJiZcblx0XHRleHByLl90eXBlICE9PSBcIkZ1bmN0aW9uXCJcblx0KTtcbn07XG5cbi8qKlxuICogQ29tcGlsZXMgYSBjb25zdGFudCBvYmplY3QgdG8gYSBzdHJpbmcuXG4gKiBAcGFyYW0gZXhwclxuICogQHBhcmFtIGlzTnVsbGFibGVcbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gY29tcGlsZUNvbnN0YW50T2JqZWN0KGV4cHI6IENvbnN0YW50RXhwcmVzc2lvbjxvYmplY3Q+LCBpc051bGxhYmxlID0gZmFsc2UpOiBzdHJpbmcge1xuXHRpZiAoaXNOdWxsYWJsZSAmJiBPYmplY3Qua2V5cyhleHByLnZhbHVlKS5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXHRjb25zdCBvYmplY3RzID0gZXhwci52YWx1ZSBhcyBQbGFpbkV4cHJlc3Npb25PYmplY3Q7XG5cdGNvbnN0IHByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdE9iamVjdC5rZXlzKG9iamVjdHMpLmZvckVhY2goKGtleSkgPT4ge1xuXHRcdGNvbnN0IHZhbHVlID0gb2JqZWN0c1trZXldO1xuXHRcdGNvbnN0IGNoaWxkUmVzdWx0ID0gY29tcGlsZUV4cHJlc3Npb24odmFsdWUsIHRydWUsIGZhbHNlLCBpc051bGxhYmxlKTtcblx0XHRpZiAoY2hpbGRSZXN1bHQgJiYgY2hpbGRSZXN1bHQubGVuZ3RoID4gMCkge1xuXHRcdFx0cHJvcGVydGllcy5wdXNoKGAke2tleX06ICR7Y2hpbGRSZXN1bHR9YCk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGB7JHtwcm9wZXJ0aWVzLmpvaW4oXCIsIFwiKX19YDtcbn1cblxuLyoqXG4gKiBDb21waWxlcyBhIENvbnN0YW50IEJpbmRpbmcgRXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBleHByXG4gKiBAcGFyYW0gZW1iZWRkZWRJbkJpbmRpbmdcbiAqIEBwYXJhbSBpc051bGxhYmxlXG4gKiBAcGFyYW0gZG9Ob3RTdHJpbmdpZnlcbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVDb25zdGFudDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cHI6IENvbnN0YW50RXhwcmVzc2lvbjxUPixcblx0ZW1iZWRkZWRJbkJpbmRpbmc6IGJvb2xlYW4sXG5cdGlzTnVsbGFibGU/OiBib29sZWFuLFxuXHRkb05vdFN0cmluZ2lmeT86IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlQ29uc3RhbnQ8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRleHByOiBDb25zdGFudEV4cHJlc3Npb248VD4sXG5cdGVtYmVkZGVkSW5CaW5kaW5nOiBib29sZWFuLFxuXHRpc051bGxhYmxlPzogYm9vbGVhbixcblx0ZG9Ob3RTdHJpbmdpZnk/OiB0cnVlXG4pOiBQcmltaXRpdmVUeXBlO1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVDb25zdGFudDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cHI6IENvbnN0YW50RXhwcmVzc2lvbjxUPixcblx0ZW1iZWRkZWRJbkJpbmRpbmc6IGJvb2xlYW4sXG5cdGlzTnVsbGFibGUgPSBmYWxzZSxcblx0ZG9Ob3RTdHJpbmdpZnkgPSBmYWxzZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBQcmltaXRpdmVUeXBlIHtcblx0aWYgKGV4cHIudmFsdWUgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gZG9Ob3RTdHJpbmdpZnkgPyBudWxsIDogXCJudWxsXCI7XG5cdH1cblx0aWYgKGV4cHIudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBkb05vdFN0cmluZ2lmeSA/IHVuZGVmaW5lZCA6IFwidW5kZWZpbmVkXCI7XG5cdH1cblx0aWYgKHR5cGVvZiBleHByLnZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoZXhwci52YWx1ZSkpIHtcblx0XHRcdGNvbnN0IGVudHJpZXMgPSBleHByLnZhbHVlLm1hcCgoZXhwcmVzc2lvbikgPT4gY29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdHJ1ZSkpO1xuXHRcdFx0cmV0dXJuIGBbJHtlbnRyaWVzLmpvaW4oXCIsIFwiKX1dYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVDb25zdGFudE9iamVjdChleHByIGFzIENvbnN0YW50RXhwcmVzc2lvbjxvYmplY3Q+LCBpc051bGxhYmxlKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRzd2l0Y2ggKHR5cGVvZiBleHByLnZhbHVlKSB7XG5cdFx0XHRjYXNlIFwibnVtYmVyXCI6XG5cdFx0XHRjYXNlIFwiYmlnaW50XCI6XG5cdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0XHRyZXR1cm4gZXhwci52YWx1ZS50b1N0cmluZygpO1xuXHRcdFx0Y2FzZSBcInN0cmluZ1wiOlxuXHRcdFx0XHRyZXR1cm4gYCcke2VzY2FwZVhtbEF0dHJpYnV0ZShleHByLnZhbHVlLnRvU3RyaW5nKCkpfSdgO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBkb05vdFN0cmluZ2lmeSA/IGV4cHIudmFsdWUgOiBleHByLnZhbHVlLnRvU3RyaW5nKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGJpbmRpbmcgc3RyaW5nIGZvciBhIEJpbmRpbmcgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBleHByZXNzaW9uRm9yQmluZGluZyBUaGUgZXhwcmVzc2lvbiB0byBjb21waWxlXG4gKiBAcGFyYW0gZW1iZWRkZWRJbkJpbmRpbmcgV2hldGhlciB0aGUgZXhwcmVzc2lvbiB0byBjb21waWxlIGlzIGVtYmVkZGVkIGludG8gYW5vdGhlciBleHByZXNzaW9uXG4gKiBAcGFyYW0gZW1iZWRkZWRTZXBhcmF0b3IgVGhlIGJpbmRpbmcgdmFsdWUgZXZhbHVhdG9yICgkIG9yICUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2Ugd2FudCB0byBmb3JjZSB0aGUgdHlwZSBvciBub3QpXG4gKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBleHByZXNzaW9uIGJpbmRpbmdcbiAqL1xuZnVuY3Rpb24gY29tcGlsZVBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cHJlc3Npb25Gb3JCaW5kaW5nOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4sXG5cdGVtYmVkZGVkSW5CaW5kaW5nOiBib29sZWFuLFxuXHRlbWJlZGRlZFNlcGFyYXRvcjogc3RyaW5nXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGlmIChcblx0XHRleHByZXNzaW9uRm9yQmluZGluZy50eXBlIHx8XG5cdFx0ZXhwcmVzc2lvbkZvckJpbmRpbmcucGFyYW1ldGVycyB8fFxuXHRcdGV4cHJlc3Npb25Gb3JCaW5kaW5nLnRhcmdldFR5cGUgfHxcblx0XHRleHByZXNzaW9uRm9yQmluZGluZy5mb3JtYXRPcHRpb25zIHx8XG5cdFx0ZXhwcmVzc2lvbkZvckJpbmRpbmcuY29uc3RyYWludHNcblx0KSB7XG5cdFx0Ly8gVGhpcyBpcyBub3cgYSBjb21wbGV4IGJpbmRpbmcgZGVmaW5pdGlvbiwgbGV0J3MgcHJlcGFyZSBmb3IgaXRcblx0XHRjb25zdCBjb21wbGV4QmluZGluZ0RlZmluaXRpb24gPSB7XG5cdFx0XHRwYXRoOiBjb21waWxlUGF0aEluTW9kZWwoZXhwcmVzc2lvbkZvckJpbmRpbmcpLFxuXHRcdFx0dHlwZTogZXhwcmVzc2lvbkZvckJpbmRpbmcudHlwZSxcblx0XHRcdHRhcmdldFR5cGU6IGV4cHJlc3Npb25Gb3JCaW5kaW5nLnRhcmdldFR5cGUsXG5cdFx0XHRwYXJhbWV0ZXJzOiBleHByZXNzaW9uRm9yQmluZGluZy5wYXJhbWV0ZXJzLFxuXHRcdFx0Zm9ybWF0T3B0aW9uczogZXhwcmVzc2lvbkZvckJpbmRpbmcuZm9ybWF0T3B0aW9ucyxcblx0XHRcdGNvbnN0cmFpbnRzOiBleHByZXNzaW9uRm9yQmluZGluZy5jb25zdHJhaW50c1xuXHRcdH07XG5cdFx0Y29uc3Qgb3V0QmluZGluZyA9IGNvbXBpbGVFeHByZXNzaW9uKGNvbXBsZXhCaW5kaW5nRGVmaW5pdGlvbiwgZmFsc2UsIGZhbHNlLCB0cnVlKTtcblx0XHRpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRcdGNvbnN0IHNlcGFyYXRvciA9IGV4cHJlc3Npb25Gb3JCaW5kaW5nLmFsd2F5c0tlZXBUYXJnZXRUeXBlID8gXCIkXCIgOiBlbWJlZGRlZFNlcGFyYXRvcjtcblx0XHRcdHJldHVybiBgJHtzZXBhcmF0b3J9JHtvdXRCaW5kaW5nfWA7XG5cdFx0fVxuXHRcdHJldHVybiBvdXRCaW5kaW5nO1xuXHR9IGVsc2UgaWYgKGVtYmVkZGVkSW5CaW5kaW5nKSB7XG5cdFx0cmV0dXJuIGAke2VtYmVkZGVkU2VwYXJhdG9yfXske2NvbXBpbGVQYXRoSW5Nb2RlbChleHByZXNzaW9uRm9yQmluZGluZyl9fWA7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGB7JHtjb21waWxlUGF0aEluTW9kZWwoZXhwcmVzc2lvbkZvckJpbmRpbmcpfX1gO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGVDb21wbGV4VHlwZUV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KGV4cHJlc3Npb246IENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPik6IHN0cmluZyB7XG5cdGlmIChleHByZXNzaW9uLmJpbmRpbmdQYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBgeyR7Y29tcGlsZVBhdGhQYXJhbWV0ZXIoZXhwcmVzc2lvbi5iaW5kaW5nUGFyYW1ldGVyc1swXSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4sIHRydWUpfSwgdHlwZTogJyR7XG5cdFx0XHRleHByZXNzaW9uLnR5cGVcblx0XHR9J31gO1xuXHR9XG5cblx0bGV0IG91dHB1dEVuZCA9IGBdLCB0eXBlOiAnJHtleHByZXNzaW9uLnR5cGV9J2A7XG5cdGlmIChoYXNFbGVtZW50cyhleHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpKSB7XG5cdFx0b3V0cHV0RW5kICs9IGAsIGZvcm1hdE9wdGlvbnM6ICR7Y29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zKX1gO1xuXHR9XG5cdGlmIChoYXNFbGVtZW50cyhleHByZXNzaW9uLmNvbnN0cmFpbnRzKSkge1xuXHRcdG91dHB1dEVuZCArPSBgLCBjb25zdHJhaW50czogJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLmNvbnN0cmFpbnRzKX1gO1xuXHR9XG5cdGlmIChoYXNFbGVtZW50cyhleHByZXNzaW9uLnBhcmFtZXRlcnMpKSB7XG5cdFx0b3V0cHV0RW5kICs9IGAsIHBhcmFtZXRlcnM6ICR7Y29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbi5wYXJhbWV0ZXJzKX1gO1xuXHR9XG5cdG91dHB1dEVuZCArPSBcIn1cIjtcblxuXHRyZXR1cm4gYHttb2RlOidUd29XYXknLCBwYXJ0czpbJHtleHByZXNzaW9uLmJpbmRpbmdQYXJhbWV0ZXJzXG5cdFx0Lm1hcCgocGFyYW0pID0+IGNvbXBpbGVQYXRoUGFyYW1ldGVyKHBhcmFtIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPikpXG5cdFx0LmpvaW4oXCIsXCIpfSR7b3V0cHV0RW5kfWA7XG59XG5cbi8qKlxuICogV3JhcCB0aGUgY29tcGlsZWQgYmluZGluZyBzdHJpbmcgYXMgcmVxdWlyZWQgZGVwZW5kaW5nIG9uIGl0cyBjb250ZXh0LlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGNvbXBpbGVkIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBlbWJlZGRlZEluQmluZGluZyBUcnVlIGlmIHRoZSBjb21waWxlZCBleHByZXNzaW9uIGlzIHRvIGJlIGVtYmVkZGVkIGluIGEgYmluZGluZ1xuICogQHBhcmFtIHBhcmVudGhlc2lzUmVxdWlyZWQgVHJ1ZSBpZiB0aGUgZW1iZWRkZWQgYmluZGluZyBuZWVkcyB0byBiZSB3cmFwcGVkIGluIHBhcmV0aGVzaXMgc28gdGhhdCBpdCBpcyBldmFsdWF0ZWQgYXMgb25lXG4gKiBAcmV0dXJucyBGaW5hbGl6ZWQgY29tcGlsZWQgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gd3JhcEJpbmRpbmdFeHByZXNzaW9uKFxuXHRleHByZXNzaW9uOiBzdHJpbmcsXG5cdGVtYmVkZGVkSW5CaW5kaW5nOiBib29sZWFuLFxuXHRwYXJlbnRoZXNpc1JlcXVpcmVkID0gZmFsc2Vcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0aWYgKGVtYmVkZGVkSW5CaW5kaW5nKSB7XG5cdFx0aWYgKHBhcmVudGhlc2lzUmVxdWlyZWQpIHtcblx0XHRcdHJldHVybiBgKCR7ZXhwcmVzc2lvbn0pYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGV4cHJlc3Npb247XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBgez0gJHtleHByZXNzaW9ufX1gO1xuXHR9XG59XG5cbi8qKlxuICogQ29tcGlsZSBhbiBleHByZXNzaW9uIGludG8gYW4gZXhwcmVzc2lvbiBiaW5kaW5nLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvbiB0byBjb21waWxlXG4gKiBAcGFyYW0gZW1iZWRkZWRJbkJpbmRpbmcgV2hldGhlciB0aGUgZXhwcmVzc2lvbiB0byBjb21waWxlIGlzIGVtYmVkZGVkIGludG8gYW5vdGhlciBleHByZXNzaW9uXG4gKiBAcGFyYW0ga2VlcFRhcmdldFR5cGUgS2VlcCB0aGUgdGFyZ2V0IHR5cGUgb2YgdGhlIGVtYmVkZGVkIGJpbmRpbmdzIGluc3RlYWQgb2YgY2FzdGluZyB0aGVtIHRvIGFueVxuICogQHBhcmFtIGlzTnVsbGFibGUgV2hldGhlciBiaW5kaW5nIGV4cHJlc3Npb24gY2FuIHJlc29sdmUgdG8gZW1wdHkgc3RyaW5nIG9yIG5vdFxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXhwcmVzc2lvbiBiaW5kaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cHJlc3Npb246IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0ZW1iZWRkZWRJbkJpbmRpbmcgPSBmYWxzZSxcblx0a2VlcFRhcmdldFR5cGUgPSBmYWxzZSxcblx0aXNOdWxsYWJsZSA9IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IGV4cHIgPSB3cmFwUHJpbWl0aXZlKGV4cHJlc3Npb24pO1xuXHRjb25zdCBlbWJlZGRlZFNlcGFyYXRvciA9IGtlZXBUYXJnZXRUeXBlID8gXCIkXCIgOiBcIiVcIjtcblxuXHRzd2l0Y2ggKGV4cHIuX3R5cGUpIHtcblx0XHRjYXNlIFwiVW5yZXNvbHZhYmxlXCI6XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0XHRyZXR1cm4gY29tcGlsZUNvbnN0YW50KGV4cHIsIGVtYmVkZGVkSW5CaW5kaW5nLCBpc051bGxhYmxlKTtcblxuXHRcdGNhc2UgXCJSZWZcIjpcblx0XHRcdHJldHVybiBleHByLnJlZiB8fCBcIm51bGxcIjtcblxuXHRcdGNhc2UgXCJGdW5jdGlvblwiOlxuXHRcdFx0bGV0IGhhc0VtYmVkZGVkRnVuY3Rpb25DYWxsT3JCaW5kaW5nID0gZmFsc2U7XG5cdFx0XHRpZiAoZXhwci5pc0Zvcm1hdHRpbmdGbikge1xuXHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRleHByLFxuXHRcdFx0XHRcdFwiRnVuY3Rpb25cIixcblx0XHRcdFx0XHQoc3ViRm4pID0+IHtcblx0XHRcdFx0XHRcdGlmIChzdWJGbiAhPT0gZXhwciAmJiBzdWJGbi5vYmogPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRoYXNFbWJlZGRlZEZ1bmN0aW9uQ2FsbE9yQmluZGluZyA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gc3ViRm47XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdGV4cHIsXG5cdFx0XHRcdFx0XCJDb25zdGFudFwiLFxuXHRcdFx0XHRcdChzdWJGbjogQ29uc3RhbnRFeHByZXNzaW9uPFQ+KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoKHN1YkZuIGFzIHVua25vd24pICE9PSBleHByICYmIHR5cGVvZiBzdWJGbi52YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShzdWJGbiwgXCJQYXRoSW5Nb2RlbFwiLCAoc3ViU3ViRm4pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRoYXNFbWJlZGRlZEZ1bmN0aW9uQ2FsbE9yQmluZGluZyA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHN1YlN1YkZuO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cmV0dXJuIHN1YkZuO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgYXJndW1lbnRTdHJpbmcgPSBgJHtleHByLnBhcmFtZXRlcnMubWFwKChhcmcpID0+IGNvbXBpbGVFeHByZXNzaW9uKGFyZywgdHJ1ZSkpLmpvaW4oXCIsIFwiKX1gO1xuXHRcdFx0bGV0IGZuQ2FsbCA9XG5cdFx0XHRcdGV4cHIub2JqID09PSB1bmRlZmluZWRcblx0XHRcdFx0XHQ/IGAke2V4cHIuZm59KCR7YXJndW1lbnRTdHJpbmd9KWBcblx0XHRcdFx0XHQ6IGAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHIub2JqLCB0cnVlKX0uJHtleHByLmZufSgke2FyZ3VtZW50U3RyaW5nfSlgO1xuXHRcdFx0aWYgKCFlbWJlZGRlZEluQmluZGluZyAmJiBoYXNFbWJlZGRlZEZ1bmN0aW9uQ2FsbE9yQmluZGluZykge1xuXHRcdFx0XHRmbkNhbGwgPSBgez0gJHtmbkNhbGx9fWA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZm5DYWxsO1xuXG5cdFx0Y2FzZSBcIkVtYmVkZGVkRXhwcmVzc2lvbkJpbmRpbmdcIjpcblx0XHRcdHJldHVybiBlbWJlZGRlZEluQmluZGluZyA/IGAoJHtleHByLnZhbHVlLnN1YnN0cmluZygyLCBleHByLnZhbHVlLmxlbmd0aCAtIDEpfSlgIDogYCR7ZXhwci52YWx1ZX1gO1xuXG5cdFx0Y2FzZSBcIkVtYmVkZGVkQmluZGluZ1wiOlxuXHRcdFx0cmV0dXJuIGVtYmVkZGVkSW5CaW5kaW5nID8gYCR7ZW1iZWRkZWRTZXBhcmF0b3J9JHtleHByLnZhbHVlfWAgOiBgJHtleHByLnZhbHVlfWA7XG5cblx0XHRjYXNlIFwiUGF0aEluTW9kZWxcIjpcblx0XHRcdHJldHVybiBjb21waWxlUGF0aEluTW9kZWxFeHByZXNzaW9uKGV4cHIsIGVtYmVkZGVkSW5CaW5kaW5nLCBlbWJlZGRlZFNlcGFyYXRvcik7XG5cblx0XHRjYXNlIFwiQ29tcGFyaXNvblwiOlxuXHRcdFx0Y29uc3QgY29tcGFyaXNvbkV4cHJlc3Npb24gPSBjb21waWxlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcik7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKGNvbXBhcmlzb25FeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZyk7XG5cblx0XHRjYXNlIFwiSWZFbHNlXCI6XG5cdFx0XHRjb25zdCBpZkVsc2VFeHByZXNzaW9uID0gYCR7Y29tcGlsZUV4cHJlc3Npb24oZXhwci5jb25kaXRpb24sIHRydWUpfSA/ICR7Y29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGV4cHIub25UcnVlLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRrZWVwVGFyZ2V0VHlwZVxuXHRcdFx0KX0gOiAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHIub25GYWxzZSwgdHJ1ZSwga2VlcFRhcmdldFR5cGUpfWA7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKGlmRWxzZUV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nLCB0cnVlKTtcblxuXHRcdGNhc2UgXCJTZXRcIjpcblx0XHRcdGNvbnN0IHNldEV4cHJlc3Npb24gPSBleHByLm9wZXJhbmRzLm1hcCgob3BlcmFuZCkgPT4gY29tcGlsZUV4cHJlc3Npb24ob3BlcmFuZCwgdHJ1ZSkpLmpvaW4oYCAke2V4cHIub3BlcmF0b3J9IGApO1xuXHRcdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbihzZXRFeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZywgdHJ1ZSk7XG5cblx0XHRjYXNlIFwiQ29uY2F0XCI6XG5cdFx0XHRjb25zdCBjb25jYXRFeHByZXNzaW9uID0gZXhwci5leHByZXNzaW9uc1xuXHRcdFx0XHQubWFwKChuZXN0ZWRFeHByZXNzaW9uKSA9PiBjb21waWxlRXhwcmVzc2lvbihuZXN0ZWRFeHByZXNzaW9uLCB0cnVlLCB0cnVlKSlcblx0XHRcdFx0LmpvaW4oXCIgKyBcIik7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKGNvbmNhdEV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nKTtcblxuXHRcdGNhc2UgXCJMZW5ndGhcIjpcblx0XHRcdGNvbnN0IGxlbmd0aEV4cHJlc3Npb24gPSBgJHtjb21waWxlRXhwcmVzc2lvbihleHByLnBhdGhJbk1vZGVsLCB0cnVlKX0ubGVuZ3RoYDtcblx0XHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24obGVuZ3RoRXhwcmVzc2lvbiwgZW1iZWRkZWRJbkJpbmRpbmcpO1xuXG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdFx0Y29uc3Qgbm90RXhwcmVzc2lvbiA9IGAhJHtjb21waWxlRXhwcmVzc2lvbihleHByLm9wZXJhbmQsIHRydWUpfWA7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKG5vdEV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nKTtcblx0XHRjYXNlIFwiQXJpdGhtZXRpY1wiOlxuXHRcdFx0Y29uc3QgYXJpdGhtZXRpY0V4cHJlc3Npb24gPSBjb21waWxlQXJpdGhtZXRpY0V4cHJlc3Npb24oZXhwcik7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKGFyaXRobWV0aWNFeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZyk7XG5cblx0XHRjYXNlIFwiVHJ1dGh5XCI6XG5cdFx0XHRjb25zdCB0cnV0aHlFeHByZXNzaW9uID0gYCEhJHtjb21waWxlRXhwcmVzc2lvbihleHByLm9wZXJhbmQsIHRydWUpfWA7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKHRydXRoeUV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nKTtcblxuXHRcdGNhc2UgXCJGb3JtYXR0ZXJcIjpcblx0XHRcdGNvbnN0IGZvcm1hdHRlckV4cHJlc3Npb24gPSBjb21waWxlRm9ybWF0dGVyRXhwcmVzc2lvbihleHByKTtcblx0XHRcdHJldHVybiBlbWJlZGRlZEluQmluZGluZyA/IGAkJHtmb3JtYXR0ZXJFeHByZXNzaW9ufWAgOiBmb3JtYXR0ZXJFeHByZXNzaW9uO1xuXG5cdFx0Y2FzZSBcIkNvbXBsZXhUeXBlXCI6XG5cdFx0XHRjb25zdCBjb21wbGV4VHlwZUV4cHJlc3Npb24gPSBjb21waWxlQ29tcGxleFR5cGVFeHByZXNzaW9uKGV4cHIpO1xuXHRcdFx0cmV0dXJuIGVtYmVkZGVkSW5CaW5kaW5nID8gYCQke2NvbXBsZXhUeXBlRXhwcmVzc2lvbn1gIDogY29tcGxleFR5cGVFeHByZXNzaW9uO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBcIlwiO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGVBcml0aG1ldGljRXhwcmVzc2lvbihleHByZXNzaW9uOiBBcml0aG1ldGljRXhwcmVzc2lvbik6IHN0cmluZyB7XG5cdGZ1bmN0aW9uIGNvbXBpbGVPcGVyYW5kKG9wZXJhbmQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRjb25zdCBjb21waWxlZE9wZXJhbmQgPSBjb21waWxlRXhwcmVzc2lvbihvcGVyYW5kLCB0cnVlKSA/PyBcInVuZGVmaW5lZFwiO1xuXHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24oY29tcGlsZWRPcGVyYW5kLCB0cnVlLCBuZWVkUGFyZW50aGVzaXMob3BlcmFuZCkpO1xuXHR9XG5cdHN3aXRjaCAoZXhwcmVzc2lvbi5vcGVyYXRvcikge1xuXHRcdGNhc2UgXCJOZWdcIjpcblx0XHRcdHJldHVybiBgLSgke2NvbXBpbGVPcGVyYW5kKGV4cHJlc3Npb24ub3BlcmFuZDEpfSlgO1xuXHRcdGNhc2UgXCJGbG9vclwiOlxuXHRcdFx0cmV0dXJuIGBNYXRoLmZsb29yKCR7Y29tcGlsZU9wZXJhbmQoZXhwcmVzc2lvbi5vcGVyYW5kMSl9KWA7XG5cdFx0Y2FzZSBcIiVcIjpcblx0XHRjYXNlIFwiL1wiOlxuXHRcdGNhc2UgXCIqXCI6XG5cdFx0Y2FzZSBcIitcIjpcblx0XHRjYXNlIFwiLVwiOlxuXHRcdFx0cmV0dXJuIGAke2NvbXBpbGVPcGVyYW5kKGV4cHJlc3Npb24ub3BlcmFuZDEpfSAke2V4cHJlc3Npb24ub3BlcmF0b3J9ICR7Y29tcGlsZU9wZXJhbmQoZXhwcmVzc2lvbi5vcGVyYW5kMil9YDtcblx0fVxufVxuXG4vKipcbiAqIENvbXBpbGUgYSBjb21wYXJpc29uIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgY29tcGFyaXNvbiBleHByZXNzaW9uLlxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIGV4cHJlc3Npb24uIE5lZWRzIHdyYXBwaW5nIGJlZm9yZSBpdCBjYW4gYmUgdXNlZCBhcyBhbiBleHByZXNzaW9uIGJpbmRpbmcuXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uOiBDb21wYXJpc29uRXhwcmVzc2lvbik6IHN0cmluZyB7XG5cdGZ1bmN0aW9uIGNvbXBpbGVPcGVyYW5kKG9wZXJhbmQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRjb25zdCBjb21waWxlZE9wZXJhbmQgPSBjb21waWxlRXhwcmVzc2lvbihvcGVyYW5kLCB0cnVlKSA/PyBcInVuZGVmaW5lZFwiO1xuXHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24oY29tcGlsZWRPcGVyYW5kLCB0cnVlLCBuZWVkUGFyZW50aGVzaXMob3BlcmFuZCkpO1xuXHR9XG5cdHN3aXRjaCAoZXhwcmVzc2lvbi5vcGVyYXRvcikge1xuXHRcdGNhc2UgXCJJblwiOiB7XG5cdFx0XHRjb25zdCBwYXRoID0gY29tcGlsZU9wZXJhbmQoZXhwcmVzc2lvbi5vcGVyYW5kMSk7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uID0gY29tcGlsZU9wZXJhbmQoZXhwcmVzc2lvbi5vcGVyYW5kMikgPz8gW107XG5cdFx0XHRyZXR1cm4gYCR7Y29sbGVjdGlvbn0uaW5jbHVkZXMoJHtwYXRofSlgO1xuXHRcdH1cblx0XHRjYXNlIFwiSGFzXCI6IHtcblx0XHRcdGNvbnN0IHBhdGggPSBjb21waWxlT3BlcmFuZChleHByZXNzaW9uLm9wZXJhbmQxKTtcblx0XHRcdGNvbnN0IGZsYWdzID0gY29tcGlsZU9wZXJhbmQoZXhwcmVzc2lvbi5vcGVyYW5kMikgPz8gW107XG5cdFx0XHRyZXR1cm4gYCgke3BhdGh9ICYgJHtmbGFnc30pID4gMGA7XG5cdFx0fVxuXHRcdGNhc2UgXCI9PT1cIjpcblx0XHRjYXNlIFwiIT09XCI6XG5cdFx0Y2FzZSBcIj49XCI6XG5cdFx0Y2FzZSBcIj5cIjpcblx0XHRjYXNlIFwiPD1cIjpcblx0XHRjYXNlIFwiPFwiOlxuXHRcdFx0cmV0dXJuIGAke2NvbXBpbGVPcGVyYW5kKGV4cHJlc3Npb24ub3BlcmFuZDEpfSAke2V4cHJlc3Npb24ub3BlcmF0b3J9ICR7Y29tcGlsZU9wZXJhbmQoZXhwcmVzc2lvbi5vcGVyYW5kMil9YDtcblx0fVxufVxuXG4vKipcbiAqIENvbXBpbGUgYSBmb3JtYXR0ZXIgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBmb3JtYXR0ZXIgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBleHByZXNzaW9uLlxuICovXG5mdW5jdGlvbiBjb21waWxlRm9ybWF0dGVyRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oZXhwcmVzc2lvbjogRm9ybWF0dGVyRXhwcmVzc2lvbjxUPik6IHN0cmluZyB7XG5cdGlmIChleHByZXNzaW9uLnBhcmFtZXRlcnMubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIGB7JHtjb21waWxlUGF0aFBhcmFtZXRlcihleHByZXNzaW9uLnBhcmFtZXRlcnNbMF0gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+LCB0cnVlKX0sIGZvcm1hdHRlcjogJyR7XG5cdFx0XHRleHByZXNzaW9uLmZuXG5cdFx0fSd9YDtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBwYXJ0cyA9IGV4cHJlc3Npb24ucGFyYW1ldGVycy5tYXAoKHBhcmFtKSA9PiB7XG5cdFx0XHRpZiAocGFyYW0uX3R5cGUgPT09IFwiQ29tcGxleFR5cGVcIikge1xuXHRcdFx0XHRyZXR1cm4gY29tcGlsZUNvbXBsZXhUeXBlRXhwcmVzc2lvbihwYXJhbSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29tcGlsZVBhdGhQYXJhbWV0ZXIocGFyYW0gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gYHtwYXJ0czogWyR7cGFydHMuam9pbihcIiwgXCIpfV0sIGZvcm1hdHRlcjogJyR7ZXhwcmVzc2lvbi5mbn0nfWA7XG5cdH1cbn1cblxuLyoqXG4gKiBDb21waWxlIHRoZSBwYXRoIHBhcmFtZXRlciBvZiBhIGZvcm1hdHRlciBjYWxsLlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGJpbmRpbmcgcGFydCB0byBldmFsdWF0ZVxuICogQHBhcmFtIHNpbmdsZVBhdGggV2hldGhlciB0aGVyZSBpcyBvbmUgb3IgbXVsdGlwbGUgcGF0aCB0byBjb25zaWRlclxuICogQHJldHVybnMgVGhlIHN0cmluZyBzbmlwcGV0IHRvIGluY2x1ZGUgaW4gdGhlIG92ZXJhbGwgYmluZGluZyBkZWZpbml0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVQYXRoUGFyYW1ldGVyKGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPiwgc2luZ2xlUGF0aCA9IGZhbHNlKTogc3RyaW5nIHtcblx0bGV0IG91dFZhbHVlID0gXCJcIjtcblx0aWYgKGV4cHJlc3Npb24uX3R5cGUgPT09IFwiQ29uc3RhbnRcIikge1xuXHRcdGlmIChleHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIFNwZWNpYWwgY2FzZSBvdGhlcndpc2UgdGhlIEpTVG9rZW5pemVyIGNvbXBsYWlucyBhYm91dCBpbmNvcnJlY3QgY29udGVudFxuXHRcdFx0b3V0VmFsdWUgPSBgdmFsdWU6ICd1bmRlZmluZWQnYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b3V0VmFsdWUgPSBgdmFsdWU6ICR7Y29tcGlsZUNvbnN0YW50KGV4cHJlc3Npb24sIHRydWUpfWA7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGV4cHJlc3Npb24uX3R5cGUgPT09IFwiUGF0aEluTW9kZWxcIikge1xuXHRcdG91dFZhbHVlID0gYHBhdGg6ICcke2NvbXBpbGVQYXRoSW5Nb2RlbChleHByZXNzaW9uKX0nYDtcblxuXHRcdG91dFZhbHVlICs9IGV4cHJlc3Npb24udHlwZSA/IGAsIHR5cGU6ICcke2V4cHJlc3Npb24udHlwZX0nYCA6IGAsIHRhcmdldFR5cGU6ICdhbnknYDtcblx0XHRpZiAoZXhwcmVzc2lvbi5tb2RlKSB7XG5cdFx0XHRvdXRWYWx1ZSArPSBgLCBtb2RlOiAnJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLm1vZGUpfSdgO1xuXHRcdH1cblx0XHRpZiAoaGFzRWxlbWVudHMoZXhwcmVzc2lvbi5jb25zdHJhaW50cykpIHtcblx0XHRcdG91dFZhbHVlICs9IGAsIGNvbnN0cmFpbnRzOiAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24uY29uc3RyYWludHMpfWA7XG5cdFx0fVxuXHRcdGlmIChoYXNFbGVtZW50cyhleHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpKSB7XG5cdFx0XHRvdXRWYWx1ZSArPSBgLCBmb3JtYXRPcHRpb25zOiAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyl9YDtcblx0XHR9XG5cdFx0aWYgKGhhc0VsZW1lbnRzKGV4cHJlc3Npb24ucGFyYW1ldGVycykpIHtcblx0XHRcdG91dFZhbHVlICs9IGAsIHBhcmFtZXRlcnM6ICR7Y29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbi5wYXJhbWV0ZXJzKX1gO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXHRyZXR1cm4gc2luZ2xlUGF0aCA/IG91dFZhbHVlIDogYHske291dFZhbHVlfX1gO1xufVxuXG5mdW5jdGlvbiBoYXNFbGVtZW50cyhvYmo6IG9iamVjdCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFvYmogJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPiAwO1xufVxuXG4vKipcbiAqIENvbXBpbGUgYSBiaW5kaW5nIGV4cHJlc3Npb24gcGF0aC5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHRvIGNvbXBpbGUuXG4gKiBAcmV0dXJucyBUaGUgY29tcGlsZWQgcGF0aC5cbiAqL1xuZnVuY3Rpb24gY29tcGlsZVBhdGhJbk1vZGVsPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihleHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4pOiBzdHJpbmcge1xuXHRyZXR1cm4gYCR7ZXhwcmVzc2lvbi5tb2RlbE5hbWUgPyBleHByZXNzaW9uLm1vZGVsTmFtZSArIFwiPlwiIDogXCJcIn0ke2V4cHJlc3Npb24ucGF0aH1gO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7RUF1SkE7QUFDQTtBQUNBOztFQThDTyxTQUFTQSxVQUFVQSxDQUFDQyxhQUFzQixFQUE2QjtJQUM3RSxPQUFRQSxhQUFhLEVBQWVDLEtBQUssS0FBSyxVQUFVO0VBQ3pEO0VBQUNDLFFBQUEsQ0FBQUgsVUFBQSxHQUFBQSxVQUFBO0VBQ0QsU0FBU0ksaUJBQWlCQSxDQUFDSCxhQUFzQixFQUFvQztJQUNwRixPQUFRQSxhQUFhLEVBQXNCQyxLQUFLLEtBQUssaUJBQWlCO0VBQ3ZFOztFQUVBO0FBQ0E7QUFDQTtBQUNBOztFQW1DTyxNQUFNRyxnQkFBdUQsR0FBRztJQUN0RSxh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
|