@datagrok/peptides 0.8.13 → 0.8.14
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/dist/package-test.js +118 -45
- package/dist/package.js +116 -43
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_workers_dimensionality-reducer_js.js +115 -41
- package/package.json +8 -8
- package/src/tests/utils.ts +1 -1
- package/src/utils/peptide-similarity-space.ts +1 -1
- package/src/viewers/peptide-space-viewer.ts +1 -1
- package/src/workers/dimensionality-reducer.ts +8 -8
- package/{test-Peptides-f8114def7953-4bf59d70.html → test-Peptides-2f94f62b59a8-c6d7c434.html} +2 -2
package/dist/vendors-node_modules_datagrok-libraries_ml_src_workers_dimensionality-reducer_js.js
CHANGED
|
@@ -671,19 +671,34 @@ function randomInt(range) {
|
|
|
671
671
|
__webpack_require__.r(__webpack_exports__);
|
|
672
672
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
673
673
|
/* harmony export */ "similarityMetric": () => (/* binding */ similarityMetric),
|
|
674
|
+
/* harmony export */ "distanceMetrics": () => (/* binding */ distanceMetrics),
|
|
674
675
|
/* harmony export */ "CHEM_SIMILARITY_METRICS": () => (/* binding */ CHEM_SIMILARITY_METRICS),
|
|
675
676
|
/* harmony export */ "tanimotoSimilarity": () => (/* binding */ tanimotoSimilarity),
|
|
677
|
+
/* harmony export */ "tanimotoDistance": () => (/* binding */ tanimotoDistance),
|
|
676
678
|
/* harmony export */ "diceSimilarity": () => (/* binding */ diceSimilarity),
|
|
679
|
+
/* harmony export */ "diceDistance": () => (/* binding */ diceDistance),
|
|
677
680
|
/* harmony export */ "cosineSimilarity": () => (/* binding */ cosineSimilarity),
|
|
681
|
+
/* harmony export */ "cosineDistance": () => (/* binding */ cosineDistance),
|
|
678
682
|
/* harmony export */ "euclideanSimilarity": () => (/* binding */ euclideanSimilarity),
|
|
683
|
+
/* harmony export */ "euclideanDistance": () => (/* binding */ euclideanDistance),
|
|
679
684
|
/* harmony export */ "hammingSimilarity": () => (/* binding */ hammingSimilarity),
|
|
685
|
+
/* harmony export */ "hammingDistance": () => (/* binding */ hammingDistance),
|
|
680
686
|
/* harmony export */ "sokalSimilarity": () => (/* binding */ sokalSimilarity),
|
|
687
|
+
/* harmony export */ "sokalDistance": () => (/* binding */ sokalDistance),
|
|
681
688
|
/* harmony export */ "kulczynskiSimilarity": () => (/* binding */ kulczynskiSimilarity),
|
|
689
|
+
/* harmony export */ "kulczynskiDistance": () => (/* binding */ kulczynskiDistance),
|
|
682
690
|
/* harmony export */ "mcConnaugheySimilarity": () => (/* binding */ mcConnaugheySimilarity),
|
|
691
|
+
/* harmony export */ "mcConnaugheyDistance": () => (/* binding */ mcConnaugheyDistance),
|
|
683
692
|
/* harmony export */ "asymmetricSimilarity": () => (/* binding */ asymmetricSimilarity),
|
|
693
|
+
/* harmony export */ "asymmetricDistance": () => (/* binding */ asymmetricDistance),
|
|
684
694
|
/* harmony export */ "braunBlanquetSimilarity": () => (/* binding */ braunBlanquetSimilarity),
|
|
695
|
+
/* harmony export */ "braunBlanquetDistance": () => (/* binding */ braunBlanquetDistance),
|
|
685
696
|
/* harmony export */ "russelSimilarity": () => (/* binding */ russelSimilarity),
|
|
697
|
+
/* harmony export */ "russelDistance": () => (/* binding */ russelDistance),
|
|
686
698
|
/* harmony export */ "rogotGoldbergSimilarity": () => (/* binding */ rogotGoldbergSimilarity),
|
|
699
|
+
/* harmony export */ "rogotGoldbergDistance": () => (/* binding */ rogotGoldbergDistance),
|
|
700
|
+
/* harmony export */ "getSimilarityFromDistance": () => (/* binding */ getSimilarityFromDistance),
|
|
701
|
+
/* harmony export */ "getDistanceFromSimilarity": () => (/* binding */ getDistanceFromSimilarity),
|
|
687
702
|
/* harmony export */ "getDiverseSubset": () => (/* binding */ getDiverseSubset)
|
|
688
703
|
/* harmony export */ });
|
|
689
704
|
/* harmony import */ var _random__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./random */ "./node_modules/@datagrok-libraries/ml/node_modules/@datagrok-libraries/utils/src/random.js");
|
|
@@ -702,6 +717,20 @@ const similarityMetric = {
|
|
|
702
717
|
'Hamming': hammingSimilarity,
|
|
703
718
|
'Euclidean': euclideanSimilarity,
|
|
704
719
|
};
|
|
720
|
+
const distanceMetrics = {
|
|
721
|
+
'Tanimoto': tanimotoDistance,
|
|
722
|
+
'Dice': diceDistance,
|
|
723
|
+
'Asymmetric': asymmetricDistance,
|
|
724
|
+
'Braun-Blanquet': braunBlanquetDistance,
|
|
725
|
+
'Cosine': cosineDistance,
|
|
726
|
+
'Kulczynski': kulczynskiDistance,
|
|
727
|
+
'Mc-Connaughey': mcConnaugheyDistance,
|
|
728
|
+
'Rogot-Goldberg': rogotGoldbergDistance,
|
|
729
|
+
'Russel': russelDistance,
|
|
730
|
+
'Sokal': sokalDistance,
|
|
731
|
+
'Hamming': hammingDistance,
|
|
732
|
+
'Euclidean': euclideanDistance,
|
|
733
|
+
};
|
|
705
734
|
const CHEM_SIMILARITY_METRICS = ['Tanimoto', 'Dice', 'Cosine', 'Hamming', 'Euclidean'];
|
|
706
735
|
function tanimotoSimilarity(x, y) {
|
|
707
736
|
const total = x.trueCount() + y.trueCount();
|
|
@@ -710,6 +739,9 @@ function tanimotoSimilarity(x, y) {
|
|
|
710
739
|
const common = x.andWithCountBits(y, true);
|
|
711
740
|
return common / (total - common);
|
|
712
741
|
}
|
|
742
|
+
function tanimotoDistance(x, y) {
|
|
743
|
+
return getDistanceFromSimilarity(tanimotoSimilarity(x, y));
|
|
744
|
+
}
|
|
713
745
|
function diceSimilarity(x, y) {
|
|
714
746
|
const total = x.trueCount() + y.trueCount();
|
|
715
747
|
if (total == 0)
|
|
@@ -717,6 +749,9 @@ function diceSimilarity(x, y) {
|
|
|
717
749
|
const common = x.andWithCountBits(y, true);
|
|
718
750
|
return 2 * common / total;
|
|
719
751
|
}
|
|
752
|
+
function diceDistance(x, y) {
|
|
753
|
+
return getDistanceFromSimilarity(diceSimilarity(x, y));
|
|
754
|
+
}
|
|
720
755
|
function cosineSimilarity(x, y) {
|
|
721
756
|
const total = x.trueCount() * y.trueCount();
|
|
722
757
|
if (total == 0)
|
|
@@ -724,19 +759,29 @@ function cosineSimilarity(x, y) {
|
|
|
724
759
|
const common = x.andWithCountBits(y, true);
|
|
725
760
|
return common / Math.sqrt(total);
|
|
726
761
|
}
|
|
762
|
+
function cosineDistance(x, y) {
|
|
763
|
+
return getDistanceFromSimilarity(cosineSimilarity(x, y));
|
|
764
|
+
}
|
|
727
765
|
function euclideanSimilarity(x, y) {
|
|
728
|
-
|
|
729
|
-
|
|
766
|
+
return getSimilarityFromDistance(euclideanDistance(x, y));
|
|
767
|
+
}
|
|
768
|
+
function euclideanDistance(x, y) {
|
|
769
|
+
return Math.sqrt(x.trueCount() + y.trueCount() - 2 * x.andWithCountBits(y, true));
|
|
730
770
|
}
|
|
731
771
|
function hammingSimilarity(x, y) {
|
|
732
|
-
|
|
733
|
-
|
|
772
|
+
return getSimilarityFromDistance(hammingDistance(x, y));
|
|
773
|
+
}
|
|
774
|
+
function hammingDistance(x, y) {
|
|
775
|
+
return x.trueCount() + y.trueCount() - 2 * x.andWithCountBits(y, true);
|
|
734
776
|
}
|
|
735
777
|
function sokalSimilarity(x, y) {
|
|
736
778
|
const total = x.trueCount() + y.trueCount();
|
|
737
779
|
const common = x.andWithCountBits(y, true);
|
|
738
780
|
return common / (2 * total - 3 * common);
|
|
739
781
|
}
|
|
782
|
+
function sokalDistance(x, y) {
|
|
783
|
+
return getDistanceFromSimilarity(sokalSimilarity(x, y));
|
|
784
|
+
}
|
|
740
785
|
function kulczynskiSimilarity(x, y) {
|
|
741
786
|
const total = x.trueCount() + y.trueCount();
|
|
742
787
|
const totalProd = x.trueCount() * y.trueCount();
|
|
@@ -745,6 +790,9 @@ function kulczynskiSimilarity(x, y) {
|
|
|
745
790
|
const common = x.andWithCountBits(y, true);
|
|
746
791
|
return (common * total) / (2 * totalProd);
|
|
747
792
|
}
|
|
793
|
+
function kulczynskiDistance(x, y) {
|
|
794
|
+
return getDistanceFromSimilarity(kulczynskiSimilarity(x, y));
|
|
795
|
+
}
|
|
748
796
|
function mcConnaugheySimilarity(x, y) {
|
|
749
797
|
const total = x.trueCount() + y.trueCount();
|
|
750
798
|
const totalProd = x.trueCount() * y.trueCount();
|
|
@@ -753,6 +801,9 @@ function mcConnaugheySimilarity(x, y) {
|
|
|
753
801
|
const common = x.andWithCountBits(y, true);
|
|
754
802
|
return (common * total - totalProd) / totalProd;
|
|
755
803
|
}
|
|
804
|
+
function mcConnaugheyDistance(x, y) {
|
|
805
|
+
return getDistanceFromSimilarity(mcConnaugheySimilarity(x, y));
|
|
806
|
+
}
|
|
756
807
|
function asymmetricSimilarity(x, y) {
|
|
757
808
|
const min = Math.min(x.trueCount(), y.trueCount());
|
|
758
809
|
if (min == 0)
|
|
@@ -760,6 +811,9 @@ function asymmetricSimilarity(x, y) {
|
|
|
760
811
|
const common = x.andWithCountBits(y, true);
|
|
761
812
|
return common / min;
|
|
762
813
|
}
|
|
814
|
+
function asymmetricDistance(x, y) {
|
|
815
|
+
return getDistanceFromSimilarity(asymmetricSimilarity(x, y));
|
|
816
|
+
}
|
|
763
817
|
function braunBlanquetSimilarity(x, y) {
|
|
764
818
|
const max = Math.max(x.trueCount(), y.trueCount());
|
|
765
819
|
if (max == 0)
|
|
@@ -767,12 +821,18 @@ function braunBlanquetSimilarity(x, y) {
|
|
|
767
821
|
const common = x.andWithCountBits(y, true);
|
|
768
822
|
return common / max;
|
|
769
823
|
}
|
|
824
|
+
function braunBlanquetDistance(x, y) {
|
|
825
|
+
return getDistanceFromSimilarity(braunBlanquetSimilarity(x, y));
|
|
826
|
+
}
|
|
770
827
|
function russelSimilarity(x, y) {
|
|
771
828
|
if (x.length == 0)
|
|
772
829
|
return 0.0;
|
|
773
830
|
const common = x.andWithCountBits(y, true);
|
|
774
831
|
return common / x.length;
|
|
775
832
|
}
|
|
833
|
+
function russelDistance(x, y) {
|
|
834
|
+
return getDistanceFromSimilarity(russelSimilarity(x, y));
|
|
835
|
+
}
|
|
776
836
|
function rogotGoldbergSimilarity(x, y) {
|
|
777
837
|
const common = x.andWithCountBits(y, true);
|
|
778
838
|
const total = x.countBits(true) + y.countBits(true);
|
|
@@ -783,6 +843,15 @@ function rogotGoldbergSimilarity(x, y) {
|
|
|
783
843
|
else
|
|
784
844
|
return common / total + diff / (2 * len - total);
|
|
785
845
|
}
|
|
846
|
+
function rogotGoldbergDistance(x, y) {
|
|
847
|
+
return getDistanceFromSimilarity(rogotGoldbergSimilarity(x, y));
|
|
848
|
+
}
|
|
849
|
+
function getSimilarityFromDistance(distance) {
|
|
850
|
+
return 1 / (1 + distance);
|
|
851
|
+
}
|
|
852
|
+
function getDistanceFromSimilarity(similarity) {
|
|
853
|
+
return 1 / similarity - 1;
|
|
854
|
+
}
|
|
786
855
|
function getDiverseSubset(length, n, dist) {
|
|
787
856
|
function maxBy(values, orderBy) {
|
|
788
857
|
let maxValue = null;
|
|
@@ -813,7 +882,7 @@ function getDiverseSubset(length, n, dist) {
|
|
|
813
882
|
}
|
|
814
883
|
return subset;
|
|
815
884
|
}
|
|
816
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltaWxhcml0eS1tZXRyaWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2ltaWxhcml0eS1tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFbkMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQTJEO0lBQ3RGLFVBQVUsRUFBRSxrQkFBa0I7SUFDOUIsTUFBTSxFQUFFLGNBQWM7SUFDdEIsWUFBWSxFQUFFLG9CQUFvQjtJQUNsQyxnQkFBZ0IsRUFBRSx1QkFBdUI7SUFDekMsUUFBUSxFQUFFLGdCQUFnQjtJQUMxQixZQUFZLEVBQUUsb0JBQW9CO0lBQ2xDLGVBQWUsRUFBRSxzQkFBc0I7SUFDdkMsZ0JBQWdCLEVBQUUsdUJBQXVCO0lBQ3pDLFFBQVEsRUFBRSxnQkFBZ0I7SUFDMUIsT0FBTyxFQUFFLGVBQWU7SUFDeEIsU0FBUyxFQUFFLGlCQUFpQjtJQUM1QixXQUFXLEVBQUUsbUJBQW1CO0NBQ2pDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUU5RixNQUFNLFVBQVUsa0JBQWtCLENBQUMsQ0FBVyxFQUFFLENBQVc7SUFDekQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM1QyxJQUFJLEtBQUssSUFBSSxDQUFDO1FBQ1osT0FBTyxHQUFHLENBQUM7SUFDYixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNDLE9BQU8sTUFBTSxHQUFHLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLENBQVcsRUFBRSxDQUFX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RCxRQUFRLEdBQUcsT0FBTyxDQUFDO2dCQUNuQixVQUFVLEdBQUcsY0FBYyxDQUFDO2FBQzdCO1NBQ0Y7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUU3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNyQixVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3JCO0lBRUQsT0FBTyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUN4QixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQ2YsVUFBVSxDQUFDLE1BQU0sRUFBOEIsRUFDL0MsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVMsR0FBRyxFQUFFLEtBQUs7WUFDeEQsT0FBTyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNQLElBQUksR0FBRyxFQUFFO1lBQ1AsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQixVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3hCO0tBQ0Y7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpdEFycmF5IGZyb20gJy4vYml0LWFycmF5JztcbmltcG9ydCB7cmFuZG9tSW50fSBmcm9tICcuL3JhbmRvbSc7XG5cbmV4cG9ydCBjb25zdCBzaW1pbGFyaXR5TWV0cmljOiB7W25hbWU6IHN0cmluZ106ICh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpID0+IG51bWJlcn0gPSB7XG4gICdUYW5pbW90byc6IHRhbmltb3RvU2ltaWxhcml0eSxcbiAgJ0RpY2UnOiBkaWNlU2ltaWxhcml0eSxcbiAgJ0FzeW1tZXRyaWMnOiBhc3ltbWV0cmljU2ltaWxhcml0eSxcbiAgJ0JyYXVuLUJsYW5xdWV0JzogYnJhdW5CbGFucXVldFNpbWlsYXJpdHksXG4gICdDb3NpbmUnOiBjb3NpbmVTaW1pbGFyaXR5LFxuICAnS3VsY3p5bnNraSc6IGt1bGN6eW5za2lTaW1pbGFyaXR5LFxuICAnTWMtQ29ubmF1Z2hleSc6IG1jQ29ubmF1Z2hleVNpbWlsYXJpdHksXG4gICdSb2dvdC1Hb2xkYmVyZyc6IHJvZ290R29sZGJlcmdTaW1pbGFyaXR5LFxuICAnUnVzc2VsJzogcnVzc2VsU2ltaWxhcml0eSxcbiAgJ1Nva2FsJzogc29rYWxTaW1pbGFyaXR5LFxuICAnSGFtbWluZyc6IGhhbW1pbmdTaW1pbGFyaXR5LFxuICAnRXVjbGlkZWFuJzogZXVjbGlkZWFuU2ltaWxhcml0eSxcbn07XG5cbmV4cG9ydCBjb25zdCBDSEVNX1NJTUlMQVJJVFlfTUVUUklDUyA9IFsnVGFuaW1vdG8nLCAnRGljZScsICdDb3NpbmUnLCAnSGFtbWluZycsICdFdWNsaWRlYW4nXTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRhbmltb3RvU2ltaWxhcml0eSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICBjb25zdCB0b3RhbCA9IHgudHJ1ZUNvdW50KCkgKyB5LnRydWVDb3VudCgpO1xuICBpZiAodG90YWwgPT0gMClcbiAgICByZXR1cm4gMS4wO1xuICBjb25zdCBjb21tb24gPSB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG4gIHJldHVybiBjb21tb24gLyAodG90YWwgLSBjb21tb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGljZVNpbWlsYXJpdHkoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgY29uc3QgdG90YWwgPSB4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKTtcbiAgaWYgKHRvdGFsID09IDApXG4gICAgcmV0dXJuIDAuMDtcbiAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICByZXR1cm4gMiAqIGNvbW1vbiAvIHRvdGFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29zaW5lU2ltaWxhcml0eSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICBjb25zdCB0b3RhbCA9IHgudHJ1ZUNvdW50KCkgKiB5LnRydWVDb3VudCgpO1xuICBpZiAodG90YWwgPT0gMClcbiAgICByZXR1cm4gMC4wO1xuICBjb25zdCBjb21tb24gPSB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG4gIHJldHVybiBjb21tb24gLyBNYXRoLnNxcnQodG90YWwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXVjbGlkZWFuU2ltaWxhcml0eSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICBjb25zdCBldWNsaWRlYW5EaXN0YW5jZSA9IE1hdGguc3FydCh4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKSAtIDIqeC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpKTtcbiAgcmV0dXJuIDEvKDErZXVjbGlkZWFuRGlzdGFuY2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFtbWluZ1NpbWlsYXJpdHkoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgY29uc3QgaGFtbWluZ0Rpc3RhbmNlID0geC50cnVlQ291bnQoKSArIHkudHJ1ZUNvdW50KCkgLSAyKnguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgcmV0dXJuIDEvKDEraGFtbWluZ0Rpc3RhbmNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNva2FsU2ltaWxhcml0eSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICBjb25zdCB0b3RhbCA9IHgudHJ1ZUNvdW50KCkgKyB5LnRydWVDb3VudCgpO1xuICBjb25zdCBjb21tb24gPSB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG4gIHJldHVybiBjb21tb24gLyAoMiAqIHRvdGFsIC0gMyAqIGNvbW1vbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBrdWxjenluc2tpU2ltaWxhcml0eSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICBjb25zdCB0b3RhbCA9IHgudHJ1ZUNvdW50KCkgKyB5LnRydWVDb3VudCgpO1xuICBjb25zdCB0b3RhbFByb2QgPSB4LnRydWVDb3VudCgpICogeS50cnVlQ291bnQoKTtcbiAgaWYgKHRvdGFsUHJvZCA9PSAwKVxuICAgIHJldHVybiAwLjA7XG4gIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgcmV0dXJuIChjb21tb24gKiB0b3RhbCkgLyAoMiAqIHRvdGFsUHJvZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtY0Nvbm5hdWdoZXlTaW1pbGFyaXR5KHg6IEJpdEFycmF5LCB5OiBCaXRBcnJheSk6IG51bWJlciB7XG4gIGNvbnN0IHRvdGFsID0geC50cnVlQ291bnQoKSArIHkudHJ1ZUNvdW50KCk7XG4gIGNvbnN0IHRvdGFsUHJvZCA9IHgudHJ1ZUNvdW50KCkgKiB5LnRydWVDb3VudCgpO1xuICBpZiAodG90YWxQcm9kID09IDApXG4gICAgcmV0dXJuIDAuMDtcbiAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICByZXR1cm4gKGNvbW1vbiAqIHRvdGFsIC0gdG90YWxQcm9kKSAvIHRvdGFsUHJvZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzeW1tZXRyaWNTaW1pbGFyaXR5KHg6IEJpdEFycmF5LCB5OiBCaXRBcnJheSk6IG51bWJlciB7XG4gIGNvbnN0IG1pbiA9IE1hdGgubWluKHgudHJ1ZUNvdW50KCksIHkudHJ1ZUNvdW50KCkpO1xuICBpZiAobWluID09IDApXG4gICAgcmV0dXJuIDAuMDtcbiAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICByZXR1cm4gY29tbW9uIC8gbWluO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhdW5CbGFucXVldFNpbWlsYXJpdHkoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgY29uc3QgbWF4ID0gTWF0aC5tYXgoeC50cnVlQ291bnQoKSwgeS50cnVlQ291bnQoKSk7XG4gIGlmIChtYXggPT0gMClcbiAgICByZXR1cm4gMC4wO1xuICBjb25zdCBjb21tb24gPSB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG4gIHJldHVybiBjb21tb24gLyBtYXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydXNzZWxTaW1pbGFyaXR5KHg6IEJpdEFycmF5LCB5OiBCaXRBcnJheSk6IG51bWJlciB7XG4gIGlmICh4Lmxlbmd0aCA9PSAwKVxuICAgIHJldHVybiAwLjA7XG4gIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgcmV0dXJuIGNvbW1vbiAvIHgubGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcm9nb3RHb2xkYmVyZ1NpbWlsYXJpdHkoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICBjb25zdCB0b3RhbCA9IHguY291bnRCaXRzKHRydWUpICsgeS5jb3VudEJpdHModHJ1ZSk7XG4gIGNvbnN0IGxlbiA9IHgubGVuZ3RoO1xuICBjb25zdCBkaWZmID0gbGVuIC0gdG90YWwgKyBjb21tb247XG4gIGlmICgoY29tbW9uID09IGxlbikgfHwgKGRpZmYgPT0gbGVuKSkgcmV0dXJuIDEuMDtcbiAgZWxzZSByZXR1cm4gY29tbW9uIC8gdG90YWwgKyBkaWZmIC8gKDIgKiBsZW4gLSB0b3RhbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXZlcnNlU3Vic2V0KGxlbmd0aDogbnVtYmVyLCBuOiBudW1iZXIsIGRpc3Q6IChpMTogbnVtYmVyLCBpMjogbnVtYmVyKSA9PiBudW1iZXIpIHtcbiAgZnVuY3Rpb24gbWF4QnkodmFsdWVzOiBJdGVyYWJsZUl0ZXJhdG9yPG51bWJlcj4sIG9yZGVyQnk6IChpOiBudW1iZXIpID0+IG51bWJlcikge1xuICAgIGxldCBtYXhWYWx1ZSA9IG51bGw7XG4gICAgbGV0IG1heE9yZGVyQnkgPSBudWxsO1xuXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHZhbHVlcykge1xuICAgICAgY29uc3QgZWxlbWVudE9yZGVyQnkgPSBvcmRlckJ5KGVsZW1lbnQpO1xuICAgICAgaWYgKG1heE9yZGVyQnkgPT0gbnVsbCB8fCBlbGVtZW50T3JkZXJCeSA+IG1heE9yZGVyQnkpIHtcbiAgICAgICAgbWF4VmFsdWUgPSBlbGVtZW50O1xuICAgICAgICBtYXhPcmRlckJ5ID0gZWxlbWVudE9yZGVyQnk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXhWYWx1ZTtcbiAgfVxuXG4gIGNvbnN0IHN1YnNldCA9IFtyYW5kb21JbnQobGVuZ3RoIC0gMSldO1xuICBjb25zdCBjb21wbGVtZW50ID0gbmV3IFNldCgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoIXN1YnNldC5pbmNsdWRlcyhpKSlcbiAgICAgIGNvbXBsZW1lbnQuYWRkKGkpO1xuICB9XG5cbiAgd2hpbGUgKHN1YnNldC5sZW5ndGggPCBuKSB7XG4gICAgY29uc3QgaWR4ID0gbWF4QnkoXG4gICAgICBjb21wbGVtZW50LnZhbHVlcygpIGFzIEl0ZXJhYmxlSXRlcmF0b3I8bnVtYmVyPixcbiAgICAgIChpKSA9PiBNYXRoLm1pbi5hcHBseShNYXRoLCBzdWJzZXQubWFwKGZ1bmN0aW9uKHZhbCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGRpc3QoaSwgdmFsKTtcbiAgICAgIH0pKSk7XG4gICAgaWYgKGlkeCkge1xuICAgICAgc3Vic2V0LnB1c2goaWR4KTtcbiAgICAgIGNvbXBsZW1lbnQuZGVsZXRlKGlkeCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdWJzZXQ7XG59XG4iXX0=
|
|
885
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltaWxhcml0eS1tZXRyaWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2ltaWxhcml0eS1tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFbkMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQTJEO0lBQ3RGLFVBQVUsRUFBRSxrQkFBa0I7SUFDOUIsTUFBTSxFQUFFLGNBQWM7SUFDdEIsWUFBWSxFQUFFLG9CQUFvQjtJQUNsQyxnQkFBZ0IsRUFBRSx1QkFBdUI7SUFDekMsUUFBUSxFQUFFLGdCQUFnQjtJQUMxQixZQUFZLEVBQUUsb0JBQW9CO0lBQ2xDLGVBQWUsRUFBRSxzQkFBc0I7SUFDdkMsZ0JBQWdCLEVBQUUsdUJBQXVCO0lBQ3pDLFFBQVEsRUFBRSxnQkFBZ0I7SUFDMUIsT0FBTyxFQUFFLGVBQWU7SUFDeEIsU0FBUyxFQUFFLGlCQUFpQjtJQUM1QixXQUFXLEVBQUUsbUJBQW1CO0NBQ2pDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQTJEO0lBQ3JGLFVBQVUsRUFBRSxnQkFBZ0I7SUFDNUIsTUFBTSxFQUFFLFlBQVk7SUFDcEIsWUFBWSxFQUFFLGtCQUFrQjtJQUNoQyxnQkFBZ0IsRUFBRSxxQkFBcUI7SUFDdkMsUUFBUSxFQUFFLGNBQWM7SUFDeEIsWUFBWSxFQUFFLGtCQUFrQjtJQUNoQyxlQUFlLEVBQUUsb0JBQW9CO0lBQ3JDLGdCQUFnQixFQUFFLHFCQUFxQjtJQUN2QyxRQUFRLEVBQUUsY0FBYztJQUN4QixPQUFPLEVBQUUsYUFBYTtJQUN0QixTQUFTLEVBQUUsZUFBZTtJQUMxQixXQUFXLEVBQUUsaUJBQWlCO0NBQy9CLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUU5RixNQUFNLFVBQVUs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R0FBRyxjQUFjLENBQUM7YUFDN0I7U0FDRjtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDckI7SUFFRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FDZixVQUFVLENBQUMsTUFBTSxFQUE4QixFQUMvQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBUyxHQUFHLEVBQUUsS0FBSztZQUN4RCxPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsSUFBSSxHQUFHLEVBQUU7WUFDUCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDeEI7S0FDRjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQml0QXJyYXkgZnJvbSAnLi9iaXQtYXJyYXknO1xuaW1wb3J0IHtyYW5kb21JbnR9IGZyb20gJy4vcmFuZG9tJztcblxuZXhwb3J0IGNvbnN0IHNpbWlsYXJpdHlNZXRyaWM6IHtbbmFtZTogc3RyaW5nXTogKHg6IEJpdEFycmF5LCB5OiBCaXRBcnJheSkgPT4gbnVtYmVyfSA9IHtcbiAgJ1Rhbmltb3RvJzogdGFuaW1vdG9TaW1pbGFyaXR5LFxuICAnRGljZSc6IGRpY2VTaW1pbGFyaXR5LFxuICAnQXN5bW1ldHJpYyc6IGFzeW1tZXRyaWNTaW1pbGFyaXR5LFxuICAnQnJhdW4tQmxhbnF1ZXQnOiBicmF1bkJsYW5xdWV0U2ltaWxhcml0eSxcbiAgJ0Nvc2luZSc6IGNvc2luZVNpbWlsYXJpdHksXG4gICdLdWxjenluc2tpJzoga3VsY3p5bnNraVNpbWlsYXJpdHksXG4gICdNYy1Db25uYXVnaGV5JzogbWNDb25uYXVnaGV5U2ltaWxhcml0eSxcbiAgJ1JvZ290LUdvbGRiZXJnJzogcm9nb3RHb2xkYmVyZ1NpbWlsYXJpdHksXG4gICdSdXNzZWwnOiBydXNzZWxTaW1pbGFyaXR5LFxuICAnU29rYWwnOiBzb2thbFNpbWlsYXJpdHksXG4gICdIYW1taW5nJzogaGFtbWluZ1NpbWlsYXJpdHksXG4gICdFdWNsaWRlYW4nOiBldWNsaWRlYW5TaW1pbGFyaXR5LFxufTtcblxuZXhwb3J0IGNvbnN0IGRpc3RhbmNlTWV0cmljczoge1tuYW1lOiBzdHJpbmddOiAoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KSA9PiBudW1iZXJ9ID0ge1xuICAnVGFuaW1vdG8nOiB0YW5pbW90b0Rpc3RhbmNlLFxuICAnRGljZSc6IGRpY2VEaXN0YW5jZSxcbiAgJ0FzeW1tZXRyaWMnOiBhc3ltbWV0cmljRGlzdGFuY2UsXG4gICdCcmF1bi1CbGFucXVldCc6IGJyYXVuQmxhbnF1ZXREaXN0YW5jZSxcbiAgJ0Nvc2luZSc6IGNvc2luZURpc3RhbmNlLFxuICAnS3VsY3p5bnNraSc6IGt1bGN6eW5za2lEaXN0YW5jZSxcbiAgJ01jLUNvbm5hdWdoZXknOiBtY0Nvbm5hdWdoZXlEaXN0YW5jZSxcbiAgJ1JvZ290LUdvbGRiZXJnJzogcm9nb3RHb2xkYmVyZ0Rpc3RhbmNlLFxuICAnUnVzc2VsJzogcnVzc2VsRGlzdGFuY2UsXG4gICdTb2thbCc6IHNva2FsRGlzdGFuY2UsXG4gICdIYW1taW5nJzogaGFtbWluZ0Rpc3RhbmNlLFxuICAnRXVjbGlkZWFuJzogZXVjbGlkZWFuRGlzdGFuY2UsXG59O1xuXG5leHBvcnQgY29uc3QgQ0hFTV9TSU1JTEFSSVRZX01FVFJJQ1MgPSBbJ1Rhbmltb3RvJywgJ0RpY2UnLCAnQ29zaW5lJywgJ0hhbW1pbmcnLCAnRXVjbGlkZWFuJ107XG5cbmV4cG9ydCBmdW5jdGlvbiB0YW5pbW90b1NpbWlsYXJpdHkoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgY29uc3QgdG90YWwgPSB4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKTtcbiAgaWYgKHRvdGFsID09IDApXG4gICAgcmV0dXJuIDEuMDtcbiAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICByZXR1cm4gY29tbW9uIC8gKHRvdGFsIC0gY29tbW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhbmltb3RvRGlzdGFuY2UoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgcmV0dXJuIGdldERpc3RhbmNlRnJvbVNpbWlsYXJpdHkodGFuaW1vdG9TaW1pbGFyaXR5KHgsIHkpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpY2VTaW1pbGFyaXR5KHg6IEJpdEFycmF5LCB5OiBCaXRBcnJheSk6IG51bWJlciB7XG4gIGNvbnN0IHRvdGFsID0geC50cnVlQ291bnQoKSArIHkudHJ1ZUNvdW50KCk7XG4gIGlmICh0b3RhbCA9PSAwKVxuICAgIHJldHVybiAwLjA7XG4gIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgcmV0dXJuIDIgKiBjb21tb24gLyB0b3RhbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpY2VEaXN0YW5jZSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShkaWNlU2ltaWxhcml0eSh4LCB5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3NpbmVTaW1pbGFyaXR5KHg6IEJpdEFycmF5LCB5OiBCaXRBcnJheSk6IG51bWJlciB7XG4gIGNvbnN0IHRvdGFsID0geC50cnVlQ291bnQoKSAqIHkudHJ1ZUNvdW50KCk7XG4gIGlmICh0b3RhbCA9PSAwKVxuICAgIHJldHVybiAwLjA7XG4gIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgcmV0dXJuIGNvbW1vbiAvIE1hdGguc3FydCh0b3RhbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3NpbmVEaXN0YW5jZSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShjb3NpbmVTaW1pbGFyaXR5KHgsIHkpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV1Y2xpZGVhblNpbWlsYXJpdHkoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgcmV0dXJuIGdldFNpbWlsYXJpdHlGcm9tRGlzdGFuY2UoZXVjbGlkZWFuRGlzdGFuY2UoeCwgeSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXVjbGlkZWFuRGlzdGFuY2UoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGguc3FydCh4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKSAtIDIqeC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhbW1pbmdTaW1pbGFyaXR5KHg6IEJpdEFycmF5LCB5OiBCaXRBcnJheSk6IG51bWJlciB7XG4gIHJldHVybiBnZXRTaW1pbGFyaXR5RnJvbURpc3RhbmNlKGhhbW1pbmdEaXN0YW5jZSh4LCB5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYW1taW5nRGlzdGFuY2UoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgcmV0dXJuIHgudHJ1ZUNvdW50KCkgKyB5LnRydWVDb3VudCgpIC0gMip4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb2thbFNpbWlsYXJpdHkoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgY29uc3QgdG90YWwgPSB4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKTtcbiAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICByZXR1cm4gY29tbW9uIC8gKDIgKiB0b3RhbCAtIDMgKiBjb21tb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29rYWxEaXN0YW5jZSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShzb2thbFNpbWlsYXJpdHkoeCwgeSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ga3VsY3p5bnNraVNpbWlsYXJpdHkoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgY29uc3QgdG90YWwgPSB4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKTtcbiAgY29uc3QgdG90YWxQcm9kID0geC50cnVlQ291bnQoKSAqIHkudHJ1ZUNvdW50KCk7XG4gIGlmICh0b3RhbFByb2QgPT0gMClcbiAgICByZXR1cm4gMC4wO1xuICBjb25zdCBjb21tb24gPSB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG4gIHJldHVybiAoY29tbW9uICogdG90YWwpIC8gKDIgKiB0b3RhbFByb2QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ga3VsY3p5bnNraURpc3RhbmNlKHg6IEJpdEFycmF5LCB5OiBCaXRBcnJheSk6IG51bWJlciB7XG4gIHJldHVybiBnZXREaXN0YW5jZUZyb21TaW1pbGFyaXR5KGt1bGN6eW5za2lTaW1pbGFyaXR5KHgsIHkpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1jQ29ubmF1Z2hleVNpbWlsYXJpdHkoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgY29uc3QgdG90YWwgPSB4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKTtcbiAgY29uc3QgdG90YWxQcm9kID0geC50cnVlQ291bnQoKSAqIHkudHJ1ZUNvdW50KCk7XG4gIGlmICh0b3RhbFByb2QgPT0gMClcbiAgICByZXR1cm4gMC4wO1xuICBjb25zdCBjb21tb24gPSB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG4gIHJldHVybiAoY29tbW9uICogdG90YWwgLSB0b3RhbFByb2QpIC8gdG90YWxQcm9kO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWNDb25uYXVnaGV5RGlzdGFuY2UoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgcmV0dXJuIGdldERpc3RhbmNlRnJvbVNpbWlsYXJpdHkobWNDb25uYXVnaGV5U2ltaWxhcml0eSh4LCB5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3ltbWV0cmljU2ltaWxhcml0eSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICBjb25zdCBtaW4gPSBNYXRoLm1pbih4LnRydWVDb3VudCgpLCB5LnRydWVDb3VudCgpKTtcbiAgaWYgKG1pbiA9PSAwKVxuICAgIHJldHVybiAwLjA7XG4gIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgcmV0dXJuIGNvbW1vbiAvIG1pbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzeW1tZXRyaWNEaXN0YW5jZSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShhc3ltbWV0cmljU2ltaWxhcml0eSh4LCB5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmF1bkJsYW5xdWV0U2ltaWxhcml0eSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICBjb25zdCBtYXggPSBNYXRoLm1heCh4LnRydWVDb3VudCgpLCB5LnRydWVDb3VudCgpKTtcbiAgaWYgKG1heCA9PSAwKVxuICAgIHJldHVybiAwLjA7XG4gIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgcmV0dXJuIGNvbW1vbiAvIG1heDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYXVuQmxhbnF1ZXREaXN0YW5jZSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShicmF1bkJsYW5xdWV0U2ltaWxhcml0eSh4LCB5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydXNzZWxTaW1pbGFyaXR5KHg6IEJpdEFycmF5LCB5OiBCaXRBcnJheSk6IG51bWJlciB7XG4gIGlmICh4Lmxlbmd0aCA9PSAwKVxuICAgIHJldHVybiAwLjA7XG4gIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgcmV0dXJuIGNvbW1vbiAvIHgubGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVzc2VsRGlzdGFuY2UoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgcmV0dXJuIGdldERpc3RhbmNlRnJvbVNpbWlsYXJpdHkocnVzc2VsU2ltaWxhcml0eSh4LCB5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb2dvdEdvbGRiZXJnU2ltaWxhcml0eSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICBjb25zdCBjb21tb24gPSB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG4gIGNvbnN0IHRvdGFsID0geC5jb3VudEJpdHModHJ1ZSkgKyB5LmNvdW50Qml0cyh0cnVlKTtcbiAgY29uc3QgbGVuID0geC5sZW5ndGg7XG4gIGNvbnN0IGRpZmYgPSBsZW4gLSB0b3RhbCArIGNvbW1vbjtcbiAgaWYgKChjb21tb24gPT0gbGVuKSB8fCAoZGlmZiA9PSBsZW4pKSByZXR1cm4gMS4wO1xuICBlbHNlIHJldHVybiBjb21tb24gLyB0b3RhbCArIGRpZmYgLyAoMiAqIGxlbiAtIHRvdGFsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJvZ290R29sZGJlcmdEaXN0YW5jZSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShyb2dvdEdvbGRiZXJnU2ltaWxhcml0eSh4LCB5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaW1pbGFyaXR5RnJvbURpc3RhbmNlKGRpc3RhbmNlOiBudW1iZXIpIHtcbiAgcmV0dXJuIDEvKDErZGlzdGFuY2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShzaW1pbGFyaXR5OiBudW1iZXIpIHtcbiAgcmV0dXJuIDEvc2ltaWxhcml0eSAtIDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXZlcnNlU3Vic2V0KGxlbmd0aDogbnVtYmVyLCBuOiBudW1iZXIsIGRpc3Q6IChpMTogbnVtYmVyLCBpMjogbnVtYmVyKSA9PiBudW1iZXIpIHtcbiAgZnVuY3Rpb24gbWF4QnkodmFsdWVzOiBJdGVyYWJsZUl0ZXJhdG9yPG51bWJlcj4sIG9yZGVyQnk6IChpOiBudW1iZXIpID0+IG51bWJlcikge1xuICAgIGxldCBtYXhWYWx1ZSA9IG51bGw7XG4gICAgbGV0IG1heE9yZGVyQnkgPSBudWxsO1xuXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHZhbHVlcykge1xuICAgICAgY29uc3QgZWxlbWVudE9yZGVyQnkgPSBvcmRlckJ5KGVsZW1lbnQpO1xuICAgICAgaWYgKG1heE9yZGVyQnkgPT0gbnVsbCB8fCBlbGVtZW50T3JkZXJCeSA+IG1heE9yZGVyQnkpIHtcbiAgICAgICAgbWF4VmFsdWUgPSBlbGVtZW50O1xuICAgICAgICBtYXhPcmRlckJ5ID0gZWxlbWVudE9yZGVyQnk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXhWYWx1ZTtcbiAgfVxuXG4gIGNvbnN0IHN1YnNldCA9IFtyYW5kb21JbnQobGVuZ3RoIC0gMSldO1xuICBjb25zdCBjb21wbGVtZW50ID0gbmV3IFNldCgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoIXN1YnNldC5pbmNsdWRlcyhpKSlcbiAgICAgIGNvbXBsZW1lbnQuYWRkKGkpO1xuICB9XG5cbiAgd2hpbGUgKHN1YnNldC5sZW5ndGggPCBuKSB7XG4gICAgY29uc3QgaWR4ID0gbWF4QnkoXG4gICAgICBjb21wbGVtZW50LnZhbHVlcygpIGFzIEl0ZXJhYmxlSXRlcmF0b3I8bnVtYmVyPixcbiAgICAgIChpKSA9PiBNYXRoLm1pbi5hcHBseShNYXRoLCBzdWJzZXQubWFwKGZ1bmN0aW9uKHZhbCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGRpc3QoaSwgdmFsKTtcbiAgICAgIH0pKSk7XG4gICAgaWYgKGlkeCkge1xuICAgICAgc3Vic2V0LnB1c2goaWR4KTtcbiAgICAgIGNvbXBsZW1lbnQuZGVsZXRlKGlkeCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdWJzZXQ7XG59XG4iXX0=
|
|
817
886
|
|
|
818
887
|
/***/ }),
|
|
819
888
|
|
|
@@ -1169,18 +1238,19 @@ class TSNEReducer extends Reducer {
|
|
|
1169
1238
|
super(options);
|
|
1170
1239
|
this.reducer = new _keckelt_tsne__WEBPACK_IMPORTED_MODULE_1__.TSNE(options);
|
|
1171
1240
|
this.iterations = (_a = options === null || options === void 0 ? void 0 : options.iterations) !== null && _a !== void 0 ? _a : 100;
|
|
1172
|
-
this.
|
|
1241
|
+
this.distanceFn = options.distance;
|
|
1173
1242
|
}
|
|
1174
1243
|
/**
|
|
1175
1244
|
* Embeds the data given into the two-dimensional space using t-SNE method.
|
|
1176
|
-
* @return {
|
|
1245
|
+
* @return {any} Cartesian coordinate of this embedding and distance matrix where applicable.
|
|
1177
1246
|
*/
|
|
1178
1247
|
transform() {
|
|
1179
|
-
|
|
1248
|
+
const distance = (0,_datagrok_libraries_utils_src_vector_operations__WEBPACK_IMPORTED_MODULE_3__.calcDistanceMatrix)(this.data, this.distanceFn);
|
|
1249
|
+
this.reducer.initDataDist(distance);
|
|
1180
1250
|
for (let i = 0; i < this.iterations; ++i) {
|
|
1181
1251
|
this.reducer.step(); // every time you call this, solution gets better
|
|
1182
1252
|
}
|
|
1183
|
-
return this.reducer.getSolution();
|
|
1253
|
+
return { distance: distance, embedding: this.reducer.getSolution() };
|
|
1184
1254
|
}
|
|
1185
1255
|
}
|
|
1186
1256
|
/**
|
|
@@ -1228,7 +1298,7 @@ class UMAPReducer extends Reducer {
|
|
|
1228
1298
|
}
|
|
1229
1299
|
/**
|
|
1230
1300
|
* Embeds the data given into the two-dimensional space using UMAP method.
|
|
1231
|
-
* @return {
|
|
1301
|
+
* @return {any} Cartesian coordinate of this embedding.
|
|
1232
1302
|
*/
|
|
1233
1303
|
transform() {
|
|
1234
1304
|
this._encode();
|
|
@@ -1236,7 +1306,7 @@ class UMAPReducer extends Reducer {
|
|
|
1236
1306
|
function arrayCast2Coordinates(data) {
|
|
1237
1307
|
return new Array(data.length).fill(0).map((_, i) => (_datagrok_libraries_utils_src_type_declarations__WEBPACK_IMPORTED_MODULE_2__.Vector.from(data[i])));
|
|
1238
1308
|
}
|
|
1239
|
-
return arrayCast2Coordinates(embedding);
|
|
1309
|
+
return { embedding: arrayCast2Coordinates(embedding) };
|
|
1240
1310
|
}
|
|
1241
1311
|
}
|
|
1242
1312
|
/**
|
|
@@ -1257,10 +1327,11 @@ class SPEReducer extends Reducer {
|
|
|
1257
1327
|
}
|
|
1258
1328
|
/**
|
|
1259
1329
|
* Embeds the data given into the two-dimensional space using the original SPE method.
|
|
1260
|
-
* @return {
|
|
1330
|
+
* @return {any} Cartesian coordinate of this embedding and distance matrix where applicable.
|
|
1261
1331
|
*/
|
|
1262
1332
|
transform() {
|
|
1263
|
-
|
|
1333
|
+
const emb = this.reducer.embed(this.data);
|
|
1334
|
+
return { distance: this.reducer.distance, embedding: emb };
|
|
1264
1335
|
}
|
|
1265
1336
|
}
|
|
1266
1337
|
/**
|
|
@@ -1281,10 +1352,11 @@ class PSPEReducer extends Reducer {
|
|
|
1281
1352
|
}
|
|
1282
1353
|
/**
|
|
1283
1354
|
* Embeds the data given into the two-dimensional space using the modified SPE method.
|
|
1284
|
-
* @return {
|
|
1355
|
+
* @return {any} Cartesian coordinate of this embedding and distance matrix where applicable.
|
|
1285
1356
|
*/
|
|
1286
1357
|
transform() {
|
|
1287
|
-
|
|
1358
|
+
const emb = this.reducer.embed(this.data);
|
|
1359
|
+
return { distance: this.reducer.distance, embedding: emb };
|
|
1288
1360
|
}
|
|
1289
1361
|
}
|
|
1290
1362
|
/**
|
|
@@ -1305,10 +1377,11 @@ class OriginalSPEReducer extends Reducer {
|
|
|
1305
1377
|
}
|
|
1306
1378
|
/**
|
|
1307
1379
|
* Embeds the data given into the two-dimensional space using the original SPE method.
|
|
1308
|
-
* @return {
|
|
1380
|
+
* @return {any} Cartesian coordinate of this embedding and distance matrix where applicable.
|
|
1309
1381
|
*/
|
|
1310
1382
|
transform() {
|
|
1311
|
-
|
|
1383
|
+
const emb = this.reducer.embed(this.data);
|
|
1384
|
+
return { distance: this.reducer.distance, embedding: emb };
|
|
1312
1385
|
}
|
|
1313
1386
|
}
|
|
1314
1387
|
const AvailableReducers = {
|
|
@@ -1361,18 +1434,18 @@ class DimensionalityReducer {
|
|
|
1361
1434
|
*
|
|
1362
1435
|
* @param {boolean} transpose Whether to transform coordinates to have columns-first orientation.
|
|
1363
1436
|
* @throws {Error} If the embedding method was not found.
|
|
1364
|
-
* @return {
|
|
1437
|
+
* @return {any} Cartesian coordinate of this embedding and distance matrix where applicable.
|
|
1365
1438
|
* @memberof DimensionalityReducer
|
|
1366
1439
|
*/
|
|
1367
1440
|
transform(transpose = false) {
|
|
1368
1441
|
if (this.reducer == undefined) {
|
|
1369
1442
|
throw new Error('Reducer was not defined.');
|
|
1370
1443
|
}
|
|
1371
|
-
let embedding = this.reducer.transform();
|
|
1444
|
+
let { embedding, distance } = this.reducer.transform();
|
|
1372
1445
|
if (transpose) {
|
|
1373
1446
|
embedding = (0,_datagrok_libraries_utils_src_vector_operations__WEBPACK_IMPORTED_MODULE_3__.transposeMatrix)(embedding);
|
|
1374
1447
|
}
|
|
1375
|
-
return embedding;
|
|
1448
|
+
return { distance: distance, embedding: embedding };
|
|
1376
1449
|
}
|
|
1377
1450
|
/**
|
|
1378
1451
|
* Returns metrics available by type.
|
|
@@ -1408,7 +1481,7 @@ class DimensionalityReducer {
|
|
|
1408
1481
|
return ans;
|
|
1409
1482
|
}
|
|
1410
1483
|
}
|
|
1411
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdWNlLWRpbWVuc2lvbmFsaXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVkdWNlLWRpbWVuc2lvbmFsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxHQUFHLE1BQU0sU0FBUyxDQUFDO0FBQy9CLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFbkMsT0FBTyxFQUF1QyxNQUFNLEVBQVUsTUFBTSxpREFBaUQsQ0FBQztBQUN0SCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixNQUFNLEdBQ1AsTUFBTSxpREFBaUQsQ0FBQztBQUN6RCxPQUFPLEVBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDckQsT0FBTyxFQUFDLE9BQU8sRUFBZ0IsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQXFCLE1BQU0saUJBQWlCLENBQUM7QUFDOUcsT0FBTyxRQUFRLE1BQU0seUNBQXlDLENBQUM7QUFFL0Q7Ozs7O0dBS0c7QUFDSCxNQUFlLE9BQU87SUFHcEI7Ozs7T0FJRztJQUNILFlBQVksT0FBZ0I7UUFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzNCLENBQUM7Q0FVRjtBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxXQUFZLFNBQVEsT0FBTztJQUsvQjs7OztPQUlHO0lBQ0gsWUFBWSxPQUFnQjs7UUFDMUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFVBQVUsbUNBQUksR0FBRyxDQUFDO1FBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7OztP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RztJQUNJLFNBQVMsQ0FBQyxZQUFxQixLQUFLO1FBQ3pDLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxTQUFTLEVBQUU7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUV6QyxJQUFJLFNBQVMsRUFBRTtZQUNiLFNBQVMsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDeEM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLHNCQUFzQixDQUFDLFFBQTRCO1FBQ3hELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sS0FBSyxnQkFBZ0I7UUFDekIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxLQUFLLGdCQUFnQjtRQUN6QixJQUFJLEdBQUcsR0FBYSxFQUFFLENBQUM7UUFDdkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzlDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdW1qIGZyb20gJ3VtYXAtanMnO1xuaW1wb3J0IHtUU05FfSBmcm9tICdAa2Vja2VsdC90c25lJztcblxuaW1wb3J0IHtPcHRpb25zLCBEaXN0YW5jZU1ldHJpYywgQ29vcmRpbmF0ZXMsIFZlY3RvciwgVmVjdG9yc30gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdHlwZS1kZWNsYXJhdGlvbnMnO1xuaW1wb3J0IHtcbiAgY2FsY0Rpc3RhbmNlTWF0cml4LFxuICB0cmFuc3Bvc2VNYXRyaXgsXG4gIGFzc2VydCxcbn0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdmVjdG9yLW9wZXJhdGlvbnMnO1xuaW1wb3J0IHtTUEVCYXNlLCBQU1BFQmFzZSwgT3JpZ2luYWxTUEV9IGZyb20gJy4vc3BlJztcbmltcG9ydCB7TWVhc3VyZSwgS25vd25NZXRyaWNzLCBBdmFpbGFibGVNZXRyaWNzLCBpc0JpdEFycmF5TWV0cmljLCBBdmFpbGFibGVEYXRhVHlwZXN9IGZyb20gJy4vdHlwZWQtbWV0cmljcyc7XG5pbXBvcnQgQml0QXJyYXkgZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvYml0LWFycmF5JztcblxuLyoqXG4gKiBBYnN0cmFjdCBkaW1lbnNpb25hbGl0eSByZWR1Y2VyLlxuICpcbiAqIEBhYnN0cmFjdFxuICogQGNsYXNzIFJlZHVjZXJcbiAqL1xuYWJzdHJhY3QgY2xhc3MgUmVkdWNlciB7XG4gIHByb3RlY3RlZCBkYXRhOiBWZWN0b3JzO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFJlZHVjZXIuXG4gICAqIEBwYXJhbSB7T3B0aW9uc30gb3B0aW9ucyBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgKiBAbWVtYmVyb2YgUmVkdWNlclxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucykge1xuICAgIHRoaXMuZGF0YSA9IG9wdGlvbnMuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJcyB0byBlbWJlZCB0aGUgZGF0YSBnaXZlbiBpbnRvIHRoZSB0d28tZGltZW5zaW9uYWwgc3BhY2UuXG4gICAqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJuIHtDb29yZGluYXRlc30gQ2FydGVzaWFuIGNvb3JkaW5hdGUgb2YgdGhpcyBlbWJlZGRpbmcuXG4gICAqIEBtZW1iZXJvZiBSZWR1Y2VyXG4gICAqL1xuICBhYnN0cmFjdCB0cmFuc2Zvcm0oKTogQ29vcmRpbmF0ZXM7XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyB0LVNORSBkaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24uXG4gKlxuICogQGNsYXNzIFRTTkVSZWR1Y2VyXG4gKiBAZXh0ZW5kcyB7UmVkdWNlcn1cbiAqL1xuY2xhc3MgVFNORVJlZHVjZXIgZXh0ZW5kcyBSZWR1Y2VyIHtcbiAgcHJvdGVjdGVkIHJlZHVjZXI6IFRTTkU7XG4gIHByb3RlY3RlZCBpdGVyYXRpb25zOiBudW1iZXI7XG4gIHByb3RlY3RlZCBkaXN0YW5jZTogRGlzdGFuY2VNZXRyaWM7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgVFNORVJlZHVjZXIuXG4gICAqIEBwYXJhbSB7T3B0aW9uc30gb3B0aW9ucyBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgKiBAbWVtYmVyb2YgVFNORVJlZHVjZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKTtcbiAgICB0aGlzLnJlZHVjZXIgPSBuZXcgVFNORShvcHRpb25zKTtcbiAgICB0aGlzLml0ZXJhdGlvbnMgPSBvcHRpb25zPy5pdGVyYXRpb25zID8/IDEwMDtcbiAgICB0aGlzLmRpc3RhbmNlID0gb3B0aW9ucy5kaXN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWJlZHMgdGhlIGRhdGEgZ2l2ZW4gaW50byB0aGUgdHdvLWRpbWVuc2lvbmFsIHNwYWNlIHVzaW5nIHQtU05FIG1ldGhvZC5cbiAgICogQHJldHVybiB7Q29vcmRpbmF0ZXN9IENhcnRlc2lhbiBjb29yZGluYXRlIG9mIHRoaXMgZW1iZWRkaW5nLlxuICAgKi9cbiAgcHVibGljIHRyYW5zZm9ybSgpOiBDb29yZGluYXRlcyB7XG4gICAgdGhpcy5yZWR1Y2VyLmluaXREYXRhRGlzdChjYWxjRGlzdGFuY2VNYXRyaXgodGhpcy5kYXRhLCB0aGlzLmRpc3RhbmNlKSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaXRlcmF0aW9uczsgKytpKSB7XG4gICAgICB0aGlzLnJlZHVjZXIuc3RlcCgpOyAvLyBldmVyeSB0aW1lIHlvdSBjYWxsIHRoaXMsIHNvbHV0aW9uIGdldHMgYmV0dGVyXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlZHVjZXIuZ2V0U29sdXRpb24oKTtcbiAgfVxufVxuXG4vKipcbiAqIEltcGxlbWVudHMgVU1BUCBkaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24uXG4gKlxuICogQGNsYXNzIFVNQVBSZWR1Y2VyXG4gKiBAZXh0ZW5kcyB7UmVkdWNlcn1cbiAqL1xuY2xhc3MgVU1BUFJlZHVjZXIgZXh0ZW5kcyBSZWR1Y2VyIHtcbiAgcHJvdGVjdGVkIHJlZHVjZXI6IHVtai5VTUFQO1xuICBwcm90ZWN0ZWQgZGlzdGFuY2VGbjogRnVuY3Rpb247XG4gIHByb3RlY3RlZCB2ZWN0b3JzOiBudW1iZXJbXVtdO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFVNQVBSZWR1Y2VyLlxuICAgKiBAcGFyYW0ge09wdGlvbnN9IG9wdGlvbnMgT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICogQG1lbWJlcm9mIFVNQVBSZWR1Y2VyXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICBhc3NlcnQoJ2Rpc3RhbmNlRm4nIGluIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5kaXN0YW5jZUZuID0gb3B0aW9ucy5kaXN0YW5jZUZuO1xuICAgIHRoaXMudmVjdG9ycyA9IFtdO1xuICAgIG9wdGlvbnMuZGlzdGFuY2VGbiA9IHRoaXMuX2VuY29kZWREaXN0YW5jZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMucmVkdWNlciA9IG5ldyB1bWouVU1BUChvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDdXN0b20gZGlzdGFuY2Ugd3JhcHBlciB0byBoYXZlIG51bWVyaWMgaW5wdXRzIGluc3RlYWQgb2Ygc3RyaW5nIG9uZXMuXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gYSBUaGUgZmlyc3QgaXRlbS5cbiAgICogQHBhcmFtIHtudW1iZXJbXX0gYiBUaGUgZmlyc3QgaXRlbS5cbiAgICogQHJldHVybiB7bnVtYmVyfSBEaXN0YW5jZSBtZXRyaWMuXG4gICAqIEBtZW1iZXJvZiBVTUFQUmVkdWNlclxuICAgKi9cbiAgcHJvdGVjdGVkIF9lbmNvZGVkRGlzdGFuY2UoYTogbnVtYmVyW10sIGI6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5kaXN0YW5jZUZuKHRoaXMuZGF0YVthWzBdXSwgdGhpcy5kYXRhW2JbMF1dKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmNvZGVzIHRoZSBpbnB1dCBkYXRhIGFzIGEgdmVjdG9yIG9mIGluZGljZXMuXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQG1lbWJlcm9mIFVNQVBSZWR1Y2VyXG4gICAqL1xuICBwcm90ZWN0ZWQgX2VuY29kZSgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgdGhpcy52ZWN0b3JzLnB1c2goW2ldKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW1iZWRzIHRoZSBkYXRhIGdpdmVuIGludG8gdGhlIHR3by1kaW1lbnNpb25hbCBzcGFjZSB1c2luZyBVTUFQIG1ldGhvZC5cbiAgICogQHJldHVybiB7Q29vcmRpbmF0ZXN9IENhcnRlc2lhbiBjb29yZGluYXRlIG9mIHRoaXMgZW1iZWRkaW5nLlxuICAgKi9cbiAgcHVibGljIHRyYW5zZm9ybSgpOiBDb29yZGluYXRlcyB7XG4gICAgdGhpcy5fZW5jb2RlKCk7XG5cbiAgICBjb25zdCBlbWJlZGRpbmcgPSB0aGlzLnJlZHVjZXIuZml0KHRoaXMudmVjdG9ycyk7XG5cbiAgICBmdW5jdGlvbiBhcnJheUNhc3QyQ29vcmRpbmF0ZXMoZGF0YTogbnVtYmVyW11bXSk6IENvb3JkaW5hdGVzIHtcbiAgICAgIHJldHVybiBuZXcgQXJyYXkoZGF0YS5sZW5ndGgpLmZpbGwoMCkubWFwKChfLCBpKSA9PiAoVmVjdG9yLmZyb20oZGF0YVtpXSkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXlDYXN0MkNvb3JkaW5hdGVzKGVtYmVkZGluZyk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbXBsZW1lbnRzIG9yaWdpbmFsIFNQRSBkaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24uXG4gKlxuICogQGNsYXNzIFNQRVJlZHVjZXJcbiAqIEBleHRlbmRzIHtSZWR1Y2VyfVxuICovXG5jbGFzcyBTUEVSZWR1Y2VyIGV4dGVuZHMgUmVkdWNlciB7XG4gIHByb3RlY3RlZCByZWR1Y2VyOiBTUEVCYXNlO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFNQRVJlZHVjZXIuXG4gICAqIEBwYXJhbSB7T3B0aW9uc30gb3B0aW9ucyBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgKiBAbWVtYmVyb2YgU1BFUmVkdWNlclxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgIHRoaXMucmVkdWNlciA9IG5ldyBTUEVCYXNlKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtYmVkcyB0aGUgZGF0YSBnaXZlbiBpbnRvIHRoZSB0d28tZGltZW5zaW9uYWwgc3BhY2UgdXNpbmcgdGhlIG9yaWdpbmFsIFNQRSBtZXRob2QuXG4gICAqIEByZXR1cm4ge0Nvb3JkaW5hdGVzfSBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBvZiB0aGlzIGVtYmVkZGluZy5cbiAgICovXG4gIHB1YmxpYyB0cmFuc2Zvcm0oKTogQ29vcmRpbmF0ZXMge1xuICAgIHJldHVybiB0aGlzLnJlZHVjZXIuZW1iZWQodGhpcy5kYXRhKTtcbiAgfVxufVxuXG4vKipcbiAqIEltcGxlbWVudHMgbW9kaWZpZWQgU1BFIGRpbWVuc2lvbmFsaXR5IHJlZHVjdGlvbi5cbiAqXG4gKiBAY2xhc3MgUFNQRVJlZHVjZXJcbiAqIEBleHRlbmRzIHtSZWR1Y2VyfVxuICovXG5jbGFzcyBQU1BFUmVkdWNlciBleHRlbmRzIFJlZHVjZXIge1xuICBwcm90ZWN0ZWQgcmVkdWNlcjogUFNQRUJhc2U7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUFNQRVJlZHVjZXIuXG4gICAqIEBwYXJhbSB7T3B0aW9uc30gb3B0aW9ucyBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgKiBAbWVtYmVyb2YgUFNQRVJlZHVjZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKTtcbiAgICB0aGlzLnJlZHVjZXIgPSBuZXcgUFNQRUJhc2Uob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRW1iZWRzIHRoZSBkYXRhIGdpdmVuIGludG8gdGhlIHR3by1kaW1lbnNpb25hbCBzcGFjZSB1c2luZyB0aGUgbW9kaWZpZWQgU1BFIG1ldGhvZC5cbiAgICogQHJldHVybiB7Q29vcmRpbmF0ZXN9IENhcnRlc2lhbiBjb29yZGluYXRlIG9mIHRoaXMgZW1iZWRkaW5nLlxuICAgKi9cbiAgcHVibGljIHRyYW5zZm9ybSgpOiBDb29yZGluYXRlcyB7XG4gICAgcmV0dXJuIHRoaXMucmVkdWNlci5lbWJlZCh0aGlzLmRhdGEpO1xuICB9XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyBvcmlnaW5hbCBTUEUgZGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uLlxuICpcbiAqIEBjbGFzcyBPcmlnaW5hbFNQRVJlZHVjZXJcbiAqIEBleHRlbmRzIHtSZWR1Y2VyfVxuICovXG5jbGFzcyBPcmlnaW5hbFNQRVJlZHVjZXIgZXh0ZW5kcyBSZWR1Y2VyIHtcbiAgcHJvdGVjdGVkIHJlZHVjZXI6IE9yaWdpbmFsU1BFO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIE9yaWdpbmFsU1BFUmVkdWNlci5cbiAgICogQHBhcmFtIHtPcHRpb25zfSBvcHRpb25zIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgY29uc3RydWN0b3IuXG4gICAqIEBtZW1iZXJvZiBPcmlnaW5hbFNQRVJlZHVjZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKTtcbiAgICB0aGlzLnJlZHVjZXIgPSBuZXcgT3JpZ2luYWxTUEUob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRW1iZWRzIHRoZSBkYXRhIGdpdmVuIGludG8gdGhlIHR3by1kaW1lbnNpb25hbCBzcGFjZSB1c2luZyB0aGUgb3JpZ2luYWwgU1BFIG1ldGhvZC5cbiAgICogQHJldHVybiB7Q29vcmRpbmF0ZXN9IENhcnRlc2lhbiBjb29yZGluYXRlIG9mIHRoaXMgZW1iZWRkaW5nLlxuICAgKi9cbiAgcHVibGljIHRyYW5zZm9ybSgpOiBDb29yZGluYXRlcyB7XG4gICAgcmV0dXJuIHRoaXMucmVkdWNlci5lbWJlZCh0aGlzLmRhdGEpO1xuICB9XG59XG5cbmNvbnN0IEF2YWlsYWJsZVJlZHVjZXJzID0ge1xuICAnVU1BUCc6IFVNQVBSZWR1Y2VyLFxuICAndC1TTkUnOiBUU05FUmVkdWNlcixcbiAgJ1NQRSc6IFNQRVJlZHVjZXIsXG4gICdwU1BFJzogUFNQRVJlZHVjZXIsXG4gICdPcmlnaW5hbFNQRSc6IE9yaWdpbmFsU1BFUmVkdWNlcixcbn07XG5cbmV4cG9ydCB0eXBlIEtub3duTWV0aG9kcyA9IGtleW9mIHR5cGVvZiBBdmFpbGFibGVSZWR1Y2VycztcblxuLyoqXG4gKiBVbmlmaWVkIGNsYXNzIGltcGxlbWVudGluZyBkaWZmZXJlbnQgZGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uIG1ldGhvZHMuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIERpbWVuc2lvbmFsaXR5UmVkdWNlclxuICovXG5leHBvcnQgY2xhc3MgRGltZW5zaW9uYWxpdHlSZWR1Y2VyIHtcbiAgcHJpdmF0ZSByZWR1Y2VyOiBSZWR1Y2VyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIERpbWVuc2lvbmFsaXR5UmVkdWNlci5cbiAgICogQHBhcmFtIHthbnlbXX0gZGF0YSBWZWN0b3JzIHRvIGVtYmVkLlxuICAgKiBAcGFyYW0ge0tub3duTWV0aG9kc30gbWV0aG9kIEVtYmVkZGluZyBtZXRob2QgdG8gYmUgYXBwbGllZFxuICAgKiBAcGFyYW0ge0tub3duTWV0cmljc30gbWV0cmljIERpc3RhbmNlIG1ldHJpYyB0byBiZSBjb21wdXRlZCBiZXR3ZWVuIGVhY2ggb2YgdGhlIHZlY3RvcnMuXG4gICAqIEBwYXJhbSB7T3B0aW9uc30gW29wdGlvbnNdIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgaW1wbGVtZW50aW5nIGVtYmVkZGVycy5cbiAgICogQG1lbWJlcm9mIERpbWVuc2lvbmFsaXR5UmVkdWNlclxuICAgKi9cbiAgY29uc3RydWN0b3IoZGF0YTogYW55W10sIG1ldGhvZDogS25vd25NZXRob2RzLCBtZXRyaWM6IEtub3duTWV0cmljcywgb3B0aW9ucz86IE9wdGlvbnMpIHtcbiAgICBjb25zdCBtZWFzdXJlID0gbmV3IE1lYXN1cmUobWV0cmljKS5nZXRNZWFzdXJlKCk7XG4gICAgbGV0IHNwZWNPcHRpb25zID0ge307XG5cbiAgICBpZiAoaXNCaXRBcnJheU1ldHJpYyhtZXRyaWMpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgZGF0YVtpXSA9IG5ldyBCaXRBcnJheShkYXRhW2ldLl9kYXRhLCBkYXRhW2ldLl9sZW5ndGgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtZXRob2QgPT0gJ1VNQVAnKSB7XG4gICAgICBzcGVjT3B0aW9ucyA9IHtcbiAgICAgICAgLi4ue2RhdGE6IGRhdGF9LFxuICAgICAgICAuLi57ZGlzdGFuY2VGbjogbWVhc3VyZX0sXG4gICAgICAgIC4uLntuRXBvY2hzOiBvcHRpb25zPy5jeWNsZXN9LFxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PSAndC1TTkUnKSB7XG4gICAgICBzcGVjT3B0aW9ucyA9IHtcbiAgICAgICAgLi4ue2RhdGE6IGRhdGF9LFxuICAgICAgICAuLi57ZGlzdGFuY2U6IG1lYXN1cmV9LFxuICAgICAgICAuLi57aXRlcmF0aW9uczogb3B0aW9ucz8uY3ljbGVzID8/IHVuZGVmaW5lZH0sXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAobWV0aG9kID09ICdTUEUnKSB7XG4gICAgICBzcGVjT3B0aW9ucyA9IHsuLi57ZGF0YTogZGF0YX0sIC4uLntkaXN0YW5jZTogbWVhc3VyZX0sIC4uLm9wdGlvbnN9O1xuICAgIH0gZWxzZSB7XG4gICAgICBzcGVjT3B0aW9ucyA9IHsuLi57ZGF0YTogZGF0YX0sIC4uLntkaXN0YW5jZTogbWVhc3VyZX0sIC4uLm9wdGlvbnN9O1xuICAgIH1cbiAgICB0aGlzLnJlZHVjZXIgPSBuZXcgQXZhaWxhYmxlUmVkdWNlcnNbbWV0aG9kXShzcGVjT3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRW1iZWRzIHRoZSBkYXRhIGdpdmVuIGludG8gdGhlIHR3by1kaW1lbnNpb25hbCBzcGFjZSB1c2luZyB0aGUgY2hvc2VuIG1ldGhvZC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSB0cmFuc3Bvc2UgV2hldGhlciB0byB0cmFuc2Zvcm0gY29vcmRpbmF0ZXMgdG8gaGF2ZSBjb2x1bW5zLWZpcnN0IG9yaWVudGF0aW9uLlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGVtYmVkZGluZyBtZXRob2Qgd2FzIG5vdCBmb3VuZC5cbiAgICogQHJldHVybiB7Q29vcmRpbmF0ZXN9IENhcnRlc2lhbiBjb29yZGluYXRlIG9mIHRoaXMgZW1iZWRkaW5nLlxuICAgKiBAbWVtYmVyb2YgRGltZW5zaW9uYWxpdHlSZWR1Y2VyXG4gICAqL1xuICBwdWJsaWMgdHJhbnNmb3JtKHRyYW5zcG9zZTogYm9vbGVhbiA9IGZhbHNlKTogQ29vcmRpbmF0ZXMge1xuICAgIGlmICh0aGlzLnJlZHVjZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXIgd2FzIG5vdCBkZWZpbmVkLicpO1xuICAgIH1cbiAgICBsZXQgZW1iZWRkaW5nID0gdGhpcy5yZWR1Y2VyLnRyYW5zZm9ybSgpO1xuXG4gICAgaWYgKHRyYW5zcG9zZSkge1xuICAgICAgZW1iZWRkaW5nID0gdHJhbnNwb3NlTWF0cml4KGVtYmVkZGluZyk7XG4gICAgfVxuICAgIHJldHVybiBlbWJlZGRpbmc7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBtZXRyaWNzIGF2YWlsYWJsZSBieSB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge0F2YWlsYWJsZURhdGFUeXBlc30gdHlwZU5hbWUgdHlwZSBuYW1lXG4gICAqIEByZXR1cm4ge3N0cmluZ1tdfSBNZXRyaWMgbmFtZXMgd2hpY2ggZXhwZWN0cyB0aGUgZ2l2ZW4gZGF0YSB0eXBlXG4gICAqIEBtZW1iZXJvZiBEaW1lbnNpb25hbGl0eVJlZHVjZXJcbiAgICovXG4gIHN0YXRpYyBhdmFpbGFibGVNZXRyaWNzQnlUeXBlKHR5cGVOYW1lOiBBdmFpbGFibGVEYXRhVHlwZXMpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoQXZhaWxhYmxlTWV0cmljc1t0eXBlTmFtZV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgZGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uIG1ldGhvZHMgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQG1lbWJlcm9mIERpbWVuc2lvbmFsaXR5UmVkdWNlclxuICAgKi9cbiAgc3RhdGljIGdldCBhdmFpbGFibGVNZXRob2RzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhBdmFpbGFibGVSZWR1Y2Vycyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBtZXRyaWNzIGF2YWlsYWJsZS5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEBtZW1iZXJvZiBEaW1lbnNpb25hbGl0eVJlZHVjZXJcbiAgICovXG4gIHN0YXRpYyBnZXQgYXZhaWxhYmxlTWV0cmljcygpIHtcbiAgICBsZXQgYW5zOiBzdHJpbmdbXSA9IFtdO1xuICAgIE9iamVjdC52YWx1ZXMoQXZhaWxhYmxlTWV0cmljcykuZm9yRWFjaCgob2JqKSA9PiB7XG4gICAgICBjb25zdCBhcnJheSA9IE9iamVjdC52YWx1ZXMob2JqKTtcbiAgICAgIGFucyA9IFsuLi5hbnMsIC4uLmFycmF5XTtcbiAgICB9KTtcbiAgICByZXR1cm4gYW5zO1xuICB9XG59XG4iXX0=
|
|
1484
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdWNlLWRpbWVuc2lvbmFsaXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVkdWNlLWRpbWVuc2lvbmFsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxHQUFHLE1BQU0sU0FBUyxDQUFDO0FBQy9CLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbkMsT0FBTyxFQUlMLE1BQU0sRUFFQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ2pFLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLE1BQU0sR0FDUCxNQUFNLGlEQUFpRCxDQUFDO0FBQ3pELE9BQU8sRUFBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUNyRCxPQUFPLEVBQUMsT0FBTyxFQUFnQixnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBcUIsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RyxPQUFPLFFBQVEsTUFBTSx5Q0FBeUMsQ0FBQztBQUUvRDs7Ozs7R0FLRztBQUNILE1BQWUsT0FBTztJQUdwQjs7OztPQUlHO0lBQ0gsWUFBWSxPQUFnQjtRQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDM0IsQ0FBQztDQVVGO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFdBQVksU0FBUSxPQUFPO0lBSy9COzs7O09BSUc7SUFDSCxZQUFZLE9BQWdCOztRQUMxQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsVUFBVSxtQ0FBSSxHQUFHLENBQUM7UUFDN0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7O09B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SUFDeEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxLQUFLLGdCQUFnQjtRQUN6QixJQUFJLEdBQUcsR0FBYSxFQUFFLENBQUM7UUFDdkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzlDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdW1qIGZyb20gJ3VtYXAtanMnO1xuaW1wb3J0IHtUU05FfSBmcm9tICdAa2Vja2VsdC90c25lJztcbmltcG9ydCB7XG4gIE9wdGlvbnMsXG4gIERpc3RhbmNlTWV0cmljLFxuICBDb29yZGluYXRlcyxcbiAgVmVjdG9yLFxuICBWZWN0b3JzLFxuICBNYXRyaXh9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3R5cGUtZGVjbGFyYXRpb25zJztcbmltcG9ydCB7XG4gIGNhbGNEaXN0YW5jZU1hdHJpeCxcbiAgdHJhbnNwb3NlTWF0cml4LFxuICBhc3NlcnQsXG59IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3ZlY3Rvci1vcGVyYXRpb25zJztcbmltcG9ydCB7U1BFQmFzZSwgUFNQRUJhc2UsIE9yaWdpbmFsU1BFfSBmcm9tICcuL3NwZSc7XG5pbXBvcnQge01lYXN1cmUsIEtub3duTWV0cmljcywgQXZhaWxhYmxlTWV0cmljcywgaXNCaXRBcnJheU1ldHJpYywgQXZhaWxhYmxlRGF0YVR5cGVzfSBmcm9tICcuL3R5cGVkLW1ldHJpY3MnO1xuaW1wb3J0IEJpdEFycmF5IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL2JpdC1hcnJheSc7XG5cbi8qKlxuICogQWJzdHJhY3QgZGltZW5zaW9uYWxpdHkgcmVkdWNlci5cbiAqXG4gKiBAYWJzdHJhY3RcbiAqIEBjbGFzcyBSZWR1Y2VyXG4gKi9cbmFic3RyYWN0IGNsYXNzIFJlZHVjZXIge1xuICBwcm90ZWN0ZWQgZGF0YTogVmVjdG9ycztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBSZWR1Y2VyLlxuICAgKiBAcGFyYW0ge09wdGlvbnN9IG9wdGlvbnMgT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICogQG1lbWJlcm9mIFJlZHVjZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICB0aGlzLmRhdGEgPSBvcHRpb25zLmRhdGE7XG4gIH1cblxuICAvKipcbiAgICogSXMgdG8gZW1iZWQgdGhlIGRhdGEgZ2l2ZW4gaW50byB0aGUgdHdvLWRpbWVuc2lvbmFsIHNwYWNlLlxuICAgKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHJldHVybiB7YW55fSBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBvZiB0aGlzIGVtYmVkZGluZyBhbmQgZGlzdGFuY2UgbWF0cml4IHdoZXJlIGFwcGxpY2FibGUuXG4gICAqIEBtZW1iZXJvZiBSZWR1Y2VyXG4gICAqL1xuICBhYnN0cmFjdCB0cmFuc2Zvcm0oKTogeyBba2V5OiBzdHJpbmddIDogTWF0cml4IH07XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyB0LVNORSBkaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24uXG4gKlxuICogQGNsYXNzIFRTTkVSZWR1Y2VyXG4gKiBAZXh0ZW5kcyB7UmVkdWNlcn1cbiAqL1xuY2xhc3MgVFNORVJlZHVjZXIgZXh0ZW5kcyBSZWR1Y2VyIHtcbiAgcHJvdGVjdGVkIHJlZHVjZXI6IFRTTkU7XG4gIHByb3RlY3RlZCBpdGVyYXRpb25zOiBudW1iZXI7XG4gIHByb3RlY3RlZCBkaXN0YW5jZUZuOiBEaXN0YW5jZU1ldHJpYztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBUU05FUmVkdWNlci5cbiAgICogQHBhcmFtIHtPcHRpb25zfSBvcHRpb25zIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgY29uc3RydWN0b3IuXG4gICAqIEBtZW1iZXJvZiBUU05FUmVkdWNlclxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgIHRoaXMucmVkdWNlciA9IG5ldyBUU05FKG9wdGlvbnMpO1xuICAgIHRoaXMuaXRlcmF0aW9ucyA9IG9wdGlvbnM/Lml0ZXJhdGlvbnMgPz8gMTAwO1xuICAgIHRoaXMuZGlzdGFuY2VGbiA9IG9wdGlvbnMuZGlzdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogRW1iZWRzIHRoZSBkYXRhIGdpdmVuIGludG8gdGhlIHR3by1kaW1lbnNpb25hbCBzcGFjZSB1c2luZyB0LVNORSBtZXRob2QuXG4gICAqIEByZXR1cm4ge2FueX0gQ2FydGVzaWFuIGNvb3JkaW5hdGUgb2YgdGhpcyBlbWJlZGRpbmcgYW5kIGRpc3RhbmNlIG1hdHJpeCB3aGVyZSBhcHBsaWNhYmxlLlxuICAgKi9cbiAgcHVibGljIHRyYW5zZm9ybSgpOiB7IFtrZXk6IHN0cmluZ10gOiBNYXRyaXggfSB7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBjYWxjRGlzdGFuY2VNYXRyaXgodGhpcy5kYXRhLCB0aGlzLmRpc3RhbmNlRm4pO1xuICAgIHRoaXMucmVkdWNlci5pbml0RGF0YURpc3QoZGlzdGFuY2UpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLml0ZXJhdGlvbnM7ICsraSkge1xuICAgICAgdGhpcy5yZWR1Y2VyLnN0ZXAoKTsgLy8gZXZlcnkgdGltZSB5b3UgY2FsbCB0aGlzLCBzb2x1dGlvbiBnZXRzIGJldHRlclxuICAgIH1cbiAgICByZXR1cm4ge2Rpc3RhbmNlOiBkaXN0YW5jZSwgZW1iZWRkaW5nOiB0aGlzLnJlZHVjZXIuZ2V0U29sdXRpb24oKX07XG4gIH1cbn1cblxuLyoqXG4gKiBJbXBsZW1lbnRzIFVNQVAgZGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uLlxuICpcbiAqIEBjbGFzcyBVTUFQUmVkdWNlclxuICogQGV4dGVuZHMge1JlZHVjZXJ9XG4gKi9cbmNsYXNzIFVNQVBSZWR1Y2VyIGV4dGVuZHMgUmVkdWNlciB7XG4gIHByb3RlY3RlZCByZWR1Y2VyOiB1bWouVU1BUDtcbiAgcHJvdGVjdGVkIGRpc3RhbmNlRm46IEZ1bmN0aW9uO1xuICBwcm90ZWN0ZWQgdmVjdG9yczogbnVtYmVyW11bXTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBVTUFQUmVkdWNlci5cbiAgICogQHBhcmFtIHtPcHRpb25zfSBvcHRpb25zIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgY29uc3RydWN0b3IuXG4gICAqIEBtZW1iZXJvZiBVTUFQUmVkdWNlclxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuXG4gICAgYXNzZXJ0KCdkaXN0YW5jZUZuJyBpbiBvcHRpb25zKTtcblxuICAgIHRoaXMuZGlzdGFuY2VGbiA9IG9wdGlvbnMuZGlzdGFuY2VGbjtcbiAgICB0aGlzLnZlY3RvcnMgPSBbXTtcbiAgICBvcHRpb25zLmRpc3RhbmNlRm4gPSB0aGlzLl9lbmNvZGVkRGlzdGFuY2UuYmluZCh0aGlzKTtcbiAgICB0aGlzLnJlZHVjZXIgPSBuZXcgdW1qLlVNQVAob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQ3VzdG9tIGRpc3RhbmNlIHdyYXBwZXIgdG8gaGF2ZSBudW1lcmljIGlucHV0cyBpbnN0ZWFkIG9mIHN0cmluZyBvbmVzLlxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IGEgVGhlIGZpcnN0IGl0ZW0uXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IGIgVGhlIGZpcnN0IGl0ZW0uXG4gICAqIEByZXR1cm4ge251bWJlcn0gRGlzdGFuY2UgbWV0cmljLlxuICAgKiBAbWVtYmVyb2YgVU1BUFJlZHVjZXJcbiAgICovXG4gIHByb3RlY3RlZCBfZW5jb2RlZERpc3RhbmNlKGE6IG51bWJlcltdLCBiOiBudW1iZXJbXSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZGlzdGFuY2VGbih0aGlzLmRhdGFbYVswXV0sIHRoaXMuZGF0YVtiWzBdXSk7XG4gIH1cblxuICAvKipcbiAgICogRW5jb2RlcyB0aGUgaW5wdXQgZGF0YSBhcyBhIHZlY3RvciBvZiBpbmRpY2VzLlxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBtZW1iZXJvZiBVTUFQUmVkdWNlclxuICAgKi9cbiAgcHJvdGVjdGVkIF9lbmNvZGUoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgIHRoaXMudmVjdG9ycy5wdXNoKFtpXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVtYmVkcyB0aGUgZGF0YSBnaXZlbiBpbnRvIHRoZSB0d28tZGltZW5zaW9uYWwgc3BhY2UgdXNpbmcgVU1BUCBtZXRob2QuXG4gICAqIEByZXR1cm4ge2FueX0gQ2FydGVzaWFuIGNvb3JkaW5hdGUgb2YgdGhpcyBlbWJlZGRpbmcuXG4gICAqL1xuICBwdWJsaWMgdHJhbnNmb3JtKCk6IHsgW2tleTogc3RyaW5nXSA6IE1hdHJpeCB9IHtcbiAgICB0aGlzLl9lbmNvZGUoKTtcblxuICAgIGNvbnN0IGVtYmVkZGluZyA9IHRoaXMucmVkdWNlci5maXQodGhpcy52ZWN0b3JzKTtcblxuICAgIGZ1bmN0aW9uIGFycmF5Q2FzdDJDb29yZGluYXRlcyhkYXRhOiBudW1iZXJbXVtdKTogQ29vcmRpbmF0ZXMge1xuICAgICAgcmV0dXJuIG5ldyBBcnJheShkYXRhLmxlbmd0aCkuZmlsbCgwKS5tYXAoKF8sIGkpID0+IChWZWN0b3IuZnJvbShkYXRhW2ldKSkpO1xuICAgIH1cblxuICAgIHJldHVybiB7ZW1iZWRkaW5nOiBhcnJheUNhc3QyQ29vcmRpbmF0ZXMoZW1iZWRkaW5nKX07XG4gIH1cbn1cblxuLyoqXG4gKiBJbXBsZW1lbnRzIG9yaWdpbmFsIFNQRSBkaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24uXG4gKlxuICogQGNsYXNzIFNQRVJlZHVjZXJcbiAqIEBleHRlbmRzIHtSZWR1Y2VyfVxuICovXG5jbGFzcyBTUEVSZWR1Y2VyIGV4dGVuZHMgUmVkdWNlciB7XG4gIHByb3RlY3RlZCByZWR1Y2VyOiBTUEVCYXNlO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFNQRVJlZHVjZXIuXG4gICAqIEBwYXJhbSB7T3B0aW9uc30gb3B0aW9ucyBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgKiBAbWVtYmVyb2YgU1BFUmVkdWNlclxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgIHRoaXMucmVkdWNlciA9IG5ldyBTUEVCYXNlKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtYmVkcyB0aGUgZGF0YSBnaXZlbiBpbnRvIHRoZSB0d28tZGltZW5zaW9uYWwgc3BhY2UgdXNpbmcgdGhlIG9yaWdpbmFsIFNQRSBtZXRob2QuXG4gICAqIEByZXR1cm4ge2FueX0gQ2FydGVzaWFuIGNvb3JkaW5hdGUgb2YgdGhpcyBlbWJlZGRpbmcgYW5kIGRpc3RhbmNlIG1hdHJpeCB3aGVyZSBhcHBsaWNhYmxlLlxuICAgKi9cbiAgcHVibGljIHRyYW5zZm9ybSgpOiB7IFtrZXk6IHN0cmluZ10gOiBNYXRyaXggfSB7XG4gICAgY29uc3QgZW1iID0gdGhpcy5yZWR1Y2VyLmVtYmVkKHRoaXMuZGF0YSk7XG4gICAgcmV0dXJuIHtkaXN0YW5jZTogdGhpcy5yZWR1Y2VyLmRpc3RhbmNlLCBlbWJlZGRpbmc6IGVtYn07XG4gIH1cbn1cblxuLyoqXG4gKiBJbXBsZW1lbnRzIG1vZGlmaWVkIFNQRSBkaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24uXG4gKlxuICogQGNsYXNzIFBTUEVSZWR1Y2VyXG4gKiBAZXh0ZW5kcyB7UmVkdWNlcn1cbiAqL1xuY2xhc3MgUFNQRVJlZHVjZXIgZXh0ZW5kcyBSZWR1Y2VyIHtcbiAgcHJvdGVjdGVkIHJlZHVjZXI6IFBTUEVCYXNlO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFBTUEVSZWR1Y2VyLlxuICAgKiBAcGFyYW0ge09wdGlvbnN9IG9wdGlvbnMgT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICogQG1lbWJlcm9mIFBTUEVSZWR1Y2VyXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG4gICAgdGhpcy5yZWR1Y2VyID0gbmV3IFBTUEVCYXNlKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtYmVkcyB0aGUgZGF0YSBnaXZlbiBpbnRvIHRoZSB0d28tZGltZW5zaW9uYWwgc3BhY2UgdXNpbmcgdGhlIG1vZGlmaWVkIFNQRSBtZXRob2QuXG4gICAqIEByZXR1cm4ge2FueX0gQ2FydGVzaWFuIGNvb3JkaW5hdGUgb2YgdGhpcyBlbWJlZGRpbmcgYW5kIGRpc3RhbmNlIG1hdHJpeCB3aGVyZSBhcHBsaWNhYmxlLlxuICAgKi9cbiAgcHVibGljIHRyYW5zZm9ybSgpOiB7IFtrZXk6IHN0cmluZ10gOiBNYXRyaXggfSB7XG4gICAgY29uc3QgZW1iID0gdGhpcy5yZWR1Y2VyLmVtYmVkKHRoaXMuZGF0YSk7XG4gICAgcmV0dXJuIHtkaXN0YW5jZTogdGhpcy5yZWR1Y2VyLmRpc3RhbmNlLCBlbWJlZGRpbmc6IGVtYn07XG4gIH1cbn1cblxuLyoqXG4gKiBJbXBsZW1lbnRzIG9yaWdpbmFsIFNQRSBkaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24uXG4gKlxuICogQGNsYXNzIE9yaWdpbmFsU1BFUmVkdWNlclxuICogQGV4dGVuZHMge1JlZHVjZXJ9XG4gKi9cbmNsYXNzIE9yaWdpbmFsU1BFUmVkdWNlciBleHRlbmRzIFJlZHVjZXIge1xuICBwcm90ZWN0ZWQgcmVkdWNlcjogT3JpZ2luYWxTUEU7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgT3JpZ2luYWxTUEVSZWR1Y2VyLlxuICAgKiBAcGFyYW0ge09wdGlvbnN9IG9wdGlvbnMgT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICogQG1lbWJlcm9mIE9yaWdpbmFsU1BFUmVkdWNlclxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgIHRoaXMucmVkdWNlciA9IG5ldyBPcmlnaW5hbFNQRShvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWJlZHMgdGhlIGRhdGEgZ2l2ZW4gaW50byB0aGUgdHdvLWRpbWVuc2lvbmFsIHNwYWNlIHVzaW5nIHRoZSBvcmlnaW5hbCBTUEUgbWV0aG9kLlxuICAgKiBAcmV0dXJuIHthbnl9IENhcnRlc2lhbiBjb29yZGluYXRlIG9mIHRoaXMgZW1iZWRkaW5nIGFuZCBkaXN0YW5jZSBtYXRyaXggd2hlcmUgYXBwbGljYWJsZS5cbiAgICovXG4gIHB1YmxpYyB0cmFuc2Zvcm0oKTogeyBba2V5OiBzdHJpbmddIDogTWF0cml4IH0ge1xuICAgIGNvbnN0IGVtYiA9IHRoaXMucmVkdWNlci5lbWJlZCh0aGlzLmRhdGEpO1xuICAgIHJldHVybiB7ZGlzdGFuY2U6IHRoaXMucmVkdWNlci5kaXN0YW5jZSwgZW1iZWRkaW5nOiBlbWJ9O1xuICB9XG59XG5cbmNvbnN0IEF2YWlsYWJsZVJlZHVjZXJzID0ge1xuICAnVU1BUCc6IFVNQVBSZWR1Y2VyLFxuICAndC1TTkUnOiBUU05FUmVkdWNlcixcbiAgJ1NQRSc6IFNQRVJlZHVjZXIsXG4gICdwU1BFJzogUFNQRVJlZHVjZXIsXG4gICdPcmlnaW5hbFNQRSc6IE9yaWdpbmFsU1BFUmVkdWNlcixcbn07XG5cbmV4cG9ydCB0eXBlIEtub3duTWV0aG9kcyA9IGtleW9mIHR5cGVvZiBBdmFpbGFibGVSZWR1Y2VycztcblxuLyoqXG4gKiBVbmlmaWVkIGNsYXNzIGltcGxlbWVudGluZyBkaWZmZXJlbnQgZGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uIG1ldGhvZHMuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIERpbWVuc2lvbmFsaXR5UmVkdWNlclxuICovXG5leHBvcnQgY2xhc3MgRGltZW5zaW9uYWxpdHlSZWR1Y2VyIHtcbiAgcHJpdmF0ZSByZWR1Y2VyOiBSZWR1Y2VyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIERpbWVuc2lvbmFsaXR5UmVkdWNlci5cbiAgICogQHBhcmFtIHthbnlbXX0gZGF0YSBWZWN0b3JzIHRvIGVtYmVkLlxuICAgKiBAcGFyYW0ge0tub3duTWV0aG9kc30gbWV0aG9kIEVtYmVkZGluZyBtZXRob2QgdG8gYmUgYXBwbGllZFxuICAgKiBAcGFyYW0ge0tub3duTWV0cmljc30gbWV0cmljIERpc3RhbmNlIG1ldHJpYyB0byBiZSBjb21wdXRlZCBiZXR3ZWVuIGVhY2ggb2YgdGhlIHZlY3RvcnMuXG4gICAqIEBwYXJhbSB7T3B0aW9uc30gW29wdGlvbnNdIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgaW1wbGVtZW50aW5nIGVtYmVkZGVycy5cbiAgICogQG1lbWJlcm9mIERpbWVuc2lvbmFsaXR5UmVkdWNlclxuICAgKi9cbiAgY29uc3RydWN0b3IoZGF0YTogYW55W10sIG1ldGhvZDogS25vd25NZXRob2RzLCBtZXRyaWM6IEtub3duTWV0cmljcywgb3B0aW9ucz86IE9wdGlvbnMpIHtcbiAgICBjb25zdCBtZWFzdXJlID0gbmV3IE1lYXN1cmUobWV0cmljKS5nZXRNZWFzdXJlKCk7XG4gICAgbGV0IHNwZWNPcHRpb25zID0ge307XG5cbiAgICBpZiAoaXNCaXRBcnJheU1ldHJpYyhtZXRyaWMpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgZGF0YVtpXSA9IG5ldyBCaXRBcnJheShkYXRhW2ldLl9kYXRhLCBkYXRhW2ldLl9sZW5ndGgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtZXRob2QgPT0gJ1VNQVAnKSB7XG4gICAgICBzcGVjT3B0aW9ucyA9IHtcbiAgICAgICAgLi4ue2RhdGE6IGRhdGF9LFxuICAgICAgICAuLi57ZGlzdGFuY2VGbjogbWVhc3VyZX0sXG4gICAgICAgIC4uLntuRXBvY2hzOiBvcHRpb25zPy5jeWNsZXN9LFxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PSAndC1TTkUnKSB7XG4gICAgICBzcGVjT3B0aW9ucyA9IHtcbiAgICAgICAgLi4ue2RhdGE6IGRhdGF9LFxuICAgICAgICAuLi57ZGlzdGFuY2U6IG1lYXN1cmV9LFxuICAgICAgICAuLi57aXRlcmF0aW9uczogb3B0aW9ucz8uY3ljbGVzID8/IHVuZGVmaW5lZH0sXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAobWV0aG9kID09ICdTUEUnKSB7XG4gICAgICBzcGVjT3B0aW9ucyA9IHsuLi57ZGF0YTogZGF0YX0sIC4uLntkaXN0YW5jZTogbWVhc3VyZX0sIC4uLm9wdGlvbnN9O1xuICAgIH0gZWxzZSB7XG4gICAgICBzcGVjT3B0aW9ucyA9IHsuLi57ZGF0YTogZGF0YX0sIC4uLntkaXN0YW5jZTogbWVhc3VyZX0sIC4uLm9wdGlvbnN9O1xuICAgIH1cbiAgICB0aGlzLnJlZHVjZXIgPSBuZXcgQXZhaWxhYmxlUmVkdWNlcnNbbWV0aG9kXShzcGVjT3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRW1iZWRzIHRoZSBkYXRhIGdpdmVuIGludG8gdGhlIHR3by1kaW1lbnNpb25hbCBzcGFjZSB1c2luZyB0aGUgY2hvc2VuIG1ldGhvZC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSB0cmFuc3Bvc2UgV2hldGhlciB0byB0cmFuc2Zvcm0gY29vcmRpbmF0ZXMgdG8gaGF2ZSBjb2x1bW5zLWZpcnN0IG9yaWVudGF0aW9uLlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGVtYmVkZGluZyBtZXRob2Qgd2FzIG5vdCBmb3VuZC5cbiAgICogQHJldHVybiB7YW55fSBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBvZiB0aGlzIGVtYmVkZGluZyBhbmQgZGlzdGFuY2UgbWF0cml4IHdoZXJlIGFwcGxpY2FibGUuXG4gICAqIEBtZW1iZXJvZiBEaW1lbnNpb25hbGl0eVJlZHVjZXJcbiAgICovXG4gIHB1YmxpYyB0cmFuc2Zvcm0odHJhbnNwb3NlOiBib29sZWFuID0gZmFsc2UpOiB7IFtrZXk6IHN0cmluZ10gOiBNYXRyaXggfSB7XG4gICAgaWYgKHRoaXMucmVkdWNlciA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmVkdWNlciB3YXMgbm90IGRlZmluZWQuJyk7XG4gICAgfVxuXG4gICAgbGV0IHtlbWJlZGRpbmcsIGRpc3RhbmNlfSA9IHRoaXMucmVkdWNlci50cmFuc2Zvcm0oKTtcblxuICAgIGlmICh0cmFuc3Bvc2UpIHtcbiAgICAgIGVtYmVkZGluZyA9IHRyYW5zcG9zZU1hdHJpeChlbWJlZGRpbmcpO1xuICAgIH1cbiAgICByZXR1cm4ge2Rpc3RhbmNlOiBkaXN0YW5jZSwgZW1iZWRkaW5nOiBlbWJlZGRpbmd9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgbWV0cmljcyBhdmFpbGFibGUgYnkgdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIHtBdmFpbGFibGVEYXRhVHlwZXN9IHR5cGVOYW1lIHR5cGUgbmFtZVxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gTWV0cmljIG5hbWVzIHdoaWNoIGV4cGVjdHMgdGhlIGdpdmVuIGRhdGEgdHlwZVxuICAgKiBAbWVtYmVyb2YgRGltZW5zaW9uYWxpdHlSZWR1Y2VyXG4gICAqL1xuICBzdGF0aWMgYXZhaWxhYmxlTWV0cmljc0J5VHlwZSh0eXBlTmFtZTogQXZhaWxhYmxlRGF0YVR5cGVzKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKEF2YWlsYWJsZU1ldHJpY3NbdHlwZU5hbWVdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGRpbWVuc2lvbmFsaXR5IHJlZHVjdGlvbiBtZXRob2RzIGF2YWlsYWJsZS5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEBtZW1iZXJvZiBEaW1lbnNpb25hbGl0eVJlZHVjZXJcbiAgICovXG4gIHN0YXRpYyBnZXQgYXZhaWxhYmxlTWV0aG9kcygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoQXZhaWxhYmxlUmVkdWNlcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgbWV0cmljcyBhdmFpbGFibGUuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAbWVtYmVyb2YgRGltZW5zaW9uYWxpdHlSZWR1Y2VyXG4gICAqL1xuICBzdGF0aWMgZ2V0IGF2YWlsYWJsZU1ldHJpY3MoKSB7XG4gICAgbGV0IGFuczogc3RyaW5nW10gPSBbXTtcbiAgICBPYmplY3QudmFsdWVzKEF2YWlsYWJsZU1ldHJpY3MpLmZvckVhY2goKG9iaikgPT4ge1xuICAgICAgY29uc3QgYXJyYXkgPSBPYmplY3QudmFsdWVzKG9iaik7XG4gICAgICBhbnMgPSBbLi4uYW5zLCAuLi5hcnJheV07XG4gICAgfSk7XG4gICAgcmV0dXJuIGFucztcbiAgfVxufVxuIl19
|
|
1412
1485
|
|
|
1413
1486
|
/***/ }),
|
|
1414
1487
|
|
|
@@ -1648,7 +1721,7 @@ class OriginalSPE extends SPEBase {
|
|
|
1648
1721
|
return coordinates;
|
|
1649
1722
|
}
|
|
1650
1723
|
}
|
|
1651
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3BlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixTQUFTLEdBQ1YsTUFBTSxpREFBaUQsQ0FBQztBQUN6RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFFL0Q7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLE9BQU87SUFhbEI7Ozs7T0FJRztJQUNILFlBQVksT0FBaUI7O1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsS0FBSyxtQ0FBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxNQUFNLG1DQUFJLEdBQUcsQ0FBQztRQUNyQyw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxNQUFNLG1DQUFJLENBQUMsQ0FBQztRQUNuQyw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxNQUFNLG1DQUFJLEdBQUcsQ0FBQztRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLE9BQU8sbUNBQUksSUFBSSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBQyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFDLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLE9BQU8sbUNBQUksS0FBSyxDQUFDO1FBQ3pDLHVDQUF1QztRQUN2QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsUUFBUSxtQ0FBSSwwQkFBMEIsQ0FBQztRQUN4RSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ08sWUFBWSxDQUFDLE9BQWdCO1FBQ3JDLElBQUksQ0FBQyxRQUFRLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ08sWUFBWSxDQUFDLE9BQWdCLEVBQUUsTUFBYyxFQUFFLE1BQWM7UUFDckUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyxPQUFnQjtRQUMzQixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzlCLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNyQiw0REFBNEQ7UUFDNUQsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFM0UsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUUzQixJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUM7U0FDL0I7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTNCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFO1lBQ2hELEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFO2dCQUM1Qyw2Q0FBNkM7Z0JBQzdDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZELE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFFckMsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUFDLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFekQsNkVBQTZFO2dCQUM3RSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLHNFQUFzRTtnQkFDdEUsTUFBTSxDQUFDLEdBQUcsMEJBQTBCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUVqRCxpREFBaUQ7Z0JBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDdkQsTUFBTSxVQUFVLEdBQUcsT0FBTyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDbEQsd0NBQXdDO29CQUN4QyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN6QyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7b0JBQ3JELFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUN2RDthQUNGO1lBQ0QsaUVBQWlFO1lBQ2pFLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3pCLElBQUksT0FBTyxJQUFJLEVBQUUsRUFBRTtnQkFDakIsTUFBTTthQUNQO1NBQ0Y7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDOztBQXpHZ0IsaUJBQVMsR0FBRyxDQUFDLENBQUM7QUE0R2pDOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBTyxRQUFTLFNBQVEsT0FBTztJQUNuQzs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyxPQUFnQjtRQUMzQixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzlCLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNyQiw2REFBNkQ7UUFDN0QsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDNUUsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUV6QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTNCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFO1lBQ2hELHdDQUF3QztZQUN4QyxNQUFNLENBQUMsR0FBVyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEMsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTVCLDZCQUE2QjtZQUM3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO2dCQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDO29CQUFFLFNBQVM7Z0JBQ3JCLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUIsNEVBQTRFO2dCQUM1RSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLDBFQUEwRTtnQkFDMUUsTUFBTSxDQUFDLEdBQUcsMEJBQTBCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNqRCxpREFBaUQ7Z0JBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDdkQsTUFBTSxVQUFVLEdBQUcsTUFBTSxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDakQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDekMsaUNBQWlDO29CQUNqQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDdkQ7YUFDRjtZQUNELGlFQUFpRTtZQUNqRSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN2QixJQUFJLE1BQU0sSUFBSSxFQUFFLEVBQUU7Z0JBQ2hCLE1BQU07YUFDUDtTQUNGO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztDQUNGO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLFdBQVksU0FBUSxPQUFPO0lBV3RDLFlBQVksT0FBaUI7O1FBQzNCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsTUFBTSxtQ0FBSSxHQUFHLENBQUM7UUFDckMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxLQUFLLG1DQUFJLE1BQU0sQ0FBQztRQUN0QyxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGFBQWEsbUNBQUksR0FBRyxDQUFDO1FBQ25ELElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsV0FBVyxtQ0FBSSxJQUFJLENBQUM7UUFDaEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGdCQUFnQixtQ0FBSSxJQUFJLENBQUM7SUFDNUQsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFnQjtRQUMzQixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzlCLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNyQiw0REFBNEQ7UUFDNUQsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFL0UsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUzQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLEVBQUU7WUFDakMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQy9EO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRTtZQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzlDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZELE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFFckMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFO29CQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztpQkFDdEI7YUFDRjtTQUNGO1FBRUQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN6QixNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUV0RyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRTtZQUNoRCxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRTtnQkFDNUMsNkNBQTZDO2dCQUM3QyxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN2RCxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBRXJDLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFBQyxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRXpELDZFQUE2RTtnQkFDN0UsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxzRUFBc0U7Z0JBQ3RFLE1BQU0sQ0FBQyxHQUFHLDBCQUEwQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFFakQsSUFBSSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDNUIsTUFBTSxVQUFVLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQy9ELHdDQUF3QztvQkFDeEMsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDekMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO29CQUNyRCxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDdkQ7YUFDRjtZQUNELE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFBQyxDQUFDO1lBQ2pFLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ3pCLE1BQU07YUFDUDtTQUNGO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtPcHRpb25zLCBDb29yZGluYXRlcywgVmVjdG9ycywgRGlzdGFuY2VNZXRyaWN9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3R5cGUtZGVjbGFyYXRpb25zJztcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZUV1Y2xpZGVhbkRpc3RhbmNlLFxuICBjYWxjRGlzdGFuY2VNYXRyaXgsXG4gIGZpbGxSYW5kb21NYXRyaXgsXG4gIHZlY3RvckFkZCxcbn0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdmVjdG9yLW9wZXJhdGlvbnMnO1xuaW1wb3J0IHtyYW5kb21JbnR9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3JhbmRvbSc7XG5cbi8qKlxuICogSW1wbGVtZW50cyBzdG9jaGFzdGljIHByb3hpbWl0eSBlbWJlZGRpbmcuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIFNQRUJhc2VcbiAqIEBsaW5rIGRvaToxMC4xMDE2L1MxMDkzLTMyNjMoMDMpMDAxNTUtNFxuICovXG5leHBvcnQgY2xhc3MgU1BFQmFzZSB7XG4gIHByb3RlY3RlZCBzdGF0aWMgZGltZW5zaW9uID0gMjtcbiAgcHJvdGVjdGVkIHN0ZXBzOiBudW1iZXI7XG4gIHByb3RlY3RlZCBjeWNsZXM6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGN1dG9mZjogbnVtYmVyO1xuICBwcm90ZWN0ZWQgbGFtYmRhOiBudW1iZXI7XG4gIHByb3RlY3RlZCBkbGFtYmRhOiBudW1iZXI7XG4gIHByb3RlY3RlZCBsYW1iZGEyOiBudW1iZXI7XG4gIHByb3RlY3RlZCBkbGFtYmRhMjogbnVtYmVyO1xuICBwcm90ZWN0ZWQgZXBzaWxvbjogbnVtYmVyO1xuICBwcm90ZWN0ZWQgZGlzdGFuY2VGdW5jdGlvbjogRGlzdGFuY2VNZXRyaWM7XG4gIHByb3RlY3RlZCBkaXN0YW5jZTogQ29vcmRpbmF0ZXM7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU1BFQmFzZS5cbiAgICogQHBhcmFtIHtPcHRpb25zfSBbb3B0aW9uc10gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICogQG1lbWJlcm9mIFNQRUJhc2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBPcHRpb25zKSB7XG4gICAgdGhpcy5zdGVwcyA9IG9wdGlvbnM/LnN0ZXBzID8/IDA7XG4gICAgdGhpcy5jeWNsZXMgPSBvcHRpb25zPy5jeWNsZXMgPz8gMWU2O1xuICAgIC8vIFNlbGVjdCBhIGN1dG9mZiBkaXN0YW5jZSB7Y3V0b2ZmfSBhbmQgLi4uXG4gICAgdGhpcy5jdXRvZmYgPSBvcHRpb25zPy5jdXRvZmYgPz8gMDtcbiAgICAvLyAuLi4gYW4gaW5pdGlhbCBsZWFybmluZyByYXRlIHtsYW1iZGF9ID4gMFxuICAgIHRoaXMubGFtYmRhID0gb3B0aW9ucz8ubGFtYmRhID8/IDIuMDtcbiAgICB0aGlzLmRsYW1iZGEgPSBvcHRpb25zPy5kbGFtYmRhID8/IDAuMDE7XG4gICAgdGhpcy5sYW1iZGEyID0gdGhpcy5sYW1iZGEvMi47XG4gICAgdGhpcy5kbGFtYmRhMiA9IHRoaXMuZGxhbWJkYS8yLjtcbiAgICB0aGlzLmVwc2lsb24gPSBvcHRpb25zPy5lcHNpbG9uID8/IDFlLTEwO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBicmFjZS1zdHlsZVxuICAgIHRoaXMuZGlzdGFuY2VGdW5jdGlvbiA9IG9wdGlvbnM/LmRpc3RhbmNlID8/IGNhbGN1bGF0ZUV1Y2xpZGVhbkRpc3RhbmNlO1xuICAgIHRoaXMuZGlzdGFuY2UgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBkaXN0YW5jZSBtYXRyaXguXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQHBhcmFtIHtWZWN0b3JzfSB2ZWN0b3JzIElucHV0IHZlY3RvcnMgdG8gY2FsY3VsYXRlIGRpc3RhbmNlIGJldHdlZW4uXG4gICAqIEBtZW1iZXJvZiBTUEVCYXNlXG4gICAqL1xuICBwcm90ZWN0ZWQgaW5pdERpc3RhbmNlKHZlY3RvcnM6IFZlY3RvcnMpIHtcbiAgICB0aGlzLmRpc3RhbmNlID0gY2FsY0Rpc3RhbmNlTWF0cml4KHZlY3RvcnMsIHRoaXMuZGlzdGFuY2VGdW5jdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB0d28gdmVjdG9ycyBnaXZlbi5cbiAgICpcbiAgICogQHBhcmFtIHtWZWN0b3JzfSB2ZWN0b3JzIFNldCBvZiB2ZWN0b3JzIHRvIGNhbGN1bGF0ZSBkaXN0YW5jZXMgYmV0d2Vlbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4MSBJbmRleCBvZiB0aGUgZmlyc3QgdmVjdG9yIG9mIHRoZSBwYWlyLlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXgyIEluZGV4IG9mIHRoZSBzZWNvbmQgdmVjdG9yIG9mIHRoZSBwYWlyLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IERpc3RhbmNlIGJldHdlZW4gdGhlc2UgdHdvIHZlY3RvcnMuXG4gICAqL1xuICBwcm90ZWN0ZWQgY2FsY0Rpc3RhbmNlKHZlY3RvcnM6IFZlY3RvcnMsIGluZGV4MTogbnVtYmVyLCBpbmRleDI6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZGlzdGFuY2VbaW5kZXgxXVtpbmRleDJdO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtYmVkcyB0aGUgdmVjdG9ycyBnaXZlbiBpbnRvIGEgdHdvLWRpbWVuc2lvbmFsIHNwYWNlLlxuICAgKlxuICAgKiBAcGFyYW0ge1ZlY3RvcnN9IHZlY3RvcnMgRC1kaW1lbnNpb25hbCBjb29yZGluYXRlcy5cbiAgICogQHJldHVybiB7Q29vcmRpbmF0ZXN9IFNQRSBjb29yZGluYXRlcyBpbiBEIHNwYWNlLlxuICAgKi9cbiAgcHVibGljIGVtYmVkKHZlY3RvcnM6IFZlY3RvcnMpOiBDb29yZGluYXRlcyB7XG4gICAgY29uc3Qgbkl0ZW1zID0gdmVjdG9ycy5sZW5ndGg7XG4gICAgY29uc3QgYXJlYVdpZHRoID0gNDA7XG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgRC1kaW1lbnNpb25hbCBjb29yZGluYXRlcyBvZiB0aGUgTiBwb2ludHMuXG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSBmaWxsUmFuZG9tTWF0cml4KG5JdGVtcywgU1BFQmFzZS5kaW1lbnNpb24sIGFyZWFXaWR0aCk7XG5cbiAgICBsZXQgbGFtYmRhMiA9IHRoaXMubGFtYmRhMjtcblxuICAgIGlmICh0aGlzLnN0ZXBzID09IDApIHtcbiAgICAgIHRoaXMuc3RlcHMgPSB2ZWN0b3JzLmxlbmd0aC0xO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdERpc3RhbmNlKHZlY3RvcnMpO1xuXG4gICAgZm9yIChsZXQgY3ljbGUgPSAwOyBjeWNsZSA8IHRoaXMuY3ljbGVzOyArK2N5Y2xlKSB7XG4gICAgICBmb3IgKGxldCBzdGVwID0gMDsgc3RlcCA8IHRoaXMuc3RlcHM7ICsrc3RlcCkge1xuICAgICAgICAvLyBTZWxlY3QgdHdvIHBvaW50cywgaSBhbmQgaiwgYXQgcmFuZG9tLCAuLi5cbiAgICAgICAgY29uc3QgaSA9IHJhbmRvbUludChuSXRlbXMpOyBsZXQgaiA9IHJhbmRvbUludChuSXRlbXMpO1xuICAgICAgICB3aGlsZSAoaSA9PSBqKSBqID0gcmFuZG9tSW50KG5JdGVtcyk7XG5cbiAgICAgICAgY29uc3Qgcm93aSA9IGNvb3JkaW5hdGVzW2ldOyBjb25zdCByb3dqID0gY29vcmRpbmF0ZXNbal07XG5cbiAgICAgICAgLy8gLi4uIHJldHJpZXZlIChvciBldmFsdWF0ZSkgdGhlaXIgcHJveGltaXR5IGluIHRoZSBpbnB1dCBzcGFjZSwgcmlqIGFuZCAuLi5cbiAgICAgICAgY29uc3QgciA9IHRoaXMuY2FsY0Rpc3RhbmNlKHZlY3RvcnMsIGksIGopO1xuICAgICAgICAvLyAuLi4gY29tcHV0ZSB0aGVpciBFdWNsaWRlYW4gZGlzdGFuY2Ugb24gdGhlIEQtZGltZW5zaW9uYWwgbWFwLCBkaWouXG4gICAgICAgIGNvbnN0IGQgPSBjYWxjdWxhdGVFdWNsaWRlYW5EaXN0YW5jZShyb3dpLCByb3dqKTtcblxuICAgICAgICAvLyBJZiByaWogPD0gcmMsIG9yIGlmIHJpaiA+IHJjIGFuZCBkaWogPCByaWogLi4uXG4gICAgICAgIGlmICgodGhpcy5jdXRvZmYgPT0gMCkgfHwgKHIgPD0gdGhpcy5jdXRvZmYpIHx8IChkIDwgcikpIHtcbiAgICAgICAgICBjb25zdCBtdWx0aXBsaWVyID0gbGFtYmRhMiooci1kKS8oZCt0aGlzLmVwc2lsb24pO1xuICAgICAgICAgIC8vIC4uLiB1cGRhdGUgdGhlIGNvb3JkaW5hdGVzIHhpIGFuZCB4ai5cbiAgICAgICAgICBjb25zdCBkaWZmSUogPSB2ZWN0b3JBZGQocm93aSwgcm93aiwgLTEpO1xuICAgICAgICAgIGNvb3JkaW5hdGVzW2ldID0gdmVjdG9yQWRkKHJvd2ksIGRpZmZJSiwgbXVsdGlwbGllcik7XG4gICAgICAgICAgY29vcmRpbmF0ZXNbal0gPSB2ZWN0b3JBZGQocm93aiwgZGlmZklKLCAtbXVsdGlwbGllcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIERlY3JlYXNlIHRoZSBsZWFybmluZyByYXRlIHtsYW1iZGF9IGJ5IGEgcHJlc2NyaWJlZCB7ZGxhbWJkYX0uXG4gICAgICBsYW1iZGEyIC09IHRoaXMuZGxhbWJkYTI7XG4gICAgICBpZiAobGFtYmRhMiA8PSAwLikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvb3JkaW5hdGVzO1xuICB9XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyBtb2RpZmllZCBzdG9jaGFzdGljIHByb3hpbWl0eSBlbWJlZGRpbmcuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIFBTUEVCYXNlXG4gKiBAbGluayBkb2k6MTAuMTAxNi9TMTA5My0zMjYzKDAzKTAwMTU1LTRcbiAqL1xuZXhwb3J0IGNsYXNzIFBTUEVCYXNlIGV4dGVuZHMgU1BFQmFzZSB7XG4gIC8qKlxuICAgKiBFbWJlZHMgdGhlIHZlY3RvcnMgZ2l2ZW4gaW50byBhIHR3by1kaW1lbnNpb25hbCBzcGFjZSB1c2luZyBhIG1vZGlmaWVkIHVwZGF0ZSBydWxlLlxuICAgKlxuICAgKiBAcGFyYW0ge1ZlY3RvcnN9IHZlY3RvcnMgRC1kaW1lbnNpb25hbCBjb29yZGluYXRlcy5cbiAgICogQHJldHVybiB7Q29vcmRpbmF0ZXN9IFNQRSBjb29yZGluYXRlcyBpbiBEIHNwYWNlLlxuICAgKi9cbiAgcHVibGljIGVtYmVkKHZlY3RvcnM6IFZlY3RvcnMpOiBDb29yZGluYXRlcyB7XG4gICAgY29uc3Qgbkl0ZW1zID0gdmVjdG9ycy5sZW5ndGg7XG4gICAgY29uc3QgYXJlYVdpZHRoID0gNDA7XG4gICAgLy8gIEluaXRpYWxpemUgdGhlIEQtZGltZW5zaW9uYWwgY29vcmRpbmF0ZXMgb2YgdGhlIE4gcG9pbnRzLlxuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gZmlsbFJhbmRvbU1hdHJpeChuSXRlbXMsIFBTUEVCYXNlLmRpbWVuc2lvbiwgYXJlYVdpZHRoKTtcbiAgICBsZXQgbGFtYmRhID0gdGhpcy5sYW1iZGE7XG5cbiAgICB0aGlzLmluaXREaXN0YW5jZSh2ZWN0b3JzKTtcblxuICAgIGZvciAobGV0IGN5Y2xlID0gMDsgY3ljbGUgPCB0aGlzLmN5Y2xlczsgKytjeWNsZSkge1xuICAgICAgLy8gU2VsZWN0IGEgcG9pbnQsIGksIGF0IHJhbmRvbSAocGl2b3QpLlxuICAgICAgY29uc3QgaTogbnVtYmVyID0gcmFuZG9tSW50KG5JdGVtcyk7XG4gICAgICBjb25zdCByb3dpID0gY29vcmRpbmF0ZXNbaV07XG5cbiAgICAgIC8vIEZvciBldmVyeSBwb2ludCBqICE9IGkgLi4uXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG5JdGVtczsgKytqKSB7XG4gICAgICAgIGlmIChpID09IGopIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCByb3dqID0gY29vcmRpbmF0ZXNbal07XG4gICAgICAgIC8vIC4uLiByZXRyaWV2ZSAob3IgZXZhbHVhdGUpIGl0cyBwcm94aW1pdHkgdG8gaSBpbiB0aGUgaW5wdXQgc3BhY2UsIHJpaiAuLi5cbiAgICAgICAgY29uc3QgciA9IHRoaXMuY2FsY0Rpc3RhbmNlKHZlY3RvcnMsIGksIGopO1xuICAgICAgICAvLyAuLi4gYW5kIGNvbXB1dGUgdGhlaXIgRXVjbGlkZWFuIGRpc3RhbmNlIG9uIHRoZSBELWRpbWVuc2lvbmFsIG1hcCwgZGlqLlxuICAgICAgICBjb25zdCBkID0gY2FsY3VsYXRlRXVjbGlkZWFuRGlzdGFuY2Uocm93aSwgcm93aik7XG4gICAgICAgIC8vIElmIHJpaiA8PSByYywgb3IgaWYgcmlqID4gcmMgYW5kIGRpaiA8IHJpaiAuLi5cbiAgICAgICAgaWYgKCh0aGlzLmN1dG9mZiA9PSAwKSB8fCAociA8PSB0aGlzLmN1dG9mZikgfHwgKGQgPCByKSkge1xuICAgICAgICAgIGNvbnN0IG11bHRpcGxpZXIgPSBsYW1iZGEqKHItZCkvKGQrdGhpcy5lcHNpbG9uKTtcbiAgICAgICAgICBjb25zdCBkaWZmSUogPSB2ZWN0b3JBZGQocm93aSwgcm93aiwgLTEpO1xuICAgICAgICAgIC8vIC4uLiB1cGRhdGUgdGhlIGNvb3JkaW5hdGVzIHhqLlxuICAgICAgICAgIGNvb3JkaW5hdGVzW2pdID0gdmVjdG9yQWRkKHJvd2osIGRpZmZJSiwgLW11bHRpcGxpZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBEZWNyZWFzZSB0aGUgbGVhcm5pbmcgcmF0ZSB7bGFtYmRhfSBieSBhIHByZXNjcmliZWQge2RsYW1iZGF9LlxuICAgICAgbGFtYmRhIC09IHRoaXMuZGxhbWJkYTtcbiAgICAgIGlmIChsYW1iZGEgPD0gMC4pIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb29yZGluYXRlcztcbiAgfVxufVxuXG4vKipcbiAqIEltcGxlbWVudHMgbW9kaWZpZWQgc3RvY2hhc3RpYyBwcm94aW1pdHkgZW1iZWRkaW5nLlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBPcmlnaW5hbFNQRVxuICogQGxpbmsgZG9pOjEwLjEwMDIvamNjLjEwMjM0XG4gKi9cbmV4cG9ydCBjbGFzcyBPcmlnaW5hbFNQRSBleHRlbmRzIFNQRUJhc2Uge1xuICAvKipcbiAgICogRW1iZWRzIHRoZSB2ZWN0b3JzIGdpdmVuIGludG8gYSB0d28tZGltZW5zaW9uYWwgc3BhY2UgdXNpbmcgYSBtb2RpZmllZCB1cGRhdGUgcnVsZS5cbiAgICpcbiAgICogQHBhcmFtIHtWZWN0b3JzfSB2ZWN0b3JzIEQtZGltZW5zaW9uYWwgY29vcmRpbmF0ZXMuXG4gICAqIEByZXR1cm4ge0Nvb3JkaW5hdGVzfSBTUEUgY29vcmRpbmF0ZXMgaW4gRCBzcGFjZS5cbiAgICovXG4gIHByb3RlY3RlZCByYWRpdXNQZXJjZW50OiBudW1iZXI7XG4gIHByb3RlY3RlZCBtYXhEaXN0YW5jZTogbnVtYmVyO1xuICBwcm90ZWN0ZWQgbWF4RGlzdGFuY2VTdGVwczogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBPcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG4gICAgdGhpcy5jeWNsZXMgPSBvcHRpb25zPy5jeWNsZXMgPz8gMWUzO1xuICAgIHRoaXMuc3RlcHMgPSBvcHRpb25zPy5zdGVwcyA/PyAxMDAwMDA7XG4gICAgdGhpcy5yYWRpdXNQZXJjZW50ID0gb3B0aW9ucz8ucmFkaXVzUGVyY2VudCA/PyAxLjA7XG4gICAgdGhpcy5tYXhEaXN0YW5jZSA9IG9wdGlvbnM/Lm1heERpc3RhbmNlID8/IG51bGw7XG4gICAgdGhpcy5tYXhEaXN0YW5jZVN0ZXBzID0gb3B0aW9ucz8ubWF4RGlzdGFuY2VTdGVwcyA/PyBudWxsO1xuICB9XG5cbiAgcHVibGljIGVtYmVkKHZlY3RvcnM6IFZlY3RvcnMpOiBDb29yZGluYXRlcyB7XG4gICAgY29uc3Qgbkl0ZW1zID0gdmVjdG9ycy5sZW5ndGg7XG4gICAgY29uc3QgYXJlYVdpZHRoID0gNDA7XG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgRC1kaW1lbnNpb25hbCBjb29yZGluYXRlcyBvZiB0aGUgTiBwb2ludHMuXG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSBmaWxsUmFuZG9tTWF0cml4KG5JdGVtcywgT3JpZ2luYWxTUEUuZGltZW5zaW9uLCBhcmVhV2lkdGgpO1xuXG4gICAgdGhpcy5pbml0RGlzdGFuY2UodmVjdG9ycyk7XG5cbiAgICBpZiAodGhpcy5tYXhEaXN0YW5jZVN0ZXBzID09IG51bGwpIHtcbiAgICAgIHRoaXMubWF4RGlzdGFuY2VTdGVwcyA9IG5JdGVtcyAqIE1hdGguZmxvb3IoKG5JdGVtcyAtIDEpIC8gMik7XG4gICAgfVxuICAgIGlmICh0aGlzLm1heERpc3RhbmNlID09IG51bGwpIHtcbiAgICAgIHRoaXMubWF4RGlzdGFuY2UgPSAtMWUzNztcbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgdGhpcy5tYXhEaXN0YW5jZVN0ZXBzOyBuKyspIHtcbiAgICAgICAgY29uc3QgaSA9IHJhbmRvbUludChuSXRlbXMpOyBsZXQgaiA9IHJhbmRvbUludChuSXRlbXMpO1xuICAgICAgICB3aGlsZSAoaSA9PSBqKSBqID0gcmFuZG9tSW50KG5JdGVtcyk7XG5cbiAgICAgICAgY29uc3QgZCA9IHRoaXMuY2FsY0Rpc3RhbmNlKHZlY3RvcnMsIGksIGopO1xuICAgICAgICBpZiAoZCA+IHRoaXMubWF4RGlzdGFuY2UpIHtcbiAgICAgICAgICB0aGlzLm1heERpc3RhbmNlID0gZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBsYW1iZGEgPSB0aGlzLmxhbWJkYTtcbiAgICBjb25zdCByYWRpdXMgPSAodGhpcy5yYWRpdXNQZXJjZW50ID09IDAuMCkgPyB0aGlzLm1heERpc3RhbmNlIDogdGhpcy5tYXhEaXN0YW5jZSAqIHRoaXMucmFkaXVzUGVyY2VudDtcblxuICAgIGZvciAobGV0IGN5Y2xlID0gMDsgY3ljbGUgPCB0aGlzLmN5Y2xlczsgKytjeWNsZSkge1xuICAgICAgZm9yIChsZXQgc3RlcCA9IDA7IHN0ZXAgPCB0aGlzLnN0ZXBzOyArK3N0ZXApIHtcbiAgICAgICAgLy8gU2VsZWN0IHR3byBwb2ludHMsIGkgYW5kIGosIGF0IHJhbmRvbSwgLi4uXG4gICAgICAgIGNvbnN0IGkgPSByYW5kb21JbnQobkl0ZW1zKTsgbGV0IGogPSByYW5kb21JbnQobkl0ZW1zKTtcbiAgICAgICAgd2hpbGUgKGkgPT0gaikgaiA9IHJhbmRvbUludChuSXRlbXMpO1xuXG4gICAgICAgIGNvbnN0IHJvd2kgPSBjb29yZGluYXRlc1tpXTsgY29uc3Qgcm93aiA9IGNvb3JkaW5hdGVzW2pdO1xuXG4gICAgICAgIC8vIC4uLiByZXRyaWV2ZSAob3IgZXZhbHVhdGUpIHRoZWlyIHByb3hpbWl0eSBpbiB0aGUgaW5wdXQgc3BhY2UsIHJpaiBhbmQgLi4uXG4gICAgICAgIGNvbnN0IHIgPSB0aGlzLmNhbGNEaXN0YW5jZSh2ZWN0b3JzLCBpLCBqKTtcbiAgICAgICAgLy8gLi4uIGNvbXB1dGUgdGhlaXIgRXVjbGlkZWFuIGRpc3RhbmNlIG9uIHRoZSBELWRpbWVuc2lvbmFsIG1hcCwgZGlqLlxuICAgICAgICBjb25zdCBkID0gY2FsY3VsYXRlRXVjbGlkZWFuRGlzdGFuY2Uocm93aSwgcm93aik7XG5cbiAgICAgICAgaWYgKChyIDw9IHJhZGl1cykgfHwgKGQgPCByKSkge1xuICAgICAgICAgIGNvbnN0IG11bHRpcGxpZXIgPSBsYW1iZGEgKiAwLjUgKiAociAtIGQpIC8gKGQgKyB0aGlzLmVwc2lsb24pO1xuICAgICAgICAgIC8vIC4uLiB1cGRhdGUgdGhlIGNvb3JkaW5hdGVzIHhpIGFuZCB4ai5cbiAgICAgICAgICBjb25zdCBkaWZmSUogPSB2ZWN0b3JBZGQocm93aSwgcm93aiwgLTEpO1xuICAgICAgICAgIGNvb3JkaW5hdGVzW2ldID0gdmVjdG9yQWRkKHJvd2ksIGRpZmZJSiwgbXVsdGlwbGllcik7XG4gICAgICAgICAgY29vcmRpbmF0ZXNbal0gPSB2ZWN0b3JBZGQocm93aiwgZGlmZklKLCAtbXVsdGlwbGllcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxhbWJkYSAtPSAoKHRoaXMubGFtYmRhIC0gdGhpcy5kbGFtYmRhKSAvICh0aGlzLmN5Y2xlcyAtIDEuMCkpOyA7XG4gICAgICBpZiAobGFtYmRhIDwgdGhpcy5kbGFtYmRhKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29vcmRpbmF0ZXM7XG4gIH1cbn1cbiJdfQ==
|
|
1724
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3BlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixTQUFTLEdBQ1YsTUFBTSxpREFBaUQsQ0FBQztBQUN6RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFFL0Q7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLE9BQU87SUFhbEI7Ozs7T0FJRztJQUNILFlBQVksT0FBaUI7O1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsS0FBSyxtQ0FBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxNQUFNLG1DQUFJLEdBQUcsQ0FBQztRQUNyQyw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxNQUFNLG1DQUFJLENBQUMsQ0FBQztRQUNuQyw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxNQUFNLG1DQUFJLEdBQUcsQ0FBQztRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLE9BQU8sbUNBQUksSUFBSSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBQyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFDLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLE9BQU8s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bnQiOlsiaW1wb3J0IHtPcHRpb25zLCBDb29yZGluYXRlcywgVmVjdG9ycywgRGlzdGFuY2VNZXRyaWN9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3R5cGUtZGVjbGFyYXRpb25zJztcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZUV1Y2xpZGVhbkRpc3RhbmNlLFxuICBjYWxjRGlzdGFuY2VNYXRyaXgsXG4gIGZpbGxSYW5kb21NYXRyaXgsXG4gIHZlY3RvckFkZCxcbn0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdmVjdG9yLW9wZXJhdGlvbnMnO1xuaW1wb3J0IHtyYW5kb21JbnR9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3JhbmRvbSc7XG5cbi8qKlxuICogSW1wbGVtZW50cyBzdG9jaGFzdGljIHByb3hpbWl0eSBlbWJlZGRpbmcuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIFNQRUJhc2VcbiAqIEBsaW5rIGRvaToxMC4xMDE2L1MxMDkzLTMyNjMoMDMpMDAxNTUtNFxuICovXG5leHBvcnQgY2xhc3MgU1BFQmFzZSB7XG4gIHByb3RlY3RlZCBzdGF0aWMgZGltZW5zaW9uID0gMjtcbiAgcHJvdGVjdGVkIHN0ZXBzOiBudW1iZXI7XG4gIHByb3RlY3RlZCBjeWNsZXM6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGN1dG9mZjogbnVtYmVyO1xuICBwcm90ZWN0ZWQgbGFtYmRhOiBudW1iZXI7XG4gIHByb3RlY3RlZCBkbGFtYmRhOiBudW1iZXI7XG4gIHByb3RlY3RlZCBsYW1iZGEyOiBudW1iZXI7XG4gIHByb3RlY3RlZCBkbGFtYmRhMjogbnVtYmVyO1xuICBwcm90ZWN0ZWQgZXBzaWxvbjogbnVtYmVyO1xuICBwcm90ZWN0ZWQgZGlzdGFuY2VGdW5jdGlvbjogRGlzdGFuY2VNZXRyaWM7XG4gIGRpc3RhbmNlOiBDb29yZGluYXRlcztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTUEVCYXNlLlxuICAgKiBAcGFyYW0ge09wdGlvbnN9IFtvcHRpb25zXSBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgKiBAbWVtYmVyb2YgU1BFQmFzZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IE9wdGlvbnMpIHtcbiAgICB0aGlzLnN0ZXBzID0gb3B0aW9ucz8uc3RlcHMgPz8gMDtcbiAgICB0aGlzLmN5Y2xlcyA9IG9wdGlvbnM/LmN5Y2xlcyA/PyAxZTY7XG4gICAgLy8gU2VsZWN0IGEgY3V0b2ZmIGRpc3RhbmNlIHtjdXRvZmZ9IGFuZCAuLi5cbiAgICB0aGlzLmN1dG9mZiA9IG9wdGlvbnM/LmN1dG9mZiA/PyAwO1xuICAgIC8vIC4uLiBhbiBpbml0aWFsIGxlYXJuaW5nIHJhdGUge2xhbWJkYX0gPiAwXG4gICAgdGhpcy5sYW1iZGEgPSBvcHRpb25zPy5sYW1iZGEgPz8gMi4wO1xuICAgIHRoaXMuZGxhbWJkYSA9IG9wdGlvbnM/LmRsYW1iZGEgPz8gMC4wMTtcbiAgICB0aGlzLmxhbWJkYTIgPSB0aGlzLmxhbWJkYS8yLjtcbiAgICB0aGlzLmRsYW1iZGEyID0gdGhpcy5kbGFtYmRhLzIuO1xuICAgIHRoaXMuZXBzaWxvbiA9IG9wdGlvbnM/LmVwc2lsb24gPz8gMWUtMTA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGJyYWNlLXN0eWxlXG4gICAgdGhpcy5kaXN0YW5jZUZ1bmN0aW9uID0gb3B0aW9ucz8uZGlzdGFuY2UgPz8gY2FsY3VsYXRlRXVjbGlkZWFuRGlzdGFuY2U7XG4gICAgdGhpcy5kaXN0YW5jZSA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGRpc3RhbmNlIG1hdHJpeC5cbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKiBAcGFyYW0ge1ZlY3RvcnN9IHZlY3RvcnMgSW5wdXQgdmVjdG9ycyB0byBjYWxjdWxhdGUgZGlzdGFuY2UgYmV0d2Vlbi5cbiAgICogQG1lbWJlcm9mIFNQRUJhc2VcbiAgICovXG4gIHByb3RlY3RlZCBpbml0RGlzdGFuY2UodmVjdG9yczogVmVjdG9ycykge1xuICAgIHRoaXMuZGlzdGFuY2UgPSBjYWxjRGlzdGFuY2VNYXRyaXgodmVjdG9ycywgdGhpcy5kaXN0YW5jZUZ1bmN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byB2ZWN0b3JzIGdpdmVuLlxuICAgKlxuICAgKiBAcGFyYW0ge1ZlY3RvcnN9IHZlY3RvcnMgU2V0IG9mIHZlY3RvcnMgdG8gY2FsY3VsYXRlIGRpc3RhbmNlcyBiZXR3ZWVuLlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXgxIEluZGV4IG9mIHRoZSBmaXJzdCB2ZWN0b3Igb2YgdGhlIHBhaXIuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleDIgSW5kZXggb2YgdGhlIHNlY29uZCB2ZWN0b3Igb2YgdGhlIHBhaXIuXG4gICAqIEByZXR1cm4ge251bWJlcn0gRGlzdGFuY2UgYmV0d2VlbiB0aGVzZSB0d28gdmVjdG9ycy5cbiAgICovXG4gIHByb3RlY3RlZCBjYWxjRGlzdGFuY2UodmVjdG9yczogVmVjdG9ycywgaW5kZXgxOiBudW1iZXIsIGluZGV4MjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5kaXN0YW5jZVtpbmRleDFdW2luZGV4Ml07XG4gIH1cblxuICAvKipcbiAgICogRW1iZWRzIHRoZSB2ZWN0b3JzIGdpdmVuIGludG8gYSB0d28tZGltZW5zaW9uYWwgc3BhY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7VmVjdG9yc30gdmVjdG9ycyBELWRpbWVuc2lvbmFsIGNvb3JkaW5hdGVzLlxuICAgKiBAcmV0dXJuIHtDb29yZGluYXRlc30gU1BFIGNvb3JkaW5hdGVzIGluIEQgc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgZW1iZWQodmVjdG9yczogVmVjdG9ycyk6IENvb3JkaW5hdGVzIHtcbiAgICBjb25zdCBuSXRlbXMgPSB2ZWN0b3JzLmxlbmd0aDtcbiAgICBjb25zdCBhcmVhV2lkdGggPSA0MDtcbiAgICAvLyBJbml0aWFsaXplIHRoZSBELWRpbWVuc2lvbmFsIGNvb3JkaW5hdGVzIG9mIHRoZSBOIHBvaW50cy5cbiAgICBjb25zdCBjb29yZGluYXRlcyA9IGZpbGxSYW5kb21NYXRyaXgobkl0ZW1zLCBTUEVCYXNlLmRpbWVuc2lvbiwgYXJlYVdpZHRoKTtcblxuICAgIGxldCBsYW1iZGEyID0gdGhpcy5sYW1iZGEyO1xuXG4gICAgaWYgKHRoaXMuc3RlcHMgPT0gMCkge1xuICAgICAgdGhpcy5zdGVwcyA9IHZlY3RvcnMubGVuZ3RoLTE7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0RGlzdGFuY2UodmVjdG9ycyk7XG5cbiAgICBmb3IgKGxldCBjeWNsZSA9IDA7IGN5Y2xlIDwgdGhpcy5jeWNsZXM7ICsrY3ljbGUpIHtcbiAgICAgIGZvciAobGV0IHN0ZXAgPSAwOyBzdGVwIDwgdGhpcy5zdGVwczsgKytzdGVwKSB7XG4gICAgICAgIC8vIFNlbGVjdCB0d28gcG9pbnRzLCBpIGFuZCBqLCBhdCByYW5kb20sIC4uLlxuICAgICAgICBjb25zdCBpID0gcmFuZG9tSW50KG5JdGVtcyk7IGxldCBqID0gcmFuZG9tSW50KG5JdGVtcyk7XG4gICAgICAgIHdoaWxlIChpID09IGopIGogPSByYW5kb21JbnQobkl0ZW1zKTtcblxuICAgICAgICBjb25zdCByb3dpID0gY29vcmRpbmF0ZXNbaV07IGNvbnN0IHJvd2ogPSBjb29yZGluYXRlc1tqXTtcblxuICAgICAgICAvLyAuLi4gcmV0cmlldmUgKG9yIGV2YWx1YXRlKSB0aGVpciBwcm94aW1pdHkgaW4gdGhlIGlucHV0IHNwYWNlLCByaWogYW5kIC4uLlxuICAgICAgICBjb25zdCByID0gdGhpcy5jYWxjRGlzdGFuY2UodmVjdG9ycywgaSwgaik7XG4gICAgICAgIC8vIC4uLiBjb21wdXRlIHRoZWlyIEV1Y2xpZGVhbiBkaXN0YW5jZSBvbiB0aGUgRC1kaW1lbnNpb25hbCBtYXAsIGRpai5cbiAgICAgICAgY29uc3QgZCA9IGNhbGN1bGF0ZUV1Y2xpZGVhbkRpc3RhbmNlKHJvd2ksIHJvd2opO1xuXG4gICAgICAgIC8vIElmIHJpaiA8PSByYywgb3IgaWYgcmlqID4gcmMgYW5kIGRpaiA8IHJpaiAuLi5cbiAgICAgICAgaWYgKCh0aGlzLmN1dG9mZiA9PSAwKSB8fCAociA8PSB0aGlzLmN1dG9mZikgfHwgKGQgPCByKSkge1xuICAgICAgICAgIGNvbnN0IG11bHRpcGxpZXIgPSBsYW1iZGEyKihyLWQpLyhkK3RoaXMuZXBzaWxvbik7XG4gICAgICAgICAgLy8gLi4uIHVwZGF0ZSB0aGUgY29vcmRpbmF0ZXMgeGkgYW5kIHhqLlxuICAgICAgICAgIGNvbnN0IGRpZmZJSiA9IHZlY3RvckFkZChyb3dpLCByb3dqLCAtMSk7XG4gICAgICAgICAgY29vcmRpbmF0ZXNbaV0gPSB2ZWN0b3JBZGQocm93aSwgZGlmZklKLCBtdWx0aXBsaWVyKTtcbiAgICAgICAgICBjb29yZGluYXRlc1tqXSA9IHZlY3RvckFkZChyb3dqLCBkaWZmSUosIC1tdWx0aXBsaWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gRGVjcmVhc2UgdGhlIGxlYXJuaW5nIHJhdGUge2xhbWJkYX0gYnkgYSBwcmVzY3JpYmVkIHtkbGFtYmRhfS5cbiAgICAgIGxhbWJkYTIgLT0gdGhpcy5kbGFtYmRhMjtcbiAgICAgIGlmIChsYW1iZGEyIDw9IDAuKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29vcmRpbmF0ZXM7XG4gIH1cbn1cblxuLyoqXG4gKiBJbXBsZW1lbnRzIG1vZGlmaWVkIHN0b2NoYXN0aWMgcHJveGltaXR5IGVtYmVkZGluZy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgUFNQRUJhc2VcbiAqIEBsaW5rIGRvaToxMC4xMDE2L1MxMDkzLTMyNjMoMDMpMDAxNTUtNFxuICovXG5leHBvcnQgY2xhc3MgUFNQRUJhc2UgZXh0ZW5kcyBTUEVCYXNlIHtcbiAgLyoqXG4gICAqIEVtYmVkcyB0aGUgdmVjdG9ycyBnaXZlbiBpbnRvIGEgdHdvLWRpbWVuc2lvbmFsIHNwYWNlIHVzaW5nIGEgbW9kaWZpZWQgdXBkYXRlIHJ1bGUuXG4gICAqXG4gICAqIEBwYXJhbSB7VmVjdG9yc30gdmVjdG9ycyBELWRpbWVuc2lvbmFsIGNvb3JkaW5hdGVzLlxuICAgKiBAcmV0dXJuIHtDb29yZGluYXRlc30gU1BFIGNvb3JkaW5hdGVzIGluIEQgc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgZW1iZWQodmVjdG9yczogVmVjdG9ycyk6IENvb3JkaW5hdGVzIHtcbiAgICBjb25zdCBuSXRlbXMgPSB2ZWN0b3JzLmxlbmd0aDtcbiAgICBjb25zdCBhcmVhV2lkdGggPSA0MDtcbiAgICAvLyAgSW5pdGlhbGl6ZSB0aGUgRC1kaW1lbnNpb25hbCBjb29yZGluYXRlcyBvZiB0aGUgTiBwb2ludHMuXG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSBmaWxsUmFuZG9tTWF0cml4KG5JdGVtcywgUFNQRUJhc2UuZGltZW5zaW9uLCBhcmVhV2lkdGgpO1xuICAgIGxldCBsYW1iZGEgPSB0aGlzLmxhbWJkYTtcblxuICAgIHRoaXMuaW5pdERpc3RhbmNlKHZlY3RvcnMpO1xuXG4gICAgZm9yIChsZXQgY3ljbGUgPSAwOyBjeWNsZSA8IHRoaXMuY3ljbGVzOyArK2N5Y2xlKSB7XG4gICAgICAvLyBTZWxlY3QgYSBwb2ludCwgaSwgYXQgcmFuZG9tIChwaXZvdCkuXG4gICAgICBjb25zdCBpOiBudW1iZXIgPSByYW5kb21JbnQobkl0ZW1zKTtcbiAgICAgIGNvbnN0IHJvd2kgPSBjb29yZGluYXRlc1tpXTtcblxuICAgICAgLy8gRm9yIGV2ZXJ5IHBvaW50IGogIT0gaSAuLi5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbkl0ZW1zOyArK2opIHtcbiAgICAgICAgaWYgKGkgPT0gaikgY29udGludWU7XG4gICAgICAgIGNvbnN0IHJvd2ogPSBjb29yZGluYXRlc1tqXTtcbiAgICAgICAgLy8gLi4uIHJldHJpZXZlIChvciBldmFsdWF0ZSkgaXRzIHByb3hpbWl0eSB0byBpIGluIHRoZSBpbnB1dCBzcGFjZSwgcmlqIC4uLlxuICAgICAgICBjb25zdCByID0gdGhpcy5jYWxjRGlzdGFuY2UodmVjdG9ycywgaSwgaik7XG4gICAgICAgIC8vIC4uLiBhbmQgY29tcHV0ZSB0aGVpciBFdWNsaWRlYW4gZGlzdGFuY2Ugb24gdGhlIEQtZGltZW5zaW9uYWwgbWFwLCBkaWouXG4gICAgICAgIGNvbnN0IGQgPSBjYWxjdWxhdGVFdWNsaWRlYW5EaXN0YW5jZShyb3dpLCByb3dqKTtcbiAgICAgICAgLy8gSWYgcmlqIDw9IHJjLCBvciBpZiByaWogPiByYyBhbmQgZGlqIDwgcmlqIC4uLlxuICAgICAgICBpZiAoKHRoaXMuY3V0b2ZmID09IDApIHx8IChyIDw9IHRoaXMuY3V0b2ZmKSB8fCAoZCA8IHIpKSB7XG4gICAgICAgICAgY29uc3QgbXVsdGlwbGllciA9IGxhbWJkYSooci1kKS8oZCt0aGlzLmVwc2lsb24pO1xuICAgICAgICAgIGNvbnN0IGRpZmZJSiA9IHZlY3RvckFkZChyb3dpLCByb3dqLCAtMSk7XG4gICAgICAgICAgLy8gLi4uIHVwZGF0ZSB0aGUgY29vcmRpbmF0ZXMgeGouXG4gICAgICAgICAgY29vcmRpbmF0ZXNbal0gPSB2ZWN0b3JBZGQocm93aiwgZGlmZklKLCAtbXVsdGlwbGllcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIERlY3JlYXNlIHRoZSBsZWFybmluZyByYXRlIHtsYW1iZGF9IGJ5IGEgcHJlc2NyaWJlZCB7ZGxhbWJkYX0uXG4gICAgICBsYW1iZGEgLT0gdGhpcy5kbGFtYmRhO1xuICAgICAgaWYgKGxhbWJkYSA8PSAwLikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvb3JkaW5hdGVzO1xuICB9XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyBtb2RpZmllZCBzdG9jaGFzdGljIHByb3hpbWl0eSBlbWJlZGRpbmcuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIE9yaWdpbmFsU1BFXG4gKiBAbGluayBkb2k6MTAuMTAwMi9qY2MuMTAyMzRcbiAqL1xuZXhwb3J0IGNsYXNzIE9yaWdpbmFsU1BFIGV4dGVuZHMgU1BFQmFzZSB7XG4gIC8qKlxuICAgKiBFbWJlZHMgdGhlIHZlY3RvcnMgZ2l2ZW4gaW50byBhIHR3by1kaW1lbnNpb25hbCBzcGFjZSB1c2luZyBhIG1vZGlmaWVkIHVwZGF0ZSBydWxlLlxuICAgKlxuICAgKiBAcGFyYW0ge1ZlY3RvcnN9IHZlY3RvcnMgRC1kaW1lbnNpb25hbCBjb29yZGluYXRlcy5cbiAgICogQHJldHVybiB7Q29vcmRpbmF0ZXN9IFNQRSBjb29yZGluYXRlcyBpbiBEIHNwYWNlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJhZGl1c1BlcmNlbnQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIG1heERpc3RhbmNlOiBudW1iZXI7XG4gIHByb3RlY3RlZCBtYXhEaXN0YW5jZVN0ZXBzOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IE9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKTtcbiAgICB0aGlzLmN5Y2xlcyA9IG9wdGlvbnM/LmN5Y2xlcyA/PyAxZTM7XG4gICAgdGhpcy5zdGVwcyA9IG9wdGlvbnM/LnN0ZXBzID8/IDEwMDAwMDtcbiAgICB0aGlzLnJhZGl1c1BlcmNlbnQgPSBvcHRpb25zPy5yYWRpdXNQZXJjZW50ID8/IDEuMDtcbiAgICB0aGlzLm1heERpc3RhbmNlID0gb3B0aW9ucz8ubWF4RGlzdGFuY2UgPz8gbnVsbDtcbiAgICB0aGlzLm1heERpc3RhbmNlU3RlcHMgPSBvcHRpb25zPy5tYXhEaXN0YW5jZVN0ZXBzID8/IG51bGw7XG4gIH1cblxuICBwdWJsaWMgZW1iZWQodmVjdG9yczogVmVjdG9ycyk6IENvb3JkaW5hdGVzIHtcbiAgICBjb25zdCBuSXRlbXMgPSB2ZWN0b3JzLmxlbmd0aDtcbiAgICBjb25zdCBhcmVhV2lkdGggPSA0MDtcbiAgICAvLyBJbml0aWFsaXplIHRoZSBELWRpbWVuc2lvbmFsIGNvb3JkaW5hdGVzIG9mIHRoZSBOIHBvaW50cy5cbiAgICBjb25zdCBjb29yZGluYXRlcyA9IGZpbGxSYW5kb21NYXRyaXgobkl0ZW1zLCBPcmlnaW5hbFNQRS5kaW1lbnNpb24sIGFyZWFXaWR0aCk7XG5cbiAgICB0aGlzLmluaXREaXN0YW5jZSh2ZWN0b3JzKTtcblxuICAgIGlmICh0aGlzLm1heERpc3RhbmNlU3RlcHMgPT0gbnVsbCkge1xuICAgICAgdGhpcy5tYXhEaXN0YW5jZVN0ZXBzID0gbkl0ZW1zICogTWF0aC5mbG9vcigobkl0ZW1zIC0gMSkgLyAyKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWF4RGlzdGFuY2UgPT0gbnVsbCkge1xuICAgICAgdGhpcy5tYXhEaXN0YW5jZSA9IC0xZTM3O1xuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCB0aGlzLm1heERpc3RhbmNlU3RlcHM7IG4rKykge1xuICAgICAgICBjb25zdCBpID0gcmFuZG9tSW50KG5JdGVtcyk7IGxldCBqID0gcmFuZG9tSW50KG5JdGVtcyk7XG4gICAgICAgIHdoaWxlIChpID09IGopIGogPSByYW5kb21JbnQobkl0ZW1zKTtcblxuICAgICAgICBjb25zdCBkID0gdGhpcy5jYWxjRGlzdGFuY2UodmVjdG9ycywgaSwgaik7XG4gICAgICAgIGlmIChkID4gdGhpcy5tYXhEaXN0YW5jZSkge1xuICAgICAgICAgIHRoaXMubWF4RGlzdGFuY2UgPSBkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxhbWJkYSA9IHRoaXMubGFtYmRhO1xuICAgIGNvbnN0IHJhZGl1cyA9ICh0aGlzLnJhZGl1c1BlcmNlbnQgPT0gMC4wKSA/IHRoaXMubWF4RGlzdGFuY2UgOiB0aGlzLm1heERpc3RhbmNlICogdGhpcy5yYWRpdXNQZXJjZW50O1xuXG4gICAgZm9yIChsZXQgY3ljbGUgPSAwOyBjeWNsZSA8IHRoaXMuY3ljbGVzOyArK2N5Y2xlKSB7XG4gICAgICBmb3IgKGxldCBzdGVwID0gMDsgc3RlcCA8IHRoaXMuc3RlcHM7ICsrc3RlcCkge1xuICAgICAgICAvLyBTZWxlY3QgdHdvIHBvaW50cywgaSBhbmQgaiwgYXQgcmFuZG9tLCAuLi5cbiAgICAgICAgY29uc3QgaSA9IHJhbmRvbUludChuSXRlbXMpOyBsZXQgaiA9IHJhbmRvbUludChuSXRlbXMpO1xuICAgICAgICB3aGlsZSAoaSA9PSBqKSBqID0gcmFuZG9tSW50KG5JdGVtcyk7XG5cbiAgICAgICAgY29uc3Qgcm93aSA9IGNvb3JkaW5hdGVzW2ldOyBjb25zdCByb3dqID0gY29vcmRpbmF0ZXNbal07XG5cbiAgICAgICAgLy8gLi4uIHJldHJpZXZlIChvciBldmFsdWF0ZSkgdGhlaXIgcHJveGltaXR5IGluIHRoZSBpbnB1dCBzcGFjZSwgcmlqIGFuZCAuLi5cbiAgICAgICAgY29uc3QgciA9IHRoaXMuY2FsY0Rpc3RhbmNlKHZlY3RvcnMsIGksIGopO1xuICAgICAgICAvLyAuLi4gY29tcHV0ZSB0aGVpciBFdWNsaWRlYW4gZGlzdGFuY2Ugb24gdGhlIEQtZGltZW5zaW9uYWwgbWFwLCBkaWouXG4gICAgICAgIGNvbnN0IGQgPSBjYWxjdWxhdGVFdWNsaWRlYW5EaXN0YW5jZShyb3dpLCByb3dqKTtcblxuICAgICAgICBpZiAoKHIgPD0gcmFkaXVzKSB8fCAoZCA8IHIpKSB7XG4gICAgICAgICAgY29uc3QgbXVsdGlwbGllciA9IGxhbWJkYSAqIDAuNSAqIChyIC0gZCkgLyAoZCArIHRoaXMuZXBzaWxvbik7XG4gICAgICAgICAgLy8gLi4uIHVwZGF0ZSB0aGUgY29vcmRpbmF0ZXMgeGkgYW5kIHhqLlxuICAgICAgICAgIGNvbnN0IGRpZmZJSiA9IHZlY3RvckFkZChyb3dpLCByb3dqLCAtMSk7XG4gICAgICAgICAgY29vcmRpbmF0ZXNbaV0gPSB2ZWN0b3JBZGQocm93aSwgZGlmZklKLCBtdWx0aXBsaWVyKTtcbiAgICAgICAgICBjb29yZGluYXRlc1tqXSA9IHZlY3RvckFkZChyb3dqLCBkaWZmSUosIC1tdWx0aXBsaWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGFtYmRhIC09ICgodGhpcy5sYW1iZGEgLSB0aGlzLmRsYW1iZGEpIC8gKHRoaXMuY3ljbGVzIC0gMS4wKSk7IDtcbiAgICAgIGlmIChsYW1iZGEgPCB0aGlzLmRsYW1iZGEpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb29yZGluYXRlcztcbiAgfVxufVxuIl19
|
|
1652
1725
|
|
|
1653
1726
|
/***/ }),
|
|
1654
1727
|
|
|
@@ -1685,16 +1758,16 @@ const AvailableMetrics = {
|
|
|
1685
1758
|
'Jaro-Winkler': jaro_winkler_typescript__WEBPACK_IMPORTED_MODULE_1__.jaroWinkler,
|
|
1686
1759
|
},
|
|
1687
1760
|
'BitArray': {
|
|
1688
|
-
'Tanimoto': _datagrok_libraries_utils_src_similarity_metrics__WEBPACK_IMPORTED_MODULE_2__.
|
|
1689
|
-
'Dice': _datagrok_libraries_utils_src_similarity_metrics__WEBPACK_IMPORTED_MODULE_2__.
|
|
1690
|
-
'Asymmetric': _datagrok_libraries_utils_src_similarity_metrics__WEBPACK_IMPORTED_MODULE_2__.
|
|
1691
|
-
'Braun-Blanquet': _datagrok_libraries_utils_src_similarity_metrics__WEBPACK_IMPORTED_MODULE_2__.
|
|
1692
|
-
'Cosine': _datagrok_libraries_utils_src_similarity_metrics__WEBPACK_IMPORTED_MODULE_2__.
|
|
1693
|
-
'Kulczynski': _datagrok_libraries_utils_src_similarity_metrics__WEBPACK_IMPORTED_MODULE_2__.
|
|
1694
|
-
'Mc-Connaughey': _datagrok_libraries_utils_src_similarity_metrics__WEBPACK_IMPORTED_MODULE_2__.
|
|
1695
|
-
'Rogot-Goldberg': _datagrok_libraries_utils_src_similarity_metrics__WEBPACK_IMPORTED_MODULE_2__.
|
|
1696
|
-
'Russel': _datagrok_libraries_utils_src_similarity_metrics__WEBPACK_IMPORTED_MODULE_2__.
|
|
1697
|
-
'Sokal': _datagrok_libraries_utils_src_similarity_metrics__WEBPACK_IMPORTED_MODULE_2__.
|
|
1761
|
+
'Tanimoto': _datagrok_libraries_utils_src_similarity_metrics__WEBPACK_IMPORTED_MODULE_2__.distanceMetrics.Tanimoto,
|
|
1762
|
+
'Dice': _datagrok_libraries_utils_src_similarity_metrics__WEBPACK_IMPORTED_MODULE_2__.distanceMetrics.Dice,
|
|
1763
|
+
'Asymmetric': _datagrok_libraries_utils_src_similarity_metrics__WEBPACK_IMPORTED_MODULE_2__.distanceMetrics.Asymmetric,
|
|
1764
|
+
'Braun-Blanquet': _datagrok_libraries_utils_src_similarity_metrics__WEBPACK_IMPORTED_MODULE_2__.distanceMetrics["Braun-Blanquet"],
|
|
1765
|
+
'Cosine': _datagrok_libraries_utils_src_similarity_metrics__WEBPACK_IMPORTED_MODULE_2__.distanceMetrics.Cosine,
|
|
1766
|
+
'Kulczynski': _datagrok_libraries_utils_src_similarity_metrics__WEBPACK_IMPORTED_MODULE_2__.distanceMetrics.Kulczynski,
|
|
1767
|
+
'Mc-Connaughey': _datagrok_libraries_utils_src_similarity_metrics__WEBPACK_IMPORTED_MODULE_2__.distanceMetrics["Mc-Connaughey"],
|
|
1768
|
+
'Rogot-Goldberg': _datagrok_libraries_utils_src_similarity_metrics__WEBPACK_IMPORTED_MODULE_2__.distanceMetrics["Rogot-Goldberg"],
|
|
1769
|
+
'Russel': _datagrok_libraries_utils_src_similarity_metrics__WEBPACK_IMPORTED_MODULE_2__.distanceMetrics.Russel,
|
|
1770
|
+
'Sokal': _datagrok_libraries_utils_src_similarity_metrics__WEBPACK_IMPORTED_MODULE_2__.distanceMetrics.Sokal,
|
|
1698
1771
|
},
|
|
1699
1772
|
};
|
|
1700
1773
|
const MetricToDataType = Object.keys(AvailableMetrics)
|
|
@@ -1749,7 +1822,7 @@ class Measure {
|
|
|
1749
1822
|
return Object.keys(AvailableMetrics);
|
|
1750
1823
|
}
|
|
1751
1824
|
}
|
|
1752
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1825
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWQtbWV0cmljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInR5cGVkLW1ldHJpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFcEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQ2pGLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBSTNGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzlCLFFBQVEsRUFBRTtRQUNSLG1CQUFtQixFQUFFLDBCQUEwQjtLQUNoRDtJQUNELFFBQVEsRUFBRTtRQUNSLGFBQWEsRUFBRSxFQUFFLENBQUMsUUFBUTtRQUMxQixjQUFjLEVBQUUsV0FBVztLQUM1QjtJQUNELFVBQVUsRUFBRTtRQUNWLFVBQVUsRUFBRSxlQUFlLENBQUMsVUFBVSxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDO1FBQy9CLFlBQVksRUFBRSxlQUFlLENBQUMsWUFBWSxDQUFDO1FBQzNDLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNuRCxRQUFRLEVBQUUsZUFBZSxDQUFDLFFBQVEsQ0FBQztRQUNuQyxZQUFZLEVBQUUsZUFBZSxDQUFDLFlBQVksQ0FBQztRQUMzQyxlQUFlLEVBQUUsZUFBZSxDQUFDLGVBQWUsQ0FBQztRQUNqRCxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsZ0JBQWdCLENBQUM7UUFDbkQsUUFBUSxFQUFFLGVBQWUsQ0FBQyxRQUFRLENBQUM7UUFDbkMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUM7S0FDbEM7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQXFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7S0FDNUUsTUFBTSxDQUFDLENBQUMsR0FBcUIsRUFBRSxHQUFHLEVBQUUsRUFBRTtJQUNyQyxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBeUIsQ0FBQyxDQUFDLEVBQUU7UUFDMUUsR0FBRyxDQUFDLEdBQXlCLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDdEM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQVdULE1BQU0sVUFBVSxjQUFjLENBQUMsSUFBa0I7SUFDL0MsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUM7QUFDNUMsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxJQUFrQjtJQUNqRCxPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQztBQUM5QyxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxJQUFrQjtJQUMvQyxPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQztBQUM1QyxDQUFDO0FBRUQsNERBQTREO0FBQzVELE1BQU0sT0FBTyxPQUFPO0lBSWxCOzs7O09BSUc7SUFDSCxZQUFZLE1BQW9CO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUF1QixDQUFDO0lBQ2pFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksVUFBVTtRQUNmLE1BQU0sSUFBSSxHQUFzRCxnQkFBZ0IsQ0FBQztRQUNqRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUE0QjtRQUM1RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7O01BRUU7SUFDRixNQUFNLEtBQUssaUJBQWlCO1FBQzFCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZsIGZyb20gJ2Zhc3Rlc3QtbGV2ZW5zaHRlaW4nO1xuaW1wb3J0IHtqYXJvV2lua2xlcn0gZnJvbSAnamFyby13aW5rbGVyLXR5cGVzY3JpcHQnO1xuaW1wb3J0IHtEaXN0YW5jZU1ldHJpY30gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdHlwZS1kZWNsYXJhdGlvbnMnO1xuaW1wb3J0IHtkaXN0YW5jZU1ldHJpY3N9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3NpbWlsYXJpdHktbWV0cmljcyc7XG5pbXBvcnQge2NhbGN1bGF0ZUV1Y2xpZGVhbkRpc3RhbmNlfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy92ZWN0b3Itb3BlcmF0aW9ucyc7XG5pbXBvcnQgQml0QXJyYXkgZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvYml0LWFycmF5JztcbmltcG9ydCB7VmVjdG9yLCBTdHJpbmdEaWN0aW9uYXJ5fSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90eXBlLWRlY2xhcmF0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCBBdmFpbGFibGVNZXRyaWNzID0ge1xuICAnVmVjdG9yJzoge1xuICAgICdFdWNsaWRlYW5EaXN0YW5jZSc6IGNhbGN1bGF0ZUV1Y2xpZGVhbkRpc3RhbmNlLFxuICB9LFxuICAnU3RyaW5nJzoge1xuICAgICdMZXZlbnNodGVpbic6IGZsLmRpc3RhbmNlLFxuICAgICdKYXJvLVdpbmtsZXInOiBqYXJvV2lua2xlcixcbiAgfSxcbiAgJ0JpdEFycmF5Jzoge1xuICAgICdUYW5pbW90byc6IGRpc3RhbmNlTWV0cmljc1snVGFuaW1vdG8nXSxcbiAgICAnRGljZSc6IGRpc3RhbmNlTWV0cmljc1snRGljZSddLFxuICAgICdBc3ltbWV0cmljJzogZGlzdGFuY2VNZXRyaWNzWydBc3ltbWV0cmljJ10sXG4gICAgJ0JyYXVuLUJsYW5xdWV0JzogZGlzdGFuY2VNZXRyaWNzWydCcmF1bi1CbGFucXVldCddLFxuICAgICdDb3NpbmUnOiBkaXN0YW5jZU1ldHJpY3NbJ0Nvc2luZSddLFxuICAgICdLdWxjenluc2tpJzogZGlzdGFuY2VNZXRyaWNzWydLdWxjenluc2tpJ10sXG4gICAgJ01jLUNvbm5hdWdoZXknOiBkaXN0YW5jZU1ldHJpY3NbJ01jLUNvbm5hdWdoZXknXSxcbiAgICAnUm9nb3QtR29sZGJlcmcnOiBkaXN0YW5jZU1ldHJpY3NbJ1JvZ290LUdvbGRiZXJnJ10sXG4gICAgJ1J1c3NlbCc6IGRpc3RhbmNlTWV0cmljc1snUnVzc2VsJ10sXG4gICAgJ1Nva2FsJzogZGlzdGFuY2VNZXRyaWNzWydTb2thbCddLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IE1ldHJpY1RvRGF0YVR5cGU6IFN0cmluZ0RpY3Rpb25hcnkgPSBPYmplY3Qua2V5cyhBdmFpbGFibGVNZXRyaWNzKVxuICAucmVkdWNlKChyZXQ6IFN0cmluZ0RpY3Rpb25hcnksIGtleSkgPT4ge1xuICAgIGZvciAoY29uc3QgdmFsIG9mIE9iamVjdC5rZXlzKEF2YWlsYWJsZU1ldHJpY3Nba2V5IGFzIEF2YWlsYWJsZURhdGFUeXBlc10pKSB7XG4gICAgICByZXRbdmFsIGFzIEF2YWlsYWJsZURhdGFUeXBlc10gPSBrZXk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH0sIHt9KTtcblxuZXhwb3J0IHR5cGUgQXZhaWxhYmxlRGF0YVR5cGVzID0ga2V5b2YgdHlwZW9mIEF2YWlsYWJsZU1ldHJpY3M7XG5leHBvcnQgdHlwZSBTdHJpbmdNZXRyaWNzID0ga2V5b2YgdHlwZW9mIEF2YWlsYWJsZU1ldHJpY3NbJ1N0cmluZyddO1xuZXhwb3J0IHR5cGUgQml0QXJyYXlNZXRyaWNzID0ga2V5b2YgdHlwZW9mIEF2YWlsYWJsZU1ldHJpY3NbJ0JpdEFycmF5J107XG5leHBvcnQgdHlwZSBWZWN0b3JNZXRyaWNzID0ga2V5b2YgdHlwZW9mIEF2YWlsYWJsZU1ldHJpY3NbJ1ZlY3RvciddO1xuZXhwb3J0IHR5cGUgS25vd25NZXRyaWNzID0gU3RyaW5nTWV0cmljcyB8IEJpdEFycmF5TWV0cmljcyB8IFZlY3Rvck1ldHJpY3M7XG5cbmV4cG9ydCB0eXBlIFZhbGlkVHlwZXMgPSB7ZGF0YTogc3RyaW5nW10sIG1ldHJpYzogU3RyaW5nTWV0cmljc30gfCB7ZGF0YTogVmVjdG9yW10sIG1ldHJpYzogVmVjdG9yTWV0cmljc30gfFxuICAgICAgICAgICAgICAgICAgICAgICAgIHtkYXRhOiBCaXRBcnJheVtdLCBtZXRyaWM6IEJpdEFycmF5TWV0cmljc307XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZ01ldHJpYyhuYW1lOiBLbm93bk1ldHJpY3MpIHtcbiAgcmV0dXJuIE1ldHJpY1RvRGF0YVR5cGVbbmFtZV0gPT0gJ1N0cmluZyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0JpdEFycmF5TWV0cmljKG5hbWU6IEtub3duTWV0cmljcykge1xuICByZXR1cm4gTWV0cmljVG9EYXRhVHlwZVtuYW1lXSA9PSAnQml0QXJyYXknO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWZWN0b3JNZXRyaWMobmFtZTogS25vd25NZXRyaWNzKSB7XG4gIHJldHVybiBNZXRyaWNUb0RhdGFUeXBlW25hbWVdID09ICdWZWN0b3InO1xufVxuXG4vKiogVW5pZmllZCBjbGFzcyBpbXBsZW1lbnRpbmcgZGlmZmVyZW50IHN0cmluZyBtZWFzdXJlcy4gKi9cbmV4cG9ydCBjbGFzcyBNZWFzdXJlIHtcbiAgcHJvdGVjdGVkIG1ldGhvZDogS25vd25NZXRyaWNzO1xuICBwcm90ZWN0ZWQgZGF0YVR5cGU6IEF2YWlsYWJsZURhdGFUeXBlcztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBNZWFzdXJlIHdpdGggLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIE1ldGhvZCB0byBjYWxjdWxhdGUgZGlzdGFuY2UgYmV0d2VlbiBzdHJpbmdzLlxuICAgKiBAbWVtYmVyb2YgTWVhc3VyZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1ldGhvZDogS25vd25NZXRyaWNzKSB7XG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgdGhpcy5kYXRhVHlwZSA9IE1ldHJpY1RvRGF0YVR5cGVbbWV0aG9kXSBhcyBBdmFpbGFibGVEYXRhVHlwZXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBjdXN0b20gc3RyaW5nIGRpc3RhbmNlIGZ1bmN0aW9uIHNwZWNpZmllZC5cbiAgICogQHJldHVybiB7RGlzdGFuY2VNZXRyaWN9IENhbGxiYWNrIG9mIHRoZSBtZWFzdXJlIGNob3Nlbi5cbiAgICogQG1lbWJlcm9mIE1lYXN1cmVyXG4gICAqL1xuICBwdWJsaWMgZ2V0TWVhc3VyZSgpOiBEaXN0YW5jZU1ldHJpYyB7XG4gICAgY29uc3QgZGljdDoge1trZXk6IHN0cmluZ106IHtba2V5Mjogc3RyaW5nXTogRGlzdGFuY2VNZXRyaWN9fSA9IEF2YWlsYWJsZU1ldHJpY3M7XG4gICAgcmV0dXJuIGRpY3RbdGhpcy5kYXRhVHlwZV1bdGhpcy5tZXRob2RdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgY3VzdG9tIHN0cmluZyBkaXN0YW5jZSBieSB0aGUgZ2l2ZW4gZGF0YSB0eXBlLlxuICAgKiBAcGFyYW0ge0F2YWlsYWJsZURhdGFUeXBlc30gZGF0YVR5cGUgTWV0cmljJ3MgZGF0YSB0eXBlXG4gICAqIEByZXR1cm4ge3N0cmluZ1tdfSBNZXRyaWMgbmFtZXMgd2hpY2ggZXhwZWN0cyB0aGUgZ2l2ZW4gZGF0YSB0eXBlXG4gICAqIEBtZW1iZXJvZiBNZWFzdXJlclxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRNZXRyaWNCeURhdGFUeXBlKGRhdGFUeXBlOiBBdmFpbGFibGVEYXRhVHlwZXMpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKEF2YWlsYWJsZU1ldHJpY3NbZGF0YVR5cGVdKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIG1ldHJpYyBuYW1lcyBhdmFpbGFibGUuXG4gICAqIEBtZW1iZXJvZiBNZWFzdXJlclxuICAqL1xuICBzdGF0aWMgZ2V0IGF2YWlsYWJsZU1lYXN1cmVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoQXZhaWxhYmxlTWV0cmljcyk7XG4gIH1cbn1cbiJdfQ==
|
|
1753
1826
|
|
|
1754
1827
|
/***/ }),
|
|
1755
1828
|
|
|
@@ -8819,22 +8892,23 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
8819
8892
|
* @param {KnownMethods} method Embedding method.
|
|
8820
8893
|
* @param {KnownMetrics} measure Distance metric.
|
|
8821
8894
|
* @param {number} cyclesCount Number of cycles to repeat.
|
|
8822
|
-
* @return {
|
|
8895
|
+
* @return {any} Embedding (and distance matrix where applicable).
|
|
8823
8896
|
*/
|
|
8824
|
-
function onMessage(columnData, method, measure,
|
|
8825
|
-
const reducer = new _reduce_dimensionality__WEBPACK_IMPORTED_MODULE_0__.DimensionalityReducer(columnData, method, measure,
|
|
8897
|
+
function onMessage(columnData, method, measure, options) {
|
|
8898
|
+
const reducer = new _reduce_dimensionality__WEBPACK_IMPORTED_MODULE_0__.DimensionalityReducer(columnData, method, measure, options);
|
|
8826
8899
|
return reducer.transform(true);
|
|
8827
8900
|
}
|
|
8828
|
-
self.onmessage = ({ data: { columnData, method, measure,
|
|
8829
|
-
const embedding = onMessage(columnData, method, measure,
|
|
8901
|
+
self.onmessage = ({ data: { columnData, method, measure, options } }) => {
|
|
8902
|
+
const embedding = onMessage(columnData, method, measure, options);
|
|
8830
8903
|
self.postMessage({
|
|
8831
|
-
|
|
8904
|
+
distance: embedding.distance,
|
|
8905
|
+
embedding: embedding.embedding,
|
|
8832
8906
|
});
|
|
8833
8907
|
};
|
|
8834
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8908
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGltZW5zaW9uYWxpdHktcmVkdWNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRpbWVuc2lvbmFsaXR5LXJlZHVjZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHFCQUFxQixFQUFlLE1BQU0sMEJBQTBCLENBQUM7QUFHN0U7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLFNBQVMsQ0FBQyxVQUFpQixFQUFFLE1BQW9CLEVBQUUsT0FBcUIsRUFBRSxPQUFhO0lBQzlGLE1BQU0sT0FBTyxHQUFHLElBQUkscUJBQXFCLENBQ3ZDLFVBQVUsRUFDVixNQUFNLEVBQ04sT0FBTyxFQUNQLE9BQU8sQ0FDUixDQUFDO0lBQ0YsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUMsRUFBQyxFQUFFLEVBQUU7SUFDbEUsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xFLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDZixRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVE7UUFDNUIsU0FBUyxFQUFFLFNBQVMsQ0FBQyxTQUFTO0tBQy9CLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGltZW5zaW9uYWxpdHlSZWR1Y2VyLCBLbm93bk1ldGhvZHN9IGZyb20gJy4uL3JlZHVjZS1kaW1lbnNpb25hbGl0eSc7XG5pbXBvcnQge0tub3duTWV0cmljc30gZnJvbSAnLi4vdHlwZWQtbWV0cmljcyc7XG5cbi8qKlxuICogV29ya2VyIHRocmVhZCByZWNlaXZpbmcgZGF0YSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge2FueVtdfSBjb2x1bW5EYXRhIFNhbXBsZXMgdG8gcHJvY2Vzcy5cbiAqIEBwYXJhbSB7S25vd25NZXRob2RzfSBtZXRob2QgRW1iZWRkaW5nIG1ldGhvZC5cbiAqIEBwYXJhbSB7S25vd25NZXRyaWNzfSBtZWFzdXJlIERpc3RhbmNlIG1ldHJpYy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjeWNsZXNDb3VudCBOdW1iZXIgb2YgY3ljbGVzIHRvIHJlcGVhdC5cbiAqIEByZXR1cm4ge2FueX0gRW1iZWRkaW5nIChhbmQgZGlzdGFuY2UgbWF0cml4IHdoZXJlIGFwcGxpY2FibGUpLlxuICovXG5mdW5jdGlvbiBvbk1lc3NhZ2UoY29sdW1uRGF0YTogYW55W10sIG1ldGhvZDogS25vd25NZXRob2RzLCBtZWFzdXJlOiBLbm93bk1ldHJpY3MsIG9wdGlvbnM/OiBhbnkpIHtcbiAgY29uc3QgcmVkdWNlciA9IG5ldyBEaW1lbnNpb25hbGl0eVJlZHVjZXIoXG4gICAgY29sdW1uRGF0YSxcbiAgICBtZXRob2QsXG4gICAgbWVhc3VyZSxcbiAgICBvcHRpb25zLFxuICApO1xuICByZXR1cm4gcmVkdWNlci50cmFuc2Zvcm0odHJ1ZSk7XG59XG5cbnNlbGYub25tZXNzYWdlID0gKHtkYXRhOiB7Y29sdW1uRGF0YSwgbWV0aG9kLCBtZWFzdXJlLCBvcHRpb25zfX0pID0+IHtcbiAgY29uc3QgZW1iZWRkaW5nID0gb25NZXNzYWdlKGNvbHVtbkRhdGEsIG1ldGhvZCwgbWVhc3VyZSwgb3B0aW9ucyk7XG4gIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgIGRpc3RhbmNlOiBlbWJlZGRpbmcuZGlzdGFuY2UsXG4gICAgZW1iZWRkaW5nOiBlbWJlZGRpbmcuZW1iZWRkaW5nLFxuICB9KTtcbn07XG4iXX0=
|
|
8835
8909
|
})();
|
|
8836
8910
|
|
|
8837
8911
|
peptides = __webpack_exports__;
|
|
8838
8912
|
/******/ })()
|
|
8839
8913
|
;
|
|
8840
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVuZG9ycy1ub2RlX21vZHVsZXNfZGF0YWdyb2stbGlicmFyaWVzX21sX3NyY193b3JrZXJzX2RpbWVuc2lvbmFsaXR5LXJlZHVjZXJfanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGlCQUFpQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQSwrQkFBK0IsU0FBUztBQUN4QztBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsU0FBUyxHQUFHLE1BQU0sa0JBQWtCLElBQUksSUFBSSxJQUFJO0FBQ3hGO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsY0FBYyxLQUFLLGNBQWM7QUFDaEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLGNBQWMsS0FBSyxhQUFhO0FBQy9FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsU0FBUztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFD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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDOzs7Ozs7Ozs7Ozs7Ozs7QUNsbUIzQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixZQUFZLFFBQVE7QUFDcEI7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixZQUFZLFFBQVE7QUFDcEI7QUFDTztBQUNQO0FBQ0E7QUFDQSwyQ0FBMkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcEJOO0FBQzlCO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNBO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixlQUFlO0FBQ25DLHNCQUFzQixrQkFBa0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGVBQWU7QUFDbkMsc0JBQXNCLGtCQUFrQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixlQUFlO0FBQ25DLHNCQUFzQixrQkFBa0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGVBQWU7QUFDbkMsc0JBQXNCLGtCQUFrQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixlQUFlO0FBQ25DLHNCQUFzQixrQkFBa0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixlQUFlO0FBQ25DLHNCQUFzQixrQkFBa0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGVBQWU7QUFDbkMsc0JBQXNCLGtCQUFrQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGVBQWU7QUFDbkMsc0JBQXNCLGtCQUFrQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixlQUFlO0FBQ25DLHNCQUFzQixrQkFBa0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixlQUFlO0FBQ25DLHNCQUFzQixrQkFBa0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGVBQWU7QUFDbkMsc0JBQXNCLGtCQUFrQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0Is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O0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsSUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLElBQUksSUFBSTtBQUNyRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsT0FBTztBQUMzQjtBQUNBLHdCQUF3QixPQUFPO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7Ozs7Ozs7VUN2SWpCO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7Ozs7O1dDdEJBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxpQ0FBaUMsV0FBVztXQUM1QztXQUNBOzs7OztXQ1BBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EseUNBQXlDLHdDQUF3QztXQUNqRjtXQUNBO1dBQ0E7Ozs7O1dDUEE7Ozs7O1dDQUE7V0FDQTtXQUNBO1dBQ0EsdURBQXVELGlCQUFpQjtXQUN4RTtXQUNBLGdEQUFnRCxhQUFhO1dBQzdEOzs7Ozs7Ozs7Ozs7QUNOaUU7QUFDakU7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsY0FBYztBQUN6QixXQUFXLGNBQWM7QUFDekIsV0FBVyxRQUFRO0FBQ25CLFlBQVksYUFBYTtBQUN6QjtBQUNBO0FBQ0Esd0JBQXdCLHlFQUFxQiw4Q0FBOEMsc0JBQXNCO0FBQ2pIO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUSw0Q0FBNEM7QUFDeEU7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsMkNBQTJDLCtyRSIsInNvdXJjZXMiOlsid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL2JpdC1hcnJheS5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy9yYW5kb20uanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvc2ltaWxhcml0eS1tZXRyaWNzLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3R5cGUtZGVjbGFyYXRpb25zLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3ZlY3Rvci1vcGVyYXRpb25zLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL3JlZHVjZS1kaW1lbnNpb25hbGl0eS5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9zcGUuanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvdHlwZWQtbWV0cmljcy5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9Aa2Vja2VsdC90c25lL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9Aa2Vja2VsdC90c25lL2xpYi90c25lLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL2Zhc3Rlc3QtbGV2ZW5zaHRlaW4vaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvaXMtYW55LWFycmF5L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9qYXJvLXdpbmtsZXItdHlwZXNjcmlwdC9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvbWwtYXJyYXktbWF4L2xpYi1lczYvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvbWwtYXJyYXktbWF4L25vZGVfbW9kdWxlcy9pcy1hbnktYXJyYXkvbGliLWVzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9tbC1hcnJheS1taW4vbGliLWVzNi9pbmRleC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9tbC1hcnJheS1taW4vbm9kZV9tb2R1bGVzL2lzLWFueS1hcnJheS9saWItZXNtL2luZGV4LmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL21sLWFycmF5LXJlc2NhbGUvbGliLWVzNi9pbmRleC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9tbC1hcnJheS1yZXNjYWxlL25vZGVfbW9kdWxlcy9pcy1hbnktYXJyYXkvbGliLWVzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9tbC1sZXZlbmJlcmctbWFycXVhcmR0L3NyYy9lcnJvckNhbGN1bGF0aW9uLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL21sLWxldmVuYmVyZy1tYXJxdWFyZHQvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL21sLWxldmVuYmVyZy1tYXJxdWFyZHQvc3JjL3N0ZXAuanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvbWwtbWF0cml4L3NyYy9kYy9sdS5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL2RjL3FyLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvZGMvc3ZkLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvZGMvdXRpbC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL2RlY29tcG9zaXRpb25zLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvaW5zcGVjdC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL21hdGhPcGVyYXRpb25zLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvbWF0cml4LmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvc3RhdC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL3V0aWwuanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvbWwtbWF0cml4L3NyYy93cmFwL1dyYXBwZXJNYXRyaXgyRC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy91bWFwLWpzL2Rpc3QvaGVhcC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy91bWFwLWpzL2Rpc3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvdW1hcC1qcy9kaXN0L21hdHJpeC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy91bWFwLWpzL2Rpc3Qvbm5fZGVzY2VudC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy91bWFwLWpzL2Rpc3QvdHJlZS5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy91bWFwLWpzL2Rpc3QvdW1hcC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy91bWFwLWpzL2Rpc3QvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy93b3JrZXJzL2RpbWVuc2lvbmFsaXR5LXJlZHVjZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0QXJyYXkge1xuICAgIGNvbnN0cnVjdG9yKGFyZywgZGVmYXVsdFZhbHVlID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fbGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5fdmVyc2lvbiA9IDA7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxldmVsID0gMDtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkQ291bnRWZXJzaW9uID0gLTE7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkSW5kZXhlc1ZlcnNpb24gPSAtMTtcbiAgICAgICAgdGhpcy5fdmVyc2lvbmVkTmFtZSA9ICcnO1xuICAgICAgICB0aGlzLl92ZXJzaW9uZWROYW1lVmVyc2lvbiA9IC0xO1xuICAgICAgICB0aGlzLlNIUklOS19USFJFU0hPTEQgPSAweDEwMDtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSBhcmc7XG4gICAgICAgICAgICBjb25zdCBidWZmID0gQml0QXJyYXkuX2NyZWF0ZUJ1ZmZlcihsZW5ndGgpO1xuICAgICAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSlcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1ZmYubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZbaV0gPSAtMTtcbiAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBidWZmO1xuICAgICAgICAgICAgdGhpcy5fbGVuZ3RoID0gbGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhID0gYXJnO1xuICAgICAgICAgICAgdGhpcy5fbGVuZ3RoID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb25zdHJ1Y3RvcicpO1xuICAgIH1cbiAgICBnZXRSYXdEYXRhKCkgeyByZXR1cm4gdGhpcy5fZGF0YTsgfVxuICAgIGFzc3VyZUdvZXoobnVtLCBhcmdOYW1lKSB7XG4gICAgICAgIGlmIChudW0gPCAwKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2FyZ05hbWV9IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gemVyb2ApO1xuICAgIH1cbiAgICBhc3N1cmVJblJhbmdlKHZhbHVlLCBtaW4sIG1heCwgYXJnTmFtZSkge1xuICAgICAgICBpZiAoKHZhbHVlIDwgbWluKSB8fCAodmFsdWUgPiBtYXgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFyZ3VtZW50ICR7YXJnTmFtZX0gKCR7dmFsdWV9KSBvdXQgb2YgcmFuZ2UgKCR7bWlufSwgJHttYXh9KWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvcHkoc3JjLCBkc3QsIGNvdW50KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgZHN0W2ldID0gc3JjW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvcHlGcm9tKG90aGVyKSB7XG4gICAgICAgIGlmICh0aGlzLl9sZW5ndGggIT0gb3RoZXIuX2xlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMZW5ndGhzIGRpZmZlciAoJHt0aGlzLl9sZW5ndGh9ICE9ICR7b3RoZXIuX2xlbmd0aH0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb3B5KG90aGVyLl9kYXRhLCB0aGlzLl9kYXRhLCB0aGlzLmxlbmd0aEluSW50cyk7XG4gICAgICAgIHRoaXMuX3ZlcnNpb24rKztcbiAgICB9XG4gICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlbmd0aDtcbiAgICB9XG4gICAgZ2V0IGJ1ZmZlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuICAgIHNldCBidWZmZXIoZGF0YSkge1xuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5fdmVyc2lvbisrO1xuICAgIH1cbiAgICBnZXQgdmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZlcnNpb247XG4gICAgfVxuICAgIHNldCB2ZXJzaW9uKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX3ZlcnNpb24gPSB2YWx1ZTtcbiAgICB9XG4gICAgaW5jcmVtZW50VmVyc2lvbihub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX3ZlcnNpb24rKztcbiAgICB9XG4gICAgZ2V0IGxlbmd0aEluSW50cygpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoKHRoaXMuX2xlbmd0aCArIDB4MWYpIC8gMHgyMCk7XG4gICAgfVxuICAgIGdldCB2ZXJzaW9uZWROYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmVyc2lvbiA9PSB0aGlzLl92ZXJzaW9uZWROYW1lVmVyc2lvbiA/IHRoaXMuX3ZlcnNpb25lZE5hbWUgOiAnJztcbiAgICB9XG4gICAgc2V0IHZlcnNpb25lZE5hbWUobmFtZSkge1xuICAgICAgICB0aGlzLl92ZXJzaW9uZWROYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5fdmVyc2lvbmVkTmFtZVZlcnNpb24gPSB0aGlzLl92ZXJzaW9uO1xuICAgIH1cbiAgICBnZXQgc2VsZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHNldExlbmd0aCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPCAwKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaG91bGQgYmUgPj0gMCcpO1xuICAgICAgICBpZiAodmFsdWUgPT0gdGhpcy5fbGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBuSW50c05lZWRlZCA9IE1hdGguZmxvb3IoKHZhbHVlICsgMHgxZikgLyAweDIwKTtcbiAgICAgICAgaWYgKChuSW50c05lZWRlZCA+IHRoaXMuX2RhdGEubGVuZ3RoKSB8fCAoKG5JbnRzTmVlZGVkICsgdGhpcy5TSFJJTktfVEhSRVNIT0xEKSA8IHRoaXMuX2RhdGEubGVuZ3RoKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3RGF0YSA9IG5ldyBVaW50MzJBcnJheShuSW50c05lZWRlZCk7XG4gICAgICAgICAgICB0aGlzLmNvcHkodGhpcy5fZGF0YSwgbmV3RGF0YSwgKG5JbnRzTmVlZGVkID4gdGhpcy5fZGF0YS5sZW5ndGgpID8gdGhpcy5fZGF0YS5sZW5ndGggOiBuSW50c05lZWRlZCk7XG4gICAgICAgICAgICB0aGlzLl9kYXRhID0gbmV3RGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPiB0aGlzLl9sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9sZW5ndGggJSAweDIwID4gMClcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhW3RoaXMubGVuZ3RoSW5JbnRzIC0gMV0gJj0gKDEgPDwgKCh0aGlzLl9sZW5ndGggJSAweDIwKSAmIDB4MWYpKSAtIDE7XG4gICAgICAgICAgICB0aGlzLl9kYXRhLmZpbGwoMCwgdGhpcy5sZW5ndGhJbkludHMsIG5JbnRzTmVlZGVkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9sZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdmVyc2lvbisrO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbUFuZChzZXQxLCBzZXQyKSB7XG4gICAgICAgIGlmIChzZXQxLl9sZW5ndGggIT0gc2V0Mi5fbGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMZW5ndGhzIGRpZmZlciAoJHtzZXQxLl9sZW5ndGh9ICE9ICR7c2V0Mi5fbGVuZ3RofSlgKTtcbiAgICAgICAgY29uc3QgdGVtcCA9IG5ldyBCaXRBcnJheShzZXQxLl9sZW5ndGgpO1xuICAgICAgICB0ZW1wLl9sZW5ndGggPSBzZXQxLl9sZW5ndGg7XG4gICAgICAgIHRlbXAuX2RhdGEgPSBCaXRBcnJheS5fY3JlYXRlQnVmZmVyKHRlbXAuX2xlbmd0aCk7XG4gICAgICAgIHRlbXAuX3ZlcnNpb24gPSAwO1xuICAgICAgICBjb25zdCBsZW4gPSBzZXQxLmxlbmd0aEluSW50cztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICAgICAgICAgIHRlbXAuX2RhdGFbaV0gPSBzZXQxLl9kYXRhW2ldICYgc2V0Mi5fZGF0YVtpXTtcbiAgICAgICAgcmV0dXJuIHRlbXA7XG4gICAgfVxuICAgIHN0YXRpYyBfY3JlYXRlQnVmZmVyKGxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQzMkFycmF5KE1hdGguZmxvb3IoKGxlbmd0aCArIDB4MWYpIC8gMHgyMCkpO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbVZhbHVlcyh2YWx1ZXMpIHtcbiAgICAgICAgY29uc3QgdGVtcCA9IG5ldyBCaXRBcnJheSh2YWx1ZXMubGVuZ3RoKTtcbiAgICAgICAgdGVtcC5fdmVyc2lvbiA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGVtcC5fbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZXNbaV0pXG4gICAgICAgICAgICAgICAgdGVtcC5fZGF0YVtNYXRoLmZsb29yKGkgLyAweDIwKV0gfD0gMSA8PCAoKGkgJSAweDIwKSAmIDB4MWYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZW1wO1xuICAgIH1cbiAgICAvLy8gQ29uc3RydWN0cyBhIFtCaXRTZXRdIG9mIGxlbmd0aCBbY291bnRdLCB3aGVyZSBpZHgtdGggYml0IGlzIGRldGVybWluZWQgYnkgYSBjYWxsIHRvIFtmbGFnXSAoaWR4KS5cbiAgICBzdGF0aWMgZnJvbVNlcShjb3VudCwgZmxhZykge1xuICAgICAgICBjb25zdCB0ZW1wID0gbmV3IEJpdEFycmF5KGNvdW50KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgKytpKVxuICAgICAgICAgICAgdGVtcC5zZXRCaXQoaSwgZmxhZyhpKSk7XG4gICAgICAgIHRlbXAuX3ZlcnNpb24gPSAwO1xuICAgICAgICByZXR1cm4gdGVtcDtcbiAgICB9XG4gICAgLy8vIENvbnN0cnVjdHMgYSBbQml0U2V0XSBmcm9tIGEgc3RyaW5nIFtzXSBjb250YWluaW5nICcwJyBvciAnMScuXG4gICAgc3RhdGljIGZyb21TdHJpbmcocykge1xuICAgICAgICByZXR1cm4gQml0QXJyYXkuZnJvbVNlcShzLmxlbmd0aCwgKGkpID0+IHMuY2hhckF0KGkpID09ICcxJyk7XG4gICAgfVxuICAgIC8vLyBDb25zdHJ1Y3RzIGEgW0JpdFNldF0sIGJhc2VkIG9uIGxlbmd0aCBbX2xlbmd0aF0gYW5kIGJ5dGUgYXJyYXkgW19kYXRhXS5cbiAgICBzdGF0aWMgZnJvbVVpbnQzMkFycmF5KF9sZW5ndGgsIF9kYXRhKSB7XG4gICAgICAgIGNvbnN0IHRlbXAgPSBuZXcgQml0QXJyYXkoX2xlbmd0aCk7XG4gICAgICAgIHRlbXAuX2RhdGEgPSBfZGF0YTtcbiAgICAgICAgcmV0dXJuIHRlbXA7XG4gICAgfVxuICAgIC8vLyBEZXNlcmlhbGl6ZXMgYSBbQml0U2V0XSBmcm9tIFtieXRlc10uXG4gICAgc3RhdGljIGZyb21CeXRlcyhieXRlcykge1xuICAgICAgICBjb25zdCBsZW4gPSBieXRlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHRlbXAgPSBuZXcgQml0QXJyYXkobGVuICogOCk7XG4gICAgICAgIHRlbXAuX2RhdGEgPSBuZXcgVWludDMyQXJyYXkoTWF0aC5mbG9vcigobGVuICsgMykgLyA0KSk7XG4gICAgICAgIHRlbXAuX2xlbmd0aCA9IGxlbiAqIDg7XG4gICAgICAgIGxldCBudW0xID0gMDtcbiAgICAgICAgbGV0IG51bTIgPSAwO1xuICAgICAgICB3aGlsZSAoKGxlbiAtIG51bTIpID49IDQpIHtcbiAgICAgICAgICAgIHRlbXAuX2RhdGFbbnVtMSsrXSA9ICgoKGJ5dGVzW251bTJdICYgMHhmZikgfFxuICAgICAgICAgICAgICAgICgoYnl0ZXNbbnVtMiArIDFdICYgMHhmZikgPDwgOCkpIHxcbiAgICAgICAgICAgICAgICAoKGJ5dGVzW251bTIgKyAyXSAmIDB4ZmYpIDw8IDB4MTApKSB8XG4gICAgICAgICAgICAgICAgKChieXRlc1tudW0yICsgM10gJiAweGZmKSA8PCAweDE4KTtcbiAgICAgICAgICAgIG51bTIgKz0gNDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVuIC0gbnVtMiA9PSAzKVxuICAgICAgICAgICAgdGVtcC5fZGF0YVtudW0xXSA9IChieXRlc1tudW0yICsgMl0gJiAweGZmKSA8PCAweDEwO1xuICAgICAgICBpZiAobGVuIC0gbnVtMiA9PSAyKVxuICAgICAgICAgICAgdGVtcC5fZGF0YVtudW0xXSB8PSAoYnl0ZXNbbnVtMiArIDFdICYgMHhmZikgPDwgODtcbiAgICAgICAgaWYgKGxlbiAtIG51bTIgPT0gMSlcbiAgICAgICAgICAgIHRlbXAuX2RhdGFbbnVtMV0gfD0gYnl0ZXNbbnVtMl0gJiAweGZmO1xuICAgICAgICB0ZW1wLl92ZXJzaW9uID0gMDtcbiAgICAgICAgcmV0dXJuIHRlbXA7XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5fbGVuZ3RofSBiaXRzLCAke3RoaXMuY291bnRCaXRzKHRydWUpfSBzZXRgO1xuICAgIH1cbiAgICAvLy8gUGVyZm9ybXMgZGVlcCBjb21wYXJpc29uIG9mIHR3byBiaXRzZXRzLlxuICAgIGVxdWFscyhvdGhlcikge1xuICAgICAgICBpZiAodGhpcyA9PSBvdGhlcilcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAob3RoZXIgPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuX2xlbmd0aCAhPSBvdGhlci5fbGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5fbGVuZ3RoID09IDApXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9kYXRhLmxlbmd0aCAtIDE7IGkrKylcbiAgICAgICAgICAgIGlmICh0aGlzLl9kYXRhW2ldICE9IG90aGVyLl9kYXRhW2ldKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9ICh0aGlzLl9kYXRhLmxlbmd0aCAtIDEpICogODsgaSA8IHRoaXMuX2xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRCaXQoaSkgIT0gb3RoZXIuZ2V0Qml0KGkpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLyoqIENsb25lcyBhIGJpdHNldC4gKi9cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgY29uc3QgYml0QXJyYXkgPSBuZXcgQml0QXJyYXkoMCwgZmFsc2UpO1xuICAgICAgICBiaXRBcnJheS5fZGF0YSA9IFVpbnQzMkFycmF5LmZyb20odGhpcy5fZGF0YSk7IC8vIGVmZmVjdGl2ZSBsZW5ndGg6IChsZW5ndGhJbkludHMpXG4gICAgICAgIGJpdEFycmF5Ll9sZW5ndGggPSB0aGlzLl9sZW5ndGg7XG4gICAgICAgIGJpdEFycmF5Ll92ZXJzaW9uID0gdGhpcy5fdmVyc2lvbjtcbiAgICAgICAgcmV0dXJuIGJpdEFycmF5O1xuICAgIH1cbiAgICAvKiogSW5pdGlhbGl6ZXMgYSBiaXRzZXQuICovXG4gICAgaW5pdChmbGFnLCBub3RpZnkpIHtcbiAgICAgICAgdGhpcy5zZXRBbGwoZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZsYWcoaSkpXG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVtNYXRoLmZsb29yKGkgLyAweDIwKV0gfD0gMSA8PCAoKGkgJSAweDIwKSAmIDB4MWYpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5jcmVtZW50VmVyc2lvbihub3RpZnkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8vIEludmVydHMgYSBiaXRzZXQuXG4gICAgaW52ZXJ0KG5vdGlmeSA9IHRydWUpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgdGhpcy5fZGF0YVtpXSBePSAtMTtcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSk7XG4gICAgfVxuICAgIC8vLyBTZXRzIGFsbCBiaXRzIHRvIFt2YWx1ZV0sIG9wdGlvbmFsbHkgc3VwcHJlc3Npbmcgbm90aWZpY2F0aW9ucy5cbiAgICBzZXRBbGwodmFsdWUsIG5vdGlmeSA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGZsYWdzID0gdmFsdWUgPyAtMSA6IDA7XG4gICAgICAgIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoSW5JbnRzO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhW2ldID0gZmxhZ3M7XG4gICAgICAgIH0gLy90b2RvOiBvcHRpbWl6ZVxuICAgICAgICB0aGlzLmluY3JlbWVudFZlcnNpb24obm90aWZ5KTtcbiAgICB9XG4gICAgLy8vIFNldHMgYml0cyBhdCBbaW5kZXhlc10gcG9zaXRpb24gdG8gW3ZhbHVlXS5cbiAgICAvLy8gQ2xlYXJzIHRoZSBiaXRzZXQgaWYgW2NsZWFyXSBmbGFnIGlzIHRydWUuXG4gICAgLy8vIENoYW5nZSBub3RpZmljYXRpb24gaXMgcmFpc2VkIHdoZW4gW25vdGlmeV0gaXMgdHJ1ZS5cbiAgICBzZXRJbmRleGVzKGluZGV4ZXMsIHZhbHVlID0gdHJ1ZSwgY2xlYXIgPSB0cnVlLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIGlmIChjbGVhcilcbiAgICAgICAgICAgIHRoaXMuc2V0QWxsKCF2YWx1ZSwgZmFsc2UpO1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgaW5kZXhlcylcbiAgICAgICAgICAgIHRoaXMuc2V0RmFzdChpLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuaW5jcmVtZW50VmVyc2lvbihub3RpZnkpO1xuICAgIH1cbiAgICBldmVyeUluZGV4KGluZGV4ZXMsIHZhbHVlID0gdHJ1ZSkge1xuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGluZGV4ZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldEJpdChpbmRleCkgIT0gdmFsdWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBhbnlJbmRleChpbmRleGVzLCB2YWx1ZSA9IHRydWUpIHtcbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBvZiBpbmRleGVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRCaXQoaW5kZXgpID09IHZhbHVlKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc2V0V2hlcmUoY2hlY2ssIHZhbHVlID0gdHJ1ZSwgY2xlYXIgPSB0cnVlLCBub3RpZnkgPSB0cnVlLCBhbGxvd0NsZWFyID0gdHJ1ZSkge1xuICAgICAgICBpZiAoY2xlYXIgJiYgYWxsb3dDbGVhcilcbiAgICAgICAgICAgIHRoaXMuc2V0QWxsKCF2YWx1ZSwgZmFsc2UpO1xuICAgICAgICBpZiAoYWxsb3dDbGVhcikge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChjaGVjayhpKSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRGYXN0KGksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fbGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGYXN0KGksIGNoZWNrKGkpID8gdmFsdWUgOiAhdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5jcmVtZW50VmVyc2lvbihub3RpZnkpO1xuICAgIH1cbiAgICBzZXRSYW5nZShmcm9tLCB0bywgdmFsdWUsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5hc3N1cmVJblJhbmdlKGZyb20sIDAsIHRoaXMuX2xlbmd0aCAtIDEsICdmcm9tJyk7XG4gICAgICAgIHRoaXMuYXNzdXJlSW5SYW5nZSh0bywgMCwgdGhpcy5fbGVuZ3RoIC0gMSwgJ3RvJyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5taW4oZnJvbSwgdG8pO1xuICAgICAgICBjb25zdCBlbmQgPSBNYXRoLm1heChmcm9tLCB0byk7XG4gICAgICAgIC8vdG9kbzogb3B0aW1pemVcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUcnVlKGkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RmFsc2UoaSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLy8gU2V0cyBuIHJhbmRvbWx5IGNob3NlbiBiaXRzIHRvIHZhbHVlLCByZW1haW5pbmcgYml0cyB0byAhdmFsdWUuXG4gICAgc2V0UmFuZG9tKG4sIHZhbHVlLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIGlmIChuIDwgMCB8fCBuID4gdGhpcy5fbGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCduIG11c3QgYmUgPj0gMCAmJiA8PSBDb3VudCcpO1xuICAgICAgICBpZiAobiA+IHRoaXMuX2xlbmd0aCAvIDIpXG4gICAgICAgICAgICB0aGlzLnNldFJhbmRvbSh0aGlzLl9sZW5ndGggLSBuLCAhdmFsdWUpO1xuICAgICAgICB0aGlzLnNldEFsbCghdmFsdWUpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IG47KSB7XG4gICAgICAgICAgICBjb25zdCBpID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy5fbGVuZ3RoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldEJpdChpKSA9PSB2YWx1ZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRoaXMuc2V0RmFzdChpLCB2YWx1ZSk7XG4gICAgICAgICAgICBrKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSk7XG4gICAgfVxuICAgIC8vLyBNb2RpZmllcyBjdXJyZW50IGJpdHNldCBieSBwZXJmb3JtaW5nIHRoZSBiaXR3aXNlIEFORCBvcGVyYXRpb24gYWdhaW5zdCB0aGVcbiAgICAvLy8gY29ycmVzcG9uZGluZyBlbGVtZW50cyBpbiB0aGUgc3BlY2lmaWVkIGJpdHNldC5cbiAgICBhbmQodmFsdWUsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xlbmd0aCAhPSB2YWx1ZS5fbGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcnJheSBsZW5ndGhzIGRpZmZlci4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMubGVuZ3RoSW5JbnRzOyBpIDwgbGVuOyBpKyspXG4gICAgICAgICAgICB0aGlzLl9kYXRhW2ldICY9IHZhbHVlLl9kYXRhW2ldO1xuICAgICAgICB0aGlzLmluY3JlbWVudFZlcnNpb24obm90aWZ5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vLyBQZXJmb3JtcyB0aGUgYml0d2lzZSBBTkQgTk9UIG9wZXJhdGlvbiBvbiB0aGUgZWxlbWVudHMgaW4gdGhlIGN1cnJlbnQgYml0c2V0XG4gICAgLy8vIGFnYWluc3QgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgaW4gdGhlIHNwZWNpZmllZCBiaXRzZXQuXG4gICAgYW5kTm90KHZhbHVlLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9sZW5ndGggIT0gdmFsdWUuX2xlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXJyYXkgbGVuZ3RocyBkaWZmZXIuJyk7XG4gICAgICAgIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoSW5JbnRzO1xuICAgICAgICBmb3IgKGxldCBudW0yID0gMDsgbnVtMiA8IGxlbjsgbnVtMisrKVxuICAgICAgICAgICAgdGhpcy5fZGF0YVtudW0yXSAmPSB+dmFsdWUuX2RhdGFbbnVtMl07XG4gICAgICAgIHRoaXMuaW5jcmVtZW50VmVyc2lvbihub3RpZnkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8vIFBlcmZvcm1zIHRoZSBiaXR3aXNlIE5PVCBBTkQgb3BlcmF0aW9uIG9uIHRoZSBlbGVtZW50cyBpbiB0aGUgY3VycmVudCBiaXRzZXRcbiAgICAvLy8gYWdhaW5zdCB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBpbiB0aGUgc3BlY2lmaWVkIGJpdHNldC5cbiAgICBub3RBbmQodmFsdWUsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xlbmd0aCAhPSB2YWx1ZS5fbGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcnJheSBsZW5ndGhzIGRpZmZlci4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMubGVuZ3RoSW5JbnRzOyBpIDwgbGVuOyBpKyspXG4gICAgICAgICAgICB0aGlzLl9kYXRhW2ldID0gKH50aGlzLl9kYXRhW2ldKSAmIHZhbHVlLl9kYXRhW2ldO1xuICAgICAgICB0aGlzLmluY3JlbWVudFZlcnNpb24obm90aWZ5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vLyBJbnZlcnRzIGFsbCBiaXQgdmFsdWVzIGluIHRoZSBjdXJyZW50IGJpdHNldFxuICAgIG5vdChub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmxlbmd0aEluSW50czsgaSA8IGxlbjsgaSsrKVxuICAgICAgICAgICAgdGhpcy5fZGF0YVtpXSA9IH50aGlzLl9kYXRhW2ldO1xuICAgICAgICB0aGlzLmluY3JlbWVudFZlcnNpb24obm90aWZ5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vLyBQZXJmb3JtcyB0aGUgYml0d2lzZSBPUiBvcGVyYXRpb24gb24gdGhlIGVsZW1lbnRzIGluIHRoZSBjdXJyZW50IGJpdHNldFxuICAgIC8vLyBhZ2FpbnN0IHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIGluIHRoZSBzcGVjaWZpZWQgYml0c2V0LlxuICAgIG9yKHZhbHVlLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9sZW5ndGggIT0gdmFsdWUuX2xlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXJyYXkgbGVuZ3RocyBkaWZmZXIuJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmxlbmd0aEluSW50czsgaSA8IGxlbjsgaSsrKVxuICAgICAgICAgICAgdGhpcy5fZGF0YVtpXSB8PSB2YWx1ZS5fZGF0YVtpXTtcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLy8gUGVyZm9ybXMgdGhlIGJpdHdpc2UgZXhjbHVzaXZlIE9SIG9wZXJhdGlvbiBvbiB0aGUgZWxlbWVudHMgaW4gdGhlIGN1cnJlbnQgYml0c2V0XG4gICAgLy8vIGFnYWluc3QgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgaW4gdGhlIHNwZWNpZmllZCBiaXRzZXQuXG4gICAgeG9yKHZhbHVlLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9sZW5ndGggIT0gdmFsdWUuX2xlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXJyYXkgbGVuZ3RocyBkaWZmZXIuJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmxlbmd0aEluSW50czsgaSA8IGxlbjsgaSsrKVxuICAgICAgICAgICAgdGhpcy5fZGF0YVtpXSBePSB2YWx1ZS5fZGF0YVtpXTtcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLy8gSW5zZXJ0cyBuIDAtYml0cyBhdCBwb3NpdGlvbiBwb3MsIHJlc2l6aW5nIHNlbGYgYW5kIHNoaWZ0aW5nIGJpdHMgYXBwcm9wcmlhdGVseS5cbiAgICBpbnNlcnRBdChwb3MsIG4sIGZsYWcgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLmFzc3VyZUluUmFuZ2UocG9zLCAwLCB0aGlzLl9sZW5ndGgsICdwb3MnKTtcbiAgICAgICAgaWYgKG4gPT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLy9UT0RPOiBvcHRpbWl6ZVxuICAgICAgICAvL3RoZSBtb3N0IHByaW1pdGl2ZSBpbXBsZW1lbnRhdGlvbiwgb3B0aW1pemUgaXQgbGF0ZXIhXG4gICAgICAgIC8vIGJlZ2luVXBkYXRlKCk7XG4gICAgICAgIGNvbnN0IG9sZGxlbmd0aCA9IHRoaXMuX2xlbmd0aDtcbiAgICAgICAgdGhpcy5zZXRMZW5ndGgodGhpcy5fbGVuZ3RoICsgbik7XG4gICAgICAgIC8vaWYgKCFjb250YWlucyghZmxhZykpIHJldHVybjsgLy8gbm90aGluZyB0byBkb1xuICAgICAgICBmb3IgKGxldCBpID0gb2xkbGVuZ3RoIC0gMTsgaSA+PSBwb3M7IGktLSlcbiAgICAgICAgICAgIHRoaXMuc2V0Qml0KGkgKyBuLCB0aGlzLmdldEJpdChpKSk7XG4gICAgICAgIGZvciAobGV0IGkgPSBwb3M7IGkgPCBwb3MgKyBuOyBpKyspXG4gICAgICAgICAgICB0aGlzLnNldEJpdChpLCBmbGFnKTtcbiAgICAgICAgLy8gZW5kVXBkYXRlKCk7XG4gICAgfVxuICAgIC8vLyBEZWxldGVzIG4gYml0cyBiZWdpbm5pbmcgYXQgcG9zaXRpb24gcG9zLCByZXNpemluZyBzZWxmIGFuZCBzaGlmdGluZyByZW1haW5pbmdcbiAgICAvLy8gYml0cyBhcHByb3ByaWF0ZWx5LlxuICAgIHJlbW92ZUF0KHBvcywgbiA9IDEpIHtcbiAgICAgICAgLy8gdGhlIG1vc3QgcHJpbWl0aXZlIGltcGxlbWVudGF0aW9uLCBvcHRpbWl6ZSBpdCBsYXRlciFcbiAgICAgICAgaWYgKG4gPCAwKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCduIGNhbm5vdCBiZSBuZWdhdGl2ZScpO1xuICAgICAgICB0aGlzLmFzc3VyZUluUmFuZ2UocG9zLCAwLCB0aGlzLl9sZW5ndGggLSBuLCAncG9zJyk7XG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5zKHRydWUpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gcG9zOyBpIDwgdGhpcy5fbGVuZ3RoIC0gbjsgaSsrKVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Qml0KGksIHRoaXMuZ2V0Qml0KGkgKyBuKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRMZW5ndGgodGhpcy5fbGVuZ3RoIC0gbik7XG4gICAgfVxuICAgIHJlbW92ZUJ5TWFzayhtYXNrLCBmbGFnID0gdHJ1ZSkge1xuICAgICAgICBpZiAodGhpcy5fbGVuZ3RoICE9IG1hc2subGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdsZW5ndGggIT0gbWFzay5sZW5ndGgnKTtcbiAgICAgICAgaWYgKG1hc2sgPT0gdGhpcykgeyAvLyBubyBuZWVkIHRvIGl0ZXJhdGVcbiAgICAgICAgICAgIHRoaXMuc2V0TGVuZ3RoKG1hc2suY291bnRCaXRzKCFmbGFnKSk7XG4gICAgICAgICAgICB0aGlzLnNldEFsbCghZmxhZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgZHN0SWR4ID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IHNyY0lkeCA9IC0xOyAoc3JjSWR4ID0gbWFzay5maW5kTmV4dChzcmNJZHgsICFmbGFnKSkgIT0gLTE7KVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RmFzdChkc3RJZHgrKywgdGhpcy5nZXRCaXQoc3JjSWR4KSk7XG4gICAgICAgICAgICB0aGlzLl9sZW5ndGggPSBkc3RJZHg7XG4gICAgICAgICAgICB0aGlzLl92ZXJzaW9uKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vLyBTaW1pbGFyIHRvIHRoZSBbXSBvcGVyYXRvci5cbiAgICBnZXRCaXQocG9zKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5fZGF0YVtNYXRoLmZsb29yKHBvcyAvIDB4MjApXSAmICgxIDw8IChwb3MgJiAweDFmKSkpICE9IDA7XG4gICAgfVxuICAgIC8vLyBTaW1pbGFyIHRvIHRoZSBbXSBvcGVyYXRvci5cbiAgICBzZXRCaXQocG9zLCBiaXQsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5zZXRGYXN0KHBvcywgYml0KTtcbiAgICAgICAgaWYgKG5vdGlmeSlcbiAgICAgICAgICAgIHRoaXMuX3ZlcnNpb24rKztcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5fdmVyc2lvbisrO1xuICAgIH1cbiAgICAvLy8gU2V0cyBbaV0tdGggYml0IHRvIFt2YWx1ZV0sIGRvZXMgbm90IGNoZWNrIGJvdW5kcywgZG9lcyBub3QgaW5jcmVtZW50IHZlcnNpb25cbiAgICBzZXRGYXN0KGksIHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHRoaXMuX2RhdGFbTWF0aC5mbG9vcihpIC8gMHgyMCldIHw9IDEgPDwgKGkgJiAweDFmKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5fZGF0YVtNYXRoLmZsb29yKGkgLyAweDIwKV0gJj0gfigxIDw8IChpICYgMHgxZikpO1xuICAgIH1cbiAgICBzZXRUcnVlKHBvcykge1xuICAgICAgICB0aGlzLl9kYXRhW01hdGguZmxvb3IocG9zIC8gMHgyMCldIHw9IDEgPDwgKHBvcyAmIDB4MWYpO1xuICAgIH1cbiAgICBzZXRGYWxzZShwb3MpIHtcbiAgICAgICAgdGhpcy5fZGF0YVtNYXRoLmZsb29yKHBvcyAvIDB4MjApXSAmPSB+KDEgPDwgKHBvcyAmIDB4MWYpKTtcbiAgICB9XG4gICAgdHJ1ZUNvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb3VudEJpdHModHJ1ZSk7XG4gICAgfVxuICAgIGZhbHNlQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvdW50Qml0cyhmYWxzZSk7XG4gICAgfVxuICAgIC8vLyBDb3VudHMgYml0cyBvZiB0aGUgc3BlY2lmaWVkIHZhbHVlLlxuICAgIGNvdW50Qml0cyh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5fbGVuZ3RoID09IDApXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkQ291bnRWZXJzaW9uICE9IHRoaXMuX3ZlcnNpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkQ291bnQgPSAwO1xuICAgICAgICAgICAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGhJbkludHM7XG4gICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICBmb3IgKDsgaSA8IGxlbiAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGsgPSB0aGlzLl9kYXRhW2ldOyBrICE9IDA7IGsgPj4+PSA4KSB7IC8vdG9kbzogY2FzdCBkYXRhW2ldIHRvIHVpbnRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb3VudCArPSBCaXRBcnJheS5fb25CaXRDb3VudFtrICYgMHhmZl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVGhlIGxhc3QgaW50LlxuICAgICAgICAgICAgbGV0IGsgPSB0aGlzLl9kYXRhW2ldO1xuICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nQml0cyA9IHRoaXMuX2xlbmd0aCAmIDB4MWY7XG4gICAgICAgICAgICBpZiAocmVtYWluaW5nQml0cyAhPSAwKSB7IC8vIGlmIHJlbWFpbmluZ0JpdHMgPT0gMCwgdGhlIGxhc3QgaW50IGlzIGZ1bGx5IHVzZWQgYW5kIEFMTCBiaXRzIHNob3VsZCBiZSBsZWZ0IGFzIGlzLlxuICAgICAgICAgICAgICAgIGsgJj0gfigoNDI5NDk2NzI5NSkgPDwgcmVtYWluaW5nQml0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKDsgayAhPSAwOyBrID4+Pj0gOClcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZENvdW50ICs9IEJpdEFycmF5Ll9vbkJpdENvdW50W2sgJiAweGZmXTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkQ291bnRWZXJzaW9uID0gdGhpcy5fdmVyc2lvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHZhbHVlID8gdGhpcy5fc2VsZWN0ZWRDb3VudCA6IHRoaXMuX2xlbmd0aCAtIHRoaXMuX3NlbGVjdGVkQ291bnQpO1xuICAgIH1cbiAgICAvLy8gUmV0dXJucyBhIG51bWJlciBvZiBzZXQgYml0cyB3aGVyZSBhbHNvIFtjaGVja10gaXMgdHJ1ZVxuICAgIGNvdW50V2hlcmUoY2hlY2spIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgICAgIGlmICh0aGlzLnRydWVDb3VudCgpID09IHRoaXMuX2xlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gY2hlY2soaSkgPyAxIDogMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAtMTsgKGkgPSB0aGlzLmZpbmROZXh0KGksIHRydWUpKSAhPSAtMTspXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNoZWNrKGkpID8gMSA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLy8vIFBlcmZvcm1zIGJpdCBcImFuZFwiIGFuZCBjb3VudHMgYml0cyBvZiB0aGUgc3BlY2lmaWVkIHZhbHVlLCB3aXRob3V0IGJpdHNldCBtb2RpZmljYXRpb24uXG4gICAgYW5kV2l0aENvdW50Qml0cyhzZWNvbmQsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9sZW5ndGggPT0gMClcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aEluSW50cztcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBmb3IgKDsgaSA8IGxlbiAtIDE7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgayA9IHRoaXMuX2RhdGFbaV0gJiBzZWNvbmQuX2RhdGFbaV07IGsgIT0gMDsgayA+Pj49IDgpXG4gICAgICAgICAgICAgICAgY291bnQgKz0gQml0QXJyYXkuX29uQml0Q291bnRbayAmIDB4ZmZdO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBsYXN0IGludC5cbiAgICAgICAgbGV0IGsgPSB0aGlzLl9kYXRhW2ldICYgc2Vjb25kLl9kYXRhW2ldO1xuICAgICAgICBjb25zdCByZW1haW5pbmdCaXRzID0gdGhpcy5fbGVuZ3RoICYgMHgxZjtcbiAgICAgICAgaWYgKHJlbWFpbmluZ0JpdHMgIT0gMClcbiAgICAgICAgICAgIGsgJj0gfigoNDI5NDk2NzI5NSkgPDwgcmVtYWluaW5nQml0cyk7XG4gICAgICAgIGZvciAoOyBrICE9IDA7IGsgPj4+PSA4KVxuICAgICAgICAgICAgY291bnQgKz0gQml0QXJyYXkuX29uQml0Q291bnRbayAmIDB4ZmZdO1xuICAgICAgICByZXR1cm4gKHZhbHVlID8gY291bnQgOiB0aGlzLl9sZW5ndGggLSBjb3VudCk7XG4gICAgfVxuICAgIGNsZWFyKCkge1xuICAgICAgICB0aGlzLnNldExlbmd0aCgwKTtcbiAgICB9XG4gICAgY29udGFpbnModmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZE5leHQoLTEsIHZhbHVlKSA+PSAwO1xuICAgIH1cbiAgICBnZXQgYWxsVHJ1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY291bnRCaXRzKHRydWUpID09IHRoaXMuX2xlbmd0aDtcbiAgICB9XG4gICAgZ2V0IGFsbEZhbHNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb3VudEJpdHMoZmFsc2UpID09IHRoaXMuX2xlbmd0aDtcbiAgICB9XG4gICAgZ2V0IGFueVRydWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvdW50Qml0cyh0cnVlKSA+IDA7XG4gICAgfVxuICAgIGdldCBhbnlGYWxzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY291bnRCaXRzKGZhbHNlKSA+IDA7XG4gICAgfVxuICAgIC8vLyBSZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgbmV4dCBiaXQgb2YgdGhlIHNwZWNpZmllZCB2YWx1ZSwgc3RhcnRpbmcgZnJvbSB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLlxuICAgIC8vLyBSZXR1cm5zIC0xLCBpZiB0aGVyZSBhcmUgbm8gc3VjaCBiaXRzLlxuICAgIGZpbmROZXh0KGluZGV4LCB2YWx1ZSA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5hc3N1cmVJblJhbmdlKGluZGV4LCAtMSwgdGhpcy5fbGVuZ3RoLCAnaW5kZXgnKTtcbiAgICAgICAgaWYgKGluZGV4ID49IHRoaXMuX2xlbmd0aCAtIDEpXG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIGluZGV4ID0gaW5kZXggPCAwID8gMCA6IGluZGV4ICsgMTsgLy8gc2tpcCBzdGFydFxuICAgICAgICBsZXQgdW51c2VkQml0cyA9IGluZGV4ICYgMHgxZjtcbiAgICAgICAgY29uc3QgbnVtSW50cyA9IHRoaXMubGVuZ3RoSW5JbnRzO1xuICAgICAgICBmb3IgKGxldCBpID0gTWF0aC5mbG9vcihpbmRleCAvIDMyKTsgaSA8IG51bUludHM7IGkrKykge1xuICAgICAgICAgICAgbGV0IGsgPSAodmFsdWUgPyB0aGlzLl9kYXRhW2ldIDogfnRoaXMuX2RhdGFbaV0pOyAvLyB1aW50IGNhc3RcbiAgICAgICAgICAgIGlmICh1bnVzZWRCaXRzICE9IDApIHtcbiAgICAgICAgICAgICAgICBrICY9ICgoMHhmZmZmZmZmZiA8PCB1bnVzZWRCaXRzKSAmIDB4ZmZmZmZmZmYpO1xuICAgICAgICAgICAgICAgIHVudXNlZEJpdHMgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIXZhbHVlICYmIGsgPT0gLTQyOTQ5NjcyOTYpIC8vIGxvb2tpbmcgZm9yIGZhbHNlLCBhbGwgYml0cyBhcmUgc2V0XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgayAhPSAwOyBqICs9IDgsIGsgPj4+PSA4KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IEJpdEFycmF5Ll9maXJzdE9uQml0W2sgJiAweGZmXTtcbiAgICAgICAgICAgICAgICBpZiAocCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcCArIChpICogMzIpICsgajtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IHRoaXMuX2xlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIC8vLyBGaW5kcyBwcmV2aW91cyBiaXQgb2YgdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGUgYml0c2V0LlxuICAgIGZpbmRQcmV2KGluZGV4LCB2YWx1ZSA9IHRydWUpIHtcbiAgICAgICAgaWYgKGluZGV4ID09IDApXG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIHRoaXMuYXNzdXJlSW5SYW5nZShpbmRleCwgLTEsIHRoaXMuX2xlbmd0aCwgJ2luZGV4Jyk7XG4gICAgICAgIGluZGV4ID0gaW5kZXggPCAwID8gdGhpcy5fbGVuZ3RoIC0gMSA6IGluZGV4IC0gMTsgLy8gc2tpcCBzdGFydFxuICAgICAgICBjb25zdCBsYXN0SW50SWR4ID0gTWF0aC5mbG9vcihpbmRleCAvIDB4MjApO1xuICAgICAgICBsZXQgcmVtYWluaW5nQml0cyA9IChpbmRleCArIDEpICYgMHgxZjtcbiAgICAgICAgZm9yIChsZXQgaSA9IGxhc3RJbnRJZHg7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBsZXQgayA9ICh2YWx1ZSA/IHRoaXMuX2RhdGFbaV0gOiB+dGhpcy5fZGF0YVtpXSk7IC8vIGNhc3RcbiAgICAgICAgICAgIGlmIChyZW1haW5pbmdCaXRzICE9IDApIHtcbiAgICAgICAgICAgICAgICBrICY9IH4oKDQyOTQ5NjcyOTUpIDw8IHJlbWFpbmluZ0JpdHMpO1xuICAgICAgICAgICAgICAgIHJlbWFpbmluZ0JpdHMgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDI0OyBrICE9IDA7IGogLT0gOCwgayA8PD0gOCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBCaXRBcnJheS5fbGFzdE9uQml0W2sgPj4+IDB4MThdO1xuICAgICAgICAgICAgICAgIGlmIChwID49IDApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwICsgKGkgKiAzMikgKyBqO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG59XG5CaXRBcnJheS5fb25CaXRDb3VudCA9IEludDhBcnJheS5mcm9tKFtcbiAgICAwLCAxLCAxLCAyLCAxLCAyLCAyLCAzLCAxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LFxuICAgIDEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsXG4gICAgMSwgMiwgMiwgMywgMiwgMywgMywgNCwgMiwgMywgMywgNCwgMywgNCwgNCwgNSxcbiAgICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LFxuICAgIDEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsXG4gICAgMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMywgNCwgNCwgNSwgNCwgNSwgNSwgNixcbiAgICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LFxuICAgIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsIDQsIDUsIDUsIDYsIDUsIDYsIDYsIDcsXG4gICAgMSwgMiwgMiwgMywgMiwgMywgMywgNCwgMiwgMywgMywgNCwgMywgNCwgNCwgNSxcbiAgICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LFxuICAgIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsXG4gICAgMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwgNCwgNSwgNSwgNiwgNSwgNiwgNiwgNyxcbiAgICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LFxuICAgIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsIDQsIDUsIDUsIDYsIDUsIDYsIDYsIDcsXG4gICAgMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwgNCwgNSwgNSwgNiwgNSwgNiwgNiwgNyxcbiAgICA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LCA1LCA2LCA2LCA3LCA2LCA3LCA3LCA4XG5dKTtcbkJpdEFycmF5Ll9maXJzdE9uQml0ID0gSW50OEFycmF5LmZyb20oW1xuICAgIC0xLCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDQsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNSwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA0LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDYsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNCwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA1LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDQsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNywgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA0LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDUsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNCwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA2LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDQsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNSwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA0LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwXG5dKTtcbkJpdEFycmF5Ll9sYXN0T25CaXQgPSBJbnQ4QXJyYXkuZnJvbShbXG4gICAgLTEsIDAsIDEsIDEsIDIsIDIsIDIsIDIsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsXG4gICAgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCxcbiAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LFxuICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsXG4gICAgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNixcbiAgICA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LFxuICAgIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsXG4gICAgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNixcbiAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LFxuICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsXG4gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNyxcbiAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LFxuICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsXG4gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNyxcbiAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LFxuICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDdcbl0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWW1sMExXRnljbUY1TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lZbWwwTFdGeWNtRjVMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFMUJRVTBzUTBGQlF5eFBRVUZQTEU5QlFVOHNVVUZCVVR0SlFXOUZNMElzV1VGQldTeEhRVUY1UWl4RlFVRkZMR1ZCUVdsRExFdEJRVXM3VVVGYWNrVXNXVUZCVHl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOYUxHRkJRVkVzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEWWl4cFFrRkJXU3hIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU5xUWl4dFFrRkJZeXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU51UWl3d1FrRkJjVUlzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTXpRaXcwUWtGQmRVSXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVNM1FpeHRRa0ZCWXl4SFFVRkhMRVZCUVVVc1EwRkJRenRSUVVOd1Fpd3dRa0ZCY1VJc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU51UXl4eFFrRkJaMElzUjBGQlJ5eExRVUZMTEVOQlFVTTdVVUZMZGtJc1NVRkJTU3hQUVVGUExFZEJRVWNzUzBGQlN5eFJRVUZSTEVWQlFVVTdXVUZETTBJc1RVRkJUU3hOUVVGTkxFZEJRVWNzUjBGQlJ5eERRVUZETzFsQlEyNUNMRTFCUVUwc1NVRkJTU3hIUVVGSExGRkJRVkVzUTBGQlF5eGhRVUZoTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkROVU1zU1VGQlNTeFpRVUZaTzJkQ1FVTmtMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJUdHZRa0ZEYkVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTJwQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRPMWxCUTJ4Q0xFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NUVUZCVFN4RFFVRkRPMU5CUTNaQ08yRkJRVTBzU1VGQlNTeEhRVUZITEZsQlFWa3NWMEZCVnl4RlFVRkZPMWxCUTNKRExFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NSMEZCYTBJc1EwRkJRenRaUVVOb1F5eEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRmxCUVhOQ0xFTkJRVU03VTBGRGRrTTdPMWxCUTBNc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eHhRa0ZCY1VJc1EwRkJReXhEUVVGRE8wbEJRek5ETEVOQlFVTTdTVUZIUkN4VlFVRlZMRXRCUVVrc1QwRkJUeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVRXNRMEZCUXp0SlFVVnFReXhWUVVGVkxFTkJRVU1zUjBGQlZ5eEZRVUZGTEU5QlFXVTdVVUZEY2tNc1NVRkJTU3hIUVVGSExFZEJRVWNzUTBGQlF6dFpRVUZGTEUxQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc1IwRkJSeXhQUVVGUExEaENRVUU0UWl4RFFVRkRMRU5CUVVNN1NVRkRla1VzUTBGQlF6dEpRVVZFTEdGQlFXRXNRMEZCUXl4TFFVRmhMRVZCUVVVc1IwRkJWeXhGUVVGRkxFZEJRVmNzUlVGQlJTeFBRVUZsTzFGQlEzQkZMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1IwRkJSeXhEUVVGRExFVkJRVVU3V1VGRGJFTXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXhaUVVGWkxFOUJRVThzUzBGQlN5eExRVUZMTEcxQ1FVRnRRaXhIUVVGSExFdEJRVXNzUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXp0VFFVTnFSanRKUVVOSUxFTkJRVU03U1VGRlJDeEpRVUZKTEVOQlFVTXNSMEZCWjBJc1JVRkJSU3hIUVVGblFpeEZRVUZGTEV0QlFXRTdVVUZEY0VRc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRXRCUVVzc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU01UWl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUTJwQ08wbEJRMGdzUTBGQlF6dEpRVVZFTEZGQlFWRXNRMEZCUXl4TFFVRmxPMUZCUTNSQ0xFbEJRVWtzU1VGQlNTeERRVUZETEU5QlFVOHNTVUZCU1N4TFFVRkxMRU5CUVVNc1QwRkJUeXhGUVVGRk8xbEJRMnBETEUxQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc2JVSkJRVzFDTEVsQlFVa3NRMEZCUXl4UFFVRlBMRTlCUVU4c1MwRkJTeXhEUVVGRExFOUJRVThzUjBGQlJ5eERRVUZETEVOQlFVTTdVMEZEZWtVN1VVRkRSQ3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUlVGQlJTeEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1VVRkRkRVFzU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMGxCUTJ4Q0xFTkJRVU03U1VGRlJDeEpRVUZKTEUxQlFVMDdVVUZEVWl4UFFVRlBMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU03U1VGRGRFSXNRMEZCUXp0SlFVVkVMRWxCUVVrc1RVRkJUVHRSUVVOU0xFOUJRVThzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXp0SlFVTndRaXhEUVVGRE8wbEJSVVFzU1VGQlNTeE5RVUZOTEVOQlFVTXNTVUZCYVVJN1VVRkRNVUlzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNN1VVRkRiRUlzU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMGxCUTJ4Q0xFTkJRVU03U1VGRlJDeEpRVUZKTEU5QlFVODdVVUZEVkN4UFFVRlBMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU03U1VGRGRrSXNRMEZCUXp0SlFVVkVMRWxCUVVrc1QwRkJUeXhEUVVGRExFdEJRV0U3VVVGRGRrSXNTVUZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhMUVVGTExFTkJRVU03U1VGRGVFSXNRMEZCUXp0SlFVVkVMR2RDUVVGblFpeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpPMUZCUXpWQ0xFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXp0SlFVTnNRaXhEUVVGRE8wbEJSVVFzU1VGQlNTeFpRVUZaTzFGQlEyUXNUMEZCVHl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVU5zUkN4RFFVRkRPMGxCUlVRc1NVRkJTU3hoUVVGaE8xRkJRMllzVDBGQlR5eEpRVUZKTEVOQlFVTXNVVUZCVVN4SlFVRkpMRWxCUVVrc1EwRkJReXh4UWtGQmNVSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExHTkJRV01zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUTJoR0xFTkJRVU03U1VGRlJDeEpRVUZKTEdGQlFXRXNRMEZCUXl4SlFVRlpPMUZCUXpWQ0xFbEJRVWtzUTBGQlF5eGpRVUZqTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUXpOQ0xFbEJRVWtzUTBGQlF5eHhRa0ZCY1VJc1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETzBsQlF6ZERMRU5CUVVNN1NVRkZSQ3hKUVVGSkxFbEJRVWs3VVVGRFRpeFBRVUZQTEVsQlFVa3NRMEZCUXp0SlFVTmtMRU5CUVVNN1NVRkZSQ3hUUVVGVExFTkJRVU1zUzBGQllUdFJRVU55UWl4SlFVRkpMRXRCUVVzc1IwRkJSeXhEUVVGRE8xbEJRMWdzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eERRVUZETzFGQlJYQkRMRWxCUVVrc1MwRkJTeXhKUVVGSkxFbEJRVWtzUTBGQlF5eFBRVUZQTzFsQlFVVXNUMEZCVHp0UlFVTnNReXhOUVVGTkxGZEJRVmNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUTNSRUxFbEJRVWtzUTBGQlF5eFhRVUZYTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNWMEZCVnl4SFFVRkhMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVTdXVUZEY0Vjc1RVRkJUU3hQUVVGUExFZEJRVWNzU1VGQlNTeFhRVUZYTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1dVRkROME1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhGUVVGRkxFOUJRVThzUlVGQlJTeERRVUZETEZkQlFWY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1dVRkRjRWNzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4UFFVRlBMRU5CUVVNN1UwRkRkRUk3VVVGRlJDeEpRVUZKTEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRk8xbEJRM2hDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhKUVVGSkxFZEJRVWNzUTBGQlF6dG5Ra0ZEZWtJc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJSV3BHTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNXVUZCV1N4RlFVRkZMRmRCUVZjc1EwRkJReXhEUVVGRE8xTkJRM0JFTzFGQlEwUXNTVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhMUVVGTExFTkJRVU03VVVGRGNrSXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8wbEJRMnhDTEVOQlFVTTdTVUZGUkN4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRV01zUlVGQlJTeEpRVUZqTzFGQlF6TkRMRWxCUVVrc1NVRkJTU3hEUVVGRExFOUJRVThzU1VGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHp0WlFVTTVRaXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEcxQ1FVRnRRaXhKUVVGSkxFTkJRVU1zVDBGQlR5eFBRVUZQTEVsQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJSWHBGTEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTjRReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNN1VVRkROVUlzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4UlFVRlJMRU5CUVVNc1lVRkJZU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTnNSQ3hKUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVVnNRaXhOUVVGTkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRPMUZCUXpsQ0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhIUVVGSExFVkJRVVVzUTBGQlF5eEZRVUZGTzFsQlF6RkNMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSV2hFTEU5QlFVOHNTVUZCU1N4RFFVRkRPMGxCUTJRc1EwRkJRenRKUVVWUExFMUJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNUVUZCWXp0UlFVTjZReXhQUVVGUExFbEJRVWtzVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVNM1JDeERRVUZETzBsQlJVUXNUVUZCVFN4RFFVRkRMRlZCUVZVc1EwRkJReXhOUVVGelFqdFJRVU4wUXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxGRkJRVkVzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkRla01zU1VGQlNTeERRVUZETEZGQlFWRXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkZiRUlzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRja01zU1VGQlNTeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVOWUxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRUUVVOb1JUdFJRVU5FTEU5QlFVOHNTVUZCU1N4RFFVRkRPMGxCUTJRc1EwRkJRenRKUVVWRUxITkhRVUZ6Unp0SlFVTjBSeXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFXRXNSVUZCUlN4SlFVRmpPMUZCUXpGRExFMUJRVTBzU1VGQlNTeEhRVUZITEVsQlFVa3NVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJRMnBETEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eExRVUZMTEVWQlFVVXNSVUZCUlN4RFFVRkRPMWxCUXpWQ0xFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJURkNMRWxCUVVrc1EwRkJReXhSUVVGUkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEyeENMRTlCUVU4c1NVRkJTU3hEUVVGRE8wbEJRMlFzUTBGQlF6dEpRVVZFTEd0RlFVRnJSVHRKUVVOc1JTeE5RVUZOTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVZNN1VVRkRla0lzVDBGQlR5eFJRVUZSTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eERRVUZUTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRka1VzUTBGQlF6dEpRVVZFTERSRlFVRTBSVHRKUVVNMVJTeE5RVUZOTEVOQlFVTXNaVUZCWlN4RFFVRkRMRTlCUVdVc1JVRkJSU3hMUVVGclFqdFJRVU40UkN4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxGRkJRVkVzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTnVReXhKUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEV0QlFVc3NRMEZCUXp0UlFVTnVRaXhQUVVGUExFbEJRVWtzUTBGQlF6dEpRVU5rTEVOQlFVTTdTVUZGUkN4NVEwRkJlVU03U1VGRGVrTXNUVUZCVFN4RFFVRkRMRk5CUVZNc1EwRkJReXhMUVVGcFFqdFJRVU5vUXl4TlFVRk5MRWRCUVVjc1IwRkJSeXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETzFGQlEzcENMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzVVVGQlVTeERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOdVF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTjRSQ3hKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRka0lzU1VGQlNTeEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUVVNc1NVRkJTU3hKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlJUTkNMRTlCUVU4c1EwRkJReXhIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZPMWxCUTNoQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVOdVFpeERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF6dG5Ra0ZEY2tJc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUTJoRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4RFFVRkRPMmRDUVVOdVF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1EwRkJRenRaUVVWeVF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4RFFVRkRPMU5CUTFnN1VVRkZSQ3hKUVVGSkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVsQlFVa3NRMEZCUXp0WlFVTnFRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hKUVVGSkxFTkJRVU03VVVGRmRFUXNTVUZCU1N4SFFVRkhMRWRCUVVjc1NVRkJTU3hKUVVGSkxFTkJRVU03V1VGRGFrSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUlhCRUxFbEJRVWtzUjBGQlJ5eEhRVUZITEVsQlFVa3NTVUZCU1N4RFFVRkRPMWxCUTJwQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVVjZReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTnNRaXhQUVVGUExFbEJRVWtzUTBGQlF6dEpRVU5rTEVOQlFVTTdTVUZGUkN4UlFVRlJPMUZCUTA0c1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEZWQlFWVXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzBsQlF6ZEVMRU5CUVVNN1NVRkZSQ3cwUTBGQk5FTTdTVUZETlVNc1RVRkJUU3hEUVVGRExFdEJRV1U3VVVGRGNFSXNTVUZCU1N4SlFVRkpMRWxCUVVrc1MwRkJTenRaUVVGRkxFOUJRVThzU1VGQlNTeERRVUZETzFGQlF5OUNMRWxCUVVrc1MwRkJTeXhKUVVGSkxFbEJRVWs3V1VGQlJTeFBRVUZQTEV0QlFVc3NRMEZCUXp0UlFVTm9ReXhKUVVGSkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVsQlFVa3NTMEZCU3l4RFFVRkRMRTlCUVU4N1dVRkJSU3hQUVVGUExFdEJRVXNzUTBGQlF6dFJRVU5vUkN4SlFVRkpMRWxCUVVrc1EwRkJReXhQUVVGUExFbEJRVWtzUTBGQlF6dFpRVUZGTEU5QlFVOHNTVUZCU1N4RFFVRkRPMUZCUlc1RExFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRk8xbEJRelZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGQlJTeFBRVUZQTEV0QlFVc3NRMEZCUXp0UlFVVndSQ3hMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMWxCUXk5RUxFbEJRVWtzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRia01zVDBGQlR5eExRVUZMTEVOQlFVTTdVMEZEYUVJN1VVRkRSQ3hQUVVGUExFbEJRVWtzUTBGQlF6dEpRVU5rTEVOQlFVTTdTVUZGUkN4MVFrRkJkVUk3U1VGRGRrSXNTMEZCU3p0UlFVTklMRTFCUVUwc1VVRkJVU3hIUVVGSExFbEJRVWtzVVVGQlVTeERRVUZETEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVONFF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4SFFVRkhMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc2JVTkJRVzFETzFGQlEyeEdMRkZCUVZFc1EwRkJReXhQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXp0UlFVTm9ReXhSUVVGUkxFTkJRVU1zVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNN1VVRkRiRU1zVDBGQlR5eFJRVUZSTEVOQlFVTTdTVUZEYkVJc1EwRkJRenRKUVVWRUxEUkNRVUUwUWp0SlFVTTFRaXhKUVVGSkxFTkJRVU1zU1VGQll5eEZRVUZGTEUxQlFXVTdVVUZEYkVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkZNVUlzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRja01zU1VGQlNTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVOVUxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRUUVVOb1JUdFJRVVZFTEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVTTVRaXhQUVVGUExFbEJRVWtzUTBGQlF6dEpRVU5rTEVOQlFVTTdTVUZGUkN4eFFrRkJjVUk3U1VGRGNrSXNUVUZCVFN4RFFVRkRMRTFCUVUwc1IwRkJSeXhKUVVGSk8xRkJRMnhDTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVU3V1VGRGVFTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVVjBRaXhKUVVGSkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRGFFTXNRMEZCUXp0SlFVVkVMRzFGUVVGdFJUdEpRVU51UlN4TlFVRk5MRU5CUVVNc1MwRkJZeXhGUVVGRkxFMUJRVTBzUjBGQlJ5eExRVUZMTzFGQlEyNURMRTFCUVUwc1MwRkJTeXhIUVVGSExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU0zUWl4TlFVRk5MRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETzFGQlJUbENMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3V1VGRE5VSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTTdVMEZEZGtJc1EwRkJReXhuUWtGQlowSTdVVUZGYkVJc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJRMmhETEVOQlFVTTdTVUZGUkN3clEwRkJLME03U1VGREwwTXNPRU5CUVRoRE8wbEJRemxETEhkRVFVRjNSRHRKUVVONFJDeFZRVUZWTEVOQlFVTXNUMEZCYzBJc1JVRkJSU3hMUVVGTExFZEJRVU1zU1VGQlNTeEZRVUZGTEV0QlFVc3NSMEZCUXl4SlFVRkpMRVZCUVVVc1RVRkJUU3hIUVVGRExFbEJRVWs3VVVGRGNFVXNTVUZCU1N4TFFVRkxPMWxCUTFBc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEV0QlFVc3NSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVVM1FpeExRVUZMTEUxQlFVMHNRMEZCUXl4SlFVRkpMRTlCUVU4N1dVRkRja0lzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRmVrSXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMGxCUTJoRExFTkJRVU03U1VGRlJDeFZRVUZWTEVOQlFVTXNUMEZCYzBJc1JVRkJSU3hMUVVGTExFZEJRVU1zU1VGQlNUdFJRVU16UXl4TFFVRkxMRTFCUVUwc1MwRkJTeXhKUVVGSkxFOUJRVThzUlVGQlJUdFpRVU16UWl4SlFVRkpMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NTMEZCU3p0blFrRkROMElzVDBGQlR5eExRVUZMTEVOQlFVTTdVMEZEYUVJN1VVRkRSQ3hQUVVGUExFbEJRVWtzUTBGQlF6dEpRVU5rTEVOQlFVTTdTVUZGUkN4UlFVRlJMRU5CUVVNc1QwRkJjMElzUlVGQlJTeExRVUZMTEVkQlFVTXNTVUZCU1R0UlFVTjZReXhMUVVGTExFMUJRVTBzUzBGQlN5eEpRVUZKTEU5QlFVOHNSVUZCUlR0WlFVTXpRaXhKUVVGSkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1MwRkJTenRuUWtGRE4wSXNUMEZCVHl4SlFVRkpMRU5CUVVNN1UwRkRaanRSUVVORUxFOUJRVThzUzBGQlN5eERRVUZETzBsQlEyWXNRMEZCUXp0SlFVVkVMRkZCUVZFc1EwRkJReXhMUVVGbExFVkJRVVVzUzBGQlN5eEhRVUZETEVsQlFVa3NSVUZCUlN4TFFVRkxMRWRCUVVNc1NVRkJTU3hGUVVGRkxFMUJRVTBzUjBGQlF5eEpRVUZKTEVWQlFVVXNWVUZCVlN4SFFVRkRMRWxCUVVrN1VVRkROVVVzU1VGQlNTeExRVUZMTEVsQlFVa3NWVUZCVlR0WlFVTnlRaXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJSVGRDTEVsQlFVa3NWVUZCVlN4RlFVRkZPMWxCUTJRc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdaMEpCUTNKRExFbEJRVWtzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXp0dlFrRkRWaXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRoUVVNeFFqdFRRVU5HTzJGQlFVMDdXVUZEVEN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRExFVkJRVVU3WjBKQlEyNURMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8xTkJRemxETzFGQlJVUXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMGxCUTJoRExFTkJRVU03U1VGRlJDeFJRVUZSTEVOQlFVTXNTVUZCV1N4RlFVRkZMRVZCUVZVc1JVRkJSU3hMUVVGakxFVkJRVVVzVFVGQlRTeEhRVUZETEVsQlFVazdVVUZETlVRc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzUTBGQlF5eEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRPMUZCUTNSRUxFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVWc1JDeE5RVUZOTEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXp0UlFVTnFReXhOUVVGTkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVVV2UWl4blFrRkJaMEk3VVVGRGFFSXNTVUZCU1N4TFFVRkxMRVZCUVVVN1dVRkRWQ3hMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEV0QlFVc3NSVUZCUlN4RFFVRkRMRWxCUVVrc1IwRkJSeXhGUVVGRkxFTkJRVU1zUlVGQlJUdG5Ra0ZETDBJc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTnVRanRoUVVGTk8xbEJRMHdzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4TFFVRkxMRVZCUVVVc1EwRkJReXhKUVVGSkxFZEJRVWNzUlVGQlJTeERRVUZETEVWQlFVVTdaMEpCUXk5Q0xFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRjRUk3VVVGRlJDeEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdVVUZET1VJc1QwRkJUeXhKUVVGSkxFTkJRVU03U1VGRFpDeERRVUZETzBsQlJVUXNiVVZCUVcxRk8wbEJRMjVGTEZOQlFWTXNRMEZCUXl4RFFVRlRMRVZCUVVVc1MwRkJZeXhGUVVGRkxFMUJRVTBzUjBGQlF5eEpRVUZKTzFGQlF6bERMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4N1dVRkRNMElzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl3MFFrRkJORUlzUTBGQlF5eERRVUZETzFGQlJXaEVMRWxCUVVrc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NRMEZCUXp0WlFVTjBRaXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdVVUZGTTBNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMUZCUlhCQ0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWs3V1VGRGRrSXNUVUZCVFN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFsQlEyNUVMRWxCUVVrc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4TFFVRkxPMmRDUVVGRkxGTkJRVk03V1VGRGRFTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdXVUZEZGtJc1EwRkJReXhGUVVGRkxFTkJRVU03VTBGRFREdFJRVVZFTEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0SlFVTm9ReXhEUVVGRE8wbEJSVVFzSzBWQlFTdEZPMGxCUXk5RkxHMUVRVUZ0UkR0SlFVTnVSQ3hIUVVGSExFTkJRVU1zUzBGQlpTeEZRVUZGTEUxQlFVMHNSMEZCUXl4SlFVRkpPMUZCUXpsQ0xFbEJRVWtzU1VGQlNTeERRVUZETEU5QlFVOHNTVUZCU1N4TFFVRkxMRU5CUVVNc1QwRkJUenRaUVVNdlFpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMSFZDUVVGMVFpeERRVUZETEVOQlFVTTdVVUZGTTBNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhaUVVGWkxFVkJRVVVzUTBGQlF5eEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRMRVZCUVVVN1dVRkRia1FzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUld4RExFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVU01UWl4UFFVRlBMRWxCUVVrc1EwRkJRenRKUVVOa0xFTkJRVU03U1VGRlJDeG5Sa0ZCWjBZN1NVRkRhRVlzSzBSQlFTdEVPMGxCUXk5RUxFMUJRVTBzUTBGQlF5eExRVUZsTEVWQlFVVXNUVUZCVFN4SFFVRkRMRWxCUVVrN1VVRkRha01zU1VGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4SlFVRkpMRXRCUVVzc1EwRkJReXhQUVVGUE8xbEJReTlDTEUxQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc2RVSkJRWFZDTEVOQlFVTXNRMEZCUXp0UlFVVXpReXhOUVVGTkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRPMUZCUXpsQ0xFdEJRVXNzU1VGQlNTeEpRVUZKTEVkQlFVY3NRMEZCUXl4RlFVRkZMRWxCUVVrc1IwRkJSeXhIUVVGSExFVkJRVVVzU1VGQlNTeEZRVUZGTzFsQlEyNURMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFGQlJYcERMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVNNVFpeFBRVUZQTEVsQlFVa3NRMEZCUXp0SlFVTmtMRU5CUVVNN1NVRkZSQ3huUmtGQlowWTdTVUZEYUVZc0swUkJRU3RFTzBsQlF5OUVMRTFCUVUwc1EwRkJReXhMUVVGbExFVkJRVVVzVFVGQlRTeEhRVUZETEVsQlFVazdVVUZEYWtNc1NVRkJTU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEpRVUZKTEV0QlFVc3NRMEZCUXl4UFFVRlBPMWxCUXk5Q0xFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNkVUpCUVhWQ0xFTkJRVU1zUTBGQlF6dFJRVVV6UXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlR0WlFVTnVSQ3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVVndSQ3hKUVVGSkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03VVVGRE9VSXNUMEZCVHl4SlFVRkpMRU5CUVVNN1NVRkRaQ3hEUVVGRE8wbEJSVVFzWjBSQlFXZEVPMGxCUTJoRUxFZEJRVWNzUTBGQlF5eE5RVUZOTEVkQlFVY3NTVUZCU1R0UlFVTm1MRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1dVRkJXU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVWQlFVVXNRMEZCUXl4RlFVRkZPMWxCUTI1RUxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUldwRExFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVU01UWl4UFFVRlBMRWxCUVVrc1EwRkJRenRKUVVOa0xFTkJRVU03U1VGRlJDd3lSVUZCTWtVN1NVRkRNMFVzSzBSQlFTdEVPMGxCUXk5RUxFVkJRVVVzUTBGQlF5eExRVUZsTEVWQlFVVXNUVUZCVFN4SFFVRkhMRWxCUVVrN1VVRkRMMElzU1VGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4SlFVRkpMRXRCUVVzc1EwRkJReXhQUVVGUE8xbEJReTlDTEUxQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc2RVSkJRWFZDTEVOQlFVTXNRMEZCUXp0UlFVVXpReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExGbEJRVmtzUlVGQlJTeERRVUZETEVkQlFVY3NSMEZCUnl4RlFVRkZMRU5CUVVNc1JVRkJSVHRaUVVOdVJDeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkZiRU1zU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFGQlF6bENMRTlCUVU4c1NVRkJTU3hEUVVGRE8wbEJRMlFzUTBGQlF6dEpRVVZFTEhGR1FVRnhSanRKUVVOeVJpd3JSRUZCSzBRN1NVRkRMMFFzUjBGQlJ5eERRVUZETEV0QlFXVXNSVUZCUlN4TlFVRk5MRWRCUVVjc1NVRkJTVHRSUVVOb1F5eEpRVUZKTEVsQlFVa3NRMEZCUXl4UFFVRlBMRWxCUVVrc1MwRkJTeXhEUVVGRExFOUJRVTg3V1VGREwwSXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXgxUWtGQmRVSXNRMEZCUXl4RFFVRkRPMUZCUlRORExFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zV1VGQldTeEZRVUZGTEVOQlFVTXNSMEZCUnl4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRk8xbEJRMjVFTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVWc1F5eEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdVVUZET1VJc1QwRkJUeXhKUVVGSkxFTkJRVU03U1VGRFpDeERRVUZETzBsQlJVUXNiMFpCUVc5R08wbEJRM0JHTEZGQlFWRXNRMEZCUXl4SFFVRlhMRVZCUVVVc1EwRkJVeXhGUVVGRkxFbEJRVWtzUjBGQlJ5eExRVUZMTzFGQlF6TkRMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzFGQlJXaEVMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU03V1VGQlJTeFBRVUZQTzFGQlJXNUNMR2RDUVVGblFqdFJRVU5vUWl4MVJFRkJkVVE3VVVGRmRrUXNhVUpCUVdsQ08xRkJRMnBDTEUxQlFVMHNVMEZCVXl4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU03VVVGREwwSXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUldwRExHZEVRVUZuUkR0UlFVVm9SQ3hMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEZOQlFWTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhKUVVGSkxFZEJRVWNzUlVGQlJTeERRVUZETEVWQlFVVTdXVUZEZGtNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVVnlReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRMRWRCUVVjc1IwRkJSeXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVTdXVUZEYUVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkZka0lzWlVGQlpUdEpRVU5xUWl4RFFVRkRPMGxCUlVRc2EwWkJRV3RHTzBsQlEyeEdMSFZDUVVGMVFqdEpRVU4yUWl4UlFVRlJMRU5CUVVNc1IwRkJWeXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETzFGQlEzcENMSGRFUVVGM1JEdFJRVU40UkN4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRE8xbEJRMUFzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4elFrRkJjMElzUTBGQlF5eERRVUZETzFGQlJURkRMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0UlFVVndSQ3hKUVVGSkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVN1dVRkRka0lzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SFFVRkhMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSVHRuUWtGRGVrTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFRRVU4wUXp0UlFVVkVMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOdVF5eERRVUZETzBsQlJVUXNXVUZCV1N4RFFVRkRMRWxCUVdNc1JVRkJSU3hKUVVGSkxFZEJRVWNzU1VGQlNUdFJRVU4wUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhQUVVGUExFbEJRVWtzU1VGQlNTeERRVUZETEUxQlFVMDdXVUZETjBJc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eDFRa0ZCZFVJc1EwRkJReXhEUVVGRE8xRkJSVE5ETEVsQlFVa3NTVUZCU1N4SlFVRkpMRWxCUVVrc1JVRkJSU3hGUVVGRkxIRkNRVUZ4UWp0WlFVTjJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEzUkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0VFFVTndRanRoUVVGTk8xbEJRMHdzU1VGQlNTeE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUldZc1MwRkJTeXhKUVVGSkxFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzJkQ1FVTnFSU3hKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlN4RlFVRkZMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVVTVReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEUxQlFVMHNRMEZCUXp0WlFVTjBRaXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdVMEZEYWtJN1VVRkZSQ3hQUVVGUExFbEJRVWtzUTBGQlF6dEpRVU5rTEVOQlFVTTdTVUZGUkN3clFrRkJLMEk3U1VGREwwSXNUVUZCVFN4RFFVRkRMRWRCUVZjN1VVRkRhRUlzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzBsQlEzcEZMRU5CUVVNN1NVRkZSQ3dyUWtGQkswSTdTVUZETDBJc1RVRkJUU3hEUVVGRExFZEJRVmNzUlVGQlJTeEhRVUZaTEVWQlFVVXNUVUZCVFN4SFFVRkhMRWxCUVVrN1VVRkROME1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGRrSXNTVUZCU1N4TlFVRk5PMWxCUTFJc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlJTeERRVUZET3p0WlFVVm9RaXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdTVUZEY0VJc1EwRkJRenRKUVVWRUxHbEdRVUZwUmp0SlFVTnFSaXhQUVVGUExFTkJRVU1zUTBGQlV5eEZRVUZGTEV0QlFXTTdVVUZETDBJc1NVRkJTU3hMUVVGTE8xbEJRMUFzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXpzN1dVRkZjRVFzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVNelJDeERRVUZETzBsQlJVUXNUMEZCVHl4RFFVRkRMRWRCUVZjN1VVRkRha0lzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTXhSQ3hEUVVGRE8wbEJRMFFzVVVGQlVTeERRVUZETEVkQlFWYzdVVUZEYkVJc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTTNSQ3hEUVVGRE8wbEJSVVFzVTBGQlV6dFJRVU5RTEU5QlFVOHNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVU01UWl4RFFVRkRPMGxCUTBRc1ZVRkJWVHRSUVVOU0xFOUJRVThzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRKUVVNdlFpeERRVUZETzBsQlJVUXNkVU5CUVhWRE8wbEJRM1pETEZOQlFWTXNRMEZCUXl4TFFVRmpPMUZCUTNSQ0xFbEJRVWtzU1VGQlNTeERRVUZETEU5QlFVOHNTVUZCU1N4RFFVRkRPMWxCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU03VVVGRmFFTXNTVUZCU1N4SlFVRkpMRU5CUVVNc2NVSkJRWEZDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJSVHRaUVVNdlF5eEpRVUZKTEVOQlFVTXNZMEZCWXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVONFFpeE5RVUZOTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRE8xbEJRemxDTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVOV0xFOUJRVThzUTBGQlF5eEhRVUZITEVkQlFVY3NSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3WjBKQlEzWkNMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1JVRkJSU3cwUWtGQk5FSTdiMEpCUXpGRkxFbEJRVWtzUTBGQlF5eGpRVUZqTEVsQlFVa3NVVUZCVVN4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdhVUpCUTNaRU8yRkJRMFk3V1VGRlJDeG5Ra0ZCWjBJN1dVRkRhRUlzU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU4wUWl4TlFVRk5MR0ZCUVdFc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXp0WlFVTXhReXhKUVVGSkxHRkJRV0VzU1VGQlNTeERRVUZETEVWQlFVVXNSVUZCUXl4MVJrRkJkVVk3WjBKQlF6bEhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eFZRVUZWTEVOQlFVTXNTVUZCU1N4aFFVRmhMRU5CUVVNc1EwRkJRenRoUVVOMlF6dFpRVVZFTEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF6dG5Ra0ZEY2tJc1NVRkJTU3hEUVVGRExHTkJRV01zU1VGQlNTeFJRVUZSTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF6dFpRVVY0UkN4SlFVRkpMRU5CUVVNc2NVSkJRWEZDTEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJRenRUUVVNMVF6dFJRVVZFTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eGpRVUZqTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEdOQlFXTXNRMEZCUXl4RFFVRkRPMGxCUXpWRkxFTkJRVU03U1VGRlJDd3lSRUZCTWtRN1NVRkRNMFFzVlVGQlZTeERRVUZETEV0QlFXVTdVVUZEZUVJc1NVRkJTU3hOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEyWXNTVUZCU1N4SlFVRkpMRU5CUVVNc1UwRkJVeXhGUVVGRkxFbEJRVWtzU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlR0WlFVTndReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETEVWQlFVVTdaMEpCUTI1RExFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUXpsQ08yRkJRVTA3V1VGRFRDeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMmRDUVVOcVJDeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVNNVFqdFJRVU5FTEU5QlFVOHNUVUZCVFN4RFFVRkRPMGxCUTJoQ0xFTkJRVU03U1VGRlJDd3lSa0ZCTWtZN1NVRkRNMFlzWjBKQlFXZENMRU5CUVVNc1RVRkJaMElzUlVGQlJTeExRVUZqTzFGQlF5OURMRWxCUVVrc1NVRkJTU3hEUVVGRExFOUJRVThzU1VGQlNTeERRVUZETzFsQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNN1VVRkZhRU1zU1VGQlNTeExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUVVNc1RVRkJUU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXp0UlFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU40UkN4UFFVRlBMRU5CUVVNc1IwRkJSeXhIUVVGSExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMWxCUTNaQ0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNN1owSkJRelZFTEV0QlFVc3NTVUZCU1N4UlFVRlJMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0VFFVTXpRenRSUVVWRUxHZENRVUZuUWp0UlFVTm9RaXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRlRU1zVFVGQlRTeGhRVUZoTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU03VVVGRE1VTXNTVUZCU1N4aFFVRmhMRWxCUVVrc1EwRkJRenRaUVVOd1FpeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1ZVRkJWU3hEUVVGRExFbEJRVWtzWVVGQllTeERRVUZETEVOQlFVTTdVVUZEZUVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRPMWxCUTNKQ0xFdEJRVXNzU1VGQlNTeFJRVUZSTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVVV4UXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzUzBGQlN5eERRVUZETEVOQlFVTTdTVUZEYUVRc1EwRkJRenRKUVVWRUxFdEJRVXM3VVVGRFNDeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRM0JDTEVOQlFVTTdTVUZEUkN4UlFVRlJMRU5CUVVNc1MwRkJZenRSUVVOeVFpeFBRVUZQTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUTNaRExFTkJRVU03U1VGRFJDeEpRVUZKTEU5QlFVODdVVUZEVkN4UFFVRlBMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJRenRKUVVNNVF5eERRVUZETzBsQlEwUXNTVUZCU1N4UlFVRlJPMUZCUTFZc1QwRkJUeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU03U1VGREwwTXNRMEZCUXp0SlFVTkVMRWxCUVVrc1QwRkJUenRSUVVOVUxFOUJRVThzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRGJFTXNRMEZCUXp0SlFVTkVMRWxCUVVrc1VVRkJVVHRSUVVOV0xFOUJRVThzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRGJrTXNRMEZCUXp0SlFVVkVMSE5IUVVGelJ6dEpRVU4wUnl3d1EwRkJNRU03U1VGRE1VTXNVVUZCVVN4RFFVRkRMRXRCUVdFc1JVRkJSU3hMUVVGTExFZEJRVWNzU1VGQlNUdFJRVU5zUXl4SlFVRkpMRU5CUVVNc1lVRkJZU3hEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETzFGQlJYSkVMRWxCUVVrc1MwRkJTeXhKUVVGSkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NRMEZCUXp0WlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGVrTXNTMEZCU3l4SFFVRkhMRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEdGQlFXRTdVVUZEYUVRc1NVRkJTU3hWUVVGVkxFZEJRVWNzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTTVRaXhOUVVGTkxFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRPMUZCUld4RExFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFZEJRVWNzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRTlCUVU4c1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU55UkN4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4WlFVRlpPMWxCUXpsRUxFbEJRVWtzVlVGQlZTeEpRVUZKTEVOQlFVTXNSVUZCUlR0blFrRkRia0lzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4VlFVRlZMRWxCUVVrc1ZVRkJWU3hEUVVGRExFZEJRVWNzVlVGQlZTeERRVUZETEVOQlFVTTdaMEpCUXk5RExGVkJRVlVzUjBGQlJ5eERRVUZETEVOQlFVTTdZVUZEYUVJN2FVSkJRVTBzU1VGQlNTeERRVUZETEV0QlFVc3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzYzBOQlFYTkRPMmRDUVVVelJTeFRRVUZUTzFsQlJWZ3NTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVTdaMEpCUTNoRExFMUJRVTBzUTBGQlF5eEhRVUZITEZGQlFWRXNRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzJkQ1FVTjZReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVTdiMEpCUTFZc1MwRkJTeXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03YjBKQlEzcENMRWxCUVVrc1MwRkJTeXhKUVVGSkxFbEJRVWtzUTBGQlF5eFBRVUZQTzNkQ1FVRkZMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU03YjBKQlEzSkRMRTlCUVU4c1MwRkJTeXhEUVVGRE8ybENRVU5rTzJGQlEwWTdVMEZEUmp0UlFVTkVMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU03U1VGRFdpeERRVUZETzBsQlJVUXNORVJCUVRSRU8wbEJRelZFTEZGQlFWRXNRMEZCUXl4TFFVRmhMRVZCUVVVc1MwRkJTeXhIUVVGSExFbEJRVWs3VVVGRGJFTXNTVUZCU1N4TFFVRkxMRWxCUVVrc1EwRkJRenRaUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZETVVJc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eExRVUZMTEVWQlFVVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVVnlSQ3hMUVVGTExFZEJRVWNzUzBGQlN5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eGhRVUZoTzFGQlJTOUVMRTFCUVUwc1ZVRkJWU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRelZETEVsQlFVa3NZVUZCWVN4SFFVRkhMRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVVjJReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEZWQlFWVXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzFsQlEzQkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4N1dVRkRla1FzU1VGQlNTeGhRVUZoTEVsQlFVa3NRMEZCUXl4RlFVRkZPMmRDUVVOMFFpeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1ZVRkJWU3hEUVVGRExFbEJRVWtzWVVGQllTeERRVUZETEVOQlFVTTdaMEpCUTNSRExHRkJRV0VzUjBGQlJ5eERRVUZETEVOQlFVTTdZVUZEYmtJN1dVRkRSQ3hMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVWQlFVVXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSVHRuUWtGRGVFTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1VVRkJVU3hEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETEV0QlFVc3NTVUZCU1N4RFFVRkRMRU5CUVVNN1owSkJRekZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNN2IwSkJRMUlzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzJGQlF6TkNPMU5CUTBZN1VVRkRSQ3hQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlExb3NRMEZCUXpzN1FVRTFjMEpOTEc5Q1FVRlhMRWRCUVVjc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF6dEpRVU5zUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpsRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZET1VNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU01UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPME5CUVVNc1EwRkJReXhEUVVGRE8wRkJSVFZETEc5Q1FVRlhMRWRCUVVjc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF6dEpRVU5zUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGREwwTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpsRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZET1VNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU01UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpsRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZET1VNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU01UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1EwRkJReXhEUVVGRExFTkJRVU03UVVGRk5VTXNiVUpCUVZVc1IwRkJSeXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETzBsQlEycERMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU12UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpsRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZET1VNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU01UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenREUVVGRExFTkJRVU1zUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbVY0Y0c5eWRDQmtaV1poZFd4MElHTnNZWE56SUVKcGRFRnljbUY1SUh0Y2JpQWdjM1JoZEdsaklGOXZia0pwZEVOdmRXNTBJRDBnU1c1ME9FRnljbUY1TG1aeWIyMG9XMXh1SUNBZ0lEQXNJREVzSURFc0lESXNJREVzSURJc0lESXNJRE1zSURFc0lESXNJRElzSURNc0lESXNJRE1zSURNc0lEUXNYRzRnSUNBZ01Td2dNaXdnTWl3Z015d2dNaXdnTXl3Z015d2dOQ3dnTWl3Z015d2dNeXdnTkN3Z015d2dOQ3dnTkN3Z05TeGNiaUFnSUNBeExDQXlMQ0F5TENBekxDQXlMQ0F6TENBekxDQTBMQ0F5TENBekxDQXpMQ0EwTENBekxDQTBMQ0EwTENBMUxGeHVJQ0FnSURJc0lETXNJRE1zSURRc0lETXNJRFFzSURRc0lEVXNJRE1zSURRc0lEUXNJRFVzSURRc0lEVXNJRFVzSURZc1hHNGdJQ0FnTVN3Z01pd2dNaXdnTXl3Z01pd2dNeXdnTXl3Z05Dd2dNaXdnTXl3Z015d2dOQ3dnTXl3Z05Dd2dOQ3dnTlN4Y2JpQWdJQ0F5TENBekxDQXpMQ0EwTENBekxDQTBMQ0EwTENBMUxDQXpMQ0EwTENBMExDQTFMQ0EwTENBMUxDQTFMQ0EyTEZ4dUlDQWdJRElzSURNc0lETXNJRFFzSURNc0lEUXNJRFFzSURVc0lETXNJRFFzSURRc0lEVXNJRFFzSURVc0lEVXNJRFlzWEc0Z0lDQWdNeXdnTkN3Z05Dd2dOU3dnTkN3Z05Td2dOU3dnTml3Z05Dd2dOU3dnTlN3Z05pd2dOU3dnTml3Z05pd2dOeXhjYmlBZ0lDQXhMQ0F5TENBeUxDQXpMQ0F5TENBekxDQXpMQ0EwTENBeUxDQXpMQ0F6TENBMExDQXpMQ0EwTENBMExDQTFMRnh1SUNBZ0lESXNJRE1zSURNc0lEUXNJRE1zSURRc0lEUXNJRFVzSURNc0lEUXNJRFFzSURVc0lEUXNJRFVzSURVc0lEWXNYRzRnSUNBZ01pd2dNeXdnTXl3Z05Dd2dNeXdnTkN3Z05Dd2dOU3dnTXl3Z05Dd2dOQ3dnTlN3Z05Dd2dOU3dnTlN3Z05peGNiaUFnSUNBekxDQTBMQ0EwTENBMUxDQTBMQ0ExTENBMUxDQTJMQ0EwTENBMUxDQTFMQ0EyTENBMUxDQTJMQ0EyTENBM0xGeHVJQ0FnSURJc0lETXNJRE1zSURRc0lETXNJRFFzSURRc0lEVXNJRE1zSURRc0lEUXNJRFVzSURRc0lEVXNJRFVzSURZc1hHNGdJQ0FnTXl3Z05Dd2dOQ3dnTlN3Z05Dd2dOU3dnTlN3Z05pd2dOQ3dnTlN3Z05Td2dOaXdnTlN3Z05pd2dOaXdnTnl4Y2JpQWdJQ0F6TENBMExDQTBMQ0ExTENBMExDQTFMQ0ExTENBMkxDQTBMQ0ExTENBMUxDQTJMQ0ExTENBMkxDQTJMQ0EzTEZ4dUlDQWdJRFFzSURVc0lEVXNJRFlzSURVc0lEWXNJRFlzSURjc0lEVXNJRFlzSURZc0lEY3NJRFlzSURjc0lEY3NJRGhkS1R0Y2JseHVJQ0J6ZEdGMGFXTWdYMlpwY25OMFQyNUNhWFFnUFNCSmJuUTRRWEp5WVhrdVpuSnZiU2hiWEc0Z0lDQWdMVEVzSURBc0lERXNJREFzSURJc0lEQXNJREVzSURBc0lETXNJREFzSURFc0lEQXNJRElzSURBc0lERXNJREFzWEc0Z0lDQWdOQ3dnTUN3Z01Td2dNQ3dnTWl3Z01Dd2dNU3dnTUN3Z015d2dNQ3dnTVN3Z01Dd2dNaXdnTUN3Z01Td2dNQ3hjYmlBZ0lDQTFMQ0F3TENBeExDQXdMQ0F5TENBd0xDQXhMQ0F3TENBekxDQXdMQ0F4TENBd0xDQXlMQ0F3TENBeExDQXdMRnh1SUNBZ0lEUXNJREFzSURFc0lEQXNJRElzSURBc0lERXNJREFzSURNc0lEQXNJREVzSURBc0lESXNJREFzSURFc0lEQXNYRzRnSUNBZ05pd2dNQ3dnTVN3Z01Dd2dNaXdnTUN3Z01Td2dNQ3dnTXl3Z01Dd2dNU3dnTUN3Z01pd2dNQ3dnTVN3Z01DeGNiaUFnSUNBMExDQXdMQ0F4TENBd0xDQXlMQ0F3TENBeExDQXdMQ0F6TENBd0xDQXhMQ0F3TENBeUxDQXdMQ0F4TENBd0xGeHVJQ0FnSURVc0lEQXNJREVzSURBc0lESXNJREFzSURFc0lEQXNJRE1zSURBc0lERXNJREFzSURJc0lEQXNJREVzSURBc1hHNGdJQ0FnTkN3Z01Dd2dNU3dnTUN3Z01pd2dNQ3dnTVN3Z01Dd2dNeXdnTUN3Z01Td2dNQ3dnTWl3Z01Dd2dNU3dnTUN4Y2JpQWdJQ0EzTENBd0xDQXhMQ0F3TENBeUxDQXdMQ0F4TENBd0xDQXpMQ0F3TENBeExDQXdMQ0F5TENBd0xDQXhMQ0F3TEZ4dUlDQWdJRFFzSURBc0lERXNJREFzSURJc0lEQXNJREVzSURBc0lETXNJREFzSURFc0lEQXNJRElzSURBc0lERXNJREFzWEc0Z0lDQWdOU3dnTUN3Z01Td2dNQ3dnTWl3Z01Dd2dNU3dnTUN3Z015d2dNQ3dnTVN3Z01Dd2dNaXdnTUN3Z01Td2dNQ3hjYmlBZ0lDQTBMQ0F3TENBeExDQXdMQ0F5TENBd0xDQXhMQ0F3TENBekxDQXdMQ0F4TENBd0xDQXlMQ0F3TENBeExDQXdMRnh1SUNBZ0lEWXNJREFzSURFc0lEQXNJRElzSURBc0lERXNJREFzSURNc0lEQXNJREVzSURBc0lESXNJREFzSURFc0lEQXNYRzRnSUNBZ05Dd2dNQ3dnTVN3Z01Dd2dNaXdnTUN3Z01Td2dNQ3dnTXl3Z01Dd2dNU3dnTUN3Z01pd2dNQ3dnTVN3Z01DeGNiaUFnSUNBMUxDQXdMQ0F4TENBd0xDQXlMQ0F3TENBeExDQXdMQ0F6TENBd0xDQXhMQ0F3TENBeUxDQXdMQ0F4TENBd0xGeHVJQ0FnSURRc0lEQXNJREVzSURBc0lESXNJREFzSURFc0lEQXNJRE1zSURBc0lERXNJREFzSURJc0lEQXNJREVzSURCZEtUdGNibHh1SUNCemRHRjBhV01nWDJ4aGMzUlBia0pwZENBOUlFbHVkRGhCY25KaGVTNW1jbTl0S0Z0Y2JpQWdJQ0F0TVN3Z01Dd2dNU3dnTVN3Z01pd2dNaXdnTWl3Z01pd2dNeXdnTXl3Z015d2dNeXdnTXl3Z015d2dNeXdnTXl4Y2JpQWdJQ0EwTENBMExDQTBMQ0EwTENBMExDQTBMQ0EwTENBMExDQTBMQ0EwTENBMExDQTBMQ0EwTENBMExDQTBMQ0EwTEZ4dUlDQWdJRFVzSURVc0lEVXNJRFVzSURVc0lEVXNJRFVzSURVc0lEVXNJRFVzSURVc0lEVXNJRFVzSURVc0lEVXNJRFVzWEc0Z0lDQWdOU3dnTlN3Z05Td2dOU3dnTlN3Z05Td2dOU3dnTlN3Z05Td2dOU3dnTlN3Z05Td2dOU3dnTlN3Z05Td2dOU3hjYmlBZ0lDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMRnh1SUNBZ0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNYRzRnSUNBZ05pd2dOaXdnTml3Z05pd2dOaXdnTml3Z05pd2dOaXdnTml3Z05pd2dOaXdnTml3Z05pd2dOaXdnTml3Z05peGNiaUFnSUNBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxGeHVJQ0FnSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc1hHNGdJQ0FnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl4Y2JpQWdJQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTEZ4dUlDQWdJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzWEc0Z0lDQWdOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXhjYmlBZ0lDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMRnh1SUNBZ0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NYRzRnSUNBZ055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z04xMHBPMXh1WEc0Z0lIQnlhWFpoZEdVZ1gyUmhkR0U2SUZWcGJuUXpNa0Z5Y21GNU8xeHVJQ0J3Y21sMllYUmxJRjlzWlc1bmRHZ2dQU0F3TzF4dUlDQndjbWwyWVhSbElGOTJaWEp6YVc5dUlEMGdNRHRjYmlBZ2NISnBkbUYwWlNCZmRYQmtZWFJsVEdWMlpXd2dQU0F3TzF4dUlDQndjbWwyWVhSbElGOXpaV3hsWTNSbFpFTnZkVzUwSUQwZ01EdGNiaUFnY0hKcGRtRjBaU0JmYzJWc1pXTjBaV1JEYjNWdWRGWmxjbk5wYjI0Z1BTQXRNVHRjYmlBZ2NISnBkbUYwWlNCZmMyVnNaV04wWldSSmJtUmxlR1Z6Vm1WeWMybHZiaUE5SUMweE8xeHVJQ0J3Y21sMllYUmxJRjkyWlhKemFXOXVaV1JPWVcxbElEMGdKeWM3WEc0Z0lIQnlhWFpoZEdVZ1gzWmxjbk5wYjI1bFpFNWhiV1ZXWlhKemFXOXVJRDBnTFRFN1hHNGdJRk5JVWtsT1MxOVVTRkpGVTBoUFRFUWdQU0F3ZURFd01EdGNibHh1SUNCamIyNXpkSEoxWTNSdmNpaGtZWFJoT2lCVmFXNTBNekpCY25KaGVTd2diR1Z1WjNSb09pQnVkVzFpWlhJcFhHNGdJR052Ym5OMGNuVmpkRzl5S0d4bGJtZDBhRG9nYm5WdFltVnlMQ0JrWldaaGRXeDBWbUZzZFdVL09pQmliMjlzWldGdUtWeHVJQ0JqYjI1emRISjFZM1J2Y2loaGNtYzZJRzUxYldKbGNpQjhJRlZwYm5Rek1rRnljbUY1TENCa1pXWmhkV3gwVm1Gc2RXVTZJR0p2YjJ4bFlXNGdmQ0J1ZFcxaVpYSWdQU0JtWVd4elpTa2dlMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdZWEpuSUQwOVBTQW5iblZ0WW1WeUp5a2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ2JHVnVaM1JvSUQwZ1lYSm5PMXh1SUNBZ0lDQWdZMjl1YzNRZ1luVm1aaUE5SUVKcGRFRnljbUY1TGw5amNtVmhkR1ZDZFdabVpYSW9iR1Z1WjNSb0tUdGNiaUFnSUNBZ0lHbG1JQ2hrWldaaGRXeDBWbUZzZFdVcFhHNGdJQ0FnSUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dZblZtWmk1c1pXNW5kR2c3SUdrckt5bGNiaUFnSUNBZ0lDQWdJQ0JpZFdabVcybGRJRDBnTFRFN1hHNGdJQ0FnSUNCMGFHbHpMbDlrWVhSaElEMGdZblZtWmp0Y2JpQWdJQ0FnSUhSb2FYTXVYMnhsYm1kMGFDQTlJR3hsYm1kMGFEdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHRnlaeUJwYm5OMFlXNWpaVzltSUZWcGJuUXpNa0Z5Y21GNUtTQjdYRzRnSUNBZ0lDQjBhR2x6TGw5a1lYUmhJRDBnWVhKbklHRnpJRlZwYm5Rek1rRnljbUY1TzF4dUlDQWdJQ0FnZEdocGN5NWZiR1Z1WjNSb0lEMGdaR1ZtWVhWc2RGWmhiSFZsSUdGeklHNTFiV0psY2p0Y2JpQWdJQ0I5SUdWc2MyVmNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblNXNTJZV3hwWkNCamIyNXpkSEoxWTNSdmNpY3BPMXh1SUNCOVhHNWNibHh1SUNCblpYUlNZWGRFWVhSaEtDa2dlM0psZEhWeWJpQjBhR2x6TGw5a1lYUmhPMzFjYmx4dUlDQmhjM04xY21WSGIyVjZLRzUxYlRvZ2JuVnRZbVZ5TENCaGNtZE9ZVzFsT2lCVGRISnBibWNwT2lCMmIybGtJSHRjYmlBZ0lDQnBaaUFvYm5WdElEd2dNQ2tnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0FrZTJGeVowNWhiV1Y5SUhOb2IzVnNaQ0JpWlNCbmNtVmhkR1Z5SUhSb1lXNGdlbVZ5YjJBcE8xeHVJQ0I5WEc1Y2JpQWdZWE56ZFhKbFNXNVNZVzVuWlNoMllXeDFaVG9nYm5WdFltVnlMQ0J0YVc0NklHNTFiV0psY2l3Z2JXRjRPaUJ1ZFcxaVpYSXNJR0Z5WjA1aGJXVTZJRk4wY21sdVp5azZJSFp2YVdRZ2UxeHVJQ0FnSUdsbUlDZ29kbUZzZFdVZ1BDQnRhVzRwSUh4OElDaDJZV3gxWlNBK0lHMWhlQ2twSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnUVhKbmRXMWxiblFnSkh0aGNtZE9ZVzFsZlNBb0pIdDJZV3gxWlgwcElHOTFkQ0J2WmlCeVlXNW5aU0FvSkh0dGFXNTlMQ0FrZTIxaGVIMHBZQ2s3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnWTI5d2VTaHpjbU02SUZWcGJuUXpNa0Z5Y21GNUxDQmtjM1E2SUZWcGJuUXpNa0Z5Y21GNUxDQmpiM1Z1ZERvZ2JuVnRZbVZ5S1RvZ2RtOXBaQ0I3WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JqYjNWdWREc2dhU3NyS1NCN1hHNGdJQ0FnSUNCa2MzUmJhVjBnUFNCemNtTmJhVjA3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnWTI5d2VVWnliMjBvYjNSb1pYSTZJRUpwZEVGeWNtRjVLVG9nZG05cFpDQjdYRzRnSUNBZ2FXWWdLSFJvYVhNdVgyeGxibWQwYUNBaFBTQnZkR2hsY2k1ZmJHVnVaM1JvS1NCN1hHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUV4bGJtZDBhSE1nWkdsbVptVnlJQ2drZTNSb2FYTXVYMnhsYm1kMGFIMGdJVDBnSkh0dmRHaGxjaTVmYkdWdVozUm9mU2xnS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdkR2hwY3k1amIzQjVLRzkwYUdWeUxsOWtZWFJoTENCMGFHbHpMbDlrWVhSaExDQjBhR2x6TG14bGJtZDBhRWx1U1c1MGN5azdYRzRnSUNBZ2RHaHBjeTVmZG1WeWMybHZiaXNyTzF4dUlDQjlYRzVjYmlBZ1oyVjBJR3hsYm1kMGFDZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVmYkdWdVozUm9PMXh1SUNCOVhHNWNiaUFnWjJWMElHSjFabVpsY2lncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NWZaR0YwWVR0Y2JpQWdmVnh1WEc0Z0lITmxkQ0JpZFdabVpYSW9aR0YwWVRvZ1ZXbHVkRE15UVhKeVlYa3BJSHRjYmlBZ0lDQjBhR2x6TGw5a1lYUmhJRDBnWkdGMFlUdGNiaUFnSUNCMGFHbHpMbDkyWlhKemFXOXVLeXM3WEc0Z0lIMWNibHh1SUNCblpYUWdkbVZ5YzJsdmJpZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVmZG1WeWMybHZianRjYmlBZ2ZWeHVYRzRnSUhObGRDQjJaWEp6YVc5dUtIWmhiSFZsT2lCdWRXMWlaWElwSUh0Y2JpQWdJQ0IwYUdsekxsOTJaWEp6YVc5dUlEMGdkbUZzZFdVN1hHNGdJSDFjYmx4dUlDQnBibU55WlcxbGJuUldaWEp6YVc5dUtHNXZkR2xtZVNBOUlIUnlkV1VwT2lCMmIybGtJSHRjYmlBZ0lDQjBhR2x6TGw5MlpYSnphVzl1S3lzN1hHNGdJSDFjYmx4dUlDQm5aWFFnYkdWdVozUm9TVzVKYm5SektDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCTllYUm9MbVpzYjI5eUtDaDBhR2x6TGw5c1pXNW5kR2dnS3lBd2VERm1LU0F2SURCNE1qQXBPMXh1SUNCOVhHNWNiaUFnWjJWMElIWmxjbk5wYjI1bFpFNWhiV1VvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVgzWmxjbk5wYjI0Z1BUMGdkR2hwY3k1ZmRtVnljMmx2Ym1Wa1RtRnRaVlpsY25OcGIyNGdQeUIwYUdsekxsOTJaWEp6YVc5dVpXUk9ZVzFsSURvZ0p5YzdYRzRnSUgxY2JseHVJQ0J6WlhRZ2RtVnljMmx2Ym1Wa1RtRnRaU2h1WVcxbE9pQnpkSEpwYm1jcElIdGNiaUFnSUNCMGFHbHpMbDkyWlhKemFXOXVaV1JPWVcxbElEMGdibUZ0WlR0Y2JpQWdJQ0IwYUdsekxsOTJaWEp6YVc5dVpXUk9ZVzFsVm1WeWMybHZiaUE5SUhSb2FYTXVYM1psY25OcGIyNDdYRzRnSUgxY2JseHVJQ0JuWlhRZ2MyVnNaaWdwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3p0Y2JpQWdmVnh1WEc0Z0lITmxkRXhsYm1kMGFDaDJZV3gxWlRvZ2JuVnRZbVZ5S1RvZ2RtOXBaQ0I3WEc0Z0lDQWdhV1lnS0haaGJIVmxJRHdnTUNsY2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduYzJodmRXeGtJR0psSUQ0OUlEQW5LVHRjYmx4dUlDQWdJR2xtSUNoMllXeDFaU0E5UFNCMGFHbHpMbDlzWlc1bmRHZ3BJSEpsZEhWeWJqdGNiaUFnSUNCamIyNXpkQ0J1U1c1MGMwNWxaV1JsWkNBOUlFMWhkR2d1Wm14dmIzSW9LSFpoYkhWbElDc2dNSGd4WmlrZ0x5QXdlREl3S1R0Y2JpQWdJQ0JwWmlBb0tHNUpiblJ6VG1WbFpHVmtJRDRnZEdocGN5NWZaR0YwWVM1c1pXNW5kR2dwSUh4OElDZ29ia2x1ZEhOT1pXVmtaV1FnS3lCMGFHbHpMbE5JVWtsT1MxOVVTRkpGVTBoUFRFUXBJRHdnZEdocGN5NWZaR0YwWVM1c1pXNW5kR2dwS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0J1WlhkRVlYUmhJRDBnYm1WM0lGVnBiblF6TWtGeWNtRjVLRzVKYm5SelRtVmxaR1ZrS1R0Y2JpQWdJQ0FnSUhSb2FYTXVZMjl3ZVNoMGFHbHpMbDlrWVhSaExDQnVaWGRFWVhSaExDQW9ia2x1ZEhOT1pXVmtaV1FnUGlCMGFHbHpMbDlrWVhSaExteGxibWQwYUNrZ1B5QjBhR2x6TGw5a1lYUmhMbXhsYm1kMGFDQTZJRzVKYm5SelRtVmxaR1ZrS1R0Y2JpQWdJQ0FnSUhSb2FYTXVYMlJoZEdFZ1BTQnVaWGRFWVhSaE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaDJZV3gxWlNBK0lIUm9hWE11WDJ4bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnYVdZZ0tIUm9hWE11WDJ4bGJtZDBhQ0FsSURCNE1qQWdQaUF3S1Z4dUlDQWdJQ0FnSUNCMGFHbHpMbDlrWVhSaFczUm9hWE11YkdWdVozUm9TVzVKYm5SeklDMGdNVjBnSmowZ0tERWdQRHdnS0NoMGFHbHpMbDlzWlc1bmRHZ2dKU0F3ZURJd0tTQW1JREI0TVdZcEtTQXRJREU3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVYMlJoZEdFdVptbHNiQ2d3TENCMGFHbHpMbXhsYm1kMGFFbHVTVzUwY3l3Z2JrbHVkSE5PWldWa1pXUXBPMXh1SUNBZ0lIMWNiaUFnSUNCMGFHbHpMbDlzWlc1bmRHZ2dQU0IyWVd4MVpUdGNiaUFnSUNCMGFHbHpMbDkyWlhKemFXOXVLeXM3WEc0Z0lIMWNibHh1SUNCemRHRjBhV01nWm5KdmJVRnVaQ2h6WlhReE9pQkNhWFJCY25KaGVTd2djMlYwTWpvZ1FtbDBRWEp5WVhrcE9pQkNhWFJCY25KaGVTQjdYRzRnSUNBZ2FXWWdLSE5sZERFdVgyeGxibWQwYUNBaFBTQnpaWFF5TGw5c1pXNW5kR2dwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRXhsYm1kMGFITWdaR2xtWm1WeUlDZ2tlM05sZERFdVgyeGxibWQwYUgwZ0lUMGdKSHR6WlhReUxsOXNaVzVuZEdoOUtXQXBPMXh1WEc0Z0lDQWdZMjl1YzNRZ2RHVnRjQ0E5SUc1bGR5QkNhWFJCY25KaGVTaHpaWFF4TGw5c1pXNW5kR2dwTzF4dUlDQWdJSFJsYlhBdVgyeGxibWQwYUNBOUlITmxkREV1WDJ4bGJtZDBhRHRjYmlBZ0lDQjBaVzF3TGw5a1lYUmhJRDBnUW1sMFFYSnlZWGt1WDJOeVpXRjBaVUoxWm1abGNpaDBaVzF3TGw5c1pXNW5kR2dwTzF4dUlDQWdJSFJsYlhBdVgzWmxjbk5wYjI0Z1BTQXdPMXh1WEc0Z0lDQWdZMjl1YzNRZ2JHVnVJRDBnYzJWME1TNXNaVzVuZEdoSmJrbHVkSE03WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JzWlc0N0lHa3JLeWxjYmlBZ0lDQWdJSFJsYlhBdVgyUmhkR0ZiYVYwZ1BTQnpaWFF4TGw5a1lYUmhXMmxkSUNZZ2MyVjBNaTVmWkdGMFlWdHBYVHRjYmx4dUlDQWdJSEpsZEhWeWJpQjBaVzF3TzF4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCemRHRjBhV01nWDJOeVpXRjBaVUoxWm1abGNpaHNaVzVuZEdnNklHNTFiV0psY2lrNklGVnBiblF6TWtGeWNtRjVJSHRjYmlBZ0lDQnlaWFIxY200Z2JtVjNJRlZwYm5Rek1rRnljbUY1S0UxaGRHZ3VabXh2YjNJb0tHeGxibWQwYUNBcklEQjRNV1lwSUM4Z01IZ3lNQ2twTzF4dUlDQjlYRzVjYmlBZ2MzUmhkR2xqSUdaeWIyMVdZV3gxWlhNb2RtRnNkV1Z6T2lCQmNuSmhlVHhpYjI5c1pXRnVQaWs2SUVKcGRFRnljbUY1SUh0Y2JpQWdJQ0JqYjI1emRDQjBaVzF3SUQwZ2JtVjNJRUpwZEVGeWNtRjVLSFpoYkhWbGN5NXNaVzVuZEdncE8xeHVJQ0FnSUhSbGJYQXVYM1psY25OcGIyNGdQU0F3TzF4dVhHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCMFpXMXdMbDlzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2FXWWdLSFpoYkhWbGMxdHBYU2xjYmlBZ0lDQWdJQ0FnZEdWdGNDNWZaR0YwWVZ0TllYUm9MbVpzYjI5eUtHa2dMeUF3ZURJd0tWMGdmRDBnTVNBOFBDQW9LR2tnSlNBd2VESXdLU0FtSURCNE1XWXBPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnZEdWdGNEdGNiaUFnZlZ4dVhHNGdJQzh2THlCRGIyNXpkSEoxWTNSeklHRWdXMEpwZEZObGRGMGdiMllnYkdWdVozUm9JRnRqYjNWdWRGMHNJSGRvWlhKbElHbGtlQzEwYUNCaWFYUWdhWE1nWkdWMFpYSnRhVzVsWkNCaWVTQmhJR05oYkd3Z2RHOGdXMlpzWVdkZElDaHBaSGdwTGx4dUlDQnpkR0YwYVdNZ1puSnZiVk5sY1NoamIzVnVkRG9nYm5WdFltVnlMQ0JtYkdGbk9pQkdkVzVqZEdsdmJpazZJRUpwZEVGeWNtRjVJSHRjYmlBZ0lDQmpiMjV6ZENCMFpXMXdJRDBnYm1WM0lFSnBkRUZ5Y21GNUtHTnZkVzUwS1R0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUdOdmRXNTBPeUFySzJrcFhHNGdJQ0FnSUNCMFpXMXdMbk5sZEVKcGRDaHBMQ0JtYkdGbktHa3BLVHRjYmx4dUlDQWdJSFJsYlhBdVgzWmxjbk5wYjI0Z1BTQXdPMXh1SUNBZ0lISmxkSFZ5YmlCMFpXMXdPMXh1SUNCOVhHNWNiaUFnTHk4dklFTnZibk4wY25WamRITWdZU0JiUW1sMFUyVjBYU0JtY205dElHRWdjM1J5YVc1bklGdHpYU0JqYjI1MFlXbHVhVzVuSUNjd0p5QnZjaUFuTVNjdVhHNGdJSE4wWVhScFl5Qm1jbTl0VTNSeWFXNW5LSE02SUhOMGNtbHVaeWs2SUVKcGRFRnljbUY1SUh0Y2JpQWdJQ0J5WlhSMWNtNGdRbWwwUVhKeVlYa3Vabkp2YlZObGNTaHpMbXhsYm1kMGFDd2dLR2s2SUc1MWJXSmxjaWtnUFQ0Z2N5NWphR0Z5UVhRb2FTa2dQVDBnSnpFbktUdGNiaUFnZlZ4dVhHNGdJQzh2THlCRGIyNXpkSEoxWTNSeklHRWdXMEpwZEZObGRGMHNJR0poYzJWa0lHOXVJR3hsYm1kMGFDQmJYMnhsYm1kMGFGMGdZVzVrSUdKNWRHVWdZWEp5WVhrZ1cxOWtZWFJoWFM1Y2JpQWdjM1JoZEdsaklHWnliMjFWYVc1ME16SkJjbkpoZVNoZmJHVnVaM1JvT2lCdWRXMWlaWElzSUY5a1lYUmhPaUJWYVc1ME16SkJjbkpoZVNrNklFSnBkRUZ5Y21GNUlIdGNiaUFnSUNCamIyNXpkQ0IwWlcxd0lEMGdibVYzSUVKcGRFRnljbUY1S0Y5c1pXNW5kR2dwTzF4dUlDQWdJSFJsYlhBdVgyUmhkR0VnUFNCZlpHRjBZVHRjYmlBZ0lDQnlaWFIxY200Z2RHVnRjRHRjYmlBZ2ZWeHVYRzRnSUM4dkx5QkVaWE5sY21saGJHbDZaWE1nWVNCYlFtbDBVMlYwWFNCbWNtOXRJRnRpZVhSbGMxMHVYRzRnSUhOMFlYUnBZeUJtY205dFFubDBaWE1vWW5sMFpYTTZJRlZwYm5RNFFYSnlZWGtwT2lCQ2FYUkJjbkpoZVNCN1hHNGdJQ0FnWTI5dWMzUWdiR1Z1SUQwZ1lubDBaWE11YkdWdVozUm9PMXh1SUNBZ0lHTnZibk4wSUhSbGJYQWdQU0J1WlhjZ1FtbDBRWEp5WVhrb2JHVnVJQ29nT0NrN1hHNGdJQ0FnZEdWdGNDNWZaR0YwWVNBOUlHNWxkeUJWYVc1ME16SkJjbkpoZVNoTllYUm9MbVpzYjI5eUtDaHNaVzRnS3lBektTQXZJRFFwS1R0Y2JpQWdJQ0IwWlcxd0xsOXNaVzVuZEdnZ1BTQnNaVzRnS2lBNE8xeHVJQ0FnSUd4bGRDQnVkVzB4SUQwZ01Ec2diR1YwSUc1MWJUSWdQU0F3TzF4dVhHNGdJQ0FnZDJocGJHVWdLQ2hzWlc0Z0xTQnVkVzB5S1NBK1BTQTBLU0I3WEc0Z0lDQWdJQ0IwWlcxd0xsOWtZWFJoVzI1MWJURXJLMTBnUFNBb1hHNGdJQ0FnSUNBZ0lDZ29ZbmwwWlhOYmJuVnRNbDBnSmlBd2VHWm1LU0I4WEc0Z0lDQWdJQ0FnSUNnb1lubDBaWE5iYm5WdE1pQXJJREZkSUNZZ01IaG1aaWtnUER3Z09Da3BJSHhjYmlBZ0lDQWdJQ0FnS0NoaWVYUmxjMXR1ZFcweUlDc2dNbDBnSmlBd2VHWm1LU0E4UENBd2VERXdLU2tnZkZ4dUlDQWdJQ0FnSUNBb0tHSjVkR1Z6VzI1MWJUSWdLeUF6WFNBbUlEQjRabVlwSUR3OElEQjRNVGdwTzF4dVhHNGdJQ0FnSUNCdWRXMHlJQ3M5SURRN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHeGxiaUF0SUc1MWJUSWdQVDBnTXlsY2JpQWdJQ0FnSUhSbGJYQXVYMlJoZEdGYmJuVnRNVjBnUFNBb1lubDBaWE5iYm5WdE1pQXJJREpkSUNZZ01IaG1aaWtnUER3Z01IZ3hNRHRjYmx4dUlDQWdJR2xtSUNoc1pXNGdMU0J1ZFcweUlEMDlJRElwWEc0Z0lDQWdJQ0IwWlcxd0xsOWtZWFJoVzI1MWJURmRJSHc5SUNoaWVYUmxjMXR1ZFcweUlDc2dNVjBnSmlBd2VHWm1LU0E4UENBNE8xeHVYRzRnSUNBZ2FXWWdLR3hsYmlBdElHNTFiVElnUFQwZ01TbGNiaUFnSUNBZ0lIUmxiWEF1WDJSaGRHRmJiblZ0TVYwZ2ZEMGdZbmwwWlhOYmJuVnRNbDBnSmlBd2VHWm1PMXh1WEc0Z0lDQWdkR1Z0Y0M1ZmRtVnljMmx2YmlBOUlEQTdYRzRnSUNBZ2NtVjBkWEp1SUhSbGJYQTdYRzRnSUgxY2JseHVJQ0IwYjFOMGNtbHVaeWdwT2lCemRISnBibWNnZTF4dUlDQWdJSEpsZEhWeWJpQmdKSHQwYUdsekxsOXNaVzVuZEdoOUlHSnBkSE1zSUNSN2RHaHBjeTVqYjNWdWRFSnBkSE1vZEhKMVpTbDlJSE5sZEdBN1hHNGdJSDFjYmx4dUlDQXZMeThnVUdWeVptOXliWE1nWkdWbGNDQmpiMjF3WVhKcGMyOXVJRzltSUhSM2J5QmlhWFJ6WlhSekxseHVJQ0JsY1hWaGJITW9iM1JvWlhJNklFSnBkRUZ5Y21GNUtUb2dZbTl2YkdWaGJpQjdYRzRnSUNBZ2FXWWdLSFJvYVhNZ1BUMGdiM1JvWlhJcElISmxkSFZ5YmlCMGNuVmxPMXh1SUNBZ0lHbG1JQ2h2ZEdobGNpQTlQU0J1ZFd4c0tTQnlaWFIxY200Z1ptRnNjMlU3WEc0Z0lDQWdhV1lnS0hSb2FYTXVYMnhsYm1kMGFDQWhQU0J2ZEdobGNpNWZiR1Z1WjNSb0tTQnlaWFIxY200Z1ptRnNjMlU3WEc0Z0lDQWdhV1lnS0hSb2FYTXVYMnhsYm1kMGFDQTlQU0F3S1NCeVpYUjFjbTRnZEhKMVpUdGNibHh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dkR2hwY3k1ZlpHRjBZUzVzWlc1bmRHZ2dMU0F4T3lCcEt5c3BYRzRnSUNBZ0lDQnBaaUFvZEdocGN5NWZaR0YwWVZ0cFhTQWhQU0J2ZEdobGNpNWZaR0YwWVZ0cFhTa2djbVYwZFhKdUlHWmhiSE5sTzF4dVhHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlDaDBhR2x6TGw5a1lYUmhMbXhsYm1kMGFDQXRJREVwSUNvZ09Ec2dhU0E4SUhSb2FYTXVYMnhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCcFppQW9kR2hwY3k1blpYUkNhWFFvYVNrZ0lUMGdiM1JvWlhJdVoyVjBRbWwwS0drcEtWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1ptRnNjMlU3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCMGNuVmxPMXh1SUNCOVhHNWNiaUFnTHlvcUlFTnNiMjVsY3lCaElHSnBkSE5sZEM0Z0tpOWNiaUFnWTJ4dmJtVW9LVG9nUW1sMFFYSnlZWGtnZTF4dUlDQWdJR052Ym5OMElHSnBkRUZ5Y21GNUlEMGdibVYzSUVKcGRFRnljbUY1S0RBc0lHWmhiSE5sS1R0Y2JpQWdJQ0JpYVhSQmNuSmhlUzVmWkdGMFlTQTlJRlZwYm5Rek1rRnljbUY1TG1aeWIyMG9kR2hwY3k1ZlpHRjBZU2s3SUM4dklHVm1abVZqZEdsMlpTQnNaVzVuZEdnNklDaHNaVzVuZEdoSmJrbHVkSE1wWEc0Z0lDQWdZbWwwUVhKeVlYa3VYMnhsYm1kMGFDQTlJSFJvYVhNdVgyeGxibWQwYUR0Y2JpQWdJQ0JpYVhSQmNuSmhlUzVmZG1WeWMybHZiaUE5SUhSb2FYTXVYM1psY25OcGIyNDdYRzRnSUNBZ2NtVjBkWEp1SUdKcGRFRnljbUY1TzF4dUlDQjlYRzVjYmlBZ0x5b3FJRWx1YVhScFlXeHBlbVZ6SUdFZ1ltbDBjMlYwTGlBcUwxeHVJQ0JwYm1sMEtHWnNZV2M2SUVaMWJtTjBhVzl1TENCdWIzUnBabms2SUdKdmIyeGxZVzRwT2lCQ2FYUkJjbkpoZVNCN1hHNGdJQ0FnZEdocGN5NXpaWFJCYkd3b1ptRnNjMlVzSUdaaGJITmxLVHRjYmx4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnZEdocGN5NWZiR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUdsbUlDaG1iR0ZuS0drcEtWeHVJQ0FnSUNBZ0lDQjBhR2x6TGw5a1lYUmhXMDFoZEdndVpteHZiM0lvYVNBdklEQjRNakFwWFNCOFBTQXhJRHc4SUNnb2FTQWxJREI0TWpBcElDWWdNSGd4WmlrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnZEdocGN5NXBibU55WlcxbGJuUldaWEp6YVc5dUtHNXZkR2xtZVNrN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNN1hHNGdJSDFjYmx4dUlDQXZMeThnU1c1MlpYSjBjeUJoSUdKcGRITmxkQzVjYmlBZ2FXNTJaWEowS0c1dmRHbG1lU0E5SUhSeWRXVXBPaUIyYjJsa0lIdGNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElIUm9hWE11WDJSaGRHRXViR1Z1WjNSb095QnBLeXNwWEc0Z0lDQWdJQ0IwYUdsekxsOWtZWFJoVzJsZElGNDlJQzB4TzF4dVhHNGdJQ0FnZEdocGN5NXBibU55WlcxbGJuUldaWEp6YVc5dUtHNXZkR2xtZVNrN1hHNGdJSDFjYmx4dUlDQXZMeThnVTJWMGN5QmhiR3dnWW1sMGN5QjBieUJiZG1Gc2RXVmRMQ0J2Y0hScGIyNWhiR3g1SUhOMWNIQnlaWE56YVc1bklHNXZkR2xtYVdOaGRHbHZibk11WEc0Z0lITmxkRUZzYkNoMllXeDFaVG9nWW05dmJHVmhiaXdnYm05MGFXWjVJRDBnWm1Gc2MyVXBPaUIyYjJsa0lIdGNiaUFnSUNCamIyNXpkQ0JtYkdGbmN5QTlJSFpoYkhWbElEOGdMVEVnT2lBd08xeHVJQ0FnSUdOdmJuTjBJR3hsYmlBOUlIUm9hWE11YkdWdVozUm9TVzVKYm5Sek8xeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnNaVzQ3SUdrckt5a2dlMXh1SUNBZ0lDQWdkR2hwY3k1ZlpHRjBZVnRwWFNBOUlHWnNZV2R6TzF4dUlDQWdJSDBnTHk5MGIyUnZPaUJ2Y0hScGJXbDZaVnh1WEc0Z0lDQWdkR2hwY3k1cGJtTnlaVzFsYm5SV1pYSnphVzl1S0c1dmRHbG1lU2s3WEc0Z0lIMWNibHh1SUNBdkx5OGdVMlYwY3lCaWFYUnpJR0YwSUZ0cGJtUmxlR1Z6WFNCd2IzTnBkR2x2YmlCMGJ5QmJkbUZzZFdWZExseHVJQ0F2THk4Z1EyeGxZWEp6SUhSb1pTQmlhWFJ6WlhRZ2FXWWdXMk5zWldGeVhTQm1iR0ZuSUdseklIUnlkV1V1WEc0Z0lDOHZMeUJEYUdGdVoyVWdibTkwYVdacFkyRjBhVzl1SUdseklISmhhWE5sWkNCM2FHVnVJRnR1YjNScFpubGRJR2x6SUhSeWRXVXVYRzRnSUhObGRFbHVaR1Y0WlhNb2FXNWtaWGhsY3pvZ1FYSnlZWGs4Ym5WdFltVnlQaXdnZG1Gc2RXVTlkSEoxWlN3Z1kyeGxZWEk5ZEhKMVpTd2dibTkwYVdaNVBYUnlkV1VwT2lCMmIybGtJSHRjYmlBZ0lDQnBaaUFvWTJ4bFlYSXBYRzRnSUNBZ0lDQjBhR2x6TG5ObGRFRnNiQ2doZG1Gc2RXVXNJR1poYkhObEtUdGNibHh1SUNBZ0lHWnZjaUFvWTI5dWMzUWdhU0J2WmlCcGJtUmxlR1Z6S1Z4dUlDQWdJQ0FnZEdocGN5NXpaWFJHWVhOMEtHa3NJSFpoYkhWbEtUdGNibHh1SUNBZ0lIUm9hWE11YVc1amNtVnRaVzUwVm1WeWMybHZiaWh1YjNScFpua3BPMXh1SUNCOVhHNWNiaUFnWlhabGNubEpibVJsZUNocGJtUmxlR1Z6T2lCQmNuSmhlVHh1ZFcxaVpYSStMQ0IyWVd4MVpUMTBjblZsS1RvZ1ltOXZiR1ZoYmlCN1hHNGdJQ0FnWm05eUlDaGpiMjV6ZENCcGJtUmxlQ0J2WmlCcGJtUmxlR1Z6S1NCN1hHNGdJQ0FnSUNCcFppQW9kR2hwY3k1blpYUkNhWFFvYVc1a1pYZ3BJQ0U5SUhaaGJIVmxLVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdabUZzYzJVN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQjBjblZsTzF4dUlDQjlYRzVjYmlBZ1lXNTVTVzVrWlhnb2FXNWtaWGhsY3pvZ1FYSnlZWGs4Ym5WdFltVnlQaXdnZG1Gc2RXVTlkSEoxWlNrNklHSnZiMnhsWVc0Z2UxeHVJQ0FnSUdadmNpQW9ZMjl1YzNRZ2FXNWtaWGdnYjJZZ2FXNWtaWGhsY3lrZ2UxeHVJQ0FnSUNBZ2FXWWdLSFJvYVhNdVoyVjBRbWwwS0dsdVpHVjRLU0E5UFNCMllXeDFaU2xjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFJ5ZFdVN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JpQWdmVnh1WEc0Z0lITmxkRmRvWlhKbEtHTm9aV05yT2lCR2RXNWpkR2x2Yml3Z2RtRnNkV1U5ZEhKMVpTd2dZMnhsWVhJOWRISjFaU3dnYm05MGFXWjVQWFJ5ZFdVc0lHRnNiRzkzUTJ4bFlYSTlkSEoxWlNrNklIWnZhV1FnZTF4dUlDQWdJR2xtSUNoamJHVmhjaUFtSmlCaGJHeHZkME5zWldGeUtWeHVJQ0FnSUNBZ2RHaHBjeTV6WlhSQmJHd29JWFpoYkhWbExDQm1ZV3h6WlNrN1hHNWNiaUFnSUNCcFppQW9ZV3hzYjNkRGJHVmhjaWtnZTF4dUlDQWdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCMGFHbHpMbDlzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvWTJobFkyc29hU2twWEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTV6WlhSR1lYTjBLR2tzSUhaaGJIVmxLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQjBhR2x6TGw5c1pXNW5kR2c3SUdrckt5bGNiaUFnSUNBZ0lDQWdkR2hwY3k1elpYUkdZWE4wS0drc0lHTm9aV05yS0drcElEOGdkbUZzZFdVZ09pQWhkbUZzZFdVcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhSb2FYTXVhVzVqY21WdFpXNTBWbVZ5YzJsdmJpaHViM1JwWm5rcE8xeHVJQ0I5WEc1Y2JpQWdjMlYwVW1GdVoyVW9abkp2YlRvZ2JuVnRZbVZ5TENCMGJ6b2diblZ0WW1WeUxDQjJZV3gxWlRvZ1ltOXZiR1ZoYml3Z2JtOTBhV1o1UFhSeWRXVXBPaUJDYVhSQmNuSmhlU0I3WEc0Z0lDQWdkR2hwY3k1aGMzTjFjbVZKYmxKaGJtZGxLR1p5YjIwc0lEQXNJSFJvYVhNdVgyeGxibWQwYUNBdElERXNJQ2RtY205dEp5azdYRzRnSUNBZ2RHaHBjeTVoYzNOMWNtVkpibEpoYm1kbEtIUnZMQ0F3TENCMGFHbHpMbDlzWlc1bmRHZ2dMU0F4TENBbmRHOG5LVHRjYmx4dUlDQWdJR052Ym5OMElITjBZWEowSUQwZ1RXRjBhQzV0YVc0b1puSnZiU3dnZEc4cE8xeHVJQ0FnSUdOdmJuTjBJR1Z1WkNBOUlFMWhkR2d1YldGNEtHWnliMjBzSUhSdktUdGNibHh1SUNBZ0lDOHZkRzlrYnpvZ2IzQjBhVzFwZW1WY2JpQWdJQ0JwWmlBb2RtRnNkV1VwSUh0Y2JpQWdJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQnpkR0Z5ZERzZ2FTQThQU0JsYm1RN0lHa3JLeWxjYmlBZ0lDQWdJQ0FnZEdocGN5NXpaWFJVY25WbEtHa3BPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCbWIzSWdLR3hsZENCcElEMGdjM1JoY25RN0lHa2dQRDBnWlc1a095QnBLeXNwWEc0Z0lDQWdJQ0FnSUhSb2FYTXVjMlYwUm1Gc2MyVW9hU2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdkR2hwY3k1cGJtTnlaVzFsYm5SV1pYSnphVzl1S0c1dmRHbG1lU2s3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE03WEc0Z0lIMWNibHh1SUNBdkx5OGdVMlYwY3lCdUlISmhibVJ2Yld4NUlHTm9iM05sYmlCaWFYUnpJSFJ2SUhaaGJIVmxMQ0J5WlcxaGFXNXBibWNnWW1sMGN5QjBieUFoZG1Gc2RXVXVYRzRnSUhObGRGSmhibVJ2YlNodU9pQnVkVzFpWlhJc0lIWmhiSFZsT2lCaWIyOXNaV0Z1TENCdWIzUnBabms5ZEhKMVpTazZJSFp2YVdRZ2UxeHVJQ0FnSUdsbUlDaHVJRHdnTUNCOGZDQnVJRDRnZEdocGN5NWZiR1Z1WjNSb0tWeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkdUlHMTFjM1FnWW1VZ1BqMGdNQ0FtSmlBOFBTQkRiM1Z1ZENjcE8xeHVYRzRnSUNBZ2FXWWdLRzRnUGlCMGFHbHpMbDlzWlc1bmRHZ2dMeUF5S1Z4dUlDQWdJQ0FnZEdocGN5NXpaWFJTWVc1a2IyMG9kR2hwY3k1ZmJHVnVaM1JvSUMwZ2Jpd2dJWFpoYkhWbEtUdGNibHh1SUNBZ0lIUm9hWE11YzJWMFFXeHNLQ0YyWVd4MVpTazdYRzVjYmlBZ0lDQm1iM0lnS0d4bGRDQnJJRDBnTURzZ2F5QThJRzQ3SUNrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYVNBOUlFMWhkR2d1Wm14dmIzSW9UV0YwYUM1eVlXNWtiMjBvS1NBcUlIUm9hWE11WDJ4bGJtZDBhQ2s3WEc0Z0lDQWdJQ0JwWmlBb2RHaHBjeTVuWlhSQ2FYUW9hU2tnUFQwZ2RtRnNkV1VwSUdOdmJuUnBiblZsTzF4dUlDQWdJQ0FnZEdocGN5NXpaWFJHWVhOMEtHa3NJSFpoYkhWbEtUdGNiaUFnSUNBZ0lHc3JLenRjYmlBZ0lDQjlYRzVjYmlBZ0lDQjBhR2x6TG1sdVkzSmxiV1Z1ZEZabGNuTnBiMjRvYm05MGFXWjVLVHRjYmlBZ2ZWeHVYRzRnSUM4dkx5Qk5iMlJwWm1sbGN5QmpkWEp5Wlc1MElHSnBkSE5sZENCaWVTQndaWEptYjNKdGFXNW5JSFJvWlNCaWFYUjNhWE5sSUVGT1JDQnZjR1Z5WVhScGIyNGdZV2RoYVc1emRDQjBhR1ZjYmlBZ0x5OHZJR052Y25KbGMzQnZibVJwYm1jZ1pXeGxiV1Z1ZEhNZ2FXNGdkR2hsSUhOd1pXTnBabWxsWkNCaWFYUnpaWFF1WEc0Z0lHRnVaQ2gyWVd4MVpUb2dRbWwwUVhKeVlYa3NJRzV2ZEdsbWVUMTBjblZsS1RvZ1FtbDBRWEp5WVhrZ2UxeHVJQ0FnSUdsbUlDaDBhR2x6TGw5c1pXNW5kR2dnSVQwZ2RtRnNkV1V1WDJ4bGJtZDBhQ2xjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25RWEp5WVhrZ2JHVnVaM1JvY3lCa2FXWm1aWEl1SnlrN1hHNWNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNQ3dnYkdWdUlEMGdkR2hwY3k1c1pXNW5kR2hKYmtsdWRITTdJR2tnUENCc1pXNDdJR2tyS3lsY2JpQWdJQ0FnSUhSb2FYTXVYMlJoZEdGYmFWMGdKajBnZG1Gc2RXVXVYMlJoZEdGYmFWMDdYRzVjYmlBZ0lDQjBhR2x6TG1sdVkzSmxiV1Z1ZEZabGNuTnBiMjRvYm05MGFXWjVLVHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjenRjYmlBZ2ZWeHVYRzRnSUM4dkx5QlFaWEptYjNKdGN5QjBhR1VnWW1sMGQybHpaU0JCVGtRZ1RrOVVJRzl3WlhKaGRHbHZiaUJ2YmlCMGFHVWdaV3hsYldWdWRITWdhVzRnZEdobElHTjFjbkpsYm5RZ1ltbDBjMlYwWEc0Z0lDOHZMeUJoWjJGcGJuTjBJSFJvWlNCamIzSnlaWE53YjI1a2FXNW5JR1ZzWlcxbGJuUnpJR2x1SUhSb1pTQnpjR1ZqYVdacFpXUWdZbWwwYzJWMExseHVJQ0JoYm1ST2IzUW9kbUZzZFdVNklFSnBkRUZ5Y21GNUxDQnViM1JwWm5rOWRISjFaU2s2SUVKcGRFRnljbUY1SUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTVmYkdWdVozUm9JQ0U5SUhaaGJIVmxMbDlzWlc1bmRHZ3BYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0owRnljbUY1SUd4bGJtZDBhSE1nWkdsbVptVnlMaWNwTzF4dVhHNGdJQ0FnWTI5dWMzUWdiR1Z1SUQwZ2RHaHBjeTVzWlc1bmRHaEpia2x1ZEhNN1hHNGdJQ0FnWm05eUlDaHNaWFFnYm5WdE1pQTlJREE3SUc1MWJUSWdQQ0JzWlc0N0lHNTFiVElyS3lsY2JpQWdJQ0FnSUhSb2FYTXVYMlJoZEdGYmJuVnRNbDBnSmowZ2ZuWmhiSFZsTGw5a1lYUmhXMjUxYlRKZE8xeHVYRzRnSUNBZ2RHaHBjeTVwYm1OeVpXMWxiblJXWlhKemFXOXVLRzV2ZEdsbWVTazdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTTdYRzRnSUgxY2JseHVJQ0F2THk4Z1VHVnlabTl5YlhNZ2RHaGxJR0pwZEhkcGMyVWdUazlVSUVGT1JDQnZjR1Z5WVhScGIyNGdiMjRnZEdobElHVnNaVzFsYm5SeklHbHVJSFJvWlNCamRYSnlaVzUwSUdKcGRITmxkRnh1SUNBdkx5OGdZV2RoYVc1emRDQjBhR1VnWTI5eWNtVnpjRzl1WkdsdVp5QmxiR1Z0Wlc1MGN5QnBiaUIwYUdVZ2MzQmxZMmxtYVdWa0lHSnBkSE5sZEM1Y2JpQWdibTkwUVc1a0tIWmhiSFZsT2lCQ2FYUkJjbkpoZVN3Z2JtOTBhV1o1UFhSeWRXVXBPaUJDYVhSQmNuSmhlU0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXVYMnhsYm1kMGFDQWhQU0IyWVd4MVpTNWZiR1Z1WjNSb0tWeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkQmNuSmhlU0JzWlc1bmRHaHpJR1JwWm1abGNpNG5LVHRjYmx4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd0xDQnNaVzRnUFNCMGFHbHpMbXhsYm1kMGFFbHVTVzUwY3pzZ2FTQThJR3hsYmpzZ2FTc3JLVnh1SUNBZ0lDQWdkR2hwY3k1ZlpHRjBZVnRwWFNBOUlDaCtkR2hwY3k1ZlpHRjBZVnRwWFNrZ0ppQjJZV3gxWlM1ZlpHRjBZVnRwWFR0Y2JseHVJQ0FnSUhSb2FYTXVhVzVqY21WdFpXNTBWbVZ5YzJsdmJpaHViM1JwWm5rcE8xeHVJQ0FnSUhKbGRIVnliaUIwYUdsek8xeHVJQ0I5WEc1Y2JpQWdMeTh2SUVsdWRtVnlkSE1nWVd4c0lHSnBkQ0IyWVd4MVpYTWdhVzRnZEdobElHTjFjbkpsYm5RZ1ltbDBjMlYwWEc0Z0lHNXZkQ2h1YjNScFpua2dQU0IwY25WbEtUb2dRbWwwUVhKeVlYa2dlMXh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3TENCc1pXNGdQU0IwYUdsekxteGxibWQwYUVsdVNXNTBjenNnYVNBOElHeGxianNnYVNzcktWeHVJQ0FnSUNBZ2RHaHBjeTVmWkdGMFlWdHBYU0E5SUg1MGFHbHpMbDlrWVhSaFcybGRPMXh1WEc0Z0lDQWdkR2hwY3k1cGJtTnlaVzFsYm5SV1pYSnphVzl1S0c1dmRHbG1lU2s3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE03WEc0Z0lIMWNibHh1SUNBdkx5OGdVR1Z5Wm05eWJYTWdkR2hsSUdKcGRIZHBjMlVnVDFJZ2IzQmxjbUYwYVc5dUlHOXVJSFJvWlNCbGJHVnRaVzUwY3lCcGJpQjBhR1VnWTNWeWNtVnVkQ0JpYVhSelpYUmNiaUFnTHk4dklHRm5ZV2x1YzNRZ2RHaGxJR052Y25KbGMzQnZibVJwYm1jZ1pXeGxiV1Z1ZEhNZ2FXNGdkR2hsSUhOd1pXTnBabWxsWkNCaWFYUnpaWFF1WEc0Z0lHOXlLSFpoYkhWbE9pQkNhWFJCY25KaGVTd2dibTkwYVdaNUlEMGdkSEoxWlNrZ2UxeHVJQ0FnSUdsbUlDaDBhR2x6TGw5c1pXNW5kR2dnSVQwZ2RtRnNkV1V1WDJ4bGJtZDBhQ2xjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25RWEp5WVhrZ2JHVnVaM1JvY3lCa2FXWm1aWEl1SnlrN1hHNWNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNQ3dnYkdWdUlEMGdkR2hwY3k1c1pXNW5kR2hKYmtsdWRITTdJR2tnUENCc1pXNDdJR2tyS3lsY2JpQWdJQ0FnSUhSb2FYTXVYMlJoZEdGYmFWMGdmRDBnZG1Gc2RXVXVYMlJoZEdGYmFWMDdYRzVjYmlBZ0lDQjBhR2x6TG1sdVkzSmxiV1Z1ZEZabGNuTnBiMjRvYm05MGFXWjVLVHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjenRjYmlBZ2ZWeHVYRzRnSUM4dkx5QlFaWEptYjNKdGN5QjBhR1VnWW1sMGQybHpaU0JsZUdOc2RYTnBkbVVnVDFJZ2IzQmxjbUYwYVc5dUlHOXVJSFJvWlNCbGJHVnRaVzUwY3lCcGJpQjBhR1VnWTNWeWNtVnVkQ0JpYVhSelpYUmNiaUFnTHk4dklHRm5ZV2x1YzNRZ2RHaGxJR052Y25KbGMzQnZibVJwYm1jZ1pXeGxiV1Z1ZEhNZ2FXNGdkR2hsSUhOd1pXTnBabWxsWkNCaWFYUnpaWFF1WEc0Z0lIaHZjaWgyWVd4MVpUb2dRbWwwUVhKeVlYa3NJRzV2ZEdsbWVTQTlJSFJ5ZFdVcElIdGNiaUFnSUNCcFppQW9kR2hwY3k1ZmJHVnVaM1JvSUNFOUlIWmhiSFZsTGw5c1pXNW5kR2dwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMEZ5Y21GNUlHeGxibWQwYUhNZ1pHbG1abVZ5TGljcE8xeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREFzSUd4bGJpQTlJSFJvYVhNdWJHVnVaM1JvU1c1SmJuUnpPeUJwSUR3Z2JHVnVPeUJwS3lzcFhHNGdJQ0FnSUNCMGFHbHpMbDlrWVhSaFcybGRJRjQ5SUhaaGJIVmxMbDlrWVhSaFcybGRPMXh1WEc0Z0lDQWdkR2hwY3k1cGJtTnlaVzFsYm5SV1pYSnphVzl1S0c1dmRHbG1lU2s3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE03WEc0Z0lIMWNibHh1SUNBdkx5OGdTVzV6WlhKMGN5QnVJREF0WW1sMGN5QmhkQ0J3YjNOcGRHbHZiaUJ3YjNNc0lISmxjMmw2YVc1bklITmxiR1lnWVc1a0lITm9hV1owYVc1bklHSnBkSE1nWVhCd2NtOXdjbWxoZEdWc2VTNWNiaUFnYVc1elpYSjBRWFFvY0c5ek9pQnVkVzFpWlhJc0lHNDZJRzUxYldKbGNpd2dabXhoWnlBOUlHWmhiSE5sS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdkR2hwY3k1aGMzTjFjbVZKYmxKaGJtZGxLSEJ2Y3l3Z01Dd2dkR2hwY3k1ZmJHVnVaM1JvTENBbmNHOXpKeWs3WEc1Y2JpQWdJQ0JwWmlBb2JpQTlQU0F3S1NCeVpYUjFjbTQ3WEc1Y2JpQWdJQ0F2TDFSUFJFODZJRzl3ZEdsdGFYcGxYRzRnSUNBZ0x5OTBhR1VnYlc5emRDQndjbWx0YVhScGRtVWdhVzF3YkdWdFpXNTBZWFJwYjI0c0lHOXdkR2x0YVhwbElHbDBJR3hoZEdWeUlWeHVYRzRnSUNBZ0x5OGdZbVZuYVc1VmNHUmhkR1VvS1R0Y2JpQWdJQ0JqYjI1emRDQnZiR1JzWlc1bmRHZ2dQU0IwYUdsekxsOXNaVzVuZEdnN1hHNGdJQ0FnZEdocGN5NXpaWFJNWlc1bmRHZ29kR2hwY3k1ZmJHVnVaM1JvSUNzZ2JpazdYRzVjYmlBZ0lDQXZMMmxtSUNnaFkyOXVkR0ZwYm5Nb0lXWnNZV2NwS1NCeVpYUjFjbTQ3SUM4dklHNXZkR2hwYm1jZ2RHOGdaRzljYmx4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNCdmJHUnNaVzVuZEdnZ0xTQXhPeUJwSUQ0OUlIQnZjenNnYVMwdEtWeHVJQ0FnSUNBZ2RHaHBjeTV6WlhSQ2FYUW9hU0FySUc0c0lIUm9hWE11WjJWMFFtbDBLR2twS1R0Y2JseHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQndiM003SUdrZ1BDQndiM01nS3lCdU95QnBLeXNwWEc0Z0lDQWdJQ0IwYUdsekxuTmxkRUpwZENocExDQm1iR0ZuS1R0Y2JseHVJQ0FnSUM4dklHVnVaRlZ3WkdGMFpTZ3BPMXh1SUNCOVhHNWNiaUFnTHk4dklFUmxiR1YwWlhNZ2JpQmlhWFJ6SUdKbFoybHVibWx1WnlCaGRDQndiM05wZEdsdmJpQndiM01zSUhKbGMybDZhVzVuSUhObGJHWWdZVzVrSUhOb2FXWjBhVzVuSUhKbGJXRnBibWx1WjF4dUlDQXZMeThnWW1sMGN5QmhjSEJ5YjNCeWFXRjBaV3g1TGx4dUlDQnlaVzF2ZG1WQmRDaHdiM002SUc1MWJXSmxjaXdnYmlBOUlERXBPaUIyYjJsa0lIdGNiaUFnSUNBdkx5QjBhR1VnYlc5emRDQndjbWx0YVhScGRtVWdhVzF3YkdWdFpXNTBZWFJwYjI0c0lHOXdkR2x0YVhwbElHbDBJR3hoZEdWeUlWeHVJQ0FnSUdsbUlDaHVJRHdnTUNsY2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduYmlCallXNXViM1FnWW1VZ2JtVm5ZWFJwZG1VbktUdGNibHh1SUNBZ0lIUm9hWE11WVhOemRYSmxTVzVTWVc1blpTaHdiM01zSURBc0lIUm9hWE11WDJ4bGJtZDBhQ0F0SUc0c0lDZHdiM01uS1R0Y2JseHVJQ0FnSUdsbUlDaDBhR2x6TG1OdmJuUmhhVzV6S0hSeWRXVXBLU0I3WEc0Z0lDQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ2NHOXpPeUJwSUR3Z2RHaHBjeTVmYkdWdVozUm9JQzBnYmpzZ2FTc3JLVnh1SUNBZ0lDQWdJQ0IwYUdsekxuTmxkRUpwZENocExDQjBhR2x6TG1kbGRFSnBkQ2hwSUNzZ2Jpa3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11YzJWMFRHVnVaM1JvS0hSb2FYTXVYMnhsYm1kMGFDQXRJRzRwTzF4dUlDQjlYRzVjYmlBZ2NtVnRiM1psUW5sTllYTnJLRzFoYzJzNklFSnBkRUZ5Y21GNUxDQm1iR0ZuSUQwZ2RISjFaU2s2SUVKcGRFRnljbUY1SUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTVmYkdWdVozUm9JQ0U5SUcxaGMyc3ViR1Z1WjNSb0tWeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0Nkc1pXNW5kR2dnSVQwZ2JXRnpheTVzWlc1bmRHZ25LVHRjYmx4dUlDQWdJR2xtSUNodFlYTnJJRDA5SUhSb2FYTXBJSHNnTHk4Z2JtOGdibVZsWkNCMGJ5QnBkR1Z5WVhSbFhHNGdJQ0FnSUNCMGFHbHpMbk5sZEV4bGJtZDBhQ2h0WVhOckxtTnZkVzUwUW1sMGN5Z2habXhoWnlrcE8xeHVJQ0FnSUNBZ2RHaHBjeTV6WlhSQmJHd29JV1pzWVdjcE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0JzWlhRZ1pITjBTV1I0SUQwZ01EdGNibHh1SUNBZ0lDQWdabTl5SUNoc1pYUWdjM0pqU1dSNElEMGdMVEU3SUNoemNtTkpaSGdnUFNCdFlYTnJMbVpwYm1ST1pYaDBLSE55WTBsa2VDd2dJV1pzWVdjcEtTQWhQU0F0TVRzcFhHNGdJQ0FnSUNBZ0lIUm9hWE11YzJWMFJtRnpkQ2hrYzNSSlpIZ3JLeXdnZEdocGN5NW5aWFJDYVhRb2MzSmpTV1I0S1NrN1hHNWNiaUFnSUNBZ0lIUm9hWE11WDJ4bGJtZDBhQ0E5SUdSemRFbGtlRHRjYmlBZ0lDQWdJSFJvYVhNdVgzWmxjbk5wYjI0ckt6dGNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnZEdocGN6dGNiaUFnZlZ4dVhHNGdJQzh2THlCVGFXMXBiR0Z5SUhSdklIUm9aU0JiWFNCdmNHVnlZWFJ2Y2k1Y2JpQWdaMlYwUW1sMEtIQnZjem9nYm5WdFltVnlLVG9nWW05dmJHVmhiaUI3WEc0Z0lDQWdjbVYwZFhKdUlDaDBhR2x6TGw5a1lYUmhXMDFoZEdndVpteHZiM0lvY0c5eklDOGdNSGd5TUNsZElDWWdLREVnUER3Z0tIQnZjeUFtSURCNE1XWXBLU2tnSVQwZ01EdGNiaUFnZlZ4dVhHNGdJQzh2THlCVGFXMXBiR0Z5SUhSdklIUm9aU0JiWFNCdmNHVnlZWFJ2Y2k1Y2JpQWdjMlYwUW1sMEtIQnZjem9nYm5WdFltVnlMQ0JpYVhRNklHSnZiMnhsWVc0c0lHNXZkR2xtZVNBOUlIUnlkV1VwSUh0Y2JpQWdJQ0IwYUdsekxuTmxkRVpoYzNRb2NHOXpMQ0JpYVhRcE8xeHVJQ0FnSUdsbUlDaHViM1JwWm5rcFhHNGdJQ0FnSUNCMGFHbHpMbDkyWlhKemFXOXVLeXM3WEc0Z0lDQWdaV3h6WlZ4dUlDQWdJQ0FnZEdocGN5NWZkbVZ5YzJsdmJpc3JPMXh1SUNCOVhHNWNiaUFnTHk4dklGTmxkSE1nVzJsZExYUm9JR0pwZENCMGJ5QmJkbUZzZFdWZExDQmtiMlZ6SUc1dmRDQmphR1ZqYXlCaWIzVnVaSE1zSUdSdlpYTWdibTkwSUdsdVkzSmxiV1Z1ZENCMlpYSnphVzl1WEc0Z0lITmxkRVpoYzNRb2FUb2diblZ0WW1WeUxDQjJZV3gxWlRvZ1ltOXZiR1ZoYmlrNklIWnZhV1FnZTF4dUlDQWdJR2xtSUNoMllXeDFaU2xjYmlBZ0lDQWdJSFJvYVhNdVgyUmhkR0ZiVFdGMGFDNW1iRzl2Y2locElDOGdNSGd5TUNsZElIdzlJREVnUER3Z0tHa2dKaUF3ZURGbUtUdGNiaUFnSUNCbGJITmxYRzRnSUNBZ0lDQjBhR2x6TGw5a1lYUmhXMDFoZEdndVpteHZiM0lvYVNBdklEQjRNakFwWFNBbVBTQitLREVnUER3Z0tHa2dKaUF3ZURGbUtTazdYRzRnSUgxY2JseHVJQ0J6WlhSVWNuVmxLSEJ2Y3pvZ2JuVnRZbVZ5S1RvZ2RtOXBaQ0I3WEc0Z0lDQWdkR2hwY3k1ZlpHRjBZVnROWVhSb0xtWnNiMjl5S0hCdmN5QXZJREI0TWpBcFhTQjhQU0F4SUR3OElDaHdiM01nSmlBd2VERm1LVHRjYmlBZ2ZWeHVJQ0J6WlhSR1lXeHpaU2h3YjNNNklHNTFiV0psY2lrZ2UxeHVJQ0FnSUhSb2FYTXVYMlJoZEdGYlRXRjBhQzVtYkc5dmNpaHdiM01nTHlBd2VESXdLVjBnSmowZ2ZpZ3hJRHc4SUNod2IzTWdKaUF3ZURGbUtTazdYRzRnSUgxY2JseHVJQ0IwY25WbFEyOTFiblFvS1RvZ2JuVnRZbVZ5SUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1amIzVnVkRUpwZEhNb2RISjFaU2s3WEc0Z0lIMWNiaUFnWm1Gc2MyVkRiM1Z1ZENncE9pQnVkVzFpWlhJZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtTnZkVzUwUW1sMGN5aG1ZV3h6WlNrN1hHNGdJSDFjYmx4dUlDQXZMeThnUTI5MWJuUnpJR0pwZEhNZ2IyWWdkR2hsSUhOd1pXTnBabWxsWkNCMllXeDFaUzVjYmlBZ1kyOTFiblJDYVhSektIWmhiSFZsT2lCaWIyOXNaV0Z1S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTVmYkdWdVozUm9JRDA5SURBcElISmxkSFZ5YmlBd08xeHVYRzRnSUNBZ2FXWWdLSFJvYVhNdVgzTmxiR1ZqZEdWa1EyOTFiblJXWlhKemFXOXVJQ0U5SUhSb2FYTXVYM1psY25OcGIyNHBJSHRjYmlBZ0lDQWdJSFJvYVhNdVgzTmxiR1ZqZEdWa1EyOTFiblFnUFNBd08xeHVJQ0FnSUNBZ1kyOXVjM1FnYkdWdUlEMGdkR2hwY3k1c1pXNW5kR2hKYmtsdWRITTdYRzRnSUNBZ0lDQnNaWFFnYVNBOUlEQTdYRzRnSUNBZ0lDQm1iM0lnS0RzZ2FTQThJR3hsYmlBdElERTdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ0lDQm1iM0lnS0d4bGRDQnJJRDBnZEdocGN5NWZaR0YwWVZ0cFhUc2dheUFoUFNBd095QnJJRDQrUGowZ09Da2dleUF2TDNSdlpHODZJR05oYzNRZ1pHRjBZVnRwWFNCMGJ5QjFhVzUwWEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTVmYzJWc1pXTjBaV1JEYjNWdWRDQXJQU0JDYVhSQmNuSmhlUzVmYjI1Q2FYUkRiM1Z1ZEZ0cklDWWdNSGhtWmwwN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdMeThnVkdobElHeGhjM1FnYVc1MExseHVJQ0FnSUNBZ2JHVjBJR3NnUFNCMGFHbHpMbDlrWVhSaFcybGRPMXh1SUNBZ0lDQWdZMjl1YzNRZ2NtVnRZV2x1YVc1blFtbDBjeUE5SUhSb2FYTXVYMnhsYm1kMGFDQW1JREI0TVdZN1hHNGdJQ0FnSUNCcFppQW9jbVZ0WVdsdWFXNW5RbWwwY3lBaFBTQXdLU0I3THk4Z2FXWWdjbVZ0WVdsdWFXNW5RbWwwY3lBOVBTQXdMQ0IwYUdVZ2JHRnpkQ0JwYm5RZ2FYTWdablZzYkhrZ2RYTmxaQ0JoYm1RZ1FVeE1JR0pwZEhNZ2MyaHZkV3hrSUdKbElHeGxablFnWVhNZ2FYTXVYRzRnSUNBZ0lDQWdJR3NnSmowZ2ZpZ29OREk1TkRrMk56STVOU2tnUER3Z2NtVnRZV2x1YVc1blFtbDBjeWs3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUdadmNpQW9PeUJySUNFOUlEQTdJR3NnUGo0K1BTQTRLVnh1SUNBZ0lDQWdJQ0IwYUdsekxsOXpaV3hsWTNSbFpFTnZkVzUwSUNzOUlFSnBkRUZ5Y21GNUxsOXZia0pwZEVOdmRXNTBXMnNnSmlBd2VHWm1YVHRjYmx4dUlDQWdJQ0FnZEdocGN5NWZjMlZzWldOMFpXUkRiM1Z1ZEZabGNuTnBiMjRnUFNCMGFHbHpMbDkyWlhKemFXOXVPMXh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlBb2RtRnNkV1VnUHlCMGFHbHpMbDl6Wld4bFkzUmxaRU52ZFc1MElEb2dkR2hwY3k1ZmJHVnVaM1JvSUMwZ2RHaHBjeTVmYzJWc1pXTjBaV1JEYjNWdWRDazdYRzRnSUgxY2JseHVJQ0F2THk4Z1VtVjBkWEp1Y3lCaElHNTFiV0psY2lCdlppQnpaWFFnWW1sMGN5QjNhR1Z5WlNCaGJITnZJRnRqYUdWamExMGdhWE1nZEhKMVpWeHVJQ0JqYjNWdWRGZG9aWEpsS0dOb1pXTnJPaUJHZFc1amRHbHZiaWs2SUc1MWJXSmxjaUI3WEc0Z0lDQWdiR1YwSUhKbGMzVnNkQ0E5SURBN1hHNGdJQ0FnYVdZZ0tIUm9hWE11ZEhKMVpVTnZkVzUwS0NrZ1BUMGdkR2hwY3k1ZmJHVnVaM1JvS1NCN1hHNGdJQ0FnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElIUm9hWE11WDJ4bGJtZDBhRHNnYVNzcktWeHVJQ0FnSUNBZ0lDQnlaWE4xYkhRZ0t6MGdZMmhsWTJzb2FTa2dQeUF4SURvZ01EdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnWm05eUlDaHNaWFFnYVNBOUlDMHhPeUFvYVNBOUlIUm9hWE11Wm1sdVpFNWxlSFFvYVN3Z2RISjFaU2twSUNFOUlDMHhPeWxjYmlBZ0lDQWdJQ0FnY21WemRXeDBJQ3M5SUdOb1pXTnJLR2twSUQ4Z01TQTZJREE3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCeVpYTjFiSFE3WEc0Z0lIMWNibHh1SUNBdkx5OGdVR1Z5Wm05eWJYTWdZbWwwSUZ3aVlXNWtYQ0lnWVc1a0lHTnZkVzUwY3lCaWFYUnpJRzltSUhSb1pTQnpjR1ZqYVdacFpXUWdkbUZzZFdVc0lIZHBkR2h2ZFhRZ1ltbDBjMlYwSUcxdlpHbG1hV05oZEdsdmJpNWNiaUFnWVc1a1YybDBhRU52ZFc1MFFtbDBjeWh6WldOdmJtUTZJRUpwZEVGeWNtRjVMQ0IyWVd4MVpUb2dZbTl2YkdWaGJpazZJRzUxYldKbGNpQjdYRzRnSUNBZ2FXWWdLSFJvYVhNdVgyeGxibWQwYUNBOVBTQXdLU0J5WlhSMWNtNGdNRHRjYmx4dUlDQWdJR3hsZENCamIzVnVkQ0E5SURBN0lHTnZibk4wSUd4bGJpQTlJSFJvYVhNdWJHVnVaM1JvU1c1SmJuUnpPeUJzWlhRZ2FTQTlJREE3WEc0Z0lDQWdabTl5SUNnN0lHa2dQQ0JzWlc0Z0xTQXhPeUJwS3lzcElIdGNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHc2dQU0IwYUdsekxsOWtZWFJoVzJsZElDWWdjMlZqYjI1a0xsOWtZWFJoVzJsZE95QnJJQ0U5SURBN0lHc2dQajQrUFNBNEtWeHVJQ0FnSUNBZ0lDQmpiM1Z1ZENBclBTQkNhWFJCY25KaGVTNWZiMjVDYVhSRGIzVnVkRnRySUNZZ01IaG1abDA3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeThnVkdobElHeGhjM1FnYVc1MExseHVJQ0FnSUd4bGRDQnJJRDBnZEdocGN5NWZaR0YwWVZ0cFhTQW1JSE5sWTI5dVpDNWZaR0YwWVZ0cFhUdGNiaUFnSUNCamIyNXpkQ0J5WlcxaGFXNXBibWRDYVhSeklEMGdkR2hwY3k1ZmJHVnVaM1JvSUNZZ01IZ3haanRjYmlBZ0lDQnBaaUFvY21WdFlXbHVhVzVuUW1sMGN5QWhQU0F3S1Z4dUlDQWdJQ0FnYXlBbVBTQitLQ2cwTWprME9UWTNNamsxS1NBOFBDQnlaVzFoYVc1cGJtZENhWFJ6S1R0Y2JpQWdJQ0JtYjNJZ0tEc2dheUFoUFNBd095QnJJRDQrUGowZ09DbGNiaUFnSUNBZ0lHTnZkVzUwSUNzOUlFSnBkRUZ5Y21GNUxsOXZia0pwZEVOdmRXNTBXMnNnSmlBd2VHWm1YVHRjYmx4dUlDQWdJSEpsZEhWeWJpQW9kbUZzZFdVZ1B5QmpiM1Z1ZENBNklIUm9hWE11WDJ4bGJtZDBhQ0F0SUdOdmRXNTBLVHRjYmlBZ2ZWeHVYRzRnSUdOc1pXRnlLQ2s2SUhadmFXUWdlMXh1SUNBZ0lIUm9hWE11YzJWMFRHVnVaM1JvS0RBcE8xeHVJQ0I5WEc0Z0lHTnZiblJoYVc1ektIWmhiSFZsT2lCaWIyOXNaV0Z1S1RvZ1ltOXZiR1ZoYmlCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVptbHVaRTVsZUhRb0xURXNJSFpoYkhWbEtTQStQU0F3TzF4dUlDQjlYRzRnSUdkbGRDQmhiR3hVY25WbEtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbU52ZFc1MFFtbDBjeWgwY25WbEtTQTlQU0IwYUdsekxsOXNaVzVuZEdnN1hHNGdJSDFjYmlBZ1oyVjBJR0ZzYkVaaGJITmxLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG1OdmRXNTBRbWwwY3lobVlXeHpaU2tnUFQwZ2RHaHBjeTVmYkdWdVozUm9PMXh1SUNCOVhHNGdJR2RsZENCaGJubFVjblZsS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtTnZkVzUwUW1sMGN5aDBjblZsS1NBK0lEQTdYRzRnSUgxY2JpQWdaMlYwSUdGdWVVWmhiSE5sS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtTnZkVzUwUW1sMGN5aG1ZV3h6WlNrZ1BpQXdPMXh1SUNCOVhHNWNiaUFnTHk4dklGSmxkSFZ5Ym5NZ2RHaGxJSEJ2YzJsMGFXOXVJRzltSUhSb1pTQnVaWGgwSUdKcGRDQnZaaUIwYUdVZ2MzQmxZMmxtYVdWa0lIWmhiSFZsTENCemRHRnlkR2x1WnlCbWNtOXRJSFJvWlNCemNHVmphV1pwWldRZ2NHOXphWFJwYjI0dVhHNGdJQzh2THlCU1pYUjFjbTV6SUMweExDQnBaaUIwYUdWeVpTQmhjbVVnYm04Z2MzVmphQ0JpYVhSekxseHVJQ0JtYVc1a1RtVjRkQ2hwYm1SbGVEb2diblZ0WW1WeUxDQjJZV3gxWlNBOUlIUnlkV1VwT2lCdWRXMWlaWElnZTF4dUlDQWdJSFJvYVhNdVlYTnpkWEpsU1c1U1lXNW5aU2hwYm1SbGVDd2dMVEVzSUhSb2FYTXVYMnhsYm1kMGFDd2dKMmx1WkdWNEp5azdYRzVjYmlBZ0lDQnBaaUFvYVc1a1pYZ2dQajBnZEdocGN5NWZiR1Z1WjNSb0lDMGdNU2tnY21WMGRYSnVJQzB4TzF4dUlDQWdJR2x1WkdWNElEMGdhVzVrWlhnZ1BDQXdJRDhnTUNBNklHbHVaR1Y0SUNzZ01Uc2dMeThnYzJ0cGNDQnpkR0Z5ZEZ4dUlDQWdJR3hsZENCMWJuVnpaV1JDYVhSeklEMGdhVzVrWlhnZ0ppQXdlREZtTzF4dUlDQWdJR052Ym5OMElHNTFiVWx1ZEhNZ1BTQjBhR2x6TG14bGJtZDBhRWx1U1c1MGN6dGNibHh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0JOWVhSb0xtWnNiMjl5S0dsdVpHVjRJQzhnTXpJcE95QnBJRHdnYm5WdFNXNTBjenNnYVNzcktTQjdYRzRnSUNBZ0lDQnNaWFFnYXlBOUlDaDJZV3gxWlNBL0lIUm9hWE11WDJSaGRHRmJhVjBnT2lCK2RHaHBjeTVmWkdGMFlWdHBYU2s3SUM4dklIVnBiblFnWTJGemRGeHVJQ0FnSUNBZ2FXWWdLSFZ1ZFhObFpFSnBkSE1nSVQwZ01Da2dlMXh1SUNBZ0lDQWdJQ0JySUNZOUlDZ29NSGhtWm1abVptWm1aaUE4UENCMWJuVnpaV1JDYVhSektTQW1JREI0Wm1abVptWm1abVlwTzF4dUlDQWdJQ0FnSUNCMWJuVnpaV1JDYVhSeklEMGdNRHRjYmlBZ0lDQWdJSDBnWld4elpTQnBaaUFvSVhaaGJIVmxJQ1ltSUdzZ1BUMGdMVFF5T1RRNU5qY3lPVFlwSUM4dklHeHZiMnRwYm1jZ1ptOXlJR1poYkhObExDQmhiR3dnWW1sMGN5QmhjbVVnYzJWMFhHNWNiaUFnSUNBZ0lDQWdZMjl1ZEdsdWRXVTdYRzVjYmlBZ0lDQWdJR1p2Y2lBb2JHVjBJR29nUFNBd095QnJJQ0U5SURBN0lHb2dLejBnT0N3Z2F5QStQajQ5SURncElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2NDQTlJRUpwZEVGeWNtRjVMbDltYVhKemRFOXVRbWwwVzJzZ0ppQXdlR1ptWFR0Y2JpQWdJQ0FnSUNBZ2FXWWdLSEFnUGowZ01Da2dlMXh1SUNBZ0lDQWdJQ0FnSUdsdVpHVjRJRDBnY0NBcklDaHBJQ29nTXpJcElDc2dhanRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9hVzVrWlhnZ1BqMGdkR2hwY3k1ZmJHVnVaM1JvS1NCeVpYUjFjbTRnTFRFN1hHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHbHVaR1Y0TzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQXRNVHRjYmlBZ2ZWeHVYRzRnSUM4dkx5QkdhVzVrY3lCd2NtVjJhVzkxY3lCaWFYUWdiMllnZEdobElITndaV05wWm1sbFpDQjJZV3gxWlNCcGJpQjBhR1VnWW1sMGMyVjBMbHh1SUNCbWFXNWtVSEpsZGlocGJtUmxlRG9nYm5WdFltVnlMQ0IyWVd4MVpTQTlJSFJ5ZFdVcE9pQnVkVzFpWlhJZ2UxeHVJQ0FnSUdsbUlDaHBibVJsZUNBOVBTQXdLU0J5WlhSMWNtNGdMVEU3WEc0Z0lDQWdkR2hwY3k1aGMzTjFjbVZKYmxKaGJtZGxLR2x1WkdWNExDQXRNU3dnZEdocGN5NWZiR1Z1WjNSb0xDQW5hVzVrWlhnbktUdGNibHh1SUNBZ0lHbHVaR1Y0SUQwZ2FXNWtaWGdnUENBd0lEOGdkR2hwY3k1ZmJHVnVaM1JvSUMwZ01TQTZJR2x1WkdWNElDMGdNVHNnTHk4Z2MydHBjQ0J6ZEdGeWRGeHVYRzRnSUNBZ1kyOXVjM1FnYkdGemRFbHVkRWxrZUNBOUlFMWhkR2d1Wm14dmIzSW9hVzVrWlhnZ0x5QXdlREl3S1R0Y2JpQWdJQ0JzWlhRZ2NtVnRZV2x1YVc1blFtbDBjeUE5SUNocGJtUmxlQ0FySURFcElDWWdNSGd4Wmp0Y2JseHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQnNZWE4wU1c1MFNXUjRPeUJwSUQ0OUlEQTdJR2t0TFNrZ2UxeHVJQ0FnSUNBZ2JHVjBJR3NnUFNBb2RtRnNkV1VnUHlCMGFHbHpMbDlrWVhSaFcybGRJRG9nZm5Sb2FYTXVYMlJoZEdGYmFWMHBPeUF2THlCallYTjBYRzRnSUNBZ0lDQnBaaUFvY21WdFlXbHVhVzVuUW1sMGN5QWhQU0F3S1NCN1hHNGdJQ0FnSUNBZ0lHc2dKajBnZmlnb05ESTVORGsyTnpJNU5Ta2dQRHdnY21WdFlXbHVhVzVuUW1sMGN5azdYRzRnSUNBZ0lDQWdJSEpsYldGcGJtbHVaMEpwZEhNZ1BTQXdPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdabTl5SUNoc1pYUWdhaUE5SURJME95QnJJQ0U5SURBN0lHb2dMVDBnT0N3Z2F5QThQRDBnT0NrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCd0lEMGdRbWwwUVhKeVlYa3VYMnhoYzNSUGJrSnBkRnRySUQ0K1BpQXdlREU0WFR0Y2JpQWdJQ0FnSUNBZ2FXWWdLSEFnUGowZ01DbGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjQ0FySUNocElDb2dNeklwSUNzZ2FqdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJQzB4TzF4dUlDQjlYRzU5WEc0aVhYMD0iLCIvKipcbiAqIEdlbmVyYXRlcyBzaW5nbGUgcmFuZG9tIGZsb2F0IGZyb20gMCB0byByYW5nZS5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge251bWJlcn0gcmFuZ2UgTWF4IGdlbmVyYXRpbmcgdmFsdWUuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEEgcmFuZG9tIGZsb2F0IGdlbmVyYXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbUZsb2F0KHJhbmdlKSB7XG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiByYW5nZTtcbn1cbi8qKlxuICogR2VuZXJhdGVzIHNpbmdsZSByYW5kb20gaW50ZWdlciBmcm9tIDAgdG8gcmFuZ2UuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtudW1iZXJ9IHJhbmdlIE1heCBnZW5lcmF0aW5nIHZhbHVlLlxuICogQHJldHVybiB7bnVtYmVyfSBBIHJhbmRvbSBpbnRlZ2VyIGdlbmVyYXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbUludChyYW5nZSkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKHJhbmRvbUZsb2F0KHJhbmdlKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljbUZ1Wkc5dExtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpY21GdVpHOXRMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQk96czdPenM3UjBGTlJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4WFFVRlhMRU5CUVVNc1MwRkJZVHRKUVVOMlF5eFBRVUZQTEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGREwwSXNRMEZCUXp0QlFVVkVPenM3T3pzN1IwRk5SenRCUVVOSUxFMUJRVTBzVlVGQlZTeFRRVUZUTEVOQlFVTXNTMEZCWVR0SlFVTnlReXhQUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNWMEZCVnl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGVFTXNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWeklITnBibWRzWlNCeVlXNWtiMjBnWm14dllYUWdabkp2YlNBd0lIUnZJSEpoYm1kbExseHVJQ3BjYmlBcUlFQmxlSEJ2Y25SY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQnlZVzVuWlNCTllYZ2daMlZ1WlhKaGRHbHVaeUIyWVd4MVpTNWNiaUFxSUVCeVpYUjFjbTRnZTI1MWJXSmxjbjBnUVNCeVlXNWtiMjBnWm14dllYUWdaMlZ1WlhKaGRHVmtMbHh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2NtRnVaRzl0Um14dllYUW9jbUZ1WjJVNklHNTFiV0psY2lrNklHNTFiV0psY2lCN1hHNGdJSEpsZEhWeWJpQk5ZWFJvTG5KaGJtUnZiU2dwSUNvZ2NtRnVaMlU3WEc1OVhHNWNiaThxS2x4dUlDb2dSMlZ1WlhKaGRHVnpJSE5wYm1kc1pTQnlZVzVrYjIwZ2FXNTBaV2RsY2lCbWNtOXRJREFnZEc4Z2NtRnVaMlV1WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUhKaGJtZGxJRTFoZUNCblpXNWxjbUYwYVc1bklIWmhiSFZsTGx4dUlDb2dRSEpsZEhWeWJpQjdiblZ0WW1WeWZTQkJJSEpoYm1SdmJTQnBiblJsWjJWeUlHZGxibVZ5WVhSbFpDNWNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhKaGJtUnZiVWx1ZENoeVlXNW5aVG9nYm5WdFltVnlLVG9nYm5WdFltVnlJSHRjYmlBZ2NtVjBkWEp1SUUxaGRHZ3VabXh2YjNJb2NtRnVaRzl0Um14dllYUW9jbUZ1WjJVcEtUdGNibjFjYmlKZGZRPT0iLCJpbXBvcnQgeyByYW5kb21JbnQgfSBmcm9tICcuL3JhbmRvbSc7XG5leHBvcnQgY29uc3Qgc2ltaWxhcml0eU1ldHJpYyA9IHtcbiAgICAnVGFuaW1vdG8nOiB0YW5pbW90b1NpbWlsYXJpdHksXG4gICAgJ0RpY2UnOiBkaWNlU2ltaWxhcml0eSxcbiAgICAnQXN5bW1ldHJpYyc6IGFzeW1tZXRyaWNTaW1pbGFyaXR5LFxuICAgICdCcmF1bi1CbGFucXVldCc6IGJyYXVuQmxhbnF1ZXRTaW1pbGFyaXR5LFxuICAgICdDb3NpbmUnOiBjb3NpbmVTaW1pbGFyaXR5LFxuICAgICdLdWxjenluc2tpJzoga3VsY3p5bnNraVNpbWlsYXJpdHksXG4gICAgJ01jLUNvbm5hdWdoZXknOiBtY0Nvbm5hdWdoZXlTaW1pbGFyaXR5LFxuICAgICdSb2dvdC1Hb2xkYmVyZyc6IHJvZ290R29sZGJlcmdTaW1pbGFyaXR5LFxuICAgICdSdXNzZWwnOiBydXNzZWxTaW1pbGFyaXR5LFxuICAgICdTb2thbCc6IHNva2FsU2ltaWxhcml0eSxcbiAgICAnSGFtbWluZyc6IGhhbW1pbmdTaW1pbGFyaXR5LFxuICAgICdFdWNsaWRlYW4nOiBldWNsaWRlYW5TaW1pbGFyaXR5LFxufTtcbmV4cG9ydCBjb25zdCBDSEVNX1NJTUlMQVJJVFlfTUVUUklDUyA9IFsnVGFuaW1vdG8nLCAnRGljZScsICdDb3NpbmUnLCAnSGFtbWluZycsICdFdWNsaWRlYW4nXTtcbmV4cG9ydCBmdW5jdGlvbiB0YW5pbW90b1NpbWlsYXJpdHkoeCwgeSkge1xuICAgIGNvbnN0IHRvdGFsID0geC50cnVlQ291bnQoKSArIHkudHJ1ZUNvdW50KCk7XG4gICAgaWYgKHRvdGFsID09IDApXG4gICAgICAgIHJldHVybiAxLjA7XG4gICAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICAgIHJldHVybiBjb21tb24gLyAodG90YWwgLSBjb21tb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRpY2VTaW1pbGFyaXR5KHgsIHkpIHtcbiAgICBjb25zdCB0b3RhbCA9IHgudHJ1ZUNvdW50KCkgKyB5LnRydWVDb3VudCgpO1xuICAgIGlmICh0b3RhbCA9PSAwKVxuICAgICAgICByZXR1cm4gMC4wO1xuICAgIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgICByZXR1cm4gMiAqIGNvbW1vbiAvIHRvdGFsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNvc2luZVNpbWlsYXJpdHkoeCwgeSkge1xuICAgIGNvbnN0IHRvdGFsID0geC50cnVlQ291bnQoKSAqIHkudHJ1ZUNvdW50KCk7XG4gICAgaWYgKHRvdGFsID09IDApXG4gICAgICAgIHJldHVybiAwLjA7XG4gICAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICAgIHJldHVybiBjb21tb24gLyBNYXRoLnNxcnQodG90YWwpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGV1Y2xpZGVhblNpbWlsYXJpdHkoeCwgeSkge1xuICAgIGNvbnN0IGV1Y2xpZGVhbkRpc3RhbmNlID0gTWF0aC5zcXJ0KHgudHJ1ZUNvdW50KCkgKyB5LnRydWVDb3VudCgpIC0gMiAqIHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKSk7XG4gICAgcmV0dXJuIDEgLyAoMSArIGV1Y2xpZGVhbkRpc3RhbmNlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBoYW1taW5nU2ltaWxhcml0eSh4LCB5KSB7XG4gICAgY29uc3QgaGFtbWluZ0Rpc3RhbmNlID0geC50cnVlQ291bnQoKSArIHkudHJ1ZUNvdW50KCkgLSAyICogeC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICAgIHJldHVybiAxIC8gKDEgKyBoYW1taW5nRGlzdGFuY2UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNva2FsU2ltaWxhcml0eSh4LCB5KSB7XG4gICAgY29uc3QgdG90YWwgPSB4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKTtcbiAgICBjb25zdCBjb21tb24gPSB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG4gICAgcmV0dXJuIGNvbW1vbiAvICgyICogdG90YWwgLSAzICogY29tbW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBrdWxjenluc2tpU2ltaWxhcml0eSh4LCB5KSB7XG4gICAgY29uc3QgdG90YWwgPSB4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKTtcbiAgICBjb25zdCB0b3RhbFByb2QgPSB4LnRydWVDb3VudCgpICogeS50cnVlQ291bnQoKTtcbiAgICBpZiAodG90YWxQcm9kID09IDApXG4gICAgICAgIHJldHVybiAwLjA7XG4gICAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICAgIHJldHVybiAoY29tbW9uICogdG90YWwpIC8gKDIgKiB0b3RhbFByb2QpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1jQ29ubmF1Z2hleVNpbWlsYXJpdHkoeCwgeSkge1xuICAgIGNvbnN0IHRvdGFsID0geC50cnVlQ291bnQoKSArIHkudHJ1ZUNvdW50KCk7XG4gICAgY29uc3QgdG90YWxQcm9kID0geC50cnVlQ291bnQoKSAqIHkudHJ1ZUNvdW50KCk7XG4gICAgaWYgKHRvdGFsUHJvZCA9PSAwKVxuICAgICAgICByZXR1cm4gMC4wO1xuICAgIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgICByZXR1cm4gKGNvbW1vbiAqIHRvdGFsIC0gdG90YWxQcm9kKSAvIHRvdGFsUHJvZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3ltbWV0cmljU2ltaWxhcml0eSh4LCB5KSB7XG4gICAgY29uc3QgbWluID0gTWF0aC5taW4oeC50cnVlQ291bnQoKSwgeS50cnVlQ291bnQoKSk7XG4gICAgaWYgKG1pbiA9PSAwKVxuICAgICAgICByZXR1cm4gMC4wO1xuICAgIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgICByZXR1cm4gY29tbW9uIC8gbWluO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGJyYXVuQmxhbnF1ZXRTaW1pbGFyaXR5KHgsIHkpIHtcbiAgICBjb25zdCBtYXggPSBNYXRoLm1heCh4LnRydWVDb3VudCgpLCB5LnRydWVDb3VudCgpKTtcbiAgICBpZiAobWF4ID09IDApXG4gICAgICAgIHJldHVybiAwLjA7XG4gICAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICAgIHJldHVybiBjb21tb24gLyBtYXg7XG59XG5leHBvcnQgZnVuY3Rpb24gcnVzc2VsU2ltaWxhcml0eSh4LCB5KSB7XG4gICAgaWYgKHgubGVuZ3RoID09IDApXG4gICAgICAgIHJldHVybiAwLjA7XG4gICAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICAgIHJldHVybiBjb21tb24gLyB4Lmxlbmd0aDtcbn1cbmV4cG9ydCBmdW5jdGlvbiByb2dvdEdvbGRiZXJnU2ltaWxhcml0eSh4LCB5KSB7XG4gICAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICAgIGNvbnN0IHRvdGFsID0geC5jb3VudEJpdHModHJ1ZSkgKyB5LmNvdW50Qml0cyh0cnVlKTtcbiAgICBjb25zdCBsZW4gPSB4Lmxlbmd0aDtcbiAgICBjb25zdCBkaWZmID0gbGVuIC0gdG90YWwgKyBjb21tb247XG4gICAgaWYgKChjb21tb24gPT0gbGVuKSB8fCAoZGlmZiA9PSBsZW4pKVxuICAgICAgICByZXR1cm4gMS4wO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGNvbW1vbiAvIHRvdGFsICsgZGlmZiAvICgyICogbGVuIC0gdG90YWwpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERpdmVyc2VTdWJzZXQobGVuZ3RoLCBuLCBkaXN0KSB7XG4gICAgZnVuY3Rpb24gbWF4QnkodmFsdWVzLCBvcmRlckJ5KSB7XG4gICAgICAgIGxldCBtYXhWYWx1ZSA9IG51bGw7XG4gICAgICAgIGxldCBtYXhPcmRlckJ5ID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudE9yZGVyQnkgPSBvcmRlckJ5KGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKG1heE9yZGVyQnkgPT0gbnVsbCB8fCBlbGVtZW50T3JkZXJCeSA+IG1heE9yZGVyQnkpIHtcbiAgICAgICAgICAgICAgICBtYXhWYWx1ZSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgbWF4T3JkZXJCeSA9IGVsZW1lbnRPcmRlckJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXhWYWx1ZTtcbiAgICB9XG4gICAgY29uc3Qgc3Vic2V0ID0gW3JhbmRvbUludChsZW5ndGggLSAxKV07XG4gICAgY29uc3QgY29tcGxlbWVudCA9IG5ldyBTZXQoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICghc3Vic2V0LmluY2x1ZGVzKGkpKVxuICAgICAgICAgICAgY29tcGxlbWVudC5hZGQoaSk7XG4gICAgfVxuICAgIHdoaWxlIChzdWJzZXQubGVuZ3RoIDwgbikge1xuICAgICAgICBjb25zdCBpZHggPSBtYXhCeShjb21wbGVtZW50LnZhbHVlcygpLCAoaSkgPT4gTWF0aC5taW4uYXBwbHkoTWF0aCwgc3Vic2V0Lm1hcChmdW5jdGlvbiAodmFsLCBpbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIGRpc3QoaSwgdmFsKTtcbiAgICAgICAgfSkpKTtcbiAgICAgICAgaWYgKGlkeCkge1xuICAgICAgICAgICAgc3Vic2V0LnB1c2goaWR4KTtcbiAgICAgICAgICAgIGNvbXBsZW1lbnQuZGVsZXRlKGlkeCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN1YnNldDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWMybHRhV3hoY21sMGVTMXRaWFJ5YVdOekxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpYzJsdGFXeGhjbWwwZVMxdFpYUnlhV056TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFVTkJMRTlCUVU4c1JVRkJReXhUUVVGVExFVkJRVU1zVFVGQlRTeFZRVUZWTEVOQlFVTTdRVUZGYmtNc1RVRkJUU3hEUVVGRExFMUJRVTBzWjBKQlFXZENMRWRCUVRKRU8wbEJRM1JHTEZWQlFWVXNSVUZCUlN4clFrRkJhMEk3U1VGRE9VSXNUVUZCVFN4RlFVRkZMR05CUVdNN1NVRkRkRUlzV1VGQldTeEZRVUZGTEc5Q1FVRnZRanRKUVVOc1F5eG5Ra0ZCWjBJc1JVRkJSU3gxUWtGQmRVSTdTVUZEZWtNc1VVRkJVU3hGUVVGRkxHZENRVUZuUWp0SlFVTXhRaXhaUVVGWkxFVkJRVVVzYjBKQlFXOUNPMGxCUTJ4RExHVkJRV1VzUlVGQlJTeHpRa0ZCYzBJN1NVRkRka01zWjBKQlFXZENMRVZCUVVVc2RVSkJRWFZDTzBsQlEzcERMRkZCUVZFc1JVRkJSU3huUWtGQlowSTdTVUZETVVJc1QwRkJUeXhGUVVGRkxHVkJRV1U3U1VGRGVFSXNVMEZCVXl4RlFVRkZMR2xDUVVGcFFqdEpRVU0xUWl4WFFVRlhMRVZCUVVVc2JVSkJRVzFDTzBOQlEycERMRU5CUVVNN1FVRkZSaXhOUVVGTkxFTkJRVU1zVFVGQlRTeDFRa0ZCZFVJc1IwRkJSeXhEUVVGRExGVkJRVlVzUlVGQlJTeE5RVUZOTEVWQlFVVXNVVUZCVVN4RlFVRkZMRk5CUVZNc1JVRkJSU3hYUVVGWExFTkJRVU1zUTBGQlF6dEJRVVU1Uml4TlFVRk5MRlZCUVZVc2EwSkJRV3RDTEVOQlFVTXNRMEZCVnl4RlFVRkZMRU5CUVZjN1NVRkRla1FzVFVGQlRTeExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRMRk5CUVZNc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXp0SlFVTTFReXhKUVVGSkxFdEJRVXNzU1VGQlNTeERRVUZETzFGQlExb3NUMEZCVHl4SFFVRkhMRU5CUVVNN1NVRkRZaXhOUVVGTkxFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUXpORExFOUJRVThzVFVGQlRTeEhRVUZITEVOQlFVTXNTMEZCU3l4SFFVRkhMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRMjVETEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc1kwRkJZeXhEUVVGRExFTkJRVmNzUlVGQlJTeERRVUZYTzBsQlEzSkVMRTFCUVUwc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF5eFRRVUZUTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNc1UwRkJVeXhGUVVGRkxFTkJRVU03U1VGRE5VTXNTVUZCU1N4TFFVRkxMRWxCUVVrc1EwRkJRenRSUVVOYUxFOUJRVThzUjBGQlJ5eERRVUZETzBsQlEySXNUVUZCVFN4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRExHZENRVUZuUWl4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVU16UXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhOUVVGTkxFZEJRVWNzUzBGQlN5eERRVUZETzBGQlF6VkNMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzWjBKQlFXZENMRU5CUVVNc1EwRkJWeXhGUVVGRkxFTkJRVmM3U1VGRGRrUXNUVUZCVFN4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRExGTkJRVk1zUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXl4VFFVRlRMRVZCUVVVc1EwRkJRenRKUVVNMVF5eEpRVUZKTEV0QlFVc3NTVUZCU1N4RFFVRkRPMUZCUTFvc1QwRkJUeXhIUVVGSExFTkJRVU03U1VGRFlpeE5RVUZOTEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRek5ETEU5QlFVOHNUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZEYmtNc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeHRRa0ZCYlVJc1EwRkJReXhEUVVGWExFVkJRVVVzUTBGQlZ6dEpRVU14UkN4TlFVRk5MR2xDUVVGcFFpeEhRVUZITEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExGTkJRVk1zUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXl4VFFVRlRMRVZCUVVVc1IwRkJSeXhEUVVGRExFZEJRVU1zUTBGQlF5eERRVUZETEdkQ1FVRm5RaXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTI1SExFOUJRVThzUTBGQlF5eEhRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkRMR2xDUVVGcFFpeERRVUZETEVOQlFVTTdRVUZEYWtNc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeHBRa0ZCYVVJc1EwRkJReXhEUVVGWExFVkJRVVVzUTBGQlZ6dEpRVU40UkN4TlFVRk5MR1ZCUVdVc1IwRkJSeXhEUVVGRExFTkJRVU1zVTBGQlV5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRk5CUVZNc1JVRkJSU3hIUVVGSExFTkJRVU1zUjBGQlF5eERRVUZETEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUTNSR0xFOUJRVThzUTBGQlF5eEhRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkRMR1ZCUVdVc1EwRkJReXhEUVVGRE8wRkJReTlDTEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc1pVRkJaU3hEUVVGRExFTkJRVmNzUlVGQlJTeERRVUZYTzBsQlEzUkVMRTFCUVUwc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF5eFRRVUZUTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNc1UwRkJVeXhGUVVGRkxFTkJRVU03U1VGRE5VTXNUVUZCVFN4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRExHZENRVUZuUWl4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVU16UXl4UFFVRlBMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eExRVUZMTEVkQlFVY3NRMEZCUXl4SFFVRkhMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRek5ETEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc2IwSkJRVzlDTEVOQlFVTXNRMEZCVnl4RlFVRkZMRU5CUVZjN1NVRkRNMFFzVFVGQlRTeExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRMRk5CUVZNc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXp0SlFVTTFReXhOUVVGTkxGTkJRVk1zUjBGQlJ5eERRVUZETEVOQlFVTXNVMEZCVXl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZETzBsQlEyaEVMRWxCUVVrc1UwRkJVeXhKUVVGSkxFTkJRVU03VVVGRGFFSXNUMEZCVHl4SFFVRkhMRU5CUVVNN1NVRkRZaXhOUVVGTkxFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUXpORExFOUJRVThzUTBGQlF5eE5RVUZOTEVkQlFVY3NTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzVTBGQlV5eERRVUZETEVOQlFVTTdRVUZETlVNc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeHpRa0ZCYzBJc1EwRkJReXhEUVVGWExFVkJRVVVzUTBGQlZ6dEpRVU0zUkN4TlFVRk5MRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU1zVTBGQlV5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8wbEJRelZETEUxQlFVMHNVMEZCVXl4SFFVRkhMRU5CUVVNc1EwRkJReXhUUVVGVExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVNN1NVRkRhRVFzU1VGQlNTeFRRVUZUTEVsQlFVa3NRMEZCUXp0UlFVTm9RaXhQUVVGUExFZEJRVWNzUTBGQlF6dEpRVU5pTEUxQlFVMHNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRE0wTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1IwRkJSeXhMUVVGTExFZEJRVWNzVTBGQlV5eERRVUZETEVkQlFVY3NVMEZCVXl4RFFVRkRPMEZCUTJ4RUxFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNiMEpCUVc5Q0xFTkJRVU1zUTBGQlZ5eEZRVUZGTEVOQlFWYzdTVUZETTBRc1RVRkJUU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1NVRkRia1FzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTldMRTlCUVU4c1IwRkJSeXhEUVVGRE8wbEJRMklzVFVGQlRTeE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMR2RDUVVGblFpeERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVNelF5eFBRVUZQTEUxQlFVMHNSMEZCUnl4SFFVRkhMRU5CUVVNN1FVRkRkRUlzUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4MVFrRkJkVUlzUTBGQlF5eERRVUZYTEVWQlFVVXNRMEZCVnp0SlFVTTVSQ3hOUVVGTkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhUUVVGVExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVNc1EwRkJRenRKUVVOdVJDeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTFZc1QwRkJUeXhIUVVGSExFTkJRVU03U1VGRFlpeE5RVUZOTEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRek5ETEU5QlFVOHNUVUZCVFN4SFFVRkhMRWRCUVVjc1EwRkJRenRCUVVOMFFpeERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMR2RDUVVGblFpeERRVUZETEVOQlFWY3NSVUZCUlN4RFFVRlhPMGxCUTNaRUxFbEJRVWtzUTBGQlF5eERRVUZETEUxQlFVMHNTVUZCU1N4RFFVRkRPMUZCUTJZc1QwRkJUeXhIUVVGSExFTkJRVU03U1VGRFlpeE5RVUZOTEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRek5ETEU5QlFVOHNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU03UVVGRE0wSXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3gxUWtGQmRVSXNRMEZCUXl4RFFVRlhMRVZCUVVVc1EwRkJWenRKUVVNNVJDeE5RVUZOTEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRek5ETEUxQlFVMHNTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVU53UkN4TlFVRk5MRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETzBsQlEzSkNMRTFCUVUwc1NVRkJTU3hIUVVGSExFZEJRVWNzUjBGQlJ5eExRVUZMTEVkQlFVY3NUVUZCVFN4RFFVRkRPMGxCUTJ4RExFbEJRVWtzUTBGQlF5eE5RVUZOTEVsQlFVa3NSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFbEJRVWtzUjBGQlJ5eERRVUZETzFGQlFVVXNUMEZCVHl4SFFVRkhMRU5CUVVNN08xRkJRelZETEU5QlFVOHNUVUZCVFN4SFFVRkhMRXRCUVVzc1IwRkJSeXhKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NSMEZCUnl4SFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRM2hFTEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc1owSkJRV2RDTEVOQlFVTXNUVUZCWXl4RlFVRkZMRU5CUVZNc1JVRkJSU3hKUVVGM1F6dEpRVU5zUnl4VFFVRlRMRXRCUVVzc1EwRkJReXhOUVVGblF5eEZRVUZGTEU5QlFUaENPMUZCUXpkRkxFbEJRVWtzVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTndRaXhKUVVGSkxGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTTdVVUZGZEVJc1MwRkJTeXhOUVVGTkxFOUJRVThzU1VGQlNTeE5RVUZOTEVWQlFVVTdXVUZETlVJc1RVRkJUU3hqUVVGakxFZEJRVWNzVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMWxCUTNoRExFbEJRVWtzVlVGQlZTeEpRVUZKTEVsQlFVa3NTVUZCU1N4alFVRmpMRWRCUVVjc1ZVRkJWU3hGUVVGRk8yZENRVU55UkN4UlFVRlJMRWRCUVVjc1QwRkJUeXhEUVVGRE8yZENRVU51UWl4VlFVRlZMRWRCUVVjc1kwRkJZeXhEUVVGRE8yRkJRemRDTzFOQlEwWTdVVUZEUkN4UFFVRlBMRkZCUVZFc1EwRkJRenRKUVVOc1FpeERRVUZETzBsQlJVUXNUVUZCVFN4TlFVRk5MRWRCUVVjc1EwRkJReXhUUVVGVExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRka01zVFVGQlRTeFZRVUZWTEVkQlFVY3NTVUZCU1N4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVVM1FpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVFVGQlRTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZPMUZCUXk5Q0xFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOeVFpeFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wdEJRM0pDTzBsQlJVUXNUMEZCVHl4TlFVRk5MRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUlVGQlJUdFJRVU40UWl4TlFVRk5MRWRCUVVjc1IwRkJSeXhMUVVGTExFTkJRMllzVlVGQlZTeERRVUZETEUxQlFVMHNSVUZCT0VJc1JVRkRMME1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NSVUZCUlN4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExGVkJRVk1zUjBGQlJ5eEZRVUZGTEV0QlFVczdXVUZEZUVRc1QwRkJUeXhKUVVGSkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNSQ0xFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTlFMRWxCUVVrc1IwRkJSeXhGUVVGRk8xbEJRMUFzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVOcVFpeFZRVUZWTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xTkJRM2hDTzB0QlEwWTdTVUZEUkN4UFFVRlBMRTFCUVUwc1EwRkJRenRCUVVOb1FpeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUVKcGRFRnljbUY1SUdaeWIyMGdKeTR2WW1sMExXRnljbUY1Snp0Y2JtbHRjRzl5ZENCN2NtRnVaRzl0U1c1MGZTQm1jbTl0SUNjdUwzSmhibVJ2YlNjN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCemFXMXBiR0Z5YVhSNVRXVjBjbWxqT2lCN1cyNWhiV1U2SUhOMGNtbHVaMTA2SUNoNE9pQkNhWFJCY25KaGVTd2dlVG9nUW1sMFFYSnlZWGtwSUQwK0lHNTFiV0psY24wZ1BTQjdYRzRnSUNkVVlXNXBiVzkwYnljNklIUmhibWx0YjNSdlUybHRhV3hoY21sMGVTeGNiaUFnSjBScFkyVW5PaUJrYVdObFUybHRhV3hoY21sMGVTeGNiaUFnSjBGemVXMXRaWFJ5YVdNbk9pQmhjM2x0YldWMGNtbGpVMmx0YVd4aGNtbDBlU3hjYmlBZ0owSnlZWFZ1TFVKc1lXNXhkV1YwSnpvZ1luSmhkVzVDYkdGdWNYVmxkRk5wYldsc1lYSnBkSGtzWEc0Z0lDZERiM05wYm1Vbk9pQmpiM05wYm1WVGFXMXBiR0Z5YVhSNUxGeHVJQ0FuUzNWc1kzcDVibk5yYVNjNklHdDFiR042ZVc1emEybFRhVzFwYkdGeWFYUjVMRnh1SUNBblRXTXRRMjl1Ym1GMVoyaGxlU2M2SUcxalEyOXVibUYxWjJobGVWTnBiV2xzWVhKcGRIa3NYRzRnSUNkU2IyZHZkQzFIYjJ4a1ltVnlaeWM2SUhKdloyOTBSMjlzWkdKbGNtZFRhVzFwYkdGeWFYUjVMRnh1SUNBblVuVnpjMlZzSnpvZ2NuVnpjMlZzVTJsdGFXeGhjbWwwZVN4Y2JpQWdKMU52YTJGc0p6b2djMjlyWVd4VGFXMXBiR0Z5YVhSNUxGeHVJQ0FuU0dGdGJXbHVaeWM2SUdoaGJXMXBibWRUYVcxcGJHRnlhWFI1TEZ4dUlDQW5SWFZqYkdsa1pXRnVKem9nWlhWamJHbGtaV0Z1VTJsdGFXeGhjbWwwZVN4Y2JuMDdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQkRTRVZOWDFOSlRVbE1RVkpKVkZsZlRVVlVVa2xEVXlBOUlGc25WR0Z1YVcxdmRHOG5MQ0FuUkdsalpTY3NJQ2REYjNOcGJtVW5MQ0FuU0dGdGJXbHVaeWNzSUNkRmRXTnNhV1JsWVc0blhUdGNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSFJoYm1sdGIzUnZVMmx0YVd4aGNtbDBlU2g0T2lCQ2FYUkJjbkpoZVN3Z2VUb2dRbWwwUVhKeVlYa3BPaUJ1ZFcxaVpYSWdlMXh1SUNCamIyNXpkQ0IwYjNSaGJDQTlJSGd1ZEhKMVpVTnZkVzUwS0NrZ0t5QjVMblJ5ZFdWRGIzVnVkQ2dwTzF4dUlDQnBaaUFvZEc5MFlXd2dQVDBnTUNsY2JpQWdJQ0J5WlhSMWNtNGdNUzR3TzF4dUlDQmpiMjV6ZENCamIyMXRiMjRnUFNCNExtRnVaRmRwZEdoRGIzVnVkRUpwZEhNb2VTd2dkSEoxWlNrN1hHNGdJSEpsZEhWeWJpQmpiMjF0YjI0Z0x5QW9kRzkwWVd3Z0xTQmpiMjF0YjI0cE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWkdsalpWTnBiV2xzWVhKcGRIa29lRG9nUW1sMFFYSnlZWGtzSUhrNklFSnBkRUZ5Y21GNUtUb2diblZ0WW1WeUlIdGNiaUFnWTI5dWMzUWdkRzkwWVd3Z1BTQjRMblJ5ZFdWRGIzVnVkQ2dwSUNzZ2VTNTBjblZsUTI5MWJuUW9LVHRjYmlBZ2FXWWdLSFJ2ZEdGc0lEMDlJREFwWEc0Z0lDQWdjbVYwZFhKdUlEQXVNRHRjYmlBZ1kyOXVjM1FnWTI5dGJXOXVJRDBnZUM1aGJtUlhhWFJvUTI5MWJuUkNhWFJ6S0hrc0lIUnlkV1VwTzF4dUlDQnlaWFIxY200Z01pQXFJR052YlcxdmJpQXZJSFJ2ZEdGc08xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWTI5emFXNWxVMmx0YVd4aGNtbDBlU2g0T2lCQ2FYUkJjbkpoZVN3Z2VUb2dRbWwwUVhKeVlYa3BPaUJ1ZFcxaVpYSWdlMXh1SUNCamIyNXpkQ0IwYjNSaGJDQTlJSGd1ZEhKMVpVTnZkVzUwS0NrZ0tpQjVMblJ5ZFdWRGIzVnVkQ2dwTzF4dUlDQnBaaUFvZEc5MFlXd2dQVDBnTUNsY2JpQWdJQ0J5WlhSMWNtNGdNQzR3TzF4dUlDQmpiMjV6ZENCamIyMXRiMjRnUFNCNExtRnVaRmRwZEdoRGIzVnVkRUpwZEhNb2VTd2dkSEoxWlNrN1hHNGdJSEpsZEhWeWJpQmpiMjF0YjI0Z0x5Qk5ZWFJvTG5OeGNuUW9kRzkwWVd3cE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWlhWamJHbGtaV0Z1VTJsdGFXeGhjbWwwZVNoNE9pQkNhWFJCY25KaGVTd2dlVG9nUW1sMFFYSnlZWGtwT2lCdWRXMWlaWElnZTF4dUlDQmpiMjV6ZENCbGRXTnNhV1JsWVc1RWFYTjBZVzVqWlNBOUlFMWhkR2d1YzNGeWRDaDRMblJ5ZFdWRGIzVnVkQ2dwSUNzZ2VTNTBjblZsUTI5MWJuUW9LU0F0SURJcWVDNWhibVJYYVhSb1EyOTFiblJDYVhSektIa3NJSFJ5ZFdVcEtUdGNiaUFnY21WMGRYSnVJREV2S0RFclpYVmpiR2xrWldGdVJHbHpkR0Z1WTJVcE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYUdGdGJXbHVaMU5wYldsc1lYSnBkSGtvZURvZ1FtbDBRWEp5WVhrc0lIazZJRUpwZEVGeWNtRjVLVG9nYm5WdFltVnlJSHRjYmlBZ1kyOXVjM1FnYUdGdGJXbHVaMFJwYzNSaGJtTmxJRDBnZUM1MGNuVmxRMjkxYm5Rb0tTQXJJSGt1ZEhKMVpVTnZkVzUwS0NrZ0xTQXlLbmd1WVc1a1YybDBhRU52ZFc1MFFtbDBjeWg1TENCMGNuVmxLVHRjYmlBZ2NtVjBkWEp1SURFdktERXJhR0Z0YldsdVowUnBjM1JoYm1ObEtUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhOdmEyRnNVMmx0YVd4aGNtbDBlU2g0T2lCQ2FYUkJjbkpoZVN3Z2VUb2dRbWwwUVhKeVlYa3BPaUJ1ZFcxaVpYSWdlMXh1SUNCamIyNXpkQ0IwYjNSaGJDQTlJSGd1ZEhKMVpVTnZkVzUwS0NrZ0t5QjVMblJ5ZFdWRGIzVnVkQ2dwTzF4dUlDQmpiMjV6ZENCamIyMXRiMjRnUFNCNExtRnVaRmRwZEdoRGIzVnVkRUpwZEhNb2VTd2dkSEoxWlNrN1hHNGdJSEpsZEhWeWJpQmpiMjF0YjI0Z0x5QW9NaUFxSUhSdmRHRnNJQzBnTXlBcUlHTnZiVzF2YmlrN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJyZFd4amVubHVjMnRwVTJsdGFXeGhjbWwwZVNoNE9pQkNhWFJCY25KaGVTd2dlVG9nUW1sMFFYSnlZWGtwT2lCdWRXMWlaWElnZTF4dUlDQmpiMjV6ZENCMGIzUmhiQ0E5SUhndWRISjFaVU52ZFc1MEtDa2dLeUI1TG5SeWRXVkRiM1Z1ZENncE8xeHVJQ0JqYjI1emRDQjBiM1JoYkZCeWIyUWdQU0I0TG5SeWRXVkRiM1Z1ZENncElDb2dlUzUwY25WbFEyOTFiblFvS1R0Y2JpQWdhV1lnS0hSdmRHRnNVSEp2WkNBOVBTQXdLVnh1SUNBZ0lISmxkSFZ5YmlBd0xqQTdYRzRnSUdOdmJuTjBJR052YlcxdmJpQTlJSGd1WVc1a1YybDBhRU52ZFc1MFFtbDBjeWg1TENCMGNuVmxLVHRjYmlBZ2NtVjBkWEp1SUNoamIyMXRiMjRnS2lCMGIzUmhiQ2tnTHlBb01pQXFJSFJ2ZEdGc1VISnZaQ2s3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnRZME52Ym01aGRXZG9aWGxUYVcxcGJHRnlhWFI1S0hnNklFSnBkRUZ5Y21GNUxDQjVPaUJDYVhSQmNuSmhlU2s2SUc1MWJXSmxjaUI3WEc0Z0lHTnZibk4wSUhSdmRHRnNJRDBnZUM1MGNuVmxRMjkxYm5Rb0tTQXJJSGt1ZEhKMVpVTnZkVzUwS0NrN1hHNGdJR052Ym5OMElIUnZkR0ZzVUhKdlpDQTlJSGd1ZEhKMVpVTnZkVzUwS0NrZ0tpQjVMblJ5ZFdWRGIzVnVkQ2dwTzF4dUlDQnBaaUFvZEc5MFlXeFFjbTlrSUQwOUlEQXBYRzRnSUNBZ2NtVjBkWEp1SURBdU1EdGNiaUFnWTI5dWMzUWdZMjl0Ylc5dUlEMGdlQzVoYm1SWGFYUm9RMjkxYm5SQ2FYUnpLSGtzSUhSeWRXVXBPMXh1SUNCeVpYUjFjbTRnS0dOdmJXMXZiaUFxSUhSdmRHRnNJQzBnZEc5MFlXeFFjbTlrS1NBdklIUnZkR0ZzVUhKdlpEdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdGemVXMXRaWFJ5YVdOVGFXMXBiR0Z5YVhSNUtIZzZJRUpwZEVGeWNtRjVMQ0I1T2lCQ2FYUkJjbkpoZVNrNklHNTFiV0psY2lCN1hHNGdJR052Ym5OMElHMXBiaUE5SUUxaGRHZ3ViV2x1S0hndWRISjFaVU52ZFc1MEtDa3NJSGt1ZEhKMVpVTnZkVzUwS0NrcE8xeHVJQ0JwWmlBb2JXbHVJRDA5SURBcFhHNGdJQ0FnY21WMGRYSnVJREF1TUR0Y2JpQWdZMjl1YzNRZ1kyOXRiVzl1SUQwZ2VDNWhibVJYYVhSb1EyOTFiblJDYVhSektIa3NJSFJ5ZFdVcE8xeHVJQ0J5WlhSMWNtNGdZMjl0Ylc5dUlDOGdiV2x1TzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdZbkpoZFc1Q2JHRnVjWFZsZEZOcGJXbHNZWEpwZEhrb2VEb2dRbWwwUVhKeVlYa3NJSGs2SUVKcGRFRnljbUY1S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdZMjl1YzNRZ2JXRjRJRDBnVFdGMGFDNXRZWGdvZUM1MGNuVmxRMjkxYm5Rb0tTd2dlUzUwY25WbFEyOTFiblFvS1NrN1hHNGdJR2xtSUNodFlYZ2dQVDBnTUNsY2JpQWdJQ0J5WlhSMWNtNGdNQzR3TzF4dUlDQmpiMjV6ZENCamIyMXRiMjRnUFNCNExtRnVaRmRwZEdoRGIzVnVkRUpwZEhNb2VTd2dkSEoxWlNrN1hHNGdJSEpsZEhWeWJpQmpiMjF0YjI0Z0x5QnRZWGc3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnlkWE56Wld4VGFXMXBiR0Z5YVhSNUtIZzZJRUpwZEVGeWNtRjVMQ0I1T2lCQ2FYUkJjbkpoZVNrNklHNTFiV0psY2lCN1hHNGdJR2xtSUNoNExteGxibWQwYUNBOVBTQXdLVnh1SUNBZ0lISmxkSFZ5YmlBd0xqQTdYRzRnSUdOdmJuTjBJR052YlcxdmJpQTlJSGd1WVc1a1YybDBhRU52ZFc1MFFtbDBjeWg1TENCMGNuVmxLVHRjYmlBZ2NtVjBkWEp1SUdOdmJXMXZiaUF2SUhndWJHVnVaM1JvTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdjbTluYjNSSGIyeGtZbVZ5WjFOcGJXbHNZWEpwZEhrb2VEb2dRbWwwUVhKeVlYa3NJSGs2SUVKcGRFRnljbUY1S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdZMjl1YzNRZ1kyOXRiVzl1SUQwZ2VDNWhibVJYYVhSb1EyOTFiblJDYVhSektIa3NJSFJ5ZFdVcE8xeHVJQ0JqYjI1emRDQjBiM1JoYkNBOUlIZ3VZMjkxYm5SQ2FYUnpLSFJ5ZFdVcElDc2dlUzVqYjNWdWRFSnBkSE1vZEhKMVpTazdYRzRnSUdOdmJuTjBJR3hsYmlBOUlIZ3ViR1Z1WjNSb08xeHVJQ0JqYjI1emRDQmthV1ptSUQwZ2JHVnVJQzBnZEc5MFlXd2dLeUJqYjIxdGIyNDdYRzRnSUdsbUlDZ29ZMjl0Ylc5dUlEMDlJR3hsYmlrZ2ZId2dLR1JwWm1ZZ1BUMGdiR1Z1S1NrZ2NtVjBkWEp1SURFdU1EdGNiaUFnWld4elpTQnlaWFIxY200Z1kyOXRiVzl1SUM4Z2RHOTBZV3dnS3lCa2FXWm1JQzhnS0RJZ0tpQnNaVzRnTFNCMGIzUmhiQ2s3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQm5aWFJFYVhabGNuTmxVM1ZpYzJWMEtHeGxibWQwYURvZ2JuVnRZbVZ5TENCdU9pQnVkVzFpWlhJc0lHUnBjM1E2SUNocE1Ub2diblZ0WW1WeUxDQnBNam9nYm5WdFltVnlLU0E5UGlCdWRXMWlaWElwSUh0Y2JpQWdablZ1WTNScGIyNGdiV0Y0UW5rb2RtRnNkV1Z6T2lCSmRHVnlZV0pzWlVsMFpYSmhkRzl5UEc1MWJXSmxjajRzSUc5eVpHVnlRbms2SUNocE9pQnVkVzFpWlhJcElEMCtJRzUxYldKbGNpa2dlMXh1SUNBZ0lHeGxkQ0J0WVhoV1lXeDFaU0E5SUc1MWJHdzdYRzRnSUNBZ2JHVjBJRzFoZUU5eVpHVnlRbmtnUFNCdWRXeHNPMXh1WEc0Z0lDQWdabTl5SUNoamIyNXpkQ0JsYkdWdFpXNTBJRzltSUhaaGJIVmxjeWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdaV3hsYldWdWRFOXlaR1Z5UW5rZ1BTQnZjbVJsY2tKNUtHVnNaVzFsYm5RcE8xeHVJQ0FnSUNBZ2FXWWdLRzFoZUU5eVpHVnlRbmtnUFQwZ2JuVnNiQ0I4ZkNCbGJHVnRaVzUwVDNKa1pYSkNlU0ErSUcxaGVFOXlaR1Z5UW5rcElIdGNiaUFnSUNBZ0lDQWdiV0Y0Vm1Gc2RXVWdQU0JsYkdWdFpXNTBPMXh1SUNBZ0lDQWdJQ0J0WVhoUGNtUmxja0o1SUQwZ1pXeGxiV1Z1ZEU5eVpHVnlRbms3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCdFlYaFdZV3gxWlR0Y2JpQWdmVnh1WEc0Z0lHTnZibk4wSUhOMVluTmxkQ0E5SUZ0eVlXNWtiMjFKYm5Rb2JHVnVaM1JvSUMwZ01TbGRPMXh1SUNCamIyNXpkQ0JqYjIxd2JHVnRaVzUwSUQwZ2JtVjNJRk5sZENncE8xeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2JHVnVaM1JvT3lBcksya3BJSHRjYmlBZ0lDQnBaaUFvSVhOMVluTmxkQzVwYm1Oc2RXUmxjeWhwS1NsY2JpQWdJQ0FnSUdOdmJYQnNaVzFsYm5RdVlXUmtLR2twTzF4dUlDQjlYRzVjYmlBZ2QyaHBiR1VnS0hOMVluTmxkQzVzWlc1bmRHZ2dQQ0J1S1NCN1hHNGdJQ0FnWTI5dWMzUWdhV1I0SUQwZ2JXRjRRbmtvWEc0Z0lDQWdJQ0JqYjIxd2JHVnRaVzUwTG5aaGJIVmxjeWdwSUdGeklFbDBaWEpoWW14bFNYUmxjbUYwYjNJOGJuVnRZbVZ5UGl4Y2JpQWdJQ0FnSUNocEtTQTlQaUJOWVhSb0xtMXBiaTVoY0hCc2VTaE5ZWFJvTENCemRXSnpaWFF1YldGd0tHWjFibU4wYVc5dUtIWmhiQ3dnYVc1a1pYZ3BJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR1JwYzNRb2FTd2dkbUZzS1R0Y2JpQWdJQ0FnSUgwcEtTazdYRzRnSUNBZ2FXWWdLR2xrZUNrZ2UxeHVJQ0FnSUNBZ2MzVmljMlYwTG5CMWMyZ29hV1I0S1R0Y2JpQWdJQ0FnSUdOdmJYQnNaVzFsYm5RdVpHVnNaWFJsS0dsa2VDazdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCemRXSnpaWFE3WEc1OVhHNGlYWDA9IiwiLyoqXG4gKiBEZW5vdGVzIGEgdmVjdG9yIG9mIGZsb2F0aW5nIHBvaXQgdmFsdWVzLlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBWZWN0b3JcbiAqIEBleHRlbmRzIHtGbG9hdDMyQXJyYXl9XG4gKi9cbmV4cG9ydCBjbGFzcyBWZWN0b3IgZXh0ZW5kcyBGbG9hdDMyQXJyYXkge1xufVxuLyoqXG4gKiBEZW5vdGVzIGEgdHdvLWRpbWVuc2lvbmFsIG1hdHJpeC5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgTWF0cml4XG4gKiBAZXh0ZW5kcyB7QXJyYXk8VmVjdG9yPn1cbiAqL1xuZXhwb3J0IGNsYXNzIE1hdHJpeCBleHRlbmRzIEFycmF5IHtcbn1cbi8qKlxuICogRGVub3RlcyBjYXJ0ZXNpYW4gY29vcmRpbmF0ZXMuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIENvb3JkaW5hdGVzXG4gKiBAZXh0ZW5kcyB7TWF0cml4fVxuICovXG5leHBvcnQgY2xhc3MgQ29vcmRpbmF0ZXMgZXh0ZW5kcyBNYXRyaXgge1xufVxuLyoqXG4gKiBEZW5vdGVzIGFuIGFycmF5IG9mIGFyYml0cmFyeS10eXBlZCB2ZWN0b3JzLlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBWZWN0b3JzXG4gKiBAZXh0ZW5kcyB7QXJyYXk8YW55Pn1cbiAqL1xuZXhwb3J0IGNsYXNzIFZlY3RvcnMgZXh0ZW5kcyBBcnJheSB7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkSGx3WlMxa1pXTnNZWEpoZEdsdmJuTXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKMGVYQmxMV1JsWTJ4aGNtRjBhVzl1Y3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkJRVHM3T3pzN08wZEJUVWM3UVVGRFNDeE5RVUZOTEU5QlFVOHNUVUZCVHl4VFFVRlJMRmxCUVZrN1EwRkJSenRCUVVVelF6czdPenM3TzBkQlRVYzdRVUZEU0N4TlFVRk5MRTlCUVU4c1RVRkJUeXhUUVVGUkxFdEJRV0U3UTBGQlJ6dEJRVVUxUXpzN096czdPMGRCVFVjN1FVRkRTQ3hOUVVGTkxFOUJRVThzVjBGQldTeFRRVUZSTEUxQlFVMDdRMEZCUnp0QlFVVXhRenM3T3pzN08wZEJUVWM3UVVGRFNDeE5RVUZOTEU5QlFVOHNUMEZCVVN4VFFVRlJMRXRCUVZVN1EwRkJSeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUkdWdWIzUmxjeUJoSUhabFkzUnZjaUJ2WmlCbWJHOWhkR2x1WnlCd2IybDBJSFpoYkhWbGN5NWNiaUFxWEc0Z0tpQkFaWGh3YjNKMFhHNGdLaUJBWTJ4aGMzTWdWbVZqZEc5eVhHNGdLaUJBWlhoMFpXNWtjeUI3Um14dllYUXpNa0Z5Y21GNWZWeHVJQ292WEc1bGVIQnZjblFnWTJ4aGMzTWdWbVZqZEc5eUlHVjRkR1Z1WkhNZ1JteHZZWFF6TWtGeWNtRjVJSHQ5WEc1Y2JpOHFLbHh1SUNvZ1JHVnViM1JsY3lCaElIUjNieTFrYVcxbGJuTnBiMjVoYkNCdFlYUnlhWGd1WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FHTnNZWE56SUUxaGRISnBlRnh1SUNvZ1FHVjRkR1Z1WkhNZ2UwRnljbUY1UEZabFkzUnZjajU5WEc0Z0tpOWNibVY0Y0c5eWRDQmpiR0Z6Y3lCTllYUnlhWGdnWlhoMFpXNWtjeUJCY25KaGVUeFdaV04wYjNJK0lIdDlYRzVjYmk4cUtseHVJQ29nUkdWdWIzUmxjeUJqWVhKMFpYTnBZVzRnWTI5dmNtUnBibUYwWlhNdVhHNGdLbHh1SUNvZ1FHVjRjRzl5ZEZ4dUlDb2dRR05zWVhOeklFTnZiM0prYVc1aGRHVnpYRzRnS2lCQVpYaDBaVzVrY3lCN1RXRjBjbWw0ZlZ4dUlDb3ZYRzVsZUhCdmNuUWdZMnhoYzNNZ1EyOXZjbVJwYm1GMFpYTWdaWGgwWlc1a2N5Qk5ZWFJ5YVhnZ2UzMWNibHh1THlvcVhHNGdLaUJFWlc1dmRHVnpJR0Z1SUdGeWNtRjVJRzltSUdGeVltbDBjbUZ5ZVMxMGVYQmxaQ0IyWldOMGIzSnpMbHh1SUNwY2JpQXFJRUJsZUhCdmNuUmNiaUFxSUVCamJHRnpjeUJXWldOMGIzSnpYRzRnS2lCQVpYaDBaVzVrY3lCN1FYSnlZWGs4WVc1NVBuMWNiaUFxTDF4dVpYaHdiM0owSUdOc1lYTnpJRlpsWTNSdmNuTWdaWGgwWlc1a2N5QkJjbkpoZVR4aGJuaytJSHQ5WEc1Y2JpOHFLbHh1SUNvZ1JHVnViM1JsY3lCaElHUnBZM1JwYjI1aGNua2dZMjl1ZEdGcGJtbHVaeUJtZFc1amRHbHZiaUJ2Y0hScGIyNXpMbHh1SUNwY2JpQXFJRUJsZUhCdmNuUmNiaUFxSUVCMGVYQmxJRTl3ZEdsdmJuTmNiaUFxTDF4dVpYaHdiM0owSUhSNWNHVWdUM0IwYVc5dWN5QTlJSHRiYm1GdFpUb2djM1J5YVc1blhUb2dZVzU1ZlR0Y2JseHVMeW9xWEc0Z0tpQkVaVzV2ZEdWeklHTjFjM1J2YlNCa2FYTjBZVzVqWlNCdFpYUnlhV01nWW1WMGQyVmxiaUIwYUdVZ2RIZHZJR2RwZG1WdUlIWmxZM1J2Y25NdVhHNGdLbHh1SUNvZ1FHVjRjRzl5ZEZ4dUlDb2dRSFI1Y0dVZ1JHbHpkR0Z1WTJWTlpYUnlhV05jYmlBcUlFQndZWEpoYlNCN1lXNTVmU0IyTVNCVWFHVWdabWx5YzNRZ2RtVmpkRzl5TGx4dUlDb2dRSEJoY21GdElIdGhibmw5SUhZeUlGUm9aU0J6WldOdmJtUWdkbVZqZEc5eUxseHVJQ29nUUhKbGRIVnliaUI3Ym5WdFltVnlmU0JFYVhOMFlXNWpaU0JpWlhSM1pXVnVJSFJvWlhObElIUjNieUIyWldOMGIzSnpMbHh1SUNvdlhHNWxlSEJ2Y25RZ2RIbHdaU0JFYVhOMFlXNWpaVTFsZEhKcFl5QTlJQ2gyTVRvZ1lXNTVMQ0IyTWpvZ1lXNTVLU0E5UGlBb2JuVnRZbVZ5S1R0Y2JseHVMeW9xWEc0Z0tpQkVaVzV2ZEdWeklHRWdjMmx0Y0d4bElITjBjbWx1WnlCMGJ5QnpkSEpwYm1jZ1pHbGpkR2x2Ym1GeWVTNWNiaUFxWEc0Z0tpQkFaWGh3YjNKMFhHNGdLaUJBZEhsd1pTQlRkSEpwYm1kRWFXTjBhVzl1WVhKNVhHNGdLaTljYm1WNGNHOXlkQ0IwZVhCbElGTjBjbWx1WjBScFkzUnBiMjVoY25rZ1BTQjdXMnRsZVRvZ2MzUnlhVzVuWFRvZ2MzUnlhVzVuZlR0Y2JpSmRmUT09IiwiaW1wb3J0IHsgVmVjdG9yIH0gZnJvbSAnLi90eXBlLWRlY2xhcmF0aW9ucyc7XG5pbXBvcnQgeyByYW5kb21GbG9hdCwgcmFuZG9tSW50IH0gZnJvbSAnLi9yYW5kb20nO1xuLyoqXG4gKiBBc3NlcnRzIGEgY29uZGl0aW9uIGJ5IHRocm93aW5nIGFuIEVycm9yLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbmRpdGlvbj1mYWxzZV0gQ29uZGl0aW9uIHRvIGFzc2VydC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZT0nQXNzZXJ0aW9uIGVycm9yLiddIE1lc3NhZ2UgdG8gb3V0cHV0LlxuICogQHRocm93cyB7RXJyb3J9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uID0gZmFsc2UsIG1lc3NhZ2UgPSAnQXNzZXJ0aW9uIGVycm9yLicpIHtcbiAgICBpZiAoIWNvbmRpdGlvbilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufVxuLyoqXG4gKiBDcmVhdGVzIG5ldyB0d28tZGltZW5zaW9uYWwgYXJyYXkgYW5kIGZpbGxzIGl0IHdpdGggdGhlIHZhbHVlIGdpdmVuLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1lbnNpb24xIFRoZSBmaXJzdCBkaW1lbnNpb24gb2YgdGhlIGNvb3JkaW5hdGVzIChudW1iZXIgb2Ygcm93cykuXG4gKiBAcGFyYW0ge251bWJlcn0gZGltZW5zaW9uMiBUaGUgc2Vjb25kIGRpbWVuc2lvbiBvZiB0aGUgY29vcmRpbmF0ZXMgKG51bWJlciBvZiBjb2x1bW5zKS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbD0wXSBBIHZhbHVlIHRvIGZpbGwgdGhlIGNvb3JkaW5hdGVzIHdpdGguXG4gKiBAcmV0dXJuIHtDb29yZGluYXRlc30gQSB0d28tZGltZW5zaW9uYWwgZmlsbGVkIHdpdGggdGhlIHZhbHVlIGdpdmVuLlxuICogQHRvZG8gTWlnaHQgYmUgc2xvdyBzaW5jZSB1c2VkIEFycmF5Lm1hcC4gUHJvYmFibHkgbmVlZHMgcGVyZm9ybWFuY2UgcmV2aXNpb24uXG4gKi9cbmZ1bmN0aW9uIGluaXRDb29yZGluYXRlcyhkaW1lbnNpb24xLCBkaW1lbnNpb24yLCBmaWxsID0gMCkge1xuICAgIHJldHVybiBuZXcgQXJyYXkoZGltZW5zaW9uMSkuZmlsbChmaWxsKS5tYXAoKCkgPT4gKG5ldyBWZWN0b3IoZGltZW5zaW9uMikuZmlsbChmaWxsKSkpO1xufVxuLyoqXG4gKiBUcmFuc3Bvc2UgbWF0cml4LlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7TWF0cml4fSBtYXRyaXggVGhlIG1hdHJpeCB0byBiZSB0cmFuc3Bvc2VkLlxuICogQHJldHVybiB7TWF0cml4fSBUcmFuc3Bvc2VkIG1hdHJpeC5cbiAqIEB0b2RvIE1pZ2h0IGJlIHNsb3cgc2luY2UgdXNlZCBBcnJheS5tYXAuIFByb2JhYmx5IG5lZWRzIHBlcmZvcm1hbmNlIHJldmlzaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNwb3NlTWF0cml4KG1hdHJpeCkge1xuICAgIHJldHVybiBuZXcgQXJyYXkobWF0cml4WzBdLmxlbmd0aCkuZmlsbCgwKVxuICAgICAgICAubWFwKChfLCBpKSA9PiAobmV3IFZlY3RvcihtYXRyaXgubGVuZ3RoKS5maWxsKDApLm1hcCgoXywgaikgPT4gKG1hdHJpeFtqXVtpXSkpKSk7XG59XG4vKipcbiAqIEFkZHMgdHdvIHZlY3RvcnMgd2l0aCB0aGUgc2Vjb25kIG9uZSB0byBiZSBtdWx0aXBsaWVkIGJ5IHRoZSBnaXZlbiByYXRpby5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge1ZlY3Rvcn0gcCBUaGUgZmlyc3QgdmVjdG9yIHRvIGFkZC5cbiAqIEBwYXJhbSB7VmVjdG9yfSBxIFRoZSBzZWNvbmQgdmVjdG9yIHRvIGFkZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbXVsdGlwbGllcj0xXSBBIG11bHRpcGxpZXIgdG8gYmUgdXNlZCBiZWZvcmUgdGhlIHNlY29uZCB2ZWN0b3IgaXMgYWRkZWQuXG4gKiBAcmV0dXJuIHtWZWN0b3J9IE5ldyB2ZWN0b3IgY29udGFpbmVkIHRoZSByZXN1bHQgb2Ygb3BlcmF0aW9uIHArbXVsdGlwbGllcipxLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVjdG9yQWRkKHAsIHEsIG11bHRpcGxpZXIgPSAxKSB7XG4gICAgY29uc3Qgbkl0ZW1zID0gcC5sZW5ndGg7XG4gICAgYXNzZXJ0KG5JdGVtcyA9PSBxLmxlbmd0aCwgJ1ZlY3RvciBsZW5ndGhzIGRvIG5vdCBtYXRjaC4nKTtcbiAgICBjb25zdCB0b3RhbCA9IG5ldyBWZWN0b3Iobkl0ZW1zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHAubGVuZ3RoOyArK2kpXG4gICAgICAgIHRvdGFsW2ldID0gcFtpXSArIG11bHRpcGxpZXIgKiBxW2ldO1xuICAgIHJldHVybiB0b3RhbDtcbn1cbi8qKlxuICogU3VtcyB0aGUgdmVjdG9yJ3MgaXRlbXMuXG4gKlxuICogQHBhcmFtIHtWZWN0b3J9IHYgVGhlIHZlY3RvciB0byBiZSBzdW1tZWQuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB2ZWN0b3IncyBpdGVtcyBzdW0uXG4gKi9cbmZ1bmN0aW9uIGl0ZW1zU3VtKHYpIHtcbiAgICBsZXQgdG90YWwgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdi5sZW5ndGg7ICsraSlcbiAgICAgICAgdG90YWwgKz0gdltpXTtcbiAgICByZXR1cm4gdG90YWw7XG59XG4vKipcbiAqIFN1cWFyZXMgdGhlIHZlY3RvcidzIGl0ZW1zLlxuICpcbiAqIEBwYXJhbSB7VmVjdG9yfSB2IFRoZSB2ZWN0b3IgdG8gc3F1YXJlLlxuICogQHJldHVybiB7VmVjdG9yfSBBIG5ldyB2ZWN0b3IgY29udGFpbmluZyB0aGUgb3JpZ2luYWwncyBpdGVtcyBzcXVhcmVkLlxuICovXG5mdW5jdGlvbiB2ZWN0b3JTcXVhcmUodikge1xuICAgIGNvbnN0IG5JdGVtcyA9IHYubGVuZ3RoO1xuICAgIGNvbnN0IHRvdGFsID0gbmV3IFZlY3RvcihuSXRlbXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdi5sZW5ndGg7ICsraSlcbiAgICAgICAgdG90YWxbaV0gPSB2W2ldICogdltpXTtcbiAgICByZXR1cm4gdG90YWw7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBtYXRyaXggZmlsbGVkIHdpdGggcmFuZG9tIGZsb2F0aW5nIHBvaW50IHZhbHVlcy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge251bWJlcn0gZGltZW5zaW9uMSBUaGUgZmlyc3QgZGltZW5zaW9uIG9mIHRoZSBtYXRyaXguXG4gKiBAcGFyYW0ge251bWJlcn0gZGltZW5zaW9uMiBUaGUgc2Vjb25kIGRpbWVuc2lvbiBvZiB0aGUgbWF0cml4LlxuICogQHBhcmFtIHtudW1iZXJ9IFtzY2FsZT0xLl0gTWF4IHZhbHVlIGdpdmVuIGJ5IHJhbmRvbSBnZW5lcmF0b3IuXG4gKiBAcmV0dXJuIHtNYXRyaXh9IEEgbmV3IG1hdHJpeCBmaWxsZWQgd2l0aCByYW5kb20gZmxvYXRpbmcgcG9pbnQgIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbGxSYW5kb21NYXRyaXgoZGltZW5zaW9uMSwgZGltZW5zaW9uMiwgc2NhbGUgPSAxLikge1xuICAgIGNvbnN0IG1hdHJpeCA9IGluaXRDb29yZGluYXRlcyhkaW1lbnNpb24xLCBkaW1lbnNpb24yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpbWVuc2lvbjE7ICsraSkge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRpbWVuc2lvbjI7ICsrailcbiAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IHJhbmRvbUZsb2F0KHNjYWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeDtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyBFdWNsaWRlYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjdG9ycy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge1ZlY3Rvcn0gcCBUaGUgZmlyc3QgdmVjdG9yLlxuICogQHBhcmFtIHtWZWN0b3J9IHEgVGhlIHNlY29uZCB2ZWN0b3IuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEV1Y2xpZGVhbiBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBnaXZlbiB2ZWN0b3JzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlRXVjbGlkZWFuRGlzdGFuY2UocCwgcSkge1xuICAgIGNvbnN0IGRpZmYgPSB2ZWN0b3JBZGQocCwgcSwgLTEpO1xuICAgIGNvbnN0IHNxZGlmZiA9IHZlY3RvclNxdWFyZShkaWZmKTtcbiAgICBjb25zdCBzcWRpZmZTdW1tID0gaXRlbXNTdW0oc3FkaWZmKTtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHNxZGlmZlN1bW0pO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgZGlzdGFuY2UgbWF0cml4IHVzaW5nIGEgY3VzdG9tIGRpc3RhbmNlIGZ1bmN0aW9uLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7VmVjdG9yc30gZGF0YSBJbnB1dCB2ZWN0b3JzIHRvIGNhbGN1bGF0ZSBkaXN0YW5jZXMuXG4gKiBAcGFyYW0ge0Rpc3RhbmNlTWV0cmljfSBkaXN0YW5jZSBDdXN0b20gZGlzdGFuY2UgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtNYXRyaXh9IENhbGN1bGF0ZWQgY3VzdG9tIGRpc3RhbmNlIG1hdHJpeC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGNEaXN0YW5jZU1hdHJpeChkYXRhLCBkaXN0YW5jZSkge1xuICAgIGNvbnN0IG5JdGVtcyA9IGRhdGEubGVuZ3RoO1xuICAgIGNvbnN0IG1hdHJpeCA9IGluaXRDb29yZGluYXRlcyhuSXRlbXMsIG5JdGVtcywgMCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuSXRlbXM7ICsraSkge1xuICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBuSXRlbXM7ICsraikge1xuICAgICAgICAgICAgY29uc3QgZCA9IChkYXRhW2ldID09IG51bGwpIHx8IChkYXRhW2pdID09IG51bGwpID8gMCA6IGRpc3RhbmNlKGRhdGFbaV0sIGRhdGFbal0pO1xuICAgICAgICAgICAgbWF0cml4W2ldW2pdID0gbWF0cml4W2pdW2ldID0gZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF0cml4O1xufVxuLyoqIEdlbmVyYXRlcyBhcnJheSBmcm9tIGEgcmFuZ2UgW2JlZ2luOyBlbmRdIG9yIFtiZWdpbjsgZW5kKSBpZiBlbmRFeGNsdXNpdmUuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuUmFuZ2UoYmVnaW4sIGVuZCwgZW5kRXhjbHVzaXZlID0gZmFsc2UpIHtcbiAgICBjb25zdCBuSXRlbXMgPSBlbmQgLSBiZWdpbiArIChlbmRFeGNsdXNpdmUgPyAwIDogMSk7XG4gICAgY29uc3Qgc2VyaWVzID0gbmV3IEludDMyQXJyYXkobkl0ZW1zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5JdGVtczsgKytpKVxuICAgICAgICBzZXJpZXNbaV0gPSBiZWdpbiArIGk7XG4gICAgcmV0dXJuIHNlcmllcztcbn1cbi8qKlxuICogUmV0dXJucyBvcmRlciBvZiB2YWx1ZXMgYXMgaWYgdGhleSBhcmUgc29ydGVkLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7YW55W119IHZhbHVlcyBJbnB1dCBhcnJheS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldmVyc2U9ZmFsc2VdIFdoZXRoZXIgdG8gcmV0dXJuIHJldmVyc2VkIG9yZGVyLlxuICogQHJldHVybiB7bnVtYmVyW119IFRoZSBvcmRlciBjb21wdXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFyZ1NvcnQodmFsdWVzLCByZXZlcnNlID0gZmFsc2UpIHtcbiAgICBjb25zdCBzb3J0Zm4gPSByZXZlcnNlID8gKGEsIGIpID0+IChiWzBdIC0gYVswXSkgOiAoYSwgYikgPT4gKGFbMF0gLSBiWzBdKTtcbiAgICBjb25zdCBkZWNvciA9ICh2LCBpKSA9PiBbdiwgaV07IC8vIHNldCBpbmRleCB0byB2YWx1ZVxuICAgIGNvbnN0IHVuZGVjb3IgPSAoYSkgPT4gYVsxXTsgLy8gbGVhdmUgb25seSBpbmRleFxuICAgIGNvbnN0IF9hcmdzb3J0ID0gKGFycikgPT4gYXJyLm1hcChkZWNvcikuc29ydChzb3J0Zm4pLm1hcCh1bmRlY29yKTtcbiAgICByZXR1cm4gX2FyZ3NvcnQodmFsdWVzKTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgaW5kZXhlcyBvZiB0aGUgbW9zdCBkaXZlcnNlIG9iamVjdHMgYWNjb3JkaW5nIHRvIHRoZSBkaXN0IGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoIHRvdGFsIG51bWJlciBvZiBvYmplY3RzXG4gKiBAcGFyYW0ge251bWJlcn0gbiBudW1iZXIgb2YgZGl2ZXJzZSBlbGVtZW50cyB0byBmaW5kXG4gKiBAcGFyYW0geyhpMTogbnVtYmVyLCBpMjogbnVtYmVyKSA9PiBudW1iZXJ9IGRpc3QgYSBmdW5jdGlvbiB3aGljaCBjYWxjdWxhdGVzIGRpc3RhbmNlIGJldHdlZW4gdHdvIG9iamVjdHMgdXNpbmcgdGhlaXIgaW5kZXhlc1xuICogQHJldHVybnMge251bWJlcltdfSBUaGUgaW5kZXhlcyBvZiB0aGUgbW9zdCBkaXZlcnNlIG9iamVjdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpdmVyc2VTdWJzZXQobGVuZ3RoLCBuLCBkaXN0KSB7XG4gICAgZnVuY3Rpb24gbWF4QnkodmFsdWVzLCBvcmRlckJ5KSB7XG4gICAgICAgIGxldCBtYXhWYWx1ZSA9IG51bGw7XG4gICAgICAgIGxldCBtYXhPcmRlckJ5ID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudE9yZGVyQnkgPSBvcmRlckJ5KGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKG1heE9yZGVyQnkgPT0gbnVsbCB8fCBlbGVtZW50T3JkZXJCeSA+IG1heE9yZGVyQnkpIHtcbiAgICAgICAgICAgICAgICBtYXhWYWx1ZSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgbWF4T3JkZXJCeSA9IGVsZW1lbnRPcmRlckJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXhWYWx1ZTtcbiAgICB9XG4gICAgY29uc3Qgc3Vic2V0ID0gW3JhbmRvbUludChsZW5ndGggLSAxKV07XG4gICAgY29uc3QgY29tcGxlbWVudCA9IG5ldyBTZXQoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICghc3Vic2V0LmluY2x1ZGVzKGkpKVxuICAgICAgICAgICAgY29tcGxlbWVudC5hZGQoaSk7XG4gICAgfVxuICAgIHdoaWxlIChzdWJzZXQubGVuZ3RoIDwgbikge1xuICAgICAgICBjb25zdCBpZHggPSBtYXhCeShjb21wbGVtZW50LnZhbHVlcygpLCAoaSkgPT4gTWF0aC5taW4uYXBwbHkoTWF0aCwgc3Vic2V0Lm1hcChmdW5jdGlvbiAodmFsLCBpbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIGRpc3QoaSwgdmFsKTtcbiAgICAgICAgfSkpKTtcbiAgICAgICAgaWYgKGlkeCkge1xuICAgICAgICAgICAgc3Vic2V0LnB1c2goaWR4KTtcbiAgICAgICAgICAgIGNvbXBsZW1lbnQuZGVsZXRlKGlkeCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN1YnNldDtcbn1cbi8qKlxuICogUmV0dXJucyBub3JtYWxpemVkIHZlY3RvclxuICogQHBhcmFtIGRhdGEgbnVtZXJpY2FsIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUoZGF0YSkge1xuICAgIGxldCBtZWFuID0gMDtcbiAgICBsZXQgc3RkID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpXG4gICAgICAgIG1lYW4gKz0gZGF0YVtpXTtcbiAgICBtZWFuIC89IGRhdGEubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7ICsraSlcbiAgICAgICAgc3RkICs9IChkYXRhW2ldIC0gbWVhbikgKiAoZGF0YVtpXSAtIG1lYW4pO1xuICAgIHN0ZCA9IE1hdGguc3FydChzdGQgLyBkYXRhLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgKytpKVxuICAgICAgICBkYXRhW2ldID0gKGRhdGFbaV0gLSBtZWFuKSAvIHN0ZDtcbiAgICByZXR1cm4gZGF0YTtcbn1cbi8qKlxuICogRmluZHMgc2V0IGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gbGlzdHMuXG4gKiBAcGFyYW0ge2FueVtdfSBhIFRoZSBmaXJzdCBsaXN0LlxuICogQHBhcmFtIHthbnlbXX0gYiBUaGUgc2Vjb25kIGxpc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXREaWZmZXJlbmNlKGEsIGIpIHtcbiAgICBjb25zdCBiU2V0ID0gbmV3IFNldChiKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGEuZmlsdGVyKCh4KSA9PiAhYlNldC5oYXMoeCkpKS52YWx1ZXMoKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkbVZqZEc5eUxXOXdaWEpoZEdsdmJuTXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKMlpXTjBiM0l0YjNCbGNtRjBhVzl1Y3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkJRU3hQUVVGUExFVkJRVk1zVFVGQlRTeEZRVUYxUXl4TlFVRk5MSEZDUVVGeFFpeERRVUZETzBGQlEzcEdMRTlCUVU4c1JVRkJReXhYUVVGWExFVkJRVVVzVTBGQlV5eEZRVUZETEUxQlFVMHNWVUZCVlN4RFFVRkRPMEZCUldoRU96czdPenM3TzBkQlQwYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1RVRkJUU3hEUVVGRExGbEJRWEZDTEV0QlFVc3NSVUZCUlN4VlFVRnJRaXhyUWtGQmEwSTdTVUZEY2tZc1NVRkJTU3hEUVVGRExGTkJRVk03VVVGRFdpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wRkJRemRDTEVOQlFVTTdRVUZGUkRzN096czdPenM3UjBGUlJ6dEJRVU5JTEZOQlFWTXNaVUZCWlN4RFFVRkRMRlZCUVd0Q0xFVkJRVVVzVlVGQmEwSXNSVUZCUlN4UFFVRmxMRU5CUVVNN1NVRkRMMFVzVDBGQlR5eEpRVUZKTEV0QlFVc3NRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU1zU1VGQlNTeE5RVUZOTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTjZSaXhEUVVGRE8wRkJSVVE3T3pzN096czdSMEZQUnp0QlFVTklMRTFCUVUwc1ZVRkJWU3hsUVVGbExFTkJRVU1zVFVGQll6dEpRVU0xUXl4UFFVRlBMRWxCUVVrc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzFOQlEzWkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1NVRkJTU3hOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTNSR0xFTkJRVU03UVVGRlJEczdPenM3T3pzN1IwRlJSenRCUVVOSUxFMUJRVTBzVlVGQlZTeFRRVUZUTEVOQlFVTXNRMEZCVXl4RlFVRkZMRU5CUVZNc1JVRkJSU3hoUVVGeFFpeERRVUZETzBsQlEzQkZMRTFCUVUwc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZGZUVJc1RVRkJUU3hEUVVGRExFMUJRVTBzU1VGQlNTeERRVUZETEVOQlFVTXNUVUZCVFN4RlFVRkZMRGhDUVVFNFFpeERRVUZETEVOQlFVTTdTVUZGTTBRc1RVRkJUU3hMUVVGTExFZEJRVWNzU1VGQlNTeE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkZha01zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRPMUZCUXk5Q0xFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVlVGQlZTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVWMFF5eFBRVUZQTEV0QlFVc3NRMEZCUXp0QlFVTm1MRU5CUVVNN1FVRkZSRHM3T3pzN1IwRkxSenRCUVVOSUxGTkJRVk1zVVVGQlVTeERRVUZETEVOQlFWTTdTVUZEZWtJc1NVRkJTU3hMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlJXUXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRE8xRkJReTlDTEV0QlFVc3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRmFFSXNUMEZCVHl4TFFVRkxMRU5CUVVNN1FVRkRaaXhEUVVGRE8wRkJSVVE3T3pzN08wZEJTMGM3UVVGRFNDeFRRVUZUTEZsQlFWa3NRMEZCUXl4RFFVRlRPMGxCUXpkQ0xFMUJRVTBzVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNN1NVRkRlRUlzVFVGQlRTeExRVUZMTEVkQlFVY3NTVUZCU1N4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRmFrTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRE8xRkJReTlDTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJSWHBDTEU5QlFVOHNTMEZCU3l4RFFVRkRPMEZCUTJZc1EwRkJRenRCUVVWRU96czdPenM3T3p0SFFWRkhPMEZCUTBnc1RVRkJUU3hWUVVGVkxHZENRVUZuUWl4RFFVRkRMRlZCUVd0Q0xFVkJRVVVzVlVGQmEwSXNSVUZCUlN4UlFVRm5RaXhGUVVGRk8wbEJRM3BHTEUxQlFVMHNUVUZCVFN4SFFVRkhMR1ZCUVdVc1EwRkJReXhWUVVGVkxFVkJRVVVzVlVGQlZTeERRVUZETEVOQlFVTTdTVUZGZGtRc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRlZCUVZVc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJUdFJRVU51UXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NWVUZCVlN4RlFVRkZMRVZCUVVVc1EwRkJRenRaUVVOcVF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVjBGQlZ5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMHRCUTNKRE8wbEJRMFFzVDBGQlR5eE5RVUZOTEVOQlFVTTdRVUZEYUVJc1EwRkJRenRCUVVWRU96czdPenM3TzBkQlQwYzdRVUZEU0N4TlFVRk5MRlZCUVZVc01FSkJRVEJDTEVOQlFVTXNRMEZCVXl4RlFVRkZMRU5CUVZNN1NVRkROMFFzVFVGQlRTeEpRVUZKTEVkQlFVY3NVMEZCVXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTnFReXhOUVVGTkxFMUJRVTBzUjBGQlJ5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1NVRkRiRU1zVFVGQlRTeFZRVUZWTEVkQlFVY3NVVUZCVVN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJRM0JETEU5QlFVOHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dEJRVU12UWl4RFFVRkRPMEZCUlVRN096czdPenM3UjBGUFJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4clFrRkJhMElzUTBGQlF5eEpRVUZoTEVWQlFVVXNVVUZCZDBJN1NVRkRlRVVzVFVGQlRTeE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJRenRKUVVNelFpeE5RVUZOTEUxQlFVMHNSMEZCUnl4bFFVRmxMRU5CUVVNc1RVRkJUU3hGUVVGRkxFMUJRVTBzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0SlFVVnNSQ3hMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1RVRkJUU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTzFGQlF5OUNMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1RVRkJUU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTzFsQlEycERMRTFCUVUwc1EwRkJReXhIUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRE1VWXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVMEZEYWtNN1MwRkRSanRKUVVORUxFOUJRVThzVFVGQlRTeERRVUZETzBGQlEyaENMRU5CUVVNN1FVRkZSQ3hwUmtGQmFVWTdRVUZEYWtZc1RVRkJUU3hWUVVGVkxGRkJRVkVzUTBGQlF5eExRVUZoTEVWQlFVVXNSMEZCVnl4RlFVRkZMRmxCUVZrc1IwRkJSeXhMUVVGTE8wbEJRM1pGTEUxQlFVMHNUVUZCVFN4SFFVRkhMRWRCUVVjc1IwRkJSeXhMUVVGTExFZEJRVWNzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEY0VRc1RVRkJUU3hOUVVGTkxFZEJRVWNzU1VGQlNTeFZRVUZWTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkZkRU1zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFMUJRVTBzUlVGQlJTeEZRVUZGTEVOQlFVTTdVVUZETjBJc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkZlRUlzVDBGQlR5eE5RVUZOTEVOQlFVTTdRVUZEYUVJc1EwRkJRenRCUVVWRU96czdPenM3TzBkQlQwYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1QwRkJUeXhEUVVGRExFMUJRV0VzUlVGQlJTeFBRVUZQTEVkQlFVY3NTMEZCU3p0SlFVTndSQ3hOUVVGTkxFMUJRVTBzUjBGQlJ5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJVU3hGUVVGRkxFTkJRVkVzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlVTeEZRVUZGTEVOQlFWRXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGRrY3NUVUZCVFN4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGTkxFVkJRVVVzUTBGQlV5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEhGQ1FVRnhRanRKUVVOc1JTeE5RVUZOTEU5QlFVOHNSMEZCUnl4RFFVRkRMRU5CUVZFc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc2JVSkJRVzFDTzBsQlEzWkVMRTFCUVUwc1VVRkJVU3hIUVVGSExFTkJRVU1zUjBGQlZTeEZRVUZGTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdTVUZETVVVc1QwRkJUeXhSUVVGUkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZETVVJc1EwRkJRenRCUVVWRU96czdPenM3UjBGTlJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4blFrRkJaMElzUTBGQlF5eE5RVUZqTEVWQlFVVXNRMEZCVXl4RlFVRkZMRWxCUVhkRE8wbEJRMnhITEZOQlFWTXNTMEZCU3l4RFFVRkRMRTFCUVdkRExFVkJRVVVzVDBGQk9FSTdVVUZETjBVc1NVRkJTU3hSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETzFGQlEzQkNMRWxCUVVrc1ZVRkJWU3hIUVVGSExFbEJRVWtzUTBGQlF6dFJRVVYwUWl4TFFVRkxMRTFCUVUwc1QwRkJUeXhKUVVGSkxFMUJRVTBzUlVGQlJUdFpRVU0xUWl4TlFVRk5MR05CUVdNc1IwRkJSeXhQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdXVUZEZUVNc1NVRkJTU3hWUVVGVkxFbEJRVWtzU1VGQlNTeEpRVUZKTEdOQlFXTXNSMEZCUnl4VlFVRlZMRVZCUVVVN1owSkJRM0pFTEZGQlFWRXNSMEZCUnl4UFFVRlBMRU5CUVVNN1owSkJRMjVDTEZWQlFWVXNSMEZCUnl4alFVRmpMRU5CUVVNN1lVRkROMEk3VTBGRFJqdFJRVU5FTEU5QlFVOHNVVUZCVVN4RFFVRkRPMGxCUTJ4Q0xFTkJRVU03U1VGRlJDeE5RVUZOTEUxQlFVMHNSMEZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTjJReXhOUVVGTkxGVkJRVlVzUjBGQlJ5eEpRVUZKTEVkQlFVY3NSVUZCUlN4RFFVRkRPMGxCUlRkQ0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhOUVVGTkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVTdVVUZETDBJc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTNKQ0xGVkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1MwRkRja0k3U1VGRlJDeFBRVUZQTEUxQlFVMHNRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhGUVVGRk8xRkJRM2hDTEUxQlFVMHNSMEZCUnl4SFFVRkhMRXRCUVVzc1EwRkRaaXhWUVVGVkxFTkJRVU1zVFVGQlRTeEZRVUU0UWl4RlFVTXZReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeEZRVUZGTEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1ZVRkJWU3hIUVVGSExFVkJRVVVzUzBGQlN6dFpRVU42UkN4UFFVRlBMRWxCUVVrc1EwRkJReXhEUVVGRExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEZEVJc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlExQXNTVUZCU1N4SFFVRkhMRVZCUVVVN1dVRkRVQ3hOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTJwQ0xGVkJRVlVzUTBGQlF5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1UwRkRlRUk3UzBGRFJqdEpRVU5FTEU5QlFVOHNUVUZCVFN4RFFVRkRPMEZCUTJoQ0xFTkJRVU03UVVGRlJEczdPMGRCUjBjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzVTBGQlV5eERRVUZETEVsQlFWazdTVUZEY0VNc1NVRkJTU3hKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETzBsQlEySXNTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJSVm9zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRPMUZCUTJ4RExFbEJRVWtzU1VGQlNTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkZiRUlzU1VGQlNTeEpRVUZKTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNN1NVRkZjRUlzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRPMUZCUTJ4RExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVVUzUXl4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJSVzVETEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRVZCUVVVc1EwRkJRenRSUVVOc1F5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRE8wbEJSVzVETEU5QlFVOHNTVUZCU1N4RFFVRkRPMEZCUTJRc1EwRkJRenRCUVVWRU96czdPMGRCU1VjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzWVVGQllTeERRVUZETEVOQlFWRXNSVUZCUlN4RFFVRlJPMGxCUXpsRExFMUJRVTBzU1VGQlNTeEhRVUZITEVsQlFVa3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRM2hDTEU5QlFVOHNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRU5CUVVNN1FVRkRja1VzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQjdUV0YwY21sNExDQldaV04wYjNJc0lFTnZiM0prYVc1aGRHVnpMQ0JXWldOMGIzSnpMQ0JFYVhOMFlXNWpaVTFsZEhKcFkzMGdabkp2YlNBbkxpOTBlWEJsTFdSbFkyeGhjbUYwYVc5dWN5YzdYRzVwYlhCdmNuUWdlM0poYm1SdmJVWnNiMkYwTENCeVlXNWtiMjFKYm5SOUlHWnliMjBnSnk0dmNtRnVaRzl0Snp0Y2JseHVMeW9xWEc0Z0tpQkJjM05sY25SeklHRWdZMjl1WkdsMGFXOXVJR0o1SUhSb2NtOTNhVzVuSUdGdUlFVnljbTl5TGx4dUlDcGNiaUFxSUVCbGVIQnZjblJjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm4wZ1cyTnZibVJwZEdsdmJqMW1ZV3h6WlYwZ1EyOXVaR2wwYVc5dUlIUnZJR0Z6YzJWeWRDNWNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JiYldWemMyRm5aVDBuUVhOelpYSjBhVzl1SUdWeWNtOXlMaWRkSUUxbGMzTmhaMlVnZEc4Z2IzVjBjSFYwTGx4dUlDb2dRSFJvY205M2N5QjdSWEp5YjNKOVhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJoYzNObGNuUW9ZMjl1WkdsMGFXOXVPaUJpYjI5c1pXRnVJRDBnWm1Gc2MyVXNJRzFsYzNOaFoyVTZJSE4wY21sdVp5QTlJQ2RCYzNObGNuUnBiMjRnWlhKeWIzSXVKeWtnZTF4dUlDQnBaaUFvSVdOdmJtUnBkR2x2YmlsY2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9iV1Z6YzJGblpTazdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1EzSmxZWFJsY3lCdVpYY2dkSGR2TFdScGJXVnVjMmx2Ym1Gc0lHRnljbUY1SUdGdVpDQm1hV3hzY3lCcGRDQjNhWFJvSUhSb1pTQjJZV3gxWlNCbmFYWmxiaTVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdaR2x0Wlc1emFXOXVNU0JVYUdVZ1ptbHljM1FnWkdsdFpXNXphVzl1SUc5bUlIUm9aU0JqYjI5eVpHbHVZWFJsY3lBb2JuVnRZbVZ5SUc5bUlISnZkM01wTGx4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHUnBiV1Z1YzJsdmJqSWdWR2hsSUhObFkyOXVaQ0JrYVcxbGJuTnBiMjRnYjJZZ2RHaGxJR052YjNKa2FXNWhkR1Z6SUNodWRXMWlaWElnYjJZZ1kyOXNkVzF1Y3lrdVhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdXMlpwYkd3OU1GMGdRU0IyWVd4MVpTQjBieUJtYVd4c0lIUm9aU0JqYjI5eVpHbHVZWFJsY3lCM2FYUm9MbHh1SUNvZ1FISmxkSFZ5YmlCN1EyOXZjbVJwYm1GMFpYTjlJRUVnZEhkdkxXUnBiV1Z1YzJsdmJtRnNJR1pwYkd4bFpDQjNhWFJvSUhSb1pTQjJZV3gxWlNCbmFYWmxiaTVjYmlBcUlFQjBiMlJ2SUUxcFoyaDBJR0psSUhOc2IzY2djMmx1WTJVZ2RYTmxaQ0JCY25KaGVTNXRZWEF1SUZCeWIySmhZbXg1SUc1bFpXUnpJSEJsY21admNtMWhibU5sSUhKbGRtbHphVzl1TGx4dUlDb3ZYRzVtZFc1amRHbHZiaUJwYm1sMFEyOXZjbVJwYm1GMFpYTW9aR2x0Wlc1emFXOXVNVG9nYm5WdFltVnlMQ0JrYVcxbGJuTnBiMjR5T2lCdWRXMWlaWElzSUdacGJHdzZJRzUxYldKbGNpQTlJREFwT2lCRGIyOXlaR2x1WVhSbGN5QjdYRzRnSUhKbGRIVnliaUJ1WlhjZ1FYSnlZWGtvWkdsdFpXNXphVzl1TVNrdVptbHNiQ2htYVd4c0tTNXRZWEFvS0NrZ1BUNGdLRzVsZHlCV1pXTjBiM0lvWkdsdFpXNXphVzl1TWlrdVptbHNiQ2htYVd4c0tTa3BPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGUnlZVzV6Y0c5elpTQnRZWFJ5YVhndVhHNGdLbHh1SUNvZ1FHVjRjRzl5ZEZ4dUlDb2dRSEJoY21GdElIdE5ZWFJ5YVhoOUlHMWhkSEpwZUNCVWFHVWdiV0YwY21sNElIUnZJR0psSUhSeVlXNXpjRzl6WldRdVhHNGdLaUJBY21WMGRYSnVJSHROWVhSeWFYaDlJRlJ5WVc1emNHOXpaV1FnYldGMGNtbDRMbHh1SUNvZ1FIUnZaRzhnVFdsbmFIUWdZbVVnYzJ4dmR5QnphVzVqWlNCMWMyVmtJRUZ5Y21GNUxtMWhjQzRnVUhKdlltRmliSGtnYm1WbFpITWdjR1Z5Wm05eWJXRnVZMlVnY21WMmFYTnBiMjR1WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQjBjbUZ1YzNCdmMyVk5ZWFJ5YVhnb2JXRjBjbWw0T2lCTllYUnlhWGdwT2lCTllYUnlhWGdnZTF4dUlDQnlaWFIxY200Z2JtVjNJRUZ5Y21GNUtHMWhkSEpwZUZzd1hTNXNaVzVuZEdncExtWnBiR3dvTUNsY2JpQWdJQ0F1YldGd0tDaGZMQ0JwS1NBOVBpQW9ibVYzSUZabFkzUnZjaWh0WVhSeWFYZ3ViR1Z1WjNSb0tTNW1hV3hzS0RBcExtMWhjQ2dvWHl3Z2Fpa2dQVDRnS0cxaGRISnBlRnRxWFZ0cFhTa3BLU2s3WEc1OVhHNWNiaThxS2x4dUlDb2dRV1JrY3lCMGQyOGdkbVZqZEc5eWN5QjNhWFJvSUhSb1pTQnpaV052Ym1RZ2IyNWxJSFJ2SUdKbElHMTFiSFJwY0d4cFpXUWdZbmtnZEdobElHZHBkbVZ1SUhKaGRHbHZMbHh1SUNwY2JpQXFJRUJsZUhCdmNuUmNiaUFxSUVCd1lYSmhiU0I3Vm1WamRHOXlmU0J3SUZSb1pTQm1hWEp6ZENCMlpXTjBiM0lnZEc4Z1lXUmtMbHh1SUNvZ1FIQmhjbUZ0SUh0V1pXTjBiM0o5SUhFZ1ZHaGxJSE5sWTI5dVpDQjJaV04wYjNJZ2RHOGdZV1JrTGx4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlGdHRkV3gwYVhCc2FXVnlQVEZkSUVFZ2JYVnNkR2x3YkdsbGNpQjBieUJpWlNCMWMyVmtJR0psWm05eVpTQjBhR1VnYzJWamIyNWtJSFpsWTNSdmNpQnBjeUJoWkdSbFpDNWNiaUFxSUVCeVpYUjFjbTRnZTFabFkzUnZjbjBnVG1WM0lIWmxZM1J2Y2lCamIyNTBZV2x1WldRZ2RHaGxJSEpsYzNWc2RDQnZaaUJ2Y0dWeVlYUnBiMjRnY0N0dGRXeDBhWEJzYVdWeUtuRXVYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCMlpXTjBiM0pCWkdRb2NEb2dWbVZqZEc5eUxDQnhPaUJXWldOMGIzSXNJRzExYkhScGNHeHBaWEk2SUc1MWJXSmxjaUE5SURFcE9pQldaV04wYjNJZ2UxeHVJQ0JqYjI1emRDQnVTWFJsYlhNZ1BTQndMbXhsYm1kMGFEdGNibHh1SUNCaGMzTmxjblFvYmtsMFpXMXpJRDA5SUhFdWJHVnVaM1JvTENBblZtVmpkRzl5SUd4bGJtZDBhSE1nWkc4Z2JtOTBJRzFoZEdOb0xpY3BPMXh1WEc0Z0lHTnZibk4wSUhSdmRHRnNJRDBnYm1WM0lGWmxZM1J2Y2lodVNYUmxiWE1wTzF4dVhHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnY0M1c1pXNW5kR2c3SUNzcmFTbGNiaUFnSUNCMGIzUmhiRnRwWFNBOUlIQmJhVjBnS3lCdGRXeDBhWEJzYVdWeUlDb2djVnRwWFR0Y2JseHVJQ0J5WlhSMWNtNGdkRzkwWVd3N1hHNTlYRzVjYmk4cUtseHVJQ29nVTNWdGN5QjBhR1VnZG1WamRHOXlKM01nYVhSbGJYTXVYRzRnS2x4dUlDb2dRSEJoY21GdElIdFdaV04wYjNKOUlIWWdWR2hsSUhabFkzUnZjaUIwYnlCaVpTQnpkVzF0WldRdVhHNGdLaUJBY21WMGRYSnVJSHR1ZFcxaVpYSjlJRlJvWlNCMlpXTjBiM0luY3lCcGRHVnRjeUJ6ZFcwdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdsMFpXMXpVM1Z0S0hZNklGWmxZM1J2Y2lrNklHNTFiV0psY2lCN1hHNGdJR3hsZENCMGIzUmhiQ0E5SURBN1hHNWNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCMkxteGxibWQwYURzZ0t5dHBLVnh1SUNBZ0lIUnZkR0ZzSUNzOUlIWmJhVjA3WEc1Y2JpQWdjbVYwZFhKdUlIUnZkR0ZzTzF4dWZWeHVYRzR2S2lwY2JpQXFJRk4xY1dGeVpYTWdkR2hsSUhabFkzUnZjaWR6SUdsMFpXMXpMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdWbVZqZEc5eWZTQjJJRlJvWlNCMlpXTjBiM0lnZEc4Z2MzRjFZWEpsTGx4dUlDb2dRSEpsZEhWeWJpQjdWbVZqZEc5eWZTQkJJRzVsZHlCMlpXTjBiM0lnWTI5dWRHRnBibWx1WnlCMGFHVWdiM0pwWjJsdVlXd25jeUJwZEdWdGN5QnpjWFZoY21Wa0xseHVJQ292WEc1bWRXNWpkR2x2YmlCMlpXTjBiM0pUY1hWaGNtVW9kam9nVm1WamRHOXlLVG9nVm1WamRHOXlJSHRjYmlBZ1kyOXVjM1FnYmtsMFpXMXpJRDBnZGk1c1pXNW5kR2c3WEc0Z0lHTnZibk4wSUhSdmRHRnNJRDBnYm1WM0lGWmxZM1J2Y2lodVNYUmxiWE1wTzF4dVhHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnZGk1c1pXNW5kR2c3SUNzcmFTbGNiaUFnSUNCMGIzUmhiRnRwWFNBOUlIWmJhVjBnS2lCMlcybGRPMXh1WEc0Z0lISmxkSFZ5YmlCMGIzUmhiRHRjYm4xY2JseHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHRWdiV0YwY21sNElHWnBiR3hsWkNCM2FYUm9JSEpoYm1SdmJTQm1iRzloZEdsdVp5QndiMmx1ZENCMllXeDFaWE11WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUdScGJXVnVjMmx2YmpFZ1ZHaGxJR1pwY25OMElHUnBiV1Z1YzJsdmJpQnZaaUIwYUdVZ2JXRjBjbWw0TGx4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHUnBiV1Z1YzJsdmJqSWdWR2hsSUhObFkyOXVaQ0JrYVcxbGJuTnBiMjRnYjJZZ2RHaGxJRzFoZEhKcGVDNWNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0JiYzJOaGJHVTlNUzVkSUUxaGVDQjJZV3gxWlNCbmFYWmxiaUJpZVNCeVlXNWtiMjBnWjJWdVpYSmhkRzl5TGx4dUlDb2dRSEpsZEhWeWJpQjdUV0YwY21sNGZTQkJJRzVsZHlCdFlYUnlhWGdnWm1sc2JHVmtJSGRwZEdnZ2NtRnVaRzl0SUdac2IyRjBhVzVuSUhCdmFXNTBJQ0IyWVd4MVpYTXVYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCbWFXeHNVbUZ1Wkc5dFRXRjBjbWw0S0dScGJXVnVjMmx2YmpFNklHNTFiV0psY2l3Z1pHbHRaVzV6YVc5dU1qb2diblZ0WW1WeUxDQnpZMkZzWlRvZ2JuVnRZbVZ5SUQwZ01TNHBPaUJOWVhSeWFYZ2dlMXh1SUNCamIyNXpkQ0J0WVhSeWFYZ2dQU0JwYm1sMFEyOXZjbVJwYm1GMFpYTW9aR2x0Wlc1emFXOXVNU3dnWkdsdFpXNXphVzl1TWlrN1hHNWNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCa2FXMWxibk5wYjI0eE95QXJLMmtwSUh0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JxSUQwZ01Ec2dhaUE4SUdScGJXVnVjMmx2YmpJN0lDc3JhaWxjYmlBZ0lDQWdJRzFoZEhKcGVGdHBYVnRxWFNBOUlISmhibVJ2YlVac2IyRjBLSE5qWVd4bEtUdGNiaUFnZlZ4dUlDQnlaWFIxY200Z2JXRjBjbWw0TzF4dWZWeHVYRzR2S2lwY2JpQXFJRU5oYkdOMWJHRjBaWE1nUlhWamJHbGtaV0Z1SUdScGMzUmhibU5sSUdKbGRIZGxaVzRnZEhkdklIWmxZM1J2Y25NdVhHNGdLbHh1SUNvZ1FHVjRjRzl5ZEZ4dUlDb2dRSEJoY21GdElIdFdaV04wYjNKOUlIQWdWR2hsSUdacGNuTjBJSFpsWTNSdmNpNWNiaUFxSUVCd1lYSmhiU0I3Vm1WamRHOXlmU0J4SUZSb1pTQnpaV052Ym1RZ2RtVmpkRzl5TGx4dUlDb2dRSEpsZEhWeWJpQjdiblZ0WW1WeWZTQkZkV05zYVdSbFlXNGdaR2x6ZEdGdVkyVWdZbVYwZDJWbGJpQjBhR1VnWjJsMlpXNGdkbVZqZEc5eWN5NWNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdOaGJHTjFiR0YwWlVWMVkyeHBaR1ZoYmtScGMzUmhibU5sS0hBNklGWmxZM1J2Y2l3Z2NUb2dWbVZqZEc5eUtUb2diblZ0WW1WeUlIdGNiaUFnWTI5dWMzUWdaR2xtWmlBOUlIWmxZM1J2Y2tGa1pDaHdMQ0J4TENBdE1TazdYRzRnSUdOdmJuTjBJSE54WkdsbVppQTlJSFpsWTNSdmNsTnhkV0Z5WlNoa2FXWm1LVHRjYmlBZ1kyOXVjM1FnYzNGa2FXWm1VM1Z0YlNBOUlHbDBaVzF6VTNWdEtITnhaR2xtWmlrN1hHNGdJSEpsZEhWeWJpQk5ZWFJvTG5OeGNuUW9jM0ZrYVdabVUzVnRiU2s3WEc1OVhHNWNiaThxS2x4dUlDb2dRM0psWVhSbGN5QmhJR1JwYzNSaGJtTmxJRzFoZEhKcGVDQjFjMmx1WnlCaElHTjFjM1J2YlNCa2FYTjBZVzVqWlNCbWRXNWpkR2x2Ymk1Y2JpQXFYRzRnS2lCQVpYaHdiM0owWEc0Z0tpQkFjR0Z5WVcwZ2UxWmxZM1J2Y25OOUlHUmhkR0VnU1c1d2RYUWdkbVZqZEc5eWN5QjBieUJqWVd4amRXeGhkR1VnWkdsemRHRnVZMlZ6TGx4dUlDb2dRSEJoY21GdElIdEVhWE4wWVc1alpVMWxkSEpwWTMwZ1pHbHpkR0Z1WTJVZ1EzVnpkRzl0SUdScGMzUmhibU5sSUdaMWJtTjBhVzl1TGx4dUlDb2dRSEpsZEhWeWJpQjdUV0YwY21sNGZTQkRZV3hqZFd4aGRHVmtJR04xYzNSdmJTQmthWE4wWVc1alpTQnRZWFJ5YVhndVhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJqWVd4alJHbHpkR0Z1WTJWTllYUnlhWGdvWkdGMFlUb2dWbVZqZEc5eWN5d2daR2x6ZEdGdVkyVTZJRVJwYzNSaGJtTmxUV1YwY21saktUb2dUV0YwY21sNElIdGNiaUFnWTI5dWMzUWdia2wwWlcxeklEMGdaR0YwWVM1c1pXNW5kR2c3WEc0Z0lHTnZibk4wSUcxaGRISnBlQ0E5SUdsdWFYUkRiMjl5WkdsdVlYUmxjeWh1U1hSbGJYTXNJRzVKZEdWdGN5d2dNQ2s3WEc1Y2JpQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0J1U1hSbGJYTTdJQ3NyYVNrZ2UxeHVJQ0FnSUdadmNpQW9iR1YwSUdvZ1BTQnBLekU3SUdvZ1BDQnVTWFJsYlhNN0lDc3JhaWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdaRG9nYm5WdFltVnlJRDBnS0dSaGRHRmJhVjBnUFQwZ2JuVnNiQ2tnZkh3Z0tHUmhkR0ZiYWwwZ1BUMGdiblZzYkNrZ1B5QXdJRG9nWkdsemRHRnVZMlVvWkdGMFlWdHBYU3dnWkdGMFlWdHFYU2s3WEc0Z0lDQWdJQ0J0WVhSeWFYaGJhVjFiYWwwZ1BTQnRZWFJ5YVhoYmFsMWJhVjBnUFNCa08xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnYldGMGNtbDRPMXh1ZlZ4dVhHNHZLaW9nUjJWdVpYSmhkR1Z6SUdGeWNtRjVJR1p5YjIwZ1lTQnlZVzVuWlNCYlltVm5hVzQ3SUdWdVpGMGdiM0lnVzJKbFoybHVPeUJsYm1RcElHbG1JR1Z1WkVWNFkyeDFjMmwyWlM0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQm5aVzVTWVc1blpTaGlaV2RwYmpvZ2JuVnRZbVZ5TENCbGJtUTZJRzUxYldKbGNpd2daVzVrUlhoamJIVnphWFpsSUQwZ1ptRnNjMlVwT2lCSmJuUXpNa0Z5Y21GNUlIdGNiaUFnWTI5dWMzUWdia2wwWlcxeklEMGdaVzVrSUMwZ1ltVm5hVzRnS3lBb1pXNWtSWGhqYkhWemFYWmxJRDhnTUNBNklERXBPMXh1SUNCamIyNXpkQ0J6WlhKcFpYTWdQU0J1WlhjZ1NXNTBNekpCY25KaGVTaHVTWFJsYlhNcE8xeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2JrbDBaVzF6T3lBcksya3BYRzRnSUNBZ2MyVnlhV1Z6VzJsZElEMGdZbVZuYVc0Z0t5QnBPMXh1WEc0Z0lISmxkSFZ5YmlCelpYSnBaWE03WEc1OVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QnZjbVJsY2lCdlppQjJZV3gxWlhNZ1lYTWdhV1lnZEdobGVTQmhjbVVnYzI5eWRHVmtMbHh1SUNwY2JpQXFJRUJsZUhCdmNuUmNiaUFxSUVCd1lYSmhiU0I3WVc1NVcxMTlJSFpoYkhWbGN5QkpibkIxZENCaGNuSmhlUzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm4wZ1czSmxkbVZ5YzJVOVptRnNjMlZkSUZkb1pYUm9aWElnZEc4Z2NtVjBkWEp1SUhKbGRtVnljMlZrSUc5eVpHVnlMbHh1SUNvZ1FISmxkSFZ5YmlCN2JuVnRZbVZ5VzExOUlGUm9aU0J2Y21SbGNpQmpiMjF3ZFhSbFpDNWNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdGeVoxTnZjblFvZG1Gc2RXVnpPaUJoYm5sYlhTd2djbVYyWlhKelpTQTlJR1poYkhObEtUb2diblZ0WW1WeVcxMGdlMXh1SUNCamIyNXpkQ0J6YjNKMFptNGdQU0J5WlhabGNuTmxJRDhnS0dFNklHRnVlVnRkTENCaU9pQmhibmxiWFNrZ1BUNGdLR0piTUYwZ0xTQmhXekJkS1NBNklDaGhPaUJoYm5sYlhTd2dZam9nWVc1NVcxMHBJRDArSUNoaFd6QmRJQzBnWWxzd1hTazdYRzRnSUdOdmJuTjBJR1JsWTI5eUlEMGdLSFk2SUdGdWVTd2dhVG9nYm5WdFltVnlLU0E5UGlCYmRpd2dhVjA3SUM4dklITmxkQ0JwYm1SbGVDQjBieUIyWVd4MVpWeHVJQ0JqYjI1emRDQjFibVJsWTI5eUlEMGdLR0U2SUdGdWVWdGRLU0E5UGlCaFd6RmRPeUF2THlCc1pXRjJaU0J2Ym14NUlHbHVaR1Y0WEc0Z0lHTnZibk4wSUY5aGNtZHpiM0owSUQwZ0tHRnljam9nWVc1NVcxMHBJRDArSUdGeWNpNXRZWEFvWkdWamIzSXBMbk52Y25Rb2MyOXlkR1p1S1M1dFlYQW9kVzVrWldOdmNpazdYRzRnSUhKbGRIVnliaUJmWVhKbmMyOXlkQ2gyWVd4MVpYTXBPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2RHaGxJR2x1WkdWNFpYTWdiMllnZEdobElHMXZjM1FnWkdsMlpYSnpaU0J2WW1wbFkzUnpJR0ZqWTI5eVpHbHVaeUIwYnlCMGFHVWdaR2x6ZENCbWRXNWpkR2x2Ymx4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHeGxibWQwYUNCMGIzUmhiQ0J1ZFcxaVpYSWdiMllnYjJKcVpXTjBjMXh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUc0Z2JuVnRZbVZ5SUc5bUlHUnBkbVZ5YzJVZ1pXeGxiV1Z1ZEhNZ2RHOGdabWx1WkZ4dUlDb2dRSEJoY21GdElIc29hVEU2SUc1MWJXSmxjaXdnYVRJNklHNTFiV0psY2lrZ1BUNGdiblZ0WW1WeWZTQmthWE4wSUdFZ1puVnVZM1JwYjI0Z2QyaHBZMmdnWTJGc1kzVnNZWFJsY3lCa2FYTjBZVzVqWlNCaVpYUjNaV1Z1SUhSM2J5QnZZbXBsWTNSeklIVnphVzVuSUhSb1pXbHlJR2x1WkdWNFpYTmNiaUFxSUVCeVpYUjFjbTV6SUh0dWRXMWlaWEpiWFgwZ1ZHaGxJR2x1WkdWNFpYTWdiMllnZEdobElHMXZjM1FnWkdsMlpYSnpaU0J2WW1wbFkzUnpYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCblpYUkVhWFpsY25ObFUzVmljMlYwS0d4bGJtZDBhRG9nYm5WdFltVnlMQ0J1T2lCdWRXMWlaWElzSUdScGMzUTZJQ2hwTVRvZ2JuVnRZbVZ5TENCcE1qb2diblZ0WW1WeUtTQTlQaUJ1ZFcxaVpYSXBPaUJ1ZFcxaVpYSmJYU0I3WEc0Z0lHWjFibU4wYVc5dUlHMWhlRUo1S0haaGJIVmxjem9nU1hSbGNtRmliR1ZKZEdWeVlYUnZjanh1ZFcxaVpYSStMQ0J2Y21SbGNrSjVPaUFvYVRvZ2JuVnRZbVZ5S1NBOVBpQnVkVzFpWlhJcElIdGNiaUFnSUNCc1pYUWdiV0Y0Vm1Gc2RXVWdQU0J1ZFd4c08xeHVJQ0FnSUd4bGRDQnRZWGhQY21SbGNrSjVJRDBnYm5Wc2JEdGNibHh1SUNBZ0lHWnZjaUFvWTI5dWMzUWdaV3hsYldWdWRDQnZaaUIyWVd4MVpYTXBJSHRjYmlBZ0lDQWdJR052Ym5OMElHVnNaVzFsYm5SUGNtUmxja0o1SUQwZ2IzSmtaWEpDZVNobGJHVnRaVzUwS1R0Y2JpQWdJQ0FnSUdsbUlDaHRZWGhQY21SbGNrSjVJRDA5SUc1MWJHd2dmSHdnWld4bGJXVnVkRTl5WkdWeVFua2dQaUJ0WVhoUGNtUmxja0o1S1NCN1hHNGdJQ0FnSUNBZ0lHMWhlRlpoYkhWbElEMGdaV3hsYldWdWREdGNiaUFnSUNBZ0lDQWdiV0Y0VDNKa1pYSkNlU0E5SUdWc1pXMWxiblJQY21SbGNrSjVPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnYldGNFZtRnNkV1U3WEc0Z0lIMWNibHh1SUNCamIyNXpkQ0J6ZFdKelpYUWdQU0JiY21GdVpHOXRTVzUwS0d4bGJtZDBhQ0F0SURFcFhUdGNiaUFnWTI5dWMzUWdZMjl0Y0d4bGJXVnVkQ0E5SUc1bGR5QlRaWFFvS1R0Y2JseHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUd4bGJtZDBhRHNnS3l0cEtTQjdYRzRnSUNBZ2FXWWdLQ0Z6ZFdKelpYUXVhVzVqYkhWa1pYTW9hU2twWEc0Z0lDQWdJQ0JqYjIxd2JHVnRaVzUwTG1Ga1pDaHBLVHRjYmlBZ2ZWeHVYRzRnSUhkb2FXeGxJQ2h6ZFdKelpYUXViR1Z1WjNSb0lEd2diaWtnZTF4dUlDQWdJR052Ym5OMElHbGtlQ0E5SUcxaGVFSjVLRnh1SUNBZ0lDQWdZMjl0Y0d4bGJXVnVkQzUyWVd4MVpYTW9LU0JoY3lCSmRHVnlZV0pzWlVsMFpYSmhkRzl5UEc1MWJXSmxjajRzWEc0Z0lDQWdJQ0FvYVNrZ1BUNGdUV0YwYUM1dGFXNHVZWEJ3Ykhrb1RXRjBhQ3dnYzNWaWMyVjBMbTFoY0NobWRXNWpkR2x2YmlBb2RtRnNMQ0JwYm1SbGVDa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdaR2x6ZENocExDQjJZV3dwTzF4dUlDQWdJQ0FnZlNrcEtUdGNiaUFnSUNCcFppQW9hV1I0S1NCN1hHNGdJQ0FnSUNCemRXSnpaWFF1Y0hWemFDaHBaSGdwTzF4dUlDQWdJQ0FnWTI5dGNHeGxiV1Z1ZEM1a1pXeGxkR1VvYVdSNEtUdGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2NtVjBkWEp1SUhOMVluTmxkRHRjYm4xY2JseHVMeW9xWEc0Z0tpQlNaWFIxY201eklHNXZjbTFoYkdsNlpXUWdkbVZqZEc5eVhHNGdLaUJBY0dGeVlXMGdaR0YwWVNCdWRXMWxjbWxqWVd3Z1lYSnlZWGxjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHNXZjbTFoYkdsNlpTaGtZWFJoT2lCV1pXTjBiM0lwT2lCV1pXTjBiM0lnZTF4dUlDQnNaWFFnYldWaGJpQTlJREE3WEc0Z0lHeGxkQ0J6ZEdRZ1BTQXdPMXh1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2daR0YwWVM1c1pXNW5kR2c3SUNzcmFTbGNiaUFnSUNCdFpXRnVJQ3M5SUdSaGRHRmJhVjA3WEc1Y2JpQWdiV1ZoYmlBdlBTQmtZWFJoTG14bGJtZDBhRHRjYmx4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR1JoZEdFdWJHVnVaM1JvT3lBcksya3BYRzRnSUNBZ2MzUmtJQ3M5SUNoa1lYUmhXMmxkSUMwZ2JXVmhiaWtnS2lBb1pHRjBZVnRwWFNBdElHMWxZVzRwTzF4dVhHNGdJSE4wWkNBOUlFMWhkR2d1YzNGeWRDaHpkR1FnTHlCa1lYUmhMbXhsYm1kMGFDazdYRzVjYmlBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQmtZWFJoTG14bGJtZDBhRHNnS3l0cEtWeHVJQ0FnSUdSaGRHRmJhVjBnUFNBb1pHRjBZVnRwWFNBdElHMWxZVzRwSUM4Z2MzUmtPMXh1WEc0Z0lISmxkSFZ5YmlCa1lYUmhPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFWnBibVJ6SUhObGRDQmthV1ptWlhKbGJtTmxJR0psZEhkbFpXNGdkSGR2SUd4cGMzUnpMbHh1SUNvZ1FIQmhjbUZ0SUh0aGJubGJYWDBnWVNCVWFHVWdabWx5YzNRZ2JHbHpkQzVjYmlBcUlFQndZWEpoYlNCN1lXNTVXMTE5SUdJZ1ZHaGxJSE5sWTI5dVpDQnNhWE4wTGx4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdjMlYwUkdsbVptVnlaVzVqWlNoaE9pQmhibmxiWFN3Z1lqb2dZVzU1VzEwcE9pQmhibmxiWFNCN1hHNGdJR052Ym5OMElHSlRaWFFnUFNCdVpYY2dVMlYwS0dJcE8xeHVJQ0J5WlhSMWNtNGdRWEp5WVhrdVpuSnZiU2h1WlhjZ1UyVjBLR0V1Wm1sc2RHVnlLQ2g0S1NBOVBpQWhZbE5sZEM1b1lYTW9lQ2twS1M1MllXeDFaWE1vS1NrN1hHNTlYRzRpWFgwPSIsImltcG9ydCAqIGFzIHVtaiBmcm9tICd1bWFwLWpzJztcbmltcG9ydCB7IFRTTkUgfSBmcm9tICdAa2Vja2VsdC90c25lJztcbmltcG9ydCB7IFZlY3RvciB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3R5cGUtZGVjbGFyYXRpb25zJztcbmltcG9ydCB7IGNhbGNEaXN0YW5jZU1hdHJpeCwgdHJhbnNwb3NlTWF0cml4LCBhc3NlcnQsIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdmVjdG9yLW9wZXJhdGlvbnMnO1xuaW1wb3J0IHsgU1BFQmFzZSwgUFNQRUJhc2UsIE9yaWdpbmFsU1BFIH0gZnJvbSAnLi9zcGUnO1xuaW1wb3J0IHsgTWVhc3VyZSwgQXZhaWxhYmxlTWV0cmljcywgaXNCaXRBcnJheU1ldHJpYyB9IGZyb20gJy4vdHlwZWQtbWV0cmljcyc7XG5pbXBvcnQgQml0QXJyYXkgZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvYml0LWFycmF5Jztcbi8qKlxuICogQWJzdHJhY3QgZGltZW5zaW9uYWxpdHkgcmVkdWNlci5cbiAqXG4gKiBAYWJzdHJhY3RcbiAqIEBjbGFzcyBSZWR1Y2VyXG4gKi9cbmNsYXNzIFJlZHVjZXIge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUmVkdWNlci5cbiAgICAgKiBAcGFyYW0ge09wdGlvbnN9IG9wdGlvbnMgT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgKiBAbWVtYmVyb2YgUmVkdWNlclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgIH1cbn1cbi8qKlxuICogSW1wbGVtZW50cyB0LVNORSBkaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24uXG4gKlxuICogQGNsYXNzIFRTTkVSZWR1Y2VyXG4gKiBAZXh0ZW5kcyB7UmVkdWNlcn1cbiAqL1xuY2xhc3MgVFNORVJlZHVjZXIgZXh0ZW5kcyBSZWR1Y2VyIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFRTTkVSZWR1Y2VyLlxuICAgICAqIEBwYXJhbSB7T3B0aW9uc30gb3B0aW9ucyBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAqIEBtZW1iZXJvZiBUU05FUmVkdWNlclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBzdXBlcihvcHRpb25zKTtcbiAgICAgICAgdGhpcy5yZWR1Y2VyID0gbmV3IFRTTkUob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuaXRlcmF0aW9ucyA9IChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5pdGVyYXRpb25zKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAxMDA7XG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSBvcHRpb25zLmRpc3RhbmNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbWJlZHMgdGhlIGRhdGEgZ2l2ZW4gaW50byB0aGUgdHdvLWRpbWVuc2lvbmFsIHNwYWNlIHVzaW5nIHQtU05FIG1ldGhvZC5cbiAgICAgKiBAcmV0dXJuIHtDb29yZGluYXRlc30gQ2FydGVzaWFuIGNvb3JkaW5hdGUgb2YgdGhpcyBlbWJlZGRpbmcuXG4gICAgICovXG4gICAgdHJhbnNmb3JtKCkge1xuICAgICAgICB0aGlzLnJlZHVjZXIuaW5pdERhdGFEaXN0KGNhbGNEaXN0YW5jZU1hdHJpeCh0aGlzLmRhdGEsIHRoaXMuZGlzdGFuY2UpKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLml0ZXJhdGlvbnM7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5yZWR1Y2VyLnN0ZXAoKTsgLy8gZXZlcnkgdGltZSB5b3UgY2FsbCB0aGlzLCBzb2x1dGlvbiBnZXRzIGJldHRlclxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlZHVjZXIuZ2V0U29sdXRpb24oKTtcbiAgICB9XG59XG4vKipcbiAqIEltcGxlbWVudHMgVU1BUCBkaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24uXG4gKlxuICogQGNsYXNzIFVNQVBSZWR1Y2VyXG4gKiBAZXh0ZW5kcyB7UmVkdWNlcn1cbiAqL1xuY2xhc3MgVU1BUFJlZHVjZXIgZXh0ZW5kcyBSZWR1Y2VyIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFVNQVBSZWR1Y2VyLlxuICAgICAqIEBwYXJhbSB7T3B0aW9uc30gb3B0aW9ucyBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAqIEBtZW1iZXJvZiBVTUFQUmVkdWNlclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XG4gICAgICAgIGFzc2VydCgnZGlzdGFuY2VGbicgaW4gb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuZGlzdGFuY2VGbiA9IG9wdGlvbnMuZGlzdGFuY2VGbjtcbiAgICAgICAgdGhpcy52ZWN0b3JzID0gW107XG4gICAgICAgIG9wdGlvbnMuZGlzdGFuY2VGbiA9IHRoaXMuX2VuY29kZWREaXN0YW5jZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnJlZHVjZXIgPSBuZXcgdW1qLlVNQVAob3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBkaXN0YW5jZSB3cmFwcGVyIHRvIGhhdmUgbnVtZXJpYyBpbnB1dHMgaW5zdGVhZCBvZiBzdHJpbmcgb25lcy5cbiAgICAgKlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKiBAcGFyYW0ge251bWJlcltdfSBhIFRoZSBmaXJzdCBpdGVtLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyW119IGIgVGhlIGZpcnN0IGl0ZW0uXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBEaXN0YW5jZSBtZXRyaWMuXG4gICAgICogQG1lbWJlcm9mIFVNQVBSZWR1Y2VyXG4gICAgICovXG4gICAgX2VuY29kZWREaXN0YW5jZShhLCBiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc3RhbmNlRm4odGhpcy5kYXRhW2FbMF1dLCB0aGlzLmRhdGFbYlswXV0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbmNvZGVzIHRoZSBpbnB1dCBkYXRhIGFzIGEgdmVjdG9yIG9mIGluZGljZXMuXG4gICAgICpcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICogQG1lbWJlcm9mIFVNQVBSZWR1Y2VyXG4gICAgICovXG4gICAgX2VuY29kZSgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHRoaXMudmVjdG9ycy5wdXNoKFtpXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRW1iZWRzIHRoZSBkYXRhIGdpdmVuIGludG8gdGhlIHR3by1kaW1lbnNpb25hbCBzcGFjZSB1c2luZyBVTUFQIG1ldGhvZC5cbiAgICAgKiBAcmV0dXJuIHtDb29yZGluYXRlc30gQ2FydGVzaWFuIGNvb3JkaW5hdGUgb2YgdGhpcyBlbWJlZGRpbmcuXG4gICAgICovXG4gICAgdHJhbnNmb3JtKCkge1xuICAgICAgICB0aGlzLl9lbmNvZGUoKTtcbiAgICAgICAgY29uc3QgZW1iZWRkaW5nID0gdGhpcy5yZWR1Y2VyLmZpdCh0aGlzLnZlY3RvcnMpO1xuICAgICAgICBmdW5jdGlvbiBhcnJheUNhc3QyQ29vcmRpbmF0ZXMoZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheShkYXRhLmxlbmd0aCkuZmlsbCgwKS5tYXAoKF8sIGkpID0+IChWZWN0b3IuZnJvbShkYXRhW2ldKSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheUNhc3QyQ29vcmRpbmF0ZXMoZW1iZWRkaW5nKTtcbiAgICB9XG59XG4vKipcbiAqIEltcGxlbWVudHMgb3JpZ2luYWwgU1BFIGRpbWVuc2lvbmFsaXR5IHJlZHVjdGlvbi5cbiAqXG4gKiBAY2xhc3MgU1BFUmVkdWNlclxuICogQGV4dGVuZHMge1JlZHVjZXJ9XG4gKi9cbmNsYXNzIFNQRVJlZHVjZXIgZXh0ZW5kcyBSZWR1Y2VyIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFNQRVJlZHVjZXIuXG4gICAgICogQHBhcmFtIHtPcHRpb25zfSBvcHRpb25zIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgICogQG1lbWJlcm9mIFNQRVJlZHVjZXJcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLnJlZHVjZXIgPSBuZXcgU1BFQmFzZShvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW1iZWRzIHRoZSBkYXRhIGdpdmVuIGludG8gdGhlIHR3by1kaW1lbnNpb25hbCBzcGFjZSB1c2luZyB0aGUgb3JpZ2luYWwgU1BFIG1ldGhvZC5cbiAgICAgKiBAcmV0dXJuIHtDb29yZGluYXRlc30gQ2FydGVzaWFuIGNvb3JkaW5hdGUgb2YgdGhpcyBlbWJlZGRpbmcuXG4gICAgICovXG4gICAgdHJhbnNmb3JtKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWR1Y2VyLmVtYmVkKHRoaXMuZGF0YSk7XG4gICAgfVxufVxuLyoqXG4gKiBJbXBsZW1lbnRzIG1vZGlmaWVkIFNQRSBkaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24uXG4gKlxuICogQGNsYXNzIFBTUEVSZWR1Y2VyXG4gKiBAZXh0ZW5kcyB7UmVkdWNlcn1cbiAqL1xuY2xhc3MgUFNQRVJlZHVjZXIgZXh0ZW5kcyBSZWR1Y2VyIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFBTUEVSZWR1Y2VyLlxuICAgICAqIEBwYXJhbSB7T3B0aW9uc30gb3B0aW9ucyBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAqIEBtZW1iZXJvZiBQU1BFUmVkdWNlclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XG4gICAgICAgIHRoaXMucmVkdWNlciA9IG5ldyBQU1BFQmFzZShvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW1iZWRzIHRoZSBkYXRhIGdpdmVuIGludG8gdGhlIHR3by1kaW1lbnNpb25hbCBzcGFjZSB1c2luZyB0aGUgbW9kaWZpZWQgU1BFIG1ldGhvZC5cbiAgICAgKiBAcmV0dXJuIHtDb29yZGluYXRlc30gQ2FydGVzaWFuIGNvb3JkaW5hdGUgb2YgdGhpcyBlbWJlZGRpbmcuXG4gICAgICovXG4gICAgdHJhbnNmb3JtKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWR1Y2VyLmVtYmVkKHRoaXMuZGF0YSk7XG4gICAgfVxufVxuLyoqXG4gKiBJbXBsZW1lbnRzIG9yaWdpbmFsIFNQRSBkaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24uXG4gKlxuICogQGNsYXNzIE9yaWdpbmFsU1BFUmVkdWNlclxuICogQGV4dGVuZHMge1JlZHVjZXJ9XG4gKi9cbmNsYXNzIE9yaWdpbmFsU1BFUmVkdWNlciBleHRlbmRzIFJlZHVjZXIge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgT3JpZ2luYWxTUEVSZWR1Y2VyLlxuICAgICAqIEBwYXJhbSB7T3B0aW9uc30gb3B0aW9ucyBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAqIEBtZW1iZXJvZiBPcmlnaW5hbFNQRVJlZHVjZXJcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLnJlZHVjZXIgPSBuZXcgT3JpZ2luYWxTUEUob3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVtYmVkcyB0aGUgZGF0YSBnaXZlbiBpbnRvIHRoZSB0d28tZGltZW5zaW9uYWwgc3BhY2UgdXNpbmcgdGhlIG9yaWdpbmFsIFNQRSBtZXRob2QuXG4gICAgICogQHJldHVybiB7Q29vcmRpbmF0ZXN9IENhcnRlc2lhbiBjb29yZGluYXRlIG9mIHRoaXMgZW1iZWRkaW5nLlxuICAgICAqL1xuICAgIHRyYW5zZm9ybSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVkdWNlci5lbWJlZCh0aGlzLmRhdGEpO1xuICAgIH1cbn1cbmNvbnN0IEF2YWlsYWJsZVJlZHVjZXJzID0ge1xuICAgICdVTUFQJzogVU1BUFJlZHVjZXIsXG4gICAgJ3QtU05FJzogVFNORVJlZHVjZXIsXG4gICAgJ1NQRSc6IFNQRVJlZHVjZXIsXG4gICAgJ3BTUEUnOiBQU1BFUmVkdWNlcixcbiAgICAnT3JpZ2luYWxTUEUnOiBPcmlnaW5hbFNQRVJlZHVjZXIsXG59O1xuLyoqXG4gKiBVbmlmaWVkIGNsYXNzIGltcGxlbWVudGluZyBkaWZmZXJlbnQgZGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uIG1ldGhvZHMuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIERpbWVuc2lvbmFsaXR5UmVkdWNlclxuICovXG5leHBvcnQgY2xhc3MgRGltZW5zaW9uYWxpdHlSZWR1Y2VyIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIERpbWVuc2lvbmFsaXR5UmVkdWNlci5cbiAgICAgKiBAcGFyYW0ge2FueVtdfSBkYXRhIFZlY3RvcnMgdG8gZW1iZWQuXG4gICAgICogQHBhcmFtIHtLbm93bk1ldGhvZHN9IG1ldGhvZCBFbWJlZGRpbmcgbWV0aG9kIHRvIGJlIGFwcGxpZWRcbiAgICAgKiBAcGFyYW0ge0tub3duTWV0cmljc30gbWV0cmljIERpc3RhbmNlIG1ldHJpYyB0byBiZSBjb21wdXRlZCBiZXR3ZWVuIGVhY2ggb2YgdGhlIHZlY3RvcnMuXG4gICAgICogQHBhcmFtIHtPcHRpb25zfSBbb3B0aW9uc10gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBpbXBsZW1lbnRpbmcgZW1iZWRkZXJzLlxuICAgICAqIEBtZW1iZXJvZiBEaW1lbnNpb25hbGl0eVJlZHVjZXJcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihkYXRhLCBtZXRob2QsIG1ldHJpYywgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG1lYXN1cmUgPSBuZXcgTWVhc3VyZShtZXRyaWMpLmdldE1lYXN1cmUoKTtcbiAgICAgICAgbGV0IHNwZWNPcHRpb25zID0ge307XG4gICAgICAgIGlmIChpc0JpdEFycmF5TWV0cmljKG1ldHJpYykpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBuZXcgQml0QXJyYXkoZGF0YVtpXS5fZGF0YSwgZGF0YVtpXS5fbGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0aG9kID09ICdVTUFQJykge1xuICAgICAgICAgICAgc3BlY09wdGlvbnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IGRhdGE6IGRhdGEgfSwgeyBkaXN0YW5jZUZuOiBtZWFzdXJlIH0pLCB7IG5FcG9jaHM6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jeWNsZXMgfSksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAndC1TTkUnKSB7XG4gICAgICAgICAgICBzcGVjT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHsgZGF0YTogZGF0YSB9LCB7IGRpc3RhbmNlOiBtZWFzdXJlIH0pLCB7IGl0ZXJhdGlvbnM6IChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jeWNsZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHVuZGVmaW5lZCB9KSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWV0aG9kID09ICdTUEUnKSB7XG4gICAgICAgICAgICBzcGVjT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IGRhdGE6IGRhdGEgfSwgeyBkaXN0YW5jZTogbWVhc3VyZSB9KSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzcGVjT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IGRhdGE6IGRhdGEgfSwgeyBkaXN0YW5jZTogbWVhc3VyZSB9KSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWR1Y2VyID0gbmV3IEF2YWlsYWJsZVJlZHVjZXJzW21ldGhvZF0oc3BlY09wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbWJlZHMgdGhlIGRhdGEgZ2l2ZW4gaW50byB0aGUgdHdvLWRpbWVuc2lvbmFsIHNwYWNlIHVzaW5nIHRoZSBjaG9zZW4gbWV0aG9kLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtib29sZWFufSB0cmFuc3Bvc2UgV2hldGhlciB0byB0cmFuc2Zvcm0gY29vcmRpbmF0ZXMgdG8gaGF2ZSBjb2x1bW5zLWZpcnN0IG9yaWVudGF0aW9uLlxuICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZW1iZWRkaW5nIG1ldGhvZCB3YXMgbm90IGZvdW5kLlxuICAgICAqIEByZXR1cm4ge0Nvb3JkaW5hdGVzfSBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBvZiB0aGlzIGVtYmVkZGluZy5cbiAgICAgKiBAbWVtYmVyb2YgRGltZW5zaW9uYWxpdHlSZWR1Y2VyXG4gICAgICovXG4gICAgdHJhbnNmb3JtKHRyYW5zcG9zZSA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLnJlZHVjZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXIgd2FzIG5vdCBkZWZpbmVkLicpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBlbWJlZGRpbmcgPSB0aGlzLnJlZHVjZXIudHJhbnNmb3JtKCk7XG4gICAgICAgIGlmICh0cmFuc3Bvc2UpIHtcbiAgICAgICAgICAgIGVtYmVkZGluZyA9IHRyYW5zcG9zZU1hdHJpeChlbWJlZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbWJlZGRpbmc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgbWV0cmljcyBhdmFpbGFibGUgYnkgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QXZhaWxhYmxlRGF0YVR5cGVzfSB0eXBlTmFtZSB0eXBlIG5hbWVcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gTWV0cmljIG5hbWVzIHdoaWNoIGV4cGVjdHMgdGhlIGdpdmVuIGRhdGEgdHlwZVxuICAgICAqIEBtZW1iZXJvZiBEaW1lbnNpb25hbGl0eVJlZHVjZXJcbiAgICAgKi9cbiAgICBzdGF0aWMgYXZhaWxhYmxlTWV0cmljc0J5VHlwZSh0eXBlTmFtZSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoQXZhaWxhYmxlTWV0cmljc1t0eXBlTmFtZV0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGRpbWVuc2lvbmFsaXR5IHJlZHVjdGlvbiBtZXRob2RzIGF2YWlsYWJsZS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqIEBtZW1iZXJvZiBEaW1lbnNpb25hbGl0eVJlZHVjZXJcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0IGF2YWlsYWJsZU1ldGhvZHMoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhBdmFpbGFibGVSZWR1Y2Vycyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgbWV0cmljcyBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKiBAbWVtYmVyb2YgRGltZW5zaW9uYWxpdHlSZWR1Y2VyXG4gICAgICovXG4gICAgc3RhdGljIGdldCBhdmFpbGFibGVNZXRyaWNzKCkge1xuICAgICAgICBsZXQgYW5zID0gW107XG4gICAgICAgIE9iamVjdC52YWx1ZXMoQXZhaWxhYmxlTWV0cmljcykuZm9yRWFjaCgob2JqKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcnJheSA9IE9iamVjdC52YWx1ZXMob2JqKTtcbiAgICAgICAgICAgIGFucyA9IFsuLi5hbnMsIC4uLmFycmF5XTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhbnM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pY21Wa2RXTmxMV1JwYldWdWMybHZibUZzYVhSNUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpY21Wa2RXTmxMV1JwYldWdWMybHZibUZzYVhSNUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVUZCTEU5QlFVOHNTMEZCU3l4SFFVRkhMRTFCUVUwc1UwRkJVeXhEUVVGRE8wRkJReTlDTEU5QlFVOHNSVUZCUXl4SlFVRkpMRVZCUVVNc1RVRkJUU3hsUVVGbExFTkJRVU03UVVGRmJrTXNUMEZCVHl4RlFVRjFReXhOUVVGTkxFVkJRVlVzVFVGQlRTeHBSRUZCYVVRc1EwRkJRenRCUVVOMFNDeFBRVUZQTEVWQlEwd3NhMEpCUVd0Q0xFVkJRMnhDTEdWQlFXVXNSVUZEWml4TlFVRk5MRWRCUTFBc1RVRkJUU3hwUkVGQmFVUXNRMEZCUXp0QlFVTjZSQ3hQUVVGUExFVkJRVU1zVDBGQlR5eEZRVUZGTEZGQlFWRXNSVUZCUlN4WFFVRlhMRVZCUVVNc1RVRkJUU3hQUVVGUExFTkJRVU03UVVGRGNrUXNUMEZCVHl4RlFVRkRMRTlCUVU4c1JVRkJaMElzWjBKQlFXZENMRVZCUVVVc1owSkJRV2RDTEVWQlFYRkNMRTFCUVUwc2FVSkJRV2xDTEVOQlFVTTdRVUZET1Vjc1QwRkJUeXhSUVVGUkxFMUJRVTBzZVVOQlFYbERMRU5CUVVNN1FVRkZMMFE3T3pzN08wZEJTMGM3UVVGRFNDeE5RVUZsTEU5QlFVODdTVUZIY0VJN096czdUMEZKUnp0SlFVTklMRmxCUVZrc1QwRkJaMEk3VVVGRE1VSXNTVUZCU1N4RFFVRkRMRWxCUVVrc1IwRkJSeXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETzBsQlF6TkNMRU5CUVVNN1EwRlZSanRCUVVWRU96czdPenRIUVV0SE8wRkJRMGdzVFVGQlRTeFhRVUZaTEZOQlFWRXNUMEZCVHp0SlFVc3ZRanM3T3p0UFFVbEhPMGxCUTBnc1dVRkJXU3hQUVVGblFqczdVVUZETVVJc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFGQlEyWXNTVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhKUVVGSkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTnFReXhKUVVGSkxFTkJRVU1zVlVGQlZTeEhRVUZITEUxQlFVRXNUMEZCVHl4aFFVRlFMRTlCUVU4c2RVSkJRVkFzVDBGQlR5eERRVUZGTEZWQlFWVXNiVU5CUVVrc1IwRkJSeXhEUVVGRE8xRkJRemRETEVsQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1QwRkJUeXhEUVVGRExGRkJRVkVzUTBGQlF6dEpRVU51UXl4RFFVRkRPMGxCUlVRN096dFBRVWRITzBsQlEwa3NVMEZCVXp0UlFVTmtMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRmVFVXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4VlFVRlZMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVU3V1VGRGVFTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF5eERRVUZETEdsRVFVRnBSRHRUUVVOMlJUdFJRVU5FTEU5QlFVOHNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF6dEpRVU53UXl4RFFVRkRPME5CUTBZN1FVRkZSRHM3T3pzN1IwRkxSenRCUVVOSUxFMUJRVTBzVjBGQldTeFRRVUZSTEU5QlFVODdTVUZMTDBJN096czdUMEZKUnp0SlFVTklMRmxCUVZrc1QwRkJaMEk3VVVGRE1VSXNTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJSV1lzVFVGQlRTeERRVUZETEZsQlFWa3NTVUZCU1N4UFFVRlBMRU5CUVVNc1EwRkJRenRSUVVWb1F5eEpRVUZKTEVOQlFVTXNWVUZCVlN4SFFVRkhMRTlCUVU4c1EwRkJReXhWUVVGVkxFTkJRVU03VVVGRGNrTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhGUVVGRkxFTkJRVU03VVVGRGJFSXNUMEZCVHl4RFFVRkRMRlZCUVZVc1IwRkJSeXhKUVVGSkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFGQlEzUkVMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzU1VGQlNTeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wbEJRM1pETEVOQlFVTTdTVUZGUkRzN096czdPenM3VDBGUlJ6dEpRVU5QTEdkQ1FVRm5RaXhEUVVGRExFTkJRVmNzUlVGQlJTeERRVUZYTzFGQlEycEVMRTlCUVU4c1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTXpSQ3hEUVVGRE8wbEJSVVE3T3pzN08wOUJTMGM3U1VGRFR5eFBRVUZQTzFGQlEyWXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTzFsQlEzcERMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVONFFqdEpRVU5JTEVOQlFVTTdTVUZGUkRzN08wOUJSMGM3U1VGRFNTeFRRVUZUTzFGQlEyUXNTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRE8xRkJSV1lzVFVGQlRTeFRRVUZUTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUldwRUxGTkJRVk1zY1VKQlFYRkNMRU5CUVVNc1NVRkJaMEk3V1VGRE4wTXNUMEZCVHl4SlFVRkpMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZET1VVc1EwRkJRenRSUVVWRUxFOUJRVThzY1VKQlFYRkNMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03U1VGRE1VTXNRMEZCUXp0RFFVTkdPMEZCUlVRN096czdPMGRCUzBjN1FVRkRTQ3hOUVVGTkxGVkJRVmNzVTBGQlVTeFBRVUZQTzBsQlJ6bENPenM3TzA5QlNVYzdTVUZEU0N4WlFVRlpMRTlCUVdkQ08xRkJRekZDTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRSUVVObUxFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NTVUZCU1N4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03U1VGRGRFTXNRMEZCUXp0SlFVVkVPenM3VDBGSFJ6dEpRVU5KTEZOQlFWTTdVVUZEWkN4UFFVRlBMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVOMlF5eERRVUZETzBOQlEwWTdRVUZGUkRzN096czdSMEZMUnp0QlFVTklMRTFCUVUwc1YwRkJXU3hUUVVGUkxFOUJRVTg3U1VGSEwwSTdPenM3VDBGSlJ6dEpRVU5JTEZsQlFWa3NUMEZCWjBJN1VVRkRNVUlzUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUTJZc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eEpRVUZKTEZGQlFWRXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRKUVVOMlF5eERRVUZETzBsQlJVUTdPenRQUVVkSE8wbEJRMGtzVTBGQlV6dFJRVU5rTEU5QlFVOHNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUTNaRExFTkJRVU03UTBGRFJqdEJRVVZFT3pzN096dEhRVXRITzBGQlEwZ3NUVUZCVFN4clFrRkJiVUlzVTBGQlVTeFBRVUZQTzBsQlIzUkRPenM3TzA5QlNVYzdTVUZEU0N4WlFVRlpMRTlCUVdkQ08xRkJRekZDTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRSUVVObUxFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NTVUZCU1N4WFFVRlhMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03U1VGRE1VTXNRMEZCUXp0SlFVVkVPenM3VDBGSFJ6dEpRVU5KTEZOQlFWTTdVVUZEWkN4UFFVRlBMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVOMlF5eERRVUZETzBOQlEwWTdRVUZGUkN4TlFVRk5MR2xDUVVGcFFpeEhRVUZITzBsQlEzaENMRTFCUVUwc1JVRkJSU3hYUVVGWE8wbEJRMjVDTEU5QlFVOHNSVUZCUlN4WFFVRlhPMGxCUTNCQ0xFdEJRVXNzUlVGQlJTeFZRVUZWTzBsQlEycENMRTFCUVUwc1JVRkJSU3hYUVVGWE8wbEJRMjVDTEdGQlFXRXNSVUZCUlN4clFrRkJhMEk3UTBGRGJFTXNRMEZCUXp0QlFVbEdPenM3T3p0SFFVdEhPMEZCUTBnc1RVRkJUU3hQUVVGUExIRkNRVUZ4UWp0SlFVZG9RenM3T3pzN096dFBRVTlITzBsQlEwZ3NXVUZCV1N4SlFVRlhMRVZCUVVVc1RVRkJiMElzUlVGQlJTeE5RVUZ2UWl4RlFVRkZMRTlCUVdsQ096dFJRVU53Uml4TlFVRk5MRTlCUVU4c1IwRkJSeXhKUVVGSkxFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4VlFVRlZMRVZCUVVVc1EwRkJRenRSUVVOcVJDeEpRVUZKTEZkQlFWY3NSMEZCUnl4RlFVRkZMRU5CUVVNN1VVRkZja0lzU1VGQlNTeG5Ra0ZCWjBJc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJUdFpRVU0xUWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJUdG5Ra0ZEY0VNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NVVUZCVVN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzJGQlEzaEVPMU5CUTBZN1VVRkZSQ3hKUVVGSkxFMUJRVTBzU1VGQlNTeE5RVUZOTEVWQlFVVTdXVUZEY0VJc1YwRkJWeXcyUTBGRFRpeEZRVUZETEVsQlFVa3NSVUZCUlN4SlFVRkpMRVZCUVVNc1JVRkRXaXhGUVVGRExGVkJRVlVzUlVGQlJTeFBRVUZQTEVWQlFVTXNSMEZEY2tJc1JVRkJReXhQUVVGUExFVkJRVVVzVDBGQlR5eGhRVUZRTEU5QlFVOHNkVUpCUVZBc1QwRkJUeXhEUVVGRkxFMUJRVTBzUlVGQlF5eEhRVU14UWl4UFFVRlBMRU5CUTFnc1EwRkJRenRUUVVOSU8yRkJRVTBzU1VGQlNTeE5RVUZOTEVsQlFVa3NUMEZCVHl4RlFVRkZPMWxCUXpWQ0xGZEJRVmNzTmtOQlEwNHNSVUZCUXl4SlFVRkpMRVZCUVVVc1NVRkJTU3hGUVVGRExFVkJRMW9zUlVGQlF5eFJRVUZSTEVWQlFVVXNUMEZCVHl4RlFVRkRMRWRCUTI1Q0xFVkJRVU1zVlVGQlZTeEZRVUZGTEUxQlFVRXNUMEZCVHl4aFFVRlFMRTlCUVU4c2RVSkJRVkFzVDBGQlR5eERRVUZGTEUxQlFVMHNiVU5CUVVrc1UwRkJVeXhGUVVGRExFZEJRekZETEU5QlFVOHNRMEZEV0N4RFFVRkRPMU5CUTBnN1lVRkJUU3hKUVVGSkxFMUJRVTBzU1VGQlNTeExRVUZMTEVWQlFVVTdXVUZETVVJc1YwRkJWeXdyUWtGQlR5eEZRVUZETEVsQlFVa3NSVUZCUlN4SlFVRkpMRVZCUVVNc1JVRkJTeXhGUVVGRExGRkJRVkVzUlVGQlJTeFBRVUZQTEVWQlFVTXNSMEZCU3l4UFFVRlBMRU5CUVVNc1EwRkJRenRUUVVOeVJUdGhRVUZOTzFsQlEwd3NWMEZCVnl3clFrRkJUeXhGUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVTXNSVUZCU3l4RlFVRkRMRkZCUVZFc1JVRkJSU3hQUVVGUExFVkJRVU1zUjBGQlN5eFBRVUZQTEVOQlFVTXNRMEZCUXp0VFFVTnlSVHRSUVVORUxFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NTVUZCU1N4cFFrRkJhVUlzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJRenRKUVVNMVJDeERRVUZETzBsQlJVUTdPenM3T3pzN1QwRlBSenRKUVVOSkxGTkJRVk1zUTBGQlF5eFpRVUZ4UWl4TFFVRkxPMUZCUTNwRExFbEJRVWtzU1VGQlNTeERRVUZETEU5QlFVOHNTVUZCU1N4VFFVRlRMRVZCUVVVN1dVRkROMElzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl3d1FrRkJNRUlzUTBGQlF5eERRVUZETzFOQlF6ZERPMUZCUTBRc1NVRkJTU3hUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4VFFVRlRMRVZCUVVVc1EwRkJRenRSUVVWNlF5eEpRVUZKTEZOQlFWTXNSVUZCUlR0WlFVTmlMRk5CUVZNc1IwRkJSeXhsUVVGbExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdVMEZEZUVNN1VVRkRSQ3hQUVVGUExGTkJRVk1zUTBGQlF6dEpRVU51UWl4RFFVRkRPMGxCUlVRN096czdPenRQUVUxSE8wbEJRMGdzVFVGQlRTeERRVUZETEhOQ1FVRnpRaXhEUVVGRExGRkJRVFJDTzFGQlEzaEVMRTlCUVU4c1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEycEVMRU5CUVVNN1NVRkZSRHM3T3pzN1QwRkxSenRKUVVOSUxFMUJRVTBzUzBGQlN5eG5Ra0ZCWjBJN1VVRkRla0lzVDBGQlR5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMR2xDUVVGcFFpeERRVUZETEVOQlFVTTdTVUZEZUVNc1EwRkJRenRKUVVWRU96czdPenRQUVV0SE8wbEJRMGdzVFVGQlRTeExRVUZMTEdkQ1FVRm5RanRSUVVONlFpeEpRVUZKTEVkQlFVY3NSMEZCWVN4RlFVRkZMRU5CUVVNN1VVRkRka0lzVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4blFrRkJaMElzUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hGUVVGRk8xbEJRemxETEUxQlFVMHNTMEZCU3l4SFFVRkhMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEYWtNc1IwRkJSeXhIUVVGSExFTkJRVU1zUjBGQlJ5eEhRVUZITEVWQlFVVXNSMEZCUnl4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVNelFpeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTklMRTlCUVU4c1IwRkJSeXhEUVVGRE8wbEJRMklzUTBGQlF6dERRVU5HSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUNvZ1lYTWdkVzFxSUdaeWIyMGdKM1Z0WVhBdGFuTW5PMXh1YVcxd2IzSjBJSHRVVTA1RmZTQm1jbTl0SUNkQWEyVmphMlZzZEM5MGMyNWxKenRjYmx4dWFXMXdiM0owSUh0UGNIUnBiMjV6TENCRWFYTjBZVzVqWlUxbGRISnBZeXdnUTI5dmNtUnBibUYwWlhNc0lGWmxZM1J2Y2l3Z1ZtVmpkRzl5YzMwZ1puSnZiU0FuUUdSaGRHRm5jbTlyTFd4cFluSmhjbWxsY3k5MWRHbHNjeTl6Y21NdmRIbHdaUzFrWldOc1lYSmhkR2x2Ym5Nbk8xeHVhVzF3YjNKMElIdGNiaUFnWTJGc1kwUnBjM1JoYm1ObFRXRjBjbWw0TEZ4dUlDQjBjbUZ1YzNCdmMyVk5ZWFJ5YVhnc1hHNGdJR0Z6YzJWeWRDeGNibjBnWm5KdmJTQW5RR1JoZEdGbmNtOXJMV3hwWW5KaGNtbGxjeTkxZEdsc2N5OXpjbU12ZG1WamRHOXlMVzl3WlhKaGRHbHZibk1uTzF4dWFXMXdiM0owSUh0VFVFVkNZWE5sTENCUVUxQkZRbUZ6WlN3Z1QzSnBaMmx1WVd4VFVFVjlJR1p5YjIwZ0p5NHZjM0JsSnp0Y2JtbHRjRzl5ZENCN1RXVmhjM1Z5WlN3Z1MyNXZkMjVOWlhSeWFXTnpMQ0JCZG1GcGJHRmliR1ZOWlhSeWFXTnpMQ0JwYzBKcGRFRnljbUY1VFdWMGNtbGpMQ0JCZG1GcGJHRmliR1ZFWVhSaFZIbHdaWE45SUdaeWIyMGdKeTR2ZEhsd1pXUXRiV1YwY21samN5YzdYRzVwYlhCdmNuUWdRbWwwUVhKeVlYa2dabkp2YlNBblFHUmhkR0ZuY205ckxXeHBZbkpoY21sbGN5OTFkR2xzY3k5emNtTXZZbWwwTFdGeWNtRjVKenRjYmx4dUx5b3FYRzRnS2lCQlluTjBjbUZqZENCa2FXMWxibk5wYjI1aGJHbDBlU0J5WldSMVkyVnlMbHh1SUNwY2JpQXFJRUJoWW5OMGNtRmpkRnh1SUNvZ1FHTnNZWE56SUZKbFpIVmpaWEpjYmlBcUwxeHVZV0p6ZEhKaFkzUWdZMnhoYzNNZ1VtVmtkV05sY2lCN1hHNGdJSEJ5YjNSbFkzUmxaQ0JrWVhSaE9pQldaV04wYjNKek8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGNtVmhkR1Z6SUdGdUlHbHVjM1JoYm1ObElHOW1JRkpsWkhWalpYSXVYRzRnSUNBcUlFQndZWEpoYlNCN1QzQjBhVzl1YzMwZ2IzQjBhVzl1Y3lCUGNIUnBiMjV6SUhSdklIQmhjM01nZEc4Z2RHaGxJR052Ym5OMGNuVmpkRzl5TGx4dUlDQWdLaUJBYldWdFltVnliMllnVW1Wa2RXTmxjbHh1SUNBZ0tpOWNiaUFnWTI5dWMzUnlkV04wYjNJb2IzQjBhVzl1Y3pvZ1QzQjBhVzl1Y3lrZ2UxeHVJQ0FnSUhSb2FYTXVaR0YwWVNBOUlHOXdkR2x2Ym5NdVpHRjBZVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCSmN5QjBieUJsYldKbFpDQjBhR1VnWkdGMFlTQm5hWFpsYmlCcGJuUnZJSFJvWlNCMGQyOHRaR2x0Wlc1emFXOXVZV3dnYzNCaFkyVXVYRzRnSUNBcVhHNGdJQ0FxSUVCaFluTjBjbUZqZEZ4dUlDQWdLaUJBY21WMGRYSnVJSHREYjI5eVpHbHVZWFJsYzMwZ1EyRnlkR1Z6YVdGdUlHTnZiM0prYVc1aGRHVWdiMllnZEdocGN5QmxiV0psWkdScGJtY3VYRzRnSUNBcUlFQnRaVzFpWlhKdlppQlNaV1IxWTJWeVhHNGdJQ0FxTDF4dUlDQmhZbk4wY21GamRDQjBjbUZ1YzJadmNtMG9LVG9nUTI5dmNtUnBibUYwWlhNN1hHNTlYRzVjYmk4cUtseHVJQ29nU1cxd2JHVnRaVzUwY3lCMExWTk9SU0JrYVcxbGJuTnBiMjVoYkdsMGVTQnlaV1IxWTNScGIyNHVYRzRnS2x4dUlDb2dRR05zWVhOeklGUlRUa1ZTWldSMVkyVnlYRzRnS2lCQVpYaDBaVzVrY3lCN1VtVmtkV05sY24xY2JpQXFMMXh1WTJ4aGMzTWdWRk5PUlZKbFpIVmpaWElnWlhoMFpXNWtjeUJTWldSMVkyVnlJSHRjYmlBZ2NISnZkR1ZqZEdWa0lISmxaSFZqWlhJNklGUlRUa1U3WEc0Z0lIQnliM1JsWTNSbFpDQnBkR1Z5WVhScGIyNXpPaUJ1ZFcxaVpYSTdYRzRnSUhCeWIzUmxZM1JsWkNCa2FYTjBZVzVqWlRvZ1JHbHpkR0Z1WTJWTlpYUnlhV003WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRU55WldGMFpYTWdZVzRnYVc1emRHRnVZMlVnYjJZZ1ZGTk9SVkpsWkhWalpYSXVYRzRnSUNBcUlFQndZWEpoYlNCN1QzQjBhVzl1YzMwZ2IzQjBhVzl1Y3lCUGNIUnBiMjV6SUhSdklIQmhjM01nZEc4Z2RHaGxJR052Ym5OMGNuVmpkRzl5TGx4dUlDQWdLaUJBYldWdFltVnliMllnVkZOT1JWSmxaSFZqWlhKY2JpQWdJQ292WEc0Z0lHTnZibk4wY25WamRHOXlLRzl3ZEdsdmJuTTZJRTl3ZEdsdmJuTXBJSHRjYmlBZ0lDQnpkWEJsY2lodmNIUnBiMjV6S1R0Y2JpQWdJQ0IwYUdsekxuSmxaSFZqWlhJZ1BTQnVaWGNnVkZOT1JTaHZjSFJwYjI1ektUdGNiaUFnSUNCMGFHbHpMbWwwWlhKaGRHbHZibk1nUFNCdmNIUnBiMjV6UHk1cGRHVnlZWFJwYjI1eklEOC9JREV3TUR0Y2JpQWdJQ0IwYUdsekxtUnBjM1JoYm1ObElEMGdiM0IwYVc5dWN5NWthWE4wWVc1alpUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJGYldKbFpITWdkR2hsSUdSaGRHRWdaMmwyWlc0Z2FXNTBieUIwYUdVZ2RIZHZMV1JwYldWdWMybHZibUZzSUhOd1lXTmxJSFZ6YVc1bklIUXRVMDVGSUcxbGRHaHZaQzVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdRMjl2Y21ScGJtRjBaWE45SUVOaGNuUmxjMmxoYmlCamIyOXlaR2x1WVhSbElHOW1JSFJvYVhNZ1pXMWlaV1JrYVc1bkxseHVJQ0FnS2k5Y2JpQWdjSFZpYkdsaklIUnlZVzV6Wm05eWJTZ3BPaUJEYjI5eVpHbHVZWFJsY3lCN1hHNGdJQ0FnZEdocGN5NXlaV1IxWTJWeUxtbHVhWFJFWVhSaFJHbHpkQ2hqWVd4alJHbHpkR0Z1WTJWTllYUnlhWGdvZEdocGN5NWtZWFJoTENCMGFHbHpMbVJwYzNSaGJtTmxLU2s3WEc1Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhSb2FYTXVhWFJsY21GMGFXOXVjenNnS3l0cEtTQjdYRzRnSUNBZ0lDQjBhR2x6TG5KbFpIVmpaWEl1YzNSbGNDZ3BPeUF2THlCbGRtVnllU0IwYVcxbElIbHZkU0JqWVd4c0lIUm9hWE1zSUhOdmJIVjBhVzl1SUdkbGRITWdZbVYwZEdWeVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG5KbFpIVmpaWEl1WjJWMFUyOXNkWFJwYjI0b0tUdGNiaUFnZlZ4dWZWeHVYRzR2S2lwY2JpQXFJRWx0Y0d4bGJXVnVkSE1nVlUxQlVDQmthVzFsYm5OcGIyNWhiR2wwZVNCeVpXUjFZM1JwYjI0dVhHNGdLbHh1SUNvZ1FHTnNZWE56SUZWTlFWQlNaV1IxWTJWeVhHNGdLaUJBWlhoMFpXNWtjeUI3VW1Wa2RXTmxjbjFjYmlBcUwxeHVZMnhoYzNNZ1ZVMUJVRkpsWkhWalpYSWdaWGgwWlc1a2N5QlNaV1IxWTJWeUlIdGNiaUFnY0hKdmRHVmpkR1ZrSUhKbFpIVmpaWEk2SUhWdGFpNVZUVUZRTzF4dUlDQndjbTkwWldOMFpXUWdaR2x6ZEdGdVkyVkdiam9nUm5WdVkzUnBiMjQ3WEc0Z0lIQnliM1JsWTNSbFpDQjJaV04wYjNKek9pQnVkVzFpWlhKYlhWdGRPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkRjbVZoZEdWeklHRnVJR2x1YzNSaGJtTmxJRzltSUZWTlFWQlNaV1IxWTJWeUxseHVJQ0FnS2lCQWNHRnlZVzBnZTA5d2RHbHZibk45SUc5d2RHbHZibk1nVDNCMGFXOXVjeUIwYnlCd1lYTnpJSFJ2SUhSb1pTQmpiMjV6ZEhKMVkzUnZjaTVjYmlBZ0lDb2dRRzFsYldKbGNtOW1JRlZOUVZCU1pXUjFZMlZ5WEc0Z0lDQXFMMXh1SUNCamIyNXpkSEoxWTNSdmNpaHZjSFJwYjI1ek9pQlBjSFJwYjI1ektTQjdYRzRnSUNBZ2MzVndaWElvYjNCMGFXOXVjeWs3WEc1Y2JpQWdJQ0JoYzNObGNuUW9KMlJwYzNSaGJtTmxSbTRuSUdsdUlHOXdkR2x2Ym5NcE8xeHVYRzRnSUNBZ2RHaHBjeTVrYVhOMFlXNWpaVVp1SUQwZ2IzQjBhVzl1Y3k1a2FYTjBZVzVqWlVadU8xeHVJQ0FnSUhSb2FYTXVkbVZqZEc5eWN5QTlJRnRkTzF4dUlDQWdJRzl3ZEdsdmJuTXVaR2x6ZEdGdVkyVkdiaUE5SUhSb2FYTXVYMlZ1WTI5a1pXUkVhWE4wWVc1alpTNWlhVzVrS0hSb2FYTXBPMXh1SUNBZ0lIUm9hWE11Y21Wa2RXTmxjaUE5SUc1bGR5QjFiV291VlUxQlVDaHZjSFJwYjI1ektUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJEZFhOMGIyMGdaR2x6ZEdGdVkyVWdkM0poY0hCbGNpQjBieUJvWVhabElHNTFiV1Z5YVdNZ2FXNXdkWFJ6SUdsdWMzUmxZV1FnYjJZZ2MzUnlhVzVuSUc5dVpYTXVYRzRnSUNBcVhHNGdJQ0FxSUVCd2NtOTBaV04wWldSY2JpQWdJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSmJYWDBnWVNCVWFHVWdabWx5YzNRZ2FYUmxiUzVjYmlBZ0lDb2dRSEJoY21GdElIdHVkVzFpWlhKYlhYMGdZaUJVYUdVZ1ptbHljM1FnYVhSbGJTNWNiaUFnSUNvZ1FISmxkSFZ5YmlCN2JuVnRZbVZ5ZlNCRWFYTjBZVzVqWlNCdFpYUnlhV011WEc0Z0lDQXFJRUJ0WlcxaVpYSnZaaUJWVFVGUVVtVmtkV05sY2x4dUlDQWdLaTljYmlBZ2NISnZkR1ZqZEdWa0lGOWxibU52WkdWa1JHbHpkR0Z1WTJVb1lUb2diblZ0WW1WeVcxMHNJR0k2SUc1MWJXSmxjbHRkS1RvZ2JuVnRZbVZ5SUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1a2FYTjBZVzVqWlVadUtIUm9hWE11WkdGMFlWdGhXekJkWFN3Z2RHaHBjeTVrWVhSaFcySmJNRjFkS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkZibU52WkdWeklIUm9aU0JwYm5CMWRDQmtZWFJoSUdGeklHRWdkbVZqZEc5eUlHOW1JR2x1WkdsalpYTXVYRzRnSUNBcVhHNGdJQ0FxSUVCd2NtOTBaV04wWldSY2JpQWdJQ29nUUcxbGJXSmxjbTltSUZWTlFWQlNaV1IxWTJWeVhHNGdJQ0FxTDF4dUlDQndjbTkwWldOMFpXUWdYMlZ1WTI5a1pTZ3BJSHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSFJvYVhNdVpHRjBZUzVzWlc1bmRHZzdJQ3NyYVNrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTUyWldOMGIzSnpMbkIxYzJnb1cybGRLVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUlcxaVpXUnpJSFJvWlNCa1lYUmhJR2RwZG1WdUlHbHVkRzhnZEdobElIUjNieTFrYVcxbGJuTnBiMjVoYkNCemNHRmpaU0IxYzJsdVp5QlZUVUZRSUcxbGRHaHZaQzVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdRMjl2Y21ScGJtRjBaWE45SUVOaGNuUmxjMmxoYmlCamIyOXlaR2x1WVhSbElHOW1JSFJvYVhNZ1pXMWlaV1JrYVc1bkxseHVJQ0FnS2k5Y2JpQWdjSFZpYkdsaklIUnlZVzV6Wm05eWJTZ3BPaUJEYjI5eVpHbHVZWFJsY3lCN1hHNGdJQ0FnZEdocGN5NWZaVzVqYjJSbEtDazdYRzVjYmlBZ0lDQmpiMjV6ZENCbGJXSmxaR1JwYm1jZ1BTQjBhR2x6TG5KbFpIVmpaWEl1Wm1sMEtIUm9hWE11ZG1WamRHOXljeWs3WEc1Y2JpQWdJQ0JtZFc1amRHbHZiaUJoY25KaGVVTmhjM1F5UTI5dmNtUnBibUYwWlhNb1pHRjBZVG9nYm5WdFltVnlXMTFiWFNrNklFTnZiM0prYVc1aGRHVnpJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQnVaWGNnUVhKeVlYa29aR0YwWVM1c1pXNW5kR2dwTG1acGJHd29NQ2t1YldGd0tDaGZMQ0JwS1NBOVBpQW9WbVZqZEc5eUxtWnliMjBvWkdGMFlWdHBYU2twS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdZWEp5WVhsRFlYTjBNa052YjNKa2FXNWhkR1Z6S0dWdFltVmtaR2x1WnlrN1hHNGdJSDFjYm4xY2JseHVMeW9xWEc0Z0tpQkpiWEJzWlcxbGJuUnpJRzl5YVdkcGJtRnNJRk5RUlNCa2FXMWxibk5wYjI1aGJHbDBlU0J5WldSMVkzUnBiMjR1WEc0Z0tseHVJQ29nUUdOc1lYTnpJRk5RUlZKbFpIVmpaWEpjYmlBcUlFQmxlSFJsYm1SeklIdFNaV1IxWTJWeWZWeHVJQ292WEc1amJHRnpjeUJUVUVWU1pXUjFZMlZ5SUdWNGRHVnVaSE1nVW1Wa2RXTmxjaUI3WEc0Z0lIQnliM1JsWTNSbFpDQnlaV1IxWTJWeU9pQlRVRVZDWVhObE8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGNtVmhkR1Z6SUdGdUlHbHVjM1JoYm1ObElHOW1JRk5RUlZKbFpIVmpaWEl1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdUM0IwYVc5dWMzMGdiM0IwYVc5dWN5QlBjSFJwYjI1eklIUnZJSEJoYzNNZ2RHOGdkR2hsSUdOdmJuTjBjblZqZEc5eUxseHVJQ0FnS2lCQWJXVnRZbVZ5YjJZZ1UxQkZVbVZrZFdObGNseHVJQ0FnS2k5Y2JpQWdZMjl1YzNSeWRXTjBiM0lvYjNCMGFXOXVjem9nVDNCMGFXOXVjeWtnZTF4dUlDQWdJSE4xY0dWeUtHOXdkR2x2Ym5NcE8xeHVJQ0FnSUhSb2FYTXVjbVZrZFdObGNpQTlJRzVsZHlCVFVFVkNZWE5sS0c5d2RHbHZibk1wTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFVnRZbVZrY3lCMGFHVWdaR0YwWVNCbmFYWmxiaUJwYm5SdklIUm9aU0IwZDI4dFpHbHRaVzV6YVc5dVlXd2djM0JoWTJVZ2RYTnBibWNnZEdobElHOXlhV2RwYm1Gc0lGTlFSU0J0WlhSb2IyUXVYRzRnSUNBcUlFQnlaWFIxY200Z2UwTnZiM0prYVc1aGRHVnpmU0JEWVhKMFpYTnBZVzRnWTI5dmNtUnBibUYwWlNCdlppQjBhR2x6SUdWdFltVmtaR2x1Wnk1Y2JpQWdJQ292WEc0Z0lIQjFZbXhwWXlCMGNtRnVjMlp2Y20wb0tUb2dRMjl2Y21ScGJtRjBaWE1nZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG5KbFpIVmpaWEl1WlcxaVpXUW9kR2hwY3k1a1lYUmhLVHRjYmlBZ2ZWeHVmVnh1WEc0dktpcGNiaUFxSUVsdGNHeGxiV1Z1ZEhNZ2JXOWthV1pwWldRZ1UxQkZJR1JwYldWdWMybHZibUZzYVhSNUlISmxaSFZqZEdsdmJpNWNiaUFxWEc0Z0tpQkFZMnhoYzNNZ1VGTlFSVkpsWkhWalpYSmNiaUFxSUVCbGVIUmxibVJ6SUh0U1pXUjFZMlZ5ZlZ4dUlDb3ZYRzVqYkdGemN5QlFVMUJGVW1Wa2RXTmxjaUJsZUhSbGJtUnpJRkpsWkhWalpYSWdlMXh1SUNCd2NtOTBaV04wWldRZ2NtVmtkV05sY2pvZ1VGTlFSVUpoYzJVN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVOeVpXRjBaWE1nWVc0Z2FXNXpkR0Z1WTJVZ2IyWWdVRk5RUlZKbFpIVmpaWEl1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdUM0IwYVc5dWMzMGdiM0IwYVc5dWN5QlBjSFJwYjI1eklIUnZJSEJoYzNNZ2RHOGdkR2hsSUdOdmJuTjBjblZqZEc5eUxseHVJQ0FnS2lCQWJXVnRZbVZ5YjJZZ1VGTlFSVkpsWkhWalpYSmNiaUFnSUNvdlhHNGdJR052Ym5OMGNuVmpkRzl5S0c5d2RHbHZibk02SUU5d2RHbHZibk1wSUh0Y2JpQWdJQ0J6ZFhCbGNpaHZjSFJwYjI1ektUdGNiaUFnSUNCMGFHbHpMbkpsWkhWalpYSWdQU0J1WlhjZ1VGTlFSVUpoYzJVb2IzQjBhVzl1Y3lrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSVzFpWldSeklIUm9aU0JrWVhSaElHZHBkbVZ1SUdsdWRHOGdkR2hsSUhSM2J5MWthVzFsYm5OcGIyNWhiQ0J6Y0dGalpTQjFjMmx1WnlCMGFHVWdiVzlrYVdacFpXUWdVMUJGSUcxbGRHaHZaQzVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdRMjl2Y21ScGJtRjBaWE45SUVOaGNuUmxjMmxoYmlCamIyOXlaR2x1WVhSbElHOW1JSFJvYVhNZ1pXMWlaV1JrYVc1bkxseHVJQ0FnS2k5Y2JpQWdjSFZpYkdsaklIUnlZVzV6Wm05eWJTZ3BPaUJEYjI5eVpHbHVZWFJsY3lCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWNtVmtkV05sY2k1bGJXSmxaQ2gwYUdsekxtUmhkR0VwTzF4dUlDQjlYRzU5WEc1Y2JpOHFLbHh1SUNvZ1NXMXdiR1Z0Wlc1MGN5QnZjbWxuYVc1aGJDQlRVRVVnWkdsdFpXNXphVzl1WVd4cGRIa2djbVZrZFdOMGFXOXVMbHh1SUNwY2JpQXFJRUJqYkdGemN5QlBjbWxuYVc1aGJGTlFSVkpsWkhWalpYSmNiaUFxSUVCbGVIUmxibVJ6SUh0U1pXUjFZMlZ5ZlZ4dUlDb3ZYRzVqYkdGemN5QlBjbWxuYVc1aGJGTlFSVkpsWkhWalpYSWdaWGgwWlc1a2N5QlNaV1IxWTJWeUlIdGNiaUFnY0hKdmRHVmpkR1ZrSUhKbFpIVmpaWEk2SUU5eWFXZHBibUZzVTFCRk8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGNtVmhkR1Z6SUdGdUlHbHVjM1JoYm1ObElHOW1JRTl5YVdkcGJtRnNVMUJGVW1Wa2RXTmxjaTVjYmlBZ0lDb2dRSEJoY21GdElIdFBjSFJwYjI1emZTQnZjSFJwYjI1eklFOXdkR2x2Ym5NZ2RHOGdjR0Z6Y3lCMGJ5QjBhR1VnWTI5dWMzUnlkV04wYjNJdVhHNGdJQ0FxSUVCdFpXMWlaWEp2WmlCUGNtbG5hVzVoYkZOUVJWSmxaSFZqWlhKY2JpQWdJQ292WEc0Z0lHTnZibk4wY25WamRHOXlLRzl3ZEdsdmJuTTZJRTl3ZEdsdmJuTXBJSHRjYmlBZ0lDQnpkWEJsY2lodmNIUnBiMjV6S1R0Y2JpQWdJQ0IwYUdsekxuSmxaSFZqWlhJZ1BTQnVaWGNnVDNKcFoybHVZV3hUVUVVb2IzQjBhVzl1Y3lrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSVzFpWldSeklIUm9aU0JrWVhSaElHZHBkbVZ1SUdsdWRHOGdkR2hsSUhSM2J5MWthVzFsYm5OcGIyNWhiQ0J6Y0dGalpTQjFjMmx1WnlCMGFHVWdiM0pwWjJsdVlXd2dVMUJGSUcxbGRHaHZaQzVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdRMjl2Y21ScGJtRjBaWE45SUVOaGNuUmxjMmxoYmlCamIyOXlaR2x1WVhSbElHOW1JSFJvYVhNZ1pXMWlaV1JrYVc1bkxseHVJQ0FnS2k5Y2JpQWdjSFZpYkdsaklIUnlZVzV6Wm05eWJTZ3BPaUJEYjI5eVpHbHVZWFJsY3lCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWNtVmtkV05sY2k1bGJXSmxaQ2gwYUdsekxtUmhkR0VwTzF4dUlDQjlYRzU5WEc1Y2JtTnZibk4wSUVGMllXbHNZV0pzWlZKbFpIVmpaWEp6SUQwZ2UxeHVJQ0FuVlUxQlVDYzZJRlZOUVZCU1pXUjFZMlZ5TEZ4dUlDQW5kQzFUVGtVbk9pQlVVMDVGVW1Wa2RXTmxjaXhjYmlBZ0oxTlFSU2M2SUZOUVJWSmxaSFZqWlhJc1hHNGdJQ2R3VTFCRkp6b2dVRk5RUlZKbFpIVmpaWElzWEc0Z0lDZFBjbWxuYVc1aGJGTlFSU2M2SUU5eWFXZHBibUZzVTFCRlVtVmtkV05sY2l4Y2JuMDdYRzVjYm1WNGNHOXlkQ0IwZVhCbElFdHViM2R1VFdWMGFHOWtjeUE5SUd0bGVXOW1JSFI1Y0dWdlppQkJkbUZwYkdGaWJHVlNaV1IxWTJWeWN6dGNibHh1THlvcVhHNGdLaUJWYm1sbWFXVmtJR05zWVhOeklHbHRjR3hsYldWdWRHbHVaeUJrYVdabVpYSmxiblFnWkdsdFpXNXphVzl1WVd4cGRIa2djbVZrZFdOMGFXOXVJRzFsZEdodlpITXVYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUdOc1lYTnpJRVJwYldWdWMybHZibUZzYVhSNVVtVmtkV05sY2x4dUlDb3ZYRzVsZUhCdmNuUWdZMnhoYzNNZ1JHbHRaVzV6YVc5dVlXeHBkSGxTWldSMVkyVnlJSHRjYmlBZ2NISnBkbUYwWlNCeVpXUjFZMlZ5T2lCU1pXUjFZMlZ5SUh3Z2RXNWtaV1pwYm1Wa08xeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGNtVmhkR1Z6SUdGdUlHbHVjM1JoYm1ObElHOW1JRVJwYldWdWMybHZibUZzYVhSNVVtVmtkV05sY2k1Y2JpQWdJQ29nUUhCaGNtRnRJSHRoYm5sYlhYMGdaR0YwWVNCV1pXTjBiM0p6SUhSdklHVnRZbVZrTGx4dUlDQWdLaUJBY0dGeVlXMGdlMHR1YjNkdVRXVjBhRzlrYzMwZ2JXVjBhRzlrSUVWdFltVmtaR2x1WnlCdFpYUm9iMlFnZEc4Z1ltVWdZWEJ3YkdsbFpGeHVJQ0FnS2lCQWNHRnlZVzBnZTB0dWIzZHVUV1YwY21samMzMGdiV1YwY21saklFUnBjM1JoYm1ObElHMWxkSEpwWXlCMGJ5QmlaU0JqYjIxd2RYUmxaQ0JpWlhSM1pXVnVJR1ZoWTJnZ2IyWWdkR2hsSUhabFkzUnZjbk11WEc0Z0lDQXFJRUJ3WVhKaGJTQjdUM0IwYVc5dWMzMGdXMjl3ZEdsdmJuTmRJRTl3ZEdsdmJuTWdkRzhnY0dGemN5QjBieUIwYUdVZ2FXMXdiR1Z0Wlc1MGFXNW5JR1Z0WW1Wa1pHVnljeTVjYmlBZ0lDb2dRRzFsYldKbGNtOW1JRVJwYldWdWMybHZibUZzYVhSNVVtVmtkV05sY2x4dUlDQWdLaTljYmlBZ1kyOXVjM1J5ZFdOMGIzSW9aR0YwWVRvZ1lXNTVXMTBzSUcxbGRHaHZaRG9nUzI1dmQyNU5aWFJvYjJSekxDQnRaWFJ5YVdNNklFdHViM2R1VFdWMGNtbGpjeXdnYjNCMGFXOXVjejg2SUU5d2RHbHZibk1wSUh0Y2JpQWdJQ0JqYjI1emRDQnRaV0Z6ZFhKbElEMGdibVYzSUUxbFlYTjFjbVVvYldWMGNtbGpLUzVuWlhSTlpXRnpkWEpsS0NrN1hHNGdJQ0FnYkdWMElITndaV05QY0hScGIyNXpJRDBnZTMwN1hHNWNiaUFnSUNCcFppQW9hWE5DYVhSQmNuSmhlVTFsZEhKcFl5aHRaWFJ5YVdNcEtTQjdYRzRnSUNBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR1JoZEdFdWJHVnVaM1JvT3lBcksya3BJSHRjYmlBZ0lDQWdJQ0FnWkdGMFlWdHBYU0E5SUc1bGR5QkNhWFJCY25KaGVTaGtZWFJoVzJsZExsOWtZWFJoTENCa1lYUmhXMmxkTGw5c1pXNW5kR2dwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNodFpYUm9iMlFnUFQwZ0oxVk5RVkFuS1NCN1hHNGdJQ0FnSUNCemNHVmpUM0IwYVc5dWN5QTlJSHRjYmlBZ0lDQWdJQ0FnTGk0dWUyUmhkR0U2SUdSaGRHRjlMRnh1SUNBZ0lDQWdJQ0F1TGk1N1pHbHpkR0Z1WTJWR2Jqb2diV1ZoYzNWeVpYMHNYRzRnSUNBZ0lDQWdJQzR1TG50dVJYQnZZMmh6T2lCdmNIUnBiMjV6UHk1amVXTnNaWE45TEZ4dUlDQWdJQ0FnSUNBdUxpNXZjSFJwYjI1ekxGeHVJQ0FnSUNBZ2ZUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHMWxkR2h2WkNBOVBTQW5kQzFUVGtVbktTQjdYRzRnSUNBZ0lDQnpjR1ZqVDNCMGFXOXVjeUE5SUh0Y2JpQWdJQ0FnSUNBZ0xpNHVlMlJoZEdFNklHUmhkR0Y5TEZ4dUlDQWdJQ0FnSUNBdUxpNTdaR2x6ZEdGdVkyVTZJRzFsWVhOMWNtVjlMRnh1SUNBZ0lDQWdJQ0F1TGk1N2FYUmxjbUYwYVc5dWN6b2diM0IwYVc5dWN6OHVZM2xqYkdWeklEOC9JSFZ1WkdWbWFXNWxaSDBzWEc0Z0lDQWdJQ0FnSUM0dUxtOXdkR2x2Ym5Nc1hHNGdJQ0FnSUNCOU8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2JXVjBhRzlrSUQwOUlDZFRVRVVuS1NCN1hHNGdJQ0FnSUNCemNHVmpUM0IwYVc5dWN5QTlJSHN1TGk1N1pHRjBZVG9nWkdGMFlYMHNJQzR1TG50a2FYTjBZVzVqWlRvZ2JXVmhjM1Z5Wlgwc0lDNHVMbTl3ZEdsdmJuTjlPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCemNHVmpUM0IwYVc5dWN5QTlJSHN1TGk1N1pHRjBZVG9nWkdGMFlYMHNJQzR1TG50a2FYTjBZVzVqWlRvZ2JXVmhjM1Z5Wlgwc0lDNHVMbTl3ZEdsdmJuTjlPMXh1SUNBZ0lIMWNiaUFnSUNCMGFHbHpMbkpsWkhWalpYSWdQU0J1WlhjZ1FYWmhhV3hoWW14bFVtVmtkV05sY25OYmJXVjBhRzlrWFNoemNHVmpUM0IwYVc5dWN5azdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUlcxaVpXUnpJSFJvWlNCa1lYUmhJR2RwZG1WdUlHbHVkRzhnZEdobElIUjNieTFrYVcxbGJuTnBiMjVoYkNCemNHRmpaU0IxYzJsdVp5QjBhR1VnWTJodmMyVnVJRzFsZEdodlpDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRpYjI5c1pXRnVmU0IwY21GdWMzQnZjMlVnVjJobGRHaGxjaUIwYnlCMGNtRnVjMlp2Y20wZ1kyOXZjbVJwYm1GMFpYTWdkRzhnYUdGMlpTQmpiMngxYlc1ekxXWnBjbk4wSUc5eWFXVnVkR0YwYVc5dUxseHVJQ0FnS2lCQWRHaHliM2R6SUh0RmNuSnZjbjBnU1dZZ2RHaGxJR1Z0WW1Wa1pHbHVaeUJ0WlhSb2IyUWdkMkZ6SUc1dmRDQm1iM1Z1WkM1Y2JpQWdJQ29nUUhKbGRIVnliaUI3UTI5dmNtUnBibUYwWlhOOUlFTmhjblJsYzJsaGJpQmpiMjl5WkdsdVlYUmxJRzltSUhSb2FYTWdaVzFpWldSa2FXNW5MbHh1SUNBZ0tpQkFiV1Z0WW1WeWIyWWdSR2x0Wlc1emFXOXVZV3hwZEhsU1pXUjFZMlZ5WEc0Z0lDQXFMMXh1SUNCd2RXSnNhV01nZEhKaGJuTm1iM0p0S0hSeVlXNXpjRzl6WlRvZ1ltOXZiR1ZoYmlBOUlHWmhiSE5sS1RvZ1EyOXZjbVJwYm1GMFpYTWdlMXh1SUNBZ0lHbG1JQ2gwYUdsekxuSmxaSFZqWlhJZ1BUMGdkVzVrWldacGJtVmtLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMUpsWkhWalpYSWdkMkZ6SUc1dmRDQmtaV1pwYm1Wa0xpY3BPMXh1SUNBZ0lIMWNiaUFnSUNCc1pYUWdaVzFpWldSa2FXNW5JRDBnZEdocGN5NXlaV1IxWTJWeUxuUnlZVzV6Wm05eWJTZ3BPMXh1WEc0Z0lDQWdhV1lnS0hSeVlXNXpjRzl6WlNrZ2UxeHVJQ0FnSUNBZ1pXMWlaV1JrYVc1bklEMGdkSEpoYm5Od2IzTmxUV0YwY21sNEtHVnRZbVZrWkdsdVp5azdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJsYldKbFpHUnBibWM3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1VtVjBkWEp1Y3lCdFpYUnlhV056SUdGMllXbHNZV0pzWlNCaWVTQjBlWEJsTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwRjJZV2xzWVdKc1pVUmhkR0ZVZVhCbGMzMGdkSGx3WlU1aGJXVWdkSGx3WlNCdVlXMWxYRzRnSUNBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjF0ZGZTQk5aWFJ5YVdNZ2JtRnRaWE1nZDJocFkyZ2daWGh3WldOMGN5QjBhR1VnWjJsMlpXNGdaR0YwWVNCMGVYQmxYRzRnSUNBcUlFQnRaVzFpWlhKdlppQkVhVzFsYm5OcGIyNWhiR2wwZVZKbFpIVmpaWEpjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJoZG1GcGJHRmliR1ZOWlhSeWFXTnpRbmxVZVhCbEtIUjVjR1ZPWVcxbE9pQkJkbUZwYkdGaWJHVkVZWFJoVkhsd1pYTXBJSHRjYmlBZ0lDQnlaWFIxY200Z1QySnFaV04wTG10bGVYTW9RWFpoYVd4aFlteGxUV1YwY21samMxdDBlWEJsVG1GdFpWMHBPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbGRIVnlibk1nWkdsdFpXNXphVzl1WVd4cGRIa2djbVZrZFdOMGFXOXVJRzFsZEdodlpITWdZWFpoYVd4aFlteGxMbHh1SUNBZ0tseHVJQ0FnS2lCQWNtVmhaRzl1YkhsY2JpQWdJQ29nUUcxbGJXSmxjbTltSUVScGJXVnVjMmx2Ym1Gc2FYUjVVbVZrZFdObGNseHVJQ0FnS2k5Y2JpQWdjM1JoZEdsaklHZGxkQ0JoZG1GcGJHRmliR1ZOWlhSb2IyUnpLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQlBZbXBsWTNRdWEyVjVjeWhCZG1GcGJHRmliR1ZTWldSMVkyVnljeWs3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1VtVjBkWEp1Y3lCdFpYUnlhV056SUdGMllXbHNZV0pzWlM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEpsWVdSdmJteDVYRzRnSUNBcUlFQnRaVzFpWlhKdlppQkVhVzFsYm5OcGIyNWhiR2wwZVZKbFpIVmpaWEpjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJuWlhRZ1lYWmhhV3hoWW14bFRXVjBjbWxqY3lncElIdGNiaUFnSUNCc1pYUWdZVzV6T2lCemRISnBibWRiWFNBOUlGdGRPMXh1SUNBZ0lFOWlhbVZqZEM1MllXeDFaWE1vUVhaaGFXeGhZbXhsVFdWMGNtbGpjeWt1Wm05eVJXRmphQ2dvYjJKcUtTQTlQaUI3WEc0Z0lDQWdJQ0JqYjI1emRDQmhjbkpoZVNBOUlFOWlhbVZqZEM1MllXeDFaWE1vYjJKcUtUdGNiaUFnSUNBZ0lHRnVjeUE5SUZzdUxpNWhibk1zSUM0dUxtRnljbUY1WFR0Y2JpQWdJQ0I5S1R0Y2JpQWdJQ0J5WlhSMWNtNGdZVzV6TzF4dUlDQjlYRzU5WEc0aVhYMD0iLCJpbXBvcnQgeyBjYWxjdWxhdGVFdWNsaWRlYW5EaXN0YW5jZSwgY2FsY0Rpc3RhbmNlTWF0cml4LCBmaWxsUmFuZG9tTWF0cml4LCB2ZWN0b3JBZGQsIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdmVjdG9yLW9wZXJhdGlvbnMnO1xuaW1wb3J0IHsgcmFuZG9tSW50IH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvcmFuZG9tJztcbi8qKlxuICogSW1wbGVtZW50cyBzdG9jaGFzdGljIHByb3hpbWl0eSBlbWJlZGRpbmcuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIFNQRUJhc2VcbiAqIEBsaW5rIGRvaToxMC4xMDE2L1MxMDkzLTMyNjMoMDMpMDAxNTUtNFxuICovXG5leHBvcnQgY2xhc3MgU1BFQmFzZSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTUEVCYXNlLlxuICAgICAqIEBwYXJhbSB7T3B0aW9uc30gW29wdGlvbnNdIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgICogQG1lbWJlcm9mIFNQRUJhc2VcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZztcbiAgICAgICAgdGhpcy5zdGVwcyA9IChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5zdGVwcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcbiAgICAgICAgdGhpcy5jeWNsZXMgPSAoX2IgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY3ljbGVzKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAxZTY7XG4gICAgICAgIC8vIFNlbGVjdCBhIGN1dG9mZiBkaXN0YW5jZSB7Y3V0b2ZmfSBhbmQgLi4uXG4gICAgICAgIHRoaXMuY3V0b2ZmID0gKF9jID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmN1dG9mZikgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogMDtcbiAgICAgICAgLy8gLi4uIGFuIGluaXRpYWwgbGVhcm5pbmcgcmF0ZSB7bGFtYmRhfSA+IDBcbiAgICAgICAgdGhpcy5sYW1iZGEgPSAoX2QgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubGFtYmRhKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAyLjA7XG4gICAgICAgIHRoaXMuZGxhbWJkYSA9IChfZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5kbGFtYmRhKSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiAwLjAxO1xuICAgICAgICB0aGlzLmxhbWJkYTIgPSB0aGlzLmxhbWJkYSAvIDIuO1xuICAgICAgICB0aGlzLmRsYW1iZGEyID0gdGhpcy5kbGFtYmRhIC8gMi47XG4gICAgICAgIHRoaXMuZXBzaWxvbiA9IChfZiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5lcHNpbG9uKSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiAxZS0xMDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGJyYWNlLXN0eWxlXG4gICAgICAgIHRoaXMuZGlzdGFuY2VGdW5jdGlvbiA9IChfZyA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5kaXN0YW5jZSkgIT09IG51bGwgJiYgX2cgIT09IHZvaWQgMCA/IF9nIDogY2FsY3VsYXRlRXVjbGlkZWFuRGlzdGFuY2U7XG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgZGlzdGFuY2UgbWF0cml4LlxuICAgICAqXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqIEBwYXJhbSB7VmVjdG9yc30gdmVjdG9ycyBJbnB1dCB2ZWN0b3JzIHRvIGNhbGN1bGF0ZSBkaXN0YW5jZSBiZXR3ZWVuLlxuICAgICAqIEBtZW1iZXJvZiBTUEVCYXNlXG4gICAgICovXG4gICAgaW5pdERpc3RhbmNlKHZlY3RvcnMpIHtcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9IGNhbGNEaXN0YW5jZU1hdHJpeCh2ZWN0b3JzLCB0aGlzLmRpc3RhbmNlRnVuY3Rpb24pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byB2ZWN0b3JzIGdpdmVuLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtWZWN0b3JzfSB2ZWN0b3JzIFNldCBvZiB2ZWN0b3JzIHRvIGNhbGN1bGF0ZSBkaXN0YW5jZXMgYmV0d2Vlbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXgxIEluZGV4IG9mIHRoZSBmaXJzdCB2ZWN0b3Igb2YgdGhlIHBhaXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4MiBJbmRleCBvZiB0aGUgc2Vjb25kIHZlY3RvciBvZiB0aGUgcGFpci5cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IERpc3RhbmNlIGJldHdlZW4gdGhlc2UgdHdvIHZlY3RvcnMuXG4gICAgICovXG4gICAgY2FsY0Rpc3RhbmNlKHZlY3RvcnMsIGluZGV4MSwgaW5kZXgyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc3RhbmNlW2luZGV4MV1baW5kZXgyXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW1iZWRzIHRoZSB2ZWN0b3JzIGdpdmVuIGludG8gYSB0d28tZGltZW5zaW9uYWwgc3BhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1ZlY3RvcnN9IHZlY3RvcnMgRC1kaW1lbnNpb25hbCBjb29yZGluYXRlcy5cbiAgICAgKiBAcmV0dXJuIHtDb29yZGluYXRlc30gU1BFIGNvb3JkaW5hdGVzIGluIEQgc3BhY2UuXG4gICAgICovXG4gICAgZW1iZWQodmVjdG9ycykge1xuICAgICAgICBjb25zdCBuSXRlbXMgPSB2ZWN0b3JzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgYXJlYVdpZHRoID0gNDA7XG4gICAgICAgIC8vIEluaXRpYWxpemUgdGhlIEQtZGltZW5zaW9uYWwgY29vcmRpbmF0ZXMgb2YgdGhlIE4gcG9pbnRzLlxuICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IGZpbGxSYW5kb21NYXRyaXgobkl0ZW1zLCBTUEVCYXNlLmRpbWVuc2lvbiwgYXJlYVdpZHRoKTtcbiAgICAgICAgbGV0IGxhbWJkYTIgPSB0aGlzLmxhbWJkYTI7XG4gICAgICAgIGlmICh0aGlzLnN0ZXBzID09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc3RlcHMgPSB2ZWN0b3JzLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbml0RGlzdGFuY2UodmVjdG9ycyk7XG4gICAgICAgIGZvciAobGV0IGN5Y2xlID0gMDsgY3ljbGUgPCB0aGlzLmN5Y2xlczsgKytjeWNsZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgc3RlcCA9IDA7IHN0ZXAgPCB0aGlzLnN0ZXBzOyArK3N0ZXApIHtcbiAgICAgICAgICAgICAgICAvLyBTZWxlY3QgdHdvIHBvaW50cywgaSBhbmQgaiwgYXQgcmFuZG9tLCAuLi5cbiAgICAgICAgICAgICAgICBjb25zdCBpID0gcmFuZG9tSW50KG5JdGVtcyk7XG4gICAgICAgICAgICAgICAgbGV0IGogPSByYW5kb21JbnQobkl0ZW1zKTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoaSA9PSBqKVxuICAgICAgICAgICAgICAgICAgICBqID0gcmFuZG9tSW50KG5JdGVtcyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93aSA9IGNvb3JkaW5hdGVzW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd2ogPSBjb29yZGluYXRlc1tqXTtcbiAgICAgICAgICAgICAgICAvLyAuLi4gcmV0cmlldmUgKG9yIGV2YWx1YXRlKSB0aGVpciBwcm94aW1pdHkgaW4gdGhlIGlucHV0IHNwYWNlLCByaWogYW5kIC4uLlxuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSB0aGlzLmNhbGNEaXN0YW5jZSh2ZWN0b3JzLCBpLCBqKTtcbiAgICAgICAgICAgICAgICAvLyAuLi4gY29tcHV0ZSB0aGVpciBFdWNsaWRlYW4gZGlzdGFuY2Ugb24gdGhlIEQtZGltZW5zaW9uYWwgbWFwLCBkaWouXG4gICAgICAgICAgICAgICAgY29uc3QgZCA9IGNhbGN1bGF0ZUV1Y2xpZGVhbkRpc3RhbmNlKHJvd2ksIHJvd2opO1xuICAgICAgICAgICAgICAgIC8vIElmIHJpaiA8PSByYywgb3IgaWYgcmlqID4gcmMgYW5kIGRpaiA8IHJpaiAuLi5cbiAgICAgICAgICAgICAgICBpZiAoKHRoaXMuY3V0b2ZmID09IDApIHx8IChyIDw9IHRoaXMuY3V0b2ZmKSB8fCAoZCA8IHIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpcGxpZXIgPSBsYW1iZGEyICogKHIgLSBkKSAvIChkICsgdGhpcy5lcHNpbG9uKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gLi4uIHVwZGF0ZSB0aGUgY29vcmRpbmF0ZXMgeGkgYW5kIHhqLlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWZmSUogPSB2ZWN0b3JBZGQocm93aSwgcm93aiwgLTEpO1xuICAgICAgICAgICAgICAgICAgICBjb29yZGluYXRlc1tpXSA9IHZlY3RvckFkZChyb3dpLCBkaWZmSUosIG11bHRpcGxpZXIpO1xuICAgICAgICAgICAgICAgICAgICBjb29yZGluYXRlc1tqXSA9IHZlY3RvckFkZChyb3dqLCBkaWZmSUosIC1tdWx0aXBsaWVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBEZWNyZWFzZSB0aGUgbGVhcm5pbmcgcmF0ZSB7bGFtYmRhfSBieSBhIHByZXNjcmliZWQge2RsYW1iZGF9LlxuICAgICAgICAgICAgbGFtYmRhMiAtPSB0aGlzLmRsYW1iZGEyO1xuICAgICAgICAgICAgaWYgKGxhbWJkYTIgPD0gMC4pIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29vcmRpbmF0ZXM7XG4gICAgfVxufVxuU1BFQmFzZS5kaW1lbnNpb24gPSAyO1xuLyoqXG4gKiBJbXBsZW1lbnRzIG1vZGlmaWVkIHN0b2NoYXN0aWMgcHJveGltaXR5IGVtYmVkZGluZy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgUFNQRUJhc2VcbiAqIEBsaW5rIGRvaToxMC4xMDE2L1MxMDkzLTMyNjMoMDMpMDAxNTUtNFxuICovXG5leHBvcnQgY2xhc3MgUFNQRUJhc2UgZXh0ZW5kcyBTUEVCYXNlIHtcbiAgICAvKipcbiAgICAgKiBFbWJlZHMgdGhlIHZlY3RvcnMgZ2l2ZW4gaW50byBhIHR3by1kaW1lbnNpb25hbCBzcGFjZSB1c2luZyBhIG1vZGlmaWVkIHVwZGF0ZSBydWxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtWZWN0b3JzfSB2ZWN0b3JzIEQtZGltZW5zaW9uYWwgY29vcmRpbmF0ZXMuXG4gICAgICogQHJldHVybiB7Q29vcmRpbmF0ZXN9IFNQRSBjb29yZGluYXRlcyBpbiBEIHNwYWNlLlxuICAgICAqL1xuICAgIGVtYmVkKHZlY3RvcnMpIHtcbiAgICAgICAgY29uc3Qgbkl0ZW1zID0gdmVjdG9ycy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGFyZWFXaWR0aCA9IDQwO1xuICAgICAgICAvLyAgSW5pdGlhbGl6ZSB0aGUgRC1kaW1lbnNpb25hbCBjb29yZGluYXRlcyBvZiB0aGUgTiBwb2ludHMuXG4gICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gZmlsbFJhbmRvbU1hdHJpeChuSXRlbXMsIFBTUEVCYXNlLmRpbWVuc2lvbiwgYXJlYVdpZHRoKTtcbiAgICAgICAgbGV0IGxhbWJkYSA9IHRoaXMubGFtYmRhO1xuICAgICAgICB0aGlzLmluaXREaXN0YW5jZSh2ZWN0b3JzKTtcbiAgICAgICAgZm9yIChsZXQgY3ljbGUgPSAwOyBjeWNsZSA8IHRoaXMuY3ljbGVzOyArK2N5Y2xlKSB7XG4gICAgICAgICAgICAvLyBTZWxlY3QgYSBwb2ludCwgaSwgYXQgcmFuZG9tIChwaXZvdCkuXG4gICAgICAgICAgICBjb25zdCBpID0gcmFuZG9tSW50KG5JdGVtcyk7XG4gICAgICAgICAgICBjb25zdCByb3dpID0gY29vcmRpbmF0ZXNbaV07XG4gICAgICAgICAgICAvLyBGb3IgZXZlcnkgcG9pbnQgaiAhPSBpIC4uLlxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuSXRlbXM7ICsraikge1xuICAgICAgICAgICAgICAgIGlmIChpID09IGopXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd2ogPSBjb29yZGluYXRlc1tqXTtcbiAgICAgICAgICAgICAgICAvLyAuLi4gcmV0cmlldmUgKG9yIGV2YWx1YXRlKSBpdHMgcHJveGltaXR5IHRvIGkgaW4gdGhlIGlucHV0IHNwYWNlLCByaWogLi4uXG4gICAgICAgICAgICAgICAgY29uc3QgciA9IHRoaXMuY2FsY0Rpc3RhbmNlKHZlY3RvcnMsIGksIGopO1xuICAgICAgICAgICAgICAgIC8vIC4uLiBhbmQgY29tcHV0ZSB0aGVpciBFdWNsaWRlYW4gZGlzdGFuY2Ugb24gdGhlIEQtZGltZW5zaW9uYWwgbWFwLCBkaWouXG4gICAgICAgICAgICAgICAgY29uc3QgZCA9IGNhbGN1bGF0ZUV1Y2xpZGVhbkRpc3RhbmNlKHJvd2ksIHJvd2opO1xuICAgICAgICAgICAgICAgIC8vIElmIHJpaiA8PSByYywgb3IgaWYgcmlqID4gcmMgYW5kIGRpaiA8IHJpaiAuLi5cbiAgICAgICAgICAgICAgICBpZiAoKHRoaXMuY3V0b2ZmID09IDApIHx8IChyIDw9IHRoaXMuY3V0b2ZmKSB8fCAoZCA8IHIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpcGxpZXIgPSBsYW1iZGEgKiAociAtIGQpIC8gKGQgKyB0aGlzLmVwc2lsb24pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWZmSUogPSB2ZWN0b3JBZGQocm93aSwgcm93aiwgLTEpO1xuICAgICAgICAgICAgICAgICAgICAvLyAuLi4gdXBkYXRlIHRoZSBjb29yZGluYXRlcyB4ai5cbiAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXNbal0gPSB2ZWN0b3JBZGQocm93aiwgZGlmZklKLCAtbXVsdGlwbGllcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRGVjcmVhc2UgdGhlIGxlYXJuaW5nIHJhdGUge2xhbWJkYX0gYnkgYSBwcmVzY3JpYmVkIHtkbGFtYmRhfS5cbiAgICAgICAgICAgIGxhbWJkYSAtPSB0aGlzLmRsYW1iZGE7XG4gICAgICAgICAgICBpZiAobGFtYmRhIDw9IDAuKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvb3JkaW5hdGVzO1xuICAgIH1cbn1cbi8qKlxuICogSW1wbGVtZW50cyBtb2RpZmllZCBzdG9jaGFzdGljIHByb3hpbWl0eSBlbWJlZGRpbmcuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIE9yaWdpbmFsU1BFXG4gKiBAbGluayBkb2k6MTAuMTAwMi9qY2MuMTAyMzRcbiAqL1xuZXhwb3J0IGNsYXNzIE9yaWdpbmFsU1BFIGV4dGVuZHMgU1BFQmFzZSB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgICAgICBzdXBlcihvcHRpb25zKTtcbiAgICAgICAgdGhpcy5jeWNsZXMgPSAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY3ljbGVzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAxZTM7XG4gICAgICAgIHRoaXMuc3RlcHMgPSAoX2IgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuc3RlcHMpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDEwMDAwMDtcbiAgICAgICAgdGhpcy5yYWRpdXNQZXJjZW50ID0gKF9jID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnJhZGl1c1BlcmNlbnQpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IDEuMDtcbiAgICAgICAgdGhpcy5tYXhEaXN0YW5jZSA9IChfZCA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5tYXhEaXN0YW5jZSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogbnVsbDtcbiAgICAgICAgdGhpcy5tYXhEaXN0YW5jZVN0ZXBzID0gKF9lID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm1heERpc3RhbmNlU3RlcHMpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IG51bGw7XG4gICAgfVxuICAgIGVtYmVkKHZlY3RvcnMpIHtcbiAgICAgICAgY29uc3Qgbkl0ZW1zID0gdmVjdG9ycy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGFyZWFXaWR0aCA9IDQwO1xuICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBELWRpbWVuc2lvbmFsIGNvb3JkaW5hdGVzIG9mIHRoZSBOIHBvaW50cy5cbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBmaWxsUmFuZG9tTWF0cml4KG5JdGVtcywgT3JpZ2luYWxTUEUuZGltZW5zaW9uLCBhcmVhV2lkdGgpO1xuICAgICAgICB0aGlzLmluaXREaXN0YW5jZSh2ZWN0b3JzKTtcbiAgICAgICAgaWYgKHRoaXMubWF4RGlzdGFuY2VTdGVwcyA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLm1heERpc3RhbmNlU3RlcHMgPSBuSXRlbXMgKiBNYXRoLmZsb29yKChuSXRlbXMgLSAxKSAvIDIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1heERpc3RhbmNlID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMubWF4RGlzdGFuY2UgPSAtMWUzNztcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgdGhpcy5tYXhEaXN0YW5jZVN0ZXBzOyBuKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpID0gcmFuZG9tSW50KG5JdGVtcyk7XG4gICAgICAgICAgICAgICAgbGV0IGogPSByYW5kb21JbnQobkl0ZW1zKTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoaSA9PSBqKVxuICAgICAgICAgICAgICAgICAgICBqID0gcmFuZG9tSW50KG5JdGVtcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZCA9IHRoaXMuY2FsY0Rpc3RhbmNlKHZlY3RvcnMsIGksIGopO1xuICAgICAgICAgICAgICAgIGlmIChkID4gdGhpcy5tYXhEaXN0YW5jZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1heERpc3RhbmNlID0gZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxhbWJkYSA9IHRoaXMubGFtYmRhO1xuICAgICAgICBjb25zdCByYWRpdXMgPSAodGhpcy5yYWRpdXNQZXJjZW50ID09IDAuMCkgPyB0aGlzLm1heERpc3RhbmNlIDogdGhpcy5tYXhEaXN0YW5jZSAqIHRoaXMucmFkaXVzUGVyY2VudDtcbiAgICAgICAgZm9yIChsZXQgY3ljbGUgPSAwOyBjeWNsZSA8IHRoaXMuY3ljbGVzOyArK2N5Y2xlKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBzdGVwID0gMDsgc3RlcCA8IHRoaXMuc3RlcHM7ICsrc3RlcCkge1xuICAgICAgICAgICAgICAgIC8vIFNlbGVjdCB0d28gcG9pbnRzLCBpIGFuZCBqLCBhdCByYW5kb20sIC4uLlxuICAgICAgICAgICAgICAgIGNvbnN0IGkgPSByYW5kb21JbnQobkl0ZW1zKTtcbiAgICAgICAgICAgICAgICBsZXQgaiA9IHJhbmRvbUludChuSXRlbXMpO1xuICAgICAgICAgICAgICAgIHdoaWxlIChpID09IGopXG4gICAgICAgICAgICAgICAgICAgIGogPSByYW5kb21JbnQobkl0ZW1zKTtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dpID0gY29vcmRpbmF0ZXNbaV07XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93aiA9IGNvb3JkaW5hdGVzW2pdO1xuICAgICAgICAgICAgICAgIC8vIC4uLiByZXRyaWV2ZSAob3IgZXZhbHVhdGUpIHRoZWlyIHByb3hpbWl0eSBpbiB0aGUgaW5wdXQgc3BhY2UsIHJpaiBhbmQgLi4uXG4gICAgICAgICAgICAgICAgY29uc3QgciA9IHRoaXMuY2FsY0Rpc3RhbmNlKHZlY3RvcnMsIGksIGopO1xuICAgICAgICAgICAgICAgIC8vIC4uLiBjb21wdXRlIHRoZWlyIEV1Y2xpZGVhbiBkaXN0YW5jZSBvbiB0aGUgRC1kaW1lbnNpb25hbCBtYXAsIGRpai5cbiAgICAgICAgICAgICAgICBjb25zdCBkID0gY2FsY3VsYXRlRXVjbGlkZWFuRGlzdGFuY2Uocm93aSwgcm93aik7XG4gICAgICAgICAgICAgICAgaWYgKChyIDw9IHJhZGl1cykgfHwgKGQgPCByKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXBsaWVyID0gbGFtYmRhICogMC41ICogKHIgLSBkKSAvIChkICsgdGhpcy5lcHNpbG9uKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gLi4uIHVwZGF0ZSB0aGUgY29vcmRpbmF0ZXMgeGkgYW5kIHhqLlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWZmSUogPSB2ZWN0b3JBZGQocm93aSwgcm93aiwgLTEpO1xuICAgICAgICAgICAgICAgICAgICBjb29yZGluYXRlc1tpXSA9IHZlY3RvckFkZChyb3dpLCBkaWZmSUosIG11bHRpcGxpZXIpO1xuICAgICAgICAgICAgICAgICAgICBjb29yZGluYXRlc1tqXSA9IHZlY3RvckFkZChyb3dqLCBkaWZmSUosIC1tdWx0aXBsaWVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYW1iZGEgLT0gKCh0aGlzLmxhbWJkYSAtIHRoaXMuZGxhbWJkYSkgLyAodGhpcy5jeWNsZXMgLSAxLjApKTtcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIGlmIChsYW1iZGEgPCB0aGlzLmRsYW1iZGEpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29vcmRpbmF0ZXM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYzNCbExtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpYzNCbExuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVU5CTEU5QlFVOHNSVUZEVEN3d1FrRkJNRUlzUlVGRE1VSXNhMEpCUVd0Q0xFVkJRMnhDTEdkQ1FVRm5RaXhGUVVOb1FpeFRRVUZUTEVkQlExWXNUVUZCVFN4cFJFRkJhVVFzUTBGQlF6dEJRVU42UkN4UFFVRlBMRVZCUVVNc1UwRkJVeXhGUVVGRExFMUJRVTBzYzBOQlFYTkRMRU5CUVVNN1FVRkZMMFE3T3pzN096dEhRVTFITzBGQlEwZ3NUVUZCVFN4UFFVRlBMRTlCUVU4N1NVRmhiRUk3T3pzN1QwRkpSenRKUVVOSUxGbEJRVmtzVDBGQmFVSTdPMUZCUXpOQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NUVUZCUVN4UFFVRlBMR0ZCUVZBc1QwRkJUeXgxUWtGQlVDeFBRVUZQTEVOQlFVVXNTMEZCU3l4dFEwRkJTU3hEUVVGRExFTkJRVU03VVVGRGFrTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhOUVVGQkxFOUJRVThzWVVGQlVDeFBRVUZQTEhWQ1FVRlFMRTlCUVU4c1EwRkJSU3hOUVVGTkxHMURRVUZKTEVkQlFVY3NRMEZCUXp0UlFVTnlReXcwUTBGQk5FTTdVVUZETlVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eE5RVUZCTEU5QlFVOHNZVUZCVUN4UFFVRlBMSFZDUVVGUUxFOUJRVThzUTBGQlJTeE5RVUZOTEcxRFFVRkpMRU5CUVVNc1EwRkJRenRSUVVOdVF5dzBRMEZCTkVNN1VVRkROVU1zU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4TlFVRkJMRTlCUVU4c1lVRkJVQ3hQUVVGUExIVkNRVUZRTEU5QlFVOHNRMEZCUlN4TlFVRk5MRzFEUVVGSkxFZEJRVWNzUTBGQlF6dFJRVU55UXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFMUJRVUVzVDBGQlR5eGhRVUZRTEU5QlFVOHNkVUpCUVZBc1QwRkJUeXhEUVVGRkxFOUJRVThzYlVOQlFVa3NTVUZCU1N4RFFVRkRPMUZCUTNoRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJReXhGUVVGRkxFTkJRVU03VVVGRE9VSXNTVUZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZETEVWQlFVVXNRMEZCUXp0UlFVTm9ReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEUxQlFVRXNUMEZCVHl4aFFVRlFMRTlCUVU4c2RVSkJRVkFzVDBGQlR5eERRVUZGTEU5QlFVOHNiVU5CUVVrc1MwRkJTeXhEUVVGRE8xRkJRM3BETEhWRFFVRjFRenRSUVVOMlF5eEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFZEJRVWNzVFVGQlFTeFBRVUZQTEdGQlFWQXNUMEZCVHl4MVFrRkJVQ3hQUVVGUExFTkJRVVVzVVVGQlVTeHRRMEZCU1N3d1FrRkJNRUlzUTBGQlF6dFJRVU40UlN4SlFVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU55UWl4RFFVRkRPMGxCUlVRN096czdPenRQUVUxSE8wbEJRMDhzV1VGQldTeERRVUZETEU5QlFXZENPMUZCUTNKRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NhMEpCUVd0Q0xFTkJRVU1zVDBGQlR5eEZRVUZGTEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eERRVUZETzBsQlEzSkZMRU5CUVVNN1NVRkZSRHM3T3pzN096dFBRVTlITzBsQlEwOHNXVUZCV1N4RFFVRkRMRTlCUVdkQ0xFVkJRVVVzVFVGQll5eEZRVUZGTEUxQlFXTTdVVUZEY2tVc1QwRkJUeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJRM1pETEVOQlFVTTdTVUZGUkRzN096czdUMEZMUnp0SlFVTkpMRXRCUVVzc1EwRkJReXhQUVVGblFqdFJRVU16UWl4TlFVRk5MRTFCUVUwc1IwRkJSeXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETzFGQlF6bENMRTFCUVUwc1UwRkJVeXhIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU55UWl3MFJFRkJORVE3VVVGRE5VUXNUVUZCVFN4WFFVRlhMRWRCUVVjc1owSkJRV2RDTEVOQlFVTXNUVUZCVFN4RlFVRkZMRTlCUVU4c1EwRkJReXhUUVVGVExFVkJRVVVzVTBGQlV5eERRVUZETEVOQlFVTTdVVUZGTTBVc1NVRkJTU3hQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXp0UlFVVXpRaXhKUVVGSkxFbEJRVWtzUTBGQlF5eExRVUZMTEVsQlFVa3NRMEZCUXl4RlFVRkZPMWxCUTI1Q0xFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NUMEZCVHl4RFFVRkRMRTFCUVUwc1IwRkJReXhEUVVGRExFTkJRVU03VTBGREwwSTdVVUZGUkN4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFGQlJUTkNMRXRCUVVzc1NVRkJTU3hMUVVGTExFZEJRVWNzUTBGQlF5eEZRVUZGTEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFVkJRVVVzUzBGQlN5eEZRVUZGTzFsQlEyaEVMRXRCUVVzc1NVRkJTU3hKUVVGSkxFZEJRVWNzUTBGQlF5eEZRVUZGTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhGUVVGRkxFVkJRVVVzU1VGQlNTeEZRVUZGTzJkQ1FVTTFReXcyUTBGQk5rTTdaMEpCUXpkRExFMUJRVTBzUTBGQlF5eEhRVUZITEZOQlFWTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRuUWtGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4VFFVRlRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03WjBKQlEzWkVMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU03YjBKQlFVVXNRMEZCUXl4SFFVRkhMRk5CUVZNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dG5Ra0ZGY2tNc1RVRkJUU3hKUVVGSkxFZEJRVWNzVjBGQlZ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVGRExFMUJRVTBzU1VGQlNTeEhRVUZITEZkQlFWY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRmVrUXNOa1ZCUVRaRk8yZENRVU0zUlN4TlFVRk5MRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlF6TkRMSE5GUVVGelJUdG5Ra0ZEZEVVc1RVRkJUU3hEUVVGRExFZEJRVWNzTUVKQlFUQkNMRU5CUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzJkQ1FVVnFSQ3hwUkVGQmFVUTdaMEpCUTJwRUxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlR0dlFrRkRka1FzVFVGQlRTeFZRVUZWTEVkQlFVY3NUMEZCVHl4SFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dHZRa0ZEYkVRc2QwTkJRWGRETzI5Q1FVTjRReXhOUVVGTkxFMUJRVTBzUjBGQlJ5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzI5Q1FVTjZReXhYUVVGWExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NVMEZCVXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hOUVVGTkxFVkJRVVVzVlVGQlZTeERRVUZETEVOQlFVTTdiMEpCUTNKRUxGZEJRVmNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4VFFVRlRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFMUJRVTBzUlVGQlJTeERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRPMmxDUVVOMlJEdGhRVU5HTzFsQlEwUXNhVVZCUVdsRk8xbEJRMnBGTEU5QlFVOHNTVUZCU1N4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRE8xbEJRM3BDTEVsQlFVa3NUMEZCVHl4SlFVRkpMRVZCUVVVc1JVRkJSVHRuUWtGRGFrSXNUVUZCVFR0aFFVTlFPMU5CUTBZN1VVRkRSQ3hQUVVGUExGZEJRVmNzUTBGQlF6dEpRVU55UWl4RFFVRkRPenRCUVhwSFowSXNhVUpCUVZNc1IwRkJSeXhEUVVGRExFTkJRVU03UVVFMFIycERPenM3T3pzN1IwRk5SenRCUVVOSUxFMUJRVTBzVDBGQlR5eFJRVUZUTEZOQlFWRXNUMEZCVHp0SlFVTnVRenM3T3pzN1QwRkxSenRKUVVOSkxFdEJRVXNzUTBGQlF5eFBRVUZuUWp0UlFVTXpRaXhOUVVGTkxFMUJRVTBzUjBGQlJ5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRPMUZCUXpsQ0xFMUJRVTBzVTBGQlV5eEhRVUZITEVWQlFVVXNRMEZCUXp0UlFVTnlRaXcyUkVGQk5rUTdVVUZETjBRc1RVRkJUU3hYUVVGWExFZEJRVWNzWjBKQlFXZENMRU5CUVVNc1RVRkJUU3hGUVVGRkxGRkJRVkVzUTBGQlF5eFRRVUZUTEVWQlFVVXNVMEZCVXl4RFFVRkRMRU5CUVVNN1VVRkROVVVzU1VGQlNTeE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJRenRSUVVWNlFpeEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJSVE5DTEV0QlFVc3NTVUZCU1N4TFFVRkxMRWRCUVVjc1EwRkJReXhGUVVGRkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRVZCUVVVc1MwRkJTeXhGUVVGRk8xbEJRMmhFTEhkRFFVRjNRenRaUVVONFF5eE5RVUZOTEVOQlFVTXNSMEZCVnl4VFFVRlRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03V1VGRGNFTXNUVUZCVFN4SlFVRkpMRWRCUVVjc1YwRkJWeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlJUVkNMRFpDUVVFMlFqdFpRVU0zUWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NUVUZCVFN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRk8yZENRVU12UWl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRE8yOUNRVUZGTEZOQlFWTTdaMEpCUTNKQ0xFMUJRVTBzU1VGQlNTeEhRVUZITEZkQlFWY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRE5VSXNORVZCUVRSRk8yZENRVU0xUlN4TlFVRk5MRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlF6TkRMREJGUVVFd1JUdG5Ra0ZETVVVc1RVRkJUU3hEUVVGRExFZEJRVWNzTUVKQlFUQkNMRU5CUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzJkQ1FVTnFSQ3hwUkVGQmFVUTdaMEpCUTJwRUxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlR0dlFrRkRka1FzVFVGQlRTeFZRVUZWTEVkQlFVY3NUVUZCVFN4SFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dHZRa0ZEYWtRc1RVRkJUU3hOUVVGTkxFZEJRVWNzVTBGQlV5eERRVUZETEVsQlFVa3NSVUZCUlN4SlFVRkpMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dHZRa0ZEZWtNc2FVTkJRV2xETzI5Q1FVTnFReXhYUVVGWExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NVMEZCVXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hOUVVGTkxFVkJRVVVzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXp0cFFrRkRka1E3WVVGRFJqdFpRVU5FTEdsRlFVRnBSVHRaUVVOcVJTeE5RVUZOTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJRenRaUVVOMlFpeEpRVUZKTEUxQlFVMHNTVUZCU1N4RlFVRkZMRVZCUVVVN1owSkJRMmhDTEUxQlFVMDdZVUZEVUR0VFFVTkdPMUZCUTBRc1QwRkJUeXhYUVVGWExFTkJRVU03U1VGRGNrSXNRMEZCUXp0RFFVTkdPMEZCUlVRN096czdPenRIUVUxSE8wRkJRMGdzVFVGQlRTeFBRVUZQTEZkQlFWa3NVMEZCVVN4UFFVRlBPMGxCVjNSRExGbEJRVmtzVDBGQmFVSTdPMUZCUXpOQ0xFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTm1MRWxCUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzVFVGQlFTeFBRVUZQTEdGQlFWQXNUMEZCVHl4MVFrRkJVQ3hQUVVGUExFTkJRVVVzVFVGQlRTeHRRMEZCU1N4SFFVRkhMRU5CUVVNN1VVRkRja01zU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4TlFVRkJMRTlCUVU4c1lVRkJVQ3hQUVVGUExIVkNRVUZRTEU5QlFVOHNRMEZCUlN4TFFVRkxMRzFEUVVGSkxFMUJRVTBzUTBGQlF6dFJRVU4wUXl4SlFVRkpMRU5CUVVNc1lVRkJZU3hIUVVGSExFMUJRVUVzVDBGQlR5eGhRVUZRTEU5QlFVOHNkVUpCUVZBc1QwRkJUeXhEUVVGRkxHRkJRV0VzYlVOQlFVa3NSMEZCUnl4RFFVRkRPMUZCUTI1RUxFbEJRVWtzUTBGQlF5eFhRVUZYTEVkQlFVY3NUVUZCUVN4UFFVRlBMR0ZCUVZBc1QwRkJUeXgxUWtGQlVDeFBRVUZQTEVOQlFVVXNWMEZCVnl4dFEwRkJTU3hKUVVGSkxFTkJRVU03VVVGRGFFUXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeEhRVUZITEUxQlFVRXNUMEZCVHl4aFFVRlFMRTlCUVU4c2RVSkJRVkFzVDBGQlR5eERRVUZGTEdkQ1FVRm5RaXh0UTBGQlNTeEpRVUZKTEVOQlFVTTdTVUZETlVRc1EwRkJRenRKUVVWTkxFdEJRVXNzUTBGQlF5eFBRVUZuUWp0UlFVTXpRaXhOUVVGTkxFMUJRVTBzUjBGQlJ5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRPMUZCUXpsQ0xFMUJRVTBzVTBGQlV5eEhRVUZITEVWQlFVVXNRMEZCUXp0UlFVTnlRaXcwUkVGQk5FUTdVVUZETlVRc1RVRkJUU3hYUVVGWExFZEJRVWNzWjBKQlFXZENMRU5CUVVNc1RVRkJUU3hGUVVGRkxGZEJRVmNzUTBGQlF5eFRRVUZUTEVWQlFVVXNVMEZCVXl4RFFVRkRMRU5CUVVNN1VVRkZMMFVzU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRSUVVVelFpeEpRVUZKTEVsQlFVa3NRMEZCUXl4blFrRkJaMElzU1VGQlNTeEpRVUZKTEVWQlFVVTdXVUZEYWtNc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4SFFVRkhMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzFOQlF5OUVPMUZCUTBRc1NVRkJTU3hKUVVGSkxFTkJRVU1zVjBGQlZ5eEpRVUZKTEVsQlFVa3NSVUZCUlR0WlFVTTFRaXhKUVVGSkxFTkJRVU1zVjBGQlZ5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRPMWxCUTNwQ0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zWjBKQlFXZENMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3WjBKQlF6bERMRTFCUVUwc1EwRkJReXhIUVVGSExGTkJRVk1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0blFrRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eFRRVUZUTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1owSkJRM1pFTEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNN2IwSkJRVVVzUTBGQlF5eEhRVUZITEZOQlFWTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRuUWtGRmNrTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU16UXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVjBGQlZ5eEZRVUZGTzI5Q1FVTjRRaXhKUVVGSkxFTkJRVU1zVjBGQlZ5eEhRVUZITEVOQlFVTXNRMEZCUXp0cFFrRkRkRUk3WVVGRFJqdFRRVU5HTzFGQlJVUXNTVUZCU1N4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF6dFJRVU42UWl4TlFVRk5MRTFCUVUwc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eGhRVUZoTEVsQlFVa3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFZEJRVWNzU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXp0UlFVVjBSeXhMUVVGTExFbEJRVWtzUzBGQlN5eEhRVUZITEVOQlFVTXNSVUZCUlN4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeEZRVUZGTEV0QlFVc3NSVUZCUlR0WlFVTm9SQ3hMUVVGTExFbEJRVWtzU1VGQlNTeEhRVUZITEVOQlFVTXNSVUZCUlN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUlVGQlJTeEZRVUZGTEVsQlFVa3NSVUZCUlR0blFrRkROVU1zTmtOQlFUWkRPMmRDUVVNM1F5eE5RVUZOTEVOQlFVTXNSMEZCUnl4VFFVRlRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03WjBKQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1UwRkJVeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzJkQ1FVTjJSQ3hQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETzI5Q1FVRkZMRU5CUVVNc1IwRkJSeXhUUVVGVExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdaMEpCUlhKRExFMUJRVTBzU1VGQlNTeEhRVUZITEZkQlFWY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGQlF5eE5RVUZOTEVsQlFVa3NSMEZCUnl4WFFVRlhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlJYcEVMRFpGUVVFMlJUdG5Ra0ZETjBVc1RVRkJUU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTXpReXh6UlVGQmMwVTdaMEpCUTNSRkxFMUJRVTBzUTBGQlF5eEhRVUZITERCQ1FVRXdRaXhEUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0blFrRkZha1FzU1VGQlNTeERRVUZETEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlR0dlFrRkROVUlzVFVGQlRTeFZRVUZWTEVkQlFVY3NUVUZCVFN4SFFVRkhMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdiMEpCUXk5RUxIZERRVUYzUXp0dlFrRkRlRU1zVFVGQlRTeE5RVUZOTEVkQlFVY3NVMEZCVXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hKUVVGSkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0dlFrRkRla01zVjBGQlZ5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRk5CUVZNc1EwRkJReXhKUVVGSkxFVkJRVVVzVFVGQlRTeEZRVUZGTEZWQlFWVXNRMEZCUXl4RFFVRkRPMjlDUVVOeVJDeFhRVUZYTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1UwRkJVeXhEUVVGRExFbEJRVWtzUlVGQlJTeE5RVUZOTEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJRenRwUWtGRGRrUTdZVUZEUmp0WlFVTkVMRTFCUVUwc1NVRkJTU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03V1VGQlF5eERRVUZETzFsQlEycEZMRWxCUVVrc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVWQlFVVTdaMEpCUTNwQ0xFMUJRVTA3WVVGRFVEdFRRVU5HTzFGQlEwUXNUMEZCVHl4WFFVRlhMRU5CUVVNN1NVRkRja0lzUTBGQlF6dERRVU5HSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUh0UGNIUnBiMjV6TENCRGIyOXlaR2x1WVhSbGN5d2dWbVZqZEc5eWN5d2dSR2x6ZEdGdVkyVk5aWFJ5YVdOOUlHWnliMjBnSjBCa1lYUmhaM0p2YXkxc2FXSnlZWEpwWlhNdmRYUnBiSE12YzNKakwzUjVjR1V0WkdWamJHRnlZWFJwYjI1ekp6dGNibWx0Y0c5eWRDQjdYRzRnSUdOaGJHTjFiR0YwWlVWMVkyeHBaR1ZoYmtScGMzUmhibU5sTEZ4dUlDQmpZV3hqUkdsemRHRnVZMlZOWVhSeWFYZ3NYRzRnSUdacGJHeFNZVzVrYjIxTllYUnlhWGdzWEc0Z0lIWmxZM1J2Y2tGa1pDeGNibjBnWm5KdmJTQW5RR1JoZEdGbmNtOXJMV3hwWW5KaGNtbGxjeTkxZEdsc2N5OXpjbU12ZG1WamRHOXlMVzl3WlhKaGRHbHZibk1uTzF4dWFXMXdiM0owSUh0eVlXNWtiMjFKYm5SOUlHWnliMjBnSjBCa1lYUmhaM0p2YXkxc2FXSnlZWEpwWlhNdmRYUnBiSE12YzNKakwzSmhibVJ2YlNjN1hHNWNiaThxS2x4dUlDb2dTVzF3YkdWdFpXNTBjeUJ6ZEc5amFHRnpkR2xqSUhCeWIzaHBiV2wwZVNCbGJXSmxaR1JwYm1jdVhHNGdLbHh1SUNvZ1FHVjRjRzl5ZEZ4dUlDb2dRR05zWVhOeklGTlFSVUpoYzJWY2JpQXFJRUJzYVc1cklHUnZhVG94TUM0eE1ERTJMMU14TURrekxUTXlOak1vTURNcE1EQXhOVFV0TkZ4dUlDb3ZYRzVsZUhCdmNuUWdZMnhoYzNNZ1UxQkZRbUZ6WlNCN1hHNGdJSEJ5YjNSbFkzUmxaQ0J6ZEdGMGFXTWdaR2x0Wlc1emFXOXVJRDBnTWp0Y2JpQWdjSEp2ZEdWamRHVmtJSE4wWlhCek9pQnVkVzFpWlhJN1hHNGdJSEJ5YjNSbFkzUmxaQ0JqZVdOc1pYTTZJRzUxYldKbGNqdGNiaUFnY0hKdmRHVmpkR1ZrSUdOMWRHOW1aam9nYm5WdFltVnlPMXh1SUNCd2NtOTBaV04wWldRZ2JHRnRZbVJoT2lCdWRXMWlaWEk3WEc0Z0lIQnliM1JsWTNSbFpDQmtiR0Z0WW1SaE9pQnVkVzFpWlhJN1hHNGdJSEJ5YjNSbFkzUmxaQ0JzWVcxaVpHRXlPaUJ1ZFcxaVpYSTdYRzRnSUhCeWIzUmxZM1JsWkNCa2JHRnRZbVJoTWpvZ2JuVnRZbVZ5TzF4dUlDQndjbTkwWldOMFpXUWdaWEJ6YVd4dmJqb2diblZ0WW1WeU8xeHVJQ0J3Y205MFpXTjBaV1FnWkdsemRHRnVZMlZHZFc1amRHbHZiam9nUkdsemRHRnVZMlZOWlhSeWFXTTdYRzRnSUhCeWIzUmxZM1JsWkNCa2FYTjBZVzVqWlRvZ1EyOXZjbVJwYm1GMFpYTTdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFTnlaV0YwWlhNZ1lXNGdhVzV6ZEdGdVkyVWdiMllnVTFCRlFtRnpaUzVjYmlBZ0lDb2dRSEJoY21GdElIdFBjSFJwYjI1emZTQmJiM0IwYVc5dWMxMGdUM0IwYVc5dWN5QjBieUJ3WVhOeklIUnZJSFJvWlNCamIyNXpkSEoxWTNSdmNpNWNiaUFnSUNvZ1FHMWxiV0psY205bUlGTlFSVUpoYzJWY2JpQWdJQ292WEc0Z0lHTnZibk4wY25WamRHOXlLRzl3ZEdsdmJuTS9PaUJQY0hScGIyNXpLU0I3WEc0Z0lDQWdkR2hwY3k1emRHVndjeUE5SUc5d2RHbHZibk0vTG5OMFpYQnpJRDgvSURBN1hHNGdJQ0FnZEdocGN5NWplV05zWlhNZ1BTQnZjSFJwYjI1elB5NWplV05zWlhNZ1B6OGdNV1UyTzF4dUlDQWdJQzh2SUZObGJHVmpkQ0JoSUdOMWRHOW1aaUJrYVhOMFlXNWpaU0I3WTNWMGIyWm1mU0JoYm1RZ0xpNHVYRzRnSUNBZ2RHaHBjeTVqZFhSdlptWWdQU0J2Y0hScGIyNXpQeTVqZFhSdlptWWdQejhnTUR0Y2JpQWdJQ0F2THlBdUxpNGdZVzRnYVc1cGRHbGhiQ0JzWldGeWJtbHVaeUJ5WVhSbElIdHNZVzFpWkdGOUlENGdNRnh1SUNBZ0lIUm9hWE11YkdGdFltUmhJRDBnYjNCMGFXOXVjejh1YkdGdFltUmhJRDgvSURJdU1EdGNiaUFnSUNCMGFHbHpMbVJzWVcxaVpHRWdQU0J2Y0hScGIyNXpQeTVrYkdGdFltUmhJRDgvSURBdU1ERTdYRzRnSUNBZ2RHaHBjeTVzWVcxaVpHRXlJRDBnZEdocGN5NXNZVzFpWkdFdk1pNDdYRzRnSUNBZ2RHaHBjeTVrYkdGdFltUmhNaUE5SUhSb2FYTXVaR3hoYldKa1lTOHlManRjYmlBZ0lDQjBhR2x6TG1Wd2MybHNiMjRnUFNCdmNIUnBiMjV6UHk1bGNITnBiRzl1SUQ4L0lERmxMVEV3TzF4dUlDQWdJQzh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0JpY21GalpTMXpkSGxzWlZ4dUlDQWdJSFJvYVhNdVpHbHpkR0Z1WTJWR2RXNWpkR2x2YmlBOUlHOXdkR2x2Ym5NL0xtUnBjM1JoYm1ObElEOC9JR05oYkdOMWJHRjBaVVYxWTJ4cFpHVmhia1JwYzNSaGJtTmxPMXh1SUNBZ0lIUm9hWE11WkdsemRHRnVZMlVnUFNCYlhUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJKYm1sMGFXRnNhWHBsY3lCa2FYTjBZVzVqWlNCdFlYUnlhWGd1WEc0Z0lDQXFYRzRnSUNBcUlFQndjbTkwWldOMFpXUmNiaUFnSUNvZ1FIQmhjbUZ0SUh0V1pXTjBiM0p6ZlNCMlpXTjBiM0p6SUVsdWNIVjBJSFpsWTNSdmNuTWdkRzhnWTJGc1kzVnNZWFJsSUdScGMzUmhibU5sSUdKbGRIZGxaVzR1WEc0Z0lDQXFJRUJ0WlcxaVpYSnZaaUJUVUVWQ1lYTmxYRzRnSUNBcUwxeHVJQ0J3Y205MFpXTjBaV1FnYVc1cGRFUnBjM1JoYm1ObEtIWmxZM1J2Y25NNklGWmxZM1J2Y25NcElIdGNiaUFnSUNCMGFHbHpMbVJwYzNSaGJtTmxJRDBnWTJGc1kwUnBjM1JoYm1ObFRXRjBjbWw0S0habFkzUnZjbk1zSUhSb2FYTXVaR2x6ZEdGdVkyVkdkVzVqZEdsdmJpazdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUTJGc1kzVnNZWFJsY3lCa2FYTjBZVzVqWlNCaVpYUjNaV1Z1SUhSb1pTQjBkMjhnZG1WamRHOXljeUJuYVhabGJpNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRXWldOMGIzSnpmU0IyWldOMGIzSnpJRk5sZENCdlppQjJaV04wYjNKeklIUnZJR05oYkdOMWJHRjBaU0JrYVhOMFlXNWpaWE1nWW1WMGQyVmxiaTVjYmlBZ0lDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHbHVaR1Y0TVNCSmJtUmxlQ0J2WmlCMGFHVWdabWx5YzNRZ2RtVmpkRzl5SUc5bUlIUm9aU0J3WVdseUxseHVJQ0FnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnYVc1a1pYZ3lJRWx1WkdWNElHOW1JSFJvWlNCelpXTnZibVFnZG1WamRHOXlJRzltSUhSb1pTQndZV2x5TGx4dUlDQWdLaUJBY21WMGRYSnVJSHR1ZFcxaVpYSjlJRVJwYzNSaGJtTmxJR0psZEhkbFpXNGdkR2hsYzJVZ2RIZHZJSFpsWTNSdmNuTXVYRzRnSUNBcUwxeHVJQ0J3Y205MFpXTjBaV1FnWTJGc1kwUnBjM1JoYm1ObEtIWmxZM1J2Y25NNklGWmxZM1J2Y25Nc0lHbHVaR1Y0TVRvZ2JuVnRZbVZ5TENCcGJtUmxlREk2SUc1MWJXSmxjaWs2SUc1MWJXSmxjaUI3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WkdsemRHRnVZMlZiYVc1a1pYZ3hYVnRwYm1SbGVESmRPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVWdFltVmtjeUIwYUdVZ2RtVmpkRzl5Y3lCbmFYWmxiaUJwYm5SdklHRWdkSGR2TFdScGJXVnVjMmx2Ym1Gc0lITndZV05sTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UxWmxZM1J2Y25OOUlIWmxZM1J2Y25NZ1JDMWthVzFsYm5OcGIyNWhiQ0JqYjI5eVpHbHVZWFJsY3k1Y2JpQWdJQ29nUUhKbGRIVnliaUI3UTI5dmNtUnBibUYwWlhOOUlGTlFSU0JqYjI5eVpHbHVZWFJsY3lCcGJpQkVJSE53WVdObExseHVJQ0FnS2k5Y2JpQWdjSFZpYkdsaklHVnRZbVZrS0habFkzUnZjbk02SUZabFkzUnZjbk1wT2lCRGIyOXlaR2x1WVhSbGN5QjdYRzRnSUNBZ1kyOXVjM1FnYmtsMFpXMXpJRDBnZG1WamRHOXljeTVzWlc1bmRHZzdYRzRnSUNBZ1kyOXVjM1FnWVhKbFlWZHBaSFJvSUQwZ05EQTdYRzRnSUNBZ0x5OGdTVzVwZEdsaGJHbDZaU0IwYUdVZ1JDMWthVzFsYm5OcGIyNWhiQ0JqYjI5eVpHbHVZWFJsY3lCdlppQjBhR1VnVGlCd2IybHVkSE11WEc0Z0lDQWdZMjl1YzNRZ1kyOXZjbVJwYm1GMFpYTWdQU0JtYVd4c1VtRnVaRzl0VFdGMGNtbDRLRzVKZEdWdGN5d2dVMUJGUW1GelpTNWthVzFsYm5OcGIyNHNJR0Z5WldGWGFXUjBhQ2s3WEc1Y2JpQWdJQ0JzWlhRZ2JHRnRZbVJoTWlBOUlIUm9hWE11YkdGdFltUmhNanRjYmx4dUlDQWdJR2xtSUNoMGFHbHpMbk4wWlhCeklEMDlJREFwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVjM1JsY0hNZ1BTQjJaV04wYjNKekxteGxibWQwYUMweE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhSb2FYTXVhVzVwZEVScGMzUmhibU5sS0habFkzUnZjbk1wTzF4dVhHNGdJQ0FnWm05eUlDaHNaWFFnWTNsamJHVWdQU0F3T3lCamVXTnNaU0E4SUhSb2FYTXVZM2xqYkdWek95QXJLMk41WTJ4bEtTQjdYRzRnSUNBZ0lDQm1iM0lnS0d4bGRDQnpkR1Z3SUQwZ01Ec2djM1JsY0NBOElIUm9hWE11YzNSbGNITTdJQ3NyYzNSbGNDa2dlMXh1SUNBZ0lDQWdJQ0F2THlCVFpXeGxZM1FnZEhkdklIQnZhVzUwY3l3Z2FTQmhibVFnYWl3Z1lYUWdjbUZ1Wkc5dExDQXVMaTVjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdhU0E5SUhKaGJtUnZiVWx1ZENodVNYUmxiWE1wT3lCc1pYUWdhaUE5SUhKaGJtUnZiVWx1ZENodVNYUmxiWE1wTzF4dUlDQWdJQ0FnSUNCM2FHbHNaU0FvYVNBOVBTQnFLU0JxSUQwZ2NtRnVaRzl0U1c1MEtHNUpkR1Z0Y3lrN1hHNWNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2NtOTNhU0E5SUdOdmIzSmthVzVoZEdWelcybGRPeUJqYjI1emRDQnliM2RxSUQwZ1kyOXZjbVJwYm1GMFpYTmJhbDA3WEc1Y2JpQWdJQ0FnSUNBZ0x5OGdMaTR1SUhKbGRISnBaWFpsSUNodmNpQmxkbUZzZFdGMFpTa2dkR2hsYVhJZ2NISnZlR2x0YVhSNUlHbHVJSFJvWlNCcGJuQjFkQ0J6Y0dGalpTd2djbWxxSUdGdVpDQXVMaTVjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjaUE5SUhSb2FYTXVZMkZzWTBScGMzUmhibU5sS0habFkzUnZjbk1zSUdrc0lHb3BPMXh1SUNBZ0lDQWdJQ0F2THlBdUxpNGdZMjl0Y0hWMFpTQjBhR1ZwY2lCRmRXTnNhV1JsWVc0Z1pHbHpkR0Z1WTJVZ2IyNGdkR2hsSUVRdFpHbHRaVzV6YVc5dVlXd2diV0Z3TENCa2FXb3VYRzRnSUNBZ0lDQWdJR052Ym5OMElHUWdQU0JqWVd4amRXeGhkR1ZGZFdOc2FXUmxZVzVFYVhOMFlXNWpaU2h5YjNkcExDQnliM2RxS1R0Y2JseHVJQ0FnSUNBZ0lDQXZMeUJKWmlCeWFXb2dQRDBnY21Nc0lHOXlJR2xtSUhKcGFpQStJSEpqSUdGdVpDQmthV29nUENCeWFXb2dMaTR1WEc0Z0lDQWdJQ0FnSUdsbUlDZ29kR2hwY3k1amRYUnZabVlnUFQwZ01Da2dmSHdnS0hJZ1BEMGdkR2hwY3k1amRYUnZabVlwSUh4OElDaGtJRHdnY2lrcElIdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQnRkV3gwYVhCc2FXVnlJRDBnYkdGdFltUmhNaW9vY2kxa0tTOG9aQ3QwYUdsekxtVndjMmxzYjI0cE8xeHVJQ0FnSUNBZ0lDQWdJQzh2SUM0dUxpQjFjR1JoZEdVZ2RHaGxJR052YjNKa2FXNWhkR1Z6SUhocElHRnVaQ0I0YWk1Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCa2FXWm1TVW9nUFNCMlpXTjBiM0pCWkdRb2NtOTNhU3dnY205M2Fpd2dMVEVwTzF4dUlDQWdJQ0FnSUNBZ0lHTnZiM0prYVc1aGRHVnpXMmxkSUQwZ2RtVmpkRzl5UVdSa0tISnZkMmtzSUdScFptWkpTaXdnYlhWc2RHbHdiR2xsY2lrN1hHNGdJQ0FnSUNBZ0lDQWdZMjl2Y21ScGJtRjBaWE5iYWwwZ1BTQjJaV04wYjNKQlpHUW9jbTkzYWl3Z1pHbG1aa2xLTENBdGJYVnNkR2x3YkdsbGNpazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJQzh2SUVSbFkzSmxZWE5sSUhSb1pTQnNaV0Z5Ym1sdVp5QnlZWFJsSUh0c1lXMWlaR0Y5SUdKNUlHRWdjSEpsYzJOeWFXSmxaQ0I3Wkd4aGJXSmtZWDB1WEc0Z0lDQWdJQ0JzWVcxaVpHRXlJQzA5SUhSb2FYTXVaR3hoYldKa1lUSTdYRzRnSUNBZ0lDQnBaaUFvYkdGdFltUmhNaUE4UFNBd0xpa2dlMXh1SUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJR052YjNKa2FXNWhkR1Z6TzF4dUlDQjlYRzU5WEc1Y2JpOHFLbHh1SUNvZ1NXMXdiR1Z0Wlc1MGN5QnRiMlJwWm1sbFpDQnpkRzlqYUdGemRHbGpJSEJ5YjNocGJXbDBlU0JsYldKbFpHUnBibWN1WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FHTnNZWE56SUZCVFVFVkNZWE5sWEc0Z0tpQkFiR2x1YXlCa2IyazZNVEF1TVRBeE5pOVRNVEE1TXkwek1qWXpLREF6S1RBd01UVTFMVFJjYmlBcUwxeHVaWGh3YjNKMElHTnNZWE56SUZCVFVFVkNZWE5sSUdWNGRHVnVaSE1nVTFCRlFtRnpaU0I3WEc0Z0lDOHFLbHh1SUNBZ0tpQkZiV0psWkhNZ2RHaGxJSFpsWTNSdmNuTWdaMmwyWlc0Z2FXNTBieUJoSUhSM2J5MWthVzFsYm5OcGIyNWhiQ0J6Y0dGalpTQjFjMmx1WnlCaElHMXZaR2xtYVdWa0lIVndaR0YwWlNCeWRXeGxMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTFabFkzUnZjbk45SUhabFkzUnZjbk1nUkMxa2FXMWxibk5wYjI1aGJDQmpiMjl5WkdsdVlYUmxjeTVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdRMjl2Y21ScGJtRjBaWE45SUZOUVJTQmpiMjl5WkdsdVlYUmxjeUJwYmlCRUlITndZV05sTGx4dUlDQWdLaTljYmlBZ2NIVmliR2xqSUdWdFltVmtLSFpsWTNSdmNuTTZJRlpsWTNSdmNuTXBPaUJEYjI5eVpHbHVZWFJsY3lCN1hHNGdJQ0FnWTI5dWMzUWdia2wwWlcxeklEMGdkbVZqZEc5eWN5NXNaVzVuZEdnN1hHNGdJQ0FnWTI5dWMzUWdZWEpsWVZkcFpIUm9JRDBnTkRBN1hHNGdJQ0FnTHk4Z0lFbHVhWFJwWVd4cGVtVWdkR2hsSUVRdFpHbHRaVzV6YVc5dVlXd2dZMjl2Y21ScGJtRjBaWE1nYjJZZ2RHaGxJRTRnY0c5cGJuUnpMbHh1SUNBZ0lHTnZibk4wSUdOdmIzSmthVzVoZEdWeklEMGdabWxzYkZKaGJtUnZiVTFoZEhKcGVDaHVTWFJsYlhNc0lGQlRVRVZDWVhObExtUnBiV1Z1YzJsdmJpd2dZWEpsWVZkcFpIUm9LVHRjYmlBZ0lDQnNaWFFnYkdGdFltUmhJRDBnZEdocGN5NXNZVzFpWkdFN1hHNWNiaUFnSUNCMGFHbHpMbWx1YVhSRWFYTjBZVzVqWlNoMlpXTjBiM0p6S1R0Y2JseHVJQ0FnSUdadmNpQW9iR1YwSUdONVkyeGxJRDBnTURzZ1kzbGpiR1VnUENCMGFHbHpMbU41WTJ4bGN6c2dLeXRqZVdOc1pTa2dlMXh1SUNBZ0lDQWdMeThnVTJWc1pXTjBJR0VnY0c5cGJuUXNJR2tzSUdGMElISmhibVJ2YlNBb2NHbDJiM1FwTGx4dUlDQWdJQ0FnWTI5dWMzUWdhVG9nYm5WdFltVnlJRDBnY21GdVpHOXRTVzUwS0c1SmRHVnRjeWs3WEc0Z0lDQWdJQ0JqYjI1emRDQnliM2RwSUQwZ1kyOXZjbVJwYm1GMFpYTmJhVjA3WEc1Y2JpQWdJQ0FnSUM4dklFWnZjaUJsZG1WeWVTQndiMmx1ZENCcUlDRTlJR2tnTGk0dVhHNGdJQ0FnSUNCbWIzSWdLR3hsZENCcUlEMGdNRHNnYWlBOElHNUpkR1Z0Y3pzZ0t5dHFLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaHBJRDA5SUdvcElHTnZiblJwYm5WbE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCeWIzZHFJRDBnWTI5dmNtUnBibUYwWlhOYmFsMDdYRzRnSUNBZ0lDQWdJQzh2SUM0dUxpQnlaWFJ5YVdWMlpTQW9iM0lnWlhaaGJIVmhkR1VwSUdsMGN5QndjbTk0YVcxcGRIa2dkRzhnYVNCcGJpQjBhR1VnYVc1d2RYUWdjM0JoWTJVc0lISnBhaUF1TGk1Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnY2lBOUlIUm9hWE11WTJGc1kwUnBjM1JoYm1ObEtIWmxZM1J2Y25Nc0lHa3NJR29wTzF4dUlDQWdJQ0FnSUNBdkx5QXVMaTRnWVc1a0lHTnZiWEIxZEdVZ2RHaGxhWElnUlhWamJHbGtaV0Z1SUdScGMzUmhibU5sSUc5dUlIUm9aU0JFTFdScGJXVnVjMmx2Ym1Gc0lHMWhjQ3dnWkdscUxseHVJQ0FnSUNBZ0lDQmpiMjV6ZENCa0lEMGdZMkZzWTNWc1lYUmxSWFZqYkdsa1pXRnVSR2x6ZEdGdVkyVW9jbTkzYVN3Z2NtOTNhaWs3WEc0Z0lDQWdJQ0FnSUM4dklFbG1JSEpwYWlBOFBTQnlZeXdnYjNJZ2FXWWdjbWxxSUQ0Z2NtTWdZVzVrSUdScGFpQThJSEpwYWlBdUxpNWNiaUFnSUNBZ0lDQWdhV1lnS0NoMGFHbHpMbU4xZEc5bVppQTlQU0F3S1NCOGZDQW9jaUE4UFNCMGFHbHpMbU4xZEc5bVppa2dmSHdnS0dRZ1BDQnlLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUcxMWJIUnBjR3hwWlhJZ1BTQnNZVzFpWkdFcUtISXRaQ2t2S0dRcmRHaHBjeTVsY0hOcGJHOXVLVHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JrYVdabVNVb2dQU0IyWldOMGIzSkJaR1FvY205M2FTd2djbTkzYWl3Z0xURXBPMXh1SUNBZ0lDQWdJQ0FnSUM4dklDNHVMaUIxY0dSaGRHVWdkR2hsSUdOdmIzSmthVzVoZEdWeklIaHFMbHh1SUNBZ0lDQWdJQ0FnSUdOdmIzSmthVzVoZEdWelcycGRJRDBnZG1WamRHOXlRV1JrS0hKdmQyb3NJR1JwWm1aSlNpd2dMVzExYkhScGNHeHBaWElwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNBdkx5QkVaV055WldGelpTQjBhR1VnYkdWaGNtNXBibWNnY21GMFpTQjdiR0Z0WW1SaGZTQmllU0JoSUhCeVpYTmpjbWxpWldRZ2UyUnNZVzFpWkdGOUxseHVJQ0FnSUNBZ2JHRnRZbVJoSUMwOUlIUm9hWE11Wkd4aGJXSmtZVHRjYmlBZ0lDQWdJR2xtSUNoc1lXMWlaR0VnUEQwZ01DNHBJSHRjYmlBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJqYjI5eVpHbHVZWFJsY3p0Y2JpQWdmVnh1ZlZ4dVhHNHZLaXBjYmlBcUlFbHRjR3hsYldWdWRITWdiVzlrYVdacFpXUWdjM1J2WTJoaGMzUnBZeUJ3Y205NGFXMXBkSGtnWlcxaVpXUmthVzVuTGx4dUlDcGNiaUFxSUVCbGVIQnZjblJjYmlBcUlFQmpiR0Z6Y3lCUGNtbG5hVzVoYkZOUVJWeHVJQ29nUUd4cGJtc2daRzlwT2pFd0xqRXdNREl2YW1OakxqRXdNak0wWEc0Z0tpOWNibVY0Y0c5eWRDQmpiR0Z6Y3lCUGNtbG5hVzVoYkZOUVJTQmxlSFJsYm1SeklGTlFSVUpoYzJVZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUlcxaVpXUnpJSFJvWlNCMlpXTjBiM0p6SUdkcGRtVnVJR2x1ZEc4Z1lTQjBkMjh0WkdsdFpXNXphVzl1WVd3Z2MzQmhZMlVnZFhOcGJtY2dZU0J0YjJScFptbGxaQ0IxY0dSaGRHVWdjblZzWlM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdFdaV04wYjNKemZTQjJaV04wYjNKeklFUXRaR2x0Wlc1emFXOXVZV3dnWTI5dmNtUnBibUYwWlhNdVhHNGdJQ0FxSUVCeVpYUjFjbTRnZTBOdmIzSmthVzVoZEdWemZTQlRVRVVnWTI5dmNtUnBibUYwWlhNZ2FXNGdSQ0J6Y0dGalpTNWNiaUFnSUNvdlhHNGdJSEJ5YjNSbFkzUmxaQ0J5WVdScGRYTlFaWEpqWlc1ME9pQnVkVzFpWlhJN1hHNGdJSEJ5YjNSbFkzUmxaQ0J0WVhoRWFYTjBZVzVqWlRvZ2JuVnRZbVZ5TzF4dUlDQndjbTkwWldOMFpXUWdiV0Y0UkdsemRHRnVZMlZUZEdWd2N6b2diblZ0WW1WeU8xeHVYRzRnSUdOdmJuTjBjblZqZEc5eUtHOXdkR2x2Ym5NL09pQlBjSFJwYjI1ektTQjdYRzRnSUNBZ2MzVndaWElvYjNCMGFXOXVjeWs3WEc0Z0lDQWdkR2hwY3k1amVXTnNaWE1nUFNCdmNIUnBiMjV6UHk1amVXTnNaWE1nUHo4Z01XVXpPMXh1SUNBZ0lIUm9hWE11YzNSbGNITWdQU0J2Y0hScGIyNXpQeTV6ZEdWd2N5QS9QeUF4TURBd01EQTdYRzRnSUNBZ2RHaHBjeTV5WVdScGRYTlFaWEpqWlc1MElEMGdiM0IwYVc5dWN6OHVjbUZrYVhWelVHVnlZMlZ1ZENBL1B5QXhMakE3WEc0Z0lDQWdkR2hwY3k1dFlYaEVhWE4wWVc1alpTQTlJRzl3ZEdsdmJuTS9MbTFoZUVScGMzUmhibU5sSUQ4L0lHNTFiR3c3WEc0Z0lDQWdkR2hwY3k1dFlYaEVhWE4wWVc1alpWTjBaWEJ6SUQwZ2IzQjBhVzl1Y3o4dWJXRjRSR2x6ZEdGdVkyVlRkR1Z3Y3lBL1B5QnVkV3hzTzF4dUlDQjlYRzVjYmlBZ2NIVmliR2xqSUdWdFltVmtLSFpsWTNSdmNuTTZJRlpsWTNSdmNuTXBPaUJEYjI5eVpHbHVZWFJsY3lCN1hHNGdJQ0FnWTI5dWMzUWdia2wwWlcxeklEMGdkbVZqZEc5eWN5NXNaVzVuZEdnN1hHNGdJQ0FnWTI5dWMzUWdZWEpsWVZkcFpIUm9JRDBnTkRBN1hHNGdJQ0FnTHk4Z1NXNXBkR2xoYkdsNlpTQjBhR1VnUkMxa2FXMWxibk5wYjI1aGJDQmpiMjl5WkdsdVlYUmxjeUJ2WmlCMGFHVWdUaUJ3YjJsdWRITXVYRzRnSUNBZ1kyOXVjM1FnWTI5dmNtUnBibUYwWlhNZ1BTQm1hV3hzVW1GdVpHOXRUV0YwY21sNEtHNUpkR1Z0Y3l3Z1QzSnBaMmx1WVd4VFVFVXVaR2x0Wlc1emFXOXVMQ0JoY21WaFYybGtkR2dwTzF4dVhHNGdJQ0FnZEdocGN5NXBibWwwUkdsemRHRnVZMlVvZG1WamRHOXljeWs3WEc1Y2JpQWdJQ0JwWmlBb2RHaHBjeTV0WVhoRWFYTjBZVzVqWlZOMFpYQnpJRDA5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJSFJvYVhNdWJXRjRSR2x6ZEdGdVkyVlRkR1Z3Y3lBOUlHNUpkR1Z0Y3lBcUlFMWhkR2d1Wm14dmIzSW9LRzVKZEdWdGN5QXRJREVwSUM4Z01pazdYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaDBhR2x6TG0xaGVFUnBjM1JoYm1ObElEMDlJRzUxYkd3cElIdGNiaUFnSUNBZ0lIUm9hWE11YldGNFJHbHpkR0Z1WTJVZ1BTQXRNV1V6Tnp0Y2JpQWdJQ0FnSUdadmNpQW9iR1YwSUc0Z1BTQXdPeUJ1SUR3Z2RHaHBjeTV0WVhoRWFYTjBZVzVqWlZOMFpYQnpPeUJ1S3lzcElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2FTQTlJSEpoYm1SdmJVbHVkQ2h1U1hSbGJYTXBPeUJzWlhRZ2FpQTlJSEpoYm1SdmJVbHVkQ2h1U1hSbGJYTXBPMXh1SUNBZ0lDQWdJQ0IzYUdsc1pTQW9hU0E5UFNCcUtTQnFJRDBnY21GdVpHOXRTVzUwS0c1SmRHVnRjeWs3WEc1Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWkNBOUlIUm9hWE11WTJGc1kwUnBjM1JoYm1ObEtIWmxZM1J2Y25Nc0lHa3NJR29wTzF4dUlDQWdJQ0FnSUNCcFppQW9aQ0ErSUhSb2FYTXViV0Y0UkdsemRHRnVZMlVwSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG0xaGVFUnBjM1JoYm1ObElEMGdaRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJR3hsZENCc1lXMWlaR0VnUFNCMGFHbHpMbXhoYldKa1lUdGNiaUFnSUNCamIyNXpkQ0J5WVdScGRYTWdQU0FvZEdocGN5NXlZV1JwZFhOUVpYSmpaVzUwSUQwOUlEQXVNQ2tnUHlCMGFHbHpMbTFoZUVScGMzUmhibU5sSURvZ2RHaHBjeTV0WVhoRWFYTjBZVzVqWlNBcUlIUm9hWE11Y21Ga2FYVnpVR1Z5WTJWdWREdGNibHh1SUNBZ0lHWnZjaUFvYkdWMElHTjVZMnhsSUQwZ01Ec2dZM2xqYkdVZ1BDQjBhR2x6TG1ONVkyeGxjenNnS3l0amVXTnNaU2tnZTF4dUlDQWdJQ0FnWm05eUlDaHNaWFFnYzNSbGNDQTlJREE3SUhOMFpYQWdQQ0IwYUdsekxuTjBaWEJ6T3lBckszTjBaWEFwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGdVMlZzWldOMElIUjNieUJ3YjJsdWRITXNJR2tnWVc1a0lHb3NJR0YwSUhKaGJtUnZiU3dnTGk0dVhHNGdJQ0FnSUNBZ0lHTnZibk4wSUdrZ1BTQnlZVzVrYjIxSmJuUW9ia2wwWlcxektUc2diR1YwSUdvZ1BTQnlZVzVrYjIxSmJuUW9ia2wwWlcxektUdGNiaUFnSUNBZ0lDQWdkMmhwYkdVZ0tHa2dQVDBnYWlrZ2FpQTlJSEpoYm1SdmJVbHVkQ2h1U1hSbGJYTXBPMXh1WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSEp2ZDJrZ1BTQmpiMjl5WkdsdVlYUmxjMXRwWFRzZ1kyOXVjM1FnY205M2FpQTlJR052YjNKa2FXNWhkR1Z6VzJwZE8xeHVYRzRnSUNBZ0lDQWdJQzh2SUM0dUxpQnlaWFJ5YVdWMlpTQW9iM0lnWlhaaGJIVmhkR1VwSUhSb1pXbHlJSEJ5YjNocGJXbDBlU0JwYmlCMGFHVWdhVzV3ZFhRZ2MzQmhZMlVzSUhKcGFpQmhibVFnTGk0dVhHNGdJQ0FnSUNBZ0lHTnZibk4wSUhJZ1BTQjBhR2x6TG1OaGJHTkVhWE4wWVc1alpTaDJaV04wYjNKekxDQnBMQ0JxS1R0Y2JpQWdJQ0FnSUNBZ0x5OGdMaTR1SUdOdmJYQjFkR1VnZEdobGFYSWdSWFZqYkdsa1pXRnVJR1JwYzNSaGJtTmxJRzl1SUhSb1pTQkVMV1JwYldWdWMybHZibUZzSUcxaGNDd2daR2xxTGx4dUlDQWdJQ0FnSUNCamIyNXpkQ0JrSUQwZ1kyRnNZM1ZzWVhSbFJYVmpiR2xrWldGdVJHbHpkR0Z1WTJVb2NtOTNhU3dnY205M2FpazdYRzVjYmlBZ0lDQWdJQ0FnYVdZZ0tDaHlJRHc5SUhKaFpHbDFjeWtnZkh3Z0tHUWdQQ0J5S1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElHMTFiSFJwY0d4cFpYSWdQU0JzWVcxaVpHRWdLaUF3TGpVZ0tpQW9jaUF0SUdRcElDOGdLR1FnS3lCMGFHbHpMbVZ3YzJsc2IyNHBPMXh1SUNBZ0lDQWdJQ0FnSUM4dklDNHVMaUIxY0dSaGRHVWdkR2hsSUdOdmIzSmthVzVoZEdWeklIaHBJR0Z1WkNCNGFpNWNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQmthV1ptU1VvZ1BTQjJaV04wYjNKQlpHUW9jbTkzYVN3Z2NtOTNhaXdnTFRFcE8xeHVJQ0FnSUNBZ0lDQWdJR052YjNKa2FXNWhkR1Z6VzJsZElEMGdkbVZqZEc5eVFXUmtLSEp2ZDJrc0lHUnBabVpKU2l3Z2JYVnNkR2x3YkdsbGNpazdYRzRnSUNBZ0lDQWdJQ0FnWTI5dmNtUnBibUYwWlhOYmFsMGdQU0IyWldOMGIzSkJaR1FvY205M2Fpd2daR2xtWmtsS0xDQXRiWFZzZEdsd2JHbGxjaWs3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUd4aGJXSmtZU0F0UFNBb0tIUm9hWE11YkdGdFltUmhJQzBnZEdocGN5NWtiR0Z0WW1SaEtTQXZJQ2gwYUdsekxtTjVZMnhsY3lBdElERXVNQ2twT3lBN1hHNGdJQ0FnSUNCcFppQW9iR0Z0WW1SaElEd2dkR2hwY3k1a2JHRnRZbVJoS1NCN1hHNGdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z1kyOXZjbVJwYm1GMFpYTTdYRzRnSUgxY2JuMWNiaUpkZlE9PSIsImltcG9ydCAqIGFzIGZsIGZyb20gJ2Zhc3Rlc3QtbGV2ZW5zaHRlaW4nO1xuaW1wb3J0IHsgamFyb1dpbmtsZXIgfSBmcm9tICdqYXJvLXdpbmtsZXItdHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBzaW1pbGFyaXR5TWV0cmljIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvc2ltaWxhcml0eS1tZXRyaWNzJztcbmltcG9ydCB7IGNhbGN1bGF0ZUV1Y2xpZGVhbkRpc3RhbmNlIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdmVjdG9yLW9wZXJhdGlvbnMnO1xuZXhwb3J0IGNvbnN0IEF2YWlsYWJsZU1ldHJpY3MgPSB7XG4gICAgJ1ZlY3Rvcic6IHtcbiAgICAgICAgJ0V1Y2xpZGVhbkRpc3RhbmNlJzogY2FsY3VsYXRlRXVjbGlkZWFuRGlzdGFuY2UsXG4gICAgfSxcbiAgICAnU3RyaW5nJzoge1xuICAgICAgICAnTGV2ZW5zaHRlaW4nOiBmbC5kaXN0YW5jZSxcbiAgICAgICAgJ0phcm8tV2lua2xlcic6IGphcm9XaW5rbGVyLFxuICAgIH0sXG4gICAgJ0JpdEFycmF5Jzoge1xuICAgICAgICAnVGFuaW1vdG8nOiBzaW1pbGFyaXR5TWV0cmljWydUYW5pbW90byddLFxuICAgICAgICAnRGljZSc6IHNpbWlsYXJpdHlNZXRyaWNbJ0RpY2UnXSxcbiAgICAgICAgJ0FzeW1tZXRyaWMnOiBzaW1pbGFyaXR5TWV0cmljWydBc3ltbWV0cmljJ10sXG4gICAgICAgICdCcmF1bi1CbGFucXVldCc6IHNpbWlsYXJpdHlNZXRyaWNbJ0JyYXVuLUJsYW5xdWV0J10sXG4gICAgICAgICdDb3NpbmUnOiBzaW1pbGFyaXR5TWV0cmljWydDb3NpbmUnXSxcbiAgICAgICAgJ0t1bGN6eW5za2knOiBzaW1pbGFyaXR5TWV0cmljWydLdWxjenluc2tpJ10sXG4gICAgICAgICdNYy1Db25uYXVnaGV5Jzogc2ltaWxhcml0eU1ldHJpY1snTWMtQ29ubmF1Z2hleSddLFxuICAgICAgICAnUm9nb3QtR29sZGJlcmcnOiBzaW1pbGFyaXR5TWV0cmljWydSb2dvdC1Hb2xkYmVyZyddLFxuICAgICAgICAnUnVzc2VsJzogc2ltaWxhcml0eU1ldHJpY1snUnVzc2VsJ10sXG4gICAgICAgICdTb2thbCc6IHNpbWlsYXJpdHlNZXRyaWNbJ1Nva2FsJ10sXG4gICAgfSxcbn07XG5leHBvcnQgY29uc3QgTWV0cmljVG9EYXRhVHlwZSA9IE9iamVjdC5rZXlzKEF2YWlsYWJsZU1ldHJpY3MpXG4gICAgLnJlZHVjZSgocmV0LCBrZXkpID0+IHtcbiAgICBmb3IgKGNvbnN0IHZhbCBvZiBPYmplY3Qua2V5cyhBdmFpbGFibGVNZXRyaWNzW2tleV0pKSB7XG4gICAgICAgIHJldFt2YWxdID0ga2V5O1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufSwge30pO1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nTWV0cmljKG5hbWUpIHtcbiAgICByZXR1cm4gTWV0cmljVG9EYXRhVHlwZVtuYW1lXSA9PSAnU3RyaW5nJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0JpdEFycmF5TWV0cmljKG5hbWUpIHtcbiAgICByZXR1cm4gTWV0cmljVG9EYXRhVHlwZVtuYW1lXSA9PSAnQml0QXJyYXknO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmVjdG9yTWV0cmljKG5hbWUpIHtcbiAgICByZXR1cm4gTWV0cmljVG9EYXRhVHlwZVtuYW1lXSA9PSAnVmVjdG9yJztcbn1cbi8qKiBVbmlmaWVkIGNsYXNzIGltcGxlbWVudGluZyBkaWZmZXJlbnQgc3RyaW5nIG1lYXN1cmVzLiAqL1xuZXhwb3J0IGNsYXNzIE1lYXN1cmUge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgTWVhc3VyZSB3aXRoIC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIE1ldGhvZCB0byBjYWxjdWxhdGUgZGlzdGFuY2UgYmV0d2VlbiBzdHJpbmdzLlxuICAgICAqIEBtZW1iZXJvZiBNZWFzdXJlclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG1ldGhvZCkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgdGhpcy5kYXRhVHlwZSA9IE1ldHJpY1RvRGF0YVR5cGVbbWV0aG9kXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBjdXN0b20gc3RyaW5nIGRpc3RhbmNlIGZ1bmN0aW9uIHNwZWNpZmllZC5cbiAgICAgKiBAcmV0dXJuIHtEaXN0YW5jZU1ldHJpY30gQ2FsbGJhY2sgb2YgdGhlIG1lYXN1cmUgY2hvc2VuLlxuICAgICAqIEBtZW1iZXJvZiBNZWFzdXJlclxuICAgICAqL1xuICAgIGdldE1lYXN1cmUoKSB7XG4gICAgICAgIGNvbnN0IGRpY3QgPSBBdmFpbGFibGVNZXRyaWNzO1xuICAgICAgICByZXR1cm4gZGljdFt0aGlzLmRhdGFUeXBlXVt0aGlzLm1ldGhvZF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgY3VzdG9tIHN0cmluZyBkaXN0YW5jZSBieSB0aGUgZ2l2ZW4gZGF0YSB0eXBlLlxuICAgICAqIEBwYXJhbSB7QXZhaWxhYmxlRGF0YVR5cGVzfSBkYXRhVHlwZSBNZXRyaWMncyBkYXRhIHR5cGVcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gTWV0cmljIG5hbWVzIHdoaWNoIGV4cGVjdHMgdGhlIGdpdmVuIGRhdGEgdHlwZVxuICAgICAqIEBtZW1iZXJvZiBNZWFzdXJlclxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRNZXRyaWNCeURhdGFUeXBlKGRhdGFUeXBlKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhBdmFpbGFibGVNZXRyaWNzW2RhdGFUeXBlXSk7XG4gICAgfVxuICAgIC8qKiBSZXR1cm5zIG1ldHJpYyBuYW1lcyBhdmFpbGFibGUuXG4gICAgICogQG1lbWJlcm9mIE1lYXN1cmVyXG4gICAgKi9cbiAgICBzdGF0aWMgZ2V0IGF2YWlsYWJsZU1lYXN1cmVzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoQXZhaWxhYmxlTWV0cmljcyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZEhsd1pXUXRiV1YwY21samN5NXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSW5SNWNHVmtMVzFsZEhKcFkzTXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFc1QwRkJUeXhMUVVGTExFVkJRVVVzVFVGQlRTeHhRa0ZCY1VJc1EwRkJRenRCUVVNeFF5eFBRVUZQTEVWQlFVTXNWMEZCVnl4RlFVRkRMRTFCUVUwc2VVSkJRWGxDTEVOQlFVTTdRVUZIY0VRc1QwRkJUeXhGUVVGRExHZENRVUZuUWl4RlFVRkRMRTFCUVUwc2EwUkJRV3RFTEVOQlFVTTdRVUZEYkVZc1QwRkJUeXhGUVVGRExEQkNRVUV3UWl4RlFVRkRMRTFCUVUwc2FVUkJRV2xFTEVOQlFVTTdRVUZKTTBZc1RVRkJUU3hEUVVGRExFMUJRVTBzWjBKQlFXZENMRWRCUVVjN1NVRkRPVUlzVVVGQlVTeEZRVUZGTzFGQlExSXNiVUpCUVcxQ0xFVkJRVVVzTUVKQlFUQkNPMHRCUTJoRU8wbEJRMFFzVVVGQlVTeEZRVUZGTzFGQlExSXNZVUZCWVN4RlFVRkZMRVZCUVVVc1EwRkJReXhSUVVGUk8xRkJRekZDTEdOQlFXTXNSVUZCUlN4WFFVRlhPMHRCUXpWQ08wbEJRMFFzVlVGQlZTeEZRVUZGTzFGQlExWXNWVUZCVlN4RlFVRkZMR2RDUVVGblFpeERRVUZETEZWQlFWVXNRMEZCUXp0UlFVTjRReXhOUVVGTkxFVkJRVVVzWjBKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGRE8xRkJRMmhETEZsQlFWa3NSVUZCUlN4blFrRkJaMElzUTBGQlF5eFpRVUZaTEVOQlFVTTdVVUZETlVNc1owSkJRV2RDTEVWQlFVVXNaMEpCUVdkQ0xFTkJRVU1zWjBKQlFXZENMRU5CUVVNN1VVRkRjRVFzVVVGQlVTeEZRVUZGTEdkQ1FVRm5RaXhEUVVGRExGRkJRVkVzUTBGQlF6dFJRVU53UXl4WlFVRlpMRVZCUVVVc1owSkJRV2RDTEVOQlFVTXNXVUZCV1N4RFFVRkRPMUZCUXpWRExHVkJRV1VzUlVGQlJTeG5Ra0ZCWjBJc1EwRkJReXhsUVVGbExFTkJRVU03VVVGRGJFUXNaMEpCUVdkQ0xFVkJRVVVzWjBKQlFXZENMRU5CUVVNc1owSkJRV2RDTEVOQlFVTTdVVUZEY0VRc1VVRkJVU3hGUVVGRkxHZENRVUZuUWl4RFFVRkRMRkZCUVZFc1EwRkJRenRSUVVOd1F5eFBRVUZQTEVWQlFVVXNaMEpCUVdkQ0xFTkJRVU1zVDBGQlR5eERRVUZETzB0QlEyNURPME5CUTBZc1EwRkJRenRCUVVWR0xFMUJRVTBzUTBGQlF5eE5RVUZOTEdkQ1FVRm5RaXhIUVVGeFFpeE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETzB0QlF6VkZMRTFCUVUwc1EwRkJReXhEUVVGRExFZEJRWEZDTEVWQlFVVXNSMEZCUnl4RlFVRkZMRVZCUVVVN1NVRkRja01zUzBGQlN5eE5RVUZOTEVkQlFVY3NTVUZCU1N4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRWRCUVhsQ0xFTkJRVU1zUTBGQlF5eEZRVUZGTzFGQlF6RkZMRWRCUVVjc1EwRkJReXhIUVVGNVFpeERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRPMHRCUTNSRE8wbEJRMFFzVDBGQlR5eEhRVUZITEVOQlFVTTdRVUZEWWl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU03UVVGWFZDeE5RVUZOTEZWQlFWVXNZMEZCWXl4RFFVRkRMRWxCUVd0Q08wbEJReTlETEU5QlFVOHNaMEpCUVdkQ0xFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NVVUZCVVN4RFFVRkRPMEZCUXpWRExFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNaMEpCUVdkQ0xFTkJRVU1zU1VGQmEwSTdTVUZEYWtRc1QwRkJUeXhuUWtGQlowSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hWUVVGVkxFTkJRVU03UVVGRE9VTXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3hqUVVGakxFTkJRVU1zU1VGQmEwSTdTVUZETDBNc1QwRkJUeXhuUWtGQlowSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hSUVVGUkxFTkJRVU03UVVGRE5VTXNRMEZCUXp0QlFVVkVMRFJFUVVFMFJEdEJRVU0xUkN4TlFVRk5MRTlCUVU4c1QwRkJUenRKUVVsc1FqczdPenRQUVVsSE8wbEJRMGdzV1VGQldTeE5RVUZ2UWp0UlFVTTVRaXhKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEUxQlFVMHNRMEZCUXp0UlFVTnlRaXhKUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEdkQ1FVRm5RaXhEUVVGRExFMUJRVTBzUTBGQmRVSXNRMEZCUXp0SlFVTnFSU3hEUVVGRE8wbEJSVVE3T3pzN1QwRkpSenRKUVVOSkxGVkJRVlU3VVVGRFppeE5RVUZOTEVsQlFVa3NSMEZCYzBRc1owSkJRV2RDTEVOQlFVTTdVVUZEYWtZc1QwRkJUeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEpRVU14UXl4RFFVRkRPMGxCUlVRN096czdPMDlCUzBjN1NVRkRTU3hOUVVGTkxFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1VVRkJORUk3VVVGRE5VUXNUMEZCVHl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGFrUXNRMEZCUXp0SlFVVkVPenROUVVWRk8wbEJRMFlzVFVGQlRTeExRVUZMTEdsQ1FVRnBRanRSUVVNeFFpeFBRVUZQTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNRMEZCUXp0SlFVTjJReXhEUVVGRE8wTkJRMFlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnS2lCaGN5Qm1iQ0JtY205dElDZG1ZWE4wWlhOMExXeGxkbVZ1YzJoMFpXbHVKenRjYm1sdGNHOXlkQ0I3YW1GeWIxZHBibXRzWlhKOUlHWnliMjBnSjJwaGNtOHRkMmx1YTJ4bGNpMTBlWEJsYzJOeWFYQjBKenRjYmx4dWFXMXdiM0owSUh0RWFYTjBZVzVqWlUxbGRISnBZMzBnWm5KdmJTQW5RR1JoZEdGbmNtOXJMV3hwWW5KaGNtbGxjeTkxZEdsc2N5OXpjbU12ZEhsd1pTMWtaV05zWVhKaGRHbHZibk1uTzF4dWFXMXdiM0owSUh0emFXMXBiR0Z5YVhSNVRXVjBjbWxqZlNCbWNtOXRJQ2RBWkdGMFlXZHliMnN0YkdsaWNtRnlhV1Z6TDNWMGFXeHpMM055WXk5emFXMXBiR0Z5YVhSNUxXMWxkSEpwWTNNbk8xeHVhVzF3YjNKMElIdGpZV3hqZFd4aGRHVkZkV05zYVdSbFlXNUVhWE4wWVc1alpYMGdabkp2YlNBblFHUmhkR0ZuY205ckxXeHBZbkpoY21sbGN5OTFkR2xzY3k5emNtTXZkbVZqZEc5eUxXOXdaWEpoZEdsdmJuTW5PMXh1YVcxd2IzSjBJRUpwZEVGeWNtRjVJR1p5YjIwZ0owQmtZWFJoWjNKdmF5MXNhV0p5WVhKcFpYTXZkWFJwYkhNdmMzSmpMMkpwZEMxaGNuSmhlU2M3WEc1cGJYQnZjblFnZTFabFkzUnZjaXdnVTNSeWFXNW5SR2xqZEdsdmJtRnllWDBnWm5KdmJTQW5RR1JoZEdGbmNtOXJMV3hwWW5KaGNtbGxjeTkxZEdsc2N5OXpjbU12ZEhsd1pTMWtaV05zWVhKaGRHbHZibk1uTzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnUVhaaGFXeGhZbXhsVFdWMGNtbGpjeUE5SUh0Y2JpQWdKMVpsWTNSdmNpYzZJSHRjYmlBZ0lDQW5SWFZqYkdsa1pXRnVSR2x6ZEdGdVkyVW5PaUJqWVd4amRXeGhkR1ZGZFdOc2FXUmxZVzVFYVhOMFlXNWpaU3hjYmlBZ2ZTeGNiaUFnSjFOMGNtbHVaeWM2SUh0Y2JpQWdJQ0FuVEdWMlpXNXphSFJsYVc0bk9pQm1iQzVrYVhOMFlXNWpaU3hjYmlBZ0lDQW5TbUZ5YnkxWGFXNXJiR1Z5SnpvZ2FtRnliMWRwYm10c1pYSXNYRzRnSUgwc1hHNGdJQ2RDYVhSQmNuSmhlU2M2SUh0Y2JpQWdJQ0FuVkdGdWFXMXZkRzhuT2lCemFXMXBiR0Z5YVhSNVRXVjBjbWxqV3lkVVlXNXBiVzkwYnlkZExGeHVJQ0FnSUNkRWFXTmxKem9nYzJsdGFXeGhjbWwwZVUxbGRISnBZMXNuUkdsalpTZGRMRnh1SUNBZ0lDZEJjM2x0YldWMGNtbGpKem9nYzJsdGFXeGhjbWwwZVUxbGRISnBZMXNuUVhONWJXMWxkSEpwWXlkZExGeHVJQ0FnSUNkQ2NtRjFiaTFDYkdGdWNYVmxkQ2M2SUhOcGJXbHNZWEpwZEhsTlpYUnlhV05iSjBKeVlYVnVMVUpzWVc1eGRXVjBKMTBzWEc0Z0lDQWdKME52YzJsdVpTYzZJSE5wYldsc1lYSnBkSGxOWlhSeWFXTmJKME52YzJsdVpTZGRMRnh1SUNBZ0lDZExkV3hqZW5sdWMydHBKem9nYzJsdGFXeGhjbWwwZVUxbGRISnBZMXNuUzNWc1kzcDVibk5yYVNkZExGeHVJQ0FnSUNkTll5MURiMjV1WVhWbmFHVjVKem9nYzJsdGFXeGhjbWwwZVUxbGRISnBZMXNuVFdNdFEyOXVibUYxWjJobGVTZGRMRnh1SUNBZ0lDZFNiMmR2ZEMxSGIyeGtZbVZ5WnljNklITnBiV2xzWVhKcGRIbE5aWFJ5YVdOYkoxSnZaMjkwTFVkdmJHUmlaWEpuSjEwc1hHNGdJQ0FnSjFKMWMzTmxiQ2M2SUhOcGJXbHNZWEpwZEhsTlpYUnlhV05iSjFKMWMzTmxiQ2RkTEZ4dUlDQWdJQ2RUYjJ0aGJDYzZJSE5wYldsc1lYSnBkSGxOWlhSeWFXTmJKMU52YTJGc0oxMHNYRzRnSUgwc1hHNTlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdUV1YwY21salZHOUVZWFJoVkhsd1pUb2dVM1J5YVc1blJHbGpkR2x2Ym1GeWVTQTlJRTlpYW1WamRDNXJaWGx6S0VGMllXbHNZV0pzWlUxbGRISnBZM01wWEc0Z0lDNXlaV1IxWTJVb0tISmxkRG9nVTNSeWFXNW5SR2xqZEdsdmJtRnllU3dnYTJWNUtTQTlQaUI3WEc0Z0lDQWdabTl5SUNoamIyNXpkQ0IyWVd3Z2IyWWdUMkpxWldOMExtdGxlWE1vUVhaaGFXeGhZbXhsVFdWMGNtbGpjMXRyWlhrZ1lYTWdRWFpoYVd4aFlteGxSR0YwWVZSNWNHVnpYU2twSUh0Y2JpQWdJQ0FnSUhKbGRGdDJZV3dnWVhNZ1FYWmhhV3hoWW14bFJHRjBZVlI1Y0dWelhTQTlJR3RsZVR0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlISmxkRHRjYmlBZ2ZTd2dlMzBwTzF4dVhHNWxlSEJ2Y25RZ2RIbHdaU0JCZG1GcGJHRmliR1ZFWVhSaFZIbHdaWE1nUFNCclpYbHZaaUIwZVhCbGIyWWdRWFpoYVd4aFlteGxUV1YwY21samN6dGNibVY0Y0c5eWRDQjBlWEJsSUZOMGNtbHVaMDFsZEhKcFkzTWdQU0JyWlhsdlppQjBlWEJsYjJZZ1FYWmhhV3hoWW14bFRXVjBjbWxqYzFzblUzUnlhVzVuSjEwN1hHNWxlSEJ2Y25RZ2RIbHdaU0JDYVhSQmNuSmhlVTFsZEhKcFkzTWdQU0JyWlhsdlppQjBlWEJsYjJZZ1FYWmhhV3hoWW14bFRXVjBjbWxqYzFzblFtbDBRWEp5WVhrblhUdGNibVY0Y0c5eWRDQjBlWEJsSUZabFkzUnZjazFsZEhKcFkzTWdQU0JyWlhsdlppQjBlWEJsYjJZZ1FYWmhhV3hoWW14bFRXVjBjbWxqYzFzblZtVmpkRzl5SjEwN1hHNWxlSEJ2Y25RZ2RIbHdaU0JMYm05M2JrMWxkSEpwWTNNZ1BTQlRkSEpwYm1kTlpYUnlhV056SUh3Z1FtbDBRWEp5WVhsTlpYUnlhV056SUh3Z1ZtVmpkRzl5VFdWMGNtbGpjenRjYmx4dVpYaHdiM0owSUhSNWNHVWdWbUZzYVdSVWVYQmxjeUE5SUh0a1lYUmhPaUJ6ZEhKcGJtZGJYU3dnYldWMGNtbGpPaUJUZEhKcGJtZE5aWFJ5YVdOemZTQjhJSHRrWVhSaE9pQldaV04wYjNKYlhTd2diV1YwY21sak9pQldaV04wYjNKTlpYUnlhV056ZlNCOFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2UyUmhkR0U2SUVKcGRFRnljbUY1VzEwc0lHMWxkSEpwWXpvZ1FtbDBRWEp5WVhsTlpYUnlhV056ZlR0Y2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHbHpVM1J5YVc1blRXVjBjbWxqS0c1aGJXVTZJRXR1YjNkdVRXVjBjbWxqY3lrZ2UxeHVJQ0J5WlhSMWNtNGdUV1YwY21salZHOUVZWFJoVkhsd1pWdHVZVzFsWFNBOVBTQW5VM1J5YVc1bkp6dGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdselFtbDBRWEp5WVhsTlpYUnlhV01vYm1GdFpUb2dTMjV2ZDI1TlpYUnlhV056S1NCN1hHNGdJSEpsZEhWeWJpQk5aWFJ5YVdOVWIwUmhkR0ZVZVhCbFcyNWhiV1ZkSUQwOUlDZENhWFJCY25KaGVTYzdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCcGMxWmxZM1J2Y2sxbGRISnBZeWh1WVcxbE9pQkxibTkzYmsxbGRISnBZM01wSUh0Y2JpQWdjbVYwZFhKdUlFMWxkSEpwWTFSdlJHRjBZVlI1Y0dWYmJtRnRaVjBnUFQwZ0oxWmxZM1J2Y2ljN1hHNTlYRzVjYmk4cUtpQlZibWxtYVdWa0lHTnNZWE56SUdsdGNHeGxiV1Z1ZEdsdVp5QmthV1ptWlhKbGJuUWdjM1J5YVc1bklHMWxZWE4xY21WekxpQXFMMXh1Wlhod2IzSjBJR05zWVhOeklFMWxZWE4xY21VZ2UxeHVJQ0J3Y205MFpXTjBaV1FnYldWMGFHOWtPaUJMYm05M2JrMWxkSEpwWTNNN1hHNGdJSEJ5YjNSbFkzUmxaQ0JrWVhSaFZIbHdaVG9nUVhaaGFXeGhZbXhsUkdGMFlWUjVjR1Z6TzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJEY21WaGRHVnpJR0Z1SUdsdWMzUmhibU5sSUc5bUlFMWxZWE4xY21VZ2QybDBhQ0F1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnRaWFJvYjJRZ1RXVjBhRzlrSUhSdklHTmhiR04xYkdGMFpTQmthWE4wWVc1alpTQmlaWFIzWldWdUlITjBjbWx1WjNNdVhHNGdJQ0FxSUVCdFpXMWlaWEp2WmlCTlpXRnpkWEpsY2x4dUlDQWdLaTljYmlBZ1kyOXVjM1J5ZFdOMGIzSW9iV1YwYUc5a09pQkxibTkzYmsxbGRISnBZM01wSUh0Y2JpQWdJQ0IwYUdsekxtMWxkR2h2WkNBOUlHMWxkR2h2WkR0Y2JpQWdJQ0IwYUdsekxtUmhkR0ZVZVhCbElEMGdUV1YwY21salZHOUVZWFJoVkhsd1pWdHRaWFJvYjJSZElHRnpJRUYyWVdsc1lXSnNaVVJoZEdGVWVYQmxjenRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pYUjFjbTV6SUdOMWMzUnZiU0J6ZEhKcGJtY2daR2x6ZEdGdVkyVWdablZ1WTNScGIyNGdjM0JsWTJsbWFXVmtMbHh1SUNBZ0tpQkFjbVYwZFhKdUlIdEVhWE4wWVc1alpVMWxkSEpwWTMwZ1EyRnNiR0poWTJzZ2IyWWdkR2hsSUcxbFlYTjFjbVVnWTJodmMyVnVMbHh1SUNBZ0tpQkFiV1Z0WW1WeWIyWWdUV1ZoYzNWeVpYSmNiaUFnSUNvdlhHNGdJSEIxWW14cFl5Qm5aWFJOWldGemRYSmxLQ2s2SUVScGMzUmhibU5sVFdWMGNtbGpJSHRjYmlBZ0lDQmpiMjV6ZENCa2FXTjBPaUI3VzJ0bGVUb2djM1J5YVc1blhUb2dlMXRyWlhreU9pQnpkSEpwYm1kZE9pQkVhWE4wWVc1alpVMWxkSEpwWTMxOUlEMGdRWFpoYVd4aFlteGxUV1YwY21samN6dGNiaUFnSUNCeVpYUjFjbTRnWkdsamRGdDBhR2x6TG1SaGRHRlVlWEJsWFZ0MGFHbHpMbTFsZEdodlpGMDdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nVW1WMGRYSnVjeUJqZFhOMGIyMGdjM1J5YVc1bklHUnBjM1JoYm1ObElHSjVJSFJvWlNCbmFYWmxiaUJrWVhSaElIUjVjR1V1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdRWFpoYVd4aFlteGxSR0YwWVZSNWNHVnpmU0JrWVhSaFZIbHdaU0JOWlhSeWFXTW5jeUJrWVhSaElIUjVjR1ZjYmlBZ0lDb2dRSEpsZEhWeWJpQjdjM1J5YVc1blcxMTlJRTFsZEhKcFl5QnVZVzFsY3lCM2FHbGphQ0JsZUhCbFkzUnpJSFJvWlNCbmFYWmxiaUJrWVhSaElIUjVjR1ZjYmlBZ0lDb2dRRzFsYldKbGNtOW1JRTFsWVhOMWNtVnlYRzRnSUNBcUwxeHVJQ0J3ZFdKc2FXTWdjM1JoZEdsaklHZGxkRTFsZEhKcFkwSjVSR0YwWVZSNWNHVW9aR0YwWVZSNWNHVTZJRUYyWVdsc1lXSnNaVVJoZEdGVWVYQmxjeWs2SUhOMGNtbHVaMXRkSUh0Y2JpQWdJQ0J5WlhSMWNtNGdUMkpxWldOMExtdGxlWE1vUVhaaGFXeGhZbXhsVFdWMGNtbGpjMXRrWVhSaFZIbHdaVjBwTzF4dUlDQjlYRzVjYmlBZ0x5b3FJRkpsZEhWeWJuTWdiV1YwY21saklHNWhiV1Z6SUdGMllXbHNZV0pzWlM1Y2JpQWdJQ29nUUcxbGJXSmxjbTltSUUxbFlYTjFjbVZ5WEc0Z0lDb3ZYRzRnSUhOMFlYUnBZeUJuWlhRZ1lYWmhhV3hoWW14bFRXVmhjM1Z5WlhNb0tUb2djM1J5YVc1blcxMGdlMXh1SUNBZ0lISmxkSFZ5YmlCUFltcGxZM1F1YTJWNWN5aEJkbUZwYkdGaWJHVk5aWFJ5YVdOektUdGNiaUFnZlZ4dWZWeHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlRTTkUgPSB2b2lkIDA7XG52YXIgdHNuZV8xID0gcmVxdWlyZShcIi4vdHNuZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRTTkVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRzbmVfMS5UU05FOyB9IH0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlRTTkUgPSB2b2lkIDA7XG5jbGFzcyBUU05FIHtcbiAgICBjb25zdHJ1Y3RvcihvcHQpIHtcbiAgICAgICAgLy8gcmV0dXJuIDAgbWVhbiB1bml0IHN0YW5kYXJkIGRldmlhdGlvbiByYW5kb20gbnVtYmVyXG4gICAgICAgIHRoaXMucmV0dXJuViA9IGZhbHNlO1xuICAgICAgICB0aGlzLnZWYWx1ZSA9IDAuMDtcbiAgICAgICAgdGhpcy5pdGVyID0gMDtcbiAgICAgICAgb3B0ID0gb3B0IHx8IHt9O1xuICAgICAgICB0aGlzLnBlcnBsZXhpdHkgPSB0aGlzLmdldG9wdChvcHQsICdwZXJwbGV4aXR5JywgMzApOyAvLyBlZmZlY3RpdmUgbnVtYmVyIG9mIG5lYXJlc3QgbmVpZ2hib3JzXG4gICAgICAgIHRoaXMuZGltID0gdGhpcy5nZXRvcHQob3B0LCAnZGltJywgMik7IC8vIGJ5IGRlZmF1bHQgMi1EIHRTTkVcbiAgICAgICAgdGhpcy5lcHNpbG9uID0gdGhpcy5nZXRvcHQob3B0LCAnZXBzaWxvbicsIDEwKTsgLy8gbGVhcm5pbmcgcmF0ZVxuICAgIH1cbiAgICBhc3NlcnQoY29uZGl0aW9uLCBtZXNzYWdlKSB7XG4gICAgICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBtZXNzYWdlIHx8ICdBc3NlcnRpb24gZmFpbGVkJztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzeW50YXggc3VnYXJcbiAgICBnZXRvcHQob3B0LCBmaWVsZCwgZGVmYXVsdHZhbCkge1xuICAgICAgICBpZiAob3B0Lmhhc093blByb3BlcnR5KGZpZWxkKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdFtmaWVsZF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdHZhbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnYXVzc1JhbmRvbSgpIHtcbiAgICAgICAgaWYgKHRoaXMucmV0dXJuVikge1xuICAgICAgICAgICAgdGhpcy5yZXR1cm5WID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdSA9IDIgKiBNYXRoLnJhbmRvbSgpIC0gMTtcbiAgICAgICAgY29uc3QgdiA9IDIgKiBNYXRoLnJhbmRvbSgpIC0gMTtcbiAgICAgICAgY29uc3QgciA9IHUgKiB1ICsgdiAqIHY7XG4gICAgICAgIGlmIChyID09PSAwIHx8IHIgPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nYXVzc1JhbmRvbSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGMgPSBNYXRoLnNxcnQoLTIgKiBNYXRoLmxvZyhyKSAvIHIpO1xuICAgICAgICB0aGlzLnZWYWx1ZSA9IHYgKiBjOyAvLyBjYWNoZSB0aGlzIGZvciBuZXh0IGZ1bmN0aW9uIGNhbGwgZm9yIGVmZmljaWVuY3lcbiAgICAgICAgdGhpcy5yZXR1cm5WID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHUgKiBjO1xuICAgIH1cbiAgICAvLyByZXR1cm4gcmFuZG9tIG5vcm1hbCBudW1iZXJcbiAgICByYW5kbihtdSwgc3RkKSB7IHJldHVybiBtdSArIHRoaXMuZ2F1c3NSYW5kb20oKSAqIHN0ZDsgfVxuICAgIC8vIHV0aWxpdGl0eSB0aGF0IGNyZWF0ZXMgY29udGlndW91cyB2ZWN0b3Igb2YgemVyb3Mgb2Ygc2l6ZSBuXG4gICAgemVyb3Mobikge1xuICAgICAgICBpZiAodHlwZW9mIChuKSA9PT0gJ3VuZGVmaW5lZCcgfHwgaXNOYU4obikpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgLy8gbGFja2luZyBicm93c2VyIHN1cHBvcnRcbiAgICAgICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShuKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYXJyW2ldID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcnI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0NjRBcnJheShuKTsgLy8gdHlwZWQgYXJyYXlzIGFyZSBmYXN0ZXJcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyB1dGlsaXR5IHRoYXQgcmV0dXJucyAyZCBhcnJheSBmaWxsZWQgd2l0aCByYW5kb20gbnVtYmVyc1xuICAgIC8vIG9yIHdpdGggdmFsdWUgcywgaWYgcHJvdmlkZWRcbiAgICByYW5kbjJkKG4sIGQsIHMpIHtcbiAgICAgICAgY29uc3QgdXNlcyA9IHR5cGVvZiBzICE9PSAndW5kZWZpbmVkJztcbiAgICAgICAgY29uc3QgeCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgY29uc3QgeGhlcmUgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZDsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgeGhlcmUucHVzaChzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHhoZXJlLnB1c2godGhpcy5yYW5kbigwLjAsIDFlLTQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4LnB1c2goeGhlcmUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgICAvLyBjb21wdXRlIEwyIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlY3RvcnNcbiAgICBMMih4MSwgeDIpIHtcbiAgICAgICAgY29uc3QgRCA9IHgxLmxlbmd0aDtcbiAgICAgICAgbGV0IGQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IEQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgeDFpID0geDFbaV07XG4gICAgICAgICAgICBjb25zdCB4MmkgPSB4MltpXTtcbiAgICAgICAgICAgIGQgKz0gKHgxaSAtIHgyaSkgKiAoeDFpIC0geDJpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZDtcbiAgICB9XG4gICAgLy8gY29tcHV0ZSBwYWlyd2lzZSBkaXN0YW5jZSBpbiBhbGwgdmVjdG9ycyBpbiBYXG4gICAgeHRvZChYKSB7XG4gICAgICAgIGNvbnN0IE4gPSBYLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZGlzdCA9IHRoaXMuemVyb3MoTiAqIE4pOyAvLyBhbGxvY2F0ZSBjb250aWd1b3VzIGFycmF5XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBOOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkID0gdGhpcy5MMihYW2ldLCBYW2pdKTtcbiAgICAgICAgICAgICAgICBkaXN0W2kgKiBOICsgal0gPSBkO1xuICAgICAgICAgICAgICAgIGRpc3RbaiAqIE4gKyBpXSA9IGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpc3Q7XG4gICAgfVxuICAgIC8vIGNvbXB1dGUgKHBfe2l8an0gKyBwX3tqfGl9KS8oMm4pXG4gICAgZDJwKEQsIHBlcnBsZXhpdHksIHRvbCkge1xuICAgICAgICBjb25zdCBuZiA9IE1hdGguc3FydChELmxlbmd0aCk7IC8vIHRoaXMgYmV0dGVyIGJlIGFuIGludGVnZXJcbiAgICAgICAgY29uc3QgbiA9IE1hdGguZmxvb3IobmYpO1xuICAgICAgICB0aGlzLmFzc2VydChuID09PSBuZiwgJ0Qgc2hvdWxkIGhhdmUgc3F1YXJlIG51bWJlciBvZiBlbGVtZW50cy4nKTtcbiAgICAgICAgY29uc3QgaFRhcmdldCA9IE1hdGgubG9nKHBlcnBsZXhpdHkpOyAvLyB0YXJnZXQgZW50cm9weSBvZiBkaXN0cmlidXRpb25cbiAgICAgICAgY29uc3QgUCA9IHRoaXMuemVyb3MobiAqIG4pOyAvLyB0ZW1wb3JhcnkgcHJvYmFiaWxpdHkgbWF0cml4XG4gICAgICAgIGNvbnN0IHByb3cgPSB0aGlzLnplcm9zKG4pOyAvLyBhIHRlbXBvcmFyeSBzdG9yYWdlIGNvbXBhcnRtZW50XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgYmV0YW1pbiA9IC1JbmZpbml0eTtcbiAgICAgICAgICAgIGxldCBiZXRhbWF4ID0gSW5maW5pdHk7XG4gICAgICAgICAgICBsZXQgYmV0YSA9IDE7IC8vIGluaXRpYWwgdmFsdWUgb2YgcHJlY2lzaW9uXG4gICAgICAgICAgICBsZXQgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgbWF4dHJpZXMgPSA1MDtcbiAgICAgICAgICAgIC8vIHBlcmZvcm0gYmluYXJ5IHNlYXJjaCB0byBmaW5kIGEgc3VpdGFibGUgcHJlY2lzaW9uIGJldGFcbiAgICAgICAgICAgIC8vIHNvIHRoYXQgdGhlIGVudHJvcHkgb2YgdGhlIGRpc3RyaWJ1dGlvbiBpcyBhcHByb3ByaWF0ZVxuICAgICAgICAgICAgbGV0IG51bSA9IDA7XG4gICAgICAgICAgICB3aGlsZSAoIWRvbmUpIHtcbiAgICAgICAgICAgICAgICAvL2RlYnVnZ2VyO1xuICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgZW50cm9weSBhbmQga2VybmVsIHJvdyB3aXRoIGJldGEgcHJlY2lzaW9uXG4gICAgICAgICAgICAgICAgbGV0IHBzdW0gPSAwLjA7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBqID0gTWF0aC5leHAoLURbaSAqIG4gKyBqXSAqIGJldGEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGogPSAwO1xuICAgICAgICAgICAgICAgICAgICB9IC8vIHdlIGRvbnQgY2FyZSBhYm91dCBkaWFnb25hbHNcbiAgICAgICAgICAgICAgICAgICAgcHJvd1tqXSA9IHBqO1xuICAgICAgICAgICAgICAgICAgICBwc3VtICs9IHBqO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBub3JtYWxpemUgcCBhbmQgY29tcHV0ZSBlbnRyb3B5XG4gICAgICAgICAgICAgICAgbGV0IG5IZXJlID0gMC4wO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwajtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBzdW0gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBqID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBqID0gcHJvd1tqXSAvIHBzdW07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcHJvd1tqXSA9IHBqO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGogPiAxZS03KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuSGVyZSAtPSBwaiAqIE1hdGgubG9nKHBqKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBhZGp1c3QgYmV0YSBiYXNlZCBvbiByZXN1bHRcbiAgICAgICAgICAgICAgICBpZiAobkhlcmUgPiBoVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVudHJvcHkgd2FzIHRvbyBoaWdoIChkaXN0cmlidXRpb24gdG9vIGRpZmZ1c2UpXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gaW5jcmVhc2UgdGhlIHByZWNpc2lvbiBmb3IgbW9yZSBwZWFreSBkaXN0cmlidXRpb25cbiAgICAgICAgICAgICAgICAgICAgYmV0YW1pbiA9IGJldGE7IC8vIG1vdmUgdXAgdGhlIGJvdW5kc1xuICAgICAgICAgICAgICAgICAgICBpZiAoYmV0YW1heCA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJldGEgPSBiZXRhICogMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJldGEgPSAoYmV0YSArIGJldGFtYXgpIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29udmVyc2UgY2FzZS4gbWFrZSBkaXN0cnVidGlvbiBsZXNzIHBlYWt5XG4gICAgICAgICAgICAgICAgICAgIGJldGFtYXggPSBiZXRhO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYmV0YW1pbiA9PT0gLUluZmluaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZXRhID0gYmV0YSAvIDI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZXRhID0gKGJldGEgKyBiZXRhbWluKSAvIDI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gc3RvcHBpbmcgY29uZGl0aW9uczogdG9vIG1hbnkgdHJpZXMgb3IgZ290IGEgZ29vZCBwcmVjaXNpb25cbiAgICAgICAgICAgICAgICBudW0rKztcbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMobkhlcmUgLSBoVGFyZ2V0KSA8IHRvbCkge1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG51bSA+PSBtYXh0cmllcykge1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnZGF0YSBwb2ludCAnICsgaSArICcgZ2V0cyBwcmVjaXNpb24gJyArIGJldGEgKyAnIGFmdGVyICcgKyBudW0gKyAnIGJpbmFyeSBzZWFyY2ggc3RlcHMuJyk7XG4gICAgICAgICAgICAvLyBjb3B5IG92ZXIgdGhlIGZpbmFsIHByb3cgdG8gUCBhdCByb3cgaVxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICAgICAgICBQW2kgKiBuICsgal0gPSBwcm93W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IC8vIGVuZCBsb29wIG92ZXIgZXhhbXBsZXMgaVxuICAgICAgICAvLyBzeW1tZXRyaXplIFAgYW5kIG5vcm1hbGl6ZSBpdCB0byBzdW0gdG8gMSBvdmVyIGFsbCBpalxuICAgICAgICBjb25zdCBwT3V0ID0gdGhpcy56ZXJvcyhuICogbik7XG4gICAgICAgIGNvbnN0IE4yID0gbiAqIDI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICAgICAgICAgIHBPdXRbaSAqIG4gKyBqXSA9IE1hdGgubWF4KChQW2kgKiBuICsgal0gKyBQW2ogKiBuICsgaV0pIC8gTjIsIDFlLTEwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBPdXQ7XG4gICAgfVxuICAgIC8vIGhlbHBlciBmdW5jdGlvblxuICAgIHNpZ24oeCkgeyByZXR1cm4geCA+IDAgPyAxIDogeCA8IDAgPyAtMSA6IDA7IH1cbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRha2VzIGEgc2V0IG9mIGhpZ2gtZGltZW5zaW9uYWwgcG9pbnRzXG4gICAgLy8gYW5kIGNyZWF0ZXMgbWF0cml4IFAgZnJvbSB0aGVtIHVzaW5nIGdhdXNzaWFuIGtlcm5lbFxuICAgIGluaXREYXRhUmF3KFgpIHtcbiAgICAgICAgY29uc3QgTiA9IFgubGVuZ3RoO1xuICAgICAgICBjb25zdCBEID0gWFswXS5sZW5ndGg7XG4gICAgICAgIHRoaXMuYXNzZXJ0KE4gPiAwLCAnIFggaXMgZW1wdHk/IFlvdSBtdXN0IGhhdmUgc29tZSBkYXRhIScpO1xuICAgICAgICB0aGlzLmFzc2VydChEID4gMCwgJyBYWzBdIGlzIGVtcHR5PyBXaGVyZSBpcyB0aGUgZGF0YT8nKTtcbiAgICAgICAgY29uc3QgZGlzdHMgPSB0aGlzLnh0b2QoWCk7IC8vIGNvbnZlcnQgWCB0byBkaXN0YW5jZXMgdXNpbmcgZ2F1c3NpYW4ga2VybmVsXG4gICAgICAgIHRoaXMuUCA9IHRoaXMuZDJwKGRpc3RzLCB0aGlzLnBlcnBsZXhpdHksIDFlLTQpOyAvLyBhdHRhY2ggdG8gb2JqZWN0XG4gICAgICAgIHRoaXMuTiA9IE47IC8vIGJhY2sgdXAgdGhlIHNpemUgb2YgdGhlIGRhdGFzZXRcbiAgICAgICAgdGhpcy5pbml0U29sdXRpb24oKTsgLy8gcmVmcmVzaCB0aGlzXG4gICAgfVxuICAgIC8vIHRoaXMgZnVuY3Rpb24gdGFrZXMgYSBnaXZlbiBkaXN0YW5jZSBtYXRyaXggYW5kIGNyZWF0ZXNcbiAgICAvLyBtYXRyaXggUCBmcm9tIHRoZW0uXG4gICAgLy8gRCBpcyBhc3N1bWVkIHRvIGJlIHByb3ZpZGVkIGFzIGEgbGlzdCBvZiBsaXN0cywgYW5kIHNob3VsZCBiZSBzeW1tZXRyaWNcbiAgICBpbml0RGF0YURpc3QoRCkge1xuICAgICAgICBjb25zdCBOID0gRC5sZW5ndGg7XG4gICAgICAgIHRoaXMuYXNzZXJ0KE4gPiAwLCAnIFggaXMgZW1wdHk/IFlvdSBtdXN0IGhhdmUgc29tZSBkYXRhIScpO1xuICAgICAgICAvLyBjb252ZXJ0IEQgdG8gYSAoZmFzdCkgdHlwZWQgYXJyYXkgdmVyc2lvblxuICAgICAgICBjb25zdCBkaXN0cyA9IHRoaXMuemVyb3MoTiAqIE4pOyAvLyBhbGxvY2F0ZSBjb250aWd1b3VzIGFycmF5XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBOOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkID0gRFtpXVtqXTtcbiAgICAgICAgICAgICAgICBkaXN0c1tpICogTiArIGpdID0gZDtcbiAgICAgICAgICAgICAgICBkaXN0c1tqICogTiArIGldID0gZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLlAgPSB0aGlzLmQycChkaXN0cywgdGhpcy5wZXJwbGV4aXR5LCAxZS00KTtcbiAgICAgICAgdGhpcy5OID0gTjtcbiAgICAgICAgdGhpcy5pbml0U29sdXRpb24oKTsgLy8gcmVmcmVzaCB0aGlzXG4gICAgfVxuICAgIC8vIChyZSlpbml0aWFsaXplcyB0aGUgc29sdXRpb24gdG8gcmFuZG9tXG4gICAgaW5pdFNvbHV0aW9uKCkge1xuICAgICAgICAvLyBnZW5lcmF0ZSByYW5kb20gc29sdXRpb24gdG8gdC1TTkVcbiAgICAgICAgdGhpcy5ZID0gdGhpcy5yYW5kbjJkKHRoaXMuTiwgdGhpcy5kaW0pOyAvLyB0aGUgc29sdXRpb25cbiAgICAgICAgdGhpcy5nYWlucyA9IHRoaXMucmFuZG4yZCh0aGlzLk4sIHRoaXMuZGltLCAxLjApOyAvLyBzdGVwIGdhaW5zIHRvIGFjY2VsZXJhdGUgcHJvZ3Jlc3MgaW4gdW5jaGFuZ2luZyBkaXJlY3Rpb25zXG4gICAgICAgIHRoaXMueXN0ZXAgPSB0aGlzLnJhbmRuMmQodGhpcy5OLCB0aGlzLmRpbSwgMC4wKTsgLy8gbW9tZW50dW0gYWNjdW11bGF0b3JcbiAgICAgICAgdGhpcy5pdGVyID0gMDtcbiAgICB9XG4gICAgLy8gcmV0dXJuIHBvaW50ZXIgdG8gY3VycmVudCBzb2x1dGlvblxuICAgIGdldFNvbHV0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ZO1xuICAgIH1cbiAgICAvLyBwZXJmb3JtIGEgc2luZ2xlIHN0ZXAgb2Ygb3B0aW1pemF0aW9uIHRvIGltcHJvdmUgdGhlIGVtYmVkZGluZ1xuICAgIHN0ZXAoKSB7XG4gICAgICAgIHRoaXMuaXRlciArPSAxO1xuICAgICAgICBjb25zdCBOID0gdGhpcy5OO1xuICAgICAgICBjb25zdCBjZyA9IHRoaXMuY29zdEdyYWQodGhpcy5ZKTsgLy8gZXZhbHVhdGUgZ3JhZGllbnRcbiAgICAgICAgY29uc3QgY29zdCA9IGNnLmNvc3Q7XG4gICAgICAgIGNvbnN0IGdyYWQgPSBjZy5ncmFkO1xuICAgICAgICAvLyBwZXJmb3JtIGdyYWRpZW50IHN0ZXBcbiAgICAgICAgY29uc3QgeW1lYW4gPSB0aGlzLnplcm9zKHRoaXMuZGltKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGQgPSAwOyBkIDwgdGhpcy5kaW07IGQrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdpZCA9IGdyYWRbaV1bZF07XG4gICAgICAgICAgICAgICAgY29uc3Qgc2lkID0gdGhpcy55c3RlcFtpXVtkXTtcbiAgICAgICAgICAgICAgICBjb25zdCBnYWluaWQgPSB0aGlzLmdhaW5zW2ldW2RdO1xuICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgZ2FpbiB1cGRhdGVcbiAgICAgICAgICAgICAgICBsZXQgbmV3Z2FpbiA9IHRoaXMuc2lnbihnaWQpID09PSB0aGlzLnNpZ24oc2lkKSA/IGdhaW5pZCAqIDAuOCA6IGdhaW5pZCArIDAuMjtcbiAgICAgICAgICAgICAgICBpZiAobmV3Z2FpbiA8IDAuMDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3Z2FpbiA9IDAuMDE7XG4gICAgICAgICAgICAgICAgfSAvLyBjbGFtcFxuICAgICAgICAgICAgICAgIHRoaXMuZ2FpbnNbaV1bZF0gPSBuZXdnYWluOyAvLyBzdG9yZSBmb3IgbmV4dCB0dXJuXG4gICAgICAgICAgICAgICAgLy8gY29tcHV0ZSBtb21lbnR1bSBzdGVwIGRpcmVjdGlvblxuICAgICAgICAgICAgICAgIGNvbnN0IG1vbXZhbCA9IHRoaXMuaXRlciA8IDI1MCA/IDAuNSA6IDAuODtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdzaWQgPSBtb212YWwgKiBzaWQgLSB0aGlzLmVwc2lsb24gKiBuZXdnYWluICogZ3JhZFtpXVtkXTtcbiAgICAgICAgICAgICAgICB0aGlzLnlzdGVwW2ldW2RdID0gbmV3c2lkOyAvLyByZW1lbWJlciB0aGUgc3RlcCB3ZSB0b29rXG4gICAgICAgICAgICAgICAgLy8gc3RlcCFcbiAgICAgICAgICAgICAgICB0aGlzLllbaV1bZF0gKz0gbmV3c2lkO1xuICAgICAgICAgICAgICAgIHltZWFuW2RdICs9IHRoaXMuWVtpXVtkXTsgLy8gYWNjdW11bGF0ZSBtZWFuIHNvIHRoYXQgd2UgY2FuIGNlbnRlciBsYXRlclxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHJlcHJvamVjdCBZIHRvIGJlIHplcm8gbWVhblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgZCA9IDA7IGQgPCB0aGlzLmRpbTsgZCsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ZW2ldW2RdIC09IHltZWFuW2RdIC8gTjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL2lmKHRoaXMuaXRlciUxMDA9PT0wKSBjb25zb2xlLmxvZygnaXRlciAnICsgdGhpcy5pdGVyICsgJywgY29zdDogJyArIGNvc3QpO1xuICAgICAgICByZXR1cm4gY29zdDsgLy8gcmV0dXJuIGN1cnJlbnQgY29zdFxuICAgIH1cbiAgICAvLyBmb3IgZGVidWdnaW5nOiBncmFkaWVudCBjaGVja1xuICAgIGRlYnVnR3JhZCgpIHtcbiAgICAgICAgY29uc3QgTiA9IHRoaXMuTjtcbiAgICAgICAgY29uc3QgY2cgPSB0aGlzLmNvc3RHcmFkKHRoaXMuWSk7IC8vIGV2YWx1YXRlIGdyYWRpZW50XG4gICAgICAgIGNvbnN0IGNvc3QgPSBjZy5jb3N0O1xuICAgICAgICBjb25zdCBncmFkID0gY2cuZ3JhZDtcbiAgICAgICAgY29uc3QgZSA9IDFlLTU7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBkID0gMDsgZCA8IHRoaXMuZGltOyBkKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCB5b2xkID0gdGhpcy5ZW2ldW2RdO1xuICAgICAgICAgICAgICAgIHRoaXMuWVtpXVtkXSA9IHlvbGQgKyBlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNnMCA9IHRoaXMuY29zdEdyYWQodGhpcy5ZKTtcbiAgICAgICAgICAgICAgICB0aGlzLllbaV1bZF0gPSB5b2xkIC0gZTtcbiAgICAgICAgICAgICAgICBjb25zdCBjZzEgPSB0aGlzLmNvc3RHcmFkKHRoaXMuWSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYW5hbHl0aWMgPSBncmFkW2ldW2RdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bWVyaWNhbCA9IChjZzAuY29zdCAtIGNnMS5jb3N0KSAvICgyICogZSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coaSArICcsJyArIGQgKyAnOiBncmFkY2hlY2sgYW5hbHl0aWM6ICcgKyBhbmFseXRpYyArICcgdnMuIG51bWVyaWNhbDogJyArIG51bWVyaWNhbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ZW2ldW2RdID0geW9sZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyByZXR1cm4gY29zdCBhbmQgZ3JhZGllbnQsIGdpdmVuIGFuIGFycmFuZ2VtZW50XG4gICAgY29zdEdyYWQoWSkge1xuICAgICAgICBjb25zdCBOID0gdGhpcy5OO1xuICAgICAgICBjb25zdCBkaW0gPSB0aGlzLmRpbTsgLy8gZGltIG9mIG91dHB1dCBzcGFjZVxuICAgICAgICBjb25zdCBQID0gdGhpcy5QO1xuICAgICAgICBjb25zdCBwbXVsID0gdGhpcy5pdGVyIDwgMTAwID8gNCA6IDE7IC8vIHRyaWNrIHRoYXQgaGVscHMgd2l0aCBsb2NhbCBvcHRpbWFcbiAgICAgICAgLy8gY29tcHV0ZSBjdXJyZW50IFEgZGlzdHJpYnV0aW9uLCB1bm5vcm1hbGl6ZWQgZmlyc3RcbiAgICAgICAgY29uc3QgcXVBcnIgPSB0aGlzLnplcm9zKE4gKiBOKTtcbiAgICAgICAgbGV0IHFzdW0gPSAwLjA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBOOyBqKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgZHN1bSA9IDAuMDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBkID0gMDsgZCA8IGRpbTsgZCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRoZXJlID0gWVtpXVtkXSAtIFlbal1bZF07XG4gICAgICAgICAgICAgICAgICAgIGRzdW0gKz0gZGhlcmUgKiBkaGVyZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcXUgPSAxLjAgLyAoMS4wICsgZHN1bSk7IC8vIFN0dWRlbnQgdC1kaXN0cmlidXRpb25cbiAgICAgICAgICAgICAgICBxdUFycltpICogTiArIGpdID0gcXU7XG4gICAgICAgICAgICAgICAgcXVBcnJbaiAqIE4gKyBpXSA9IHF1O1xuICAgICAgICAgICAgICAgIHFzdW0gKz0gMiAqIHF1O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG5vcm1hbGl6ZSBRIGRpc3RyaWJ1dGlvbiB0byBzdW0gdG8gMVxuICAgICAgICBjb25zdCBOTiA9IE4gKiBOO1xuICAgICAgICBjb25zdCBRID0gdGhpcy56ZXJvcyhOTik7XG4gICAgICAgIGZvciAobGV0IHEgPSAwOyBxIDwgTk47IHErKykge1xuICAgICAgICAgICAgUVtxXSA9IE1hdGgubWF4KHF1QXJyW3FdIC8gcXN1bSwgMWUtMTAwKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY29zdCA9IDAuMDtcbiAgICAgICAgY29uc3QgZ3JhZCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZ3N1bSA9IG5ldyBBcnJheShkaW0pOyAvLyBpbml0IGdyYWQgZm9yIHBvaW50IGlcbiAgICAgICAgICAgIGZvciAobGV0IGQgPSAwOyBkIDwgZGltOyBkKyspIHtcbiAgICAgICAgICAgICAgICBnc3VtW2RdID0gMC4wO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBOOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb3N0ICs9IC1QW2kgKiBOICsgal0gKiBNYXRoLmxvZyhRW2kgKiBOICsgal0pOyAvLyBhY2N1bXVsYXRlIGNvc3QgKHRoZSBub24tY29uc3RhbnQgcG9ydGlvbiBhdCBsZWFzdC4uLilcbiAgICAgICAgICAgICAgICBjb25zdCBwcmVtdWx0ID0gNCAqIChwbXVsICogUFtpICogTiArIGpdIC0gUVtpICogTiArIGpdKSAqIHF1QXJyW2kgKiBOICsgal07XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZCA9IDA7IGQgPCBkaW07IGQrKykge1xuICAgICAgICAgICAgICAgICAgICBnc3VtW2RdICs9IHByZW11bHQgKiAoWVtpXVtkXSAtIFlbal1bZF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdyYWQucHVzaChnc3VtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBjb3N0LCBncmFkIH07XG4gICAgfVxufVxuZXhwb3J0cy5UU05FID0gVFNORTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgcGVxID0gbmV3IFVpbnQzMkFycmF5KDB4MTAwMDApO1xuY29uc3QgbXllcnNfMzIgPSAoYSwgYikgPT4ge1xuICBjb25zdCBuID0gYS5sZW5ndGg7XG4gIGNvbnN0IG0gPSBiLmxlbmd0aDtcbiAgY29uc3QgbHN0ID0gMSA8PCAobiAtIDEpO1xuICBsZXQgcHYgPSAtMTtcbiAgbGV0IG12ID0gMDtcbiAgbGV0IHNjID0gbjtcbiAgbGV0IGkgPSBuO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgcGVxW2EuY2hhckNvZGVBdChpKV0gfD0gMSA8PCBpO1xuICB9XG4gIGZvciAoaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICBsZXQgZXEgPSBwZXFbYi5jaGFyQ29kZUF0KGkpXTtcbiAgICBjb25zdCB4diA9IGVxIHwgbXY7XG4gICAgZXEgfD0gKChlcSAmIHB2KSArIHB2KSBeIHB2O1xuICAgIG12IHw9IH4oZXEgfCBwdik7XG4gICAgcHYgJj0gZXE7XG4gICAgaWYgKG12ICYgbHN0KSB7XG4gICAgICBzYysrO1xuICAgIH1cbiAgICBpZiAocHYgJiBsc3QpIHtcbiAgICAgIHNjLS07XG4gICAgfVxuICAgIG12ID0gKG12IDw8IDEpIHwgMTtcbiAgICBwdiA9IChwdiA8PCAxKSB8IH4oeHYgfCBtdik7XG4gICAgbXYgJj0geHY7XG4gIH1cbiAgaSA9IG47XG4gIHdoaWxlIChpLS0pIHtcbiAgICBwZXFbYS5jaGFyQ29kZUF0KGkpXSA9IDA7XG4gIH1cbiAgcmV0dXJuIHNjO1xufTtcblxuY29uc3QgbXllcnNfeCA9IChhLCBiKSA9PiB7XG4gIGNvbnN0IG4gPSBhLmxlbmd0aDtcbiAgY29uc3QgbSA9IGIubGVuZ3RoO1xuICBjb25zdCBtaGMgPSBbXTtcbiAgY29uc3QgcGhjID0gW107XG4gIGNvbnN0IGhzaXplID0gTWF0aC5jZWlsKG4gLyAzMik7XG4gIGNvbnN0IHZzaXplID0gTWF0aC5jZWlsKG0gLyAzMik7XG4gIGxldCBzY29yZSA9IG07XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaHNpemU7IGkrKykge1xuICAgIHBoY1tpXSA9IC0xO1xuICAgIG1oY1tpXSA9IDA7XG4gIH1cbiAgbGV0IGogPSAwO1xuICBmb3IgKDsgaiA8IHZzaXplIC0gMTsgaisrKSB7XG4gICAgbGV0IG12ID0gMDtcbiAgICBsZXQgcHYgPSAtMTtcbiAgICBjb25zdCBzdGFydCA9IGogKiAzMjtcbiAgICBjb25zdCBlbmQgPSBNYXRoLm1pbigzMiwgbSkgKyBzdGFydDtcbiAgICBmb3IgKGxldCBrID0gc3RhcnQ7IGsgPCBlbmQ7IGsrKykge1xuICAgICAgcGVxW2IuY2hhckNvZGVBdChrKV0gfD0gMSA8PCBrO1xuICAgIH1cbiAgICBzY29yZSA9IG07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIGNvbnN0IGVxID0gcGVxW2EuY2hhckNvZGVBdChpKV07XG4gICAgICBjb25zdCBwYiA9IChwaGNbKGkgLyAzMikgfCAwXSA+Pj4gaSkgJiAxO1xuICAgICAgY29uc3QgbWIgPSAobWhjWyhpIC8gMzIpIHwgMF0gPj4+IGkpICYgMTtcbiAgICAgIGNvbnN0IHh2ID0gZXEgfCBtdjtcbiAgICAgIGNvbnN0IHhoID0gKCgoKGVxIHwgbWIpICYgcHYpICsgcHYpIF4gcHYpIHwgZXEgfCBtYjtcbiAgICAgIGxldCBwaCA9IG12IHwgfih4aCB8IHB2KTtcbiAgICAgIGxldCBtaCA9IHB2ICYgeGg7XG4gICAgICBpZiAoKHBoID4+PiAzMSkgXiBwYikge1xuICAgICAgICBwaGNbKGkgLyAzMikgfCAwXSBePSAxIDw8IGk7XG4gICAgICB9XG4gICAgICBpZiAoKG1oID4+PiAzMSkgXiBtYikge1xuICAgICAgICBtaGNbKGkgLyAzMikgfCAwXSBePSAxIDw8IGk7XG4gICAgICB9XG4gICAgICBwaCA9IChwaCA8PCAxKSB8IHBiO1xuICAgICAgbWggPSAobWggPDwgMSkgfCBtYjtcbiAgICAgIHB2ID0gbWggfCB+KHh2IHwgcGgpO1xuICAgICAgbXYgPSBwaCAmIHh2O1xuICAgIH1cbiAgICBmb3IgKGxldCBrID0gc3RhcnQ7IGsgPCBlbmQ7IGsrKykge1xuICAgICAgcGVxW2IuY2hhckNvZGVBdChrKV0gPSAwO1xuICAgIH1cbiAgfVxuICBsZXQgbXYgPSAwO1xuICBsZXQgcHYgPSAtMTtcbiAgY29uc3Qgc3RhcnQgPSBqICogMzI7XG4gIGNvbnN0IGVuZCA9IE1hdGgubWluKDMyLCBtIC0gc3RhcnQpICsgc3RhcnQ7XG4gIGZvciAobGV0IGsgPSBzdGFydDsgayA8IGVuZDsgaysrKSB7XG4gICAgcGVxW2IuY2hhckNvZGVBdChrKV0gfD0gMSA8PCBrO1xuICB9XG4gIHNjb3JlID0gbTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICBjb25zdCBlcSA9IHBlcVthLmNoYXJDb2RlQXQoaSldO1xuICAgIGNvbnN0IHBiID0gKHBoY1soaSAvIDMyKSB8IDBdID4+PiBpKSAmIDE7XG4gICAgY29uc3QgbWIgPSAobWhjWyhpIC8gMzIpIHwgMF0gPj4+IGkpICYgMTtcbiAgICBjb25zdCB4diA9IGVxIHwgbXY7XG4gICAgY29uc3QgeGggPSAoKCgoZXEgfCBtYikgJiBwdikgKyBwdikgXiBwdikgfCBlcSB8IG1iO1xuICAgIGxldCBwaCA9IG12IHwgfih4aCB8IHB2KTtcbiAgICBsZXQgbWggPSBwdiAmIHhoO1xuICAgIHNjb3JlICs9IChwaCA+Pj4gKG0gLSAxKSkgJiAxO1xuICAgIHNjb3JlIC09IChtaCA+Pj4gKG0gLSAxKSkgJiAxO1xuICAgIGlmICgocGggPj4+IDMxKSBeIHBiKSB7XG4gICAgICBwaGNbKGkgLyAzMikgfCAwXSBePSAxIDw8IGk7XG4gICAgfVxuICAgIGlmICgobWggPj4+IDMxKSBeIG1iKSB7XG4gICAgICBtaGNbKGkgLyAzMikgfCAwXSBePSAxIDw8IGk7XG4gICAgfVxuICAgIHBoID0gKHBoIDw8IDEpIHwgcGI7XG4gICAgbWggPSAobWggPDwgMSkgfCBtYjtcbiAgICBwdiA9IG1oIHwgfih4diB8IHBoKTtcbiAgICBtdiA9IHBoICYgeHY7XG4gIH1cbiAgZm9yIChsZXQgayA9IHN0YXJ0OyBrIDwgZW5kOyBrKyspIHtcbiAgICBwZXFbYi5jaGFyQ29kZUF0KGspXSA9IDA7XG4gIH1cbiAgcmV0dXJuIHNjb3JlO1xufTtcblxuY29uc3QgZGlzdGFuY2UgPSAoYSwgYikgPT4ge1xuICBpZiAoYS5sZW5ndGggPiBiLmxlbmd0aCkge1xuICAgIGNvbnN0IHRtcCA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHRtcDtcbiAgfVxuICBpZiAoYS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYi5sZW5ndGg7XG4gIH1cbiAgaWYgKGEubGVuZ3RoIDw9IDMyKSB7XG4gICAgcmV0dXJuIG15ZXJzXzMyKGEsIGIpO1xuICB9XG4gIHJldHVybiBteWVyc194KGEsIGIpO1xufTtcblxuY29uc3QgY2xvc2VzdCA9IChzdHIsIGFycikgPT4ge1xuICBsZXQgbWluX2Rpc3RhbmNlID0gSW5maW5pdHk7XG4gIGxldCBtaW5faW5kZXggPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGRpc3QgPSBkaXN0YW5jZShzdHIsIGFycltpXSk7XG4gICAgaWYgKGRpc3QgPCBtaW5fZGlzdGFuY2UpIHtcbiAgICAgIG1pbl9kaXN0YW5jZSA9IGRpc3Q7XG4gICAgICBtaW5faW5kZXggPSBpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyW21pbl9pbmRleF07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY2xvc2VzdCwgZGlzdGFuY2Vcbn1cbiIsImNvbnN0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBbnlBcnJheShvYmplY3QpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqZWN0KS5lbmRzV2l0aCgnQXJyYXldJyk7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcbi8vIFJlZmVyZW5jZTogaHR0cHM6Ly93d3cuZ2Vla3Nmb3JnZWVrcy5vcmcvamFyby1hbmQtamFyby13aW5rbGVyLXNpbWlsYXJpdHkvXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmphcm9XaW5rbGVyID0gZXhwb3J0cy5qYXJvID0gdm9pZCAwO1xuLyoqXG4gKlxuICogQHBhcmFtIHN0cjEgU3RyaW5nIDEgZm9yIGNvbXBhcmVcbiAqIEBwYXJhbSBzdHIyIFN0cmluZyAyIGZvciBjb21wYXJlXG4gKiBAcGFyYW0gb3B0aW9ucyB0byBjb250cm9sIGNhc2Ugc2Vuc2l0aXZlIG9yIG5vdFxuICovXG5mdW5jdGlvbiBqYXJvKHN0cjEsIHN0cjIsIG9wdGlvbnMpIHtcbiAgICAvLyBFeGl0IGVhcmx5IGlmIGVpdGhlciBhcmUgZW1wdHkuXG4gICAgaWYgKHN0cjEubGVuZ3RoID09PSAwIHx8IHN0cjIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICAvLyBDb252ZXJ0IHRvIHVwcGVyIGlmIGNhc2Utc2Vuc2l0aXZlIGlzIGZhbHNlLlxuICAgIGlmIChvcHRpb25zICYmICFvcHRpb25zLmNhc2VTZW5zaXRpdmUpIHtcbiAgICAgICAgc3RyMSA9IHN0cjEudG9VcHBlckNhc2UoKTtcbiAgICAgICAgc3RyMiA9IHN0cjIudG9VcHBlckNhc2UoKTtcbiAgICB9XG4gICAgLy8gRXhhY3QgbWF0Y2hcbiAgICBpZiAoc3RyMSA9PT0gc3RyMikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgLy8gTnVtYmVyIG9mIG1hdGNoZXNcbiAgICB2YXIgbSA9IDA7XG4gICAgLy8gTGVuZ3RoIG9mIHR3byBTdHJpbmdzXG4gICAgdmFyIGxlbjEgPSBzdHIxLmxlbmd0aDtcbiAgICB2YXIgbGVuMiA9IHN0cjIubGVuZ3RoO1xuICAgIC8vIE1heGltdW0gZGlzdGFuY2VcbiAgICB2YXIgd2luZG93ID0gTWF0aC5mbG9vcihNYXRoLm1heChsZW4xLCBsZW4yKSAvIDIpIC0gMTtcbiAgICAvLyBIYXNoIGZvciBtYXRjaGVzXG4gICAgdmFyIHN0cjFIYXNoID0gbmV3IEFycmF5KGxlbjEpO1xuICAgIHZhciBzdHIySGFzaCA9IG5ldyBBcnJheShsZW4yKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjE7IGkrKykge1xuICAgICAgICBmb3IgKHZhciBqID0gTWF0aC5tYXgoMCwgaSAtIHdpbmRvdyk7IGogPD0gTWF0aC5taW4obGVuMiwgaSArIHdpbmRvdyArIDEpOyBqKyspIHtcbiAgICAgICAgICAgIGlmICghc3RyMUhhc2hbaV0gJiYgIXN0cjJIYXNoW2pdICYmIHN0cjFbaV0gPT09IHN0cjJbal0pIHtcbiAgICAgICAgICAgICAgICArK207XG4gICAgICAgICAgICAgICAgc3RyMUhhc2hbaV0gPSBzdHIySGFzaFtqXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gRXhpdCBlYXJseSBpZiBubyBtYXRjaGVzIHdlcmUgZm91bmQuXG4gICAgaWYgKG0gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIC8vIENvdW50IHRoZSB0cmFuc3Bvc2l0aW9ucy5cbiAgICB2YXIgdCA9IDA7XG4gICAgdmFyIHBvaW50ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjE7IGkrKykge1xuICAgICAgICBpZiAoc3RyMUhhc2hbaV0pIHtcbiAgICAgICAgICAgIHdoaWxlICghc3RyMkhhc2hbcG9pbnRdKSB7XG4gICAgICAgICAgICAgICAgcG9pbnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHIxLmNoYXJBdChpKSAhPT0gc3RyMi5jaGFyQXQocG9pbnQrKykpIHtcbiAgICAgICAgICAgICAgICB0Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdCAvPSAyO1xuICAgIHJldHVybiAobSAvIGxlbjEgKyBtIC8gbGVuMiArIChtIC0gdCkgLyBtKSAvIDM7XG59XG5leHBvcnRzLmphcm8gPSBqYXJvO1xuLyoqXG4gKlxuICogQHBhcmFtIHN0cjEgU3RyaW5nIDEgZm9yIGNvbXBhcmVcbiAqIEBwYXJhbSBzdHIyIFN0cmluZyAyIGZvciBjb21wYXJlXG4gKiBAcGFyYW0gb3B0aW9ucyB0byBjb250cm9sIGNhc2Ugc2Vuc2l0aXZlIG9yIG5vdFxuICovXG5mdW5jdGlvbiBqYXJvV2lua2xlcihzdHIxLCBzdHIyLCBvcHRpb25zKSB7XG4gICAgLy8gSmFybyBEaXN0YW5jZVxuICAgIHZhciBqYXJvRGlzdCA9IGphcm8oc3RyMSwgc3RyMiwgb3B0aW9ucyk7XG4gICAgLy8gU2FtZSBwcmVmaXggbGVuZ3RoLCBtYXhpdW0gaXMgNFxuICAgIHZhciBwcmVmaXggPSAwO1xuICAgIGlmIChqYXJvRGlzdCA+IDAuNykge1xuICAgICAgICB2YXIgbWluSW5kZXggPSBNYXRoLm1pbihzdHIxLmxlbmd0aCwgc3RyMi5sZW5ndGgpO1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHdoaWxlIChzdHIxW2ldID09PSBzdHIyW2ldICYmIGkgPCA0ICYmIGkgPCBtaW5JbmRleCkge1xuICAgICAgICAgICAgKytwcmVmaXg7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgamFyb0Rpc3QgKz0gMC4xICogcHJlZml4ICogKDEgLSBqYXJvRGlzdCk7XG4gICAgfVxuICAgIHJldHVybiBqYXJvRGlzdDtcbn1cbmV4cG9ydHMuamFyb1dpbmtsZXIgPSBqYXJvV2lua2xlcjtcbiIsImltcG9ydCB7IGlzQW55QXJyYXkgfSBmcm9tICdpcy1hbnktYXJyYXknO1xuXG5mdW5jdGlvbiBtYXgoaW5wdXQpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gIGlmICghaXNBbnlBcnJheShpbnB1dCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnB1dCBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gIH1cblxuICBpZiAoaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW5wdXQgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyRmcm9tSW5kZXggPSBvcHRpb25zLmZyb21JbmRleCxcbiAgICAgIGZyb21JbmRleCA9IF9vcHRpb25zJGZyb21JbmRleCA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJGZyb21JbmRleCxcbiAgICAgIF9vcHRpb25zJHRvSW5kZXggPSBvcHRpb25zLnRvSW5kZXgsXG4gICAgICB0b0luZGV4ID0gX29wdGlvbnMkdG9JbmRleCA9PT0gdm9pZCAwID8gaW5wdXQubGVuZ3RoIDogX29wdGlvbnMkdG9JbmRleDtcblxuICBpZiAoZnJvbUluZGV4IDwgMCB8fCBmcm9tSW5kZXggPj0gaW5wdXQubGVuZ3RoIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGZyb21JbmRleCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2Zyb21JbmRleCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBzbWFsbGVyIHRoYW4gbGVuZ3RoJyk7XG4gIH1cblxuICBpZiAodG9JbmRleCA8PSBmcm9tSW5kZXggfHwgdG9JbmRleCA+IGlucHV0Lmxlbmd0aCB8fCAhTnVtYmVyLmlzSW50ZWdlcih0b0luZGV4KSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndG9JbmRleCBtdXN0IGJlIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIGZyb21JbmRleCBhbmQgYXQgbW9zdCBlcXVhbCB0byBsZW5ndGgnKTtcbiAgfVxuXG4gIHZhciBtYXhWYWx1ZSA9IGlucHV0W2Zyb21JbmRleF07XG5cbiAgZm9yICh2YXIgaSA9IGZyb21JbmRleCArIDE7IGkgPCB0b0luZGV4OyBpKyspIHtcbiAgICBpZiAoaW5wdXRbaV0gPiBtYXhWYWx1ZSkgbWF4VmFsdWUgPSBpbnB1dFtpXTtcbiAgfVxuXG4gIHJldHVybiBtYXhWYWx1ZTtcbn1cblxuZXhwb3J0IHsgbWF4IGFzIGRlZmF1bHQgfTtcbiIsImNvbnN0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbi8qKlxuICogQ2hlY2tzIGlmIGFuIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBhbiBBcnJheSAoYXJyYXkgb3IgdHlwZWQgYXJyYXkpLlxuICpcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZSAtIE9iamVjdCB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBvYmplY3QgaXMgYW4gYXJyYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FueUFycmF5KHZhbHVlKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsdWUpLmVuZHNXaXRoKCdBcnJheV0nKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IGlzQW55QXJyYXkgfSBmcm9tICdpcy1hbnktYXJyYXknO1xuXG5mdW5jdGlvbiBtaW4oaW5wdXQpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gIGlmICghaXNBbnlBcnJheShpbnB1dCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnB1dCBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gIH1cblxuICBpZiAoaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW5wdXQgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyRmcm9tSW5kZXggPSBvcHRpb25zLmZyb21JbmRleCxcbiAgICAgIGZyb21JbmRleCA9IF9vcHRpb25zJGZyb21JbmRleCA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJGZyb21JbmRleCxcbiAgICAgIF9vcHRpb25zJHRvSW5kZXggPSBvcHRpb25zLnRvSW5kZXgsXG4gICAgICB0b0luZGV4ID0gX29wdGlvbnMkdG9JbmRleCA9PT0gdm9pZCAwID8gaW5wdXQubGVuZ3RoIDogX29wdGlvbnMkdG9JbmRleDtcblxuICBpZiAoZnJvbUluZGV4IDwgMCB8fCBmcm9tSW5kZXggPj0gaW5wdXQubGVuZ3RoIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGZyb21JbmRleCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2Zyb21JbmRleCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBzbWFsbGVyIHRoYW4gbGVuZ3RoJyk7XG4gIH1cblxuICBpZiAodG9JbmRleCA8PSBmcm9tSW5kZXggfHwgdG9JbmRleCA+IGlucHV0Lmxlbmd0aCB8fCAhTnVtYmVyLmlzSW50ZWdlcih0b0luZGV4KSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndG9JbmRleCBtdXN0IGJlIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIGZyb21JbmRleCBhbmQgYXQgbW9zdCBlcXVhbCB0byBsZW5ndGgnKTtcbiAgfVxuXG4gIHZhciBtaW5WYWx1ZSA9IGlucHV0W2Zyb21JbmRleF07XG5cbiAgZm9yICh2YXIgaSA9IGZyb21JbmRleCArIDE7IGkgPCB0b0luZGV4OyBpKyspIHtcbiAgICBpZiAoaW5wdXRbaV0gPCBtaW5WYWx1ZSkgbWluVmFsdWUgPSBpbnB1dFtpXTtcbiAgfVxuXG4gIHJldHVybiBtaW5WYWx1ZTtcbn1cblxuZXhwb3J0IHsgbWluIGFzIGRlZmF1bHQgfTtcbiIsImNvbnN0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbi8qKlxuICogQ2hlY2tzIGlmIGFuIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBhbiBBcnJheSAoYXJyYXkgb3IgdHlwZWQgYXJyYXkpLlxuICpcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZSAtIE9iamVjdCB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBvYmplY3QgaXMgYW4gYXJyYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FueUFycmF5KHZhbHVlKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsdWUpLmVuZHNXaXRoKCdBcnJheV0nKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IGlzQW55QXJyYXkgfSBmcm9tICdpcy1hbnktYXJyYXknO1xuaW1wb3J0IG1heCBmcm9tICdtbC1hcnJheS1tYXgnO1xuaW1wb3J0IG1pbiBmcm9tICdtbC1hcnJheS1taW4nO1xuXG5mdW5jdGlvbiByZXNjYWxlKGlucHV0KSB7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICBpZiAoIWlzQW55QXJyYXkoaW5wdXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW5wdXQgbXVzdCBiZSBhbiBhcnJheScpO1xuICB9IGVsc2UgaWYgKGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2lucHV0IG11c3Qgbm90IGJlIGVtcHR5Jyk7XG4gIH1cblxuICB2YXIgb3V0cHV0O1xuXG4gIGlmIChvcHRpb25zLm91dHB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFpc0FueUFycmF5KG9wdGlvbnMub3V0cHV0KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3V0cHV0IG9wdGlvbiBtdXN0IGJlIGFuIGFycmF5IGlmIHNwZWNpZmllZCcpO1xuICAgIH1cblxuICAgIG91dHB1dCA9IG9wdGlvbnMub3V0cHV0O1xuICB9IGVsc2Uge1xuICAgIG91dHB1dCA9IG5ldyBBcnJheShpbnB1dC5sZW5ndGgpO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRNaW4gPSBtaW4oaW5wdXQpO1xuICB2YXIgY3VycmVudE1heCA9IG1heChpbnB1dCk7XG5cbiAgaWYgKGN1cnJlbnRNaW4gPT09IGN1cnJlbnRNYXgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluaW11bSBhbmQgbWF4aW11bSBpbnB1dCB2YWx1ZXMgYXJlIGVxdWFsLiBDYW5ub3QgcmVzY2FsZSBhIGNvbnN0YW50IGFycmF5Jyk7XG4gIH1cblxuICB2YXIgX29wdGlvbnMkbWluID0gb3B0aW9ucy5taW4sXG4gICAgICBtaW5WYWx1ZSA9IF9vcHRpb25zJG1pbiA9PT0gdm9pZCAwID8gb3B0aW9ucy5hdXRvTWluTWF4ID8gY3VycmVudE1pbiA6IDAgOiBfb3B0aW9ucyRtaW4sXG4gICAgICBfb3B0aW9ucyRtYXggPSBvcHRpb25zLm1heCxcbiAgICAgIG1heFZhbHVlID0gX29wdGlvbnMkbWF4ID09PSB2b2lkIDAgPyBvcHRpb25zLmF1dG9NaW5NYXggPyBjdXJyZW50TWF4IDogMSA6IF9vcHRpb25zJG1heDtcblxuICBpZiAobWluVmFsdWUgPj0gbWF4VmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluIG9wdGlvbiBtdXN0IGJlIHNtYWxsZXIgdGhhbiBtYXggb3B0aW9uJyk7XG4gIH1cblxuICB2YXIgZmFjdG9yID0gKG1heFZhbHVlIC0gbWluVmFsdWUpIC8gKGN1cnJlbnRNYXggLSBjdXJyZW50TWluKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0W2ldID0gKGlucHV0W2ldIC0gY3VycmVudE1pbikgKiBmYWN0b3IgKyBtaW5WYWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbmV4cG9ydCB7IHJlc2NhbGUgYXMgZGVmYXVsdCB9O1xuIiwiY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuLyoqXG4gKiBDaGVja3MgaWYgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGFuIEFycmF5IChhcnJheSBvciB0eXBlZCBhcnJheSkuXG4gKlxuICogQHBhcmFtIHthbnl9IHZhbHVlIC0gT2JqZWN0IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIG9iamVjdCBpcyBhbiBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW55QXJyYXkodmFsdWUpIHtcbiAgICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkuZW5kc1dpdGgoJ0FycmF5XScpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiLyoqXG4gKiBDYWxjdWxhdGUgY3VycmVudCBlcnJvclxuICogQGlnbm9yZVxuICogQHBhcmFtIHt7eDpBcnJheTxudW1iZXI+LCB5OkFycmF5PG51bWJlcj59fSBkYXRhIC0gQXJyYXkgb2YgcG9pbnRzIHRvIGZpdCBpbiB0aGUgZm9ybWF0IFt4MSwgeDIsIC4uLiBdLCBbeTEsIHkyLCAuLi4gXVxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBwYXJhbWV0ZXJzIC0gQXJyYXkgb2YgY3VycmVudCBwYXJhbWV0ZXIgdmFsdWVzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBwYXJhbWV0ZXJpemVkRnVuY3Rpb24gLSBUaGUgcGFyYW1ldGVycyBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHdpdGggdGhlIGluZGVwZW5kZW50IHZhcmlhYmxlIGFzIGEgcGFyYW1ldGVyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGVycm9yQ2FsY3VsYXRpb24oXG4gIGRhdGEsXG4gIHBhcmFtZXRlcnMsXG4gIHBhcmFtZXRlcml6ZWRGdW5jdGlvbixcbikge1xuICBsZXQgZXJyb3IgPSAwO1xuICBjb25zdCBmdW5jID0gcGFyYW1ldGVyaXplZEZ1bmN0aW9uKHBhcmFtZXRlcnMpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgZXJyb3IgKz0gTWF0aC5hYnMoZGF0YS55W2ldIC0gZnVuYyhkYXRhLnhbaV0pKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcjtcbn1cbiIsImltcG9ydCBpc0FycmF5IGZyb20gJ2lzLWFueS1hcnJheSc7XG5cbmltcG9ydCBlcnJvckNhbGN1bGF0aW9uIGZyb20gJy4vZXJyb3JDYWxjdWxhdGlvbic7XG5pbXBvcnQgc3RlcCBmcm9tICcuL3N0ZXAnO1xuXG4vKipcbiAqIEN1cnZlIGZpdHRpbmcgYWxnb3JpdGhtXG4gKiBAcGFyYW0ge3t4OkFycmF5PG51bWJlcj4sIHk6QXJyYXk8bnVtYmVyPn19IGRhdGEgLSBBcnJheSBvZiBwb2ludHMgdG8gZml0IGluIHRoZSBmb3JtYXQgW3gxLCB4MiwgLi4uIF0sIFt5MSwgeTIsIC4uLiBdXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBwYXJhbWV0ZXJpemVkRnVuY3Rpb24gLSBUaGUgcGFyYW1ldGVycyBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHdpdGggdGhlIGluZGVwZW5kZW50IHZhcmlhYmxlIGFzIGEgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gT3B0aW9ucyBvYmplY3RcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5kYW1waW5nXSAtIExldmVuYmVyZy1NYXJxdWFyZHQgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZ3JhZGllbnREaWZmZXJlbmNlID0gMTBlLTJdIC0gQWRqdXN0bWVudCBmb3IgZGVjcmVhc2UgdGhlIGRhbXBpbmcgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLm1pblZhbHVlc10gLSBNaW5pbXVtIGFsbG93ZWQgdmFsdWVzIGZvciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLm1heFZhbHVlc10gLSBNYXhpbXVtIGFsbG93ZWQgdmFsdWVzIGZvciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmluaXRpYWxWYWx1ZXNdIC0gQXJyYXkgb2YgaW5pdGlhbCBwYXJhbWV0ZXIgdmFsdWVzXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4SXRlcmF0aW9ucyA9IDEwMF0gLSBNYXhpbXVtIG9mIGFsbG93ZWQgaXRlcmF0aW9uc1xuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmVycm9yVG9sZXJhbmNlID0gMTBlLTNdIC0gTWluaW11bSB1bmNlcnRhaW50eSBhbGxvd2VkIGZvciBlYWNoIHBvaW50XG4gKiBAcmV0dXJuIHt7cGFyYW1ldGVyVmFsdWVzOiBBcnJheTxudW1iZXI+LCBwYXJhbWV0ZXJFcnJvcjogbnVtYmVyLCBpdGVyYXRpb25zOiBudW1iZXJ9fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsZXZlbmJlcmdNYXJxdWFyZHQoXG4gIGRhdGEsXG4gIHBhcmFtZXRlcml6ZWRGdW5jdGlvbixcbiAgb3B0aW9ucyA9IHt9LFxuKSB7XG4gIGxldCB7XG4gICAgbWF4SXRlcmF0aW9ucyA9IDEwMCxcbiAgICBncmFkaWVudERpZmZlcmVuY2UgPSAxMGUtMixcbiAgICBkYW1waW5nID0gMCxcbiAgICBlcnJvclRvbGVyYW5jZSA9IDEwZS0zLFxuICAgIG1pblZhbHVlcyxcbiAgICBtYXhWYWx1ZXMsXG4gICAgaW5pdGlhbFZhbHVlcyxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgaWYgKGRhbXBpbmcgPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGRhbXBpbmcgb3B0aW9uIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtcbiAgfSBlbHNlIGlmICghZGF0YS54IHx8ICFkYXRhLnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkYXRhIHBhcmFtZXRlciBtdXN0IGhhdmUgeCBhbmQgeSBlbGVtZW50cycpO1xuICB9IGVsc2UgaWYgKFxuICAgICFpc0FycmF5KGRhdGEueCkgfHxcbiAgICBkYXRhLngubGVuZ3RoIDwgMiB8fFxuICAgICFpc0FycmF5KGRhdGEueSkgfHxcbiAgICBkYXRhLnkubGVuZ3RoIDwgMlxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnVGhlIGRhdGEgcGFyYW1ldGVyIGVsZW1lbnRzIG11c3QgYmUgYW4gYXJyYXkgd2l0aCBtb3JlIHRoYW4gMiBwb2ludHMnLFxuICAgICk7XG4gIH0gZWxzZSBpZiAoZGF0YS54Lmxlbmd0aCAhPT0gZGF0YS55Lmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGRhdGEgcGFyYW1ldGVyIGVsZW1lbnRzIG11c3QgaGF2ZSB0aGUgc2FtZSBzaXplJyk7XG4gIH1cblxuICBsZXQgcGFyYW1ldGVycyA9XG4gICAgaW5pdGlhbFZhbHVlcyB8fCBuZXcgQXJyYXkocGFyYW1ldGVyaXplZEZ1bmN0aW9uLmxlbmd0aCkuZmlsbCgxKTtcbiAgbGV0IHBhckxlbiA9IHBhcmFtZXRlcnMubGVuZ3RoO1xuICBtYXhWYWx1ZXMgPSBtYXhWYWx1ZXMgfHwgbmV3IEFycmF5KHBhckxlbikuZmlsbChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7XG4gIG1pblZhbHVlcyA9IG1pblZhbHVlcyB8fCBuZXcgQXJyYXkocGFyTGVuKS5maWxsKE51bWJlci5NSU5fU0FGRV9JTlRFR0VSKTtcblxuICBpZiAobWF4VmFsdWVzLmxlbmd0aCAhPT0gbWluVmFsdWVzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWluVmFsdWVzIGFuZCBtYXhWYWx1ZXMgbXVzdCBiZSB0aGUgc2FtZSBzaXplJyk7XG4gIH1cblxuICBpZiAoIWlzQXJyYXkocGFyYW1ldGVycykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2luaXRpYWxWYWx1ZXMgbXVzdCBiZSBhbiBhcnJheScpO1xuICB9XG5cbiAgbGV0IGVycm9yID0gZXJyb3JDYWxjdWxhdGlvbihkYXRhLCBwYXJhbWV0ZXJzLCBwYXJhbWV0ZXJpemVkRnVuY3Rpb24pO1xuXG4gIGxldCBjb252ZXJnZWQgPSBlcnJvciA8PSBlcnJvclRvbGVyYW5jZTtcblxuICBsZXQgaXRlcmF0aW9uO1xuICBmb3IgKGl0ZXJhdGlvbiA9IDA7IGl0ZXJhdGlvbiA8IG1heEl0ZXJhdGlvbnMgJiYgIWNvbnZlcmdlZDsgaXRlcmF0aW9uKyspIHtcbiAgICBwYXJhbWV0ZXJzID0gc3RlcChcbiAgICAgIGRhdGEsXG4gICAgICBwYXJhbWV0ZXJzLFxuICAgICAgZGFtcGluZyxcbiAgICAgIGdyYWRpZW50RGlmZmVyZW5jZSxcbiAgICAgIHBhcmFtZXRlcml6ZWRGdW5jdGlvbixcbiAgICApO1xuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBwYXJMZW47IGsrKykge1xuICAgICAgcGFyYW1ldGVyc1trXSA9IE1hdGgubWluKFxuICAgICAgICBNYXRoLm1heChtaW5WYWx1ZXNba10sIHBhcmFtZXRlcnNba10pLFxuICAgICAgICBtYXhWYWx1ZXNba10sXG4gICAgICApO1xuICAgIH1cblxuICAgIGVycm9yID0gZXJyb3JDYWxjdWxhdGlvbihkYXRhLCBwYXJhbWV0ZXJzLCBwYXJhbWV0ZXJpemVkRnVuY3Rpb24pO1xuICAgIGlmIChpc05hTihlcnJvcikpIGJyZWFrO1xuICAgIGNvbnZlcmdlZCA9IGVycm9yIDw9IGVycm9yVG9sZXJhbmNlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXJhbWV0ZXJWYWx1ZXM6IHBhcmFtZXRlcnMsXG4gICAgcGFyYW1ldGVyRXJyb3I6IGVycm9yLFxuICAgIGl0ZXJhdGlvbnM6IGl0ZXJhdGlvbixcbiAgfTtcbn1cbiIsImltcG9ydCB7IGludmVyc2UsIE1hdHJpeCB9IGZyb20gJ21sLW1hdHJpeCc7XG5cbi8qKlxuICogRGlmZmVyZW5jZSBvZiB0aGUgbWF0cml4IGZ1bmN0aW9uIG92ZXIgdGhlIHBhcmFtZXRlcnNcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSB7e3g6QXJyYXk8bnVtYmVyPiwgeTpBcnJheTxudW1iZXI+fX0gZGF0YSAtIEFycmF5IG9mIHBvaW50cyB0byBmaXQgaW4gdGhlIGZvcm1hdCBbeDEsIHgyLCAuLi4gXSwgW3kxLCB5MiwgLi4uIF1cbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gZXZhbHVhdGVkRGF0YSAtIEFycmF5IG9mIHByZXZpb3VzIGV2YWx1YXRlZCBmdW5jdGlvbiB2YWx1ZXNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gcGFyYW1zIC0gQXJyYXkgb2YgcHJldmlvdXMgcGFyYW1ldGVyIHZhbHVlc1xuICogQHBhcmFtIHtudW1iZXJ9IGdyYWRpZW50RGlmZmVyZW5jZSAtIEFkanVzdG1lbnQgZm9yIGRlY3JlYXNlIHRoZSBkYW1waW5nIHBhcmFtZXRlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gcGFyYW1GdW5jdGlvbiAtIFRoZSBwYXJhbWV0ZXJzIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gd2l0aCB0aGUgaW5kZXBlbmRlbnQgdmFyaWFibGUgYXMgYSBwYXJhbWV0ZXJcbiAqIEByZXR1cm4ge01hdHJpeH1cbiAqL1xuZnVuY3Rpb24gZ3JhZGllbnRGdW5jdGlvbihcbiAgZGF0YSxcbiAgZXZhbHVhdGVkRGF0YSxcbiAgcGFyYW1zLFxuICBncmFkaWVudERpZmZlcmVuY2UsXG4gIHBhcmFtRnVuY3Rpb24sXG4pIHtcbiAgY29uc3QgbiA9IHBhcmFtcy5sZW5ndGg7XG4gIGNvbnN0IG0gPSBkYXRhLngubGVuZ3RoO1xuXG4gIGxldCBhbnMgPSBuZXcgQXJyYXkobik7XG5cbiAgZm9yIChsZXQgcGFyYW0gPSAwOyBwYXJhbSA8IG47IHBhcmFtKyspIHtcbiAgICBhbnNbcGFyYW1dID0gbmV3IEFycmF5KG0pO1xuICAgIGxldCBhdXhQYXJhbXMgPSBwYXJhbXMuc2xpY2UoKTtcbiAgICBhdXhQYXJhbXNbcGFyYW1dICs9IGdyYWRpZW50RGlmZmVyZW5jZTtcbiAgICBsZXQgZnVuY1BhcmFtID0gcGFyYW1GdW5jdGlvbihhdXhQYXJhbXMpO1xuXG4gICAgZm9yIChsZXQgcG9pbnQgPSAwOyBwb2ludCA8IG07IHBvaW50KyspIHtcbiAgICAgIGFuc1twYXJhbV1bcG9pbnRdID0gZXZhbHVhdGVkRGF0YVtwb2ludF0gLSBmdW5jUGFyYW0oZGF0YS54W3BvaW50XSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXcgTWF0cml4KGFucyk7XG59XG5cbi8qKlxuICogTWF0cml4IGZ1bmN0aW9uIG92ZXIgdGhlIHNhbXBsZXNcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSB7e3g6QXJyYXk8bnVtYmVyPiwgeTpBcnJheTxudW1iZXI+fX0gZGF0YSAtIEFycmF5IG9mIHBvaW50cyB0byBmaXQgaW4gdGhlIGZvcm1hdCBbeDEsIHgyLCAuLi4gXSwgW3kxLCB5MiwgLi4uIF1cbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gZXZhbHVhdGVkRGF0YSAtIEFycmF5IG9mIHByZXZpb3VzIGV2YWx1YXRlZCBmdW5jdGlvbiB2YWx1ZXNcbiAqIEByZXR1cm4ge01hdHJpeH1cbiAqL1xuZnVuY3Rpb24gbWF0cml4RnVuY3Rpb24oZGF0YSwgZXZhbHVhdGVkRGF0YSkge1xuICBjb25zdCBtID0gZGF0YS54Lmxlbmd0aDtcblxuICBsZXQgYW5zID0gbmV3IEFycmF5KG0pO1xuXG4gIGZvciAobGV0IHBvaW50ID0gMDsgcG9pbnQgPCBtOyBwb2ludCsrKSB7XG4gICAgYW5zW3BvaW50XSA9IFtkYXRhLnlbcG9pbnRdIC0gZXZhbHVhdGVkRGF0YVtwb2ludF1dO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBNYXRyaXgoYW5zKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRpb24gZm9yIExldmVuYmVyZy1NYXJxdWFyZHRcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSB7e3g6QXJyYXk8bnVtYmVyPiwgeTpBcnJheTxudW1iZXI+fX0gZGF0YSAtIEFycmF5IG9mIHBvaW50cyB0byBmaXQgaW4gdGhlIGZvcm1hdCBbeDEsIHgyLCAuLi4gXSwgW3kxLCB5MiwgLi4uIF1cbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gcGFyYW1zIC0gQXJyYXkgb2YgcHJldmlvdXMgcGFyYW1ldGVyIHZhbHVlc1xuICogQHBhcmFtIHtudW1iZXJ9IGRhbXBpbmcgLSBMZXZlbmJlcmctTWFycXVhcmR0IHBhcmFtZXRlclxuICogQHBhcmFtIHtudW1iZXJ9IGdyYWRpZW50RGlmZmVyZW5jZSAtIEFkanVzdG1lbnQgZm9yIGRlY3JlYXNlIHRoZSBkYW1waW5nIHBhcmFtZXRlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gcGFyYW1ldGVyaXplZEZ1bmN0aW9uIC0gVGhlIHBhcmFtZXRlcnMgYW5kIHJldHVybnMgYSBmdW5jdGlvbiB3aXRoIHRoZSBpbmRlcGVuZGVudCB2YXJpYWJsZSBhcyBhIHBhcmFtZXRlclxuICogQHJldHVybiB7QXJyYXk8bnVtYmVyPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RlcChcbiAgZGF0YSxcbiAgcGFyYW1zLFxuICBkYW1waW5nLFxuICBncmFkaWVudERpZmZlcmVuY2UsXG4gIHBhcmFtZXRlcml6ZWRGdW5jdGlvbixcbikge1xuICBsZXQgdmFsdWUgPSBkYW1waW5nICogZ3JhZGllbnREaWZmZXJlbmNlICogZ3JhZGllbnREaWZmZXJlbmNlO1xuICBsZXQgaWRlbnRpdHkgPSBNYXRyaXguZXllKHBhcmFtcy5sZW5ndGgsIHBhcmFtcy5sZW5ndGgsIHZhbHVlKTtcblxuICBjb25zdCBmdW5jID0gcGFyYW1ldGVyaXplZEZ1bmN0aW9uKHBhcmFtcyk7XG5cbiAgbGV0IGV2YWx1YXRlZERhdGEgPSBuZXcgRmxvYXQ2NEFycmF5KGRhdGEueC5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueC5sZW5ndGg7IGkrKykge1xuICAgIGV2YWx1YXRlZERhdGFbaV0gPSBmdW5jKGRhdGEueFtpXSk7XG4gIH1cblxuICBsZXQgZ3JhZGllbnRGdW5jID0gZ3JhZGllbnRGdW5jdGlvbihcbiAgICBkYXRhLFxuICAgIGV2YWx1YXRlZERhdGEsXG4gICAgcGFyYW1zLFxuICAgIGdyYWRpZW50RGlmZmVyZW5jZSxcbiAgICBwYXJhbWV0ZXJpemVkRnVuY3Rpb24sXG4gICk7XG4gIGxldCBtYXRyaXhGdW5jID0gbWF0cml4RnVuY3Rpb24oZGF0YSwgZXZhbHVhdGVkRGF0YSk7XG4gIGxldCBpbnZlcnNlTWF0cml4ID0gaW52ZXJzZShcbiAgICBpZGVudGl0eS5hZGQoZ3JhZGllbnRGdW5jLm1tdWwoZ3JhZGllbnRGdW5jLnRyYW5zcG9zZSgpKSksXG4gICk7XG5cbiAgcGFyYW1zID0gbmV3IE1hdHJpeChbcGFyYW1zXSk7XG4gIHBhcmFtcyA9IHBhcmFtcy5zdWIoXG4gICAgaW52ZXJzZU1hdHJpeFxuICAgICAgLm1tdWwoZ3JhZGllbnRGdW5jKVxuICAgICAgLm1tdWwobWF0cml4RnVuYylcbiAgICAgIC5tdWwoZ3JhZGllbnREaWZmZXJlbmNlKVxuICAgICAgLnRyYW5zcG9zZSgpLFxuICApO1xuXG4gIHJldHVybiBwYXJhbXMudG8xREFycmF5KCk7XG59XG4iLCJpbXBvcnQgTWF0cml4IGZyb20gJy4uL21hdHJpeCc7XG5pbXBvcnQgV3JhcHBlck1hdHJpeDJEIGZyb20gJy4uL3dyYXAvV3JhcHBlck1hdHJpeDJEJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTHVEZWNvbXBvc2l0aW9uIHtcbiAgY29uc3RydWN0b3IobWF0cml4KSB7XG4gICAgbWF0cml4ID0gV3JhcHBlck1hdHJpeDJELmNoZWNrTWF0cml4KG1hdHJpeCk7XG5cbiAgICBsZXQgbHUgPSBtYXRyaXguY2xvbmUoKTtcbiAgICBsZXQgcm93cyA9IGx1LnJvd3M7XG4gICAgbGV0IGNvbHVtbnMgPSBsdS5jb2x1bW5zO1xuICAgIGxldCBwaXZvdFZlY3RvciA9IG5ldyBGbG9hdDY0QXJyYXkocm93cyk7XG4gICAgbGV0IHBpdm90U2lnbiA9IDE7XG4gICAgbGV0IGksIGosIGssIHAsIHMsIHQsIHY7XG4gICAgbGV0IExVY29saiwga21heDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIHBpdm90VmVjdG9yW2ldID0gaTtcbiAgICB9XG5cbiAgICBMVWNvbGogPSBuZXcgRmxvYXQ2NEFycmF5KHJvd3MpO1xuXG4gICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICBMVWNvbGpbaV0gPSBsdS5nZXQoaSwgaik7XG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAga21heCA9IE1hdGgubWluKGksIGopO1xuICAgICAgICBzID0gMDtcbiAgICAgICAgZm9yIChrID0gMDsgayA8IGttYXg7IGsrKykge1xuICAgICAgICAgIHMgKz0gbHUuZ2V0KGksIGspICogTFVjb2xqW2tdO1xuICAgICAgICB9XG4gICAgICAgIExVY29saltpXSAtPSBzO1xuICAgICAgICBsdS5zZXQoaSwgaiwgTFVjb2xqW2ldKTtcbiAgICAgIH1cblxuICAgICAgcCA9IGo7XG4gICAgICBmb3IgKGkgPSBqICsgMTsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICBpZiAoTWF0aC5hYnMoTFVjb2xqW2ldKSA+IE1hdGguYWJzKExVY29saltwXSkpIHtcbiAgICAgICAgICBwID0gaTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocCAhPT0gaikge1xuICAgICAgICBmb3IgKGsgPSAwOyBrIDwgY29sdW1uczsgaysrKSB7XG4gICAgICAgICAgdCA9IGx1LmdldChwLCBrKTtcbiAgICAgICAgICBsdS5zZXQocCwgaywgbHUuZ2V0KGosIGspKTtcbiAgICAgICAgICBsdS5zZXQoaiwgaywgdCk7XG4gICAgICAgIH1cblxuICAgICAgICB2ID0gcGl2b3RWZWN0b3JbcF07XG4gICAgICAgIHBpdm90VmVjdG9yW3BdID0gcGl2b3RWZWN0b3Jbal07XG4gICAgICAgIHBpdm90VmVjdG9yW2pdID0gdjtcblxuICAgICAgICBwaXZvdFNpZ24gPSAtcGl2b3RTaWduO1xuICAgICAgfVxuXG4gICAgICBpZiAoaiA8IHJvd3MgJiYgbHUuZ2V0KGosIGopICE9PSAwKSB7XG4gICAgICAgIGZvciAoaSA9IGogKyAxOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgbHUuc2V0KGksIGosIGx1LmdldChpLCBqKSAvIGx1LmdldChqLCBqKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLkxVID0gbHU7XG4gICAgdGhpcy5waXZvdFZlY3RvciA9IHBpdm90VmVjdG9yO1xuICAgIHRoaXMucGl2b3RTaWduID0gcGl2b3RTaWduO1xuICB9XG5cbiAgaXNTaW5ndWxhcigpIHtcbiAgICBsZXQgZGF0YSA9IHRoaXMuTFU7XG4gICAgbGV0IGNvbCA9IGRhdGEuY29sdW1ucztcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbDsgaisrKSB7XG4gICAgICBpZiAoZGF0YS5nZXQoaiwgaikgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHNvbHZlKHZhbHVlKSB7XG4gICAgdmFsdWUgPSBNYXRyaXguY2hlY2tNYXRyaXgodmFsdWUpO1xuXG4gICAgbGV0IGx1ID0gdGhpcy5MVTtcbiAgICBsZXQgcm93cyA9IGx1LnJvd3M7XG5cbiAgICBpZiAocm93cyAhPT0gdmFsdWUucm93cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1hdHJpeCBkaW1lbnNpb25zJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzU2luZ3VsYXIoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdMVSBtYXRyaXggaXMgc2luZ3VsYXInKTtcbiAgICB9XG5cbiAgICBsZXQgY291bnQgPSB2YWx1ZS5jb2x1bW5zO1xuICAgIGxldCBYID0gdmFsdWUuc3ViTWF0cml4Um93KHRoaXMucGl2b3RWZWN0b3IsIDAsIGNvdW50IC0gMSk7XG4gICAgbGV0IGNvbHVtbnMgPSBsdS5jb2x1bW5zO1xuICAgIGxldCBpLCBqLCBrO1xuXG4gICAgZm9yIChrID0gMDsgayA8IGNvbHVtbnM7IGsrKykge1xuICAgICAgZm9yIChpID0gayArIDE7IGkgPCBjb2x1bW5zOyBpKyspIHtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvdW50OyBqKyspIHtcbiAgICAgICAgICBYLnNldChpLCBqLCBYLmdldChpLCBqKSAtIFguZ2V0KGssIGopICogbHUuZ2V0KGksIGspKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGsgPSBjb2x1bW5zIC0gMTsgayA+PSAwOyBrLS0pIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBjb3VudDsgaisrKSB7XG4gICAgICAgIFguc2V0KGssIGosIFguZ2V0KGssIGopIC8gbHUuZ2V0KGssIGspKTtcbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBrOyBpKyspIHtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvdW50OyBqKyspIHtcbiAgICAgICAgICBYLnNldChpLCBqLCBYLmdldChpLCBqKSAtIFguZ2V0KGssIGopICogbHUuZ2V0KGksIGspKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gWDtcbiAgfVxuXG4gIGdldCBkZXRlcm1pbmFudCgpIHtcbiAgICBsZXQgZGF0YSA9IHRoaXMuTFU7XG4gICAgaWYgKCFkYXRhLmlzU3F1YXJlKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlJyk7XG4gICAgfVxuICAgIGxldCBkZXRlcm1pbmFudCA9IHRoaXMucGl2b3RTaWduO1xuICAgIGxldCBjb2wgPSBkYXRhLmNvbHVtbnM7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2w7IGorKykge1xuICAgICAgZGV0ZXJtaW5hbnQgKj0gZGF0YS5nZXQoaiwgaik7XG4gICAgfVxuICAgIHJldHVybiBkZXRlcm1pbmFudDtcbiAgfVxuXG4gIGdldCBsb3dlclRyaWFuZ3VsYXJNYXRyaXgoKSB7XG4gICAgbGV0IGRhdGEgPSB0aGlzLkxVO1xuICAgIGxldCByb3dzID0gZGF0YS5yb3dzO1xuICAgIGxldCBjb2x1bW5zID0gZGF0YS5jb2x1bW5zO1xuICAgIGxldCBYID0gbmV3IE1hdHJpeChyb3dzLCBjb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgaWYgKGkgPiBqKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgZGF0YS5nZXQoaSwgaikpO1xuICAgICAgICB9IGVsc2UgaWYgKGkgPT09IGopIHtcbiAgICAgICAgICBYLnNldChpLCBqLCAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBYLnNldChpLCBqLCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gWDtcbiAgfVxuXG4gIGdldCB1cHBlclRyaWFuZ3VsYXJNYXRyaXgoKSB7XG4gICAgbGV0IGRhdGEgPSB0aGlzLkxVO1xuICAgIGxldCByb3dzID0gZGF0YS5yb3dzO1xuICAgIGxldCBjb2x1bW5zID0gZGF0YS5jb2x1bW5zO1xuICAgIGxldCBYID0gbmV3IE1hdHJpeChyb3dzLCBjb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgaWYgKGkgPD0gaikge1xuICAgICAgICAgIFguc2V0KGksIGosIGRhdGEuZ2V0KGksIGopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBYLnNldChpLCBqLCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gWDtcbiAgfVxuXG4gIGdldCBwaXZvdFBlcm11dGF0aW9uVmVjdG9yKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucGl2b3RWZWN0b3IpO1xuICB9XG59XG4iLCJpbXBvcnQgTWF0cml4IGZyb20gJy4uL21hdHJpeCc7XG5pbXBvcnQgV3JhcHBlck1hdHJpeDJEIGZyb20gJy4uL3dyYXAvV3JhcHBlck1hdHJpeDJEJztcblxuaW1wb3J0IHsgaHlwb3RlbnVzZSB9IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFFyRGVjb21wb3NpdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHZhbHVlKSB7XG4gICAgdmFsdWUgPSBXcmFwcGVyTWF0cml4MkQuY2hlY2tNYXRyaXgodmFsdWUpO1xuXG4gICAgbGV0IHFyID0gdmFsdWUuY2xvbmUoKTtcbiAgICBsZXQgbSA9IHZhbHVlLnJvd3M7XG4gICAgbGV0IG4gPSB2YWx1ZS5jb2x1bW5zO1xuICAgIGxldCByZGlhZyA9IG5ldyBGbG9hdDY0QXJyYXkobik7XG4gICAgbGV0IGksIGosIGssIHM7XG5cbiAgICBmb3IgKGsgPSAwOyBrIDwgbjsgaysrKSB7XG4gICAgICBsZXQgbnJtID0gMDtcbiAgICAgIGZvciAoaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgbnJtID0gaHlwb3RlbnVzZShucm0sIHFyLmdldChpLCBrKSk7XG4gICAgICB9XG4gICAgICBpZiAobnJtICE9PSAwKSB7XG4gICAgICAgIGlmIChxci5nZXQoaywgaykgPCAwKSB7XG4gICAgICAgICAgbnJtID0gLW5ybTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgcXIuc2V0KGksIGssIHFyLmdldChpLCBrKSAvIG5ybSk7XG4gICAgICAgIH1cbiAgICAgICAgcXIuc2V0KGssIGssIHFyLmdldChrLCBrKSArIDEpO1xuICAgICAgICBmb3IgKGogPSBrICsgMTsgaiA8IG47IGorKykge1xuICAgICAgICAgIHMgPSAwO1xuICAgICAgICAgIGZvciAoaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgIHMgKz0gcXIuZ2V0KGksIGspICogcXIuZ2V0KGksIGopO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzID0gLXMgLyBxci5nZXQoaywgayk7XG4gICAgICAgICAgZm9yIChpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgcXIuc2V0KGksIGosIHFyLmdldChpLCBqKSArIHMgKiBxci5nZXQoaSwgaykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmRpYWdba10gPSAtbnJtO1xuICAgIH1cblxuICAgIHRoaXMuUVIgPSBxcjtcbiAgICB0aGlzLlJkaWFnID0gcmRpYWc7XG4gIH1cblxuICBzb2x2ZSh2YWx1ZSkge1xuICAgIHZhbHVlID0gTWF0cml4LmNoZWNrTWF0cml4KHZhbHVlKTtcblxuICAgIGxldCBxciA9IHRoaXMuUVI7XG4gICAgbGV0IG0gPSBxci5yb3dzO1xuXG4gICAgaWYgKHZhbHVlLnJvd3MgIT09IG0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWF0cml4IHJvdyBkaW1lbnNpb25zIG11c3QgYWdyZWUnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzRnVsbFJhbmsoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYXRyaXggaXMgcmFuayBkZWZpY2llbnQnKTtcbiAgICB9XG5cbiAgICBsZXQgY291bnQgPSB2YWx1ZS5jb2x1bW5zO1xuICAgIGxldCBYID0gdmFsdWUuY2xvbmUoKTtcbiAgICBsZXQgbiA9IHFyLmNvbHVtbnM7XG4gICAgbGV0IGksIGosIGssIHM7XG5cbiAgICBmb3IgKGsgPSAwOyBrIDwgbjsgaysrKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykge1xuICAgICAgICBzID0gMDtcbiAgICAgICAgZm9yIChpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgIHMgKz0gcXIuZ2V0KGksIGspICogWC5nZXQoaSwgaik7XG4gICAgICAgIH1cbiAgICAgICAgcyA9IC1zIC8gcXIuZ2V0KGssIGspO1xuICAgICAgICBmb3IgKGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgWC5nZXQoaSwgaikgKyBzICogcXIuZ2V0KGksIGspKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGsgPSBuIC0gMTsgayA+PSAwOyBrLS0pIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBjb3VudDsgaisrKSB7XG4gICAgICAgIFguc2V0KGssIGosIFguZ2V0KGssIGopIC8gdGhpcy5SZGlhZ1trXSk7XG4gICAgICB9XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgazsgaSsrKSB7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBjb3VudDsgaisrKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgWC5nZXQoaSwgaikgLSBYLmdldChrLCBqKSAqIHFyLmdldChpLCBrKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gWC5zdWJNYXRyaXgoMCwgbiAtIDEsIDAsIGNvdW50IC0gMSk7XG4gIH1cblxuICBpc0Z1bGxSYW5rKCkge1xuICAgIGxldCBjb2x1bW5zID0gdGhpcy5RUi5jb2x1bW5zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uczsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5SZGlhZ1tpXSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZ2V0IHVwcGVyVHJpYW5ndWxhck1hdHJpeCgpIHtcbiAgICBsZXQgcXIgPSB0aGlzLlFSO1xuICAgIGxldCBuID0gcXIuY29sdW1ucztcbiAgICBsZXQgWCA9IG5ldyBNYXRyaXgobiwgbik7XG4gICAgbGV0IGksIGo7XG4gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICBpZiAoaSA8IGopIHtcbiAgICAgICAgICBYLnNldChpLCBqLCBxci5nZXQoaSwgaikpO1xuICAgICAgICB9IGVsc2UgaWYgKGkgPT09IGopIHtcbiAgICAgICAgICBYLnNldChpLCBqLCB0aGlzLlJkaWFnW2ldKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBYLnNldChpLCBqLCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gWDtcbiAgfVxuXG4gIGdldCBvcnRob2dvbmFsTWF0cml4KCkge1xuICAgIGxldCBxciA9IHRoaXMuUVI7XG4gICAgbGV0IHJvd3MgPSBxci5yb3dzO1xuICAgIGxldCBjb2x1bW5zID0gcXIuY29sdW1ucztcbiAgICBsZXQgWCA9IG5ldyBNYXRyaXgocm93cywgY29sdW1ucyk7XG4gICAgbGV0IGksIGosIGssIHM7XG5cbiAgICBmb3IgKGsgPSBjb2x1bW5zIC0gMTsgayA+PSAwOyBrLS0pIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgWC5zZXQoaSwgaywgMCk7XG4gICAgICB9XG4gICAgICBYLnNldChrLCBrLCAxKTtcbiAgICAgIGZvciAoaiA9IGs7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgaWYgKHFyLmdldChrLCBrKSAhPT0gMCkge1xuICAgICAgICAgIHMgPSAwO1xuICAgICAgICAgIGZvciAoaSA9IGs7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAgIHMgKz0gcXIuZ2V0KGksIGspICogWC5nZXQoaSwgaik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcyA9IC1zIC8gcXIuZ2V0KGssIGspO1xuXG4gICAgICAgICAgZm9yIChpID0gazsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgICAgWC5zZXQoaSwgaiwgWC5nZXQoaSwgaikgKyBzICogcXIuZ2V0KGksIGspKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFg7XG4gIH1cbn1cbiIsImltcG9ydCBNYXRyaXggZnJvbSAnLi4vbWF0cml4JztcbmltcG9ydCBXcmFwcGVyTWF0cml4MkQgZnJvbSAnLi4vd3JhcC9XcmFwcGVyTWF0cml4MkQnO1xuXG5pbXBvcnQgeyBoeXBvdGVudXNlIH0gZnJvbSAnLi91dGlsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2luZ3VsYXJWYWx1ZURlY29tcG9zaXRpb24ge1xuICBjb25zdHJ1Y3Rvcih2YWx1ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgdmFsdWUgPSBXcmFwcGVyTWF0cml4MkQuY2hlY2tNYXRyaXgodmFsdWUpO1xuXG4gICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYXRyaXggbXVzdCBiZSBub24tZW1wdHknKTtcbiAgICB9XG5cbiAgICBsZXQgbSA9IHZhbHVlLnJvd3M7XG4gICAgbGV0IG4gPSB2YWx1ZS5jb2x1bW5zO1xuXG4gICAgY29uc3Qge1xuICAgICAgY29tcHV0ZUxlZnRTaW5ndWxhclZlY3RvcnMgPSB0cnVlLFxuICAgICAgY29tcHV0ZVJpZ2h0U2luZ3VsYXJWZWN0b3JzID0gdHJ1ZSxcbiAgICAgIGF1dG9UcmFuc3Bvc2UgPSBmYWxzZSxcbiAgICB9ID0gb3B0aW9ucztcblxuICAgIGxldCB3YW50dSA9IEJvb2xlYW4oY29tcHV0ZUxlZnRTaW5ndWxhclZlY3RvcnMpO1xuICAgIGxldCB3YW50diA9IEJvb2xlYW4oY29tcHV0ZVJpZ2h0U2luZ3VsYXJWZWN0b3JzKTtcblxuICAgIGxldCBzd2FwcGVkID0gZmFsc2U7XG4gICAgbGV0IGE7XG4gICAgaWYgKG0gPCBuKSB7XG4gICAgICBpZiAoIWF1dG9UcmFuc3Bvc2UpIHtcbiAgICAgICAgYSA9IHZhbHVlLmNsb25lKCk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnQ29tcHV0aW5nIFNWRCBvbiBhIG1hdHJpeCB3aXRoIG1vcmUgY29sdW1ucyB0aGFuIHJvd3MuIENvbnNpZGVyIGVuYWJsaW5nIGF1dG9UcmFuc3Bvc2UnLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYSA9IHZhbHVlLnRyYW5zcG9zZSgpO1xuICAgICAgICBtID0gYS5yb3dzO1xuICAgICAgICBuID0gYS5jb2x1bW5zO1xuICAgICAgICBzd2FwcGVkID0gdHJ1ZTtcbiAgICAgICAgbGV0IGF1eCA9IHdhbnR1O1xuICAgICAgICB3YW50dSA9IHdhbnR2O1xuICAgICAgICB3YW50diA9IGF1eDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IHZhbHVlLmNsb25lKCk7XG4gICAgfVxuXG4gICAgbGV0IG51ID0gTWF0aC5taW4obSwgbik7XG4gICAgbGV0IG5pID0gTWF0aC5taW4obSArIDEsIG4pO1xuICAgIGxldCBzID0gbmV3IEZsb2F0NjRBcnJheShuaSk7XG4gICAgbGV0IFUgPSBuZXcgTWF0cml4KG0sIG51KTtcbiAgICBsZXQgViA9IG5ldyBNYXRyaXgobiwgbik7XG5cbiAgICBsZXQgZSA9IG5ldyBGbG9hdDY0QXJyYXkobik7XG4gICAgbGV0IHdvcmsgPSBuZXcgRmxvYXQ2NEFycmF5KG0pO1xuXG4gICAgbGV0IHNpID0gbmV3IEZsb2F0NjRBcnJheShuaSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuaTsgaSsrKSBzaVtpXSA9IGk7XG5cbiAgICBsZXQgbmN0ID0gTWF0aC5taW4obSAtIDEsIG4pO1xuICAgIGxldCBucnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihuIC0gMiwgbSkpO1xuICAgIGxldCBtcmMgPSBNYXRoLm1heChuY3QsIG5ydCk7XG5cbiAgICBmb3IgKGxldCBrID0gMDsgayA8IG1yYzsgaysrKSB7XG4gICAgICBpZiAoayA8IG5jdCkge1xuICAgICAgICBzW2tdID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICBzW2tdID0gaHlwb3RlbnVzZShzW2tdLCBhLmdldChpLCBrKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNba10gIT09IDApIHtcbiAgICAgICAgICBpZiAoYS5nZXQoaywgaykgPCAwKSB7XG4gICAgICAgICAgICBzW2tdID0gLXNba107XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAobGV0IGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICBhLnNldChpLCBrLCBhLmdldChpLCBrKSAvIHNba10pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhLnNldChrLCBrLCBhLmdldChrLCBrKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHNba10gPSAtc1trXTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaiA9IGsgKyAxOyBqIDwgbjsgaisrKSB7XG4gICAgICAgIGlmIChrIDwgbmN0ICYmIHNba10gIT09IDApIHtcbiAgICAgICAgICBsZXQgdCA9IDA7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgIHQgKz0gYS5nZXQoaSwgaykgKiBhLmdldChpLCBqKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdCA9IC10IC8gYS5nZXQoaywgayk7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgIGEuc2V0KGksIGosIGEuZ2V0KGksIGopICsgdCAqIGEuZ2V0KGksIGspKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZVtqXSA9IGEuZ2V0KGssIGopO1xuICAgICAgfVxuXG4gICAgICBpZiAod2FudHUgJiYgayA8IG5jdCkge1xuICAgICAgICBmb3IgKGxldCBpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgIFUuc2V0KGksIGssIGEuZ2V0KGksIGspKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoayA8IG5ydCkge1xuICAgICAgICBlW2tdID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IGsgKyAxOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgZVtrXSA9IGh5cG90ZW51c2UoZVtrXSwgZVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVba10gIT09IDApIHtcbiAgICAgICAgICBpZiAoZVtrICsgMV0gPCAwKSB7XG4gICAgICAgICAgICBlW2tdID0gMCAtIGVba107XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAobGV0IGkgPSBrICsgMTsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgZVtpXSAvPSBlW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlW2sgKyAxXSArPSAxO1xuICAgICAgICB9XG4gICAgICAgIGVba10gPSAtZVtrXTtcbiAgICAgICAgaWYgKGsgKyAxIDwgbSAmJiBlW2tdICE9PSAwKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IGsgKyAxOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICB3b3JrW2ldID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgaSA9IGsgKyAxOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gayArIDE7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICAgICAgd29ya1tpXSArPSBlW2pdICogYS5nZXQoaSwgaik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAobGV0IGogPSBrICsgMTsgaiA8IG47IGorKykge1xuICAgICAgICAgICAgbGV0IHQgPSAtZVtqXSAvIGVbayArIDFdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGsgKyAxOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICAgIGEuc2V0KGksIGosIGEuZ2V0KGksIGopICsgdCAqIHdvcmtbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAod2FudHYpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gayArIDE7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIFYuc2V0KGksIGssIGVbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBwID0gTWF0aC5taW4obiwgbSArIDEpO1xuICAgIGlmIChuY3QgPCBuKSB7XG4gICAgICBzW25jdF0gPSBhLmdldChuY3QsIG5jdCk7XG4gICAgfVxuICAgIGlmIChtIDwgcCkge1xuICAgICAgc1twIC0gMV0gPSAwO1xuICAgIH1cbiAgICBpZiAobnJ0ICsgMSA8IHApIHtcbiAgICAgIGVbbnJ0XSA9IGEuZ2V0KG5ydCwgcCAtIDEpO1xuICAgIH1cbiAgICBlW3AgLSAxXSA9IDA7XG5cbiAgICBpZiAod2FudHUpIHtcbiAgICAgIGZvciAobGV0IGogPSBuY3Q7IGogPCBudTsgaisrKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgVS5zZXQoaSwgaiwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgVS5zZXQoaiwgaiwgMSk7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBrID0gbmN0IC0gMTsgayA+PSAwOyBrLS0pIHtcbiAgICAgICAgaWYgKHNba10gIT09IDApIHtcbiAgICAgICAgICBmb3IgKGxldCBqID0gayArIDE7IGogPCBudTsgaisrKSB7XG4gICAgICAgICAgICBsZXQgdCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgICB0ICs9IFUuZ2V0KGksIGspICogVS5nZXQoaSwgaik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ID0gLXQgLyBVLmdldChrLCBrKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICAgIFUuc2V0KGksIGosIFUuZ2V0KGksIGopICsgdCAqIFUuZ2V0KGksIGspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgIFUuc2V0KGksIGssIC1VLmdldChpLCBrKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFUuc2V0KGssIGssIDEgKyBVLmdldChrLCBrKSk7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBVLnNldChpLCBrLCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgIFUuc2V0KGksIGssIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBVLnNldChrLCBrLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3YW50dikge1xuICAgICAgZm9yIChsZXQgayA9IG4gLSAxOyBrID49IDA7IGstLSkge1xuICAgICAgICBpZiAoayA8IG5ydCAmJiBlW2tdICE9PSAwKSB7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IGsgKyAxOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgICBsZXQgdCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gayArIDE7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgICAgdCArPSBWLmdldChpLCBrKSAqIFYuZ2V0KGksIGopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdCA9IC10IC8gVi5nZXQoayArIDEsIGspO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGsgKyAxOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgIFYuc2V0KGksIGosIFYuZ2V0KGksIGopICsgdCAqIFYuZ2V0KGksIGspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBWLnNldChpLCBrLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBWLnNldChrLCBrLCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcHAgPSBwIC0gMTtcbiAgICBsZXQgaXRlciA9IDA7XG4gICAgbGV0IGVwcyA9IE51bWJlci5FUFNJTE9OO1xuICAgIHdoaWxlIChwID4gMCkge1xuICAgICAgbGV0IGssIGthc2U7XG4gICAgICBmb3IgKGsgPSBwIC0gMjsgayA+PSAtMTsgay0tKSB7XG4gICAgICAgIGlmIChrID09PSAtMSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFscGhhID1cbiAgICAgICAgICBOdW1iZXIuTUlOX1ZBTFVFICsgZXBzICogTWF0aC5hYnMoc1trXSArIE1hdGguYWJzKHNbayArIDFdKSk7XG4gICAgICAgIGlmIChNYXRoLmFicyhlW2tdKSA8PSBhbHBoYSB8fCBOdW1iZXIuaXNOYU4oZVtrXSkpIHtcbiAgICAgICAgICBlW2tdID0gMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGsgPT09IHAgLSAyKSB7XG4gICAgICAgIGthc2UgPSA0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGtzO1xuICAgICAgICBmb3IgKGtzID0gcCAtIDE7IGtzID49IGs7IGtzLS0pIHtcbiAgICAgICAgICBpZiAoa3MgPT09IGspIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgdCA9XG4gICAgICAgICAgICAoa3MgIT09IHAgPyBNYXRoLmFicyhlW2tzXSkgOiAwKSArXG4gICAgICAgICAgICAoa3MgIT09IGsgKyAxID8gTWF0aC5hYnMoZVtrcyAtIDFdKSA6IDApO1xuICAgICAgICAgIGlmIChNYXRoLmFicyhzW2tzXSkgPD0gZXBzICogdCkge1xuICAgICAgICAgICAgc1trc10gPSAwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChrcyA9PT0gaykge1xuICAgICAgICAgIGthc2UgPSAzO1xuICAgICAgICB9IGVsc2UgaWYgKGtzID09PSBwIC0gMSkge1xuICAgICAgICAgIGthc2UgPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGthc2UgPSAyO1xuICAgICAgICAgIGsgPSBrcztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBrKys7XG5cbiAgICAgIHN3aXRjaCAoa2FzZSkge1xuICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICBsZXQgZiA9IGVbcCAtIDJdO1xuICAgICAgICAgIGVbcCAtIDJdID0gMDtcbiAgICAgICAgICBmb3IgKGxldCBqID0gcCAtIDI7IGogPj0gazsgai0tKSB7XG4gICAgICAgICAgICBsZXQgdCA9IGh5cG90ZW51c2Uoc1tqXSwgZik7XG4gICAgICAgICAgICBsZXQgY3MgPSBzW2pdIC8gdDtcbiAgICAgICAgICAgIGxldCBzbiA9IGYgLyB0O1xuICAgICAgICAgICAgc1tqXSA9IHQ7XG4gICAgICAgICAgICBpZiAoaiAhPT0gaykge1xuICAgICAgICAgICAgICBmID0gLXNuICogZVtqIC0gMV07XG4gICAgICAgICAgICAgIGVbaiAtIDFdID0gY3MgKiBlW2ogLSAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh3YW50dikge1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgICAgIHQgPSBjcyAqIFYuZ2V0KGksIGopICsgc24gKiBWLmdldChpLCBwIC0gMSk7XG4gICAgICAgICAgICAgICAgVi5zZXQoaSwgcCAtIDEsIC1zbiAqIFYuZ2V0KGksIGopICsgY3MgKiBWLmdldChpLCBwIC0gMSkpO1xuICAgICAgICAgICAgICAgIFYuc2V0KGksIGosIHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgIGxldCBmID0gZVtrIC0gMV07XG4gICAgICAgICAgZVtrIC0gMV0gPSAwO1xuICAgICAgICAgIGZvciAobGV0IGogPSBrOyBqIDwgcDsgaisrKSB7XG4gICAgICAgICAgICBsZXQgdCA9IGh5cG90ZW51c2Uoc1tqXSwgZik7XG4gICAgICAgICAgICBsZXQgY3MgPSBzW2pdIC8gdDtcbiAgICAgICAgICAgIGxldCBzbiA9IGYgLyB0O1xuICAgICAgICAgICAgc1tqXSA9IHQ7XG4gICAgICAgICAgICBmID0gLXNuICogZVtqXTtcbiAgICAgICAgICAgIGVbal0gPSBjcyAqIGVbal07XG4gICAgICAgICAgICBpZiAod2FudHUpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0ID0gY3MgKiBVLmdldChpLCBqKSArIHNuICogVS5nZXQoaSwgayAtIDEpO1xuICAgICAgICAgICAgICAgIFUuc2V0KGksIGsgLSAxLCAtc24gKiBVLmdldChpLCBqKSArIGNzICogVS5nZXQoaSwgayAtIDEpKTtcbiAgICAgICAgICAgICAgICBVLnNldChpLCBqLCB0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICBjb25zdCBzY2FsZSA9IE1hdGgubWF4KFxuICAgICAgICAgICAgTWF0aC5hYnMoc1twIC0gMV0pLFxuICAgICAgICAgICAgTWF0aC5hYnMoc1twIC0gMl0pLFxuICAgICAgICAgICAgTWF0aC5hYnMoZVtwIC0gMl0pLFxuICAgICAgICAgICAgTWF0aC5hYnMoc1trXSksXG4gICAgICAgICAgICBNYXRoLmFicyhlW2tdKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHNwID0gc1twIC0gMV0gLyBzY2FsZTtcbiAgICAgICAgICBjb25zdCBzcG0xID0gc1twIC0gMl0gLyBzY2FsZTtcbiAgICAgICAgICBjb25zdCBlcG0xID0gZVtwIC0gMl0gLyBzY2FsZTtcbiAgICAgICAgICBjb25zdCBzayA9IHNba10gLyBzY2FsZTtcbiAgICAgICAgICBjb25zdCBlayA9IGVba10gLyBzY2FsZTtcbiAgICAgICAgICBjb25zdCBiID0gKChzcG0xICsgc3ApICogKHNwbTEgLSBzcCkgKyBlcG0xICogZXBtMSkgLyAyO1xuICAgICAgICAgIGNvbnN0IGMgPSBzcCAqIGVwbTEgKiAoc3AgKiBlcG0xKTtcbiAgICAgICAgICBsZXQgc2hpZnQgPSAwO1xuICAgICAgICAgIGlmIChiICE9PSAwIHx8IGMgIT09IDApIHtcbiAgICAgICAgICAgIGlmIChiIDwgMCkge1xuICAgICAgICAgICAgICBzaGlmdCA9IDAgLSBNYXRoLnNxcnQoYiAqIGIgKyBjKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNoaWZ0ID0gTWF0aC5zcXJ0KGIgKiBiICsgYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaGlmdCA9IGMgLyAoYiArIHNoaWZ0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGYgPSAoc2sgKyBzcCkgKiAoc2sgLSBzcCkgKyBzaGlmdDtcbiAgICAgICAgICBsZXQgZyA9IHNrICogZWs7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IGs7IGogPCBwIC0gMTsgaisrKSB7XG4gICAgICAgICAgICBsZXQgdCA9IGh5cG90ZW51c2UoZiwgZyk7XG4gICAgICAgICAgICBpZiAodCA9PT0gMCkgdCA9IE51bWJlci5NSU5fVkFMVUU7XG4gICAgICAgICAgICBsZXQgY3MgPSBmIC8gdDtcbiAgICAgICAgICAgIGxldCBzbiA9IGcgLyB0O1xuICAgICAgICAgICAgaWYgKGogIT09IGspIHtcbiAgICAgICAgICAgICAgZVtqIC0gMV0gPSB0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZiA9IGNzICogc1tqXSArIHNuICogZVtqXTtcbiAgICAgICAgICAgIGVbal0gPSBjcyAqIGVbal0gLSBzbiAqIHNbal07XG4gICAgICAgICAgICBnID0gc24gKiBzW2ogKyAxXTtcbiAgICAgICAgICAgIHNbaiArIDFdID0gY3MgKiBzW2ogKyAxXTtcbiAgICAgICAgICAgIGlmICh3YW50dikge1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgICAgIHQgPSBjcyAqIFYuZ2V0KGksIGopICsgc24gKiBWLmdldChpLCBqICsgMSk7XG4gICAgICAgICAgICAgICAgVi5zZXQoaSwgaiArIDEsIC1zbiAqIFYuZ2V0KGksIGopICsgY3MgKiBWLmdldChpLCBqICsgMSkpO1xuICAgICAgICAgICAgICAgIFYuc2V0KGksIGosIHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ID0gaHlwb3RlbnVzZShmLCBnKTtcbiAgICAgICAgICAgIGlmICh0ID09PSAwKSB0ID0gTnVtYmVyLk1JTl9WQUxVRTtcbiAgICAgICAgICAgIGNzID0gZiAvIHQ7XG4gICAgICAgICAgICBzbiA9IGcgLyB0O1xuICAgICAgICAgICAgc1tqXSA9IHQ7XG4gICAgICAgICAgICBmID0gY3MgKiBlW2pdICsgc24gKiBzW2ogKyAxXTtcbiAgICAgICAgICAgIHNbaiArIDFdID0gLXNuICogZVtqXSArIGNzICogc1tqICsgMV07XG4gICAgICAgICAgICBnID0gc24gKiBlW2ogKyAxXTtcbiAgICAgICAgICAgIGVbaiArIDFdID0gY3MgKiBlW2ogKyAxXTtcbiAgICAgICAgICAgIGlmICh3YW50dSAmJiBqIDwgbSAtIDEpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0ID0gY3MgKiBVLmdldChpLCBqKSArIHNuICogVS5nZXQoaSwgaiArIDEpO1xuICAgICAgICAgICAgICAgIFUuc2V0KGksIGogKyAxLCAtc24gKiBVLmdldChpLCBqKSArIGNzICogVS5nZXQoaSwgaiArIDEpKTtcbiAgICAgICAgICAgICAgICBVLnNldChpLCBqLCB0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlW3AgLSAyXSA9IGY7XG4gICAgICAgICAgaXRlciA9IGl0ZXIgKyAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgNDoge1xuICAgICAgICAgIGlmIChzW2tdIDw9IDApIHtcbiAgICAgICAgICAgIHNba10gPSBzW2tdIDwgMCA/IC1zW2tdIDogMDtcbiAgICAgICAgICAgIGlmICh3YW50dikge1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBwcDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgVi5zZXQoaSwgaywgLVYuZ2V0KGksIGspKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB3aGlsZSAoayA8IHBwKSB7XG4gICAgICAgICAgICBpZiAoc1trXSA+PSBzW2sgKyAxXSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB0ID0gc1trXTtcbiAgICAgICAgICAgIHNba10gPSBzW2sgKyAxXTtcbiAgICAgICAgICAgIHNbayArIDFdID0gdDtcbiAgICAgICAgICAgIGlmICh3YW50diAmJiBrIDwgbiAtIDEpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0ID0gVi5nZXQoaSwgayArIDEpO1xuICAgICAgICAgICAgICAgIFYuc2V0KGksIGsgKyAxLCBWLmdldChpLCBrKSk7XG4gICAgICAgICAgICAgICAgVi5zZXQoaSwgaywgdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh3YW50dSAmJiBrIDwgbSAtIDEpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0ID0gVS5nZXQoaSwgayArIDEpO1xuICAgICAgICAgICAgICAgIFUuc2V0KGksIGsgKyAxLCBVLmdldChpLCBrKSk7XG4gICAgICAgICAgICAgICAgVS5zZXQoaSwgaywgdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGsrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgaXRlciA9IDA7XG4gICAgICAgICAgcC0tO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vIGRlZmF1bHRcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3dhcHBlZCkge1xuICAgICAgbGV0IHRtcCA9IFY7XG4gICAgICBWID0gVTtcbiAgICAgIFUgPSB0bXA7XG4gICAgfVxuXG4gICAgdGhpcy5tID0gbTtcbiAgICB0aGlzLm4gPSBuO1xuICAgIHRoaXMucyA9IHM7XG4gICAgdGhpcy5VID0gVTtcbiAgICB0aGlzLlYgPSBWO1xuICB9XG5cbiAgc29sdmUodmFsdWUpIHtcbiAgICBsZXQgWSA9IHZhbHVlO1xuICAgIGxldCBlID0gdGhpcy50aHJlc2hvbGQ7XG4gICAgbGV0IHNjb2xzID0gdGhpcy5zLmxlbmd0aDtcbiAgICBsZXQgTHMgPSBNYXRyaXguemVyb3Moc2NvbHMsIHNjb2xzKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2NvbHM7IGkrKykge1xuICAgICAgaWYgKE1hdGguYWJzKHRoaXMuc1tpXSkgPD0gZSkge1xuICAgICAgICBMcy5zZXQoaSwgaSwgMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBMcy5zZXQoaSwgaSwgMSAvIHRoaXMuc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IFUgPSB0aGlzLlU7XG4gICAgbGV0IFYgPSB0aGlzLnJpZ2h0U2luZ3VsYXJWZWN0b3JzO1xuXG4gICAgbGV0IFZMID0gVi5tbXVsKExzKTtcbiAgICBsZXQgdnJvd3MgPSBWLnJvd3M7XG4gICAgbGV0IHVyb3dzID0gVS5yb3dzO1xuICAgIGxldCBWTFUgPSBNYXRyaXguemVyb3ModnJvd3MsIHVyb3dzKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB1cm93czsgaisrKSB7XG4gICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IHNjb2xzOyBrKyspIHtcbiAgICAgICAgICBzdW0gKz0gVkwuZ2V0KGksIGspICogVS5nZXQoaiwgayk7XG4gICAgICAgIH1cbiAgICAgICAgVkxVLnNldChpLCBqLCBzdW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBWTFUubW11bChZKTtcbiAgfVxuXG4gIHNvbHZlRm9yRGlhZ29uYWwodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5zb2x2ZShNYXRyaXguZGlhZyh2YWx1ZSkpO1xuICB9XG5cbiAgaW52ZXJzZSgpIHtcbiAgICBsZXQgViA9IHRoaXMuVjtcbiAgICBsZXQgZSA9IHRoaXMudGhyZXNob2xkO1xuICAgIGxldCB2cm93cyA9IFYucm93cztcbiAgICBsZXQgdmNvbHMgPSBWLmNvbHVtbnM7XG4gICAgbGV0IFggPSBuZXcgTWF0cml4KHZyb3dzLCB0aGlzLnMubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB2Y29sczsgaisrKSB7XG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnNbal0pID4gZSkge1xuICAgICAgICAgIFguc2V0KGksIGosIFYuZ2V0KGksIGopIC8gdGhpcy5zW2pdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBVID0gdGhpcy5VO1xuXG4gICAgbGV0IHVyb3dzID0gVS5yb3dzO1xuICAgIGxldCB1Y29scyA9IFUuY29sdW1ucztcbiAgICBsZXQgWSA9IG5ldyBNYXRyaXgodnJvd3MsIHVyb3dzKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB1cm93czsgaisrKSB7XG4gICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IHVjb2xzOyBrKyspIHtcbiAgICAgICAgICBzdW0gKz0gWC5nZXQoaSwgaykgKiBVLmdldChqLCBrKTtcbiAgICAgICAgfVxuICAgICAgICBZLnNldChpLCBqLCBzdW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBZO1xuICB9XG5cbiAgZ2V0IGNvbmRpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zWzBdIC8gdGhpcy5zW01hdGgubWluKHRoaXMubSwgdGhpcy5uKSAtIDFdO1xuICB9XG5cbiAgZ2V0IG5vcm0yKCkge1xuICAgIHJldHVybiB0aGlzLnNbMF07XG4gIH1cblxuICBnZXQgcmFuaygpIHtcbiAgICBsZXQgdG9sID0gTWF0aC5tYXgodGhpcy5tLCB0aGlzLm4pICogdGhpcy5zWzBdICogTnVtYmVyLkVQU0lMT047XG4gICAgbGV0IHIgPSAwO1xuICAgIGxldCBzID0gdGhpcy5zO1xuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgaWYgKHNbaV0gPiB0b2wpIHtcbiAgICAgICAgcisrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuXG4gIGdldCBkaWFnb25hbCgpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnMpO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpIHtcbiAgICByZXR1cm4gKE51bWJlci5FUFNJTE9OIC8gMikgKiBNYXRoLm1heCh0aGlzLm0sIHRoaXMubikgKiB0aGlzLnNbMF07XG4gIH1cblxuICBnZXQgbGVmdFNpbmd1bGFyVmVjdG9ycygpIHtcbiAgICByZXR1cm4gdGhpcy5VO1xuICB9XG5cbiAgZ2V0IHJpZ2h0U2luZ3VsYXJWZWN0b3JzKCkge1xuICAgIHJldHVybiB0aGlzLlY7XG4gIH1cblxuICBnZXQgZGlhZ29uYWxNYXRyaXgoKSB7XG4gICAgcmV0dXJuIE1hdHJpeC5kaWFnKHRoaXMucyk7XG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBoeXBvdGVudXNlKGEsIGIpIHtcbiAgbGV0IHIgPSAwO1xuICBpZiAoTWF0aC5hYnMoYSkgPiBNYXRoLmFicyhiKSkge1xuICAgIHIgPSBiIC8gYTtcbiAgICByZXR1cm4gTWF0aC5hYnMoYSkgKiBNYXRoLnNxcnQoMSArIHIgKiByKTtcbiAgfVxuICBpZiAoYiAhPT0gMCkge1xuICAgIHIgPSBhIC8gYjtcbiAgICByZXR1cm4gTWF0aC5hYnMoYikgKiBNYXRoLnNxcnQoMSArIHIgKiByKTtcbiAgfVxuICByZXR1cm4gMDtcbn1cbiIsImltcG9ydCBMdURlY29tcG9zaXRpb24gZnJvbSAnLi9kYy9sdSc7XG5pbXBvcnQgUXJEZWNvbXBvc2l0aW9uIGZyb20gJy4vZGMvcXInO1xuaW1wb3J0IFNpbmd1bGFyVmFsdWVEZWNvbXBvc2l0aW9uIGZyb20gJy4vZGMvc3ZkJztcbmltcG9ydCBNYXRyaXggZnJvbSAnLi9tYXRyaXgnO1xuaW1wb3J0IFdyYXBwZXJNYXRyaXgyRCBmcm9tICcuL3dyYXAvV3JhcHBlck1hdHJpeDJEJztcblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2UobWF0cml4LCB1c2VTVkQgPSBmYWxzZSkge1xuICBtYXRyaXggPSBXcmFwcGVyTWF0cml4MkQuY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgaWYgKHVzZVNWRCkge1xuICAgIHJldHVybiBuZXcgU2luZ3VsYXJWYWx1ZURlY29tcG9zaXRpb24obWF0cml4KS5pbnZlcnNlKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHNvbHZlKG1hdHJpeCwgTWF0cml4LmV5ZShtYXRyaXgucm93cykpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb2x2ZShsZWZ0SGFuZFNpZGUsIHJpZ2h0SGFuZFNpZGUsIHVzZVNWRCA9IGZhbHNlKSB7XG4gIGxlZnRIYW5kU2lkZSA9IFdyYXBwZXJNYXRyaXgyRC5jaGVja01hdHJpeChsZWZ0SGFuZFNpZGUpO1xuICByaWdodEhhbmRTaWRlID0gV3JhcHBlck1hdHJpeDJELmNoZWNrTWF0cml4KHJpZ2h0SGFuZFNpZGUpO1xuICBpZiAodXNlU1ZEKSB7XG4gICAgcmV0dXJuIG5ldyBTaW5ndWxhclZhbHVlRGVjb21wb3NpdGlvbihsZWZ0SGFuZFNpZGUpLnNvbHZlKHJpZ2h0SGFuZFNpZGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsZWZ0SGFuZFNpZGUuaXNTcXVhcmUoKVxuICAgICAgPyBuZXcgTHVEZWNvbXBvc2l0aW9uKGxlZnRIYW5kU2lkZSkuc29sdmUocmlnaHRIYW5kU2lkZSlcbiAgICAgIDogbmV3IFFyRGVjb21wb3NpdGlvbihsZWZ0SGFuZFNpZGUpLnNvbHZlKHJpZ2h0SGFuZFNpZGUpO1xuICB9XG59XG4iLCJjb25zdCBpbmRlbnQgPSAnICcucmVwZWF0KDIpO1xuY29uc3QgaW5kZW50RGF0YSA9ICcgJy5yZXBlYXQoNCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNwZWN0TWF0cml4KCkge1xuICByZXR1cm4gaW5zcGVjdE1hdHJpeFdpdGhPcHRpb25zKHRoaXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zcGVjdE1hdHJpeFdpdGhPcHRpb25zKG1hdHJpeCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHsgbWF4Um93cyA9IDE1LCBtYXhDb2x1bW5zID0gMTAsIG1heE51bVNpemUgPSA4IH0gPSBvcHRpb25zO1xuICByZXR1cm4gYCR7bWF0cml4LmNvbnN0cnVjdG9yLm5hbWV9IHtcbiR7aW5kZW50fVtcbiR7aW5kZW50RGF0YX0ke2luc3BlY3REYXRhKG1hdHJpeCwgbWF4Um93cywgbWF4Q29sdW1ucywgbWF4TnVtU2l6ZSl9XG4ke2luZGVudH1dXG4ke2luZGVudH1yb3dzOiAke21hdHJpeC5yb3dzfVxuJHtpbmRlbnR9Y29sdW1uczogJHttYXRyaXguY29sdW1uc31cbn1gO1xufVxuXG5mdW5jdGlvbiBpbnNwZWN0RGF0YShtYXRyaXgsIG1heFJvd3MsIG1heENvbHVtbnMsIG1heE51bVNpemUpIHtcbiAgY29uc3QgeyByb3dzLCBjb2x1bW5zIH0gPSBtYXRyaXg7XG4gIGNvbnN0IG1heEkgPSBNYXRoLm1pbihyb3dzLCBtYXhSb3dzKTtcbiAgY29uc3QgbWF4SiA9IE1hdGgubWluKGNvbHVtbnMsIG1heENvbHVtbnMpO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhJOyBpKyspIHtcbiAgICBsZXQgbGluZSA9IFtdO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF4SjsgaisrKSB7XG4gICAgICBsaW5lLnB1c2goZm9ybWF0TnVtYmVyKG1hdHJpeC5nZXQoaSwgaiksIG1heE51bVNpemUpKTtcbiAgICB9XG4gICAgcmVzdWx0LnB1c2goYCR7bGluZS5qb2luKCcgJyl9YCk7XG4gIH1cbiAgaWYgKG1heEogIT09IGNvbHVtbnMpIHtcbiAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdICs9IGAgLi4uICR7Y29sdW1ucyAtIG1heENvbHVtbnN9IG1vcmUgY29sdW1uc2A7XG4gIH1cbiAgaWYgKG1heEkgIT09IHJvd3MpIHtcbiAgICByZXN1bHQucHVzaChgLi4uICR7cm93cyAtIG1heFJvd3N9IG1vcmUgcm93c2ApO1xuICB9XG4gIHJldHVybiByZXN1bHQuam9pbihgXFxuJHtpbmRlbnREYXRhfWApO1xufVxuXG5mdW5jdGlvbiBmb3JtYXROdW1iZXIobnVtLCBtYXhOdW1TaXplKSB7XG4gIGNvbnN0IG51bVN0ciA9IFN0cmluZyhudW0pO1xuICBpZiAobnVtU3RyLmxlbmd0aCA8PSBtYXhOdW1TaXplKSB7XG4gICAgcmV0dXJuIG51bVN0ci5wYWRFbmQobWF4TnVtU2l6ZSwgJyAnKTtcbiAgfVxuICBjb25zdCBwcmVjaXNlID0gbnVtLnRvUHJlY2lzaW9uKG1heE51bVNpemUgLSAyKTtcbiAgaWYgKHByZWNpc2UubGVuZ3RoIDw9IG1heE51bVNpemUpIHtcbiAgICByZXR1cm4gcHJlY2lzZTtcbiAgfVxuICBjb25zdCBleHBvbmVudGlhbCA9IG51bS50b0V4cG9uZW50aWFsKG1heE51bVNpemUgLSAyKTtcbiAgY29uc3QgZUluZGV4ID0gZXhwb25lbnRpYWwuaW5kZXhPZignZScpO1xuICBjb25zdCBlID0gZXhwb25lbnRpYWwuc2xpY2UoZUluZGV4KTtcbiAgcmV0dXJuIGV4cG9uZW50aWFsLnNsaWNlKDAsIG1heE51bVNpemUgLSBlLmxlbmd0aCkgKyBlO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxNYXRoT3BlcmF0aW9ucyhBYnN0cmFjdE1hdHJpeCwgTWF0cml4KSB7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMuYWRkUyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMuYWRkTSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmFkZFMgPSBmdW5jdGlvbiBhZGRTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSArIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmFkZE0gPSBmdW5jdGlvbiBhZGRNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgKyBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguYWRkID0gZnVuY3Rpb24gYWRkKG1hdHJpeCwgdmFsdWUpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5hZGQodmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zdWIgPSBmdW5jdGlvbiBzdWIodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMuc3ViUyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMuc3ViTSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnN1YlMgPSBmdW5jdGlvbiBzdWJTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAtIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnN1Yk0gPSBmdW5jdGlvbiBzdWJNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgLSBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguc3ViID0gZnVuY3Rpb24gc3ViKG1hdHJpeCwgdmFsdWUpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5zdWIodmFsdWUpO1xuICB9O1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3VidHJhY3QgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3ViO1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3VidHJhY3RTID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnN1YlM7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zdWJ0cmFjdE0gPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3ViTTtcbiAgQWJzdHJhY3RNYXRyaXguc3VidHJhY3QgPSBBYnN0cmFjdE1hdHJpeC5zdWI7XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uIG11bCh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5tdWxTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5tdWxNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubXVsUyA9IGZ1bmN0aW9uIG11bFModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICogdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubXVsTSA9IGZ1bmN0aW9uIG11bE0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAqIG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5tdWwgPSBmdW5jdGlvbiBtdWwobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4Lm11bCh2YWx1ZSk7XG4gIH07XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tdWx0aXBseSA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tdWw7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tdWx0aXBseVMgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubXVsUztcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm11bHRpcGx5TSA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tdWxNO1xuICBBYnN0cmFjdE1hdHJpeC5tdWx0aXBseSA9IEFic3RyYWN0TWF0cml4Lm11bDtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZGl2ID0gZnVuY3Rpb24gZGl2KHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLmRpdlModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLmRpdk0odmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaXZTID0gZnVuY3Rpb24gZGl2Uyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgLyB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaXZNID0gZnVuY3Rpb24gZGl2TShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC8gbWF0cml4LmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmRpdiA9IGZ1bmN0aW9uIGRpdihtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguZGl2KHZhbHVlKTtcbiAgfTtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdmlkZSA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaXY7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaXZpZGVTID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdlM7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaXZpZGVNID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdk07XG4gIEFic3RyYWN0TWF0cml4LmRpdmlkZSA9IEFic3RyYWN0TWF0cml4LmRpdjtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubW9kID0gZnVuY3Rpb24gbW9kKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLm1vZFModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLm1vZE0odmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tb2RTID0gZnVuY3Rpb24gbW9kUyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgJSB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tb2RNID0gZnVuY3Rpb24gbW9kTShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICUgbWF0cml4LmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4Lm1vZCA9IGZ1bmN0aW9uIG1vZChtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubW9kKHZhbHVlKTtcbiAgfTtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm1vZHVsdXMgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubW9kO1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubW9kdWx1c1MgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubW9kUztcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm1vZHVsdXNNID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm1vZE07XG4gIEFic3RyYWN0TWF0cml4Lm1vZHVsdXMgPSBBYnN0cmFjdE1hdHJpeC5tb2Q7XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmFuZCA9IGZ1bmN0aW9uIGFuZCh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5hbmRTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5hbmRNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYW5kUyA9IGZ1bmN0aW9uIGFuZFModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICYgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYW5kTSA9IGZ1bmN0aW9uIGFuZE0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAmIG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5hbmQgPSBmdW5jdGlvbiBhbmQobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmFuZCh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm9yID0gZnVuY3Rpb24gb3IodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMub3JTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5vck0odmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5vclMgPSBmdW5jdGlvbiBvclModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIHwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUub3JNID0gZnVuY3Rpb24gb3JNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgfCBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgub3IgPSBmdW5jdGlvbiBvcihtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgub3IodmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS54b3IgPSBmdW5jdGlvbiB4b3IodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMueG9yUyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMueG9yTSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnhvclMgPSBmdW5jdGlvbiB4b3JTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSBeIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnhvck0gPSBmdW5jdGlvbiB4b3JNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgXiBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgueG9yID0gZnVuY3Rpb24geG9yKG1hdHJpeCwgdmFsdWUpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC54b3IodmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5sZWZ0U2hpZnQgPSBmdW5jdGlvbiBsZWZ0U2hpZnQodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMubGVmdFNoaWZ0Uyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMubGVmdFNoaWZ0TSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmxlZnRTaGlmdFMgPSBmdW5jdGlvbiBsZWZ0U2hpZnRTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSA8PCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5sZWZ0U2hpZnRNID0gZnVuY3Rpb24gbGVmdFNoaWZ0TShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIDw8IG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5sZWZ0U2hpZnQgPSBmdW5jdGlvbiBsZWZ0U2hpZnQobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmxlZnRTaGlmdCh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnQgPSBmdW5jdGlvbiBzaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0KHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5zaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0TSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRTID0gZnVuY3Rpb24gc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdFModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopID4+IHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRNID0gZnVuY3Rpb24gc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdE0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSA+PiBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdCA9IGZ1bmN0aW9uIHNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnQobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnQodmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5yaWdodFNoaWZ0ID0gZnVuY3Rpb24gcmlnaHRTaGlmdCh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5yaWdodFNoaWZ0Uyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMucmlnaHRTaGlmdE0odmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5yaWdodFNoaWZ0UyA9IGZ1bmN0aW9uIHJpZ2h0U2hpZnRTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSA+Pj4gdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUucmlnaHRTaGlmdE0gPSBmdW5jdGlvbiByaWdodFNoaWZ0TShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopID4+PiBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucmlnaHRTaGlmdCA9IGZ1bmN0aW9uIHJpZ2h0U2hpZnQobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnJpZ2h0U2hpZnQodmFsdWUpO1xuICB9O1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuemVyb0ZpbGxSaWdodFNoaWZ0ID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnJpZ2h0U2hpZnQ7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS56ZXJvRmlsbFJpZ2h0U2hpZnRTID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnJpZ2h0U2hpZnRTO1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuemVyb0ZpbGxSaWdodFNoaWZ0TSA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5yaWdodFNoaWZ0TTtcbiAgQWJzdHJhY3RNYXRyaXguemVyb0ZpbGxSaWdodFNoaWZ0ID0gQWJzdHJhY3RNYXRyaXgucmlnaHRTaGlmdDtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubm90ID0gZnVuY3Rpb24gbm90KCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgfih0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5ub3QgPSBmdW5jdGlvbiBub3QobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubm90KCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmFicyA9IGZ1bmN0aW9uIGFicygpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguYWJzKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmFicyA9IGZ1bmN0aW9uIGFicyhtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5hYnMoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYWNvcyA9IGZ1bmN0aW9uIGFjb3MoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmFjb3ModGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguYWNvcyA9IGZ1bmN0aW9uIGFjb3MobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguYWNvcygpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hY29zaCA9IGZ1bmN0aW9uIGFjb3NoKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5hY29zaCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5hY29zaCA9IGZ1bmN0aW9uIGFjb3NoKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmFjb3NoKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmFzaW4gPSBmdW5jdGlvbiBhc2luKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5hc2luKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmFzaW4gPSBmdW5jdGlvbiBhc2luKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmFzaW4oKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYXNpbmggPSBmdW5jdGlvbiBhc2luaCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguYXNpbmgodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguYXNpbmggPSBmdW5jdGlvbiBhc2luaChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5hc2luaCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hdGFuID0gZnVuY3Rpb24gYXRhbigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguYXRhbih0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5hdGFuID0gZnVuY3Rpb24gYXRhbihtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5hdGFuKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmF0YW5oID0gZnVuY3Rpb24gYXRhbmgoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmF0YW5oKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmF0YW5oID0gZnVuY3Rpb24gYXRhbmgobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguYXRhbmgoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuY2JydCA9IGZ1bmN0aW9uIGNicnQoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmNicnQodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguY2JydCA9IGZ1bmN0aW9uIGNicnQobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguY2JydCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5jZWlsID0gZnVuY3Rpb24gY2VpbCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguY2VpbCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5jZWlsID0gZnVuY3Rpb24gY2VpbChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5jZWlsKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmNsejMyID0gZnVuY3Rpb24gY2x6MzIoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmNsejMyKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmNsejMyID0gZnVuY3Rpb24gY2x6MzIobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguY2x6MzIoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuY29zID0gZnVuY3Rpb24gY29zKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5jb3ModGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguY29zID0gZnVuY3Rpb24gY29zKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmNvcygpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5jb3NoID0gZnVuY3Rpb24gY29zaCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguY29zaCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5jb3NoID0gZnVuY3Rpb24gY29zaChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5jb3NoKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmV4cCA9IGZ1bmN0aW9uIGV4cCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguZXhwKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmV4cCA9IGZ1bmN0aW9uIGV4cChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5leHAoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZXhwbTEgPSBmdW5jdGlvbiBleHBtMSgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguZXhwbTEodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguZXhwbTEgPSBmdW5jdGlvbiBleHBtMShtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5leHBtMSgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5mbG9vciA9IGZ1bmN0aW9uIGZsb29yKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5mbG9vcih0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5mbG9vciA9IGZ1bmN0aW9uIGZsb29yKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmZsb29yKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmZyb3VuZCA9IGZ1bmN0aW9uIGZyb3VuZCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguZnJvdW5kKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmZyb3VuZCA9IGZ1bmN0aW9uIGZyb3VuZChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5mcm91bmQoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubG9nID0gZnVuY3Rpb24gbG9nKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5sb2codGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgubG9nID0gZnVuY3Rpb24gbG9nKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmxvZygpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5sb2cxcCA9IGZ1bmN0aW9uIGxvZzFwKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5sb2cxcCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5sb2cxcCA9IGZ1bmN0aW9uIGxvZzFwKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmxvZzFwKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmxvZzEwID0gZnVuY3Rpb24gbG9nMTAoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmxvZzEwKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmxvZzEwID0gZnVuY3Rpb24gbG9nMTAobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubG9nMTAoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubG9nMiA9IGZ1bmN0aW9uIGxvZzIoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmxvZzIodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgubG9nMiA9IGZ1bmN0aW9uIGxvZzIobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubG9nMigpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5yb3VuZCA9IGZ1bmN0aW9uIHJvdW5kKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5yb3VuZCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5yb3VuZCA9IGZ1bmN0aW9uIHJvdW5kKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnJvdW5kKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnNpZ24gPSBmdW5jdGlvbiBzaWduKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5zaWduKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnNpZ24gPSBmdW5jdGlvbiBzaWduKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnNpZ24oKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc2luID0gZnVuY3Rpb24gc2luKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5zaW4odGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguc2luID0gZnVuY3Rpb24gc2luKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnNpbigpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zaW5oID0gZnVuY3Rpb24gc2luaCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguc2luaCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5zaW5oID0gZnVuY3Rpb24gc2luaChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5zaW5oKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnNxcnQgPSBmdW5jdGlvbiBzcXJ0KCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5zcXJ0KHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnNxcnQgPSBmdW5jdGlvbiBzcXJ0KG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnNxcnQoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUudGFuID0gZnVuY3Rpb24gdGFuKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC50YW4odGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgudGFuID0gZnVuY3Rpb24gdGFuKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnRhbigpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS50YW5oID0gZnVuY3Rpb24gdGFuaCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGgudGFuaCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC50YW5oID0gZnVuY3Rpb24gdGFuaChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC50YW5oKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnRydW5jID0gZnVuY3Rpb24gdHJ1bmMoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnRydW5jKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnRydW5jID0gZnVuY3Rpb24gdHJ1bmMobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgudHJ1bmMoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wb3cgPSBmdW5jdGlvbiBwb3cobWF0cml4LCBhcmcwKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgucG93KGFyZzApO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5wb3cgPSBmdW5jdGlvbiBwb3codmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMucG93Uyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMucG93TSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnBvd1MgPSBmdW5jdGlvbiBwb3dTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnBvdyh0aGlzLmdldChpLCBqKSwgdmFsdWUpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnBvd00gPSBmdW5jdGlvbiBwb3dNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5wb3codGhpcy5nZXQoaSwgaiksIG1hdHJpeC5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG59XG4iLCJpbXBvcnQgcmVzY2FsZSBmcm9tICdtbC1hcnJheS1yZXNjYWxlJztcblxuaW1wb3J0IHsgaW5zcGVjdE1hdHJpeCwgaW5zcGVjdE1hdHJpeFdpdGhPcHRpb25zIH0gZnJvbSAnLi9pbnNwZWN0JztcbmltcG9ydCB7IGluc3RhbGxNYXRoT3BlcmF0aW9ucyB9IGZyb20gJy4vbWF0aE9wZXJhdGlvbnMnO1xuaW1wb3J0IHtcbiAgc3VtQnlSb3csXG4gIHN1bUJ5Q29sdW1uLFxuICBzdW1BbGwsXG4gIHByb2R1Y3RCeVJvdyxcbiAgcHJvZHVjdEJ5Q29sdW1uLFxuICBwcm9kdWN0QWxsLFxuICB2YXJpYW5jZUJ5Um93LFxuICB2YXJpYW5jZUJ5Q29sdW1uLFxuICB2YXJpYW5jZUFsbCxcbiAgY2VudGVyQnlSb3csXG4gIGNlbnRlckJ5Q29sdW1uLFxuICBjZW50ZXJBbGwsXG4gIHNjYWxlQnlSb3csXG4gIHNjYWxlQnlDb2x1bW4sXG4gIHNjYWxlQWxsLFxuICBnZXRTY2FsZUJ5Um93LFxuICBnZXRTY2FsZUJ5Q29sdW1uLFxuICBnZXRTY2FsZUFsbCxcbn0gZnJvbSAnLi9zdGF0JztcbmltcG9ydCB7XG4gIGNoZWNrUm93VmVjdG9yLFxuICBjaGVja1Jvd0luZGV4LFxuICBjaGVja0NvbHVtbkluZGV4LFxuICBjaGVja0NvbHVtblZlY3RvcixcbiAgY2hlY2tSYW5nZSxcbiAgY2hlY2tJbmRpY2VzLFxuICBjaGVja05vbkVtcHR5LFxufSBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RNYXRyaXgge1xuICBzdGF0aWMgZnJvbTFEQXJyYXkobmV3Um93cywgbmV3Q29sdW1ucywgbmV3RGF0YSkge1xuICAgIGxldCBsZW5ndGggPSBuZXdSb3dzICogbmV3Q29sdW1ucztcbiAgICBpZiAobGVuZ3RoICE9PSBuZXdEYXRhLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2RhdGEgbGVuZ3RoIGRvZXMgbm90IG1hdGNoIGdpdmVuIGRpbWVuc2lvbnMnKTtcbiAgICB9XG4gICAgbGV0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobmV3Um93cywgbmV3Q29sdW1ucyk7XG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgbmV3Um93czsgcm93KyspIHtcbiAgICAgIGZvciAobGV0IGNvbHVtbiA9IDA7IGNvbHVtbiA8IG5ld0NvbHVtbnM7IGNvbHVtbisrKSB7XG4gICAgICAgIG5ld01hdHJpeC5zZXQocm93LCBjb2x1bW4sIG5ld0RhdGFbcm93ICogbmV3Q29sdW1ucyArIGNvbHVtbl0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgc3RhdGljIHJvd1ZlY3RvcihuZXdEYXRhKSB7XG4gICAgbGV0IHZlY3RvciA9IG5ldyBNYXRyaXgoMSwgbmV3RGF0YS5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3RGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgdmVjdG9yLnNldCgwLCBpLCBuZXdEYXRhW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHZlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBjb2x1bW5WZWN0b3IobmV3RGF0YSkge1xuICAgIGxldCB2ZWN0b3IgPSBuZXcgTWF0cml4KG5ld0RhdGEubGVuZ3RoLCAxKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld0RhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZlY3Rvci5zZXQoaSwgMCwgbmV3RGF0YVtpXSk7XG4gICAgfVxuICAgIHJldHVybiB2ZWN0b3I7XG4gIH1cblxuICBzdGF0aWMgemVyb3Mocm93cywgY29sdW1ucykge1xuICAgIHJldHVybiBuZXcgTWF0cml4KHJvd3MsIGNvbHVtbnMpO1xuICB9XG5cbiAgc3RhdGljIG9uZXMocm93cywgY29sdW1ucykge1xuICAgIHJldHVybiBuZXcgTWF0cml4KHJvd3MsIGNvbHVtbnMpLmZpbGwoMSk7XG4gIH1cblxuICBzdGF0aWMgcmFuZChyb3dzLCBjb2x1bW5zLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHsgcmFuZG9tID0gTWF0aC5yYW5kb20gfSA9IG9wdGlvbnM7XG4gICAgbGV0IG1hdHJpeCA9IG5ldyBNYXRyaXgocm93cywgY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAgIG1hdHJpeC5zZXQoaSwgaiwgcmFuZG9tKCkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF0cml4O1xuICB9XG5cbiAgc3RhdGljIHJhbmRJbnQocm93cywgY29sdW1ucywgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCB7IG1pbiA9IDAsIG1heCA9IDEwMDAsIHJhbmRvbSA9IE1hdGgucmFuZG9tIH0gPSBvcHRpb25zO1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihtaW4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdtaW4gbXVzdCBiZSBhbiBpbnRlZ2VyJyk7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ21heCBtdXN0IGJlIGFuIGludGVnZXInKTtcbiAgICBpZiAobWluID49IG1heCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ21pbiBtdXN0IGJlIHNtYWxsZXIgdGhhbiBtYXgnKTtcbiAgICBsZXQgaW50ZXJ2YWwgPSBtYXggLSBtaW47XG4gICAgbGV0IG1hdHJpeCA9IG5ldyBNYXRyaXgocm93cywgY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IG1pbiArIE1hdGgucm91bmQocmFuZG9tKCkgKiBpbnRlcnZhbCk7XG4gICAgICAgIG1hdHJpeC5zZXQoaSwgaiwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF0cml4O1xuICB9XG5cbiAgc3RhdGljIGV5ZShyb3dzLCBjb2x1bW5zLCB2YWx1ZSkge1xuICAgIGlmIChjb2x1bW5zID09PSB1bmRlZmluZWQpIGNvbHVtbnMgPSByb3dzO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB2YWx1ZSA9IDE7XG4gICAgbGV0IG1pbiA9IE1hdGgubWluKHJvd3MsIGNvbHVtbnMpO1xuICAgIGxldCBtYXRyaXggPSB0aGlzLnplcm9zKHJvd3MsIGNvbHVtbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWluOyBpKyspIHtcbiAgICAgIG1hdHJpeC5zZXQoaSwgaSwgdmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gbWF0cml4O1xuICB9XG5cbiAgc3RhdGljIGRpYWcoZGF0YSwgcm93cywgY29sdW1ucykge1xuICAgIGxldCBsID0gZGF0YS5sZW5ndGg7XG4gICAgaWYgKHJvd3MgPT09IHVuZGVmaW5lZCkgcm93cyA9IGw7XG4gICAgaWYgKGNvbHVtbnMgPT09IHVuZGVmaW5lZCkgY29sdW1ucyA9IHJvd3M7XG4gICAgbGV0IG1pbiA9IE1hdGgubWluKGwsIHJvd3MsIGNvbHVtbnMpO1xuICAgIGxldCBtYXRyaXggPSB0aGlzLnplcm9zKHJvd3MsIGNvbHVtbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWluOyBpKyspIHtcbiAgICAgIG1hdHJpeC5zZXQoaSwgaSwgZGF0YVtpXSk7XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cblxuICBzdGF0aWMgbWluKG1hdHJpeDEsIG1hdHJpeDIpIHtcbiAgICBtYXRyaXgxID0gdGhpcy5jaGVja01hdHJpeChtYXRyaXgxKTtcbiAgICBtYXRyaXgyID0gdGhpcy5jaGVja01hdHJpeChtYXRyaXgyKTtcbiAgICBsZXQgcm93cyA9IG1hdHJpeDEucm93cztcbiAgICBsZXQgY29sdW1ucyA9IG1hdHJpeDEuY29sdW1ucztcbiAgICBsZXQgcmVzdWx0ID0gbmV3IE1hdHJpeChyb3dzLCBjb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgcmVzdWx0LnNldChpLCBqLCBNYXRoLm1pbihtYXRyaXgxLmdldChpLCBqKSwgbWF0cml4Mi5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0YXRpYyBtYXgobWF0cml4MSwgbWF0cml4Mikge1xuICAgIG1hdHJpeDEgPSB0aGlzLmNoZWNrTWF0cml4KG1hdHJpeDEpO1xuICAgIG1hdHJpeDIgPSB0aGlzLmNoZWNrTWF0cml4KG1hdHJpeDIpO1xuICAgIGxldCByb3dzID0gbWF0cml4MS5yb3dzO1xuICAgIGxldCBjb2x1bW5zID0gbWF0cml4MS5jb2x1bW5zO1xuICAgIGxldCByZXN1bHQgPSBuZXcgdGhpcyhyb3dzLCBjb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgcmVzdWx0LnNldChpLCBqLCBNYXRoLm1heChtYXRyaXgxLmdldChpLCBqKSwgbWF0cml4Mi5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0YXRpYyBjaGVja01hdHJpeCh2YWx1ZSkge1xuICAgIHJldHVybiBBYnN0cmFjdE1hdHJpeC5pc01hdHJpeCh2YWx1ZSkgPyB2YWx1ZSA6IG5ldyBNYXRyaXgodmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGlzTWF0cml4KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdmFsdWUua2xhc3MgPT09ICdNYXRyaXgnO1xuICB9XG5cbiAgZ2V0IHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMucm93cyAqIHRoaXMuY29sdW1ucztcbiAgfVxuXG4gIGFwcGx5KGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzLCBpLCBqKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB0bzFEQXJyYXkoKSB7XG4gICAgbGV0IGFycmF5ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBhcnJheS5wdXNoKHRoaXMuZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgdG8yREFycmF5KCkge1xuICAgIGxldCBjb3B5ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgY29weS5wdXNoKFtdKTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgY29weVtpXS5wdXNoKHRoaXMuZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8yREFycmF5KCk7XG4gIH1cblxuICBpc1Jvd1ZlY3RvcigpIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzID09PSAxO1xuICB9XG5cbiAgaXNDb2x1bW5WZWN0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucyA9PT0gMTtcbiAgfVxuXG4gIGlzVmVjdG9yKCkge1xuICAgIHJldHVybiB0aGlzLnJvd3MgPT09IDEgfHwgdGhpcy5jb2x1bW5zID09PSAxO1xuICB9XG5cbiAgaXNTcXVhcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMucm93cyA9PT0gdGhpcy5jb2x1bW5zO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzID09PSAwIHx8IHRoaXMuY29sdW1ucyA9PT0gMDtcbiAgfVxuXG4gIGlzU3ltbWV0cmljKCkge1xuICAgIGlmICh0aGlzLmlzU3F1YXJlKCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPD0gaTsgaisrKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZ2V0KGksIGopICE9PSB0aGlzLmdldChqLCBpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlzRWNoZWxvbkZvcm0oKSB7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBqID0gMDtcbiAgICBsZXQgcHJldmlvdXNDb2x1bW4gPSAtMTtcbiAgICBsZXQgaXNFY2hlbG9uRm9ybSA9IHRydWU7XG4gICAgbGV0IGNoZWNrZWQgPSBmYWxzZTtcbiAgICB3aGlsZSAoaSA8IHRoaXMucm93cyAmJiBpc0VjaGVsb25Gb3JtKSB7XG4gICAgICBqID0gMDtcbiAgICAgIGNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIHdoaWxlIChqIDwgdGhpcy5jb2x1bW5zICYmIGNoZWNrZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLmdldChpLCBqKSA9PT0gMCkge1xuICAgICAgICAgIGorKztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldChpLCBqKSA9PT0gMSAmJiBqID4gcHJldmlvdXNDb2x1bW4pIHtcbiAgICAgICAgICBjaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICBwcmV2aW91c0NvbHVtbiA9IGo7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXNFY2hlbG9uRm9ybSA9IGZhbHNlO1xuICAgICAgICAgIGNoZWNrZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiBpc0VjaGVsb25Gb3JtO1xuICB9XG5cbiAgaXNSZWR1Y2VkRWNoZWxvbkZvcm0oKSB7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBqID0gMDtcbiAgICBsZXQgcHJldmlvdXNDb2x1bW4gPSAtMTtcbiAgICBsZXQgaXNSZWR1Y2VkRWNoZWxvbkZvcm0gPSB0cnVlO1xuICAgIGxldCBjaGVja2VkID0gZmFsc2U7XG4gICAgd2hpbGUgKGkgPCB0aGlzLnJvd3MgJiYgaXNSZWR1Y2VkRWNoZWxvbkZvcm0pIHtcbiAgICAgIGogPSAwO1xuICAgICAgY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgd2hpbGUgKGogPCB0aGlzLmNvbHVtbnMgJiYgY2hlY2tlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0KGksIGopID09PSAwKSB7XG4gICAgICAgICAgaisrO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0KGksIGopID09PSAxICYmIGogPiBwcmV2aW91c0NvbHVtbikge1xuICAgICAgICAgIGNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgIHByZXZpb3VzQ29sdW1uID0gajtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpc1JlZHVjZWRFY2hlbG9uRm9ybSA9IGZhbHNlO1xuICAgICAgICAgIGNoZWNrZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBrID0gaiArIDE7IGsgPCB0aGlzLnJvd3M7IGsrKykge1xuICAgICAgICBpZiAodGhpcy5nZXQoaSwgaykgIT09IDApIHtcbiAgICAgICAgICBpc1JlZHVjZWRFY2hlbG9uRm9ybSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiBpc1JlZHVjZWRFY2hlbG9uRm9ybTtcbiAgfVxuXG4gIGVjaGVsb25Gb3JtKCkge1xuICAgIGxldCByZXN1bHQgPSB0aGlzLmNsb25lKCk7XG4gICAgbGV0IGggPSAwO1xuICAgIGxldCBrID0gMDtcbiAgICB3aGlsZSAoaCA8IHJlc3VsdC5yb3dzICYmIGsgPCByZXN1bHQuY29sdW1ucykge1xuICAgICAgbGV0IGlNYXggPSBoO1xuICAgICAgZm9yIChsZXQgaSA9IGg7IGkgPCByZXN1bHQucm93czsgaSsrKSB7XG4gICAgICAgIGlmIChyZXN1bHQuZ2V0KGksIGspID4gcmVzdWx0LmdldChpTWF4LCBrKSkge1xuICAgICAgICAgIGlNYXggPSBpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0LmdldChpTWF4LCBrKSA9PT0gMCkge1xuICAgICAgICBrKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQuc3dhcFJvd3MoaCwgaU1heCk7XG4gICAgICAgIGxldCB0bXAgPSByZXN1bHQuZ2V0KGgsIGspO1xuICAgICAgICBmb3IgKGxldCBqID0gazsgaiA8IHJlc3VsdC5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgICByZXN1bHQuc2V0KGgsIGosIHJlc3VsdC5nZXQoaCwgaikgLyB0bXApO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSBoICsgMTsgaSA8IHJlc3VsdC5yb3dzOyBpKyspIHtcbiAgICAgICAgICBsZXQgZmFjdG9yID0gcmVzdWx0LmdldChpLCBrKSAvIHJlc3VsdC5nZXQoaCwgayk7XG4gICAgICAgICAgcmVzdWx0LnNldChpLCBrLCAwKTtcbiAgICAgICAgICBmb3IgKGxldCBqID0gayArIDE7IGogPCByZXN1bHQuY29sdW1uczsgaisrKSB7XG4gICAgICAgICAgICByZXN1bHQuc2V0KGksIGosIHJlc3VsdC5nZXQoaSwgaikgLSByZXN1bHQuZ2V0KGgsIGopICogZmFjdG9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaCsrO1xuICAgICAgICBrKys7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZWR1Y2VkRWNoZWxvbkZvcm0oKSB7XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuZWNoZWxvbkZvcm0oKTtcbiAgICBsZXQgbSA9IHJlc3VsdC5jb2x1bW5zO1xuICAgIGxldCBuID0gcmVzdWx0LnJvd3M7XG4gICAgbGV0IGggPSBuIC0gMTtcbiAgICB3aGlsZSAoaCA+PSAwKSB7XG4gICAgICBpZiAocmVzdWx0Lm1heFJvdyhoKSA9PT0gMCkge1xuICAgICAgICBoLS07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcCA9IDA7XG4gICAgICAgIGxldCBwaXZvdCA9IGZhbHNlO1xuICAgICAgICB3aGlsZSAocCA8IG4gJiYgcGl2b3QgPT09IGZhbHNlKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdC5nZXQoaCwgcCkgPT09IDEpIHtcbiAgICAgICAgICAgIHBpdm90ID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGg7IGkrKykge1xuICAgICAgICAgIGxldCBmYWN0b3IgPSByZXN1bHQuZ2V0KGksIHApO1xuICAgICAgICAgIGZvciAobGV0IGogPSBwOyBqIDwgbTsgaisrKSB7XG4gICAgICAgICAgICBsZXQgdG1wID0gcmVzdWx0LmdldChpLCBqKSAtIGZhY3RvciAqIHJlc3VsdC5nZXQoaCwgaik7XG4gICAgICAgICAgICByZXN1bHQuc2V0KGksIGosIHRtcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGgtLTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHNldCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldCBtZXRob2QgaXMgdW5pbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZ2V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZ2V0IG1ldGhvZCBpcyB1bmltcGxlbWVudGVkJyk7XG4gIH1cblxuICByZXBlYXQob3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCB7IHJvd3MgPSAxLCBjb2x1bW5zID0gMSB9ID0gb3B0aW9ucztcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIocm93cykgfHwgcm93cyA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyb3dzIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgfVxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihjb2x1bW5zKSB8fCBjb2x1bW5zIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NvbHVtbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICB9XG4gICAgbGV0IG1hdHJpeCA9IG5ldyBNYXRyaXgodGhpcy5yb3dzICogcm93cywgdGhpcy5jb2x1bW5zICogY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAgIG1hdHJpeC5zZXRTdWJNYXRyaXgodGhpcywgdGhpcy5yb3dzICogaSwgdGhpcy5jb2x1bW5zICogaik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cblxuICBmaWxsKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbmVnKCkge1xuICAgIHJldHVybiB0aGlzLm11bFMoLTEpO1xuICB9XG5cbiAgZ2V0Um93KGluZGV4KSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCBpbmRleCk7XG4gICAgbGV0IHJvdyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgIHJvdy5wdXNoKHRoaXMuZ2V0KGluZGV4LCBpKSk7XG4gICAgfVxuICAgIHJldHVybiByb3c7XG4gIH1cblxuICBnZXRSb3dWZWN0b3IoaW5kZXgpIHtcbiAgICByZXR1cm4gTWF0cml4LnJvd1ZlY3Rvcih0aGlzLmdldFJvdyhpbmRleCkpO1xuICB9XG5cbiAgc2V0Um93KGluZGV4LCBhcnJheSkge1xuICAgIGNoZWNrUm93SW5kZXgodGhpcywgaW5kZXgpO1xuICAgIGFycmF5ID0gY2hlY2tSb3dWZWN0b3IodGhpcywgYXJyYXkpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgIHRoaXMuc2V0KGluZGV4LCBpLCBhcnJheVtpXSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3dhcFJvd3Mocm93MSwgcm93Mikge1xuICAgIGNoZWNrUm93SW5kZXgodGhpcywgcm93MSk7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCByb3cyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7XG4gICAgICBsZXQgdGVtcCA9IHRoaXMuZ2V0KHJvdzEsIGkpO1xuICAgICAgdGhpcy5zZXQocm93MSwgaSwgdGhpcy5nZXQocm93MiwgaSkpO1xuICAgICAgdGhpcy5zZXQocm93MiwgaSwgdGVtcCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0Q29sdW1uKGluZGV4KSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBpbmRleCk7XG4gICAgbGV0IGNvbHVtbiA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGNvbHVtbi5wdXNoKHRoaXMuZ2V0KGksIGluZGV4KSk7XG4gICAgfVxuICAgIHJldHVybiBjb2x1bW47XG4gIH1cblxuICBnZXRDb2x1bW5WZWN0b3IoaW5kZXgpIHtcbiAgICByZXR1cm4gTWF0cml4LmNvbHVtblZlY3Rvcih0aGlzLmdldENvbHVtbihpbmRleCkpO1xuICB9XG5cbiAgc2V0Q29sdW1uKGluZGV4LCBhcnJheSkge1xuICAgIGNoZWNrQ29sdW1uSW5kZXgodGhpcywgaW5kZXgpO1xuICAgIGFycmF5ID0gY2hlY2tDb2x1bW5WZWN0b3IodGhpcywgYXJyYXkpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIHRoaXMuc2V0KGksIGluZGV4LCBhcnJheVtpXSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3dhcENvbHVtbnMoY29sdW1uMSwgY29sdW1uMikge1xuICAgIGNoZWNrQ29sdW1uSW5kZXgodGhpcywgY29sdW1uMSk7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBjb2x1bW4yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBsZXQgdGVtcCA9IHRoaXMuZ2V0KGksIGNvbHVtbjEpO1xuICAgICAgdGhpcy5zZXQoaSwgY29sdW1uMSwgdGhpcy5nZXQoaSwgY29sdW1uMikpO1xuICAgICAgdGhpcy5zZXQoaSwgY29sdW1uMiwgdGVtcCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkUm93VmVjdG9yKHZlY3Rvcikge1xuICAgIHZlY3RvciA9IGNoZWNrUm93VmVjdG9yKHRoaXMsIHZlY3Rvcik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSArIHZlY3RvcltqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3ViUm93VmVjdG9yKHZlY3Rvcikge1xuICAgIHZlY3RvciA9IGNoZWNrUm93VmVjdG9yKHRoaXMsIHZlY3Rvcik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAtIHZlY3RvcltqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbXVsUm93VmVjdG9yKHZlY3Rvcikge1xuICAgIHZlY3RvciA9IGNoZWNrUm93VmVjdG9yKHRoaXMsIHZlY3Rvcik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAqIHZlY3RvcltqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZGl2Um93VmVjdG9yKHZlY3Rvcikge1xuICAgIHZlY3RvciA9IGNoZWNrUm93VmVjdG9yKHRoaXMsIHZlY3Rvcik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAvIHZlY3RvcltqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkQ29sdW1uVmVjdG9yKHZlY3Rvcikge1xuICAgIHZlY3RvciA9IGNoZWNrQ29sdW1uVmVjdG9yKHRoaXMsIHZlY3Rvcik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSArIHZlY3RvcltpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3ViQ29sdW1uVmVjdG9yKHZlY3Rvcikge1xuICAgIHZlY3RvciA9IGNoZWNrQ29sdW1uVmVjdG9yKHRoaXMsIHZlY3Rvcik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAtIHZlY3RvcltpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbXVsQ29sdW1uVmVjdG9yKHZlY3Rvcikge1xuICAgIHZlY3RvciA9IGNoZWNrQ29sdW1uVmVjdG9yKHRoaXMsIHZlY3Rvcik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAqIHZlY3RvcltpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZGl2Q29sdW1uVmVjdG9yKHZlY3Rvcikge1xuICAgIHZlY3RvciA9IGNoZWNrQ29sdW1uVmVjdG9yKHRoaXMsIHZlY3Rvcik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAvIHZlY3RvcltpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbXVsUm93KGluZGV4LCB2YWx1ZSkge1xuICAgIGNoZWNrUm93SW5kZXgodGhpcywgaW5kZXgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgIHRoaXMuc2V0KGluZGV4LCBpLCB0aGlzLmdldChpbmRleCwgaSkgKiB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbXVsQ29sdW1uKGluZGV4LCB2YWx1ZSkge1xuICAgIGNoZWNrQ29sdW1uSW5kZXgodGhpcywgaW5kZXgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIHRoaXMuc2V0KGksIGluZGV4LCB0aGlzLmdldChpLCBpbmRleCkgKiB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbWF4KCkge1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgcmV0dXJuIE5hTjtcbiAgICB9XG4gICAgbGV0IHYgPSB0aGlzLmdldCgwLCAwKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIGlmICh0aGlzLmdldChpLCBqKSA+IHYpIHtcbiAgICAgICAgICB2ID0gdGhpcy5nZXQoaSwgaik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHY7XG4gIH1cblxuICBtYXhJbmRleCgpIHtcbiAgICBjaGVja05vbkVtcHR5KHRoaXMpO1xuICAgIGxldCB2ID0gdGhpcy5nZXQoMCwgMCk7XG4gICAgbGV0IGlkeCA9IFswLCAwXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIGlmICh0aGlzLmdldChpLCBqKSA+IHYpIHtcbiAgICAgICAgICB2ID0gdGhpcy5nZXQoaSwgaik7XG4gICAgICAgICAgaWR4WzBdID0gaTtcbiAgICAgICAgICBpZHhbMV0gPSBqO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZHg7XG4gIH1cblxuICBtaW4oKSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gTmFOO1xuICAgIH1cbiAgICBsZXQgdiA9IHRoaXMuZ2V0KDAsIDApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0KGksIGopIDwgdikge1xuICAgICAgICAgIHYgPSB0aGlzLmdldChpLCBqKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIG1pbkluZGV4KCkge1xuICAgIGNoZWNrTm9uRW1wdHkodGhpcyk7XG4gICAgbGV0IHYgPSB0aGlzLmdldCgwLCAwKTtcbiAgICBsZXQgaWR4ID0gWzAsIDBdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0KGksIGopIDwgdikge1xuICAgICAgICAgIHYgPSB0aGlzLmdldChpLCBqKTtcbiAgICAgICAgICBpZHhbMF0gPSBpO1xuICAgICAgICAgIGlkeFsxXSA9IGo7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkeDtcbiAgfVxuXG4gIG1heFJvdyhyb3cpIHtcbiAgICBjaGVja1Jvd0luZGV4KHRoaXMsIHJvdyk7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gTmFOO1xuICAgIH1cbiAgICBsZXQgdiA9IHRoaXMuZ2V0KHJvdywgMCk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZ2V0KHJvdywgaSkgPiB2KSB7XG4gICAgICAgIHYgPSB0aGlzLmdldChyb3csIGkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIG1heFJvd0luZGV4KHJvdykge1xuICAgIGNoZWNrUm93SW5kZXgodGhpcywgcm93KTtcbiAgICBjaGVja05vbkVtcHR5KHRoaXMpO1xuICAgIGxldCB2ID0gdGhpcy5nZXQocm93LCAwKTtcbiAgICBsZXQgaWR4ID0gW3JvdywgMF07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZ2V0KHJvdywgaSkgPiB2KSB7XG4gICAgICAgIHYgPSB0aGlzLmdldChyb3csIGkpO1xuICAgICAgICBpZHhbMV0gPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaWR4O1xuICB9XG5cbiAgbWluUm93KHJvdykge1xuICAgIGNoZWNrUm93SW5kZXgodGhpcywgcm93KTtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIGxldCB2ID0gdGhpcy5nZXQocm93LCAwKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQocm93LCBpKSA8IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KHJvdywgaSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2O1xuICB9XG5cbiAgbWluUm93SW5kZXgocm93KSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCByb3cpO1xuICAgIGNoZWNrTm9uRW1wdHkodGhpcyk7XG4gICAgbGV0IHYgPSB0aGlzLmdldChyb3csIDApO1xuICAgIGxldCBpZHggPSBbcm93LCAwXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQocm93LCBpKSA8IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KHJvdywgaSk7XG4gICAgICAgIGlkeFsxXSA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZHg7XG4gIH1cblxuICBtYXhDb2x1bW4oY29sdW1uKSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBjb2x1bW4pO1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgcmV0dXJuIE5hTjtcbiAgICB9XG4gICAgbGV0IHYgPSB0aGlzLmdldCgwLCBjb2x1bW4pO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmdldChpLCBjb2x1bW4pID4gdikge1xuICAgICAgICB2ID0gdGhpcy5nZXQoaSwgY29sdW1uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHY7XG4gIH1cblxuICBtYXhDb2x1bW5JbmRleChjb2x1bW4pIHtcbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGNvbHVtbik7XG4gICAgY2hlY2tOb25FbXB0eSh0aGlzKTtcbiAgICBsZXQgdiA9IHRoaXMuZ2V0KDAsIGNvbHVtbik7XG4gICAgbGV0IGlkeCA9IFswLCBjb2x1bW5dO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmdldChpLCBjb2x1bW4pID4gdikge1xuICAgICAgICB2ID0gdGhpcy5nZXQoaSwgY29sdW1uKTtcbiAgICAgICAgaWR4WzBdID0gaTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkeDtcbiAgfVxuXG4gIG1pbkNvbHVtbihjb2x1bW4pIHtcbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGNvbHVtbik7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gTmFOO1xuICAgIH1cbiAgICBsZXQgdiA9IHRoaXMuZ2V0KDAsIGNvbHVtbik7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZ2V0KGksIGNvbHVtbikgPCB2KSB7XG4gICAgICAgIHYgPSB0aGlzLmdldChpLCBjb2x1bW4pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIG1pbkNvbHVtbkluZGV4KGNvbHVtbikge1xuICAgIGNoZWNrQ29sdW1uSW5kZXgodGhpcywgY29sdW1uKTtcbiAgICBjaGVja05vbkVtcHR5KHRoaXMpO1xuICAgIGxldCB2ID0gdGhpcy5nZXQoMCwgY29sdW1uKTtcbiAgICBsZXQgaWR4ID0gWzAsIGNvbHVtbl07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZ2V0KGksIGNvbHVtbikgPCB2KSB7XG4gICAgICAgIHYgPSB0aGlzLmdldChpLCBjb2x1bW4pO1xuICAgICAgICBpZHhbMF0gPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaWR4O1xuICB9XG5cbiAgZGlhZygpIHtcbiAgICBsZXQgbWluID0gTWF0aC5taW4odGhpcy5yb3dzLCB0aGlzLmNvbHVtbnMpO1xuICAgIGxldCBkaWFnID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaW47IGkrKykge1xuICAgICAgZGlhZy5wdXNoKHRoaXMuZ2V0KGksIGkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGRpYWc7XG4gIH1cblxuICBub3JtKHR5cGUgPSAnZnJvYmVuaXVzJykge1xuICAgIGxldCByZXN1bHQgPSAwO1xuICAgIGlmICh0eXBlID09PSAnbWF4Jykge1xuICAgICAgcmV0dXJuIHRoaXMubWF4KCk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnZnJvYmVuaXVzJykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgdGhpcy5nZXQoaSwgaikgKiB0aGlzLmdldChpLCBqKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE1hdGguc3FydChyZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgdW5rbm93biBub3JtIHR5cGU6ICR7dHlwZX1gKTtcbiAgICB9XG4gIH1cblxuICBjdW11bGF0aXZlU3VtKCkge1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgc3VtICs9IHRoaXMuZ2V0KGksIGopO1xuICAgICAgICB0aGlzLnNldChpLCBqLCBzdW0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGRvdCh2ZWN0b3IyKSB7XG4gICAgaWYgKEFic3RyYWN0TWF0cml4LmlzTWF0cml4KHZlY3RvcjIpKSB2ZWN0b3IyID0gdmVjdG9yMi50bzFEQXJyYXkoKTtcbiAgICBsZXQgdmVjdG9yMSA9IHRoaXMudG8xREFycmF5KCk7XG4gICAgaWYgKHZlY3RvcjEubGVuZ3RoICE9PSB2ZWN0b3IyLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3ZlY3RvcnMgZG8gbm90IGhhdmUgdGhlIHNhbWUgc2l6ZScpO1xuICAgIH1cbiAgICBsZXQgZG90ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZlY3RvcjEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRvdCArPSB2ZWN0b3IxW2ldICogdmVjdG9yMltpXTtcbiAgICB9XG4gICAgcmV0dXJuIGRvdDtcbiAgfVxuXG4gIG1tdWwob3RoZXIpIHtcbiAgICBvdGhlciA9IE1hdHJpeC5jaGVja01hdHJpeChvdGhlcik7XG5cbiAgICBsZXQgbSA9IHRoaXMucm93cztcbiAgICBsZXQgbiA9IHRoaXMuY29sdW1ucztcbiAgICBsZXQgcCA9IG90aGVyLmNvbHVtbnM7XG5cbiAgICBsZXQgcmVzdWx0ID0gbmV3IE1hdHJpeChtLCBwKTtcblxuICAgIGxldCBCY29saiA9IG5ldyBGbG9hdDY0QXJyYXkobik7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBwOyBqKyspIHtcbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbjsgaysrKSB7XG4gICAgICAgIEJjb2xqW2tdID0gb3RoZXIuZ2V0KGssIGopO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgICBsZXQgcyA9IDA7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbjsgaysrKSB7XG4gICAgICAgICAgcyArPSB0aGlzLmdldChpLCBrKSAqIEJjb2xqW2tdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0LnNldChpLCBqLCBzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0cmFzc2VuMngyKG90aGVyKSB7XG4gICAgb3RoZXIgPSBNYXRyaXguY2hlY2tNYXRyaXgob3RoZXIpO1xuICAgIGxldCByZXN1bHQgPSBuZXcgTWF0cml4KDIsIDIpO1xuICAgIGNvbnN0IGExMSA9IHRoaXMuZ2V0KDAsIDApO1xuICAgIGNvbnN0IGIxMSA9IG90aGVyLmdldCgwLCAwKTtcbiAgICBjb25zdCBhMTIgPSB0aGlzLmdldCgwLCAxKTtcbiAgICBjb25zdCBiMTIgPSBvdGhlci5nZXQoMCwgMSk7XG4gICAgY29uc3QgYTIxID0gdGhpcy5nZXQoMSwgMCk7XG4gICAgY29uc3QgYjIxID0gb3RoZXIuZ2V0KDEsIDApO1xuICAgIGNvbnN0IGEyMiA9IHRoaXMuZ2V0KDEsIDEpO1xuICAgIGNvbnN0IGIyMiA9IG90aGVyLmdldCgxLCAxKTtcblxuICAgIC8vIENvbXB1dGUgaW50ZXJtZWRpYXRlIHZhbHVlcy5cbiAgICBjb25zdCBtMSA9IChhMTEgKyBhMjIpICogKGIxMSArIGIyMik7XG4gICAgY29uc3QgbTIgPSAoYTIxICsgYTIyKSAqIGIxMTtcbiAgICBjb25zdCBtMyA9IGExMSAqIChiMTIgLSBiMjIpO1xuICAgIGNvbnN0IG00ID0gYTIyICogKGIyMSAtIGIxMSk7XG4gICAgY29uc3QgbTUgPSAoYTExICsgYTEyKSAqIGIyMjtcbiAgICBjb25zdCBtNiA9IChhMjEgLSBhMTEpICogKGIxMSArIGIxMik7XG4gICAgY29uc3QgbTcgPSAoYTEyIC0gYTIyKSAqIChiMjEgKyBiMjIpO1xuXG4gICAgLy8gQ29tYmluZSBpbnRlcm1lZGlhdGUgdmFsdWVzIGludG8gdGhlIG91dHB1dC5cbiAgICBjb25zdCBjMDAgPSBtMSArIG00IC0gbTUgKyBtNztcbiAgICBjb25zdCBjMDEgPSBtMyArIG01O1xuICAgIGNvbnN0IGMxMCA9IG0yICsgbTQ7XG4gICAgY29uc3QgYzExID0gbTEgLSBtMiArIG0zICsgbTY7XG5cbiAgICByZXN1bHQuc2V0KDAsIDAsIGMwMCk7XG4gICAgcmVzdWx0LnNldCgwLCAxLCBjMDEpO1xuICAgIHJlc3VsdC5zZXQoMSwgMCwgYzEwKTtcbiAgICByZXN1bHQuc2V0KDEsIDEsIGMxMSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0cmFzc2VuM3gzKG90aGVyKSB7XG4gICAgb3RoZXIgPSBNYXRyaXguY2hlY2tNYXRyaXgob3RoZXIpO1xuICAgIGxldCByZXN1bHQgPSBuZXcgTWF0cml4KDMsIDMpO1xuXG4gICAgY29uc3QgYTAwID0gdGhpcy5nZXQoMCwgMCk7XG4gICAgY29uc3QgYTAxID0gdGhpcy5nZXQoMCwgMSk7XG4gICAgY29uc3QgYTAyID0gdGhpcy5nZXQoMCwgMik7XG4gICAgY29uc3QgYTEwID0gdGhpcy5nZXQoMSwgMCk7XG4gICAgY29uc3QgYTExID0gdGhpcy5nZXQoMSwgMSk7XG4gICAgY29uc3QgYTEyID0gdGhpcy5nZXQoMSwgMik7XG4gICAgY29uc3QgYTIwID0gdGhpcy5nZXQoMiwgMCk7XG4gICAgY29uc3QgYTIxID0gdGhpcy5nZXQoMiwgMSk7XG4gICAgY29uc3QgYTIyID0gdGhpcy5nZXQoMiwgMik7XG5cbiAgICBjb25zdCBiMDAgPSBvdGhlci5nZXQoMCwgMCk7XG4gICAgY29uc3QgYjAxID0gb3RoZXIuZ2V0KDAsIDEpO1xuICAgIGNvbnN0IGIwMiA9IG90aGVyLmdldCgwLCAyKTtcbiAgICBjb25zdCBiMTAgPSBvdGhlci5nZXQoMSwgMCk7XG4gICAgY29uc3QgYjExID0gb3RoZXIuZ2V0KDEsIDEpO1xuICAgIGNvbnN0IGIxMiA9IG90aGVyLmdldCgxLCAyKTtcbiAgICBjb25zdCBiMjAgPSBvdGhlci5nZXQoMiwgMCk7XG4gICAgY29uc3QgYjIxID0gb3RoZXIuZ2V0KDIsIDEpO1xuICAgIGNvbnN0IGIyMiA9IG90aGVyLmdldCgyLCAyKTtcblxuICAgIGNvbnN0IG0xID0gKGEwMCArIGEwMSArIGEwMiAtIGExMCAtIGExMSAtIGEyMSAtIGEyMikgKiBiMTE7XG4gICAgY29uc3QgbTIgPSAoYTAwIC0gYTEwKSAqICgtYjAxICsgYjExKTtcbiAgICBjb25zdCBtMyA9IGExMSAqICgtYjAwICsgYjAxICsgYjEwIC0gYjExIC0gYjEyIC0gYjIwICsgYjIyKTtcbiAgICBjb25zdCBtNCA9ICgtYTAwICsgYTEwICsgYTExKSAqIChiMDAgLSBiMDEgKyBiMTEpO1xuICAgIGNvbnN0IG01ID0gKGExMCArIGExMSkgKiAoLWIwMCArIGIwMSk7XG4gICAgY29uc3QgbTYgPSBhMDAgKiBiMDA7XG4gICAgY29uc3QgbTcgPSAoLWEwMCArIGEyMCArIGEyMSkgKiAoYjAwIC0gYjAyICsgYjEyKTtcbiAgICBjb25zdCBtOCA9ICgtYTAwICsgYTIwKSAqIChiMDIgLSBiMTIpO1xuICAgIGNvbnN0IG05ID0gKGEyMCArIGEyMSkgKiAoLWIwMCArIGIwMik7XG4gICAgY29uc3QgbTEwID0gKGEwMCArIGEwMSArIGEwMiAtIGExMSAtIGExMiAtIGEyMCAtIGEyMSkgKiBiMTI7XG4gICAgY29uc3QgbTExID0gYTIxICogKC1iMDAgKyBiMDIgKyBiMTAgLSBiMTEgLSBiMTIgLSBiMjAgKyBiMjEpO1xuICAgIGNvbnN0IG0xMiA9ICgtYTAyICsgYTIxICsgYTIyKSAqIChiMTEgKyBiMjAgLSBiMjEpO1xuICAgIGNvbnN0IG0xMyA9IChhMDIgLSBhMjIpICogKGIxMSAtIGIyMSk7XG4gICAgY29uc3QgbTE0ID0gYTAyICogYjIwO1xuICAgIGNvbnN0IG0xNSA9IChhMjEgKyBhMjIpICogKC1iMjAgKyBiMjEpO1xuICAgIGNvbnN0IG0xNiA9ICgtYTAyICsgYTExICsgYTEyKSAqIChiMTIgKyBiMjAgLSBiMjIpO1xuICAgIGNvbnN0IG0xNyA9IChhMDIgLSBhMTIpICogKGIxMiAtIGIyMik7XG4gICAgY29uc3QgbTE4ID0gKGExMSArIGExMikgKiAoLWIyMCArIGIyMik7XG4gICAgY29uc3QgbTE5ID0gYTAxICogYjEwO1xuICAgIGNvbnN0IG0yMCA9IGExMiAqIGIyMTtcbiAgICBjb25zdCBtMjEgPSBhMTAgKiBiMDI7XG4gICAgY29uc3QgbTIyID0gYTIwICogYjAxO1xuICAgIGNvbnN0IG0yMyA9IGEyMiAqIGIyMjtcblxuICAgIGNvbnN0IGMwMCA9IG02ICsgbTE0ICsgbTE5O1xuICAgIGNvbnN0IGMwMSA9IG0xICsgbTQgKyBtNSArIG02ICsgbTEyICsgbTE0ICsgbTE1O1xuICAgIGNvbnN0IGMwMiA9IG02ICsgbTcgKyBtOSArIG0xMCArIG0xNCArIG0xNiArIG0xODtcbiAgICBjb25zdCBjMTAgPSBtMiArIG0zICsgbTQgKyBtNiArIG0xNCArIG0xNiArIG0xNztcbiAgICBjb25zdCBjMTEgPSBtMiArIG00ICsgbTUgKyBtNiArIG0yMDtcbiAgICBjb25zdCBjMTIgPSBtMTQgKyBtMTYgKyBtMTcgKyBtMTggKyBtMjE7XG4gICAgY29uc3QgYzIwID0gbTYgKyBtNyArIG04ICsgbTExICsgbTEyICsgbTEzICsgbTE0O1xuICAgIGNvbnN0IGMyMSA9IG0xMiArIG0xMyArIG0xNCArIG0xNSArIG0yMjtcbiAgICBjb25zdCBjMjIgPSBtNiArIG03ICsgbTggKyBtOSArIG0yMztcblxuICAgIHJlc3VsdC5zZXQoMCwgMCwgYzAwKTtcbiAgICByZXN1bHQuc2V0KDAsIDEsIGMwMSk7XG4gICAgcmVzdWx0LnNldCgwLCAyLCBjMDIpO1xuICAgIHJlc3VsdC5zZXQoMSwgMCwgYzEwKTtcbiAgICByZXN1bHQuc2V0KDEsIDEsIGMxMSk7XG4gICAgcmVzdWx0LnNldCgxLCAyLCBjMTIpO1xuICAgIHJlc3VsdC5zZXQoMiwgMCwgYzIwKTtcbiAgICByZXN1bHQuc2V0KDIsIDEsIGMyMSk7XG4gICAgcmVzdWx0LnNldCgyLCAyLCBjMjIpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBtbXVsU3RyYXNzZW4oeSkge1xuICAgIHkgPSBNYXRyaXguY2hlY2tNYXRyaXgoeSk7XG4gICAgbGV0IHggPSB0aGlzLmNsb25lKCk7XG4gICAgbGV0IHIxID0geC5yb3dzO1xuICAgIGxldCBjMSA9IHguY29sdW1ucztcbiAgICBsZXQgcjIgPSB5LnJvd3M7XG4gICAgbGV0IGMyID0geS5jb2x1bW5zO1xuICAgIGlmIChjMSAhPT0gcjIpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBNdWx0aXBseWluZyAke3IxfSB4ICR7YzF9IGFuZCAke3IyfSB4ICR7YzJ9IG1hdHJpeDogZGltZW5zaW9ucyBkbyBub3QgbWF0Y2guYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUHV0IGEgbWF0cml4IGludG8gdGhlIHRvcCBsZWZ0IG9mIGEgbWF0cml4IG9mIHplcm9zLlxuICAgIC8vIGByb3dzYCBhbmQgYGNvbHNgIGFyZSB0aGUgZGltZW5zaW9ucyBvZiB0aGUgb3V0cHV0IG1hdHJpeC5cbiAgICBmdW5jdGlvbiBlbWJlZChtYXQsIHJvd3MsIGNvbHMpIHtcbiAgICAgIGxldCByID0gbWF0LnJvd3M7XG4gICAgICBsZXQgYyA9IG1hdC5jb2x1bW5zO1xuICAgICAgaWYgKHIgPT09IHJvd3MgJiYgYyA9PT0gY29scykge1xuICAgICAgICByZXR1cm4gbWF0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHJlc3VsdGF0ID0gQWJzdHJhY3RNYXRyaXguemVyb3Mocm93cywgY29scyk7XG4gICAgICAgIHJlc3VsdGF0ID0gcmVzdWx0YXQuc2V0U3ViTWF0cml4KG1hdCwgMCwgMCk7XG4gICAgICAgIHJldHVybiByZXN1bHRhdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNYWtlIHN1cmUgYm90aCBtYXRyaWNlcyBhcmUgdGhlIHNhbWUgc2l6ZS5cbiAgICAvLyBUaGlzIGlzIGV4Y2x1c2l2ZWx5IGZvciBzaW1wbGljaXR5OlxuICAgIC8vIHRoaXMgYWxnb3JpdGhtIGNhbiBiZSBpbXBsZW1lbnRlZCB3aXRoIG1hdHJpY2VzIG9mIGRpZmZlcmVudCBzaXplcy5cblxuICAgIGxldCByID0gTWF0aC5tYXgocjEsIHIyKTtcbiAgICBsZXQgYyA9IE1hdGgubWF4KGMxLCBjMik7XG4gICAgeCA9IGVtYmVkKHgsIHIsIGMpO1xuICAgIHkgPSBlbWJlZCh5LCByLCBjKTtcblxuICAgIC8vIE91ciByZWN1cnNpdmUgbXVsdGlwbGljYXRpb24gZnVuY3Rpb24uXG4gICAgZnVuY3Rpb24gYmxvY2tNdWx0KGEsIGIsIHJvd3MsIGNvbHMpIHtcbiAgICAgIC8vIEZvciBzbWFsbCBtYXRyaWNlcywgcmVzb3J0IHRvIG5haXZlIG11bHRpcGxpY2F0aW9uLlxuICAgICAgaWYgKHJvd3MgPD0gNTEyIHx8IGNvbHMgPD0gNTEyKSB7XG4gICAgICAgIHJldHVybiBhLm1tdWwoYik7IC8vIGEgaXMgZXF1aXZhbGVudCB0byB0aGlzXG4gICAgICB9XG5cbiAgICAgIC8vIEFwcGx5IGR5bmFtaWMgcGFkZGluZy5cbiAgICAgIGlmIChyb3dzICUgMiA9PT0gMSAmJiBjb2xzICUgMiA9PT0gMSkge1xuICAgICAgICBhID0gZW1iZWQoYSwgcm93cyArIDEsIGNvbHMgKyAxKTtcbiAgICAgICAgYiA9IGVtYmVkKGIsIHJvd3MgKyAxLCBjb2xzICsgMSk7XG4gICAgICB9IGVsc2UgaWYgKHJvd3MgJSAyID09PSAxKSB7XG4gICAgICAgIGEgPSBlbWJlZChhLCByb3dzICsgMSwgY29scyk7XG4gICAgICAgIGIgPSBlbWJlZChiLCByb3dzICsgMSwgY29scyk7XG4gICAgICB9IGVsc2UgaWYgKGNvbHMgJSAyID09PSAxKSB7XG4gICAgICAgIGEgPSBlbWJlZChhLCByb3dzLCBjb2xzICsgMSk7XG4gICAgICAgIGIgPSBlbWJlZChiLCByb3dzLCBjb2xzICsgMSk7XG4gICAgICB9XG5cbiAgICAgIGxldCBoYWxmUm93cyA9IHBhcnNlSW50KGEucm93cyAvIDIsIDEwKTtcbiAgICAgIGxldCBoYWxmQ29scyA9IHBhcnNlSW50KGEuY29sdW1ucyAvIDIsIDEwKTtcbiAgICAgIC8vIFN1YmRpdmlkZSBpbnB1dCBtYXRyaWNlcy5cbiAgICAgIGxldCBhMTEgPSBhLnN1Yk1hdHJpeCgwLCBoYWxmUm93cyAtIDEsIDAsIGhhbGZDb2xzIC0gMSk7XG4gICAgICBsZXQgYjExID0gYi5zdWJNYXRyaXgoMCwgaGFsZlJvd3MgLSAxLCAwLCBoYWxmQ29scyAtIDEpO1xuXG4gICAgICBsZXQgYTEyID0gYS5zdWJNYXRyaXgoMCwgaGFsZlJvd3MgLSAxLCBoYWxmQ29scywgYS5jb2x1bW5zIC0gMSk7XG4gICAgICBsZXQgYjEyID0gYi5zdWJNYXRyaXgoMCwgaGFsZlJvd3MgLSAxLCBoYWxmQ29scywgYi5jb2x1bW5zIC0gMSk7XG5cbiAgICAgIGxldCBhMjEgPSBhLnN1Yk1hdHJpeChoYWxmUm93cywgYS5yb3dzIC0gMSwgMCwgaGFsZkNvbHMgLSAxKTtcbiAgICAgIGxldCBiMjEgPSBiLnN1Yk1hdHJpeChoYWxmUm93cywgYi5yb3dzIC0gMSwgMCwgaGFsZkNvbHMgLSAxKTtcblxuICAgICAgbGV0IGEyMiA9IGEuc3ViTWF0cml4KGhhbGZSb3dzLCBhLnJvd3MgLSAxLCBoYWxmQ29scywgYS5jb2x1bW5zIC0gMSk7XG4gICAgICBsZXQgYjIyID0gYi5zdWJNYXRyaXgoaGFsZlJvd3MsIGIucm93cyAtIDEsIGhhbGZDb2xzLCBiLmNvbHVtbnMgLSAxKTtcblxuICAgICAgLy8gQ29tcHV0ZSBpbnRlcm1lZGlhdGUgdmFsdWVzLlxuICAgICAgbGV0IG0xID0gYmxvY2tNdWx0KFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5hZGQoYTExLCBhMjIpLFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5hZGQoYjExLCBiMjIpLFxuICAgICAgICBoYWxmUm93cyxcbiAgICAgICAgaGFsZkNvbHMsXG4gICAgICApO1xuICAgICAgbGV0IG0yID0gYmxvY2tNdWx0KEFic3RyYWN0TWF0cml4LmFkZChhMjEsIGEyMiksIGIxMSwgaGFsZlJvd3MsIGhhbGZDb2xzKTtcbiAgICAgIGxldCBtMyA9IGJsb2NrTXVsdChhMTEsIEFic3RyYWN0TWF0cml4LnN1YihiMTIsIGIyMiksIGhhbGZSb3dzLCBoYWxmQ29scyk7XG4gICAgICBsZXQgbTQgPSBibG9ja011bHQoYTIyLCBBYnN0cmFjdE1hdHJpeC5zdWIoYjIxLCBiMTEpLCBoYWxmUm93cywgaGFsZkNvbHMpO1xuICAgICAgbGV0IG01ID0gYmxvY2tNdWx0KEFic3RyYWN0TWF0cml4LmFkZChhMTEsIGExMiksIGIyMiwgaGFsZlJvd3MsIGhhbGZDb2xzKTtcbiAgICAgIGxldCBtNiA9IGJsb2NrTXVsdChcbiAgICAgICAgQWJzdHJhY3RNYXRyaXguc3ViKGEyMSwgYTExKSxcbiAgICAgICAgQWJzdHJhY3RNYXRyaXguYWRkKGIxMSwgYjEyKSxcbiAgICAgICAgaGFsZlJvd3MsXG4gICAgICAgIGhhbGZDb2xzLFxuICAgICAgKTtcbiAgICAgIGxldCBtNyA9IGJsb2NrTXVsdChcbiAgICAgICAgQWJzdHJhY3RNYXRyaXguc3ViKGExMiwgYTIyKSxcbiAgICAgICAgQWJzdHJhY3RNYXRyaXguYWRkKGIyMSwgYjIyKSxcbiAgICAgICAgaGFsZlJvd3MsXG4gICAgICAgIGhhbGZDb2xzLFxuICAgICAgKTtcblxuICAgICAgLy8gQ29tYmluZSBpbnRlcm1lZGlhdGUgdmFsdWVzIGludG8gdGhlIG91dHB1dC5cbiAgICAgIGxldCBjMTEgPSBBYnN0cmFjdE1hdHJpeC5hZGQobTEsIG00KTtcbiAgICAgIGMxMS5zdWIobTUpO1xuICAgICAgYzExLmFkZChtNyk7XG4gICAgICBsZXQgYzEyID0gQWJzdHJhY3RNYXRyaXguYWRkKG0zLCBtNSk7XG4gICAgICBsZXQgYzIxID0gQWJzdHJhY3RNYXRyaXguYWRkKG0yLCBtNCk7XG4gICAgICBsZXQgYzIyID0gQWJzdHJhY3RNYXRyaXguc3ViKG0xLCBtMik7XG4gICAgICBjMjIuYWRkKG0zKTtcbiAgICAgIGMyMi5hZGQobTYpO1xuXG4gICAgICAvLyBDcm9wIG91dHB1dCB0byB0aGUgZGVzaXJlZCBzaXplICh1bmRvIGR5bmFtaWMgcGFkZGluZykuXG4gICAgICBsZXQgcmVzdWx0YXQgPSBBYnN0cmFjdE1hdHJpeC56ZXJvcygyICogYzExLnJvd3MsIDIgKiBjMTEuY29sdW1ucyk7XG4gICAgICByZXN1bHRhdCA9IHJlc3VsdGF0LnNldFN1Yk1hdHJpeChjMTEsIDAsIDApO1xuICAgICAgcmVzdWx0YXQgPSByZXN1bHRhdC5zZXRTdWJNYXRyaXgoYzEyLCBjMTEucm93cywgMCk7XG4gICAgICByZXN1bHRhdCA9IHJlc3VsdGF0LnNldFN1Yk1hdHJpeChjMjEsIDAsIGMxMS5jb2x1bW5zKTtcbiAgICAgIHJlc3VsdGF0ID0gcmVzdWx0YXQuc2V0U3ViTWF0cml4KGMyMiwgYzExLnJvd3MsIGMxMS5jb2x1bW5zKTtcbiAgICAgIHJldHVybiByZXN1bHRhdC5zdWJNYXRyaXgoMCwgcm93cyAtIDEsIDAsIGNvbHMgLSAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmxvY2tNdWx0KHgsIHksIHIsIGMpO1xuICB9XG5cbiAgc2NhbGVSb3dzKG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgeyBtaW4gPSAwLCBtYXggPSAxIH0gPSBvcHRpb25zO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG1pbikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pbiBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobWF4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignbWF4IG11c3QgYmUgYSBudW1iZXInKTtcbiAgICBpZiAobWluID49IG1heCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ21pbiBtdXN0IGJlIHNtYWxsZXIgdGhhbiBtYXgnKTtcbiAgICBsZXQgbmV3TWF0cml4ID0gbmV3IE1hdHJpeCh0aGlzLnJvd3MsIHRoaXMuY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRSb3coaSk7XG4gICAgICBpZiAocm93Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzY2FsZShyb3csIHsgbWluLCBtYXgsIG91dHB1dDogcm93IH0pO1xuICAgICAgfVxuICAgICAgbmV3TWF0cml4LnNldFJvdyhpLCByb3cpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgc2NhbGVDb2x1bW5zKG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgeyBtaW4gPSAwLCBtYXggPSAxIH0gPSBvcHRpb25zO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG1pbikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pbiBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobWF4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignbWF4IG11c3QgYmUgYSBudW1iZXInKTtcbiAgICBpZiAobWluID49IG1heCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ21pbiBtdXN0IGJlIHNtYWxsZXIgdGhhbiBtYXgnKTtcbiAgICBsZXQgbmV3TWF0cml4ID0gbmV3IE1hdHJpeCh0aGlzLnJvd3MsIHRoaXMuY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5nZXRDb2x1bW4oaSk7XG4gICAgICBpZiAoY29sdW1uLmxlbmd0aCkge1xuICAgICAgICByZXNjYWxlKGNvbHVtbiwge1xuICAgICAgICAgIG1pbjogbWluLFxuICAgICAgICAgIG1heDogbWF4LFxuICAgICAgICAgIG91dHB1dDogY29sdW1uLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIG5ld01hdHJpeC5zZXRDb2x1bW4oaSwgY29sdW1uKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld01hdHJpeDtcbiAgfVxuXG4gIGZsaXBSb3dzKCkge1xuICAgIGNvbnN0IG1pZGRsZSA9IE1hdGguY2VpbCh0aGlzLmNvbHVtbnMgLyAyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1pZGRsZTsgaisrKSB7XG4gICAgICAgIGxldCBmaXJzdCA9IHRoaXMuZ2V0KGksIGopO1xuICAgICAgICBsZXQgbGFzdCA9IHRoaXMuZ2V0KGksIHRoaXMuY29sdW1ucyAtIDEgLSBqKTtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgbGFzdCk7XG4gICAgICAgIHRoaXMuc2V0KGksIHRoaXMuY29sdW1ucyAtIDEgLSBqLCBmaXJzdCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZmxpcENvbHVtbnMoKSB7XG4gICAgY29uc3QgbWlkZGxlID0gTWF0aC5jZWlsKHRoaXMucm93cyAvIDIpO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWlkZGxlOyBpKyspIHtcbiAgICAgICAgbGV0IGZpcnN0ID0gdGhpcy5nZXQoaSwgaik7XG4gICAgICAgIGxldCBsYXN0ID0gdGhpcy5nZXQodGhpcy5yb3dzIC0gMSAtIGksIGopO1xuICAgICAgICB0aGlzLnNldChpLCBqLCBsYXN0KTtcbiAgICAgICAgdGhpcy5zZXQodGhpcy5yb3dzIC0gMSAtIGksIGosIGZpcnN0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBrcm9uZWNrZXJQcm9kdWN0KG90aGVyKSB7XG4gICAgb3RoZXIgPSBNYXRyaXguY2hlY2tNYXRyaXgob3RoZXIpO1xuXG4gICAgbGV0IG0gPSB0aGlzLnJvd3M7XG4gICAgbGV0IG4gPSB0aGlzLmNvbHVtbnM7XG4gICAgbGV0IHAgPSBvdGhlci5yb3dzO1xuICAgIGxldCBxID0gb3RoZXIuY29sdW1ucztcblxuICAgIGxldCByZXN1bHQgPSBuZXcgTWF0cml4KG0gKiBwLCBuICogcSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcDsgaysrKSB7XG4gICAgICAgICAgZm9yIChsZXQgbCA9IDA7IGwgPCBxOyBsKyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5zZXQocCAqIGkgKyBrLCBxICogaiArIGwsIHRoaXMuZ2V0KGksIGopICogb3RoZXIuZ2V0KGssIGwpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGtyb25lY2tlclN1bShvdGhlcikge1xuICAgIG90aGVyID0gTWF0cml4LmNoZWNrTWF0cml4KG90aGVyKTtcbiAgICBpZiAoIXRoaXMuaXNTcXVhcmUoKSB8fCAhb3RoZXIuaXNTcXVhcmUoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdLcm9uZWNrZXIgU3VtIG5lZWRzIHR3byBTcXVhcmUgTWF0cmljZXMnKTtcbiAgICB9XG4gICAgbGV0IG0gPSB0aGlzLnJvd3M7XG4gICAgbGV0IG4gPSBvdGhlci5yb3dzO1xuICAgIGxldCBBeEkgPSB0aGlzLmtyb25lY2tlclByb2R1Y3QoTWF0cml4LmV5ZShuLCBuKSk7XG4gICAgbGV0IEl4QiA9IE1hdHJpeC5leWUobSwgbSkua3JvbmVja2VyUHJvZHVjdChvdGhlcik7XG4gICAgcmV0dXJuIEF4SS5hZGQoSXhCKTtcbiAgfVxuXG4gIHRyYW5zcG9zZSgpIHtcbiAgICBsZXQgcmVzdWx0ID0gbmV3IE1hdHJpeCh0aGlzLmNvbHVtbnMsIHRoaXMucm93cyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICByZXN1bHQuc2V0KGosIGksIHRoaXMuZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHNvcnRSb3dzKGNvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVOdW1iZXJzKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgdGhpcy5zZXRSb3coaSwgdGhpcy5nZXRSb3coaSkuc29ydChjb21wYXJlRnVuY3Rpb24pKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzb3J0Q29sdW1ucyhjb21wYXJlRnVuY3Rpb24gPSBjb21wYXJlTnVtYmVycykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgIHRoaXMuc2V0Q29sdW1uKGksIHRoaXMuZ2V0Q29sdW1uKGkpLnNvcnQoY29tcGFyZUZ1bmN0aW9uKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3ViTWF0cml4KHN0YXJ0Um93LCBlbmRSb3csIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pIHtcbiAgICBjaGVja1JhbmdlKHRoaXMsIHN0YXJ0Um93LCBlbmRSb3csIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pO1xuICAgIGxldCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KFxuICAgICAgZW5kUm93IC0gc3RhcnRSb3cgKyAxLFxuICAgICAgZW5kQ29sdW1uIC0gc3RhcnRDb2x1bW4gKyAxLFxuICAgICk7XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0Um93OyBpIDw9IGVuZFJvdzsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gc3RhcnRDb2x1bW47IGogPD0gZW5kQ29sdW1uOyBqKyspIHtcbiAgICAgICAgbmV3TWF0cml4LnNldChpIC0gc3RhcnRSb3csIGogLSBzdGFydENvbHVtbiwgdGhpcy5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgc3ViTWF0cml4Um93KGluZGljZXMsIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pIHtcbiAgICBpZiAoc3RhcnRDb2x1bW4gPT09IHVuZGVmaW5lZCkgc3RhcnRDb2x1bW4gPSAwO1xuICAgIGlmIChlbmRDb2x1bW4gPT09IHVuZGVmaW5lZCkgZW5kQ29sdW1uID0gdGhpcy5jb2x1bW5zIC0gMTtcbiAgICBpZiAoXG4gICAgICBzdGFydENvbHVtbiA+IGVuZENvbHVtbiB8fFxuICAgICAgc3RhcnRDb2x1bW4gPCAwIHx8XG4gICAgICBzdGFydENvbHVtbiA+PSB0aGlzLmNvbHVtbnMgfHxcbiAgICAgIGVuZENvbHVtbiA8IDAgfHxcbiAgICAgIGVuZENvbHVtbiA+PSB0aGlzLmNvbHVtbnNcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBcmd1bWVudCBvdXQgb2YgcmFuZ2UnKTtcbiAgICB9XG5cbiAgICBsZXQgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChpbmRpY2VzLmxlbmd0aCwgZW5kQ29sdW1uIC0gc3RhcnRDb2x1bW4gKyAxKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSBzdGFydENvbHVtbjsgaiA8PSBlbmRDb2x1bW47IGorKykge1xuICAgICAgICBpZiAoaW5kaWNlc1tpXSA8IDAgfHwgaW5kaWNlc1tpXSA+PSB0aGlzLnJvd3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgUm93IGluZGV4IG91dCBvZiByYW5nZTogJHtpbmRpY2VzW2ldfWApO1xuICAgICAgICB9XG4gICAgICAgIG5ld01hdHJpeC5zZXQoaSwgaiAtIHN0YXJ0Q29sdW1uLCB0aGlzLmdldChpbmRpY2VzW2ldLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdNYXRyaXg7XG4gIH1cblxuICBzdWJNYXRyaXhDb2x1bW4oaW5kaWNlcywgc3RhcnRSb3csIGVuZFJvdykge1xuICAgIGlmIChzdGFydFJvdyA9PT0gdW5kZWZpbmVkKSBzdGFydFJvdyA9IDA7XG4gICAgaWYgKGVuZFJvdyA9PT0gdW5kZWZpbmVkKSBlbmRSb3cgPSB0aGlzLnJvd3MgLSAxO1xuICAgIGlmIChcbiAgICAgIHN0YXJ0Um93ID4gZW5kUm93IHx8XG4gICAgICBzdGFydFJvdyA8IDAgfHxcbiAgICAgIHN0YXJ0Um93ID49IHRoaXMucm93cyB8fFxuICAgICAgZW5kUm93IDwgMCB8fFxuICAgICAgZW5kUm93ID49IHRoaXMucm93c1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0FyZ3VtZW50IG91dCBvZiByYW5nZScpO1xuICAgIH1cblxuICAgIGxldCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KGVuZFJvdyAtIHN0YXJ0Um93ICsgMSwgaW5kaWNlcy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IHN0YXJ0Um93OyBqIDw9IGVuZFJvdzsgaisrKSB7XG4gICAgICAgIGlmIChpbmRpY2VzW2ldIDwgMCB8fCBpbmRpY2VzW2ldID49IHRoaXMuY29sdW1ucykge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBDb2x1bW4gaW5kZXggb3V0IG9mIHJhbmdlOiAke2luZGljZXNbaV19YCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3TWF0cml4LnNldChqIC0gc3RhcnRSb3csIGksIHRoaXMuZ2V0KGosIGluZGljZXNbaV0pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld01hdHJpeDtcbiAgfVxuXG4gIHNldFN1Yk1hdHJpeChtYXRyaXgsIHN0YXJ0Um93LCBzdGFydENvbHVtbikge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmIChtYXRyaXguaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgbGV0IGVuZFJvdyA9IHN0YXJ0Um93ICsgbWF0cml4LnJvd3MgLSAxO1xuICAgIGxldCBlbmRDb2x1bW4gPSBzdGFydENvbHVtbiArIG1hdHJpeC5jb2x1bW5zIC0gMTtcbiAgICBjaGVja1JhbmdlKHRoaXMsIHN0YXJ0Um93LCBlbmRSb3csIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KHN0YXJ0Um93ICsgaSwgc3RhcnRDb2x1bW4gKyBqLCBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZWxlY3Rpb24ocm93SW5kaWNlcywgY29sdW1uSW5kaWNlcykge1xuICAgIGxldCBpbmRpY2VzID0gY2hlY2tJbmRpY2VzKHRoaXMsIHJvd0luZGljZXMsIGNvbHVtbkluZGljZXMpO1xuICAgIGxldCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KHJvd0luZGljZXMubGVuZ3RoLCBjb2x1bW5JbmRpY2VzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRpY2VzLnJvdy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IHJvd0luZGV4ID0gaW5kaWNlcy5yb3dbaV07XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGluZGljZXMuY29sdW1uLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGxldCBjb2x1bW5JbmRleCA9IGluZGljZXMuY29sdW1uW2pdO1xuICAgICAgICBuZXdNYXRyaXguc2V0KGksIGosIHRoaXMuZ2V0KHJvd0luZGV4LCBjb2x1bW5JbmRleCkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgdHJhY2UoKSB7XG4gICAgbGV0IG1pbiA9IE1hdGgubWluKHRoaXMucm93cywgdGhpcy5jb2x1bW5zKTtcbiAgICBsZXQgdHJhY2UgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWluOyBpKyspIHtcbiAgICAgIHRyYWNlICs9IHRoaXMuZ2V0KGksIGkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJhY2U7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBsZXQgbmV3TWF0cml4ID0gbmV3IE1hdHJpeCh0aGlzLnJvd3MsIHRoaXMuY29sdW1ucyk7XG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgdGhpcy5yb3dzOyByb3crKykge1xuICAgICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5jb2x1bW5zOyBjb2x1bW4rKykge1xuICAgICAgICBuZXdNYXRyaXguc2V0KHJvdywgY29sdW1uLCB0aGlzLmdldChyb3csIGNvbHVtbikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgc3VtKGJ5KSB7XG4gICAgc3dpdGNoIChieSkge1xuICAgICAgY2FzZSAncm93JzpcbiAgICAgICAgcmV0dXJuIHN1bUJ5Um93KHRoaXMpO1xuICAgICAgY2FzZSAnY29sdW1uJzpcbiAgICAgICAgcmV0dXJuIHN1bUJ5Q29sdW1uKHRoaXMpO1xuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiBzdW1BbGwodGhpcyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke2J5fWApO1xuICAgIH1cbiAgfVxuXG4gIHByb2R1Y3QoYnkpIHtcbiAgICBzd2l0Y2ggKGJ5KSB7XG4gICAgICBjYXNlICdyb3cnOlxuICAgICAgICByZXR1cm4gcHJvZHVjdEJ5Um93KHRoaXMpO1xuICAgICAgY2FzZSAnY29sdW1uJzpcbiAgICAgICAgcmV0dXJuIHByb2R1Y3RCeUNvbHVtbih0aGlzKTtcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gcHJvZHVjdEFsbCh0aGlzKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgbWVhbihieSkge1xuICAgIGNvbnN0IHN1bSA9IHRoaXMuc3VtKGJ5KTtcbiAgICBzd2l0Y2ggKGJ5KSB7XG4gICAgICBjYXNlICdyb3cnOiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgICAgICBzdW1baV0gLz0gdGhpcy5jb2x1bW5zO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdW07XG4gICAgICB9XG4gICAgICBjYXNlICdjb2x1bW4nOiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgICAgICBzdW1baV0gLz0gdGhpcy5yb3dzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdW07XG4gICAgICB9XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIHN1bSAvIHRoaXMuc2l6ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgdmFyaWFuY2UoYnksIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2YgYnkgPT09ICdvYmplY3QnKSB7XG4gICAgICBvcHRpb25zID0gYnk7XG4gICAgICBieSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCB7IHVuYmlhc2VkID0gdHJ1ZSwgbWVhbiA9IHRoaXMubWVhbihieSkgfSA9IG9wdGlvbnM7XG4gICAgaWYgKHR5cGVvZiB1bmJpYXNlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bmJpYXNlZCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuICAgIH1cbiAgICBzd2l0Y2ggKGJ5KSB7XG4gICAgICBjYXNlICdyb3cnOiB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZWFuKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21lYW4gbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YXJpYW5jZUJ5Um93KHRoaXMsIHVuYmlhc2VkLCBtZWFuKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NvbHVtbic6IHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lYW4pKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWVhbiBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhcmlhbmNlQnlDb2x1bW4odGhpcywgdW5iaWFzZWQsIG1lYW4pO1xuICAgICAgfVxuICAgICAgY2FzZSB1bmRlZmluZWQ6IHtcbiAgICAgICAgaWYgKHR5cGVvZiBtZWFuICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21lYW4gbXVzdCBiZSBhIG51bWJlcicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YXJpYW5jZUFsbCh0aGlzLCB1bmJpYXNlZCwgbWVhbik7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke2J5fWApO1xuICAgIH1cbiAgfVxuXG4gIHN0YW5kYXJkRGV2aWF0aW9uKGJ5LCBvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBieSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG9wdGlvbnMgPSBieTtcbiAgICAgIGJ5ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCB2YXJpYW5jZSA9IHRoaXMudmFyaWFuY2UoYnksIG9wdGlvbnMpO1xuICAgIGlmIChieSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gTWF0aC5zcXJ0KHZhcmlhbmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YXJpYW5jZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXJpYW5jZVtpXSA9IE1hdGguc3FydCh2YXJpYW5jZVtpXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFyaWFuY2U7XG4gICAgfVxuICB9XG5cbiAgY2VudGVyKGJ5LCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIGJ5ID09PSAnb2JqZWN0Jykge1xuICAgICAgb3B0aW9ucyA9IGJ5O1xuICAgICAgYnkgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgeyBjZW50ZXIgPSB0aGlzLm1lYW4oYnkpIH0gPSBvcHRpb25zO1xuICAgIHN3aXRjaCAoYnkpIHtcbiAgICAgIGNhc2UgJ3Jvdyc6IHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNlbnRlcikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjZW50ZXIgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIGNlbnRlckJ5Um93KHRoaXMsIGNlbnRlcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgY2FzZSAnY29sdW1uJzoge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2VudGVyKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NlbnRlciBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY2VudGVyQnlDb2x1bW4odGhpcywgY2VudGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBjYXNlIHVuZGVmaW5lZDoge1xuICAgICAgICBpZiAodHlwZW9mIGNlbnRlciAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjZW50ZXIgbXVzdCBiZSBhIG51bWJlcicpO1xuICAgICAgICB9XG4gICAgICAgIGNlbnRlckFsbCh0aGlzLCBjZW50ZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgc2NhbGUoYnksIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2YgYnkgPT09ICdvYmplY3QnKSB7XG4gICAgICBvcHRpb25zID0gYnk7XG4gICAgICBieSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBsZXQgc2NhbGUgPSBvcHRpb25zLnNjYWxlO1xuICAgIHN3aXRjaCAoYnkpIHtcbiAgICAgIGNhc2UgJ3Jvdyc6IHtcbiAgICAgICAgaWYgKHNjYWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY2FsZSA9IGdldFNjYWxlQnlSb3codGhpcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoc2NhbGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2NhbGUgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIHNjYWxlQnlSb3codGhpcywgc2NhbGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NvbHVtbic6IHtcbiAgICAgICAgaWYgKHNjYWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY2FsZSA9IGdldFNjYWxlQnlDb2x1bW4odGhpcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoc2NhbGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2NhbGUgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIHNjYWxlQnlDb2x1bW4odGhpcywgc2NhbGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGNhc2UgdW5kZWZpbmVkOiB7XG4gICAgICAgIGlmIChzY2FsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NhbGUgPSBnZXRTY2FsZUFsbCh0aGlzKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2NhbGUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2NhbGUgbXVzdCBiZSBhIG51bWJlcicpO1xuICAgICAgICB9XG4gICAgICAgIHNjYWxlQWxsKHRoaXMsIHNjYWxlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke2J5fWApO1xuICAgIH1cbiAgfVxuXG4gIHRvU3RyaW5nKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gaW5zcGVjdE1hdHJpeFdpdGhPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xuICB9XG59XG5cbkFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5rbGFzcyA9ICdNYXRyaXgnO1xuaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnKSB7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZVtTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSA9XG4gICAgaW5zcGVjdE1hdHJpeDtcbn1cblxuZnVuY3Rpb24gY29tcGFyZU51bWJlcnMoYSwgYikge1xuICByZXR1cm4gYSAtIGI7XG59XG5cbi8vIFN5bm9ueW1zXG5BYnN0cmFjdE1hdHJpeC5yYW5kb20gPSBBYnN0cmFjdE1hdHJpeC5yYW5kO1xuQWJzdHJhY3RNYXRyaXgucmFuZG9tSW50ID0gQWJzdHJhY3RNYXRyaXgucmFuZEludDtcbkFic3RyYWN0TWF0cml4LmRpYWdvbmFsID0gQWJzdHJhY3RNYXRyaXguZGlhZztcbkFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaWFnb25hbCA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaWFnO1xuQWJzdHJhY3RNYXRyaXguaWRlbnRpdHkgPSBBYnN0cmFjdE1hdHJpeC5leWU7XG5BYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubmVnYXRlID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm5lZztcbkFic3RyYWN0TWF0cml4LnByb3RvdHlwZS50ZW5zb3JQcm9kdWN0ID1cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmtyb25lY2tlclByb2R1Y3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hdHJpeCBleHRlbmRzIEFic3RyYWN0TWF0cml4IHtcbiAgY29uc3RydWN0b3IoblJvd3MsIG5Db2x1bW5zKSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAoTWF0cml4LmlzTWF0cml4KG5Sb3dzKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0cnVjdG9yLXJldHVyblxuICAgICAgcmV0dXJuIG5Sb3dzLmNsb25lKCk7XG4gICAgfSBlbHNlIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG5Sb3dzKSAmJiBuUm93cyA+PSAwKSB7XG4gICAgICAvLyBDcmVhdGUgYW4gZW1wdHkgbWF0cml4XG4gICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG5Db2x1bW5zKSAmJiBuQ29sdW1ucyA+PSAwKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgblJvd3M7IGkrKykge1xuICAgICAgICAgIHRoaXMuZGF0YS5wdXNoKG5ldyBGbG9hdDY0QXJyYXkobkNvbHVtbnMpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbkNvbHVtbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoblJvd3MpKSB7XG4gICAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgZnJvbSB0aGUgMkQgYXJyYXlcbiAgICAgIGNvbnN0IGFycmF5RGF0YSA9IG5Sb3dzO1xuICAgICAgblJvd3MgPSBhcnJheURhdGEubGVuZ3RoO1xuICAgICAgbkNvbHVtbnMgPSBuUm93cyA/IGFycmF5RGF0YVswXS5sZW5ndGggOiAwO1xuICAgICAgaWYgKHR5cGVvZiBuQ29sdW1ucyAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnRGF0YSBtdXN0IGJlIGEgMkQgYXJyYXkgd2l0aCBhdCBsZWFzdCBvbmUgZWxlbWVudCcsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgblJvd3M7IGkrKykge1xuICAgICAgICBpZiAoYXJyYXlEYXRhW2ldLmxlbmd0aCAhPT0gbkNvbHVtbnMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5jb25zaXN0ZW50IGFycmF5IGRpbWVuc2lvbnMnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGEucHVzaChGbG9hdDY0QXJyYXkuZnJvbShhcnJheURhdGFbaV0pKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIgb3IgYW4gYXJyYXknLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5yb3dzID0gblJvd3M7XG4gICAgdGhpcy5jb2x1bW5zID0gbkNvbHVtbnM7XG4gIH1cblxuICBzZXQocm93SW5kZXgsIGNvbHVtbkluZGV4LCB2YWx1ZSkge1xuICAgIHRoaXMuZGF0YVtyb3dJbmRleF1bY29sdW1uSW5kZXhdID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQocm93SW5kZXgsIGNvbHVtbkluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVtyb3dJbmRleF1bY29sdW1uSW5kZXhdO1xuICB9XG5cbiAgcmVtb3ZlUm93KGluZGV4KSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCBpbmRleCk7XG4gICAgdGhpcy5kYXRhLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5yb3dzIC09IDE7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRSb3coaW5kZXgsIGFycmF5KSB7XG4gICAgaWYgKGFycmF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFycmF5ID0gaW5kZXg7XG4gICAgICBpbmRleCA9IHRoaXMucm93cztcbiAgICB9XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCBpbmRleCwgdHJ1ZSk7XG4gICAgYXJyYXkgPSBGbG9hdDY0QXJyYXkuZnJvbShjaGVja1Jvd1ZlY3Rvcih0aGlzLCBhcnJheSkpO1xuICAgIHRoaXMuZGF0YS5zcGxpY2UoaW5kZXgsIDAsIGFycmF5KTtcbiAgICB0aGlzLnJvd3MgKz0gMTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJlbW92ZUNvbHVtbihpbmRleCkge1xuICAgIGNoZWNrQ29sdW1uSW5kZXgodGhpcywgaW5kZXgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGNvbnN0IG5ld1JvdyA9IG5ldyBGbG9hdDY0QXJyYXkodGhpcy5jb2x1bW5zIC0gMSk7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGluZGV4OyBqKyspIHtcbiAgICAgICAgbmV3Um93W2pdID0gdGhpcy5kYXRhW2ldW2pdO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaiA9IGluZGV4ICsgMTsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIG5ld1Jvd1tqIC0gMV0gPSB0aGlzLmRhdGFbaV1bal07XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGFbaV0gPSBuZXdSb3c7XG4gICAgfVxuICAgIHRoaXMuY29sdW1ucyAtPSAxO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkQ29sdW1uKGluZGV4LCBhcnJheSkge1xuICAgIGlmICh0eXBlb2YgYXJyYXkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBhcnJheSA9IGluZGV4O1xuICAgICAgaW5kZXggPSB0aGlzLmNvbHVtbnM7XG4gICAgfVxuICAgIGNoZWNrQ29sdW1uSW5kZXgodGhpcywgaW5kZXgsIHRydWUpO1xuICAgIGFycmF5ID0gY2hlY2tDb2x1bW5WZWN0b3IodGhpcywgYXJyYXkpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGNvbnN0IG5ld1JvdyA9IG5ldyBGbG9hdDY0QXJyYXkodGhpcy5jb2x1bW5zICsgMSk7XG4gICAgICBsZXQgaiA9IDA7XG4gICAgICBmb3IgKDsgaiA8IGluZGV4OyBqKyspIHtcbiAgICAgICAgbmV3Um93W2pdID0gdGhpcy5kYXRhW2ldW2pdO1xuICAgICAgfVxuICAgICAgbmV3Um93W2orK10gPSBhcnJheVtpXTtcbiAgICAgIGZvciAoOyBqIDwgdGhpcy5jb2x1bW5zICsgMTsgaisrKSB7XG4gICAgICAgIG5ld1Jvd1tqXSA9IHRoaXMuZGF0YVtpXVtqIC0gMV07XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGFbaV0gPSBuZXdSb3c7XG4gICAgfVxuICAgIHRoaXMuY29sdW1ucyArPSAxO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbmluc3RhbGxNYXRoT3BlcmF0aW9ucyhBYnN0cmFjdE1hdHJpeCwgTWF0cml4KTtcbiIsImltcG9ydCB7IG5ld0FycmF5IH0gZnJvbSAnLi91dGlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIHN1bUJ5Um93KG1hdHJpeCkge1xuICBsZXQgc3VtID0gbmV3QXJyYXkobWF0cml4LnJvd3MpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyArK2kpIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyArK2opIHtcbiAgICAgIHN1bVtpXSArPSBtYXRyaXguZ2V0KGksIGopO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3VtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VtQnlDb2x1bW4obWF0cml4KSB7XG4gIGxldCBzdW0gPSBuZXdBcnJheShtYXRyaXguY29sdW1ucyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7ICsraSkge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7ICsraikge1xuICAgICAgc3VtW2pdICs9IG1hdHJpeC5nZXQoaSwgaik7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdW1BbGwobWF0cml4KSB7XG4gIGxldCB2ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICB2ICs9IG1hdHJpeC5nZXQoaSwgaik7XG4gICAgfVxuICB9XG4gIHJldHVybiB2O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvZHVjdEJ5Um93KG1hdHJpeCkge1xuICBsZXQgc3VtID0gbmV3QXJyYXkobWF0cml4LnJvd3MsIDEpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyArK2kpIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyArK2opIHtcbiAgICAgIHN1bVtpXSAqPSBtYXRyaXguZ2V0KGksIGopO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3VtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvZHVjdEJ5Q29sdW1uKG1hdHJpeCkge1xuICBsZXQgc3VtID0gbmV3QXJyYXkobWF0cml4LmNvbHVtbnMsIDEpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyArK2kpIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyArK2opIHtcbiAgICAgIHN1bVtqXSAqPSBtYXRyaXguZ2V0KGksIGopO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3VtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvZHVjdEFsbChtYXRyaXgpIHtcbiAgbGV0IHYgPSAxO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICAgIHYgKj0gbWF0cml4LmdldChpLCBqKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYW5jZUJ5Um93KG1hdHJpeCwgdW5iaWFzZWQsIG1lYW4pIHtcbiAgY29uc3Qgcm93cyA9IG1hdHJpeC5yb3dzO1xuICBjb25zdCBjb2xzID0gbWF0cml4LmNvbHVtbnM7XG4gIGNvbnN0IHZhcmlhbmNlID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICBsZXQgc3VtMSA9IDA7XG4gICAgbGV0IHN1bTIgPSAwO1xuICAgIGxldCB4ID0gMDtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHM7IGorKykge1xuICAgICAgeCA9IG1hdHJpeC5nZXQoaSwgaikgLSBtZWFuW2ldO1xuICAgICAgc3VtMSArPSB4O1xuICAgICAgc3VtMiArPSB4ICogeDtcbiAgICB9XG4gICAgaWYgKHVuYmlhc2VkKSB7XG4gICAgICB2YXJpYW5jZS5wdXNoKChzdW0yIC0gKHN1bTEgKiBzdW0xKSAvIGNvbHMpIC8gKGNvbHMgLSAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhcmlhbmNlLnB1c2goKHN1bTIgLSAoc3VtMSAqIHN1bTEpIC8gY29scykgLyBjb2xzKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhcmlhbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFuY2VCeUNvbHVtbihtYXRyaXgsIHVuYmlhc2VkLCBtZWFuKSB7XG4gIGNvbnN0IHJvd3MgPSBtYXRyaXgucm93cztcbiAgY29uc3QgY29scyA9IG1hdHJpeC5jb2x1bW5zO1xuICBjb25zdCB2YXJpYW5jZSA9IFtdO1xuXG4gIGZvciAobGV0IGogPSAwOyBqIDwgY29sczsgaisrKSB7XG4gICAgbGV0IHN1bTEgPSAwO1xuICAgIGxldCBzdW0yID0gMDtcbiAgICBsZXQgeCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIHggPSBtYXRyaXguZ2V0KGksIGopIC0gbWVhbltqXTtcbiAgICAgIHN1bTEgKz0geDtcbiAgICAgIHN1bTIgKz0geCAqIHg7XG4gICAgfVxuICAgIGlmICh1bmJpYXNlZCkge1xuICAgICAgdmFyaWFuY2UucHVzaCgoc3VtMiAtIChzdW0xICogc3VtMSkgLyByb3dzKSAvIChyb3dzIC0gMSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXJpYW5jZS5wdXNoKChzdW0yIC0gKHN1bTEgKiBzdW0xKSAvIHJvd3MpIC8gcm93cyk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YXJpYW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhbmNlQWxsKG1hdHJpeCwgdW5iaWFzZWQsIG1lYW4pIHtcbiAgY29uc3Qgcm93cyA9IG1hdHJpeC5yb3dzO1xuICBjb25zdCBjb2xzID0gbWF0cml4LmNvbHVtbnM7XG4gIGNvbnN0IHNpemUgPSByb3dzICogY29scztcblxuICBsZXQgc3VtMSA9IDA7XG4gIGxldCBzdW0yID0gMDtcbiAgbGV0IHggPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sczsgaisrKSB7XG4gICAgICB4ID0gbWF0cml4LmdldChpLCBqKSAtIG1lYW47XG4gICAgICBzdW0xICs9IHg7XG4gICAgICBzdW0yICs9IHggKiB4O1xuICAgIH1cbiAgfVxuICBpZiAodW5iaWFzZWQpIHtcbiAgICByZXR1cm4gKHN1bTIgLSAoc3VtMSAqIHN1bTEpIC8gc2l6ZSkgLyAoc2l6ZSAtIDEpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAoc3VtMiAtIChzdW0xICogc3VtMSkgLyBzaXplKSAvIHNpemU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNlbnRlckJ5Um93KG1hdHJpeCwgbWVhbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICAgIG1hdHJpeC5zZXQoaSwgaiwgbWF0cml4LmdldChpLCBqKSAtIG1lYW5baV0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2VudGVyQnlDb2x1bW4obWF0cml4LCBtZWFuKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgICAgbWF0cml4LnNldChpLCBqLCBtYXRyaXguZ2V0KGksIGopIC0gbWVhbltqXSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjZW50ZXJBbGwobWF0cml4LCBtZWFuKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgICAgbWF0cml4LnNldChpLCBqLCBtYXRyaXguZ2V0KGksIGopIC0gbWVhbik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2FsZUJ5Um93KG1hdHJpeCkge1xuICBjb25zdCBzY2FsZSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHtcbiAgICBsZXQgc3VtID0gMDtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICAgIHN1bSArPSBNYXRoLnBvdyhtYXRyaXguZ2V0KGksIGopLCAyKSAvIChtYXRyaXguY29sdW1ucyAtIDEpO1xuICAgIH1cbiAgICBzY2FsZS5wdXNoKE1hdGguc3FydChzdW0pKTtcbiAgfVxuICByZXR1cm4gc2NhbGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZUJ5Um93KG1hdHJpeCwgc2NhbGUpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICBtYXRyaXguc2V0KGksIGosIG1hdHJpeC5nZXQoaSwgaikgLyBzY2FsZVtpXSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2FsZUJ5Q29sdW1uKG1hdHJpeCkge1xuICBjb25zdCBzY2FsZSA9IFtdO1xuICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICBsZXQgc3VtID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHtcbiAgICAgIHN1bSArPSBNYXRoLnBvdyhtYXRyaXguZ2V0KGksIGopLCAyKSAvIChtYXRyaXgucm93cyAtIDEpO1xuICAgIH1cbiAgICBzY2FsZS5wdXNoKE1hdGguc3FydChzdW0pKTtcbiAgfVxuICByZXR1cm4gc2NhbGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZUJ5Q29sdW1uKG1hdHJpeCwgc2NhbGUpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICBtYXRyaXguc2V0KGksIGosIG1hdHJpeC5nZXQoaSwgaikgLyBzY2FsZVtqXSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2FsZUFsbChtYXRyaXgpIHtcbiAgY29uc3QgZGl2aWRlciA9IG1hdHJpeC5zaXplIC0gMTtcbiAgbGV0IHN1bSA9IDA7XG4gIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgICAgc3VtICs9IE1hdGgucG93KG1hdHJpeC5nZXQoaSwgaiksIDIpIC8gZGl2aWRlcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIE1hdGguc3FydChzdW0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGVBbGwobWF0cml4LCBzY2FsZSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICAgIG1hdHJpeC5zZXQoaSwgaiwgbWF0cml4LmdldChpLCBqKSAvIHNjYWxlKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8qKlxuICogQHByaXZhdGVcbiAqIENoZWNrIHRoYXQgYSByb3cgaW5kZXggaXMgbm90IG91dCBvZiBib3VuZHNcbiAqIEBwYXJhbSB7TWF0cml4fSBtYXRyaXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtib29sZWFufSBbb3V0ZXJdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1Jvd0luZGV4KG1hdHJpeCwgaW5kZXgsIG91dGVyKSB7XG4gIGxldCBtYXggPSBvdXRlciA/IG1hdHJpeC5yb3dzIDogbWF0cml4LnJvd3MgLSAxO1xuICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gbWF4KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1JvdyBpbmRleCBvdXQgb2YgcmFuZ2UnKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBDaGVjayB0aGF0IGEgY29sdW1uIGluZGV4IGlzIG5vdCBvdXQgb2YgYm91bmRzXG4gKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW291dGVyXVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDb2x1bW5JbmRleChtYXRyaXgsIGluZGV4LCBvdXRlcikge1xuICBsZXQgbWF4ID0gb3V0ZXIgPyBtYXRyaXguY29sdW1ucyA6IG1hdHJpeC5jb2x1bW5zIC0gMTtcbiAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IG1heCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdDb2x1bW4gaW5kZXggb3V0IG9mIHJhbmdlJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQ2hlY2sgdGhhdCB0aGUgcHJvdmlkZWQgdmVjdG9yIGlzIGFuIGFycmF5IHdpdGggdGhlIHJpZ2h0IGxlbmd0aFxuICogQHBhcmFtIHtNYXRyaXh9IG1hdHJpeFxuICogQHBhcmFtIHtBcnJheXxNYXRyaXh9IHZlY3RvclxuICogQHJldHVybiB7QXJyYXl9XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSb3dWZWN0b3IobWF0cml4LCB2ZWN0b3IpIHtcbiAgaWYgKHZlY3Rvci50bzFEQXJyYXkpIHtcbiAgICB2ZWN0b3IgPSB2ZWN0b3IudG8xREFycmF5KCk7XG4gIH1cbiAgaWYgKHZlY3Rvci5sZW5ndGggIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXG4gICAgICAndmVjdG9yIHNpemUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMnLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHZlY3Rvcjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQ2hlY2sgdGhhdCB0aGUgcHJvdmlkZWQgdmVjdG9yIGlzIGFuIGFycmF5IHdpdGggdGhlIHJpZ2h0IGxlbmd0aFxuICogQHBhcmFtIHtNYXRyaXh9IG1hdHJpeFxuICogQHBhcmFtIHtBcnJheXxNYXRyaXh9IHZlY3RvclxuICogQHJldHVybiB7QXJyYXl9XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDb2x1bW5WZWN0b3IobWF0cml4LCB2ZWN0b3IpIHtcbiAgaWYgKHZlY3Rvci50bzFEQXJyYXkpIHtcbiAgICB2ZWN0b3IgPSB2ZWN0b3IudG8xREFycmF5KCk7XG4gIH1cbiAgaWYgKHZlY3Rvci5sZW5ndGggIT09IG1hdHJpeC5yb3dzKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3ZlY3RvciBzaXplIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIG51bWJlciBvZiByb3dzJyk7XG4gIH1cbiAgcmV0dXJuIHZlY3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSW5kaWNlcyhtYXRyaXgsIHJvd0luZGljZXMsIGNvbHVtbkluZGljZXMpIHtcbiAgcmV0dXJuIHtcbiAgICByb3c6IGNoZWNrUm93SW5kaWNlcyhtYXRyaXgsIHJvd0luZGljZXMpLFxuICAgIGNvbHVtbjogY2hlY2tDb2x1bW5JbmRpY2VzKG1hdHJpeCwgY29sdW1uSW5kaWNlcyksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1Jvd0luZGljZXMobWF0cml4LCByb3dJbmRpY2VzKSB7XG4gIGlmICh0eXBlb2Ygcm93SW5kaWNlcyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bmV4cGVjdGVkIHR5cGUgZm9yIHJvdyBpbmRpY2VzJyk7XG4gIH1cblxuICBsZXQgcm93T3V0ID0gcm93SW5kaWNlcy5zb21lKChyKSA9PiB7XG4gICAgcmV0dXJuIHIgPCAwIHx8IHIgPj0gbWF0cml4LnJvd3M7XG4gIH0pO1xuXG4gIGlmIChyb3dPdXQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigncm93IGluZGljZXMgYXJlIG91dCBvZiByYW5nZScpO1xuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KHJvd0luZGljZXMpKSByb3dJbmRpY2VzID0gQXJyYXkuZnJvbShyb3dJbmRpY2VzKTtcblxuICByZXR1cm4gcm93SW5kaWNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrQ29sdW1uSW5kaWNlcyhtYXRyaXgsIGNvbHVtbkluZGljZXMpIHtcbiAgaWYgKHR5cGVvZiBjb2x1bW5JbmRpY2VzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuZXhwZWN0ZWQgdHlwZSBmb3IgY29sdW1uIGluZGljZXMnKTtcbiAgfVxuXG4gIGxldCBjb2x1bW5PdXQgPSBjb2x1bW5JbmRpY2VzLnNvbWUoKGMpID0+IHtcbiAgICByZXR1cm4gYyA8IDAgfHwgYyA+PSBtYXRyaXguY29sdW1ucztcbiAgfSk7XG5cbiAgaWYgKGNvbHVtbk91dCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdjb2x1bW4gaW5kaWNlcyBhcmUgb3V0IG9mIHJhbmdlJyk7XG4gIH1cbiAgaWYgKCFBcnJheS5pc0FycmF5KGNvbHVtbkluZGljZXMpKSBjb2x1bW5JbmRpY2VzID0gQXJyYXkuZnJvbShjb2x1bW5JbmRpY2VzKTtcblxuICByZXR1cm4gY29sdW1uSW5kaWNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUmFuZ2UobWF0cml4LCBzdGFydFJvdywgZW5kUm93LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoICE9PSA1KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2V4cGVjdGVkIDQgYXJndW1lbnRzJyk7XG4gIH1cbiAgY2hlY2tOdW1iZXIoJ3N0YXJ0Um93Jywgc3RhcnRSb3cpO1xuICBjaGVja051bWJlcignZW5kUm93JywgZW5kUm93KTtcbiAgY2hlY2tOdW1iZXIoJ3N0YXJ0Q29sdW1uJywgc3RhcnRDb2x1bW4pO1xuICBjaGVja051bWJlcignZW5kQ29sdW1uJywgZW5kQ29sdW1uKTtcbiAgaWYgKFxuICAgIHN0YXJ0Um93ID4gZW5kUm93IHx8XG4gICAgc3RhcnRDb2x1bW4gPiBlbmRDb2x1bW4gfHxcbiAgICBzdGFydFJvdyA8IDAgfHxcbiAgICBzdGFydFJvdyA+PSBtYXRyaXgucm93cyB8fFxuICAgIGVuZFJvdyA8IDAgfHxcbiAgICBlbmRSb3cgPj0gbWF0cml4LnJvd3MgfHxcbiAgICBzdGFydENvbHVtbiA8IDAgfHxcbiAgICBzdGFydENvbHVtbiA+PSBtYXRyaXguY29sdW1ucyB8fFxuICAgIGVuZENvbHVtbiA8IDAgfHxcbiAgICBlbmRDb2x1bW4gPj0gbWF0cml4LmNvbHVtbnNcbiAgKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1N1Ym1hdHJpeCBpbmRpY2VzIGFyZSBvdXQgb2YgcmFuZ2UnKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV3QXJyYXkobGVuZ3RoLCB2YWx1ZSA9IDApIHtcbiAgbGV0IGFycmF5ID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBhcnJheS5wdXNoKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrTnVtYmVyKG5hbWUsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtuYW1lfSBtdXN0IGJlIGEgbnVtYmVyYCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrTm9uRW1wdHkobWF0cml4KSB7XG4gIGlmIChtYXRyaXguaXNFbXB0eSgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFbXB0eSBtYXRyaXggaGFzIG5vIGVsZW1lbnRzIHRvIGluZGV4Jyk7XG4gIH1cbn1cbiIsImltcG9ydCB7IEFic3RyYWN0TWF0cml4IH0gZnJvbSAnLi4vbWF0cml4JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV3JhcHBlck1hdHJpeDJEIGV4dGVuZHMgQWJzdHJhY3RNYXRyaXgge1xuICBjb25zdHJ1Y3RvcihkYXRhKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMucm93cyA9IGRhdGEubGVuZ3RoO1xuICAgIHRoaXMuY29sdW1ucyA9IGRhdGFbMF0ubGVuZ3RoO1xuICB9XG5cbiAgc2V0KHJvd0luZGV4LCBjb2x1bW5JbmRleCwgdmFsdWUpIHtcbiAgICB0aGlzLmRhdGFbcm93SW5kZXhdW2NvbHVtbkluZGV4XSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KHJvd0luZGV4LCBjb2x1bW5JbmRleCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFbcm93SW5kZXhdW2NvbHVtbkluZGV4XTtcbiAgfVxufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgcmVzdWx0W2tdID0gbW9kW2tdO1xuICAgIHJlc3VsdFtcImRlZmF1bHRcIl0gPSBtb2Q7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdXRpbHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vdXRpbHNcIikpO1xuZnVuY3Rpb24gbWFrZUhlYXAoblBvaW50cywgc2l6ZSkge1xuICAgIHZhciBtYWtlQXJyYXlzID0gZnVuY3Rpb24gKGZpbGxWYWx1ZSkge1xuICAgICAgICByZXR1cm4gdXRpbHMuZW1wdHkoblBvaW50cykubWFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB1dGlscy5maWxsZWQoc2l6ZSwgZmlsbFZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgaGVhcCA9IFtdO1xuICAgIGhlYXAucHVzaChtYWtlQXJyYXlzKC0xKSk7XG4gICAgaGVhcC5wdXNoKG1ha2VBcnJheXMoSW5maW5pdHkpKTtcbiAgICBoZWFwLnB1c2gobWFrZUFycmF5cygwKSk7XG4gICAgcmV0dXJuIGhlYXA7XG59XG5leHBvcnRzLm1ha2VIZWFwID0gbWFrZUhlYXA7XG5mdW5jdGlvbiByZWplY3Rpb25TYW1wbGUoblNhbXBsZXMsIHBvb2xTaXplLCByYW5kb20pIHtcbiAgICB2YXIgcmVzdWx0ID0gdXRpbHMuemVyb3MoblNhbXBsZXMpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblNhbXBsZXM7IGkrKykge1xuICAgICAgICB2YXIgcmVqZWN0U2FtcGxlID0gdHJ1ZTtcbiAgICAgICAgdmFyIGogPSAwO1xuICAgICAgICB3aGlsZSAocmVqZWN0U2FtcGxlKSB7XG4gICAgICAgICAgICBqID0gdXRpbHMudGF1UmFuZEludChwb29sU2l6ZSwgcmFuZG9tKTtcbiAgICAgICAgICAgIHZhciBicm9rZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgaTsgaysrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGogPT09IHJlc3VsdFtrXSkge1xuICAgICAgICAgICAgICAgICAgICBicm9rZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWJyb2tlbilcbiAgICAgICAgICAgICAgICByZWplY3RTYW1wbGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHRbaV0gPSBqO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5yZWplY3Rpb25TYW1wbGUgPSByZWplY3Rpb25TYW1wbGU7XG5mdW5jdGlvbiBoZWFwUHVzaChoZWFwLCByb3csIHdlaWdodCwgaW5kZXgsIGZsYWcpIHtcbiAgICByb3cgPSBNYXRoLmZsb29yKHJvdyk7XG4gICAgdmFyIGluZGljZXMgPSBoZWFwWzBdW3Jvd107XG4gICAgdmFyIHdlaWdodHMgPSBoZWFwWzFdW3Jvd107XG4gICAgdmFyIGlzTmV3ID0gaGVhcFsyXVtyb3ddO1xuICAgIGlmICh3ZWlnaHQgPj0gd2VpZ2h0c1swXSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpbmRleCA9PT0gaW5kaWNlc1tpXSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuY2hlY2tlZEhlYXBQdXNoKGhlYXAsIHJvdywgd2VpZ2h0LCBpbmRleCwgZmxhZyk7XG59XG5leHBvcnRzLmhlYXBQdXNoID0gaGVhcFB1c2g7XG5mdW5jdGlvbiB1bmNoZWNrZWRIZWFwUHVzaChoZWFwLCByb3csIHdlaWdodCwgaW5kZXgsIGZsYWcpIHtcbiAgICB2YXIgaW5kaWNlcyA9IGhlYXBbMF1bcm93XTtcbiAgICB2YXIgd2VpZ2h0cyA9IGhlYXBbMV1bcm93XTtcbiAgICB2YXIgaXNOZXcgPSBoZWFwWzJdW3Jvd107XG4gICAgaWYgKHdlaWdodCA+PSB3ZWlnaHRzWzBdKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICB3ZWlnaHRzWzBdID0gd2VpZ2h0O1xuICAgIGluZGljZXNbMF0gPSBpbmRleDtcbiAgICBpc05ld1swXSA9IGZsYWc7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBpU3dhcCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGljMSA9IDIgKiBpICsgMTtcbiAgICAgICAgdmFyIGljMiA9IGljMSArIDE7XG4gICAgICAgIHZhciBoZWFwU2hhcGUyID0gaGVhcFswXVswXS5sZW5ndGg7XG4gICAgICAgIGlmIChpYzEgPj0gaGVhcFNoYXBlMikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaWMyID49IGhlYXBTaGFwZTIpIHtcbiAgICAgICAgICAgIGlmICh3ZWlnaHRzW2ljMV0gPiB3ZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBpU3dhcCA9IGljMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdlaWdodHNbaWMxXSA+PSB3ZWlnaHRzW2ljMl0pIHtcbiAgICAgICAgICAgIGlmICh3ZWlnaHQgPCB3ZWlnaHRzW2ljMV0pIHtcbiAgICAgICAgICAgICAgICBpU3dhcCA9IGljMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHdlaWdodCA8IHdlaWdodHNbaWMyXSkge1xuICAgICAgICAgICAgICAgIGlTd2FwID0gaWMyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgd2VpZ2h0c1tpXSA9IHdlaWdodHNbaVN3YXBdO1xuICAgICAgICBpbmRpY2VzW2ldID0gaW5kaWNlc1tpU3dhcF07XG4gICAgICAgIGlzTmV3W2ldID0gaXNOZXdbaVN3YXBdO1xuICAgICAgICBpID0gaVN3YXA7XG4gICAgfVxuICAgIHdlaWdodHNbaV0gPSB3ZWlnaHQ7XG4gICAgaW5kaWNlc1tpXSA9IGluZGV4O1xuICAgIGlzTmV3W2ldID0gZmxhZztcbiAgICByZXR1cm4gMTtcbn1cbmV4cG9ydHMudW5jaGVja2VkSGVhcFB1c2ggPSB1bmNoZWNrZWRIZWFwUHVzaDtcbmZ1bmN0aW9uIGJ1aWxkQ2FuZGlkYXRlcyhjdXJyZW50R3JhcGgsIG5WZXJ0aWNlcywgbk5laWdoYm9ycywgbWF4Q2FuZGlkYXRlcywgcmFuZG9tKSB7XG4gICAgdmFyIGNhbmRpZGF0ZU5laWdoYm9ycyA9IG1ha2VIZWFwKG5WZXJ0aWNlcywgbWF4Q2FuZGlkYXRlcyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuVmVydGljZXM7IGkrKykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5OZWlnaGJvcnM7IGorKykge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRHcmFwaFswXVtpXVtqXSA8IDApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpZHggPSBjdXJyZW50R3JhcGhbMF1baV1bal07XG4gICAgICAgICAgICB2YXIgaXNuID0gY3VycmVudEdyYXBoWzJdW2ldW2pdO1xuICAgICAgICAgICAgdmFyIGQgPSB1dGlscy50YXVSYW5kKHJhbmRvbSk7XG4gICAgICAgICAgICBoZWFwUHVzaChjYW5kaWRhdGVOZWlnaGJvcnMsIGksIGQsIGlkeCwgaXNuKTtcbiAgICAgICAgICAgIGhlYXBQdXNoKGNhbmRpZGF0ZU5laWdoYm9ycywgaWR4LCBkLCBpLCBpc24pO1xuICAgICAgICAgICAgY3VycmVudEdyYXBoWzJdW2ldW2pdID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2FuZGlkYXRlTmVpZ2hib3JzO1xufVxuZXhwb3J0cy5idWlsZENhbmRpZGF0ZXMgPSBidWlsZENhbmRpZGF0ZXM7XG5mdW5jdGlvbiBkZWhlYXBTb3J0KGhlYXApIHtcbiAgICB2YXIgaW5kaWNlcyA9IGhlYXBbMF07XG4gICAgdmFyIHdlaWdodHMgPSBoZWFwWzFdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgaW5kSGVhcCA9IGluZGljZXNbaV07XG4gICAgICAgIHZhciBkaXN0SGVhcCA9IHdlaWdodHNbaV07XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaW5kSGVhcC5sZW5ndGggLSAxOyBqKyspIHtcbiAgICAgICAgICAgIHZhciBpbmRIZWFwSW5kZXggPSBpbmRIZWFwLmxlbmd0aCAtIGogLSAxO1xuICAgICAgICAgICAgdmFyIGRpc3RIZWFwSW5kZXggPSBkaXN0SGVhcC5sZW5ndGggLSBqIC0gMTtcbiAgICAgICAgICAgIHZhciB0ZW1wMSA9IGluZEhlYXBbMF07XG4gICAgICAgICAgICBpbmRIZWFwWzBdID0gaW5kSGVhcFtpbmRIZWFwSW5kZXhdO1xuICAgICAgICAgICAgaW5kSGVhcFtpbmRIZWFwSW5kZXhdID0gdGVtcDE7XG4gICAgICAgICAgICB2YXIgdGVtcDIgPSBkaXN0SGVhcFswXTtcbiAgICAgICAgICAgIGRpc3RIZWFwWzBdID0gZGlzdEhlYXBbZGlzdEhlYXBJbmRleF07XG4gICAgICAgICAgICBkaXN0SGVhcFtkaXN0SGVhcEluZGV4XSA9IHRlbXAyO1xuICAgICAgICAgICAgc2lmdERvd24oZGlzdEhlYXAsIGluZEhlYXAsIGRpc3RIZWFwSW5kZXgsIDApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGluZGljZXM6IGluZGljZXMsIHdlaWdodHM6IHdlaWdodHMgfTtcbn1cbmV4cG9ydHMuZGVoZWFwU29ydCA9IGRlaGVhcFNvcnQ7XG5mdW5jdGlvbiBzaWZ0RG93bihoZWFwMSwgaGVhcDIsIGNlaWxpbmcsIGVsdCkge1xuICAgIHdoaWxlIChlbHQgKiAyICsgMSA8IGNlaWxpbmcpIHtcbiAgICAgICAgdmFyIGxlZnRDaGlsZCA9IGVsdCAqIDIgKyAxO1xuICAgICAgICB2YXIgcmlnaHRDaGlsZCA9IGxlZnRDaGlsZCArIDE7XG4gICAgICAgIHZhciBzd2FwID0gZWx0O1xuICAgICAgICBpZiAoaGVhcDFbc3dhcF0gPCBoZWFwMVtsZWZ0Q2hpbGRdKSB7XG4gICAgICAgICAgICBzd2FwID0gbGVmdENoaWxkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyaWdodENoaWxkIDwgY2VpbGluZyAmJiBoZWFwMVtzd2FwXSA8IGhlYXAxW3JpZ2h0Q2hpbGRdKSB7XG4gICAgICAgICAgICBzd2FwID0gcmlnaHRDaGlsZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3dhcCA9PT0gZWx0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciB0ZW1wMSA9IGhlYXAxW2VsdF07XG4gICAgICAgICAgICBoZWFwMVtlbHRdID0gaGVhcDFbc3dhcF07XG4gICAgICAgICAgICBoZWFwMVtzd2FwXSA9IHRlbXAxO1xuICAgICAgICAgICAgdmFyIHRlbXAyID0gaGVhcDJbZWx0XTtcbiAgICAgICAgICAgIGhlYXAyW2VsdF0gPSBoZWFwMltzd2FwXTtcbiAgICAgICAgICAgIGhlYXAyW3N3YXBdID0gdGVtcDI7XG4gICAgICAgICAgICBlbHQgPSBzd2FwO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gc21hbGxlc3RGbGFnZ2VkKGhlYXAsIHJvdykge1xuICAgIHZhciBpbmQgPSBoZWFwWzBdW3Jvd107XG4gICAgdmFyIGRpc3QgPSBoZWFwWzFdW3Jvd107XG4gICAgdmFyIGZsYWcgPSBoZWFwWzJdW3Jvd107XG4gICAgdmFyIG1pbkRpc3QgPSBJbmZpbml0eTtcbiAgICB2YXIgcmVzdWx0SW5kZXggPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA+IGluZC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZmxhZ1tpXSA9PT0gMSAmJiBkaXN0W2ldIDwgbWluRGlzdCkge1xuICAgICAgICAgICAgbWluRGlzdCA9IGRpc3RbaV07XG4gICAgICAgICAgICByZXN1bHRJbmRleCA9IGk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlc3VsdEluZGV4ID49IDApIHtcbiAgICAgICAgZmxhZ1tyZXN1bHRJbmRleF0gPSAwO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihpbmRbcmVzdWx0SW5kZXhdKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG59XG5leHBvcnRzLnNtYWxsZXN0RmxhZ2dlZCA9IHNtYWxsZXN0RmxhZ2dlZDtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHVtYXBfMSA9IHJlcXVpcmUoXCIuL3VtYXBcIik7XG5leHBvcnRzLlVNQVAgPSB1bWFwXzEuVU1BUDtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fdmFsdWVzID0gKHRoaXMgJiYgdGhpcy5fX3ZhbHVlcykgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAwO1xuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICAgIH1cbiAgICB9O1xufTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSByZXN1bHRba10gPSBtb2Rba107XG4gICAgcmVzdWx0W1wiZGVmYXVsdFwiXSA9IG1vZDtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBfYTtcbnZhciB1dGlscyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi91dGlsc1wiKSk7XG52YXIgU3BhcnNlTWF0cml4ID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTcGFyc2VNYXRyaXgocm93cywgY29scywgdmFsdWVzLCBkaW1zKSB7XG4gICAgICAgIHRoaXMuZW50cmllcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5uUm93cyA9IDA7XG4gICAgICAgIHRoaXMubkNvbHMgPSAwO1xuICAgICAgICBpZiAocm93cy5sZW5ndGggIT09IGNvbHMubGVuZ3RoIHx8IHJvd3MubGVuZ3RoICE9PSB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jvd3MsIGNvbHMgYW5kIHZhbHVlcyBhcnJheXMgbXVzdCBhbGwgaGF2ZSB0aGUgc2FtZSBsZW5ndGgnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5Sb3dzID0gZGltc1swXTtcbiAgICAgICAgdGhpcy5uQ29scyA9IGRpbXNbMV07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcm93ID0gcm93c1tpXTtcbiAgICAgICAgICAgIHZhciBjb2wgPSBjb2xzW2ldO1xuICAgICAgICAgICAgdGhpcy5jaGVja0RpbXMocm93LCBjb2wpO1xuICAgICAgICAgICAgdmFyIGtleSA9IHRoaXMubWFrZUtleShyb3csIGNvbCk7XG4gICAgICAgICAgICB0aGlzLmVudHJpZXMuc2V0KGtleSwgeyB2YWx1ZTogdmFsdWVzW2ldLCByb3c6IHJvdywgY29sOiBjb2wgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5tYWtlS2V5ID0gZnVuY3Rpb24gKHJvdywgY29sKSB7XG4gICAgICAgIHJldHVybiByb3cgKyBcIjpcIiArIGNvbDtcbiAgICB9O1xuICAgIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuY2hlY2tEaW1zID0gZnVuY3Rpb24gKHJvdywgY29sKSB7XG4gICAgICAgIHZhciB3aXRoaW5Cb3VuZHMgPSByb3cgPCB0aGlzLm5Sb3dzICYmIGNvbCA8IHRoaXMubkNvbHM7XG4gICAgICAgIGlmICghd2l0aGluQm91bmRzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JvdyBhbmQvb3IgY29sIHNwZWNpZmllZCBvdXRzaWRlIG9mIG1hdHJpeCBkaW1lbnNpb25zJyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHJvdywgY29sLCB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoZWNrRGltcyhyb3csIGNvbCk7XG4gICAgICAgIHZhciBrZXkgPSB0aGlzLm1ha2VLZXkocm93LCBjb2wpO1xuICAgICAgICBpZiAoIXRoaXMuZW50cmllcy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzLnNldChrZXksIHsgdmFsdWU6IHZhbHVlLCByb3c6IHJvdywgY29sOiBjb2wgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVudHJpZXMuZ2V0KGtleSkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAocm93LCBjb2wsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICBpZiAoZGVmYXVsdFZhbHVlID09PSB2b2lkIDApIHsgZGVmYXVsdFZhbHVlID0gMDsgfVxuICAgICAgICB0aGlzLmNoZWNrRGltcyhyb3csIGNvbCk7XG4gICAgICAgIHZhciBrZXkgPSB0aGlzLm1ha2VLZXkocm93LCBjb2wpO1xuICAgICAgICBpZiAodGhpcy5lbnRyaWVzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmdldChrZXkpLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5nZXRBbGwgPSBmdW5jdGlvbiAob3JkZXJlZCkge1xuICAgICAgICBpZiAob3JkZXJlZCA9PT0gdm9pZCAwKSB7IG9yZGVyZWQgPSB0cnVlOyB9XG4gICAgICAgIHZhciByb3dDb2xWYWx1ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5lbnRyaWVzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICByb3dDb2xWYWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3JkZXJlZCkge1xuICAgICAgICAgICAgcm93Q29sVmFsdWVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICBpZiAoYS5yb3cgPT09IGIucm93KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmNvbCAtIGIuY29sO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEucm93IC0gYi5yb3c7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvd0NvbFZhbHVlcztcbiAgICB9O1xuICAgIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZ2V0RGltcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFt0aGlzLm5Sb3dzLCB0aGlzLm5Db2xzXTtcbiAgICB9O1xuICAgIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZ2V0Um93cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHZhciBfYiA9IF9fcmVhZChfYSwgMiksIGtleSA9IF9iWzBdLCB2YWx1ZSA9IF9iWzFdO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnJvdztcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmdldENvbHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZW50cmllcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICB2YXIgX2IgPSBfX3JlYWQoX2EsIDIpLCBrZXkgPSBfYlswXSwgdmFsdWUgPSBfYlsxXTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5jb2w7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5nZXRWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZW50cmllcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICB2YXIgX2IgPSBfX3JlYWQoX2EsIDIpLCBrZXkgPSBfYlswXSwgdmFsdWUgPSBfYlsxXTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBmbih2YWx1ZS52YWx1ZSwgdmFsdWUucm93LCB2YWx1ZS5jb2wpOyB9KTtcbiAgICB9O1xuICAgIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHZhciB2YWxzID0gW107XG4gICAgICAgIHRoaXMuZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFscy5wdXNoKGZuKHZhbHVlLnZhbHVlLCB2YWx1ZS5yb3csIHZhbHVlLmNvbCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGRpbXMgPSBbdGhpcy5uUm93cywgdGhpcy5uQ29sc107XG4gICAgICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KHRoaXMuZ2V0Um93cygpLCB0aGlzLmdldENvbHMoKSwgdmFscywgZGltcyk7XG4gICAgfTtcbiAgICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciByb3dzID0gdXRpbHMuZW1wdHkodGhpcy5uUm93cyk7XG4gICAgICAgIHZhciBvdXRwdXQgPSByb3dzLm1hcChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbHMuemVyb3MoX3RoaXMubkNvbHMpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5lbnRyaWVzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBvdXRwdXRbdmFsdWUucm93XVt2YWx1ZS5jb2xdID0gdmFsdWUudmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH07XG4gICAgcmV0dXJuIFNwYXJzZU1hdHJpeDtcbn0oKSk7XG5leHBvcnRzLlNwYXJzZU1hdHJpeCA9IFNwYXJzZU1hdHJpeDtcbmZ1bmN0aW9uIHRyYW5zcG9zZShtYXRyaXgpIHtcbiAgICB2YXIgY29scyA9IFtdO1xuICAgIHZhciByb3dzID0gW107XG4gICAgdmFyIHZhbHMgPSBbXTtcbiAgICBtYXRyaXguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIHJvdywgY29sKSB7XG4gICAgICAgIGNvbHMucHVzaChyb3cpO1xuICAgICAgICByb3dzLnB1c2goY29sKTtcbiAgICAgICAgdmFscy5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICB2YXIgZGltcyA9IFttYXRyaXgubkNvbHMsIG1hdHJpeC5uUm93c107XG4gICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgocm93cywgY29scywgdmFscywgZGltcyk7XG59XG5leHBvcnRzLnRyYW5zcG9zZSA9IHRyYW5zcG9zZTtcbmZ1bmN0aW9uIGlkZW50aXR5KHNpemUpIHtcbiAgICB2YXIgX2EgPSBfX3JlYWQoc2l6ZSwgMSksIHJvd3MgPSBfYVswXTtcbiAgICB2YXIgbWF0cml4ID0gbmV3IFNwYXJzZU1hdHJpeChbXSwgW10sIFtdLCBzaXplKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICBtYXRyaXguc2V0KGksIGksIDEpO1xuICAgIH1cbiAgICByZXR1cm4gbWF0cml4O1xufVxuZXhwb3J0cy5pZGVudGl0eSA9IGlkZW50aXR5O1xuZnVuY3Rpb24gcGFpcndpc2VNdWx0aXBseShhLCBiKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRXaXNlKGEsIGIsIGZ1bmN0aW9uICh4LCB5KSB7IHJldHVybiB4ICogeTsgfSk7XG59XG5leHBvcnRzLnBhaXJ3aXNlTXVsdGlwbHkgPSBwYWlyd2lzZU11bHRpcGx5O1xuZnVuY3Rpb24gYWRkKGEsIGIpIHtcbiAgICByZXR1cm4gZWxlbWVudFdpc2UoYSwgYiwgZnVuY3Rpb24gKHgsIHkpIHsgcmV0dXJuIHggKyB5OyB9KTtcbn1cbmV4cG9ydHMuYWRkID0gYWRkO1xuZnVuY3Rpb24gc3VidHJhY3QoYSwgYikge1xuICAgIHJldHVybiBlbGVtZW50V2lzZShhLCBiLCBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4geCAtIHk7IH0pO1xufVxuZXhwb3J0cy5zdWJ0cmFjdCA9IHN1YnRyYWN0O1xuZnVuY3Rpb24gbWF4aW11bShhLCBiKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRXaXNlKGEsIGIsIGZ1bmN0aW9uICh4LCB5KSB7IHJldHVybiAoeCA+IHkgPyB4IDogeSk7IH0pO1xufVxuZXhwb3J0cy5tYXhpbXVtID0gbWF4aW11bTtcbmZ1bmN0aW9uIG11bHRpcGx5U2NhbGFyKGEsIHNjYWxhcikge1xuICAgIHJldHVybiBhLm1hcChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICogc2NhbGFyO1xuICAgIH0pO1xufVxuZXhwb3J0cy5tdWx0aXBseVNjYWxhciA9IG11bHRpcGx5U2NhbGFyO1xuZnVuY3Rpb24gZWxpbWluYXRlWmVyb3MobSkge1xuICAgIHZhciB6ZXJvSW5kaWNlcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgdmFsdWVzID0gbS5nZXRWYWx1ZXMoKTtcbiAgICB2YXIgcm93cyA9IG0uZ2V0Um93cygpO1xuICAgIHZhciBjb2xzID0gbS5nZXRDb2xzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHZhbHVlc1tpXSA9PT0gMCkge1xuICAgICAgICAgICAgemVyb0luZGljZXMuYWRkKGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciByZW1vdmVCeVplcm9JbmRleCA9IGZ1bmN0aW9uIChfLCBpbmRleCkgeyByZXR1cm4gIXplcm9JbmRpY2VzLmhhcyhpbmRleCk7IH07XG4gICAgdmFyIG5leHRWYWx1ZXMgPSB2YWx1ZXMuZmlsdGVyKHJlbW92ZUJ5WmVyb0luZGV4KTtcbiAgICB2YXIgbmV4dFJvd3MgPSByb3dzLmZpbHRlcihyZW1vdmVCeVplcm9JbmRleCk7XG4gICAgdmFyIG5leHRDb2xzID0gY29scy5maWx0ZXIocmVtb3ZlQnlaZXJvSW5kZXgpO1xuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KG5leHRSb3dzLCBuZXh0Q29scywgbmV4dFZhbHVlcywgbS5nZXREaW1zKCkpO1xufVxuZXhwb3J0cy5lbGltaW5hdGVaZXJvcyA9IGVsaW1pbmF0ZVplcm9zO1xuZnVuY3Rpb24gbm9ybWFsaXplKG0sIG5vcm1UeXBlKSB7XG4gICAgaWYgKG5vcm1UeXBlID09PSB2b2lkIDApIHsgbm9ybVR5cGUgPSBcImwyXCI7IH1cbiAgICB2YXIgZV8xLCBfYTtcbiAgICB2YXIgbm9ybUZuID0gbm9ybUZuc1tub3JtVHlwZV07XG4gICAgdmFyIGNvbHNCeVJvdyA9IG5ldyBNYXAoKTtcbiAgICBtLmZvckVhY2goZnVuY3Rpb24gKF8sIHJvdywgY29sKSB7XG4gICAgICAgIHZhciBjb2xzID0gY29sc0J5Um93LmdldChyb3cpIHx8IFtdO1xuICAgICAgICBjb2xzLnB1c2goY29sKTtcbiAgICAgICAgY29sc0J5Um93LnNldChyb3csIGNvbHMpO1xuICAgIH0pO1xuICAgIHZhciBuZXh0TWF0cml4ID0gbmV3IFNwYXJzZU1hdHJpeChbXSwgW10sIFtdLCBtLmdldERpbXMoKSk7XG4gICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAocm93KSB7XG4gICAgICAgIHZhciBjb2xzID0gY29sc0J5Um93LmdldChyb3cpLnNvcnQoKTtcbiAgICAgICAgdmFyIHZhbHMgPSBjb2xzLm1hcChmdW5jdGlvbiAoY29sKSB7IHJldHVybiBtLmdldChyb3csIGNvbCk7IH0pO1xuICAgICAgICB2YXIgbm9ybSA9IG5vcm1Gbih2YWxzKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub3JtLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBuZXh0TWF0cml4LnNldChyb3csIGNvbHNbaV0sIG5vcm1baV0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgICBmb3IgKHZhciBfYiA9IF9fdmFsdWVzKGNvbHNCeVJvdy5rZXlzKCkpLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgcm93ID0gX2MudmFsdWU7XG4gICAgICAgICAgICBfbG9vcF8xKHJvdyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChfYyAmJiAhX2MuZG9uZSAmJiAoX2EgPSBfYi5yZXR1cm4pKSBfYS5jYWxsKF9iKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBuZXh0TWF0cml4O1xufVxuZXhwb3J0cy5ub3JtYWxpemUgPSBub3JtYWxpemU7XG52YXIgbm9ybUZucyA9IChfYSA9IHt9LFxuICAgIF9hW1wibWF4XCJdID0gZnVuY3Rpb24gKHhzKSB7XG4gICAgICAgIHZhciBtYXggPSAtSW5maW5pdHk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG1heCA9IHhzW2ldID4gbWF4ID8geHNbaV0gOiBtYXg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHhzLm1hcChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCAvIG1heDsgfSk7XG4gICAgfSxcbiAgICBfYVtcImwxXCJdID0gZnVuY3Rpb24gKHhzKSB7XG4gICAgICAgIHZhciBzdW0gPSAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzdW0gKz0geHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHhzLm1hcChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCAvIHN1bTsgfSk7XG4gICAgfSxcbiAgICBfYVtcImwyXCJdID0gZnVuY3Rpb24gKHhzKSB7XG4gICAgICAgIHZhciBzdW0gPSAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzdW0gKz0gTWF0aC5wb3coeHNbaV0sIDIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4cy5tYXAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyh4LCAyKSAvIHN1bSk7IH0pO1xuICAgIH0sXG4gICAgX2EpO1xuZnVuY3Rpb24gZWxlbWVudFdpc2UoYSwgYiwgb3ApIHtcbiAgICB2YXIgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgICB2YXIgcm93cyA9IFtdO1xuICAgIHZhciBjb2xzID0gW107XG4gICAgdmFyIHZhbHMgPSBbXTtcbiAgICB2YXIgb3BlcmF0ZSA9IGZ1bmN0aW9uIChyb3csIGNvbCkge1xuICAgICAgICByb3dzLnB1c2gocm93KTtcbiAgICAgICAgY29scy5wdXNoKGNvbCk7XG4gICAgICAgIHZhciBuZXh0VmFsdWUgPSBvcChhLmdldChyb3csIGNvbCksIGIuZ2V0KHJvdywgY29sKSk7XG4gICAgICAgIHZhbHMucHVzaChuZXh0VmFsdWUpO1xuICAgIH07XG4gICAgdmFyIHZhbHVlc0EgPSBhLmdldFZhbHVlcygpO1xuICAgIHZhciByb3dzQSA9IGEuZ2V0Um93cygpO1xuICAgIHZhciBjb2xzQSA9IGEuZ2V0Q29scygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzQS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcm93ID0gcm93c0FbaV07XG4gICAgICAgIHZhciBjb2wgPSBjb2xzQVtpXTtcbiAgICAgICAgdmFyIGtleSA9IHJvdyArIFwiOlwiICsgY29sO1xuICAgICAgICB2aXNpdGVkLmFkZChrZXkpO1xuICAgICAgICBvcGVyYXRlKHJvdywgY29sKTtcbiAgICB9XG4gICAgdmFyIHZhbHVlc0IgPSBiLmdldFZhbHVlcygpO1xuICAgIHZhciByb3dzQiA9IGIuZ2V0Um93cygpO1xuICAgIHZhciBjb2xzQiA9IGIuZ2V0Q29scygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzQi5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcm93ID0gcm93c0JbaV07XG4gICAgICAgIHZhciBjb2wgPSBjb2xzQltpXTtcbiAgICAgICAgdmFyIGtleSA9IHJvdyArIFwiOlwiICsgY29sO1xuICAgICAgICBpZiAodmlzaXRlZC5oYXMoa2V5KSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBvcGVyYXRlKHJvdywgY29sKTtcbiAgICB9XG4gICAgdmFyIGRpbXMgPSBbYS5uUm93cywgYS5uQ29sc107XG4gICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgocm93cywgY29scywgdmFscywgZGltcyk7XG59XG5mdW5jdGlvbiBnZXRDU1IoeCkge1xuICAgIHZhciBlbnRyaWVzID0gW107XG4gICAgeC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgcm93LCBjb2wpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKHsgdmFsdWU6IHZhbHVlLCByb3c6IHJvdywgY29sOiBjb2wgfSk7XG4gICAgfSk7XG4gICAgZW50cmllcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIGlmIChhLnJvdyA9PT0gYi5yb3cpIHtcbiAgICAgICAgICAgIHJldHVybiBhLmNvbCAtIGIuY29sO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGEucm93IC0gYi5yb3c7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICB2YXIgaW5kcHRyID0gW107XG4gICAgdmFyIGN1cnJlbnRSb3cgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIF9hID0gZW50cmllc1tpXSwgcm93ID0gX2Eucm93LCBjb2wgPSBfYS5jb2wsIHZhbHVlID0gX2EudmFsdWU7XG4gICAgICAgIGlmIChyb3cgIT09IGN1cnJlbnRSb3cpIHtcbiAgICAgICAgICAgIGN1cnJlbnRSb3cgPSByb3c7XG4gICAgICAgICAgICBpbmRwdHIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICBpbmRpY2VzLnB1c2goY29sKTtcbiAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4geyBpbmRpY2VzOiBpbmRpY2VzLCB2YWx1ZXM6IHZhbHVlcywgaW5kcHRyOiBpbmRwdHIgfTtcbn1cbmV4cG9ydHMuZ2V0Q1NSID0gZ2V0Q1NSO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX192YWx1ZXMgPSAodGhpcyAmJiB0aGlzLl9fdmFsdWVzKSB8fCBmdW5jdGlvbiAobykge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSwgaSA9IDA7XG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgICAgfVxuICAgIH07XG59O1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcbiAgICByZXN1bHRbXCJkZWZhdWx0XCJdID0gbW9kO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGhlYXAgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vaGVhcFwiKSk7XG52YXIgbWF0cml4ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL21hdHJpeFwiKSk7XG52YXIgdHJlZSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi90cmVlXCIpKTtcbnZhciB1dGlscyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi91dGlsc1wiKSk7XG5mdW5jdGlvbiBtYWtlTk5EZXNjZW50KGRpc3RhbmNlRm4sIHJhbmRvbSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBuTkRlc2NlbnQoZGF0YSwgbGVhZkFycmF5LCBuTmVpZ2hib3JzLCBuSXRlcnMsIG1heENhbmRpZGF0ZXMsIGRlbHRhLCByaG8sIHJwVHJlZUluaXQpIHtcbiAgICAgICAgaWYgKG5JdGVycyA9PT0gdm9pZCAwKSB7IG5JdGVycyA9IDEwOyB9XG4gICAgICAgIGlmIChtYXhDYW5kaWRhdGVzID09PSB2b2lkIDApIHsgbWF4Q2FuZGlkYXRlcyA9IDUwOyB9XG4gICAgICAgIGlmIChkZWx0YSA9PT0gdm9pZCAwKSB7IGRlbHRhID0gMC4wMDE7IH1cbiAgICAgICAgaWYgKHJobyA9PT0gdm9pZCAwKSB7IHJobyA9IDAuNTsgfVxuICAgICAgICBpZiAocnBUcmVlSW5pdCA9PT0gdm9pZCAwKSB7IHJwVHJlZUluaXQgPSB0cnVlOyB9XG4gICAgICAgIHZhciBuVmVydGljZXMgPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGN1cnJlbnRHcmFwaCA9IGhlYXAubWFrZUhlYXAoZGF0YS5sZW5ndGgsIG5OZWlnaGJvcnMpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBpbmRpY2VzID0gaGVhcC5yZWplY3Rpb25TYW1wbGUobk5laWdoYm9ycywgZGF0YS5sZW5ndGgsIHJhbmRvbSk7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGluZGljZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgZCA9IGRpc3RhbmNlRm4oZGF0YVtpXSwgZGF0YVtpbmRpY2VzW2pdXSk7XG4gICAgICAgICAgICAgICAgaGVhcC5oZWFwUHVzaChjdXJyZW50R3JhcGgsIGksIGQsIGluZGljZXNbal0sIDEpO1xuICAgICAgICAgICAgICAgIGhlYXAuaGVhcFB1c2goY3VycmVudEdyYXBoLCBpbmRpY2VzW2pdLCBkLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocnBUcmVlSW5pdCkge1xuICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBsZWFmQXJyYXkubGVuZ3RoOyBuKyspIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlYWZBcnJheVtuXS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAobGVhZkFycmF5W25dW2ldIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IGkgKyAxOyBqIDwgbGVhZkFycmF5W25dLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVhZkFycmF5W25dW2pdIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBkaXN0YW5jZUZuKGRhdGFbbGVhZkFycmF5W25dW2ldXSwgZGF0YVtsZWFmQXJyYXlbbl1bal1dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYXAuaGVhcFB1c2goY3VycmVudEdyYXBoLCBsZWFmQXJyYXlbbl1baV0sIGQsIGxlYWZBcnJheVtuXVtqXSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFwLmhlYXBQdXNoKGN1cnJlbnRHcmFwaCwgbGVhZkFycmF5W25dW2pdLCBkLCBsZWFmQXJyYXlbbl1baV0sIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbkl0ZXJzOyBuKyspIHtcbiAgICAgICAgICAgIHZhciBjYW5kaWRhdGVOZWlnaGJvcnMgPSBoZWFwLmJ1aWxkQ2FuZGlkYXRlcyhjdXJyZW50R3JhcGgsIG5WZXJ0aWNlcywgbk5laWdoYm9ycywgbWF4Q2FuZGlkYXRlcywgcmFuZG9tKTtcbiAgICAgICAgICAgIHZhciBjID0gMDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblZlcnRpY2VzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1heENhbmRpZGF0ZXM7IGorKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IE1hdGguZmxvb3IoY2FuZGlkYXRlTmVpZ2hib3JzWzBdW2ldW2pdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHAgPCAwIHx8IHV0aWxzLnRhdVJhbmQocmFuZG9tKSA8IHJobykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBtYXhDYW5kaWRhdGVzOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxID0gTWF0aC5mbG9vcihjYW5kaWRhdGVOZWlnaGJvcnNbMF1baV1ba10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNqID0gY2FuZGlkYXRlTmVpZ2hib3JzWzJdW2ldW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNrID0gY2FuZGlkYXRlTmVpZ2hib3JzWzJdW2ldW2tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEgPCAwIHx8ICghY2ogJiYgIWNrKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBkaXN0YW5jZUZuKGRhdGFbcF0sIGRhdGFbcV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYyArPSBoZWFwLmhlYXBQdXNoKGN1cnJlbnRHcmFwaCwgcCwgZCwgcSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjICs9IGhlYXAuaGVhcFB1c2goY3VycmVudEdyYXBoLCBxLCBkLCBwLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjIDw9IGRlbHRhICogbk5laWdoYm9ycyAqIGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNvcnRlZCA9IGhlYXAuZGVoZWFwU29ydChjdXJyZW50R3JhcGgpO1xuICAgICAgICByZXR1cm4gc29ydGVkO1xuICAgIH07XG59XG5leHBvcnRzLm1ha2VOTkRlc2NlbnQgPSBtYWtlTk5EZXNjZW50O1xuZnVuY3Rpb24gbWFrZUluaXRpYWxpemF0aW9ucyhkaXN0YW5jZUZuKSB7XG4gICAgZnVuY3Rpb24gaW5pdEZyb21SYW5kb20obk5laWdoYm9ycywgZGF0YSwgcXVlcnlQb2ludHMsIF9oZWFwLCByYW5kb20pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVyeVBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGluZGljZXMgPSB1dGlscy5yZWplY3Rpb25TYW1wbGUobk5laWdoYm9ycywgZGF0YS5sZW5ndGgsIHJhbmRvbSk7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGluZGljZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kaWNlc1tqXSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBkID0gZGlzdGFuY2VGbihkYXRhW2luZGljZXNbal1dLCBxdWVyeVBvaW50c1tpXSk7XG4gICAgICAgICAgICAgICAgaGVhcC5oZWFwUHVzaChfaGVhcCwgaSwgZCwgaW5kaWNlc1tqXSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaW5pdEZyb21UcmVlKF90cmVlLCBkYXRhLCBxdWVyeVBvaW50cywgX2hlYXAsIHJhbmRvbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXJ5UG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgaW5kaWNlcyA9IHRyZWUuc2VhcmNoRmxhdFRyZWUocXVlcnlQb2ludHNbaV0sIF90cmVlLCByYW5kb20pO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpbmRpY2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGljZXNbal0gPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGQgPSBkaXN0YW5jZUZuKGRhdGFbaW5kaWNlc1tqXV0sIHF1ZXJ5UG9pbnRzW2ldKTtcbiAgICAgICAgICAgICAgICBoZWFwLmhlYXBQdXNoKF9oZWFwLCBpLCBkLCBpbmRpY2VzW2pdLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiB7IGluaXRGcm9tUmFuZG9tOiBpbml0RnJvbVJhbmRvbSwgaW5pdEZyb21UcmVlOiBpbml0RnJvbVRyZWUgfTtcbn1cbmV4cG9ydHMubWFrZUluaXRpYWxpemF0aW9ucyA9IG1ha2VJbml0aWFsaXphdGlvbnM7XG5mdW5jdGlvbiBtYWtlSW5pdGlhbGl6ZWROTlNlYXJjaChkaXN0YW5jZUZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5uU2VhcmNoRm4oZGF0YSwgZ3JhcGgsIGluaXRpYWxpemF0aW9uLCBxdWVyeVBvaW50cykge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdmFyIF9iID0gbWF0cml4LmdldENTUihncmFwaCksIGluZGljZXMgPSBfYi5pbmRpY2VzLCBpbmRwdHIgPSBfYi5pbmRwdHI7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlcnlQb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciB0cmllZCA9IG5ldyBTZXQoaW5pdGlhbGl6YXRpb25bMF1baV0pO1xuICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmVydGV4ID0gaGVhcC5zbWFsbGVzdEZsYWdnZWQoaW5pdGlhbGl6YXRpb24sIGkpO1xuICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgY2FuZGlkYXRlcyA9IGluZGljZXMuc2xpY2UoaW5kcHRyW3ZlcnRleF0sIGluZHB0clt2ZXJ0ZXggKyAxXSk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgY2FuZGlkYXRlc18xID0gX192YWx1ZXMoY2FuZGlkYXRlcyksIGNhbmRpZGF0ZXNfMV8xID0gY2FuZGlkYXRlc18xLm5leHQoKTsgIWNhbmRpZGF0ZXNfMV8xLmRvbmU7IGNhbmRpZGF0ZXNfMV8xID0gY2FuZGlkYXRlc18xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZXNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PT0gdmVydGV4IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlID09PSAtMSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWVkLmhhcyhjYW5kaWRhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IGRpc3RhbmNlRm4oZGF0YVtjYW5kaWRhdGVdLCBxdWVyeVBvaW50c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFwLnVuY2hlY2tlZEhlYXBQdXNoKGluaXRpYWxpemF0aW9uLCBpLCBkLCBjYW5kaWRhdGUsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZWQuYWRkKGNhbmRpZGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGVzXzFfMSAmJiAhY2FuZGlkYXRlc18xXzEuZG9uZSAmJiAoX2EgPSBjYW5kaWRhdGVzXzEucmV0dXJuKSkgX2EuY2FsbChjYW5kaWRhdGVzXzEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluaXRpYWxpemF0aW9uO1xuICAgIH07XG59XG5leHBvcnRzLm1ha2VJbml0aWFsaXplZE5OU2VhcmNoID0gbWFrZUluaXRpYWxpemVkTk5TZWFyY2g7XG5mdW5jdGlvbiBpbml0aWFsaXplU2VhcmNoKGZvcmVzdCwgZGF0YSwgcXVlcnlQb2ludHMsIG5OZWlnaGJvcnMsIGluaXRGcm9tUmFuZG9tLCBpbml0RnJvbVRyZWUsIHJhbmRvbSkge1xuICAgIHZhciBlXzIsIF9hO1xuICAgIHZhciByZXN1bHRzID0gaGVhcC5tYWtlSGVhcChxdWVyeVBvaW50cy5sZW5ndGgsIG5OZWlnaGJvcnMpO1xuICAgIGluaXRGcm9tUmFuZG9tKG5OZWlnaGJvcnMsIGRhdGEsIHF1ZXJ5UG9pbnRzLCByZXN1bHRzLCByYW5kb20pO1xuICAgIGlmIChmb3Jlc3QpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGZvcmVzdF8xID0gX192YWx1ZXMoZm9yZXN0KSwgZm9yZXN0XzFfMSA9IGZvcmVzdF8xLm5leHQoKTsgIWZvcmVzdF8xXzEuZG9uZTsgZm9yZXN0XzFfMSA9IGZvcmVzdF8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgIHZhciB0cmVlXzEgPSBmb3Jlc3RfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIGluaXRGcm9tVHJlZSh0cmVlXzEsIGRhdGEsIHF1ZXJ5UG9pbnRzLCByZXN1bHRzLCByYW5kb20pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoZm9yZXN0XzFfMSAmJiAhZm9yZXN0XzFfMS5kb25lICYmIChfYSA9IGZvcmVzdF8xLnJldHVybikpIF9hLmNhbGwoZm9yZXN0XzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xufVxuZXhwb3J0cy5pbml0aWFsaXplU2VhcmNoID0gaW5pdGlhbGl6ZVNlYXJjaDtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZCkgfHwgZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3ZhbHVlcyA9ICh0aGlzICYmIHRoaXMuX192YWx1ZXMpIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdLCBpID0gMDtcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgICB9XG4gICAgfTtcbn07XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgcmVzdWx0W2tdID0gbW9kW2tdO1xuICAgIHJlc3VsdFtcImRlZmF1bHRcIl0gPSBtb2Q7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdXRpbHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vdXRpbHNcIikpO1xudmFyIEZsYXRUcmVlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBGbGF0VHJlZShoeXBlcnBsYW5lcywgb2Zmc2V0cywgY2hpbGRyZW4sIGluZGljZXMpIHtcbiAgICAgICAgdGhpcy5oeXBlcnBsYW5lcyA9IGh5cGVycGxhbmVzO1xuICAgICAgICB0aGlzLm9mZnNldHMgPSBvZmZzZXRzO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXM7XG4gICAgfVxuICAgIHJldHVybiBGbGF0VHJlZTtcbn0oKSk7XG5leHBvcnRzLkZsYXRUcmVlID0gRmxhdFRyZWU7XG5mdW5jdGlvbiBtYWtlRm9yZXN0KGRhdGEsIG5OZWlnaGJvcnMsIG5UcmVlcywgcmFuZG9tKSB7XG4gICAgdmFyIGxlYWZTaXplID0gTWF0aC5tYXgoMTAsIG5OZWlnaGJvcnMpO1xuICAgIHZhciB0cmVlcyA9IHV0aWxzXG4gICAgICAgIC5yYW5nZShuVHJlZXMpXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKF8sIGkpIHsgcmV0dXJuIG1ha2VUcmVlKGRhdGEsIGxlYWZTaXplLCBpLCByYW5kb20pOyB9KTtcbiAgICB2YXIgZm9yZXN0ID0gdHJlZXMubWFwKGZ1bmN0aW9uICh0cmVlKSB7IHJldHVybiBmbGF0dGVuVHJlZSh0cmVlLCBsZWFmU2l6ZSk7IH0pO1xuICAgIHJldHVybiBmb3Jlc3Q7XG59XG5leHBvcnRzLm1ha2VGb3Jlc3QgPSBtYWtlRm9yZXN0O1xuZnVuY3Rpb24gbWFrZVRyZWUoZGF0YSwgbGVhZlNpemUsIG4sIHJhbmRvbSkge1xuICAgIGlmIChsZWFmU2l6ZSA9PT0gdm9pZCAwKSB7IGxlYWZTaXplID0gMzA7IH1cbiAgICB2YXIgaW5kaWNlcyA9IHV0aWxzLnJhbmdlKGRhdGEubGVuZ3RoKTtcbiAgICB2YXIgdHJlZSA9IG1ha2VFdWNsaWRlYW5UcmVlKGRhdGEsIGluZGljZXMsIGxlYWZTaXplLCBuLCByYW5kb20pO1xuICAgIHJldHVybiB0cmVlO1xufVxuZnVuY3Rpb24gbWFrZUV1Y2xpZGVhblRyZWUoZGF0YSwgaW5kaWNlcywgbGVhZlNpemUsIHEsIHJhbmRvbSkge1xuICAgIGlmIChsZWFmU2l6ZSA9PT0gdm9pZCAwKSB7IGxlYWZTaXplID0gMzA7IH1cbiAgICBpZiAoaW5kaWNlcy5sZW5ndGggPiBsZWFmU2l6ZSkge1xuICAgICAgICB2YXIgc3BsaXRSZXN1bHRzID0gZXVjbGlkZWFuUmFuZG9tUHJvamVjdGlvblNwbGl0KGRhdGEsIGluZGljZXMsIHJhbmRvbSk7XG4gICAgICAgIHZhciBpbmRpY2VzTGVmdCA9IHNwbGl0UmVzdWx0cy5pbmRpY2VzTGVmdCwgaW5kaWNlc1JpZ2h0ID0gc3BsaXRSZXN1bHRzLmluZGljZXNSaWdodCwgaHlwZXJwbGFuZSA9IHNwbGl0UmVzdWx0cy5oeXBlcnBsYW5lLCBvZmZzZXQgPSBzcGxpdFJlc3VsdHMub2Zmc2V0O1xuICAgICAgICB2YXIgbGVmdENoaWxkID0gbWFrZUV1Y2xpZGVhblRyZWUoZGF0YSwgaW5kaWNlc0xlZnQsIGxlYWZTaXplLCBxICsgMSwgcmFuZG9tKTtcbiAgICAgICAgdmFyIHJpZ2h0Q2hpbGQgPSBtYWtlRXVjbGlkZWFuVHJlZShkYXRhLCBpbmRpY2VzUmlnaHQsIGxlYWZTaXplLCBxICsgMSwgcmFuZG9tKTtcbiAgICAgICAgdmFyIG5vZGUgPSB7IGxlZnRDaGlsZDogbGVmdENoaWxkLCByaWdodENoaWxkOiByaWdodENoaWxkLCBpc0xlYWY6IGZhbHNlLCBoeXBlcnBsYW5lOiBoeXBlcnBsYW5lLCBvZmZzZXQ6IG9mZnNldCB9O1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBub2RlID0geyBpbmRpY2VzOiBpbmRpY2VzLCBpc0xlYWY6IHRydWUgfTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxufVxuZnVuY3Rpb24gZXVjbGlkZWFuUmFuZG9tUHJvamVjdGlvblNwbGl0KGRhdGEsIGluZGljZXMsIHJhbmRvbSkge1xuICAgIHZhciBkaW0gPSBkYXRhWzBdLmxlbmd0aDtcbiAgICB2YXIgbGVmdEluZGV4ID0gdXRpbHMudGF1UmFuZEludChpbmRpY2VzLmxlbmd0aCwgcmFuZG9tKTtcbiAgICB2YXIgcmlnaHRJbmRleCA9IHV0aWxzLnRhdVJhbmRJbnQoaW5kaWNlcy5sZW5ndGgsIHJhbmRvbSk7XG4gICAgcmlnaHRJbmRleCArPSBsZWZ0SW5kZXggPT09IHJpZ2h0SW5kZXggPyAxIDogMDtcbiAgICByaWdodEluZGV4ID0gcmlnaHRJbmRleCAlIGluZGljZXMubGVuZ3RoO1xuICAgIHZhciBsZWZ0ID0gaW5kaWNlc1tsZWZ0SW5kZXhdO1xuICAgIHZhciByaWdodCA9IGluZGljZXNbcmlnaHRJbmRleF07XG4gICAgdmFyIGh5cGVycGxhbmVPZmZzZXQgPSAwO1xuICAgIHZhciBoeXBlcnBsYW5lVmVjdG9yID0gdXRpbHMuemVyb3MoZGltKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGh5cGVycGxhbmVWZWN0b3IubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaHlwZXJwbGFuZVZlY3RvcltpXSA9IGRhdGFbbGVmdF1baV0gLSBkYXRhW3JpZ2h0XVtpXTtcbiAgICAgICAgaHlwZXJwbGFuZU9mZnNldCAtPVxuICAgICAgICAgICAgKGh5cGVycGxhbmVWZWN0b3JbaV0gKiAoZGF0YVtsZWZ0XVtpXSArIGRhdGFbcmlnaHRdW2ldKSkgLyAyLjA7XG4gICAgfVxuICAgIHZhciBuTGVmdCA9IDA7XG4gICAgdmFyIG5SaWdodCA9IDA7XG4gICAgdmFyIHNpZGUgPSB1dGlscy56ZXJvcyhpbmRpY2VzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBtYXJnaW4gPSBoeXBlcnBsYW5lT2Zmc2V0O1xuICAgICAgICBmb3IgKHZhciBkID0gMDsgZCA8IGRpbTsgZCsrKSB7XG4gICAgICAgICAgICBtYXJnaW4gKz0gaHlwZXJwbGFuZVZlY3RvcltkXSAqIGRhdGFbaW5kaWNlc1tpXV1bZF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hcmdpbiA9PT0gMCkge1xuICAgICAgICAgICAgc2lkZVtpXSA9IHV0aWxzLnRhdVJhbmRJbnQoMiwgcmFuZG9tKTtcbiAgICAgICAgICAgIGlmIChzaWRlW2ldID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbkxlZnQgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG5SaWdodCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1hcmdpbiA+IDApIHtcbiAgICAgICAgICAgIHNpZGVbaV0gPSAwO1xuICAgICAgICAgICAgbkxlZnQgKz0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNpZGVbaV0gPSAxO1xuICAgICAgICAgICAgblJpZ2h0ICs9IDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIGluZGljZXNMZWZ0ID0gdXRpbHMuemVyb3MobkxlZnQpO1xuICAgIHZhciBpbmRpY2VzUmlnaHQgPSB1dGlscy56ZXJvcyhuUmlnaHQpO1xuICAgIG5MZWZ0ID0gMDtcbiAgICBuUmlnaHQgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2lkZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoc2lkZVtpXSA9PT0gMCkge1xuICAgICAgICAgICAgaW5kaWNlc0xlZnRbbkxlZnRdID0gaW5kaWNlc1tpXTtcbiAgICAgICAgICAgIG5MZWZ0ICs9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpbmRpY2VzUmlnaHRbblJpZ2h0XSA9IGluZGljZXNbaV07XG4gICAgICAgICAgICBuUmlnaHQgKz0gMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBpbmRpY2VzTGVmdDogaW5kaWNlc0xlZnQsXG4gICAgICAgIGluZGljZXNSaWdodDogaW5kaWNlc1JpZ2h0LFxuICAgICAgICBoeXBlcnBsYW5lOiBoeXBlcnBsYW5lVmVjdG9yLFxuICAgICAgICBvZmZzZXQ6IGh5cGVycGxhbmVPZmZzZXQsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGZsYXR0ZW5UcmVlKHRyZWUsIGxlYWZTaXplKSB7XG4gICAgdmFyIG5Ob2RlcyA9IG51bU5vZGVzKHRyZWUpO1xuICAgIHZhciBuTGVhdmVzID0gbnVtTGVhdmVzKHRyZWUpO1xuICAgIHZhciBoeXBlcnBsYW5lcyA9IHV0aWxzXG4gICAgICAgIC5yYW5nZShuTm9kZXMpXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdXRpbHMuemVyb3ModHJlZS5oeXBlcnBsYW5lID8gdHJlZS5oeXBlcnBsYW5lLmxlbmd0aCA6IDApOyB9KTtcbiAgICB2YXIgb2Zmc2V0cyA9IHV0aWxzLnplcm9zKG5Ob2Rlcyk7XG4gICAgdmFyIGNoaWxkcmVuID0gdXRpbHMucmFuZ2Uobk5vZGVzKS5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gWy0xLCAtMV07IH0pO1xuICAgIHZhciBpbmRpY2VzID0gdXRpbHNcbiAgICAgICAgLnJhbmdlKG5MZWF2ZXMpXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdXRpbHMucmFuZ2UobGVhZlNpemUpLm1hcChmdW5jdGlvbiAoKSB7IHJldHVybiAtMTsgfSk7IH0pO1xuICAgIHJlY3Vyc2l2ZUZsYXR0ZW4odHJlZSwgaHlwZXJwbGFuZXMsIG9mZnNldHMsIGNoaWxkcmVuLCBpbmRpY2VzLCAwLCAwKTtcbiAgICByZXR1cm4gbmV3IEZsYXRUcmVlKGh5cGVycGxhbmVzLCBvZmZzZXRzLCBjaGlsZHJlbiwgaW5kaWNlcyk7XG59XG5mdW5jdGlvbiByZWN1cnNpdmVGbGF0dGVuKHRyZWUsIGh5cGVycGxhbmVzLCBvZmZzZXRzLCBjaGlsZHJlbiwgaW5kaWNlcywgbm9kZU51bSwgbGVhZk51bSkge1xuICAgIHZhciBfYTtcbiAgICBpZiAodHJlZS5pc0xlYWYpIHtcbiAgICAgICAgY2hpbGRyZW5bbm9kZU51bV1bMF0gPSAtbGVhZk51bTtcbiAgICAgICAgKF9hID0gaW5kaWNlc1tsZWFmTnVtXSkuc3BsaWNlLmFwcGx5KF9hLCBfX3NwcmVhZChbMCwgdHJlZS5pbmRpY2VzLmxlbmd0aF0sIHRyZWUuaW5kaWNlcykpO1xuICAgICAgICBsZWFmTnVtICs9IDE7XG4gICAgICAgIHJldHVybiB7IG5vZGVOdW06IG5vZGVOdW0sIGxlYWZOdW06IGxlYWZOdW0gfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGh5cGVycGxhbmVzW25vZGVOdW1dID0gdHJlZS5oeXBlcnBsYW5lO1xuICAgICAgICBvZmZzZXRzW25vZGVOdW1dID0gdHJlZS5vZmZzZXQ7XG4gICAgICAgIGNoaWxkcmVuW25vZGVOdW1dWzBdID0gbm9kZU51bSArIDE7XG4gICAgICAgIHZhciBvbGROb2RlTnVtID0gbm9kZU51bTtcbiAgICAgICAgdmFyIHJlcyA9IHJlY3Vyc2l2ZUZsYXR0ZW4odHJlZS5sZWZ0Q2hpbGQsIGh5cGVycGxhbmVzLCBvZmZzZXRzLCBjaGlsZHJlbiwgaW5kaWNlcywgbm9kZU51bSArIDEsIGxlYWZOdW0pO1xuICAgICAgICBub2RlTnVtID0gcmVzLm5vZGVOdW07XG4gICAgICAgIGxlYWZOdW0gPSByZXMubGVhZk51bTtcbiAgICAgICAgY2hpbGRyZW5bb2xkTm9kZU51bV1bMV0gPSBub2RlTnVtICsgMTtcbiAgICAgICAgcmVzID0gcmVjdXJzaXZlRmxhdHRlbih0cmVlLnJpZ2h0Q2hpbGQsIGh5cGVycGxhbmVzLCBvZmZzZXRzLCBjaGlsZHJlbiwgaW5kaWNlcywgbm9kZU51bSArIDEsIGxlYWZOdW0pO1xuICAgICAgICByZXR1cm4geyBub2RlTnVtOiByZXMubm9kZU51bSwgbGVhZk51bTogcmVzLmxlYWZOdW0gfTtcbiAgICB9XG59XG5mdW5jdGlvbiBudW1Ob2Rlcyh0cmVlKSB7XG4gICAgaWYgKHRyZWUuaXNMZWFmKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDEgKyBudW1Ob2Rlcyh0cmVlLmxlZnRDaGlsZCkgKyBudW1Ob2Rlcyh0cmVlLnJpZ2h0Q2hpbGQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG51bUxlYXZlcyh0cmVlKSB7XG4gICAgaWYgKHRyZWUuaXNMZWFmKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bUxlYXZlcyh0cmVlLmxlZnRDaGlsZCkgKyBudW1MZWF2ZXModHJlZS5yaWdodENoaWxkKTtcbiAgICB9XG59XG5mdW5jdGlvbiBtYWtlTGVhZkFycmF5KHJwRm9yZXN0KSB7XG4gICAgdmFyIGVfMSwgX2E7XG4gICAgaWYgKHJwRm9yZXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIG91dHB1dCA9IFtdO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgcnBGb3Jlc3RfMSA9IF9fdmFsdWVzKHJwRm9yZXN0KSwgcnBGb3Jlc3RfMV8xID0gcnBGb3Jlc3RfMS5uZXh0KCk7ICFycEZvcmVzdF8xXzEuZG9uZTsgcnBGb3Jlc3RfMV8xID0gcnBGb3Jlc3RfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHJlZSA9IHJwRm9yZXN0XzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaC5hcHBseShvdXRwdXQsIF9fc3ByZWFkKHRyZWUuaW5kaWNlcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAocnBGb3Jlc3RfMV8xICYmICFycEZvcmVzdF8xXzEuZG9uZSAmJiAoX2EgPSBycEZvcmVzdF8xLnJldHVybikpIF9hLmNhbGwocnBGb3Jlc3RfMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBbWy0xXV07XG4gICAgfVxufVxuZXhwb3J0cy5tYWtlTGVhZkFycmF5ID0gbWFrZUxlYWZBcnJheTtcbmZ1bmN0aW9uIHNlbGVjdFNpZGUoaHlwZXJwbGFuZSwgb2Zmc2V0LCBwb2ludCwgcmFuZG9tKSB7XG4gICAgdmFyIG1hcmdpbiA9IG9mZnNldDtcbiAgICBmb3IgKHZhciBkID0gMDsgZCA8IHBvaW50Lmxlbmd0aDsgZCsrKSB7XG4gICAgICAgIG1hcmdpbiArPSBoeXBlcnBsYW5lW2RdICogcG9pbnRbZF07XG4gICAgfVxuICAgIGlmIChtYXJnaW4gPT09IDApIHtcbiAgICAgICAgdmFyIHNpZGUgPSB1dGlscy50YXVSYW5kSW50KDIsIHJhbmRvbSk7XG4gICAgICAgIHJldHVybiBzaWRlO1xuICAgIH1cbiAgICBlbHNlIGlmIChtYXJnaW4gPiAwKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxufVxuZnVuY3Rpb24gc2VhcmNoRmxhdFRyZWUocG9pbnQsIHRyZWUsIHJhbmRvbSkge1xuICAgIHZhciBub2RlID0gMDtcbiAgICB3aGlsZSAodHJlZS5jaGlsZHJlbltub2RlXVswXSA+IDApIHtcbiAgICAgICAgdmFyIHNpZGUgPSBzZWxlY3RTaWRlKHRyZWUuaHlwZXJwbGFuZXNbbm9kZV0sIHRyZWUub2Zmc2V0c1tub2RlXSwgcG9pbnQsIHJhbmRvbSk7XG4gICAgICAgIGlmIChzaWRlID09PSAwKSB7XG4gICAgICAgICAgICBub2RlID0gdHJlZS5jaGlsZHJlbltub2RlXVswXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5vZGUgPSB0cmVlLmNoaWxkcmVuW25vZGVdWzFdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBpbmRleCA9IC0xICogdHJlZS5jaGlsZHJlbltub2RlXVswXTtcbiAgICByZXR1cm4gdHJlZS5pbmRpY2VzW2luZGV4XTtcbn1cbmV4cG9ydHMuc2VhcmNoRmxhdFRyZWUgPSBzZWFyY2hGbGF0VHJlZTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZShyZXN1bHQudmFsdWUpOyB9KS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZCA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWQpIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgcmVzdWx0W2tdID0gbW9kW2tdO1xuICAgIHJlc3VsdFtcImRlZmF1bHRcIl0gPSBtb2Q7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgaGVhcCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9oZWFwXCIpKTtcbnZhciBtYXRyaXggPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vbWF0cml4XCIpKTtcbnZhciBubkRlc2NlbnQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vbm5fZGVzY2VudFwiKSk7XG52YXIgdHJlZSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi90cmVlXCIpKTtcbnZhciB1dGlscyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi91dGlsc1wiKSk7XG52YXIgbWxfbGV2ZW5iZXJnX21hcnF1YXJkdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJtbC1sZXZlbmJlcmctbWFycXVhcmR0XCIpKTtcbnZhciBTTU9PVEhfS19UT0xFUkFOQ0UgPSAxZS01O1xudmFyIE1JTl9LX0RJU1RfU0NBTEUgPSAxZS0zO1xudmFyIFVNQVAgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFVNQVAocGFyYW1zKSB7XG4gICAgICAgIGlmIChwYXJhbXMgPT09IHZvaWQgMCkgeyBwYXJhbXMgPSB7fTsgfVxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLmxlYXJuaW5nUmF0ZSA9IDEuMDtcbiAgICAgICAgdGhpcy5sb2NhbENvbm5lY3Rpdml0eSA9IDEuMDtcbiAgICAgICAgdGhpcy5taW5EaXN0ID0gMC4xO1xuICAgICAgICB0aGlzLm5Db21wb25lbnRzID0gMjtcbiAgICAgICAgdGhpcy5uRXBvY2hzID0gMDtcbiAgICAgICAgdGhpcy5uTmVpZ2hib3JzID0gMTU7XG4gICAgICAgIHRoaXMubmVnYXRpdmVTYW1wbGVSYXRlID0gNTtcbiAgICAgICAgdGhpcy5yYW5kb20gPSBNYXRoLnJhbmRvbTtcbiAgICAgICAgdGhpcy5yZXB1bHNpb25TdHJlbmd0aCA9IDEuMDtcbiAgICAgICAgdGhpcy5zZXRPcE1peFJhdGlvID0gMS4wO1xuICAgICAgICB0aGlzLnNwcmVhZCA9IDEuMDtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1RdWV1ZVNpemUgPSA0LjA7XG4gICAgICAgIHRoaXMudGFyZ2V0TWV0cmljID0gXCJjYXRlZ29yaWNhbFwiO1xuICAgICAgICB0aGlzLnRhcmdldFdlaWdodCA9IDAuNTtcbiAgICAgICAgdGhpcy50YXJnZXROTmVpZ2hib3JzID0gdGhpcy5uTmVpZ2hib3JzO1xuICAgICAgICB0aGlzLmRpc3RhbmNlRm4gPSBldWNsaWRlYW47XG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJwRm9yZXN0ID0gW107XG4gICAgICAgIHRoaXMuZW1iZWRkaW5nID0gW107XG4gICAgICAgIHRoaXMub3B0aW1pemF0aW9uU3RhdGUgPSBuZXcgT3B0aW1pemF0aW9uU3RhdGUoKTtcbiAgICAgICAgdmFyIHNldFBhcmFtID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaWYgKHBhcmFtc1trZXldICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgX3RoaXNba2V5XSA9IHBhcmFtc1trZXldO1xuICAgICAgICB9O1xuICAgICAgICBzZXRQYXJhbSgnZGlzdGFuY2VGbicpO1xuICAgICAgICBzZXRQYXJhbSgnbGVhcm5pbmdSYXRlJyk7XG4gICAgICAgIHNldFBhcmFtKCdsb2NhbENvbm5lY3Rpdml0eScpO1xuICAgICAgICBzZXRQYXJhbSgnbWluRGlzdCcpO1xuICAgICAgICBzZXRQYXJhbSgnbkNvbXBvbmVudHMnKTtcbiAgICAgICAgc2V0UGFyYW0oJ25FcG9jaHMnKTtcbiAgICAgICAgc2V0UGFyYW0oJ25OZWlnaGJvcnMnKTtcbiAgICAgICAgc2V0UGFyYW0oJ25lZ2F0aXZlU2FtcGxlUmF0ZScpO1xuICAgICAgICBzZXRQYXJhbSgncmFuZG9tJyk7XG4gICAgICAgIHNldFBhcmFtKCdyZXB1bHNpb25TdHJlbmd0aCcpO1xuICAgICAgICBzZXRQYXJhbSgnc2V0T3BNaXhSYXRpbycpO1xuICAgICAgICBzZXRQYXJhbSgnc3ByZWFkJyk7XG4gICAgICAgIHNldFBhcmFtKCd0cmFuc2Zvcm1RdWV1ZVNpemUnKTtcbiAgICB9XG4gICAgVU1BUC5wcm90b3R5cGUuZml0ID0gZnVuY3Rpb24gKFgpIHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplRml0KFgpO1xuICAgICAgICB0aGlzLm9wdGltaXplTGF5b3V0KCk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtYmVkZGluZztcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLmZpdEFzeW5jID0gZnVuY3Rpb24gKFgsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChjYWxsYmFjayA9PT0gdm9pZCAwKSB7IGNhbGxiYWNrID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfTsgfVxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVGaXQoWCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIHRoaXMub3B0aW1pemVMYXlvdXRBc3luYyhjYWxsYmFjayldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIsIHRoaXMuZW1iZWRkaW5nXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5zZXRTdXBlcnZpc2VkUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChZLCBwYXJhbXMpIHtcbiAgICAgICAgaWYgKHBhcmFtcyA9PT0gdm9pZCAwKSB7IHBhcmFtcyA9IHt9OyB9XG4gICAgICAgIHRoaXMuWSA9IFk7XG4gICAgICAgIHRoaXMudGFyZ2V0TWV0cmljID0gcGFyYW1zLnRhcmdldE1ldHJpYyB8fCB0aGlzLnRhcmdldE1ldHJpYztcbiAgICAgICAgdGhpcy50YXJnZXRXZWlnaHQgPSBwYXJhbXMudGFyZ2V0V2VpZ2h0IHx8IHRoaXMudGFyZ2V0V2VpZ2h0O1xuICAgICAgICB0aGlzLnRhcmdldE5OZWlnaGJvcnMgPSBwYXJhbXMudGFyZ2V0Tk5laWdoYm9ycyB8fCB0aGlzLnRhcmdldE5OZWlnaGJvcnM7XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5zZXRQcmVjb21wdXRlZEtOTiA9IGZ1bmN0aW9uIChrbm5JbmRpY2VzLCBrbm5EaXN0YW5jZXMpIHtcbiAgICAgICAgdGhpcy5rbm5JbmRpY2VzID0ga25uSW5kaWNlcztcbiAgICAgICAgdGhpcy5rbm5EaXN0YW5jZXMgPSBrbm5EaXN0YW5jZXM7XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5pbml0aWFsaXplRml0ID0gZnVuY3Rpb24gKFgpIHtcbiAgICAgICAgaWYgKFgubGVuZ3RoIDw9IHRoaXMubk5laWdoYm9ycykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm90IGVub3VnaCBkYXRhIHBvaW50cyAoXCIgKyBYLmxlbmd0aCArIFwiKSB0byBjcmVhdGUgbk5laWdoYm9yczogXCIgKyB0aGlzLm5OZWlnaGJvcnMgKyBcIi4gIEFkZCBtb3JlIGRhdGEgcG9pbnRzIG9yIGFkanVzdCB0aGUgY29uZmlndXJhdGlvbi5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuWCA9PT0gWCAmJiB0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE5FcG9jaHMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLlggPSBYO1xuICAgICAgICBpZiAoIXRoaXMua25uSW5kaWNlcyAmJiAhdGhpcy5rbm5EaXN0YW5jZXMpIHtcbiAgICAgICAgICAgIHZhciBrbm5SZXN1bHRzID0gdGhpcy5uZWFyZXN0TmVpZ2hib3JzKFgpO1xuICAgICAgICAgICAgdGhpcy5rbm5JbmRpY2VzID0ga25uUmVzdWx0cy5rbm5JbmRpY2VzO1xuICAgICAgICAgICAgdGhpcy5rbm5EaXN0YW5jZXMgPSBrbm5SZXN1bHRzLmtubkRpc3RhbmNlcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5mdXp6eVNpbXBsaWNpYWxTZXQoWCwgdGhpcy5uTmVpZ2hib3JzLCB0aGlzLnNldE9wTWl4UmF0aW8pO1xuICAgICAgICB0aGlzLm1ha2VTZWFyY2hGbnMoKTtcbiAgICAgICAgdGhpcy5zZWFyY2hHcmFwaCA9IHRoaXMubWFrZVNlYXJjaEdyYXBoKFgpO1xuICAgICAgICB0aGlzLnByb2Nlc3NHcmFwaEZvclN1cGVydmlzZWRQcm9qZWN0aW9uKCk7XG4gICAgICAgIHZhciBfYSA9IHRoaXMuaW5pdGlhbGl6ZVNpbXBsaWNpYWxTZXRFbWJlZGRpbmcoKSwgaGVhZCA9IF9hLmhlYWQsIHRhaWwgPSBfYS50YWlsLCBlcG9jaHNQZXJTYW1wbGUgPSBfYS5lcG9jaHNQZXJTYW1wbGU7XG4gICAgICAgIHRoaXMub3B0aW1pemF0aW9uU3RhdGUuaGVhZCA9IGhlYWQ7XG4gICAgICAgIHRoaXMub3B0aW1pemF0aW9uU3RhdGUudGFpbCA9IHRhaWw7XG4gICAgICAgIHRoaXMub3B0aW1pemF0aW9uU3RhdGUuZXBvY2hzUGVyU2FtcGxlID0gZXBvY2hzUGVyU2FtcGxlO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVPcHRpbWl6YXRpb24oKTtcbiAgICAgICAgdGhpcy5wcmVwYXJlRm9yT3B0aW1pemF0aW9uTG9vcCgpO1xuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRORXBvY2hzKCk7XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5tYWtlU2VhcmNoRm5zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSBubkRlc2NlbnQubWFrZUluaXRpYWxpemF0aW9ucyh0aGlzLmRpc3RhbmNlRm4pLCBpbml0RnJvbVRyZWUgPSBfYS5pbml0RnJvbVRyZWUsIGluaXRGcm9tUmFuZG9tID0gX2EuaW5pdEZyb21SYW5kb207XG4gICAgICAgIHRoaXMuaW5pdEZyb21UcmVlID0gaW5pdEZyb21UcmVlO1xuICAgICAgICB0aGlzLmluaXRGcm9tUmFuZG9tID0gaW5pdEZyb21SYW5kb207XG4gICAgICAgIHRoaXMuc2VhcmNoID0gbm5EZXNjZW50Lm1ha2VJbml0aWFsaXplZE5OU2VhcmNoKHRoaXMuZGlzdGFuY2VGbik7XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5tYWtlU2VhcmNoR3JhcGggPSBmdW5jdGlvbiAoWCkge1xuICAgICAgICB2YXIga25uSW5kaWNlcyA9IHRoaXMua25uSW5kaWNlcztcbiAgICAgICAgdmFyIGtubkRpc3RhbmNlcyA9IHRoaXMua25uRGlzdGFuY2VzO1xuICAgICAgICB2YXIgZGltcyA9IFtYLmxlbmd0aCwgWC5sZW5ndGhdO1xuICAgICAgICB2YXIgc2VhcmNoR3JhcGggPSBuZXcgbWF0cml4LlNwYXJzZU1hdHJpeChbXSwgW10sIFtdLCBkaW1zKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrbm5JbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIga25uID0ga25uSW5kaWNlc1tpXTtcbiAgICAgICAgICAgIHZhciBkaXN0YW5jZXMgPSBrbm5EaXN0YW5jZXNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtubi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBuZWlnaGJvciA9IGtubltqXTtcbiAgICAgICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSBkaXN0YW5jZXNbal07XG4gICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBzZWFyY2hHcmFwaC5zZXQoaSwgbmVpZ2hib3IsIGRpc3RhbmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRyYW5zcG9zZSA9IG1hdHJpeC50cmFuc3Bvc2Uoc2VhcmNoR3JhcGgpO1xuICAgICAgICByZXR1cm4gbWF0cml4Lm1heGltdW0oc2VhcmNoR3JhcGgsIHRyYW5zcG9zZSk7XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiAodG9UcmFuc2Zvcm0pIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHJhd0RhdGEgPSB0aGlzLlg7XG4gICAgICAgIGlmIChyYXdEYXRhID09PSB1bmRlZmluZWQgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gZGF0YSBoYXMgYmVlbiBmaXQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5OZWlnaGJvcnMgPSBNYXRoLmZsb29yKHRoaXMubk5laWdoYm9ycyAqIHRoaXMudHJhbnNmb3JtUXVldWVTaXplKTtcbiAgICAgICAgbk5laWdoYm9ycyA9IE1hdGgubWluKHJhd0RhdGEubGVuZ3RoLCBuTmVpZ2hib3JzKTtcbiAgICAgICAgdmFyIGluaXQgPSBubkRlc2NlbnQuaW5pdGlhbGl6ZVNlYXJjaCh0aGlzLnJwRm9yZXN0LCByYXdEYXRhLCB0b1RyYW5zZm9ybSwgbk5laWdoYm9ycywgdGhpcy5pbml0RnJvbVJhbmRvbSwgdGhpcy5pbml0RnJvbVRyZWUsIHRoaXMucmFuZG9tKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuc2VhcmNoKHJhd0RhdGEsIHRoaXMuc2VhcmNoR3JhcGgsIGluaXQsIHRvVHJhbnNmb3JtKTtcbiAgICAgICAgdmFyIF9hID0gaGVhcC5kZWhlYXBTb3J0KHJlc3VsdCksIGluZGljZXMgPSBfYS5pbmRpY2VzLCBkaXN0YW5jZXMgPSBfYS53ZWlnaHRzO1xuICAgICAgICBpbmRpY2VzID0gaW5kaWNlcy5tYXAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHguc2xpY2UoMCwgX3RoaXMubk5laWdoYm9ycyk7IH0pO1xuICAgICAgICBkaXN0YW5jZXMgPSBkaXN0YW5jZXMubWFwKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnNsaWNlKDAsIF90aGlzLm5OZWlnaGJvcnMpOyB9KTtcbiAgICAgICAgdmFyIGFkanVzdGVkTG9jYWxDb25uZWN0aXZpdHkgPSBNYXRoLm1heCgwLCB0aGlzLmxvY2FsQ29ubmVjdGl2aXR5IC0gMSk7XG4gICAgICAgIHZhciBfYiA9IHRoaXMuc21vb3RoS05ORGlzdGFuY2UoZGlzdGFuY2VzLCB0aGlzLm5OZWlnaGJvcnMsIGFkanVzdGVkTG9jYWxDb25uZWN0aXZpdHkpLCBzaWdtYXMgPSBfYi5zaWdtYXMsIHJob3MgPSBfYi5yaG9zO1xuICAgICAgICB2YXIgX2MgPSB0aGlzLmNvbXB1dGVNZW1iZXJzaGlwU3RyZW5ndGhzKGluZGljZXMsIGRpc3RhbmNlcywgc2lnbWFzLCByaG9zKSwgcm93cyA9IF9jLnJvd3MsIGNvbHMgPSBfYy5jb2xzLCB2YWxzID0gX2MudmFscztcbiAgICAgICAgdmFyIHNpemUgPSBbdG9UcmFuc2Zvcm0ubGVuZ3RoLCByYXdEYXRhLmxlbmd0aF07XG4gICAgICAgIHZhciBncmFwaCA9IG5ldyBtYXRyaXguU3BhcnNlTWF0cml4KHJvd3MsIGNvbHMsIHZhbHMsIHNpemUpO1xuICAgICAgICB2YXIgbm9ybWVkID0gbWF0cml4Lm5vcm1hbGl6ZShncmFwaCwgXCJsMVwiKTtcbiAgICAgICAgdmFyIGNzck1hdHJpeCA9IG1hdHJpeC5nZXRDU1Iobm9ybWVkKTtcbiAgICAgICAgdmFyIG5Qb2ludHMgPSB0b1RyYW5zZm9ybS5sZW5ndGg7XG4gICAgICAgIHZhciBlSW5kaWNlcyA9IHV0aWxzLnJlc2hhcGUyZChjc3JNYXRyaXguaW5kaWNlcywgblBvaW50cywgdGhpcy5uTmVpZ2hib3JzKTtcbiAgICAgICAgdmFyIGVXZWlnaHRzID0gdXRpbHMucmVzaGFwZTJkKGNzck1hdHJpeC52YWx1ZXMsIG5Qb2ludHMsIHRoaXMubk5laWdoYm9ycyk7XG4gICAgICAgIHZhciBlbWJlZGRpbmcgPSBpbml0VHJhbnNmb3JtKGVJbmRpY2VzLCBlV2VpZ2h0cywgdGhpcy5lbWJlZGRpbmcpO1xuICAgICAgICB2YXIgbkVwb2NocyA9IHRoaXMubkVwb2Noc1xuICAgICAgICAgICAgPyB0aGlzLm5FcG9jaHMgLyAzXG4gICAgICAgICAgICA6IGdyYXBoLm5Sb3dzIDw9IDEwMDAwXG4gICAgICAgICAgICAgICAgPyAxMDBcbiAgICAgICAgICAgICAgICA6IDMwO1xuICAgICAgICB2YXIgZ3JhcGhNYXggPSBncmFwaFxuICAgICAgICAgICAgLmdldFZhbHVlcygpXG4gICAgICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChtYXgsIHZhbCkgeyByZXR1cm4gKHZhbCA+IG1heCA/IHZhbCA6IG1heCk7IH0sIDApO1xuICAgICAgICBncmFwaCA9IGdyYXBoLm1hcChmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuICh2YWx1ZSA8IGdyYXBoTWF4IC8gbkVwb2NocyA/IDAgOiB2YWx1ZSk7IH0pO1xuICAgICAgICBncmFwaCA9IG1hdHJpeC5lbGltaW5hdGVaZXJvcyhncmFwaCk7XG4gICAgICAgIHZhciBlcG9jaHNQZXJTYW1wbGUgPSB0aGlzLm1ha2VFcG9jaHNQZXJTYW1wbGUoZ3JhcGguZ2V0VmFsdWVzKCksIG5FcG9jaHMpO1xuICAgICAgICB2YXIgaGVhZCA9IGdyYXBoLmdldFJvd3MoKTtcbiAgICAgICAgdmFyIHRhaWwgPSBncmFwaC5nZXRDb2xzKCk7XG4gICAgICAgIHRoaXMuYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzKHtcbiAgICAgICAgICAgIGhlYWRFbWJlZGRpbmc6IGVtYmVkZGluZyxcbiAgICAgICAgICAgIHRhaWxFbWJlZGRpbmc6IHRoaXMuZW1iZWRkaW5nLFxuICAgICAgICAgICAgaGVhZDogaGVhZCxcbiAgICAgICAgICAgIHRhaWw6IHRhaWwsXG4gICAgICAgICAgICBjdXJyZW50RXBvY2g6IDAsXG4gICAgICAgICAgICBuRXBvY2hzOiBuRXBvY2hzLFxuICAgICAgICAgICAgblZlcnRpY2VzOiBncmFwaC5nZXREaW1zKClbMV0sXG4gICAgICAgICAgICBlcG9jaHNQZXJTYW1wbGU6IGVwb2Noc1BlclNhbXBsZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucHJlcGFyZUZvck9wdGltaXphdGlvbkxvb3AoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW1pemVMYXlvdXQoKTtcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLnByb2Nlc3NHcmFwaEZvclN1cGVydmlzZWRQcm9qZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBZID0gX2EuWSwgWCA9IF9hLlg7XG4gICAgICAgIGlmIChZKSB7XG4gICAgICAgICAgICBpZiAoWS5sZW5ndGggIT09IFgubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMZW5ndGggb2YgWCBhbmQgeSBtdXN0IGJlIGVxdWFsJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy50YXJnZXRNZXRyaWMgPT09IFwiY2F0ZWdvcmljYWxcIikge1xuICAgICAgICAgICAgICAgIHZhciBsdCA9IHRoaXMudGFyZ2V0V2VpZ2h0IDwgMS4wO1xuICAgICAgICAgICAgICAgIHZhciBmYXJEaXN0ID0gbHQgPyAyLjUgKiAoMS4wIC8gKDEuMCAtIHRoaXMudGFyZ2V0V2VpZ2h0KSkgOiAxLjBlMTI7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmFwaCA9IHRoaXMuY2F0ZWdvcmljYWxTaW1wbGljaWFsU2V0SW50ZXJzZWN0aW9uKHRoaXMuZ3JhcGgsIFksIGZhckRpc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5zdGVwID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY3VycmVudEVwb2NoID0gdGhpcy5vcHRpbWl6YXRpb25TdGF0ZS5jdXJyZW50RXBvY2g7XG4gICAgICAgIGlmIChjdXJyZW50RXBvY2ggPCB0aGlzLmdldE5FcG9jaHMoKSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpbWl6ZUxheW91dFN0ZXAoY3VycmVudEVwb2NoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5vcHRpbWl6YXRpb25TdGF0ZS5jdXJyZW50RXBvY2g7XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5nZXRFbWJlZGRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVtYmVkZGluZztcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLm5lYXJlc3ROZWlnaGJvcnMgPSBmdW5jdGlvbiAoWCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBkaXN0YW5jZUZuID0gX2EuZGlzdGFuY2VGbiwgbk5laWdoYm9ycyA9IF9hLm5OZWlnaGJvcnM7XG4gICAgICAgIHZhciBsb2cyID0gZnVuY3Rpb24gKG4pIHsgcmV0dXJuIE1hdGgubG9nKG4pIC8gTWF0aC5sb2coMik7IH07XG4gICAgICAgIHZhciBtZXRyaWNOTkRlc2NlbnQgPSBubkRlc2NlbnQubWFrZU5ORGVzY2VudChkaXN0YW5jZUZuLCB0aGlzLnJhbmRvbSk7XG4gICAgICAgIHZhciByb3VuZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICAgICAgICByZXR1cm4gbiA9PT0gMC41ID8gMCA6IE1hdGgucm91bmQobik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBuVHJlZXMgPSA1ICsgTWF0aC5mbG9vcihyb3VuZChNYXRoLnBvdyhYLmxlbmd0aCwgMC41KSAvIDIwLjApKTtcbiAgICAgICAgdmFyIG5JdGVycyA9IE1hdGgubWF4KDUsIE1hdGguZmxvb3IoTWF0aC5yb3VuZChsb2cyKFgubGVuZ3RoKSkpKTtcbiAgICAgICAgdGhpcy5ycEZvcmVzdCA9IHRyZWUubWFrZUZvcmVzdChYLCBuTmVpZ2hib3JzLCBuVHJlZXMsIHRoaXMucmFuZG9tKTtcbiAgICAgICAgdmFyIGxlYWZBcnJheSA9IHRyZWUubWFrZUxlYWZBcnJheSh0aGlzLnJwRm9yZXN0KTtcbiAgICAgICAgdmFyIF9iID0gbWV0cmljTk5EZXNjZW50KFgsIGxlYWZBcnJheSwgbk5laWdoYm9ycywgbkl0ZXJzKSwgaW5kaWNlcyA9IF9iLmluZGljZXMsIHdlaWdodHMgPSBfYi53ZWlnaHRzO1xuICAgICAgICByZXR1cm4geyBrbm5JbmRpY2VzOiBpbmRpY2VzLCBrbm5EaXN0YW5jZXM6IHdlaWdodHMgfTtcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLmZ1enp5U2ltcGxpY2lhbFNldCA9IGZ1bmN0aW9uIChYLCBuTmVpZ2hib3JzLCBzZXRPcE1peFJhdGlvKSB7XG4gICAgICAgIGlmIChzZXRPcE1peFJhdGlvID09PSB2b2lkIDApIHsgc2V0T3BNaXhSYXRpbyA9IDEuMDsgfVxuICAgICAgICB2YXIgX2EgPSB0aGlzLCBfYiA9IF9hLmtubkluZGljZXMsIGtubkluZGljZXMgPSBfYiA9PT0gdm9pZCAwID8gW10gOiBfYiwgX2MgPSBfYS5rbm5EaXN0YW5jZXMsIGtubkRpc3RhbmNlcyA9IF9jID09PSB2b2lkIDAgPyBbXSA6IF9jLCBsb2NhbENvbm5lY3Rpdml0eSA9IF9hLmxvY2FsQ29ubmVjdGl2aXR5O1xuICAgICAgICB2YXIgX2QgPSB0aGlzLnNtb290aEtOTkRpc3RhbmNlKGtubkRpc3RhbmNlcywgbk5laWdoYm9ycywgbG9jYWxDb25uZWN0aXZpdHkpLCBzaWdtYXMgPSBfZC5zaWdtYXMsIHJob3MgPSBfZC5yaG9zO1xuICAgICAgICB2YXIgX2UgPSB0aGlzLmNvbXB1dGVNZW1iZXJzaGlwU3RyZW5ndGhzKGtubkluZGljZXMsIGtubkRpc3RhbmNlcywgc2lnbWFzLCByaG9zKSwgcm93cyA9IF9lLnJvd3MsIGNvbHMgPSBfZS5jb2xzLCB2YWxzID0gX2UudmFscztcbiAgICAgICAgdmFyIHNpemUgPSBbWC5sZW5ndGgsIFgubGVuZ3RoXTtcbiAgICAgICAgdmFyIHNwYXJzZU1hdHJpeCA9IG5ldyBtYXRyaXguU3BhcnNlTWF0cml4KHJvd3MsIGNvbHMsIHZhbHMsIHNpemUpO1xuICAgICAgICB2YXIgdHJhbnNwb3NlID0gbWF0cml4LnRyYW5zcG9zZShzcGFyc2VNYXRyaXgpO1xuICAgICAgICB2YXIgcHJvZE1hdHJpeCA9IG1hdHJpeC5wYWlyd2lzZU11bHRpcGx5KHNwYXJzZU1hdHJpeCwgdHJhbnNwb3NlKTtcbiAgICAgICAgdmFyIGEgPSBtYXRyaXguc3VidHJhY3QobWF0cml4LmFkZChzcGFyc2VNYXRyaXgsIHRyYW5zcG9zZSksIHByb2RNYXRyaXgpO1xuICAgICAgICB2YXIgYiA9IG1hdHJpeC5tdWx0aXBseVNjYWxhcihhLCBzZXRPcE1peFJhdGlvKTtcbiAgICAgICAgdmFyIGMgPSBtYXRyaXgubXVsdGlwbHlTY2FsYXIocHJvZE1hdHJpeCwgMS4wIC0gc2V0T3BNaXhSYXRpbyk7XG4gICAgICAgIHZhciByZXN1bHQgPSBtYXRyaXguYWRkKGIsIGMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUuY2F0ZWdvcmljYWxTaW1wbGljaWFsU2V0SW50ZXJzZWN0aW9uID0gZnVuY3Rpb24gKHNpbXBsaWNpYWxTZXQsIHRhcmdldCwgZmFyRGlzdCwgdW5rbm93bkRpc3QpIHtcbiAgICAgICAgaWYgKHVua25vd25EaXN0ID09PSB2b2lkIDApIHsgdW5rbm93bkRpc3QgPSAxLjA7IH1cbiAgICAgICAgdmFyIGludGVyc2VjdGlvbiA9IGZhc3RJbnRlcnNlY3Rpb24oc2ltcGxpY2lhbFNldCwgdGFyZ2V0LCB1bmtub3duRGlzdCwgZmFyRGlzdCk7XG4gICAgICAgIGludGVyc2VjdGlvbiA9IG1hdHJpeC5lbGltaW5hdGVaZXJvcyhpbnRlcnNlY3Rpb24pO1xuICAgICAgICByZXR1cm4gcmVzZXRMb2NhbENvbm5lY3Rpdml0eShpbnRlcnNlY3Rpb24pO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUuc21vb3RoS05ORGlzdGFuY2UgPSBmdW5jdGlvbiAoZGlzdGFuY2VzLCBrLCBsb2NhbENvbm5lY3Rpdml0eSwgbkl0ZXIsIGJhbmR3aWR0aCkge1xuICAgICAgICBpZiAobG9jYWxDb25uZWN0aXZpdHkgPT09IHZvaWQgMCkgeyBsb2NhbENvbm5lY3Rpdml0eSA9IDEuMDsgfVxuICAgICAgICBpZiAobkl0ZXIgPT09IHZvaWQgMCkgeyBuSXRlciA9IDY0OyB9XG4gICAgICAgIGlmIChiYW5kd2lkdGggPT09IHZvaWQgMCkgeyBiYW5kd2lkdGggPSAxLjA7IH1cbiAgICAgICAgdmFyIHRhcmdldCA9IChNYXRoLmxvZyhrKSAvIE1hdGgubG9nKDIpKSAqIGJhbmR3aWR0aDtcbiAgICAgICAgdmFyIHJobyA9IHV0aWxzLnplcm9zKGRpc3RhbmNlcy5sZW5ndGgpO1xuICAgICAgICB2YXIgcmVzdWx0ID0gdXRpbHMuemVyb3MoZGlzdGFuY2VzLmxlbmd0aCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgbG8gPSAwLjA7XG4gICAgICAgICAgICB2YXIgaGkgPSBJbmZpbml0eTtcbiAgICAgICAgICAgIHZhciBtaWQgPSAxLjA7XG4gICAgICAgICAgICB2YXIgaXRoRGlzdGFuY2VzID0gZGlzdGFuY2VzW2ldO1xuICAgICAgICAgICAgdmFyIG5vblplcm9EaXN0cyA9IGl0aERpc3RhbmNlcy5maWx0ZXIoZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQgPiAwLjA7IH0pO1xuICAgICAgICAgICAgaWYgKG5vblplcm9EaXN0cy5sZW5ndGggPj0gbG9jYWxDb25uZWN0aXZpdHkpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBNYXRoLmZsb29yKGxvY2FsQ29ubmVjdGl2aXR5KTtcbiAgICAgICAgICAgICAgICB2YXIgaW50ZXJwb2xhdGlvbiA9IGxvY2FsQ29ubmVjdGl2aXR5IC0gaW5kZXg7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByaG9baV0gPSBub25aZXJvRGlzdHNbaW5kZXggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGludGVycG9sYXRpb24gPiBTTU9PVEhfS19UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJob1tpXSArPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycG9sYXRpb24gKiAobm9uWmVyb0Rpc3RzW2luZGV4XSAtIG5vblplcm9EaXN0c1tpbmRleCAtIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmhvW2ldID0gaW50ZXJwb2xhdGlvbiAqIG5vblplcm9EaXN0c1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChub25aZXJvRGlzdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJob1tpXSA9IHV0aWxzLm1heChub25aZXJvRGlzdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBuSXRlcjsgbisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBzdW0gPSAwLjA7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBkaXN0YW5jZXNbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBkaXN0YW5jZXNbaV1bal0gLSByaG9baV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChkID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHN1bSArPSBNYXRoLmV4cCgtKGQgLyBtaWQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBzdW0gKz0gMS4wO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhwc3VtIC0gdGFyZ2V0KSA8IFNNT09USF9LX1RPTEVSQU5DRSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBzdW0gPiB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaGkgPSBtaWQ7XG4gICAgICAgICAgICAgICAgICAgIG1pZCA9IChsbyArIGhpKSAvIDIuMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvID0gbWlkO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGkgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaWQgKj0gMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pZCA9IChsbyArIGhpKSAvIDIuMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdFtpXSA9IG1pZDtcbiAgICAgICAgICAgIGlmIChyaG9baV0gPiAwLjApIHtcbiAgICAgICAgICAgICAgICB2YXIgbWVhbkl0aERpc3RhbmNlcyA9IHV0aWxzLm1lYW4oaXRoRGlzdGFuY2VzKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0W2ldIDwgTUlOX0tfRElTVF9TQ0FMRSAqIG1lYW5JdGhEaXN0YW5jZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gTUlOX0tfRElTVF9TQ0FMRSAqIG1lYW5JdGhEaXN0YW5jZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIG1lYW5EaXN0YW5jZXMgPSB1dGlscy5tZWFuKGRpc3RhbmNlcy5tYXAodXRpbHMubWVhbikpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHRbaV0gPCBNSU5fS19ESVNUX1NDQUxFICogbWVhbkRpc3RhbmNlcykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBNSU5fS19ESVNUX1NDQUxFICogbWVhbkRpc3RhbmNlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc2lnbWFzOiByZXN1bHQsIHJob3M6IHJobyB9O1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUuY29tcHV0ZU1lbWJlcnNoaXBTdHJlbmd0aHMgPSBmdW5jdGlvbiAoa25uSW5kaWNlcywga25uRGlzdGFuY2VzLCBzaWdtYXMsIHJob3MpIHtcbiAgICAgICAgdmFyIG5TYW1wbGVzID0ga25uSW5kaWNlcy5sZW5ndGg7XG4gICAgICAgIHZhciBuTmVpZ2hib3JzID0ga25uSW5kaWNlc1swXS5sZW5ndGg7XG4gICAgICAgIHZhciByb3dzID0gdXRpbHMuemVyb3MoblNhbXBsZXMgKiBuTmVpZ2hib3JzKTtcbiAgICAgICAgdmFyIGNvbHMgPSB1dGlscy56ZXJvcyhuU2FtcGxlcyAqIG5OZWlnaGJvcnMpO1xuICAgICAgICB2YXIgdmFscyA9IHV0aWxzLnplcm9zKG5TYW1wbGVzICogbk5laWdoYm9ycyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblNhbXBsZXM7IGkrKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuTmVpZ2hib3JzOyBqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoa25uSW5kaWNlc1tpXVtqXSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChrbm5JbmRpY2VzW2ldW2pdID09PSBpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IDAuMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoa25uRGlzdGFuY2VzW2ldW2pdIC0gcmhvc1tpXSA8PSAwLjApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gMS4wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gTWF0aC5leHAoLSgoa25uRGlzdGFuY2VzW2ldW2pdIC0gcmhvc1tpXSkgLyBzaWdtYXNbaV0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcm93c1tpICogbk5laWdoYm9ycyArIGpdID0gaTtcbiAgICAgICAgICAgICAgICBjb2xzW2kgKiBuTmVpZ2hib3JzICsgal0gPSBrbm5JbmRpY2VzW2ldW2pdO1xuICAgICAgICAgICAgICAgIHZhbHNbaSAqIG5OZWlnaGJvcnMgKyBqXSA9IHZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyByb3dzOiByb3dzLCBjb2xzOiBjb2xzLCB2YWxzOiB2YWxzIH07XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5pbml0aWFsaXplU2ltcGxpY2lhbFNldEVtYmVkZGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIG5FcG9jaHMgPSB0aGlzLmdldE5FcG9jaHMoKTtcbiAgICAgICAgdmFyIG5Db21wb25lbnRzID0gdGhpcy5uQ29tcG9uZW50cztcbiAgICAgICAgdmFyIGdyYXBoVmFsdWVzID0gdGhpcy5ncmFwaC5nZXRWYWx1ZXMoKTtcbiAgICAgICAgdmFyIGdyYXBoTWF4ID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gZ3JhcGhWYWx1ZXNbaV07XG4gICAgICAgICAgICBpZiAoZ3JhcGhNYXggPCBncmFwaFZhbHVlc1tpXSkge1xuICAgICAgICAgICAgICAgIGdyYXBoTWF4ID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGdyYXBoID0gdGhpcy5ncmFwaC5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPCBncmFwaE1heCAvIG5FcG9jaHMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZW1iZWRkaW5nID0gdXRpbHMuemVyb3MoZ3JhcGgublJvd3MpLm1hcChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbHMuemVyb3MobkNvbXBvbmVudHMpLm1hcChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHV0aWxzLnRhdVJhbmQoX3RoaXMucmFuZG9tKSAqIDIwICsgLTEwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgd2VpZ2h0cyA9IFtdO1xuICAgICAgICB2YXIgaGVhZCA9IFtdO1xuICAgICAgICB2YXIgdGFpbCA9IFtdO1xuICAgICAgICB2YXIgcm93Q29sVmFsdWVzID0gZ3JhcGguZ2V0QWxsKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93Q29sVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZW50cnkgPSByb3dDb2xWYWx1ZXNbaV07XG4gICAgICAgICAgICBpZiAoZW50cnkudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB3ZWlnaHRzLnB1c2goZW50cnkudmFsdWUpO1xuICAgICAgICAgICAgICAgIHRhaWwucHVzaChlbnRyeS5yb3cpO1xuICAgICAgICAgICAgICAgIGhlYWQucHVzaChlbnRyeS5jb2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBlcG9jaHNQZXJTYW1wbGUgPSB0aGlzLm1ha2VFcG9jaHNQZXJTYW1wbGUod2VpZ2h0cywgbkVwb2Nocyk7XG4gICAgICAgIHJldHVybiB7IGhlYWQ6IGhlYWQsIHRhaWw6IHRhaWwsIGVwb2Noc1BlclNhbXBsZTogZXBvY2hzUGVyU2FtcGxlIH07XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5tYWtlRXBvY2hzUGVyU2FtcGxlID0gZnVuY3Rpb24gKHdlaWdodHMsIG5FcG9jaHMpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHV0aWxzLmZpbGxlZCh3ZWlnaHRzLmxlbmd0aCwgLTEuMCk7XG4gICAgICAgIHZhciBtYXggPSB1dGlscy5tYXgod2VpZ2h0cyk7XG4gICAgICAgIHZhciBuU2FtcGxlcyA9IHdlaWdodHMubWFwKGZ1bmN0aW9uICh3KSB7IHJldHVybiAodyAvIG1heCkgKiBuRXBvY2hzOyB9KTtcbiAgICAgICAgblNhbXBsZXMuZm9yRWFjaChmdW5jdGlvbiAobiwgaSkge1xuICAgICAgICAgICAgaWYgKG4gPiAwKVxuICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IG5FcG9jaHMgLyBuU2FtcGxlc1tpXTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5hc3NpZ25PcHRpbWl6YXRpb25TdGF0ZVBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGltaXphdGlvblN0YXRlLCBzdGF0ZSk7XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5wcmVwYXJlRm9yT3B0aW1pemF0aW9uTG9vcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgcmVwdWxzaW9uU3RyZW5ndGggPSBfYS5yZXB1bHNpb25TdHJlbmd0aCwgbGVhcm5pbmdSYXRlID0gX2EubGVhcm5pbmdSYXRlLCBuZWdhdGl2ZVNhbXBsZVJhdGUgPSBfYS5uZWdhdGl2ZVNhbXBsZVJhdGU7XG4gICAgICAgIHZhciBfYiA9IHRoaXMub3B0aW1pemF0aW9uU3RhdGUsIGVwb2Noc1BlclNhbXBsZSA9IF9iLmVwb2Noc1BlclNhbXBsZSwgaGVhZEVtYmVkZGluZyA9IF9iLmhlYWRFbWJlZGRpbmcsIHRhaWxFbWJlZGRpbmcgPSBfYi50YWlsRW1iZWRkaW5nO1xuICAgICAgICB2YXIgZGltID0gaGVhZEVtYmVkZGluZ1swXS5sZW5ndGg7XG4gICAgICAgIHZhciBtb3ZlT3RoZXIgPSBoZWFkRW1iZWRkaW5nLmxlbmd0aCA9PT0gdGFpbEVtYmVkZGluZy5sZW5ndGg7XG4gICAgICAgIHZhciBlcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZSA9IGVwb2Noc1BlclNhbXBsZS5tYXAoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgLyBuZWdhdGl2ZVNhbXBsZVJhdGU7IH0pO1xuICAgICAgICB2YXIgZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZSA9IF9fc3ByZWFkKGVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlKTtcbiAgICAgICAgdmFyIGVwb2NoT2ZOZXh0U2FtcGxlID0gX19zcHJlYWQoZXBvY2hzUGVyU2FtcGxlKTtcbiAgICAgICAgdGhpcy5hc3NpZ25PcHRpbWl6YXRpb25TdGF0ZVBhcmFtZXRlcnMoe1xuICAgICAgICAgICAgZXBvY2hPZk5leHRTYW1wbGU6IGVwb2NoT2ZOZXh0U2FtcGxlLFxuICAgICAgICAgICAgZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZTogZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZSxcbiAgICAgICAgICAgIGVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlOiBlcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZSxcbiAgICAgICAgICAgIG1vdmVPdGhlcjogbW92ZU90aGVyLFxuICAgICAgICAgICAgaW5pdGlhbEFscGhhOiBsZWFybmluZ1JhdGUsXG4gICAgICAgICAgICBhbHBoYTogbGVhcm5pbmdSYXRlLFxuICAgICAgICAgICAgZ2FtbWE6IHJlcHVsc2lvblN0cmVuZ3RoLFxuICAgICAgICAgICAgZGltOiBkaW0sXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUuaW5pdGlhbGl6ZU9wdGltaXphdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGhlYWRFbWJlZGRpbmcgPSB0aGlzLmVtYmVkZGluZztcbiAgICAgICAgdmFyIHRhaWxFbWJlZGRpbmcgPSB0aGlzLmVtYmVkZGluZztcbiAgICAgICAgdmFyIF9hID0gdGhpcy5vcHRpbWl6YXRpb25TdGF0ZSwgaGVhZCA9IF9hLmhlYWQsIHRhaWwgPSBfYS50YWlsLCBlcG9jaHNQZXJTYW1wbGUgPSBfYS5lcG9jaHNQZXJTYW1wbGU7XG4gICAgICAgIHZhciBuRXBvY2hzID0gdGhpcy5nZXRORXBvY2hzKCk7XG4gICAgICAgIHZhciBuVmVydGljZXMgPSB0aGlzLmdyYXBoLm5Db2xzO1xuICAgICAgICB2YXIgX2IgPSBmaW5kQUJQYXJhbXModGhpcy5zcHJlYWQsIHRoaXMubWluRGlzdCksIGEgPSBfYi5hLCBiID0gX2IuYjtcbiAgICAgICAgdGhpcy5hc3NpZ25PcHRpbWl6YXRpb25TdGF0ZVBhcmFtZXRlcnMoe1xuICAgICAgICAgICAgaGVhZEVtYmVkZGluZzogaGVhZEVtYmVkZGluZyxcbiAgICAgICAgICAgIHRhaWxFbWJlZGRpbmc6IHRhaWxFbWJlZGRpbmcsXG4gICAgICAgICAgICBoZWFkOiBoZWFkLFxuICAgICAgICAgICAgdGFpbDogdGFpbCxcbiAgICAgICAgICAgIGVwb2Noc1BlclNhbXBsZTogZXBvY2hzUGVyU2FtcGxlLFxuICAgICAgICAgICAgYTogYSxcbiAgICAgICAgICAgIGI6IGIsXG4gICAgICAgICAgICBuRXBvY2hzOiBuRXBvY2hzLFxuICAgICAgICAgICAgblZlcnRpY2VzOiBuVmVydGljZXMsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUub3B0aW1pemVMYXlvdXRTdGVwID0gZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgdmFyIG9wdGltaXphdGlvblN0YXRlID0gdGhpcy5vcHRpbWl6YXRpb25TdGF0ZTtcbiAgICAgICAgdmFyIGhlYWQgPSBvcHRpbWl6YXRpb25TdGF0ZS5oZWFkLCB0YWlsID0gb3B0aW1pemF0aW9uU3RhdGUudGFpbCwgaGVhZEVtYmVkZGluZyA9IG9wdGltaXphdGlvblN0YXRlLmhlYWRFbWJlZGRpbmcsIHRhaWxFbWJlZGRpbmcgPSBvcHRpbWl6YXRpb25TdGF0ZS50YWlsRW1iZWRkaW5nLCBlcG9jaHNQZXJTYW1wbGUgPSBvcHRpbWl6YXRpb25TdGF0ZS5lcG9jaHNQZXJTYW1wbGUsIGVwb2NoT2ZOZXh0U2FtcGxlID0gb3B0aW1pemF0aW9uU3RhdGUuZXBvY2hPZk5leHRTYW1wbGUsIGVwb2NoT2ZOZXh0TmVnYXRpdmVTYW1wbGUgPSBvcHRpbWl6YXRpb25TdGF0ZS5lcG9jaE9mTmV4dE5lZ2F0aXZlU2FtcGxlLCBlcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZSA9IG9wdGltaXphdGlvblN0YXRlLmVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlLCBtb3ZlT3RoZXIgPSBvcHRpbWl6YXRpb25TdGF0ZS5tb3ZlT3RoZXIsIGluaXRpYWxBbHBoYSA9IG9wdGltaXphdGlvblN0YXRlLmluaXRpYWxBbHBoYSwgYWxwaGEgPSBvcHRpbWl6YXRpb25TdGF0ZS5hbHBoYSwgZ2FtbWEgPSBvcHRpbWl6YXRpb25TdGF0ZS5nYW1tYSwgYSA9IG9wdGltaXphdGlvblN0YXRlLmEsIGIgPSBvcHRpbWl6YXRpb25TdGF0ZS5iLCBkaW0gPSBvcHRpbWl6YXRpb25TdGF0ZS5kaW0sIG5FcG9jaHMgPSBvcHRpbWl6YXRpb25TdGF0ZS5uRXBvY2hzLCBuVmVydGljZXMgPSBvcHRpbWl6YXRpb25TdGF0ZS5uVmVydGljZXM7XG4gICAgICAgIHZhciBjbGlwVmFsdWUgPSA0LjA7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXBvY2hzUGVyU2FtcGxlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZXBvY2hPZk5leHRTYW1wbGVbaV0gPiBuKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaiA9IGhlYWRbaV07XG4gICAgICAgICAgICB2YXIgayA9IHRhaWxbaV07XG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IGhlYWRFbWJlZGRpbmdbal07XG4gICAgICAgICAgICB2YXIgb3RoZXIgPSB0YWlsRW1iZWRkaW5nW2tdO1xuICAgICAgICAgICAgdmFyIGRpc3RTcXVhcmVkID0gckRpc3QoY3VycmVudCwgb3RoZXIpO1xuICAgICAgICAgICAgdmFyIGdyYWRDb2VmZiA9IDA7XG4gICAgICAgICAgICBpZiAoZGlzdFNxdWFyZWQgPiAwKSB7XG4gICAgICAgICAgICAgICAgZ3JhZENvZWZmID0gLTIuMCAqIGEgKiBiICogTWF0aC5wb3coZGlzdFNxdWFyZWQsIGIgLSAxLjApO1xuICAgICAgICAgICAgICAgIGdyYWRDb2VmZiAvPSBhICogTWF0aC5wb3coZGlzdFNxdWFyZWQsIGIpICsgMS4wO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBkaW07IGQrKykge1xuICAgICAgICAgICAgICAgIHZhciBncmFkRCA9IGNsaXAoZ3JhZENvZWZmICogKGN1cnJlbnRbZF0gLSBvdGhlcltkXSksIGNsaXBWYWx1ZSk7XG4gICAgICAgICAgICAgICAgY3VycmVudFtkXSArPSBncmFkRCAqIGFscGhhO1xuICAgICAgICAgICAgICAgIGlmIChtb3ZlT3RoZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJbZF0gKz0gLWdyYWREICogYWxwaGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXBvY2hPZk5leHRTYW1wbGVbaV0gKz0gZXBvY2hzUGVyU2FtcGxlW2ldO1xuICAgICAgICAgICAgdmFyIG5OZWdTYW1wbGVzID0gTWF0aC5mbG9vcigobiAtIGVwb2NoT2ZOZXh0TmVnYXRpdmVTYW1wbGVbaV0pIC8gZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGVbaV0pO1xuICAgICAgICAgICAgZm9yICh2YXIgcCA9IDA7IHAgPCBuTmVnU2FtcGxlczsgcCsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtfMSA9IHV0aWxzLnRhdVJhbmRJbnQoblZlcnRpY2VzLCB0aGlzLnJhbmRvbSk7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyXzEgPSB0YWlsRW1iZWRkaW5nW2tfMV07XG4gICAgICAgICAgICAgICAgdmFyIGRpc3RTcXVhcmVkXzEgPSByRGlzdChjdXJyZW50LCBvdGhlcl8xKTtcbiAgICAgICAgICAgICAgICB2YXIgZ3JhZENvZWZmXzEgPSAwLjA7XG4gICAgICAgICAgICAgICAgaWYgKGRpc3RTcXVhcmVkXzEgPiAwLjApIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JhZENvZWZmXzEgPSAyLjAgKiBnYW1tYSAqIGI7XG4gICAgICAgICAgICAgICAgICAgIGdyYWRDb2VmZl8xIC89XG4gICAgICAgICAgICAgICAgICAgICAgICAoMC4wMDEgKyBkaXN0U3F1YXJlZF8xKSAqIChhICogTWF0aC5wb3coZGlzdFNxdWFyZWRfMSwgYikgKyAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaiA9PT0ga18xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBkID0gMDsgZCA8IGRpbTsgZCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBncmFkRCA9IDQuMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdyYWRDb2VmZl8xID4gMC4wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncmFkRCA9IGNsaXAoZ3JhZENvZWZmXzEgKiAoY3VycmVudFtkXSAtIG90aGVyXzFbZF0pLCBjbGlwVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRbZF0gKz0gZ3JhZEQgKiBhbHBoYTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlcG9jaE9mTmV4dE5lZ2F0aXZlU2FtcGxlW2ldICs9IG5OZWdTYW1wbGVzICogZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGVbaV07XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW1pemF0aW9uU3RhdGUuYWxwaGEgPSBpbml0aWFsQWxwaGEgKiAoMS4wIC0gbiAvIG5FcG9jaHMpO1xuICAgICAgICBvcHRpbWl6YXRpb25TdGF0ZS5jdXJyZW50RXBvY2ggKz0gMTtcbiAgICAgICAgcmV0dXJuIGhlYWRFbWJlZGRpbmc7XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5vcHRpbWl6ZUxheW91dEFzeW5jID0gZnVuY3Rpb24gKGVwb2NoQ2FsbGJhY2spIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKGVwb2NoQ2FsbGJhY2sgPT09IHZvaWQgMCkgeyBlcG9jaENhbGxiYWNrID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfTsgfVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHN0ZXAgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hLCBuRXBvY2hzLCBjdXJyZW50RXBvY2gsIGVwb2NoQ29tcGxldGVkLCBzaG91bGRTdG9wLCBpc0ZpbmlzaGVkO1xuICAgICAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hID0gdGhpcy5vcHRpbWl6YXRpb25TdGF0ZSwgbkVwb2NocyA9IF9hLm5FcG9jaHMsIGN1cnJlbnRFcG9jaCA9IF9hLmN1cnJlbnRFcG9jaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1iZWRkaW5nID0gdGhpcy5vcHRpbWl6ZUxheW91dFN0ZXAoY3VycmVudEVwb2NoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVwb2NoQ29tcGxldGVkID0gdGhpcy5vcHRpbWl6YXRpb25TdGF0ZS5jdXJyZW50RXBvY2g7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRTdG9wID0gZXBvY2hDYWxsYmFjayhlcG9jaENvbXBsZXRlZCkgPT09IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNGaW5pc2hlZCA9IGVwb2NoQ29tcGxldGVkID09PSBuRXBvY2hzO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzaG91bGRTdG9wICYmICFpc0ZpbmlzaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiBzdGVwKCk7IH0sIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyLCByZXNvbHZlKGlzRmluaXNoZWQpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7IH07XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0ZXAoKTsgfSwgMCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUub3B0aW1pemVMYXlvdXQgPSBmdW5jdGlvbiAoZXBvY2hDYWxsYmFjaykge1xuICAgICAgICBpZiAoZXBvY2hDYWxsYmFjayA9PT0gdm9pZCAwKSB7IGVwb2NoQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9OyB9XG4gICAgICAgIHZhciBpc0ZpbmlzaGVkID0gZmFsc2U7XG4gICAgICAgIHZhciBlbWJlZGRpbmcgPSBbXTtcbiAgICAgICAgd2hpbGUgKCFpc0ZpbmlzaGVkKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLm9wdGltaXphdGlvblN0YXRlLCBuRXBvY2hzID0gX2EubkVwb2NocywgY3VycmVudEVwb2NoID0gX2EuY3VycmVudEVwb2NoO1xuICAgICAgICAgICAgZW1iZWRkaW5nID0gdGhpcy5vcHRpbWl6ZUxheW91dFN0ZXAoY3VycmVudEVwb2NoKTtcbiAgICAgICAgICAgIHZhciBlcG9jaENvbXBsZXRlZCA9IHRoaXMub3B0aW1pemF0aW9uU3RhdGUuY3VycmVudEVwb2NoO1xuICAgICAgICAgICAgdmFyIHNob3VsZFN0b3AgPSBlcG9jaENhbGxiYWNrKGVwb2NoQ29tcGxldGVkKSA9PT0gZmFsc2U7XG4gICAgICAgICAgICBpc0ZpbmlzaGVkID0gZXBvY2hDb21wbGV0ZWQgPT09IG5FcG9jaHMgfHwgc2hvdWxkU3RvcDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW1iZWRkaW5nO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUuZ2V0TkVwb2NocyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGdyYXBoID0gdGhpcy5ncmFwaDtcbiAgICAgICAgaWYgKHRoaXMubkVwb2NocyA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5FcG9jaHM7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxlbmd0aCA9IGdyYXBoLm5Sb3dzO1xuICAgICAgICBpZiAobGVuZ3RoIDw9IDI1MDApIHtcbiAgICAgICAgICAgIHJldHVybiA1MDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobGVuZ3RoIDw9IDUwMDApIHtcbiAgICAgICAgICAgIHJldHVybiA0MDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobGVuZ3RoIDw9IDc1MDApIHtcbiAgICAgICAgICAgIHJldHVybiAzMDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMjAwO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gVU1BUDtcbn0oKSk7XG5leHBvcnRzLlVNQVAgPSBVTUFQO1xuZnVuY3Rpb24gZXVjbGlkZWFuKHgsIHkpIHtcbiAgICB2YXIgcmVzdWx0ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ICs9IE1hdGgucG93KCh4W2ldIC0geVtpXSksIDIpO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5zcXJ0KHJlc3VsdCk7XG59XG5leHBvcnRzLmV1Y2xpZGVhbiA9IGV1Y2xpZGVhbjtcbmZ1bmN0aW9uIGNvc2luZSh4LCB5KSB7XG4gICAgdmFyIHJlc3VsdCA9IDAuMDtcbiAgICB2YXIgbm9ybVggPSAwLjA7XG4gICAgdmFyIG5vcm1ZID0gMC4wO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgKz0geFtpXSAqIHlbaV07XG4gICAgICAgIG5vcm1YICs9IE1hdGgucG93KHhbaV0sIDIpO1xuICAgICAgICBub3JtWSArPSBNYXRoLnBvdyh5W2ldLCAyKTtcbiAgICB9XG4gICAgaWYgKG5vcm1YID09PSAwICYmIG5vcm1ZID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBlbHNlIGlmIChub3JtWCA9PT0gMCB8fCBub3JtWSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMS4wO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDEuMCAtIHJlc3VsdCAvIE1hdGguc3FydChub3JtWCAqIG5vcm1ZKTtcbiAgICB9XG59XG5leHBvcnRzLmNvc2luZSA9IGNvc2luZTtcbnZhciBPcHRpbWl6YXRpb25TdGF0ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT3B0aW1pemF0aW9uU3RhdGUoKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEVwb2NoID0gMDtcbiAgICAgICAgdGhpcy5oZWFkRW1iZWRkaW5nID0gW107XG4gICAgICAgIHRoaXMudGFpbEVtYmVkZGluZyA9IFtdO1xuICAgICAgICB0aGlzLmhlYWQgPSBbXTtcbiAgICAgICAgdGhpcy50YWlsID0gW107XG4gICAgICAgIHRoaXMuZXBvY2hzUGVyU2FtcGxlID0gW107XG4gICAgICAgIHRoaXMuZXBvY2hPZk5leHRTYW1wbGUgPSBbXTtcbiAgICAgICAgdGhpcy5lcG9jaE9mTmV4dE5lZ2F0aXZlU2FtcGxlID0gW107XG4gICAgICAgIHRoaXMuZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGUgPSBbXTtcbiAgICAgICAgdGhpcy5tb3ZlT3RoZXIgPSB0cnVlO1xuICAgICAgICB0aGlzLmluaXRpYWxBbHBoYSA9IDEuMDtcbiAgICAgICAgdGhpcy5hbHBoYSA9IDEuMDtcbiAgICAgICAgdGhpcy5nYW1tYSA9IDEuMDtcbiAgICAgICAgdGhpcy5hID0gMS41NzY5NDM0NjAzMTEzMDc3O1xuICAgICAgICB0aGlzLmIgPSAwLjg5NTA2MDg3NzkxMDk3MzM7XG4gICAgICAgIHRoaXMuZGltID0gMjtcbiAgICAgICAgdGhpcy5uRXBvY2hzID0gNTAwO1xuICAgICAgICB0aGlzLm5WZXJ0aWNlcyA9IDA7XG4gICAgfVxuICAgIHJldHVybiBPcHRpbWl6YXRpb25TdGF0ZTtcbn0oKSk7XG5mdW5jdGlvbiBjbGlwKHgsIGNsaXBWYWx1ZSkge1xuICAgIGlmICh4ID4gY2xpcFZhbHVlKVxuICAgICAgICByZXR1cm4gY2xpcFZhbHVlO1xuICAgIGVsc2UgaWYgKHggPCAtY2xpcFZhbHVlKVxuICAgICAgICByZXR1cm4gLWNsaXBWYWx1ZTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiB4O1xufVxuZnVuY3Rpb24gckRpc3QoeCwgeSkge1xuICAgIHZhciByZXN1bHQgPSAwLjA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCArPSBNYXRoLnBvdyh4W2ldIC0geVtpXSwgMik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBmaW5kQUJQYXJhbXMoc3ByZWFkLCBtaW5EaXN0KSB7XG4gICAgdmFyIGN1cnZlID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBfYiA9IF9fcmVhZChfYSwgMiksIGEgPSBfYlswXSwgYiA9IF9iWzFdO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiAxLjAgLyAoMS4wICsgYSAqIE1hdGgucG93KHgsICgyICogYikpKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciB4diA9IHV0aWxzXG4gICAgICAgIC5saW5lYXIoMCwgc3ByZWFkICogMywgMzAwKVxuICAgICAgICAubWFwKGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuICh2YWwgPCBtaW5EaXN0ID8gMS4wIDogdmFsKTsgfSk7XG4gICAgdmFyIHl2ID0gdXRpbHMuemVyb3MoeHYubGVuZ3RoKS5tYXAoZnVuY3Rpb24gKHZhbCwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGd0ZSA9IHh2W2luZGV4XSA+PSBtaW5EaXN0O1xuICAgICAgICByZXR1cm4gZ3RlID8gTWF0aC5leHAoLSh4dltpbmRleF0gLSBtaW5EaXN0KSAvIHNwcmVhZCkgOiB2YWw7XG4gICAgfSk7XG4gICAgdmFyIGluaXRpYWxWYWx1ZXMgPSBbMC41LCAwLjVdO1xuICAgIHZhciBkYXRhID0geyB4OiB4diwgeTogeXYgfTtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgZGFtcGluZzogMS41LFxuICAgICAgICBpbml0aWFsVmFsdWVzOiBpbml0aWFsVmFsdWVzLFxuICAgICAgICBncmFkaWVudERpZmZlcmVuY2U6IDEwZS0yLFxuICAgICAgICBtYXhJdGVyYXRpb25zOiAxMDAsXG4gICAgICAgIGVycm9yVG9sZXJhbmNlOiAxMGUtMyxcbiAgICB9O1xuICAgIHZhciBwYXJhbWV0ZXJWYWx1ZXMgPSBtbF9sZXZlbmJlcmdfbWFycXVhcmR0XzEuZGVmYXVsdChkYXRhLCBjdXJ2ZSwgb3B0aW9ucykucGFyYW1ldGVyVmFsdWVzO1xuICAgIHZhciBfYSA9IF9fcmVhZChwYXJhbWV0ZXJWYWx1ZXMsIDIpLCBhID0gX2FbMF0sIGIgPSBfYVsxXTtcbiAgICByZXR1cm4geyBhOiBhLCBiOiBiIH07XG59XG5leHBvcnRzLmZpbmRBQlBhcmFtcyA9IGZpbmRBQlBhcmFtcztcbmZ1bmN0aW9uIGZhc3RJbnRlcnNlY3Rpb24oZ3JhcGgsIHRhcmdldCwgdW5rbm93bkRpc3QsIGZhckRpc3QpIHtcbiAgICBpZiAodW5rbm93bkRpc3QgPT09IHZvaWQgMCkgeyB1bmtub3duRGlzdCA9IDEuMDsgfVxuICAgIGlmIChmYXJEaXN0ID09PSB2b2lkIDApIHsgZmFyRGlzdCA9IDUuMDsgfVxuICAgIHJldHVybiBncmFwaC5tYXAoZnVuY3Rpb24gKHZhbHVlLCByb3csIGNvbCkge1xuICAgICAgICBpZiAodGFyZ2V0W3Jvd10gPT09IC0xIHx8IHRhcmdldFtjb2xdID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICogTWF0aC5leHAoLXVua25vd25EaXN0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0YXJnZXRbcm93XSAhPT0gdGFyZ2V0W2NvbF0pIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSAqIE1hdGguZXhwKC1mYXJEaXN0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5mYXN0SW50ZXJzZWN0aW9uID0gZmFzdEludGVyc2VjdGlvbjtcbmZ1bmN0aW9uIHJlc2V0TG9jYWxDb25uZWN0aXZpdHkoc2ltcGxpY2lhbFNldCkge1xuICAgIHNpbXBsaWNpYWxTZXQgPSBtYXRyaXgubm9ybWFsaXplKHNpbXBsaWNpYWxTZXQsIFwibWF4XCIpO1xuICAgIHZhciB0cmFuc3Bvc2UgPSBtYXRyaXgudHJhbnNwb3NlKHNpbXBsaWNpYWxTZXQpO1xuICAgIHZhciBwcm9kTWF0cml4ID0gbWF0cml4LnBhaXJ3aXNlTXVsdGlwbHkodHJhbnNwb3NlLCBzaW1wbGljaWFsU2V0KTtcbiAgICBzaW1wbGljaWFsU2V0ID0gbWF0cml4LmFkZChzaW1wbGljaWFsU2V0LCBtYXRyaXguc3VidHJhY3QodHJhbnNwb3NlLCBwcm9kTWF0cml4KSk7XG4gICAgcmV0dXJuIG1hdHJpeC5lbGltaW5hdGVaZXJvcyhzaW1wbGljaWFsU2V0KTtcbn1cbmV4cG9ydHMucmVzZXRMb2NhbENvbm5lY3Rpdml0eSA9IHJlc2V0TG9jYWxDb25uZWN0aXZpdHk7XG5mdW5jdGlvbiBpbml0VHJhbnNmb3JtKGluZGljZXMsIHdlaWdodHMsIGVtYmVkZGluZykge1xuICAgIHZhciByZXN1bHQgPSB1dGlsc1xuICAgICAgICAuemVyb3MoaW5kaWNlcy5sZW5ndGgpXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKHopIHsgcmV0dXJuIHV0aWxzLnplcm9zKGVtYmVkZGluZ1swXS5sZW5ndGgpOyB9KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpbmRpY2VzWzBdLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBkID0gMDsgZCA8IGVtYmVkZGluZ1swXS5sZW5ndGg7IGQrKykge1xuICAgICAgICAgICAgICAgIHZhciBhID0gaW5kaWNlc1tpXVtqXTtcbiAgICAgICAgICAgICAgICByZXN1bHRbaV1bZF0gKz0gd2VpZ2h0c1tpXVtqXSAqIGVtYmVkZGluZ1thXVtkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5pbml0VHJhbnNmb3JtID0gaW5pdFRyYW5zZm9ybTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fdmFsdWVzID0gKHRoaXMgJiYgdGhpcy5fX3ZhbHVlcykgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAwO1xuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICAgIH1cbiAgICB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHRhdVJhbmRJbnQobiwgcmFuZG9tKSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IocmFuZG9tKCkgKiBuKTtcbn1cbmV4cG9ydHMudGF1UmFuZEludCA9IHRhdVJhbmRJbnQ7XG5mdW5jdGlvbiB0YXVSYW5kKHJhbmRvbSkge1xuICAgIHJldHVybiByYW5kb20oKTtcbn1cbmV4cG9ydHMudGF1UmFuZCA9IHRhdVJhbmQ7XG5mdW5jdGlvbiBub3JtKHZlYykge1xuICAgIHZhciBlXzEsIF9hO1xuICAgIHZhciByZXN1bHQgPSAwO1xuICAgIHRyeSB7XG4gICAgICAgIGZvciAodmFyIHZlY18xID0gX192YWx1ZXModmVjKSwgdmVjXzFfMSA9IHZlY18xLm5leHQoKTsgIXZlY18xXzEuZG9uZTsgdmVjXzFfMSA9IHZlY18xLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIGl0ZW0gPSB2ZWNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgcmVzdWx0ICs9IE1hdGgucG93KGl0ZW0sIDIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodmVjXzFfMSAmJiAhdmVjXzFfMS5kb25lICYmIChfYSA9IHZlY18xLnJldHVybikpIF9hLmNhbGwodmVjXzEpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIE1hdGguc3FydChyZXN1bHQpO1xufVxuZXhwb3J0cy5ub3JtID0gbm9ybTtcbmZ1bmN0aW9uIGVtcHR5KG4pIHtcbiAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgb3V0cHV0LnB1c2godW5kZWZpbmVkKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbn1cbmV4cG9ydHMuZW1wdHkgPSBlbXB0eTtcbmZ1bmN0aW9uIHJhbmdlKG4pIHtcbiAgICByZXR1cm4gZW1wdHkobikubWFwKGZ1bmN0aW9uIChfLCBpKSB7IHJldHVybiBpOyB9KTtcbn1cbmV4cG9ydHMucmFuZ2UgPSByYW5nZTtcbmZ1bmN0aW9uIGZpbGxlZChuLCB2KSB7XG4gICAgcmV0dXJuIGVtcHR5KG4pLm1hcChmdW5jdGlvbiAoKSB7IHJldHVybiB2OyB9KTtcbn1cbmV4cG9ydHMuZmlsbGVkID0gZmlsbGVkO1xuZnVuY3Rpb24gemVyb3Mobikge1xuICAgIHJldHVybiBmaWxsZWQobiwgMCk7XG59XG5leHBvcnRzLnplcm9zID0gemVyb3M7XG5mdW5jdGlvbiBvbmVzKG4pIHtcbiAgICByZXR1cm4gZmlsbGVkKG4sIDEpO1xufVxuZXhwb3J0cy5vbmVzID0gb25lcztcbmZ1bmN0aW9uIGxpbmVhcihhLCBiLCBsZW4pIHtcbiAgICByZXR1cm4gZW1wdHkobGVuKS5tYXAoZnVuY3Rpb24gKF8sIGkpIHtcbiAgICAgICAgcmV0dXJuIGEgKyBpICogKChiIC0gYSkgLyAobGVuIC0gMSkpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5saW5lYXIgPSBsaW5lYXI7XG5mdW5jdGlvbiBzdW0oaW5wdXQpIHtcbiAgICByZXR1cm4gaW5wdXQucmVkdWNlKGZ1bmN0aW9uIChzdW0sIHZhbCkgeyByZXR1cm4gc3VtICsgdmFsOyB9KTtcbn1cbmV4cG9ydHMuc3VtID0gc3VtO1xuZnVuY3Rpb24gbWVhbihpbnB1dCkge1xuICAgIHJldHVybiBzdW0oaW5wdXQpIC8gaW5wdXQubGVuZ3RoO1xufVxuZXhwb3J0cy5tZWFuID0gbWVhbjtcbmZ1bmN0aW9uIG1heChpbnB1dCkge1xuICAgIHZhciBtYXggPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbWF4ID0gaW5wdXRbaV0gPiBtYXggPyBpbnB1dFtpXSA6IG1heDtcbiAgICB9XG4gICAgcmV0dXJuIG1heDtcbn1cbmV4cG9ydHMubWF4ID0gbWF4O1xuZnVuY3Rpb24gbWF4MmQoaW5wdXQpIHtcbiAgICB2YXIgbWF4ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaW5wdXRbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIG1heCA9IGlucHV0W2ldW2pdID4gbWF4ID8gaW5wdXRbaV1bal0gOiBtYXg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1heDtcbn1cbmV4cG9ydHMubWF4MmQgPSBtYXgyZDtcbmZ1bmN0aW9uIHJlamVjdGlvblNhbXBsZShuU2FtcGxlcywgcG9vbFNpemUsIHJhbmRvbSkge1xuICAgIHZhciByZXN1bHQgPSB6ZXJvcyhuU2FtcGxlcyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuU2FtcGxlczsgaSsrKSB7XG4gICAgICAgIHZhciByZWplY3RTYW1wbGUgPSB0cnVlO1xuICAgICAgICB3aGlsZSAocmVqZWN0U2FtcGxlKSB7XG4gICAgICAgICAgICB2YXIgaiA9IHRhdVJhbmRJbnQocG9vbFNpemUsIHJhbmRvbSk7XG4gICAgICAgICAgICB2YXIgYnJva2VuID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGk7IGsrKykge1xuICAgICAgICAgICAgICAgIGlmIChqID09PSByZXN1bHRba10pIHtcbiAgICAgICAgICAgICAgICAgICAgYnJva2VuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFicm9rZW4pIHtcbiAgICAgICAgICAgICAgICByZWplY3RTYW1wbGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdFtpXSA9IGo7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMucmVqZWN0aW9uU2FtcGxlID0gcmVqZWN0aW9uU2FtcGxlO1xuZnVuY3Rpb24gcmVzaGFwZTJkKHgsIGEsIGIpIHtcbiAgICB2YXIgcm93cyA9IFtdO1xuICAgIHZhciBjb3VudCA9IDA7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBpZiAoeC5sZW5ndGggIT09IGEgKiBiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQXJyYXkgZGltZW5zaW9ucyBtdXN0IG1hdGNoIGlucHV0IGxlbmd0aC4nKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhOyBpKyspIHtcbiAgICAgICAgdmFyIGNvbCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGI7IGorKykge1xuICAgICAgICAgICAgY29sLnB1c2goeFtpbmRleF0pO1xuICAgICAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgICAgfVxuICAgICAgICByb3dzLnB1c2goY29sKTtcbiAgICAgICAgY291bnQgKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd3M7XG59XG5leHBvcnRzLnJlc2hhcGUyZCA9IHJlc2hhcGUyZDtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJpbXBvcnQgeyBEaW1lbnNpb25hbGl0eVJlZHVjZXIgfSBmcm9tICcuLi9yZWR1Y2UtZGltZW5zaW9uYWxpdHknO1xuLyoqXG4gKiBXb3JrZXIgdGhyZWFkIHJlY2VpdmluZyBkYXRhIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7YW55W119IGNvbHVtbkRhdGEgU2FtcGxlcyB0byBwcm9jZXNzLlxuICogQHBhcmFtIHtLbm93bk1ldGhvZHN9IG1ldGhvZCBFbWJlZGRpbmcgbWV0aG9kLlxuICogQHBhcmFtIHtLbm93bk1ldHJpY3N9IG1lYXN1cmUgRGlzdGFuY2UgbWV0cmljLlxuICogQHBhcmFtIHtudW1iZXJ9IGN5Y2xlc0NvdW50IE51bWJlciBvZiBjeWNsZXMgdG8gcmVwZWF0LlxuICogQHJldHVybiB7Q29vcmRpbmF0ZXN9IEVtYmVkZGluZy5cbiAqL1xuZnVuY3Rpb24gb25NZXNzYWdlKGNvbHVtbkRhdGEsIG1ldGhvZCwgbWVhc3VyZSwgY3ljbGVzQ291bnQpIHtcbiAgICBjb25zdCByZWR1Y2VyID0gbmV3IERpbWVuc2lvbmFsaXR5UmVkdWNlcihjb2x1bW5EYXRhLCBtZXRob2QsIG1lYXN1cmUsIGN5Y2xlc0NvdW50ID8geyBjeWNsZXM6IGN5Y2xlc0NvdW50IH0gOiB1bmRlZmluZWQpO1xuICAgIHJldHVybiByZWR1Y2VyLnRyYW5zZm9ybSh0cnVlKTtcbn1cbnNlbGYub25tZXNzYWdlID0gKHsgZGF0YTogeyBjb2x1bW5EYXRhLCBtZXRob2QsIG1lYXN1cmUsIGN5Y2xlc0NvdW50IH0gfSkgPT4ge1xuICAgIGNvbnN0IGVtYmVkZGluZyA9IG9uTWVzc2FnZShjb2x1bW5EYXRhLCBtZXRob2QsIG1lYXN1cmUsIGN5Y2xlc0NvdW50KTtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgZW1iZWRkaW5nOiBlbWJlZGRpbmcsXG4gICAgfSk7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWkdsdFpXNXphVzl1WVd4cGRIa3RjbVZrZFdObGNpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSW1ScGJXVnVjMmx2Ym1Gc2FYUjVMWEpsWkhWalpYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFc1QwRkJUeXhGUVVGRExIRkNRVUZ4UWl4RlFVRmxMRTFCUVUwc01FSkJRVEJDTEVOQlFVTTdRVUZITjBVN096czdPenM3TzBkQlVVYzdRVUZEU0N4VFFVRlRMRk5CUVZNc1EwRkJReXhWUVVGcFFpeEZRVUZGTEUxQlFXOUNMRVZCUVVVc1QwRkJjVUlzUlVGQlJTeFhRVUZ2UWp0SlFVTnlSeXhOUVVGTkxFOUJRVThzUjBGQlJ5eEpRVUZKTEhGQ1FVRnhRaXhEUVVOMlF5eFZRVUZWTEVWQlExWXNUVUZCVFN4RlFVTk9MRTlCUVU4c1JVRkRVQ3hYUVVGWExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNUVUZCVFN4RlFVRkZMRmRCUVZjc1JVRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUTEVOQlEyaEVMRU5CUVVNN1NVRkRSaXhQUVVGUExFOUJRVThzUTBGQlF5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1FVRkRha01zUTBGQlF6dEJRVVZFTEVsQlFVa3NRMEZCUXl4VFFVRlRMRWRCUVVjc1EwRkJReXhGUVVGRExFbEJRVWtzUlVGQlJTeEZRVUZETEZWQlFWVXNSVUZCUlN4TlFVRk5MRVZCUVVVc1QwRkJUeXhGUVVGRkxGZEJRVmNzUlVGQlF5eEZRVUZETEVWQlFVVXNSVUZCUlR0SlFVTjBSU3hOUVVGTkxGTkJRVk1zUjBGQlJ5eFRRVUZUTEVOQlFVTXNWVUZCVlN4RlFVRkZMRTFCUVUwc1JVRkJSU3hQUVVGUExFVkJRVVVzVjBGQlZ5eERRVUZETEVOQlFVTTdTVUZEZEVVc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF6dFJRVU5tTEZOQlFWTXNSVUZCUlN4VFFVRlRPMHRCUTNKQ0xFTkJRVU1zUTBGQlF6dEJRVU5NTEVOQlFVTXNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCN1JHbHRaVzV6YVc5dVlXeHBkSGxTWldSMVkyVnlMQ0JMYm05M2JrMWxkR2h2WkhOOUlHWnliMjBnSnk0dUwzSmxaSFZqWlMxa2FXMWxibk5wYjI1aGJHbDBlU2M3WEc1cGJYQnZjblFnZTB0dWIzZHVUV1YwY21samMzMGdabkp2YlNBbkxpNHZkSGx3WldRdGJXVjBjbWxqY3ljN1hHNWNiaThxS2x4dUlDb2dWMjl5YTJWeUlIUm9jbVZoWkNCeVpXTmxhWFpwYm1jZ1pHRjBZU0JtZFc1amRHbHZiaTVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlMkZ1ZVZ0ZGZTQmpiMngxYlc1RVlYUmhJRk5oYlhCc1pYTWdkRzhnY0hKdlkyVnpjeTVjYmlBcUlFQndZWEpoYlNCN1MyNXZkMjVOWlhSb2IyUnpmU0J0WlhSb2IyUWdSVzFpWldSa2FXNW5JRzFsZEdodlpDNWNiaUFxSUVCd1lYSmhiU0I3UzI1dmQyNU5aWFJ5YVdOemZTQnRaV0Z6ZFhKbElFUnBjM1JoYm1ObElHMWxkSEpwWXk1Y2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQmplV05zWlhORGIzVnVkQ0JPZFcxaVpYSWdiMllnWTNsamJHVnpJSFJ2SUhKbGNHVmhkQzVjYmlBcUlFQnlaWFIxY200Z2UwTnZiM0prYVc1aGRHVnpmU0JGYldKbFpHUnBibWN1WEc0Z0tpOWNibVoxYm1OMGFXOXVJRzl1VFdWemMyRm5aU2hqYjJ4MWJXNUVZWFJoT2lCaGJubGJYU3dnYldWMGFHOWtPaUJMYm05M2JrMWxkR2h2WkhNc0lHMWxZWE4xY21VNklFdHViM2R1VFdWMGNtbGpjeXdnWTNsamJHVnpRMjkxYm5RL09pQnVkVzFpWlhJcElIdGNiaUFnWTI5dWMzUWdjbVZrZFdObGNpQTlJRzVsZHlCRWFXMWxibk5wYjI1aGJHbDBlVkpsWkhWalpYSW9YRzRnSUNBZ1kyOXNkVzF1UkdGMFlTeGNiaUFnSUNCdFpYUm9iMlFzWEc0Z0lDQWdiV1ZoYzNWeVpTeGNiaUFnSUNCamVXTnNaWE5EYjNWdWRDQS9JSHRqZVdOc1pYTTZJR041WTJ4bGMwTnZkVzUwZlNBNklIVnVaR1ZtYVc1bFpDeGNiaUFnS1R0Y2JpQWdjbVYwZFhKdUlISmxaSFZqWlhJdWRISmhibk5tYjNKdEtIUnlkV1VwTzF4dWZWeHVYRzV6Wld4bUxtOXViV1Z6YzJGblpTQTlJQ2g3WkdGMFlUb2dlMk52YkhWdGJrUmhkR0VzSUcxbGRHaHZaQ3dnYldWaGMzVnlaU3dnWTNsamJHVnpRMjkxYm5SOWZTa2dQVDRnZTF4dUlDQmpiMjV6ZENCbGJXSmxaR1JwYm1jZ1BTQnZiazFsYzNOaFoyVW9ZMjlzZFcxdVJHRjBZU3dnYldWMGFHOWtMQ0J0WldGemRYSmxMQ0JqZVdOc1pYTkRiM1Z1ZENrN1hHNGdJSE5sYkdZdWNHOXpkRTFsYzNOaFoyVW9lMXh1SUNBZ0lHVnRZbVZrWkdsdVp6b2daVzFpWldSa2FXNW5MRnh1SUNCOUtUdGNibjA3WEc0aVhYMD0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=
|
|
8914
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVuZG9ycy1ub2RlX21vZHVsZXNfZGF0YWdyb2stbGlicmFyaWVzX21sX3NyY193b3JrZXJzX2RpbWVuc2lvbmFsaXR5LXJlZHVjZXJfanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGlCQUFpQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQSwrQkFBK0IsU0FBUztBQUN4QztBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsU0FBUyxHQUFHLE1BQU0sa0JBQWtCLElBQUksSUFBSSxJQUFJO0FBQ3hGO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsY0FBYyxLQUFLLGNBQWM7QUFDaEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLGNBQWMsS0FBSyxhQUFhO0FBQy9FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsU0FBUztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFD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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDOzs7Ozs7Ozs7Ozs7Ozs7QUNsbUIzQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixZQUFZLFFBQVE7QUFDcEI7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixZQUFZLFFBQVE7QUFDcEI7QUFDTztBQUNQO0FBQ0E7QUFDQSwyQ0FBMkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcEJOO0FBQzlCO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDQTtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7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QTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGVBQWU7QUFDbkMsc0JBQXNCLGtCQUFrQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixlQUFlO0FBQ25DLHNCQUFzQixrQkFBa0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGVBQWU7QUFDbkMsc0JBQXNCLGtCQUFrQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixlQUFlO0FBQ25DLHNCQUFzQixrQkFBa0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGVBQWU7QUFDbkMsc0JBQXNCLGtCQUFrQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixlQUFlO0FBQ25DLHNCQUFzQixrQkFBa0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGVBQWU7QUFDbkMsc0JBQXNCLGtCQUFrQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixlQUFlO0FBQ25DLHNCQUFzQixrQkFBa0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixlQUFlO0FBQ25DLHNCQUFzQixrQkFBa0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGVBQWU7QUFDbkMsc0JBQXNCLGtCQUFrQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGVBQWU7QUFDbkMsc0JBQXNCLGtCQUFrQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixlQUFlO0FBQ25DLHNCQUFzQixrQkFBa0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixlQUFlO0FBQ25DLHNCQUFzQixrQkFBa0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGVBQWU7QUFDbkMsc0JBQXNCLGtCQUFrQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQyxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxv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Q2xCLFdBQVcsY0FBYztBQUN6QixXQUFXLGNBQWM7QUFDekIsV0FBVyxRQUFRO0FBQ25CLFlBQVksS0FBSztBQUNqQjtBQUNBO0FBQ0Esd0JBQXdCLHlFQUFxQjtBQUM3QztBQUNBO0FBQ0Esb0JBQW9CLFFBQVEsd0NBQXdDO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsMkNBQTJDLCtyRSIsInNvdXJjZXMiOlsid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL2JpdC1hcnJheS5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy9yYW5kb20uanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvc2ltaWxhcml0eS1tZXRyaWNzLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3R5cGUtZGVjbGFyYXRpb25zLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3ZlY3Rvci1vcGVyYXRpb25zLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL3JlZHVjZS1kaW1lbnNpb25hbGl0eS5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9zcGUuanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvdHlwZWQtbWV0cmljcy5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9Aa2Vja2VsdC90c25lL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9Aa2Vja2VsdC90c25lL2xpYi90c25lLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL2Zhc3Rlc3QtbGV2ZW5zaHRlaW4vaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvaXMtYW55LWFycmF5L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9qYXJvLXdpbmtsZXItdHlwZXNjcmlwdC9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvbWwtYXJyYXktbWF4L2xpYi1lczYvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvbWwtYXJyYXktbWF4L25vZGVfbW9kdWxlcy9pcy1hbnktYXJyYXkvbGliLWVzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9tbC1hcnJheS1taW4vbGliLWVzNi9pbmRleC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9tbC1hcnJheS1taW4vbm9kZV9tb2R1bGVzL2lzLWFueS1hcnJheS9saWItZXNtL2luZGV4LmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL21sLWFycmF5LXJlc2NhbGUvbGliLWVzNi9pbmRleC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9tbC1hcnJheS1yZXNjYWxlL25vZGVfbW9kdWxlcy9pcy1hbnktYXJyYXkvbGliLWVzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9tbC1sZXZlbmJlcmctbWFycXVhcmR0L3NyYy9lcnJvckNhbGN1bGF0aW9uLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL21sLWxldmVuYmVyZy1tYXJxdWFyZHQvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL21sLWxldmVuYmVyZy1tYXJxdWFyZHQvc3JjL3N0ZXAuanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvbWwtbWF0cml4L3NyYy9kYy9sdS5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL2RjL3FyLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvZGMvc3ZkLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvZGMvdXRpbC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL2RlY29tcG9zaXRpb25zLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvaW5zcGVjdC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL21hdGhPcGVyYXRpb25zLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvbWF0cml4LmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL21sLW1hdHJpeC9zcmMvc3RhdC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9tbC1tYXRyaXgvc3JjL3V0aWwuanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvbWwtbWF0cml4L3NyYy93cmFwL1dyYXBwZXJNYXRyaXgyRC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy91bWFwLWpzL2Rpc3QvaGVhcC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy91bWFwLWpzL2Rpc3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvdW1hcC1qcy9kaXN0L21hdHJpeC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy91bWFwLWpzL2Rpc3Qvbm5fZGVzY2VudC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy91bWFwLWpzL2Rpc3QvdHJlZS5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy91bWFwLWpzL2Rpc3QvdW1hcC5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy91bWFwLWpzL2Rpc3QvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy93b3JrZXJzL2RpbWVuc2lvbmFsaXR5LXJlZHVjZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0QXJyYXkge1xuICAgIGNvbnN0cnVjdG9yKGFyZywgZGVmYXVsdFZhbHVlID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fbGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5fdmVyc2lvbiA9IDA7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxldmVsID0gMDtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkQ291bnRWZXJzaW9uID0gLTE7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkSW5kZXhlc1ZlcnNpb24gPSAtMTtcbiAgICAgICAgdGhpcy5fdmVyc2lvbmVkTmFtZSA9ICcnO1xuICAgICAgICB0aGlzLl92ZXJzaW9uZWROYW1lVmVyc2lvbiA9IC0xO1xuICAgICAgICB0aGlzLlNIUklOS19USFJFU0hPTEQgPSAweDEwMDtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSBhcmc7XG4gICAgICAgICAgICBjb25zdCBidWZmID0gQml0QXJyYXkuX2NyZWF0ZUJ1ZmZlcihsZW5ndGgpO1xuICAgICAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSlcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1ZmYubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZbaV0gPSAtMTtcbiAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBidWZmO1xuICAgICAgICAgICAgdGhpcy5fbGVuZ3RoID0gbGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhID0gYXJnO1xuICAgICAgICAgICAgdGhpcy5fbGVuZ3RoID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb25zdHJ1Y3RvcicpO1xuICAgIH1cbiAgICBnZXRSYXdEYXRhKCkgeyByZXR1cm4gdGhpcy5fZGF0YTsgfVxuICAgIGFzc3VyZUdvZXoobnVtLCBhcmdOYW1lKSB7XG4gICAgICAgIGlmIChudW0gPCAwKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2FyZ05hbWV9IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gemVyb2ApO1xuICAgIH1cbiAgICBhc3N1cmVJblJhbmdlKHZhbHVlLCBtaW4sIG1heCwgYXJnTmFtZSkge1xuICAgICAgICBpZiAoKHZhbHVlIDwgbWluKSB8fCAodmFsdWUgPiBtYXgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFyZ3VtZW50ICR7YXJnTmFtZX0gKCR7dmFsdWV9KSBvdXQgb2YgcmFuZ2UgKCR7bWlufSwgJHttYXh9KWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvcHkoc3JjLCBkc3QsIGNvdW50KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgZHN0W2ldID0gc3JjW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvcHlGcm9tKG90aGVyKSB7XG4gICAgICAgIGlmICh0aGlzLl9sZW5ndGggIT0gb3RoZXIuX2xlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMZW5ndGhzIGRpZmZlciAoJHt0aGlzLl9sZW5ndGh9ICE9ICR7b3RoZXIuX2xlbmd0aH0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb3B5KG90aGVyLl9kYXRhLCB0aGlzLl9kYXRhLCB0aGlzLmxlbmd0aEluSW50cyk7XG4gICAgICAgIHRoaXMuX3ZlcnNpb24rKztcbiAgICB9XG4gICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlbmd0aDtcbiAgICB9XG4gICAgZ2V0IGJ1ZmZlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuICAgIHNldCBidWZmZXIoZGF0YSkge1xuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5fdmVyc2lvbisrO1xuICAgIH1cbiAgICBnZXQgdmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZlcnNpb247XG4gICAgfVxuICAgIHNldCB2ZXJzaW9uKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX3ZlcnNpb24gPSB2YWx1ZTtcbiAgICB9XG4gICAgaW5jcmVtZW50VmVyc2lvbihub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX3ZlcnNpb24rKztcbiAgICB9XG4gICAgZ2V0IGxlbmd0aEluSW50cygpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoKHRoaXMuX2xlbmd0aCArIDB4MWYpIC8gMHgyMCk7XG4gICAgfVxuICAgIGdldCB2ZXJzaW9uZWROYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmVyc2lvbiA9PSB0aGlzLl92ZXJzaW9uZWROYW1lVmVyc2lvbiA/IHRoaXMuX3ZlcnNpb25lZE5hbWUgOiAnJztcbiAgICB9XG4gICAgc2V0IHZlcnNpb25lZE5hbWUobmFtZSkge1xuICAgICAgICB0aGlzLl92ZXJzaW9uZWROYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5fdmVyc2lvbmVkTmFtZVZlcnNpb24gPSB0aGlzLl92ZXJzaW9uO1xuICAgIH1cbiAgICBnZXQgc2VsZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHNldExlbmd0aCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPCAwKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaG91bGQgYmUgPj0gMCcpO1xuICAgICAgICBpZiAodmFsdWUgPT0gdGhpcy5fbGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBuSW50c05lZWRlZCA9IE1hdGguZmxvb3IoKHZhbHVlICsgMHgxZikgLyAweDIwKTtcbiAgICAgICAgaWYgKChuSW50c05lZWRlZCA+IHRoaXMuX2RhdGEubGVuZ3RoKSB8fCAoKG5JbnRzTmVlZGVkICsgdGhpcy5TSFJJTktfVEhSRVNIT0xEKSA8IHRoaXMuX2RhdGEubGVuZ3RoKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3RGF0YSA9IG5ldyBVaW50MzJBcnJheShuSW50c05lZWRlZCk7XG4gICAgICAgICAgICB0aGlzLmNvcHkodGhpcy5fZGF0YSwgbmV3RGF0YSwgKG5JbnRzTmVlZGVkID4gdGhpcy5fZGF0YS5sZW5ndGgpID8gdGhpcy5fZGF0YS5sZW5ndGggOiBuSW50c05lZWRlZCk7XG4gICAgICAgICAgICB0aGlzLl9kYXRhID0gbmV3RGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPiB0aGlzLl9sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9sZW5ndGggJSAweDIwID4gMClcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhW3RoaXMubGVuZ3RoSW5JbnRzIC0gMV0gJj0gKDEgPDwgKCh0aGlzLl9sZW5ndGggJSAweDIwKSAmIDB4MWYpKSAtIDE7XG4gICAgICAgICAgICB0aGlzLl9kYXRhLmZpbGwoMCwgdGhpcy5sZW5ndGhJbkludHMsIG5JbnRzTmVlZGVkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9sZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdmVyc2lvbisrO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbUFuZChzZXQxLCBzZXQyKSB7XG4gICAgICAgIGlmIChzZXQxLl9sZW5ndGggIT0gc2V0Mi5fbGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMZW5ndGhzIGRpZmZlciAoJHtzZXQxLl9sZW5ndGh9ICE9ICR7c2V0Mi5fbGVuZ3RofSlgKTtcbiAgICAgICAgY29uc3QgdGVtcCA9IG5ldyBCaXRBcnJheShzZXQxLl9sZW5ndGgpO1xuICAgICAgICB0ZW1wLl9sZW5ndGggPSBzZXQxLl9sZW5ndGg7XG4gICAgICAgIHRlbXAuX2RhdGEgPSBCaXRBcnJheS5fY3JlYXRlQnVmZmVyKHRlbXAuX2xlbmd0aCk7XG4gICAgICAgIHRlbXAuX3ZlcnNpb24gPSAwO1xuICAgICAgICBjb25zdCBsZW4gPSBzZXQxLmxlbmd0aEluSW50cztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICAgICAgICAgIHRlbXAuX2RhdGFbaV0gPSBzZXQxLl9kYXRhW2ldICYgc2V0Mi5fZGF0YVtpXTtcbiAgICAgICAgcmV0dXJuIHRlbXA7XG4gICAgfVxuICAgIHN0YXRpYyBfY3JlYXRlQnVmZmVyKGxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQzMkFycmF5KE1hdGguZmxvb3IoKGxlbmd0aCArIDB4MWYpIC8gMHgyMCkpO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbVZhbHVlcyh2YWx1ZXMpIHtcbiAgICAgICAgY29uc3QgdGVtcCA9IG5ldyBCaXRBcnJheSh2YWx1ZXMubGVuZ3RoKTtcbiAgICAgICAgdGVtcC5fdmVyc2lvbiA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGVtcC5fbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZXNbaV0pXG4gICAgICAgICAgICAgICAgdGVtcC5fZGF0YVtNYXRoLmZsb29yKGkgLyAweDIwKV0gfD0gMSA8PCAoKGkgJSAweDIwKSAmIDB4MWYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZW1wO1xuICAgIH1cbiAgICAvLy8gQ29uc3RydWN0cyBhIFtCaXRTZXRdIG9mIGxlbmd0aCBbY291bnRdLCB3aGVyZSBpZHgtdGggYml0IGlzIGRldGVybWluZWQgYnkgYSBjYWxsIHRvIFtmbGFnXSAoaWR4KS5cbiAgICBzdGF0aWMgZnJvbVNlcShjb3VudCwgZmxhZykge1xuICAgICAgICBjb25zdCB0ZW1wID0gbmV3IEJpdEFycmF5KGNvdW50KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgKytpKVxuICAgICAgICAgICAgdGVtcC5zZXRCaXQoaSwgZmxhZyhpKSk7XG4gICAgICAgIHRlbXAuX3ZlcnNpb24gPSAwO1xuICAgICAgICByZXR1cm4gdGVtcDtcbiAgICB9XG4gICAgLy8vIENvbnN0cnVjdHMgYSBbQml0U2V0XSBmcm9tIGEgc3RyaW5nIFtzXSBjb250YWluaW5nICcwJyBvciAnMScuXG4gICAgc3RhdGljIGZyb21TdHJpbmcocykge1xuICAgICAgICByZXR1cm4gQml0QXJyYXkuZnJvbVNlcShzLmxlbmd0aCwgKGkpID0+IHMuY2hhckF0KGkpID09ICcxJyk7XG4gICAgfVxuICAgIC8vLyBDb25zdHJ1Y3RzIGEgW0JpdFNldF0sIGJhc2VkIG9uIGxlbmd0aCBbX2xlbmd0aF0gYW5kIGJ5dGUgYXJyYXkgW19kYXRhXS5cbiAgICBzdGF0aWMgZnJvbVVpbnQzMkFycmF5KF9sZW5ndGgsIF9kYXRhKSB7XG4gICAgICAgIGNvbnN0IHRlbXAgPSBuZXcgQml0QXJyYXkoX2xlbmd0aCk7XG4gICAgICAgIHRlbXAuX2RhdGEgPSBfZGF0YTtcbiAgICAgICAgcmV0dXJuIHRlbXA7XG4gICAgfVxuICAgIC8vLyBEZXNlcmlhbGl6ZXMgYSBbQml0U2V0XSBmcm9tIFtieXRlc10uXG4gICAgc3RhdGljIGZyb21CeXRlcyhieXRlcykge1xuICAgICAgICBjb25zdCBsZW4gPSBieXRlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHRlbXAgPSBuZXcgQml0QXJyYXkobGVuICogOCk7XG4gICAgICAgIHRlbXAuX2RhdGEgPSBuZXcgVWludDMyQXJyYXkoTWF0aC5mbG9vcigobGVuICsgMykgLyA0KSk7XG4gICAgICAgIHRlbXAuX2xlbmd0aCA9IGxlbiAqIDg7XG4gICAgICAgIGxldCBudW0xID0gMDtcbiAgICAgICAgbGV0IG51bTIgPSAwO1xuICAgICAgICB3aGlsZSAoKGxlbiAtIG51bTIpID49IDQpIHtcbiAgICAgICAgICAgIHRlbXAuX2RhdGFbbnVtMSsrXSA9ICgoKGJ5dGVzW251bTJdICYgMHhmZikgfFxuICAgICAgICAgICAgICAgICgoYnl0ZXNbbnVtMiArIDFdICYgMHhmZikgPDwgOCkpIHxcbiAgICAgICAgICAgICAgICAoKGJ5dGVzW251bTIgKyAyXSAmIDB4ZmYpIDw8IDB4MTApKSB8XG4gICAgICAgICAgICAgICAgKChieXRlc1tudW0yICsgM10gJiAweGZmKSA8PCAweDE4KTtcbiAgICAgICAgICAgIG51bTIgKz0gNDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVuIC0gbnVtMiA9PSAzKVxuICAgICAgICAgICAgdGVtcC5fZGF0YVtudW0xXSA9IChieXRlc1tudW0yICsgMl0gJiAweGZmKSA8PCAweDEwO1xuICAgICAgICBpZiAobGVuIC0gbnVtMiA9PSAyKVxuICAgICAgICAgICAgdGVtcC5fZGF0YVtudW0xXSB8PSAoYnl0ZXNbbnVtMiArIDFdICYgMHhmZikgPDwgODtcbiAgICAgICAgaWYgKGxlbiAtIG51bTIgPT0gMSlcbiAgICAgICAgICAgIHRlbXAuX2RhdGFbbnVtMV0gfD0gYnl0ZXNbbnVtMl0gJiAweGZmO1xuICAgICAgICB0ZW1wLl92ZXJzaW9uID0gMDtcbiAgICAgICAgcmV0dXJuIHRlbXA7XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5fbGVuZ3RofSBiaXRzLCAke3RoaXMuY291bnRCaXRzKHRydWUpfSBzZXRgO1xuICAgIH1cbiAgICAvLy8gUGVyZm9ybXMgZGVlcCBjb21wYXJpc29uIG9mIHR3byBiaXRzZXRzLlxuICAgIGVxdWFscyhvdGhlcikge1xuICAgICAgICBpZiAodGhpcyA9PSBvdGhlcilcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAob3RoZXIgPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuX2xlbmd0aCAhPSBvdGhlci5fbGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5fbGVuZ3RoID09IDApXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9kYXRhLmxlbmd0aCAtIDE7IGkrKylcbiAgICAgICAgICAgIGlmICh0aGlzLl9kYXRhW2ldICE9IG90aGVyLl9kYXRhW2ldKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9ICh0aGlzLl9kYXRhLmxlbmd0aCAtIDEpICogODsgaSA8IHRoaXMuX2xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRCaXQoaSkgIT0gb3RoZXIuZ2V0Qml0KGkpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLyoqIENsb25lcyBhIGJpdHNldC4gKi9cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgY29uc3QgYml0QXJyYXkgPSBuZXcgQml0QXJyYXkoMCwgZmFsc2UpO1xuICAgICAgICBiaXRBcnJheS5fZGF0YSA9IFVpbnQzMkFycmF5LmZyb20odGhpcy5fZGF0YSk7IC8vIGVmZmVjdGl2ZSBsZW5ndGg6IChsZW5ndGhJbkludHMpXG4gICAgICAgIGJpdEFycmF5Ll9sZW5ndGggPSB0aGlzLl9sZW5ndGg7XG4gICAgICAgIGJpdEFycmF5Ll92ZXJzaW9uID0gdGhpcy5fdmVyc2lvbjtcbiAgICAgICAgcmV0dXJuIGJpdEFycmF5O1xuICAgIH1cbiAgICAvKiogSW5pdGlhbGl6ZXMgYSBiaXRzZXQuICovXG4gICAgaW5pdChmbGFnLCBub3RpZnkpIHtcbiAgICAgICAgdGhpcy5zZXRBbGwoZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZsYWcoaSkpXG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVtNYXRoLmZsb29yKGkgLyAweDIwKV0gfD0gMSA8PCAoKGkgJSAweDIwKSAmIDB4MWYpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5jcmVtZW50VmVyc2lvbihub3RpZnkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8vIEludmVydHMgYSBiaXRzZXQuXG4gICAgaW52ZXJ0KG5vdGlmeSA9IHRydWUpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgdGhpcy5fZGF0YVtpXSBePSAtMTtcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSk7XG4gICAgfVxuICAgIC8vLyBTZXRzIGFsbCBiaXRzIHRvIFt2YWx1ZV0sIG9wdGlvbmFsbHkgc3VwcHJlc3Npbmcgbm90aWZpY2F0aW9ucy5cbiAgICBzZXRBbGwodmFsdWUsIG5vdGlmeSA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGZsYWdzID0gdmFsdWUgPyAtMSA6IDA7XG4gICAgICAgIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoSW5JbnRzO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhW2ldID0gZmxhZ3M7XG4gICAgICAgIH0gLy90b2RvOiBvcHRpbWl6ZVxuICAgICAgICB0aGlzLmluY3JlbWVudFZlcnNpb24obm90aWZ5KTtcbiAgICB9XG4gICAgLy8vIFNldHMgYml0cyBhdCBbaW5kZXhlc10gcG9zaXRpb24gdG8gW3ZhbHVlXS5cbiAgICAvLy8gQ2xlYXJzIHRoZSBiaXRzZXQgaWYgW2NsZWFyXSBmbGFnIGlzIHRydWUuXG4gICAgLy8vIENoYW5nZSBub3RpZmljYXRpb24gaXMgcmFpc2VkIHdoZW4gW25vdGlmeV0gaXMgdHJ1ZS5cbiAgICBzZXRJbmRleGVzKGluZGV4ZXMsIHZhbHVlID0gdHJ1ZSwgY2xlYXIgPSB0cnVlLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIGlmIChjbGVhcilcbiAgICAgICAgICAgIHRoaXMuc2V0QWxsKCF2YWx1ZSwgZmFsc2UpO1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgaW5kZXhlcylcbiAgICAgICAgICAgIHRoaXMuc2V0RmFzdChpLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuaW5jcmVtZW50VmVyc2lvbihub3RpZnkpO1xuICAgIH1cbiAgICBldmVyeUluZGV4KGluZGV4ZXMsIHZhbHVlID0gdHJ1ZSkge1xuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGluZGV4ZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldEJpdChpbmRleCkgIT0gdmFsdWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBhbnlJbmRleChpbmRleGVzLCB2YWx1ZSA9IHRydWUpIHtcbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBvZiBpbmRleGVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRCaXQoaW5kZXgpID09IHZhbHVlKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc2V0V2hlcmUoY2hlY2ssIHZhbHVlID0gdHJ1ZSwgY2xlYXIgPSB0cnVlLCBub3RpZnkgPSB0cnVlLCBhbGxvd0NsZWFyID0gdHJ1ZSkge1xuICAgICAgICBpZiAoY2xlYXIgJiYgYWxsb3dDbGVhcilcbiAgICAgICAgICAgIHRoaXMuc2V0QWxsKCF2YWx1ZSwgZmFsc2UpO1xuICAgICAgICBpZiAoYWxsb3dDbGVhcikge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChjaGVjayhpKSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRGYXN0KGksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fbGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGYXN0KGksIGNoZWNrKGkpID8gdmFsdWUgOiAhdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5jcmVtZW50VmVyc2lvbihub3RpZnkpO1xuICAgIH1cbiAgICBzZXRSYW5nZShmcm9tLCB0bywgdmFsdWUsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5hc3N1cmVJblJhbmdlKGZyb20sIDAsIHRoaXMuX2xlbmd0aCAtIDEsICdmcm9tJyk7XG4gICAgICAgIHRoaXMuYXNzdXJlSW5SYW5nZSh0bywgMCwgdGhpcy5fbGVuZ3RoIC0gMSwgJ3RvJyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5taW4oZnJvbSwgdG8pO1xuICAgICAgICBjb25zdCBlbmQgPSBNYXRoLm1heChmcm9tLCB0byk7XG4gICAgICAgIC8vdG9kbzogb3B0aW1pemVcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUcnVlKGkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RmFsc2UoaSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLy8gU2V0cyBuIHJhbmRvbWx5IGNob3NlbiBiaXRzIHRvIHZhbHVlLCByZW1haW5pbmcgYml0cyB0byAhdmFsdWUuXG4gICAgc2V0UmFuZG9tKG4sIHZhbHVlLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIGlmIChuIDwgMCB8fCBuID4gdGhpcy5fbGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCduIG11c3QgYmUgPj0gMCAmJiA8PSBDb3VudCcpO1xuICAgICAgICBpZiAobiA+IHRoaXMuX2xlbmd0aCAvIDIpXG4gICAgICAgICAgICB0aGlzLnNldFJhbmRvbSh0aGlzLl9sZW5ndGggLSBuLCAhdmFsdWUpO1xuICAgICAgICB0aGlzLnNldEFsbCghdmFsdWUpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IG47KSB7XG4gICAgICAgICAgICBjb25zdCBpID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy5fbGVuZ3RoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldEJpdChpKSA9PSB2YWx1ZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRoaXMuc2V0RmFzdChpLCB2YWx1ZSk7XG4gICAgICAgICAgICBrKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSk7XG4gICAgfVxuICAgIC8vLyBNb2RpZmllcyBjdXJyZW50IGJpdHNldCBieSBwZXJmb3JtaW5nIHRoZSBiaXR3aXNlIEFORCBvcGVyYXRpb24gYWdhaW5zdCB0aGVcbiAgICAvLy8gY29ycmVzcG9uZGluZyBlbGVtZW50cyBpbiB0aGUgc3BlY2lmaWVkIGJpdHNldC5cbiAgICBhbmQodmFsdWUsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xlbmd0aCAhPSB2YWx1ZS5fbGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcnJheSBsZW5ndGhzIGRpZmZlci4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMubGVuZ3RoSW5JbnRzOyBpIDwgbGVuOyBpKyspXG4gICAgICAgICAgICB0aGlzLl9kYXRhW2ldICY9IHZhbHVlLl9kYXRhW2ldO1xuICAgICAgICB0aGlzLmluY3JlbWVudFZlcnNpb24obm90aWZ5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vLyBQZXJmb3JtcyB0aGUgYml0d2lzZSBBTkQgTk9UIG9wZXJhdGlvbiBvbiB0aGUgZWxlbWVudHMgaW4gdGhlIGN1cnJlbnQgYml0c2V0XG4gICAgLy8vIGFnYWluc3QgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgaW4gdGhlIHNwZWNpZmllZCBiaXRzZXQuXG4gICAgYW5kTm90KHZhbHVlLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9sZW5ndGggIT0gdmFsdWUuX2xlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXJyYXkgbGVuZ3RocyBkaWZmZXIuJyk7XG4gICAgICAgIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoSW5JbnRzO1xuICAgICAgICBmb3IgKGxldCBudW0yID0gMDsgbnVtMiA8IGxlbjsgbnVtMisrKVxuICAgICAgICAgICAgdGhpcy5fZGF0YVtudW0yXSAmPSB+dmFsdWUuX2RhdGFbbnVtMl07XG4gICAgICAgIHRoaXMuaW5jcmVtZW50VmVyc2lvbihub3RpZnkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8vIFBlcmZvcm1zIHRoZSBiaXR3aXNlIE5PVCBBTkQgb3BlcmF0aW9uIG9uIHRoZSBlbGVtZW50cyBpbiB0aGUgY3VycmVudCBiaXRzZXRcbiAgICAvLy8gYWdhaW5zdCB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBpbiB0aGUgc3BlY2lmaWVkIGJpdHNldC5cbiAgICBub3RBbmQodmFsdWUsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xlbmd0aCAhPSB2YWx1ZS5fbGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcnJheSBsZW5ndGhzIGRpZmZlci4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMubGVuZ3RoSW5JbnRzOyBpIDwgbGVuOyBpKyspXG4gICAgICAgICAgICB0aGlzLl9kYXRhW2ldID0gKH50aGlzLl9kYXRhW2ldKSAmIHZhbHVlLl9kYXRhW2ldO1xuICAgICAgICB0aGlzLmluY3JlbWVudFZlcnNpb24obm90aWZ5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vLyBJbnZlcnRzIGFsbCBiaXQgdmFsdWVzIGluIHRoZSBjdXJyZW50IGJpdHNldFxuICAgIG5vdChub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmxlbmd0aEluSW50czsgaSA8IGxlbjsgaSsrKVxuICAgICAgICAgICAgdGhpcy5fZGF0YVtpXSA9IH50aGlzLl9kYXRhW2ldO1xuICAgICAgICB0aGlzLmluY3JlbWVudFZlcnNpb24obm90aWZ5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vLyBQZXJmb3JtcyB0aGUgYml0d2lzZSBPUiBvcGVyYXRpb24gb24gdGhlIGVsZW1lbnRzIGluIHRoZSBjdXJyZW50IGJpdHNldFxuICAgIC8vLyBhZ2FpbnN0IHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIGluIHRoZSBzcGVjaWZpZWQgYml0c2V0LlxuICAgIG9yKHZhbHVlLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9sZW5ndGggIT0gdmFsdWUuX2xlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXJyYXkgbGVuZ3RocyBkaWZmZXIuJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmxlbmd0aEluSW50czsgaSA8IGxlbjsgaSsrKVxuICAgICAgICAgICAgdGhpcy5fZGF0YVtpXSB8PSB2YWx1ZS5fZGF0YVtpXTtcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLy8gUGVyZm9ybXMgdGhlIGJpdHdpc2UgZXhjbHVzaXZlIE9SIG9wZXJhdGlvbiBvbiB0aGUgZWxlbWVudHMgaW4gdGhlIGN1cnJlbnQgYml0c2V0XG4gICAgLy8vIGFnYWluc3QgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgaW4gdGhlIHNwZWNpZmllZCBiaXRzZXQuXG4gICAgeG9yKHZhbHVlLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9sZW5ndGggIT0gdmFsdWUuX2xlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXJyYXkgbGVuZ3RocyBkaWZmZXIuJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmxlbmd0aEluSW50czsgaSA8IGxlbjsgaSsrKVxuICAgICAgICAgICAgdGhpcy5fZGF0YVtpXSBePSB2YWx1ZS5fZGF0YVtpXTtcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLy8gSW5zZXJ0cyBuIDAtYml0cyBhdCBwb3NpdGlvbiBwb3MsIHJlc2l6aW5nIHNlbGYgYW5kIHNoaWZ0aW5nIGJpdHMgYXBwcm9wcmlhdGVseS5cbiAgICBpbnNlcnRBdChwb3MsIG4sIGZsYWcgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLmFzc3VyZUluUmFuZ2UocG9zLCAwLCB0aGlzLl9sZW5ndGgsICdwb3MnKTtcbiAgICAgICAgaWYgKG4gPT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLy9UT0RPOiBvcHRpbWl6ZVxuICAgICAgICAvL3RoZSBtb3N0IHByaW1pdGl2ZSBpbXBsZW1lbnRhdGlvbiwgb3B0aW1pemUgaXQgbGF0ZXIhXG4gICAgICAgIC8vIGJlZ2luVXBkYXRlKCk7XG4gICAgICAgIGNvbnN0IG9sZGxlbmd0aCA9IHRoaXMuX2xlbmd0aDtcbiAgICAgICAgdGhpcy5zZXRMZW5ndGgodGhpcy5fbGVuZ3RoICsgbik7XG4gICAgICAgIC8vaWYgKCFjb250YWlucyghZmxhZykpIHJldHVybjsgLy8gbm90aGluZyB0byBkb1xuICAgICAgICBmb3IgKGxldCBpID0gb2xkbGVuZ3RoIC0gMTsgaSA+PSBwb3M7IGktLSlcbiAgICAgICAgICAgIHRoaXMuc2V0Qml0KGkgKyBuLCB0aGlzLmdldEJpdChpKSk7XG4gICAgICAgIGZvciAobGV0IGkgPSBwb3M7IGkgPCBwb3MgKyBuOyBpKyspXG4gICAgICAgICAgICB0aGlzLnNldEJpdChpLCBmbGFnKTtcbiAgICAgICAgLy8gZW5kVXBkYXRlKCk7XG4gICAgfVxuICAgIC8vLyBEZWxldGVzIG4gYml0cyBiZWdpbm5pbmcgYXQgcG9zaXRpb24gcG9zLCByZXNpemluZyBzZWxmIGFuZCBzaGlmdGluZyByZW1haW5pbmdcbiAgICAvLy8gYml0cyBhcHByb3ByaWF0ZWx5LlxuICAgIHJlbW92ZUF0KHBvcywgbiA9IDEpIHtcbiAgICAgICAgLy8gdGhlIG1vc3QgcHJpbWl0aXZlIGltcGxlbWVudGF0aW9uLCBvcHRpbWl6ZSBpdCBsYXRlciFcbiAgICAgICAgaWYgKG4gPCAwKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCduIGNhbm5vdCBiZSBuZWdhdGl2ZScpO1xuICAgICAgICB0aGlzLmFzc3VyZUluUmFuZ2UocG9zLCAwLCB0aGlzLl9sZW5ndGggLSBuLCAncG9zJyk7XG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5zKHRydWUpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gcG9zOyBpIDwgdGhpcy5fbGVuZ3RoIC0gbjsgaSsrKVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Qml0KGksIHRoaXMuZ2V0Qml0KGkgKyBuKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRMZW5ndGgodGhpcy5fbGVuZ3RoIC0gbik7XG4gICAgfVxuICAgIHJlbW92ZUJ5TWFzayhtYXNrLCBmbGFnID0gdHJ1ZSkge1xuICAgICAgICBpZiAodGhpcy5fbGVuZ3RoICE9IG1hc2subGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdsZW5ndGggIT0gbWFzay5sZW5ndGgnKTtcbiAgICAgICAgaWYgKG1hc2sgPT0gdGhpcykgeyAvLyBubyBuZWVkIHRvIGl0ZXJhdGVcbiAgICAgICAgICAgIHRoaXMuc2V0TGVuZ3RoKG1hc2suY291bnRCaXRzKCFmbGFnKSk7XG4gICAgICAgICAgICB0aGlzLnNldEFsbCghZmxhZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgZHN0SWR4ID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IHNyY0lkeCA9IC0xOyAoc3JjSWR4ID0gbWFzay5maW5kTmV4dChzcmNJZHgsICFmbGFnKSkgIT0gLTE7KVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RmFzdChkc3RJZHgrKywgdGhpcy5nZXRCaXQoc3JjSWR4KSk7XG4gICAgICAgICAgICB0aGlzLl9sZW5ndGggPSBkc3RJZHg7XG4gICAgICAgICAgICB0aGlzLl92ZXJzaW9uKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vLyBTaW1pbGFyIHRvIHRoZSBbXSBvcGVyYXRvci5cbiAgICBnZXRCaXQocG9zKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5fZGF0YVtNYXRoLmZsb29yKHBvcyAvIDB4MjApXSAmICgxIDw8IChwb3MgJiAweDFmKSkpICE9IDA7XG4gICAgfVxuICAgIC8vLyBTaW1pbGFyIHRvIHRoZSBbXSBvcGVyYXRvci5cbiAgICBzZXRCaXQocG9zLCBiaXQsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5zZXRGYXN0KHBvcywgYml0KTtcbiAgICAgICAgaWYgKG5vdGlmeSlcbiAgICAgICAgICAgIHRoaXMuX3ZlcnNpb24rKztcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5fdmVyc2lvbisrO1xuICAgIH1cbiAgICAvLy8gU2V0cyBbaV0tdGggYml0IHRvIFt2YWx1ZV0sIGRvZXMgbm90IGNoZWNrIGJvdW5kcywgZG9lcyBub3QgaW5jcmVtZW50IHZlcnNpb25cbiAgICBzZXRGYXN0KGksIHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHRoaXMuX2RhdGFbTWF0aC5mbG9vcihpIC8gMHgyMCldIHw9IDEgPDwgKGkgJiAweDFmKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5fZGF0YVtNYXRoLmZsb29yKGkgLyAweDIwKV0gJj0gfigxIDw8IChpICYgMHgxZikpO1xuICAgIH1cbiAgICBzZXRUcnVlKHBvcykge1xuICAgICAgICB0aGlzLl9kYXRhW01hdGguZmxvb3IocG9zIC8gMHgyMCldIHw9IDEgPDwgKHBvcyAmIDB4MWYpO1xuICAgIH1cbiAgICBzZXRGYWxzZShwb3MpIHtcbiAgICAgICAgdGhpcy5fZGF0YVtNYXRoLmZsb29yKHBvcyAvIDB4MjApXSAmPSB+KDEgPDwgKHBvcyAmIDB4MWYpKTtcbiAgICB9XG4gICAgdHJ1ZUNvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb3VudEJpdHModHJ1ZSk7XG4gICAgfVxuICAgIGZhbHNlQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvdW50Qml0cyhmYWxzZSk7XG4gICAgfVxuICAgIC8vLyBDb3VudHMgYml0cyBvZiB0aGUgc3BlY2lmaWVkIHZhbHVlLlxuICAgIGNvdW50Qml0cyh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5fbGVuZ3RoID09IDApXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkQ291bnRWZXJzaW9uICE9IHRoaXMuX3ZlcnNpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkQ291bnQgPSAwO1xuICAgICAgICAgICAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGhJbkludHM7XG4gICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICBmb3IgKDsgaSA8IGxlbiAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGsgPSB0aGlzLl9kYXRhW2ldOyBrICE9IDA7IGsgPj4+PSA4KSB7IC8vdG9kbzogY2FzdCBkYXRhW2ldIHRvIHVpbnRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb3VudCArPSBCaXRBcnJheS5fb25CaXRDb3VudFtrICYgMHhmZl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVGhlIGxhc3QgaW50LlxuICAgICAgICAgICAgbGV0IGsgPSB0aGlzLl9kYXRhW2ldO1xuICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nQml0cyA9IHRoaXMuX2xlbmd0aCAmIDB4MWY7XG4gICAgICAgICAgICBpZiAocmVtYWluaW5nQml0cyAhPSAwKSB7IC8vIGlmIHJlbWFpbmluZ0JpdHMgPT0gMCwgdGhlIGxhc3QgaW50IGlzIGZ1bGx5IHVzZWQgYW5kIEFMTCBiaXRzIHNob3VsZCBiZSBsZWZ0IGFzIGlzLlxuICAgICAgICAgICAgICAgIGsgJj0gfigoNDI5NDk2NzI5NSkgPDwgcmVtYWluaW5nQml0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKDsgayAhPSAwOyBrID4+Pj0gOClcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZENvdW50ICs9IEJpdEFycmF5Ll9vbkJpdENvdW50W2sgJiAweGZmXTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkQ291bnRWZXJzaW9uID0gdGhpcy5fdmVyc2lvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHZhbHVlID8gdGhpcy5fc2VsZWN0ZWRDb3VudCA6IHRoaXMuX2xlbmd0aCAtIHRoaXMuX3NlbGVjdGVkQ291bnQpO1xuICAgIH1cbiAgICAvLy8gUmV0dXJucyBhIG51bWJlciBvZiBzZXQgYml0cyB3aGVyZSBhbHNvIFtjaGVja10gaXMgdHJ1ZVxuICAgIGNvdW50V2hlcmUoY2hlY2spIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgICAgIGlmICh0aGlzLnRydWVDb3VudCgpID09IHRoaXMuX2xlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gY2hlY2soaSkgPyAxIDogMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAtMTsgKGkgPSB0aGlzLmZpbmROZXh0KGksIHRydWUpKSAhPSAtMTspXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNoZWNrKGkpID8gMSA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLy8vIFBlcmZvcm1zIGJpdCBcImFuZFwiIGFuZCBjb3VudHMgYml0cyBvZiB0aGUgc3BlY2lmaWVkIHZhbHVlLCB3aXRob3V0IGJpdHNldCBtb2RpZmljYXRpb24uXG4gICAgYW5kV2l0aENvdW50Qml0cyhzZWNvbmQsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9sZW5ndGggPT0gMClcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aEluSW50cztcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBmb3IgKDsgaSA8IGxlbiAtIDE7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgayA9IHRoaXMuX2RhdGFbaV0gJiBzZWNvbmQuX2RhdGFbaV07IGsgIT0gMDsgayA+Pj49IDgpXG4gICAgICAgICAgICAgICAgY291bnQgKz0gQml0QXJyYXkuX29uQml0Q291bnRbayAmIDB4ZmZdO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBsYXN0IGludC5cbiAgICAgICAgbGV0IGsgPSB0aGlzLl9kYXRhW2ldICYgc2Vjb25kLl9kYXRhW2ldO1xuICAgICAgICBjb25zdCByZW1haW5pbmdCaXRzID0gdGhpcy5fbGVuZ3RoICYgMHgxZjtcbiAgICAgICAgaWYgKHJlbWFpbmluZ0JpdHMgIT0gMClcbiAgICAgICAgICAgIGsgJj0gfigoNDI5NDk2NzI5NSkgPDwgcmVtYWluaW5nQml0cyk7XG4gICAgICAgIGZvciAoOyBrICE9IDA7IGsgPj4+PSA4KVxuICAgICAgICAgICAgY291bnQgKz0gQml0QXJyYXkuX29uQml0Q291bnRbayAmIDB4ZmZdO1xuICAgICAgICByZXR1cm4gKHZhbHVlID8gY291bnQgOiB0aGlzLl9sZW5ndGggLSBjb3VudCk7XG4gICAgfVxuICAgIGNsZWFyKCkge1xuICAgICAgICB0aGlzLnNldExlbmd0aCgwKTtcbiAgICB9XG4gICAgY29udGFpbnModmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZE5leHQoLTEsIHZhbHVlKSA+PSAwO1xuICAgIH1cbiAgICBnZXQgYWxsVHJ1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY291bnRCaXRzKHRydWUpID09IHRoaXMuX2xlbmd0aDtcbiAgICB9XG4gICAgZ2V0IGFsbEZhbHNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb3VudEJpdHMoZmFsc2UpID09IHRoaXMuX2xlbmd0aDtcbiAgICB9XG4gICAgZ2V0IGFueVRydWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvdW50Qml0cyh0cnVlKSA+IDA7XG4gICAgfVxuICAgIGdldCBhbnlGYWxzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY291bnRCaXRzKGZhbHNlKSA+IDA7XG4gICAgfVxuICAgIC8vLyBSZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgbmV4dCBiaXQgb2YgdGhlIHNwZWNpZmllZCB2YWx1ZSwgc3RhcnRpbmcgZnJvbSB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLlxuICAgIC8vLyBSZXR1cm5zIC0xLCBpZiB0aGVyZSBhcmUgbm8gc3VjaCBiaXRzLlxuICAgIGZpbmROZXh0KGluZGV4LCB2YWx1ZSA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5hc3N1cmVJblJhbmdlKGluZGV4LCAtMSwgdGhpcy5fbGVuZ3RoLCAnaW5kZXgnKTtcbiAgICAgICAgaWYgKGluZGV4ID49IHRoaXMuX2xlbmd0aCAtIDEpXG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIGluZGV4ID0gaW5kZXggPCAwID8gMCA6IGluZGV4ICsgMTsgLy8gc2tpcCBzdGFydFxuICAgICAgICBsZXQgdW51c2VkQml0cyA9IGluZGV4ICYgMHgxZjtcbiAgICAgICAgY29uc3QgbnVtSW50cyA9IHRoaXMubGVuZ3RoSW5JbnRzO1xuICAgICAgICBmb3IgKGxldCBpID0gTWF0aC5mbG9vcihpbmRleCAvIDMyKTsgaSA8IG51bUludHM7IGkrKykge1xuICAgICAgICAgICAgbGV0IGsgPSAodmFsdWUgPyB0aGlzLl9kYXRhW2ldIDogfnRoaXMuX2RhdGFbaV0pOyAvLyB1aW50IGNhc3RcbiAgICAgICAgICAgIGlmICh1bnVzZWRCaXRzICE9IDApIHtcbiAgICAgICAgICAgICAgICBrICY9ICgoMHhmZmZmZmZmZiA8PCB1bnVzZWRCaXRzKSAmIDB4ZmZmZmZmZmYpO1xuICAgICAgICAgICAgICAgIHVudXNlZEJpdHMgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIXZhbHVlICYmIGsgPT0gLTQyOTQ5NjcyOTYpIC8vIGxvb2tpbmcgZm9yIGZhbHNlLCBhbGwgYml0cyBhcmUgc2V0XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgayAhPSAwOyBqICs9IDgsIGsgPj4+PSA4KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IEJpdEFycmF5Ll9maXJzdE9uQml0W2sgJiAweGZmXTtcbiAgICAgICAgICAgICAgICBpZiAocCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcCArIChpICogMzIpICsgajtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IHRoaXMuX2xlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIC8vLyBGaW5kcyBwcmV2aW91cyBiaXQgb2YgdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGUgYml0c2V0LlxuICAgIGZpbmRQcmV2KGluZGV4LCB2YWx1ZSA9IHRydWUpIHtcbiAgICAgICAgaWYgKGluZGV4ID09IDApXG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIHRoaXMuYXNzdXJlSW5SYW5nZShpbmRleCwgLTEsIHRoaXMuX2xlbmd0aCwgJ2luZGV4Jyk7XG4gICAgICAgIGluZGV4ID0gaW5kZXggPCAwID8gdGhpcy5fbGVuZ3RoIC0gMSA6IGluZGV4IC0gMTsgLy8gc2tpcCBzdGFydFxuICAgICAgICBjb25zdCBsYXN0SW50SWR4ID0gTWF0aC5mbG9vcihpbmRleCAvIDB4MjApO1xuICAgICAgICBsZXQgcmVtYWluaW5nQml0cyA9IChpbmRleCArIDEpICYgMHgxZjtcbiAgICAgICAgZm9yIChsZXQgaSA9IGxhc3RJbnRJZHg7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBsZXQgayA9ICh2YWx1ZSA/IHRoaXMuX2RhdGFbaV0gOiB+dGhpcy5fZGF0YVtpXSk7IC8vIGNhc3RcbiAgICAgICAgICAgIGlmIChyZW1haW5pbmdCaXRzICE9IDApIHtcbiAgICAgICAgICAgICAgICBrICY9IH4oKDQyOTQ5NjcyOTUpIDw8IHJlbWFpbmluZ0JpdHMpO1xuICAgICAgICAgICAgICAgIHJlbWFpbmluZ0JpdHMgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDI0OyBrICE9IDA7IGogLT0gOCwgayA8PD0gOCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBCaXRBcnJheS5fbGFzdE9uQml0W2sgPj4+IDB4MThdO1xuICAgICAgICAgICAgICAgIGlmIChwID49IDApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwICsgKGkgKiAzMikgKyBqO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG59XG5CaXRBcnJheS5fb25CaXRDb3VudCA9IEludDhBcnJheS5mcm9tKFtcbiAgICAwLCAxLCAxLCAyLCAxLCAyLCAyLCAzLCAxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LFxuICAgIDEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsXG4gICAgMSwgMiwgMiwgMywgMiwgMywgMywgNCwgMiwgMywgMywgNCwgMywgNCwgNCwgNSxcbiAgICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LFxuICAgIDEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsXG4gICAgMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMywgNCwgNCwgNSwgNCwgNSwgNSwgNixcbiAgICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LFxuICAgIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsIDQsIDUsIDUsIDYsIDUsIDYsIDYsIDcsXG4gICAgMSwgMiwgMiwgMywgMiwgMywgMywgNCwgMiwgMywgMywgNCwgMywgNCwgNCwgNSxcbiAgICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LFxuICAgIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsXG4gICAgMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwgNCwgNSwgNSwgNiwgNSwgNiwgNiwgNyxcbiAgICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LFxuICAgIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsIDQsIDUsIDUsIDYsIDUsIDYsIDYsIDcsXG4gICAgMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwgNCwgNSwgNSwgNiwgNSwgNiwgNiwgNyxcbiAgICA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LCA1LCA2LCA2LCA3LCA2LCA3LCA3LCA4XG5dKTtcbkJpdEFycmF5Ll9maXJzdE9uQml0ID0gSW50OEFycmF5LmZyb20oW1xuICAgIC0xLCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDQsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNSwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA0LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDYsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNCwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA1LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDQsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNywgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA0LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDUsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNCwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA2LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDQsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNSwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA0LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwXG5dKTtcbkJpdEFycmF5Ll9sYXN0T25CaXQgPSBJbnQ4QXJyYXkuZnJvbShbXG4gICAgLTEsIDAsIDEsIDEsIDIsIDIsIDIsIDIsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsXG4gICAgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCxcbiAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LFxuICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsXG4gICAgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNixcbiAgICA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LFxuICAgIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsXG4gICAgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNixcbiAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LFxuICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsXG4gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNyxcbiAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LFxuICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsXG4gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNyxcbiAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LFxuICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDdcbl0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWW1sMExXRnljbUY1TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lZbWwwTFdGeWNtRjVMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFMUJRVTBzUTBGQlF5eFBRVUZQTEU5QlFVOHNVVUZCVVR0SlFXOUZNMElzV1VGQldTeEhRVUY1UWl4RlFVRkZMR1ZCUVdsRExFdEJRVXM3VVVGYWNrVXNXVUZCVHl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOYUxHRkJRVkVzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEWWl4cFFrRkJXU3hIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU5xUWl4dFFrRkJZeXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU51UWl3d1FrRkJjVUlzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTXpRaXcwUWtGQmRVSXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVNM1FpeHRRa0ZCWXl4SFFVRkhMRVZCUVVVc1EwRkJRenRSUVVOd1Fpd3dRa0ZCY1VJc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU51UXl4eFFrRkJaMElzUjBGQlJ5eExRVUZMTEVOQlFVTTdVVUZMZGtJc1NVRkJTU3hQUVVGUExFZEJRVWNzUzBGQlN5eFJRVUZSTEVWQlFVVTdXVUZETTBJc1RVRkJUU3hOUVVGTkxFZEJRVWNzUjBGQlJ5eERRVUZETzFsQlEyNUNMRTFCUVUwc1NVRkJTU3hIUVVGSExGRkJRVkVzUTBGQlF5eGhRVUZoTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkROVU1zU1VGQlNTeFpRVUZaTzJkQ1FVTmtMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJUdHZRa0ZEYkVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTJwQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRPMWxCUTJ4Q0xFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NUVUZCVFN4RFFVRkRPMU5CUTNaQ08yRkJRVTBzU1VGQlNTeEhRVUZITEZsQlFWa3NWMEZCVnl4RlFVRkZPMWxCUTNKRExFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NSMEZCYTBJc1EwRkJRenRaUVVOb1F5eEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRmxCUVhOQ0xFTkJRVU03VTBGRGRrTTdPMWxCUTBNc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eHhRa0ZCY1VJc1EwRkJReXhEUVVGRE8wbEJRek5ETEVOQlFVTTdTVUZIUkN4VlFVRlZMRXRCUVVrc1QwRkJUeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVRXNRMEZCUXp0SlFVVnFReXhWUVVGVkxFTkJRVU1zUjBGQlZ5eEZRVUZGTEU5QlFXVTdVVUZEY2tNc1NVRkJTU3hIUVVGSExFZEJRVWNzUTBGQlF6dFpRVUZGTEUxQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc1IwRkJSeXhQUVVGUExEaENRVUU0UWl4RFFVRkRMRU5CUVVNN1NVRkRla1VzUTBGQlF6dEpRVVZFTEdGQlFXRXNRMEZCUXl4TFFVRmhMRVZCUVVVc1IwRkJWeXhGUVVGRkxFZEJRVmNzUlVGQlJTeFBRVUZsTzFGQlEzQkZMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1IwRkJSeXhEUVVGRExFVkJRVVU3V1VGRGJFTXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXhaUVVGWkxFOUJRVThzUzBGQlN5eExRVUZMTEcxQ1FVRnRRaXhIUVVGSExFdEJRVXNzUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXp0VFFVTnFSanRKUVVOSUxFTkJRVU03U1VGRlJDeEpRVUZKTEVOQlFVTXNSMEZCWjBJc1JVRkJSU3hIUVVGblFpeEZRVUZGTEV0QlFXRTdVVUZEY0VRc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRXRCUVVzc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU01UWl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUTJwQ08wbEJRMGdzUTBGQlF6dEpRVVZFTEZGQlFWRXNRMEZCUXl4TFFVRmxPMUZCUTNSQ0xFbEJRVWtzU1VGQlNTeERRVUZETEU5QlFVOHNTVUZCU1N4TFFVRkxMRU5CUVVNc1QwRkJUeXhGUVVGRk8xbEJRMnBETEUxQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc2JVSkJRVzFDTEVsQlFVa3NRMEZCUXl4UFFVRlBMRTlCUVU4c1MwRkJTeXhEUVVGRExFOUJRVThzUjBGQlJ5eERRVUZETEVOQlFVTTdVMEZEZWtVN1VVRkRSQ3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUlVGQlJTeEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1VVRkRkRVFzU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMGxCUTJ4Q0xFTkJRVU03U1VGRlJDeEpRVUZKTEUxQlFVMDdVVUZEVWl4UFFVRlBMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU03U1VGRGRFSXNRMEZCUXp0SlFVVkVMRWxCUVVrc1RVRkJUVHRSUVVOU0xFOUJRVThzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXp0SlFVTndRaXhEUVVGRE8wbEJSVVFzU1VGQlNTeE5RVUZOTEVOQlFVTXNTVUZCYVVJN1VVRkRNVUlzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNN1VVRkRiRUlzU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMGxCUTJ4Q0xFTkJRVU03U1VGRlJDeEpRVUZKTEU5QlFVODdVVUZEVkN4UFFVRlBMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU03U1VGRGRrSXNRMEZCUXp0SlFVVkVMRWxCUVVrc1QwRkJUeXhEUVVGRExFdEJRV0U3VVVGRGRrSXNTVUZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhMUVVGTExFTkJRVU03U1VGRGVFSXNRMEZCUXp0SlFVVkVMR2RDUVVGblFpeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpPMUZCUXpWQ0xFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXp0SlFVTnNRaXhEUVVGRE8wbEJSVVFzU1VGQlNTeFpRVUZaTzFGQlEyUXNUMEZCVHl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVU5zUkN4RFFVRkRPMGxCUlVRc1NVRkJTU3hoUVVGaE8xRkJRMllzVDBGQlR5eEpRVUZKTEVOQlFVTXNVVUZCVVN4SlFVRkpMRWxCUVVrc1EwRkJReXh4UWtGQmNVSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExHTkJRV01zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUTJoR0xFTkJRVU03U1VGRlJDeEpRVUZKTEdGQlFXRXNRMEZCUXl4SlFVRlpPMUZCUXpWQ0xFbEJRVWtzUTBGQlF5eGpRVUZqTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUXpOQ0xFbEJRVWtzUTBGQlF5eHhRa0ZCY1VJc1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETzBsQlF6ZERMRU5CUVVNN1NVRkZSQ3hKUVVGSkxFbEJRVWs3VVVGRFRpeFBRVUZQTEVsQlFVa3NRMEZCUXp0SlFVTmtMRU5CUVVNN1NVRkZSQ3hUUVVGVExFTkJRVU1zUzBGQllUdFJRVU55UWl4SlFVRkpMRXRCUVVzc1IwRkJSeXhEUVVGRE8xbEJRMWdzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eERRVUZETzFGQlJYQkRMRWxCUVVrc1MwRkJTeXhKUVVGSkxFbEJRVWtzUTBGQlF5eFBRVUZQTzFsQlFVVXNUMEZCVHp0UlFVTnNReXhOUVVGTkxGZEJRVmNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUTNSRUxFbEJRVWtzUTBGQlF5eFhRVUZYTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNWMEZCVnl4SFFVRkhMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVTdXVUZEY0Vjc1RVRkJUU3hQUVVGUExFZEJRVWNzU1VGQlNTeFhRVUZYTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1dVRkROME1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhGUVVGRkxFOUJRVThzUlVGQlJTeERRVUZETEZkQlFWY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1dVRkRjRWNzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4UFFVRlBMRU5CUVVNN1UwRkRkRUk3VVVGRlJDeEpRVUZKTEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRk8xbEJRM2hDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhKUVVGSkxFZEJRVWNzUTBGQlF6dG5Ra0ZEZWtJc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJSV3BHTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNXVUZCV1N4RlFVRkZMRmRCUVZjc1EwRkJReXhEUVVGRE8xTkJRM0JFTzFGQlEwUXNTVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhMUVVGTExFTkJRVU03VVVGRGNrSXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8wbEJRMnhDTEVOQlFVTTdTVUZGUkN4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRV01zUlVGQlJTeEpRVUZqTzFGQlF6TkRMRWxCUVVrc1NVRkJTU3hEUVVGRExFOUJRVThzU1VGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHp0WlFVTTVRaXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEcxQ1FVRnRRaXhKUVVGSkxFTkJRVU1zVDBGQlR5eFBRVUZQTEVsQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJSWHBGTEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTjRReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNN1VVRkROVUlzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4UlFVRlJMRU5CUVVNc1lVRkJZU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTnNSQ3hKUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVVnNRaXhOUVVGTkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRPMUZCUXpsQ0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhIUVVGSExFVkJRVVVzUTBGQlF5eEZRVUZGTzFsQlF6RkNMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSV2hFTEU5QlFVOHNTVUZCU1N4RFFVRkRPMGxCUTJRc1EwRkJRenRKUVVWUExFMUJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNUVUZCWXp0UlFVTjZReXhQUVVGUExFbEJRVWtzVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVNM1JDeERRVUZETzBsQlJVUXNUVUZCVFN4RFFVRkRMRlZCUVZVc1EwRkJReXhOUVVGelFqdFJRVU4wUXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxGRkJRVkVzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkRla01zU1VGQlNTeERRVUZETEZGQlFWRXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkZiRUlzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRja01zU1VGQlNTeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVOWUxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRUUVVOb1JUdFJRVU5FTEU5QlFVOHNTVUZCU1N4RFFVRkRPMGxCUTJRc1EwRkJRenRKUVVWRUxITkhRVUZ6Unp0SlFVTjBSeXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFXRXNSVUZCUlN4SlFVRmpPMUZCUXpGRExFMUJRVTBzU1VGQlNTeEhRVUZITEVsQlFVa3NVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJRMnBETEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eExRVUZMTEVWQlFVVXNSVUZCUlN4RFFVRkRPMWxCUXpWQ0xFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJURkNMRWxCUVVrc1EwRkJReXhSUVVGUkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEyeENMRTlCUVU4c1NVRkJTU3hEUVVGRE8wbEJRMlFzUTBGQlF6dEpRVVZFTEd0RlFVRnJSVHRKUVVOc1JTeE5RVUZOTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVZNN1VVRkRla0lzVDBGQlR5eFJRVUZSTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eERRVUZUTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRka1VzUTBGQlF6dEpRVVZFTERSRlFVRTBSVHRKUVVNMVJTeE5RVUZOTEVOQlFVTXNaVUZCWlN4RFFVRkRMRTlCUVdVc1JVRkJSU3hMUVVGclFqdFJRVU40UkN4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxGRkJRVkVzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTnVReXhKUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEV0QlFVc3NRMEZCUXp0UlFVTnVRaXhQUVVGUExFbEJRVWtzUTBGQlF6dEpRVU5rTEVOQlFVTTdTVUZGUkN4NVEwRkJlVU03U1VGRGVrTXNUVUZCVFN4RFFVRkRMRk5CUVZNc1EwRkJReXhMUVVGcFFqdFJRVU5vUXl4TlFVRk5MRWRCUVVjc1IwRkJSeXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETzFGQlEzcENMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzVVVGQlVTeERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOdVF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTjRSQ3hKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRka0lzU1VGQlNTeEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUVVNc1NVRkJTU3hKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlJUTkNMRTlCUVU4c1EwRkJReXhIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZPMWxCUTNoQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVOdVFpeERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF6dG5Ra0ZEY2tJc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUTJoRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4RFFVRkRPMmRDUVVOdVF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1EwRkJRenRaUVVWeVF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4RFFVRkRPMU5CUTFnN1VVRkZSQ3hKUVVGSkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVsQlFVa3NRMEZCUXp0WlFVTnFRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hKUVVGSkxFTkJRVU03VVVGRmRFUXNTVUZCU1N4SFFVRkhMRWRCUVVjc1NVRkJTU3hKUVVGSkxFTkJRVU03V1VGRGFrSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUlhCRUxFbEJRVWtzUjBGQlJ5eEhRVUZITEVsQlFVa3NTVUZCU1N4RFFVRkRPMWxCUTJwQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVVjZReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTnNRaXhQUVVGUExFbEJRVWtzUTBGQlF6dEpRVU5rTEVOQlFVTTdTVUZGUkN4UlFVRlJPMUZCUTA0c1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEZWQlFWVXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzBsQlF6ZEVMRU5CUVVNN1NVRkZSQ3cwUTBGQk5FTTdTVUZETlVNc1RVRkJUU3hEUVVGRExFdEJRV1U3VVVGRGNFSXNTVUZCU1N4SlFVRkpMRWxCUVVrc1MwRkJTenRaUVVGRkxFOUJRVThzU1VGQlNTeERRVUZETzFGQlF5OUNMRWxCUVVrc1MwRkJTeXhKUVVGSkxFbEJRVWs3V1VGQlJTeFBRVUZQTEV0QlFVc3NRMEZCUXp0UlFVTm9ReXhKUVVGSkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVsQlFVa3NTMEZCU3l4RFFVRkRMRTlCUVU4N1dVRkJSU3hQUVVGUExFdEJRVXNzUTBGQlF6dFJRVU5vUkN4SlFVRkpMRWxCUVVrc1EwRkJReXhQUVVGUExFbEJRVWtzUTBGQlF6dFpRVUZGTEU5QlFVOHNTVUZCU1N4RFFVRkRPMUZCUlc1RExFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRk8xbEJRelZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGQlJTeFBRVUZQTEV0QlFVc3NRMEZCUXp0UlFVVndSQ3hMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMWxCUXk5RUxFbEJRVWtzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRia01zVDBGQlR5eExRVUZMTEVOQlFVTTdVMEZEYUVJN1VVRkRSQ3hQUVVGUExFbEJRVWtzUTBGQlF6dEpRVU5rTEVOQlFVTTdTVUZGUkN4MVFrRkJkVUk3U1VGRGRrSXNTMEZCU3p0UlFVTklMRTFCUVUwc1VVRkJVU3hIUVVGSExFbEJRVWtzVVVGQlVTeERRVUZETEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVONFF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4SFFVRkhMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc2JVTkJRVzFETzFGQlEyeEdMRkZCUVZFc1EwRkJReXhQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXp0UlFVTm9ReXhSUVVGUkxFTkJRVU1zVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNN1VVRkRiRU1zVDBGQlR5eFJRVUZSTEVOQlFVTTdTVUZEYkVJc1EwRkJRenRKUVVWRUxEUkNRVUUwUWp0SlFVTTFRaXhKUVVGSkxFTkJRVU1zU1VGQll5eEZRVUZGTEUxQlFXVTdVVUZEYkVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkZNVUlzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRja01zU1VGQlNTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVOVUxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRUUVVOb1JUdFJRVVZFTEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVTTVRaXhQUVVGUExFbEJRVWtzUTBGQlF6dEpRVU5rTEVOQlFVTTdTVUZGUkN4eFFrRkJjVUk3U1VGRGNrSXNUVUZCVFN4RFFVRkRMRTFCUVUwc1IwRkJSeXhKUVVGSk8xRkJRMnhDTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVU3V1VGRGVFTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVVjBRaXhKUVVGSkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRGFFTXNRMEZCUXp0SlFVVkVMRzFGUVVGdFJUdEpRVU51UlN4TlFVRk5MRU5CUVVNc1MwRkJZeXhGUVVGRkxFMUJRVTBzUjBGQlJ5eExRVUZMTzFGQlEyNURMRTFCUVUwc1MwRkJTeXhIUVVGSExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU0zUWl4TlFVRk5MRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETzFGQlJUbENMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3V1VGRE5VSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTTdVMEZEZGtJc1EwRkJReXhuUWtGQlowSTdVVUZGYkVJc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJRMmhETEVOQlFVTTdTVUZGUkN3clEwRkJLME03U1VGREwwTXNPRU5CUVRoRE8wbEJRemxETEhkRVFVRjNSRHRKUVVONFJDeFZRVUZWTEVOQlFVTXNUMEZCYzBJc1JVRkJSU3hMUVVGTExFZEJRVU1zU1VGQlNTeEZRVUZGTEV0QlFVc3NSMEZCUXl4SlFVRkpMRVZCUVVVc1RVRkJUU3hIUVVGRExFbEJRVWs3VVVGRGNFVXNTVUZCU1N4TFFVRkxPMWxCUTFBc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEV0QlFVc3NSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVVM1FpeExRVUZMTEUxQlFVMHNRMEZCUXl4SlFVRkpMRTlCUVU4N1dVRkRja0lzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRmVrSXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMGxCUTJoRExFTkJRVU03U1VGRlJDeFZRVUZWTEVOQlFVTXNUMEZCYzBJc1JVRkJSU3hMUVVGTExFZEJRVU1zU1VGQlNUdFJRVU16UXl4TFFVRkxMRTFCUVUwc1MwRkJTeXhKUVVGSkxFOUJRVThzUlVGQlJUdFpRVU16UWl4SlFVRkpMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NTMEZCU3p0blFrRkROMElzVDBGQlR5eExRVUZMTEVOQlFVTTdVMEZEYUVJN1VVRkRSQ3hQUVVGUExFbEJRVWtzUTBGQlF6dEpRVU5rTEVOQlFVTTdTVUZGUkN4UlFVRlJMRU5CUVVNc1QwRkJjMElzUlVGQlJTeExRVUZMTEVkQlFVTXNTVUZCU1R0UlFVTjZReXhMUVVGTExFMUJRVTBzUzBGQlN5eEpRVUZKTEU5QlFVOHNSVUZCUlR0WlFVTXpRaXhKUVVGSkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1MwRkJTenRuUWtGRE4wSXNUMEZCVHl4SlFVRkpMRU5CUVVNN1UwRkRaanRSUVVORUxFOUJRVThzUzBGQlN5eERRVUZETzBsQlEyWXNRMEZCUXp0SlFVVkVMRkZCUVZFc1EwRkJReXhMUVVGbExFVkJRVVVzUzBGQlN5eEhRVUZETEVsQlFVa3NSVUZCUlN4TFFVRkxMRWRCUVVNc1NVRkJTU3hGUVVGRkxFMUJRVTBzUjBGQlF5eEpRVUZKTEVWQlFVVXNWVUZCVlN4SFFVRkRMRWxCUVVrN1VVRkROVVVzU1VGQlNTeExRVUZMTEVsQlFVa3NWVUZCVlR0WlFVTnlRaXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJSVGRDTEVsQlFVa3NWVUZCVlN4RlFVRkZPMWxCUTJRc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdaMEpCUTNKRExFbEJRVWtzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXp0dlFrRkRWaXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRoUVVNeFFqdFRRVU5HTzJGQlFVMDdXVUZEVEN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRExFVkJRVVU3WjBKQlEyNURMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8xTkJRemxETzFGQlJVUXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMGxCUTJoRExFTkJRVU03U1VGRlJDeFJRVUZSTEVOQlFVTXNTVUZCV1N4RlFVRkZMRVZCUVZVc1JVRkJSU3hMUVVGakxFVkJRVVVzVFVGQlRTeEhRVUZETEVsQlFVazdVVUZETlVRc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzUTBGQlF5eEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRPMUZCUTNSRUxFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVWc1JDeE5RVUZOTEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXp0UlFVTnFReXhOUVVGTkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVVV2UWl4blFrRkJaMEk3VVVGRGFFSXNTVUZCU1N4TFFVRkxMRVZCUVVVN1dVRkRWQ3hMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEV0QlFVc3NSVUZCUlN4RFFVRkRMRWxCUVVrc1IwRkJSeXhGUVVGRkxFTkJRVU1zUlVGQlJUdG5Ra0ZETDBJc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTnVRanRoUVVGTk8xbEJRMHdzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4TFFVRkxMRVZCUVVVc1EwRkJReXhKUVVGSkxFZEJRVWNzUlVGQlJTeERRVUZETEVWQlFVVTdaMEpCUXk5Q0xFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRjRUk3VVVGRlJDeEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdVVUZET1VJc1QwRkJUeXhKUVVGSkxFTkJRVU03U1VGRFpDeERRVUZETzBsQlJVUXNiVVZCUVcxRk8wbEJRMjVGTEZOQlFWTXNRMEZCUXl4RFFVRlRMRVZCUVVVc1MwRkJZeXhGUVVGRkxFMUJRVTBzUjBGQlF5eEpRVUZKTzFGQlF6bERMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4N1dVRkRNMElzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl3MFFrRkJORUlzUTBGQlF5eERRVUZETzFGQlJXaEVMRWxCUVVrc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NRMEZCUXp0WlFVTjBRaXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdVVUZGTTBNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMUZCUlhCQ0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWs3V1VGRGRrSXNUVUZCVFN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFsQlEyNUVMRWxCUVVrc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4TFFVRkxPMmRDUVVGRkxGTkJRVk03V1VGRGRFTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdXVUZEZGtJc1EwRkJReXhGUVVGRkxFTkJRVU03VTBGRFREdFJRVVZFTEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0SlFVTm9ReXhEUVVGRE8wbEJSVVFzSzBWQlFTdEZPMGxCUXk5RkxHMUVRVUZ0UkR0SlFVTnVSQ3hIUVVGSExFTkJRVU1zUzBGQlpTeEZRVUZGTEUxQlFVMHNSMEZCUXl4SlFVRkpPMUZCUXpsQ0xFbEJRVWtzU1VGQlNTeERRVUZETEU5QlFVOHNTVUZCU1N4TFFVRkxMRU5CUVVNc1QwRkJUenRaUVVNdlFpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMSFZDUVVGMVFpeERRVUZETEVOQlFVTTdVVUZGTTBNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhaUVVGWkxFVkJRVVVzUTBGQlF5eEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRMRVZCUVVVN1dVRkRia1FzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUld4RExFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVU01UWl4UFFVRlBMRWxCUVVrc1EwRkJRenRKUVVOa0xFTkJRVU03U1VGRlJDeG5Sa0ZCWjBZN1NVRkRhRVlzSzBSQlFTdEVPMGxCUXk5RUxFMUJRVTBzUTBGQlF5eExRVUZsTEVWQlFVVXNUVUZCVFN4SFFVRkRMRWxCUVVrN1VVRkRha01zU1VGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4SlFVRkpMRXRCUVVzc1EwRkJReXhQUVVGUE8xbEJReTlDTEUxQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc2RVSkJRWFZDTEVOQlFVTXNRMEZCUXp0UlFVVXpReXhOUVVGTkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRPMUZCUXpsQ0xFdEJRVXNzU1VGQlNTeEpRVUZKTEVkQlFVY3NRMEZCUXl4RlFVRkZMRWxCUVVrc1IwRkJSeXhIUVVGSExFVkJRVVVzU1VGQlNTeEZRVUZGTzFsQlEyNURMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFGQlJYcERMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVNNVFpeFBRVUZQTEVsQlFVa3NRMEZCUXp0SlFVTmtMRU5CUVVNN1NVRkZSQ3huUmtGQlowWTdTVUZEYUVZc0swUkJRU3RFTzBsQlF5OUVMRTFCUVUwc1EwRkJReXhMUVVGbExFVkJRVVVzVFVGQlRTeEhRVUZETEVsQlFVazdVVUZEYWtNc1NVRkJTU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEpRVUZKTEV0QlFVc3NRMEZCUXl4UFFVRlBPMWxCUXk5Q0xFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNkVUpCUVhWQ0xFTkJRVU1zUTBGQlF6dFJRVVV6UXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlR0WlFVTnVSQ3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVVndSQ3hKUVVGSkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03VVVGRE9VSXNUMEZCVHl4SlFVRkpMRU5CUVVNN1NVRkRaQ3hEUVVGRE8wbEJSVVFzWjBSQlFXZEVPMGxCUTJoRUxFZEJRVWNzUTBGQlF5eE5RVUZOTEVkQlFVY3NTVUZCU1R0UlFVTm1MRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1dVRkJXU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVWQlFVVXNRMEZCUXl4RlFVRkZPMWxCUTI1RUxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUldwRExFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVU01UWl4UFFVRlBMRWxCUVVrc1EwRkJRenRKUVVOa0xFTkJRVU03U1VGRlJDd3lSVUZCTWtVN1NVRkRNMFVzSzBSQlFTdEVPMGxCUXk5RUxFVkJRVVVzUTBGQlF5eExRVUZsTEVWQlFVVXNUVUZCVFN4SFFVRkhMRWxCUVVrN1VVRkRMMElzU1VGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4SlFVRkpMRXRCUVVzc1EwRkJReXhQUVVGUE8xbEJReTlDTEUxQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc2RVSkJRWFZDTEVOQlFVTXNRMEZCUXp0UlFVVXpReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExGbEJRVmtzUlVGQlJTeERRVUZETEVkQlFVY3NSMEZCUnl4RlFVRkZMRU5CUVVNc1JVRkJSVHRaUVVOdVJDeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkZiRU1zU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFGQlF6bENMRTlCUVU4c1NVRkJTU3hEUVVGRE8wbEJRMlFzUTBGQlF6dEpRVVZFTEhGR1FVRnhSanRKUVVOeVJpd3JSRUZCSzBRN1NVRkRMMFFzUjBGQlJ5eERRVUZETEV0QlFXVXNSVUZCUlN4TlFVRk5MRWRCUVVjc1NVRkJTVHRSUVVOb1F5eEpRVUZKTEVsQlFVa3NRMEZCUXl4UFFVRlBMRWxCUVVrc1MwRkJTeXhEUVVGRExFOUJRVTg3V1VGREwwSXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXgxUWtGQmRVSXNRMEZCUXl4RFFVRkRPMUZCUlRORExFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zV1VGQldTeEZRVUZGTEVOQlFVTXNSMEZCUnl4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRk8xbEJRMjVFTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVWc1F5eEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdVVUZET1VJc1QwRkJUeXhKUVVGSkxFTkJRVU03U1VGRFpDeERRVUZETzBsQlJVUXNiMFpCUVc5R08wbEJRM0JHTEZGQlFWRXNRMEZCUXl4SFFVRlhMRVZCUVVVc1EwRkJVeXhGUVVGRkxFbEJRVWtzUjBGQlJ5eExRVUZMTzFGQlF6TkRMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzFGQlJXaEVMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU03V1VGQlJTeFBRVUZQTzFGQlJXNUNMR2RDUVVGblFqdFJRVU5vUWl4MVJFRkJkVVE3VVVGRmRrUXNhVUpCUVdsQ08xRkJRMnBDTEUxQlFVMHNVMEZCVXl4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU03VVVGREwwSXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUldwRExHZEVRVUZuUkR0UlFVVm9SQ3hMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEZOQlFWTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhKUVVGSkxFZEJRVWNzUlVGQlJTeERRVUZETEVWQlFVVTdXVUZEZGtNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVVnlReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRMRWRCUVVjc1IwRkJSeXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVTdXVUZEYUVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkZka0lzWlVGQlpUdEpRVU5xUWl4RFFVRkRPMGxCUlVRc2EwWkJRV3RHTzBsQlEyeEdMSFZDUVVGMVFqdEpRVU4yUWl4UlFVRlJMRU5CUVVNc1IwRkJWeXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETzFGQlEzcENMSGRFUVVGM1JEdFJRVU40UkN4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRE8xbEJRMUFzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4elFrRkJjMElzUTBGQlF5eERRVUZETzFGQlJURkRMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0UlFVVndSQ3hKUVVGSkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVN1dVRkRka0lzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SFFVRkhMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSVHRuUWtGRGVrTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFRRVU4wUXp0UlFVVkVMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOdVF5eERRVUZETzBsQlJVUXNXVUZCV1N4RFFVRkRMRWxCUVdNc1JVRkJSU3hKUVVGSkxFZEJRVWNzU1VGQlNUdFJRVU4wUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhQUVVGUExFbEJRVWtzU1VGQlNTeERRVUZETEUxQlFVMDdXVUZETjBJc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eDFRa0ZCZFVJc1EwRkJReXhEUVVGRE8xRkJSVE5ETEVsQlFVa3NTVUZCU1N4SlFVRkpMRWxCUVVrc1JVRkJSU3hGUVVGRkxIRkNRVUZ4UWp0WlFVTjJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEzUkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0VFFVTndRanRoUVVGTk8xbEJRMHdzU1VGQlNTeE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUldZc1MwRkJTeXhKUVVGSkxFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzJkQ1FVTnFSU3hKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlN4RlFVRkZMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVVTVReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEUxQlFVMHNRMEZCUXp0WlFVTjBRaXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdVMEZEYWtJN1VVRkZSQ3hQUVVGUExFbEJRVWtzUTBGQlF6dEpRVU5rTEVOQlFVTTdTVUZGUkN3clFrRkJLMEk3U1VGREwwSXNUVUZCVFN4RFFVRkRMRWRCUVZjN1VVRkRhRUlzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzBsQlEzcEZMRU5CUVVNN1NVRkZSQ3dyUWtGQkswSTdTVUZETDBJc1RVRkJUU3hEUVVGRExFZEJRVmNzUlVGQlJTeEhRVUZaTEVWQlFVVXNUVUZCVFN4SFFVRkhMRWxCUVVrN1VVRkROME1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGRrSXNTVUZCU1N4TlFVRk5PMWxCUTFJc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlJTeERRVUZET3p0WlFVVm9RaXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdTVUZEY0VJc1EwRkJRenRKUVVWRUxHbEdRVUZwUmp0SlFVTnFSaXhQUVVGUExFTkJRVU1zUTBGQlV5eEZRVUZGTEV0QlFXTTdVVUZETDBJc1NVRkJTU3hMUVVGTE8xbEJRMUFzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXpzN1dVRkZjRVFzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVNelJDeERRVUZETzBsQlJVUXNUMEZCVHl4RFFVRkRMRWRCUVZjN1VVRkRha0lzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTXhSQ3hEUVVGRE8wbEJRMFFzVVVGQlVTeERRVUZETEVkQlFWYzdVVUZEYkVJc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTTNSQ3hEUVVGRE8wbEJSVVFzVTBGQlV6dFJRVU5RTEU5QlFVOHNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVU01UWl4RFFVRkRPMGxCUTBRc1ZVRkJWVHRSUVVOU0xFOUJRVThzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRKUVVNdlFpeERRVUZETzBsQlJVUXNkVU5CUVhWRE8wbEJRM1pETEZOQlFWTXNRMEZCUXl4TFFVRmpPMUZCUTNSQ0xFbEJRVWtzU1VGQlNTeERRVUZETEU5QlFVOHNTVUZCU1N4RFFVRkRPMWxCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU03VVVGRmFFTXNTVUZCU1N4SlFVRkpMRU5CUVVNc2NVSkJRWEZDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJSVHRaUVVNdlF5eEpRVUZKTEVOQlFVTXNZMEZCWXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVONFFpeE5RVUZOTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRE8xbEJRemxDTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVOV0xFOUJRVThzUTBGQlF5eEhRVUZITEVkQlFVY3NSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3WjBKQlEzWkNMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1JVRkJSU3cwUWtGQk5FSTdiMEpCUXpGRkxFbEJRVWtzUTBGQlF5eGpRVUZqTEVsQlFVa3NVVUZCVVN4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdhVUpCUTNaRU8yRkJRMFk3V1VGRlJDeG5Ra0ZCWjBJN1dVRkRhRUlzU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU4wUWl4TlFVRk5MR0ZCUVdFc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXp0WlFVTXhReXhKUVVGSkxHRkJRV0VzU1VGQlNTeERRVUZETEVWQlFVVXNSVUZCUXl4MVJrRkJkVVk3WjBKQlF6bEhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eFZRVUZWTEVOQlFVTXNTVUZCU1N4aFFVRmhMRU5CUVVNc1EwRkJRenRoUVVOMlF6dFpRVVZFTEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF6dG5Ra0ZEY2tJc1NVRkJTU3hEUVVGRExHTkJRV01zU1VGQlNTeFJRVUZSTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF6dFpRVVY0UkN4SlFVRkpMRU5CUVVNc2NVSkJRWEZDTEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJRenRUUVVNMVF6dFJRVVZFTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eGpRVUZqTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEdOQlFXTXNRMEZCUXl4RFFVRkRPMGxCUXpWRkxFTkJRVU03U1VGRlJDd3lSRUZCTWtRN1NVRkRNMFFzVlVGQlZTeERRVUZETEV0QlFXVTdVVUZEZUVJc1NVRkJTU3hOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEyWXNTVUZCU1N4SlFVRkpMRU5CUVVNc1UwRkJVeXhGUVVGRkxFbEJRVWtzU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlR0WlFVTndReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETEVWQlFVVTdaMEpCUTI1RExFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUXpsQ08yRkJRVTA3V1VGRFRDeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMmRDUVVOcVJDeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVNNVFqdFJRVU5FTEU5QlFVOHNUVUZCVFN4RFFVRkRPMGxCUTJoQ0xFTkJRVU03U1VGRlJDd3lSa0ZCTWtZN1NVRkRNMFlzWjBKQlFXZENMRU5CUVVNc1RVRkJaMElzUlVGQlJTeExRVUZqTzFGQlF5OURMRWxCUVVrc1NVRkJTU3hEUVVGRExFOUJRVThzU1VGQlNTeERRVUZETzFsQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNN1VVRkZhRU1zU1VGQlNTeExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUVVNc1RVRkJUU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXp0UlFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU40UkN4UFFVRlBMRU5CUVVNc1IwRkJSeXhIUVVGSExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMWxCUTNaQ0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNN1owSkJRelZFTEV0QlFVc3NTVUZCU1N4UlFVRlJMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0VFFVTXpRenRSUVVWRUxHZENRVUZuUWp0UlFVTm9RaXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRlRU1zVFVGQlRTeGhRVUZoTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU03VVVGRE1VTXNTVUZCU1N4aFFVRmhMRWxCUVVrc1EwRkJRenRaUVVOd1FpeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1ZVRkJWU3hEUVVGRExFbEJRVWtzWVVGQllTeERRVUZETEVOQlFVTTdVVUZEZUVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRPMWxCUTNKQ0xFdEJRVXNzU1VGQlNTeFJRVUZSTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVVV4UXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzUzBGQlN5eERRVUZETEVOQlFVTTdTVUZEYUVRc1EwRkJRenRKUVVWRUxFdEJRVXM3VVVGRFNDeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRM0JDTEVOQlFVTTdTVUZEUkN4UlFVRlJMRU5CUVVNc1MwRkJZenRSUVVOeVFpeFBRVUZQTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUTNaRExFTkJRVU03U1VGRFJDeEpRVUZKTEU5QlFVODdVVUZEVkN4UFFVRlBMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJRenRKUVVNNVF5eERRVUZETzBsQlEwUXNTVUZCU1N4UlFVRlJPMUZCUTFZc1QwRkJUeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU03U1VGREwwTXNRMEZCUXp0SlFVTkVMRWxCUVVrc1QwRkJUenRSUVVOVUxFOUJRVThzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRGJFTXNRMEZCUXp0SlFVTkVMRWxCUVVrc1VVRkJVVHRSUVVOV0xFOUJRVThzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRGJrTXNRMEZCUXp0SlFVVkVMSE5IUVVGelJ6dEpRVU4wUnl3d1EwRkJNRU03U1VGRE1VTXNVVUZCVVN4RFFVRkRMRXRCUVdFc1JVRkJSU3hMUVVGTExFZEJRVWNzU1VGQlNUdFJRVU5zUXl4SlFVRkpMRU5CUVVNc1lVRkJZU3hEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETzFGQlJYSkVMRWxCUVVrc1MwRkJTeXhKUVVGSkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NRMEZCUXp0WlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGVrTXNTMEZCU3l4SFFVRkhMRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEdGQlFXRTdVVUZEYUVRc1NVRkJTU3hWUVVGVkxFZEJRVWNzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTTVRaXhOUVVGTkxFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRPMUZCUld4RExFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFZEJRVWNzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRTlCUVU4c1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU55UkN4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4WlFVRlpPMWxCUXpsRUxFbEJRVWtzVlVGQlZTeEpRVUZKTEVOQlFVTXNSVUZCUlR0blFrRkRia0lzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4VlFVRlZMRWxCUVVrc1ZVRkJWU3hEUVVGRExFZEJRVWNzVlVGQlZTeERRVUZETEVOQlFVTTdaMEpCUXk5RExGVkJRVlVzUjBGQlJ5eERRVUZETEVOQlFVTTdZVUZEYUVJN2FVSkJRVTBzU1VGQlNTeERRVUZETEV0QlFVc3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzYzBOQlFYTkRPMmRDUVVVelJTeFRRVUZUTzFsQlJWZ3NTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVTdaMEpCUTNoRExFMUJRVTBzUTBGQlF5eEhRVUZITEZGQlFWRXNRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzJkQ1FVTjZReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVTdiMEpCUTFZc1MwRkJTeXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03YjBKQlEzcENMRWxCUVVrc1MwRkJTeXhKUVVGSkxFbEJRVWtzUTBGQlF5eFBRVUZQTzNkQ1FVRkZMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU03YjBKQlEzSkRMRTlCUVU4c1MwRkJTeXhEUVVGRE8ybENRVU5rTzJGQlEwWTdVMEZEUmp0UlFVTkVMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU03U1VGRFdpeERRVUZETzBsQlJVUXNORVJCUVRSRU8wbEJRelZFTEZGQlFWRXNRMEZCUXl4TFFVRmhMRVZCUVVVc1MwRkJTeXhIUVVGSExFbEJRVWs3VVVGRGJFTXNTVUZCU1N4TFFVRkxMRWxCUVVrc1EwRkJRenRaUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZETVVJc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eExRVUZMTEVWQlFVVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVVnlSQ3hMUVVGTExFZEJRVWNzUzBGQlN5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eGhRVUZoTzFGQlJTOUVMRTFCUVUwc1ZVRkJWU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRelZETEVsQlFVa3NZVUZCWVN4SFFVRkhMRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVVjJReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEZWQlFWVXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzFsQlEzQkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4N1dVRkRla1FzU1VGQlNTeGhRVUZoTEVsQlFVa3NRMEZCUXl4RlFVRkZPMmRDUVVOMFFpeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1ZVRkJWU3hEUVVGRExFbEJRVWtzWVVGQllTeERRVUZETEVOQlFVTTdaMEpCUTNSRExHRkJRV0VzUjBGQlJ5eERRVUZETEVOQlFVTTdZVUZEYmtJN1dVRkRSQ3hMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVWQlFVVXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSVHRuUWtGRGVFTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1VVRkJVU3hEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETEV0QlFVc3NTVUZCU1N4RFFVRkRMRU5CUVVNN1owSkJRekZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNN2IwSkJRMUlzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzJGQlF6TkNPMU5CUTBZN1VVRkRSQ3hQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlExb3NRMEZCUXpzN1FVRTFjMEpOTEc5Q1FVRlhMRWRCUVVjc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF6dEpRVU5zUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpsRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZET1VNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU01UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPME5CUVVNc1EwRkJReXhEUVVGRE8wRkJSVFZETEc5Q1FVRlhMRWRCUVVjc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF6dEpRVU5zUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGREwwTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpsRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZET1VNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU01UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpsRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZET1VNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU01UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1EwRkJReXhEUVVGRExFTkJRVU03UVVGRk5VTXNiVUpCUVZVc1IwRkJSeXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETzBsQlEycERMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU12UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpsRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZET1VNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU01UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenREUVVGRExFTkJRVU1zUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbVY0Y0c5eWRDQmtaV1poZFd4MElHTnNZWE56SUVKcGRFRnljbUY1SUh0Y2JpQWdjM1JoZEdsaklGOXZia0pwZEVOdmRXNTBJRDBnU1c1ME9FRnljbUY1TG1aeWIyMG9XMXh1SUNBZ0lEQXNJREVzSURFc0lESXNJREVzSURJc0lESXNJRE1zSURFc0lESXNJRElzSURNc0lESXNJRE1zSURNc0lEUXNYRzRnSUNBZ01Td2dNaXdnTWl3Z015d2dNaXdnTXl3Z015d2dOQ3dnTWl3Z015d2dNeXdnTkN3Z015d2dOQ3dnTkN3Z05TeGNiaUFnSUNBeExDQXlMQ0F5TENBekxDQXlMQ0F6TENBekxDQTBMQ0F5TENBekxDQXpMQ0EwTENBekxDQTBMQ0EwTENBMUxGeHVJQ0FnSURJc0lETXNJRE1zSURRc0lETXNJRFFzSURRc0lEVXNJRE1zSURRc0lEUXNJRFVzSURRc0lEVXNJRFVzSURZc1hHNGdJQ0FnTVN3Z01pd2dNaXdnTXl3Z01pd2dNeXdnTXl3Z05Dd2dNaXdnTXl3Z015d2dOQ3dnTXl3Z05Dd2dOQ3dnTlN4Y2JpQWdJQ0F5TENBekxDQXpMQ0EwTENBekxDQTBMQ0EwTENBMUxDQXpMQ0EwTENBMExDQTFMQ0EwTENBMUxDQTFMQ0EyTEZ4dUlDQWdJRElzSURNc0lETXNJRFFzSURNc0lEUXNJRFFzSURVc0lETXNJRFFzSURRc0lEVXNJRFFzSURVc0lEVXNJRFlzWEc0Z0lDQWdNeXdnTkN3Z05Dd2dOU3dnTkN3Z05Td2dOU3dnTml3Z05Dd2dOU3dnTlN3Z05pd2dOU3dnTml3Z05pd2dOeXhjYmlBZ0lDQXhMQ0F5TENBeUxDQXpMQ0F5TENBekxDQXpMQ0EwTENBeUxDQXpMQ0F6TENBMExDQXpMQ0EwTENBMExDQTFMRnh1SUNBZ0lESXNJRE1zSURNc0lEUXNJRE1zSURRc0lEUXNJRFVzSURNc0lEUXNJRFFzSURVc0lEUXNJRFVzSURVc0lEWXNYRzRnSUNBZ01pd2dNeXdnTXl3Z05Dd2dNeXdnTkN3Z05Dd2dOU3dnTXl3Z05Dd2dOQ3dnTlN3Z05Dd2dOU3dnTlN3Z05peGNiaUFnSUNBekxDQTBMQ0EwTENBMUxDQTBMQ0ExTENBMUxDQTJMQ0EwTENBMUxDQTFMQ0EyTENBMUxDQTJMQ0EyTENBM0xGeHVJQ0FnSURJc0lETXNJRE1zSURRc0lETXNJRFFzSURRc0lEVXNJRE1zSURRc0lEUXNJRFVzSURRc0lEVXNJRFVzSURZc1hHNGdJQ0FnTXl3Z05Dd2dOQ3dnTlN3Z05Dd2dOU3dnTlN3Z05pd2dOQ3dnTlN3Z05Td2dOaXdnTlN3Z05pd2dOaXdnTnl4Y2JpQWdJQ0F6TENBMExDQTBMQ0ExTENBMExDQTFMQ0ExTENBMkxDQTBMQ0ExTENBMUxDQTJMQ0ExTENBMkxDQTJMQ0EzTEZ4dUlDQWdJRFFzSURVc0lEVXNJRFlzSURVc0lEWXNJRFlzSURjc0lEVXNJRFlzSURZc0lEY3NJRFlzSURjc0lEY3NJRGhkS1R0Y2JseHVJQ0J6ZEdGMGFXTWdYMlpwY25OMFQyNUNhWFFnUFNCSmJuUTRRWEp5WVhrdVpuSnZiU2hiWEc0Z0lDQWdMVEVzSURBc0lERXNJREFzSURJc0lEQXNJREVzSURBc0lETXNJREFzSURFc0lEQXNJRElzSURBc0lERXNJREFzWEc0Z0lDQWdOQ3dnTUN3Z01Td2dNQ3dnTWl3Z01Dd2dNU3dnTUN3Z015d2dNQ3dnTVN3Z01Dd2dNaXdnTUN3Z01Td2dNQ3hjYmlBZ0lDQTFMQ0F3TENBeExDQXdMQ0F5TENBd0xDQXhMQ0F3TENBekxDQXdMQ0F4TENBd0xDQXlMQ0F3TENBeExDQXdMRnh1SUNBZ0lEUXNJREFzSURFc0lEQXNJRElzSURBc0lERXNJREFzSURNc0lEQXNJREVzSURBc0lESXNJREFzSURFc0lEQXNYRzRnSUNBZ05pd2dNQ3dnTVN3Z01Dd2dNaXdnTUN3Z01Td2dNQ3dnTXl3Z01Dd2dNU3dnTUN3Z01pd2dNQ3dnTVN3Z01DeGNiaUFnSUNBMExDQXdMQ0F4TENBd0xDQXlMQ0F3TENBeExDQXdMQ0F6TENBd0xDQXhMQ0F3TENBeUxDQXdMQ0F4TENBd0xGeHVJQ0FnSURVc0lEQXNJREVzSURBc0lESXNJREFzSURFc0lEQXNJRE1zSURBc0lERXNJREFzSURJc0lEQXNJREVzSURBc1hHNGdJQ0FnTkN3Z01Dd2dNU3dnTUN3Z01pd2dNQ3dnTVN3Z01Dd2dNeXdnTUN3Z01Td2dNQ3dnTWl3Z01Dd2dNU3dnTUN4Y2JpQWdJQ0EzTENBd0xDQXhMQ0F3TENBeUxDQXdMQ0F4TENBd0xDQXpMQ0F3TENBeExDQXdMQ0F5TENBd0xDQXhMQ0F3TEZ4dUlDQWdJRFFzSURBc0lERXNJREFzSURJc0lEQXNJREVzSURBc0lETXNJREFzSURFc0lEQXNJRElzSURBc0lERXNJREFzWEc0Z0lDQWdOU3dnTUN3Z01Td2dNQ3dnTWl3Z01Dd2dNU3dnTUN3Z015d2dNQ3dnTVN3Z01Dd2dNaXdnTUN3Z01Td2dNQ3hjYmlBZ0lDQTBMQ0F3TENBeExDQXdMQ0F5TENBd0xDQXhMQ0F3TENBekxDQXdMQ0F4TENBd0xDQXlMQ0F3TENBeExDQXdMRnh1SUNBZ0lEWXNJREFzSURFc0lEQXNJRElzSURBc0lERXNJREFzSURNc0lEQXNJREVzSURBc0lESXNJREFzSURFc0lEQXNYRzRnSUNBZ05Dd2dNQ3dnTVN3Z01Dd2dNaXdnTUN3Z01Td2dNQ3dnTXl3Z01Dd2dNU3dnTUN3Z01pd2dNQ3dnTVN3Z01DeGNiaUFnSUNBMUxDQXdMQ0F4TENBd0xDQXlMQ0F3TENBeExDQXdMQ0F6TENBd0xDQXhMQ0F3TENBeUxDQXdMQ0F4TENBd0xGeHVJQ0FnSURRc0lEQXNJREVzSURBc0lESXNJREFzSURFc0lEQXNJRE1zSURBc0lERXNJREFzSURJc0lEQXNJREVzSURCZEtUdGNibHh1SUNCemRHRjBhV01nWDJ4aGMzUlBia0pwZENBOUlFbHVkRGhCY25KaGVTNW1jbTl0S0Z0Y2JpQWdJQ0F0TVN3Z01Dd2dNU3dnTVN3Z01pd2dNaXdnTWl3Z01pd2dNeXdnTXl3Z015d2dNeXdnTXl3Z015d2dNeXdnTXl4Y2JpQWdJQ0EwTENBMExDQTBMQ0EwTENBMExDQTBMQ0EwTENBMExDQTBMQ0EwTENBMExDQTBMQ0EwTENBMExDQTBMQ0EwTEZ4dUlDQWdJRFVzSURVc0lEVXNJRFVzSURVc0lEVXNJRFVzSURVc0lEVXNJRFVzSURVc0lEVXNJRFVzSURVc0lEVXNJRFVzWEc0Z0lDQWdOU3dnTlN3Z05Td2dOU3dnTlN3Z05Td2dOU3dnTlN3Z05Td2dOU3dnTlN3Z05Td2dOU3dnTlN3Z05Td2dOU3hjYmlBZ0lDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMRnh1SUNBZ0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNYRzRnSUNBZ05pd2dOaXdnTml3Z05pd2dOaXdnTml3Z05pd2dOaXdnTml3Z05pd2dOaXdnTml3Z05pd2dOaXdnTml3Z05peGNiaUFnSUNBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxGeHVJQ0FnSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc1hHNGdJQ0FnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl4Y2JpQWdJQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTEZ4dUlDQWdJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzWEc0Z0lDQWdOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXhjYmlBZ0lDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMRnh1SUNBZ0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NYRzRnSUNBZ055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z04xMHBPMXh1WEc0Z0lIQnlhWFpoZEdVZ1gyUmhkR0U2SUZWcGJuUXpNa0Z5Y21GNU8xeHVJQ0J3Y21sMllYUmxJRjlzWlc1bmRHZ2dQU0F3TzF4dUlDQndjbWwyWVhSbElGOTJaWEp6YVc5dUlEMGdNRHRjYmlBZ2NISnBkbUYwWlNCZmRYQmtZWFJsVEdWMlpXd2dQU0F3TzF4dUlDQndjbWwyWVhSbElGOXpaV3hsWTNSbFpFTnZkVzUwSUQwZ01EdGNiaUFnY0hKcGRtRjBaU0JmYzJWc1pXTjBaV1JEYjNWdWRGWmxjbk5wYjI0Z1BTQXRNVHRjYmlBZ2NISnBkbUYwWlNCZmMyVnNaV04wWldSSmJtUmxlR1Z6Vm1WeWMybHZiaUE5SUMweE8xeHVJQ0J3Y21sMllYUmxJRjkyWlhKemFXOXVaV1JPWVcxbElEMGdKeWM3WEc0Z0lIQnlhWFpoZEdVZ1gzWmxjbk5wYjI1bFpFNWhiV1ZXWlhKemFXOXVJRDBnTFRFN1hHNGdJRk5JVWtsT1MxOVVTRkpGVTBoUFRFUWdQU0F3ZURFd01EdGNibHh1SUNCamIyNXpkSEoxWTNSdmNpaGtZWFJoT2lCVmFXNTBNekpCY25KaGVTd2diR1Z1WjNSb09pQnVkVzFpWlhJcFhHNGdJR052Ym5OMGNuVmpkRzl5S0d4bGJtZDBhRG9nYm5WdFltVnlMQ0JrWldaaGRXeDBWbUZzZFdVL09pQmliMjlzWldGdUtWeHVJQ0JqYjI1emRISjFZM1J2Y2loaGNtYzZJRzUxYldKbGNpQjhJRlZwYm5Rek1rRnljbUY1TENCa1pXWmhkV3gwVm1Gc2RXVTZJR0p2YjJ4bFlXNGdmQ0J1ZFcxaVpYSWdQU0JtWVd4elpTa2dlMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdZWEpuSUQwOVBTQW5iblZ0WW1WeUp5a2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ2JHVnVaM1JvSUQwZ1lYSm5PMXh1SUNBZ0lDQWdZMjl1YzNRZ1luVm1aaUE5SUVKcGRFRnljbUY1TGw5amNtVmhkR1ZDZFdabVpYSW9iR1Z1WjNSb0tUdGNiaUFnSUNBZ0lHbG1JQ2hrWldaaGRXeDBWbUZzZFdVcFhHNGdJQ0FnSUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dZblZtWmk1c1pXNW5kR2c3SUdrckt5bGNiaUFnSUNBZ0lDQWdJQ0JpZFdabVcybGRJRDBnTFRFN1hHNGdJQ0FnSUNCMGFHbHpMbDlrWVhSaElEMGdZblZtWmp0Y2JpQWdJQ0FnSUhSb2FYTXVYMnhsYm1kMGFDQTlJR3hsYm1kMGFEdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHRnlaeUJwYm5OMFlXNWpaVzltSUZWcGJuUXpNa0Z5Y21GNUtTQjdYRzRnSUNBZ0lDQjBhR2x6TGw5a1lYUmhJRDBnWVhKbklHRnpJRlZwYm5Rek1rRnljbUY1TzF4dUlDQWdJQ0FnZEdocGN5NWZiR1Z1WjNSb0lEMGdaR1ZtWVhWc2RGWmhiSFZsSUdGeklHNTFiV0psY2p0Y2JpQWdJQ0I5SUdWc2MyVmNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblNXNTJZV3hwWkNCamIyNXpkSEoxWTNSdmNpY3BPMXh1SUNCOVhHNWNibHh1SUNCblpYUlNZWGRFWVhSaEtDa2dlM0psZEhWeWJpQjBhR2x6TGw5a1lYUmhPMzFjYmx4dUlDQmhjM04xY21WSGIyVjZLRzUxYlRvZ2JuVnRZbVZ5TENCaGNtZE9ZVzFsT2lCVGRISnBibWNwT2lCMmIybGtJSHRjYmlBZ0lDQnBaaUFvYm5WdElEd2dNQ2tnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0FrZTJGeVowNWhiV1Y5SUhOb2IzVnNaQ0JpWlNCbmNtVmhkR1Z5SUhSb1lXNGdlbVZ5YjJBcE8xeHVJQ0I5WEc1Y2JpQWdZWE56ZFhKbFNXNVNZVzVuWlNoMllXeDFaVG9nYm5WdFltVnlMQ0J0YVc0NklHNTFiV0psY2l3Z2JXRjRPaUJ1ZFcxaVpYSXNJR0Z5WjA1aGJXVTZJRk4wY21sdVp5azZJSFp2YVdRZ2UxeHVJQ0FnSUdsbUlDZ29kbUZzZFdVZ1BDQnRhVzRwSUh4OElDaDJZV3gxWlNBK0lHMWhlQ2twSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnUVhKbmRXMWxiblFnSkh0aGNtZE9ZVzFsZlNBb0pIdDJZV3gxWlgwcElHOTFkQ0J2WmlCeVlXNW5aU0FvSkh0dGFXNTlMQ0FrZTIxaGVIMHBZQ2s3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnWTI5d2VTaHpjbU02SUZWcGJuUXpNa0Z5Y21GNUxDQmtjM1E2SUZWcGJuUXpNa0Z5Y21GNUxDQmpiM1Z1ZERvZ2JuVnRZbVZ5S1RvZ2RtOXBaQ0I3WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JqYjNWdWREc2dhU3NyS1NCN1hHNGdJQ0FnSUNCa2MzUmJhVjBnUFNCemNtTmJhVjA3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnWTI5d2VVWnliMjBvYjNSb1pYSTZJRUpwZEVGeWNtRjVLVG9nZG05cFpDQjdYRzRnSUNBZ2FXWWdLSFJvYVhNdVgyeGxibWQwYUNBaFBTQnZkR2hsY2k1ZmJHVnVaM1JvS1NCN1hHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUV4bGJtZDBhSE1nWkdsbVptVnlJQ2drZTNSb2FYTXVYMnhsYm1kMGFIMGdJVDBnSkh0dmRHaGxjaTVmYkdWdVozUm9mU2xnS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdkR2hwY3k1amIzQjVLRzkwYUdWeUxsOWtZWFJoTENCMGFHbHpMbDlrWVhSaExDQjBhR2x6TG14bGJtZDBhRWx1U1c1MGN5azdYRzRnSUNBZ2RHaHBjeTVmZG1WeWMybHZiaXNyTzF4dUlDQjlYRzVjYmlBZ1oyVjBJR3hsYm1kMGFDZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVmYkdWdVozUm9PMXh1SUNCOVhHNWNiaUFnWjJWMElHSjFabVpsY2lncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NWZaR0YwWVR0Y2JpQWdmVnh1WEc0Z0lITmxkQ0JpZFdabVpYSW9aR0YwWVRvZ1ZXbHVkRE15UVhKeVlYa3BJSHRjYmlBZ0lDQjBhR2x6TGw5a1lYUmhJRDBnWkdGMFlUdGNiaUFnSUNCMGFHbHpMbDkyWlhKemFXOXVLeXM3WEc0Z0lIMWNibHh1SUNCblpYUWdkbVZ5YzJsdmJpZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVmZG1WeWMybHZianRjYmlBZ2ZWeHVYRzRnSUhObGRDQjJaWEp6YVc5dUtIWmhiSFZsT2lCdWRXMWlaWElwSUh0Y2JpQWdJQ0IwYUdsekxsOTJaWEp6YVc5dUlEMGdkbUZzZFdVN1hHNGdJSDFjYmx4dUlDQnBibU55WlcxbGJuUldaWEp6YVc5dUtHNXZkR2xtZVNBOUlIUnlkV1VwT2lCMmIybGtJSHRjYmlBZ0lDQjBhR2x6TGw5MlpYSnphVzl1S3lzN1hHNGdJSDFjYmx4dUlDQm5aWFFnYkdWdVozUm9TVzVKYm5SektDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCTllYUm9MbVpzYjI5eUtDaDBhR2x6TGw5c1pXNW5kR2dnS3lBd2VERm1LU0F2SURCNE1qQXBPMXh1SUNCOVhHNWNiaUFnWjJWMElIWmxjbk5wYjI1bFpFNWhiV1VvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVgzWmxjbk5wYjI0Z1BUMGdkR2hwY3k1ZmRtVnljMmx2Ym1Wa1RtRnRaVlpsY25OcGIyNGdQeUIwYUdsekxsOTJaWEp6YVc5dVpXUk9ZVzFsSURvZ0p5YzdYRzRnSUgxY2JseHVJQ0J6WlhRZ2RtVnljMmx2Ym1Wa1RtRnRaU2h1WVcxbE9pQnpkSEpwYm1jcElIdGNiaUFnSUNCMGFHbHpMbDkyWlhKemFXOXVaV1JPWVcxbElEMGdibUZ0WlR0Y2JpQWdJQ0IwYUdsekxsOTJaWEp6YVc5dVpXUk9ZVzFsVm1WeWMybHZiaUE5SUhSb2FYTXVYM1psY25OcGIyNDdYRzRnSUgxY2JseHVJQ0JuWlhRZ2MyVnNaaWdwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3p0Y2JpQWdmVnh1WEc0Z0lITmxkRXhsYm1kMGFDaDJZV3gxWlRvZ2JuVnRZbVZ5S1RvZ2RtOXBaQ0I3WEc0Z0lDQWdhV1lnS0haaGJIVmxJRHdnTUNsY2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduYzJodmRXeGtJR0psSUQ0OUlEQW5LVHRjYmx4dUlDQWdJR2xtSUNoMllXeDFaU0E5UFNCMGFHbHpMbDlzWlc1bmRHZ3BJSEpsZEhWeWJqdGNiaUFnSUNCamIyNXpkQ0J1U1c1MGMwNWxaV1JsWkNBOUlFMWhkR2d1Wm14dmIzSW9LSFpoYkhWbElDc2dNSGd4WmlrZ0x5QXdlREl3S1R0Y2JpQWdJQ0JwWmlBb0tHNUpiblJ6VG1WbFpHVmtJRDRnZEdocGN5NWZaR0YwWVM1c1pXNW5kR2dwSUh4OElDZ29ia2x1ZEhOT1pXVmtaV1FnS3lCMGFHbHpMbE5JVWtsT1MxOVVTRkpGVTBoUFRFUXBJRHdnZEdocGN5NWZaR0YwWVM1c1pXNW5kR2dwS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0J1WlhkRVlYUmhJRDBnYm1WM0lGVnBiblF6TWtGeWNtRjVLRzVKYm5SelRtVmxaR1ZrS1R0Y2JpQWdJQ0FnSUhSb2FYTXVZMjl3ZVNoMGFHbHpMbDlrWVhSaExDQnVaWGRFWVhSaExDQW9ia2x1ZEhOT1pXVmtaV1FnUGlCMGFHbHpMbDlrWVhSaExteGxibWQwYUNrZ1B5QjBhR2x6TGw5a1lYUmhMbXhsYm1kMGFDQTZJRzVKYm5SelRtVmxaR1ZrS1R0Y2JpQWdJQ0FnSUhSb2FYTXVYMlJoZEdFZ1BTQnVaWGRFWVhSaE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaDJZV3gxWlNBK0lIUm9hWE11WDJ4bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnYVdZZ0tIUm9hWE11WDJ4bGJtZDBhQ0FsSURCNE1qQWdQaUF3S1Z4dUlDQWdJQ0FnSUNCMGFHbHpMbDlrWVhSaFczUm9hWE11YkdWdVozUm9TVzVKYm5SeklDMGdNVjBnSmowZ0tERWdQRHdnS0NoMGFHbHpMbDlzWlc1bmRHZ2dKU0F3ZURJd0tTQW1JREI0TVdZcEtTQXRJREU3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVYMlJoZEdFdVptbHNiQ2d3TENCMGFHbHpMbXhsYm1kMGFFbHVTVzUwY3l3Z2JrbHVkSE5PWldWa1pXUXBPMXh1SUNBZ0lIMWNiaUFnSUNCMGFHbHpMbDlzWlc1bmRHZ2dQU0IyWVd4MVpUdGNiaUFnSUNCMGFHbHpMbDkyWlhKemFXOXVLeXM3WEc0Z0lIMWNibHh1SUNCemRHRjBhV01nWm5KdmJVRnVaQ2h6WlhReE9pQkNhWFJCY25KaGVTd2djMlYwTWpvZ1FtbDBRWEp5WVhrcE9pQkNhWFJCY25KaGVTQjdYRzRnSUNBZ2FXWWdLSE5sZERFdVgyeGxibWQwYUNBaFBTQnpaWFF5TGw5c1pXNW5kR2dwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRXhsYm1kMGFITWdaR2xtWm1WeUlDZ2tlM05sZERFdVgyeGxibWQwYUgwZ0lUMGdKSHR6WlhReUxsOXNaVzVuZEdoOUtXQXBPMXh1WEc0Z0lDQWdZMjl1YzNRZ2RHVnRjQ0E5SUc1bGR5QkNhWFJCY25KaGVTaHpaWFF4TGw5c1pXNW5kR2dwTzF4dUlDQWdJSFJsYlhBdVgyeGxibWQwYUNBOUlITmxkREV1WDJ4bGJtZDBhRHRjYmlBZ0lDQjBaVzF3TGw5a1lYUmhJRDBnUW1sMFFYSnlZWGt1WDJOeVpXRjBaVUoxWm1abGNpaDBaVzF3TGw5c1pXNW5kR2dwTzF4dUlDQWdJSFJsYlhBdVgzWmxjbk5wYjI0Z1BTQXdPMXh1WEc0Z0lDQWdZMjl1YzNRZ2JHVnVJRDBnYzJWME1TNXNaVzVuZEdoSmJrbHVkSE03WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JzWlc0N0lHa3JLeWxjYmlBZ0lDQWdJSFJsYlhBdVgyUmhkR0ZiYVYwZ1BTQnpaWFF4TGw5a1lYUmhXMmxkSUNZZ2MyVjBNaTVmWkdGMFlWdHBYVHRjYmx4dUlDQWdJSEpsZEhWeWJpQjBaVzF3TzF4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCemRHRjBhV01nWDJOeVpXRjBaVUoxWm1abGNpaHNaVzVuZEdnNklHNTFiV0psY2lrNklGVnBiblF6TWtGeWNtRjVJSHRjYmlBZ0lDQnlaWFIxY200Z2JtVjNJRlZwYm5Rek1rRnljbUY1S0UxaGRHZ3VabXh2YjNJb0tHeGxibWQwYUNBcklEQjRNV1lwSUM4Z01IZ3lNQ2twTzF4dUlDQjlYRzVjYmlBZ2MzUmhkR2xqSUdaeWIyMVdZV3gxWlhNb2RtRnNkV1Z6T2lCQmNuSmhlVHhpYjI5c1pXRnVQaWs2SUVKcGRFRnljbUY1SUh0Y2JpQWdJQ0JqYjI1emRDQjBaVzF3SUQwZ2JtVjNJRUpwZEVGeWNtRjVLSFpoYkhWbGN5NXNaVzVuZEdncE8xeHVJQ0FnSUhSbGJYQXVYM1psY25OcGIyNGdQU0F3TzF4dVhHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCMFpXMXdMbDlzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2FXWWdLSFpoYkhWbGMxdHBYU2xjYmlBZ0lDQWdJQ0FnZEdWdGNDNWZaR0YwWVZ0TllYUm9MbVpzYjI5eUtHa2dMeUF3ZURJd0tWMGdmRDBnTVNBOFBDQW9LR2tnSlNBd2VESXdLU0FtSURCNE1XWXBPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnZEdWdGNEdGNiaUFnZlZ4dVhHNGdJQzh2THlCRGIyNXpkSEoxWTNSeklHRWdXMEpwZEZObGRGMGdiMllnYkdWdVozUm9JRnRqYjNWdWRGMHNJSGRvWlhKbElHbGtlQzEwYUNCaWFYUWdhWE1nWkdWMFpYSnRhVzVsWkNCaWVTQmhJR05oYkd3Z2RHOGdXMlpzWVdkZElDaHBaSGdwTGx4dUlDQnpkR0YwYVdNZ1puSnZiVk5sY1NoamIzVnVkRG9nYm5WdFltVnlMQ0JtYkdGbk9pQkdkVzVqZEdsdmJpazZJRUpwZEVGeWNtRjVJSHRjYmlBZ0lDQmpiMjV6ZENCMFpXMXdJRDBnYm1WM0lFSnBkRUZ5Y21GNUtHTnZkVzUwS1R0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUdOdmRXNTBPeUFySzJrcFhHNGdJQ0FnSUNCMFpXMXdMbk5sZEVKcGRDaHBMQ0JtYkdGbktHa3BLVHRjYmx4dUlDQWdJSFJsYlhBdVgzWmxjbk5wYjI0Z1BTQXdPMXh1SUNBZ0lISmxkSFZ5YmlCMFpXMXdPMXh1SUNCOVhHNWNiaUFnTHk4dklFTnZibk4wY25WamRITWdZU0JiUW1sMFUyVjBYU0JtY205dElHRWdjM1J5YVc1bklGdHpYU0JqYjI1MFlXbHVhVzVuSUNjd0p5QnZjaUFuTVNjdVhHNGdJSE4wWVhScFl5Qm1jbTl0VTNSeWFXNW5LSE02SUhOMGNtbHVaeWs2SUVKcGRFRnljbUY1SUh0Y2JpQWdJQ0J5WlhSMWNtNGdRbWwwUVhKeVlYa3Vabkp2YlZObGNTaHpMbXhsYm1kMGFDd2dLR2s2SUc1MWJXSmxjaWtnUFQ0Z2N5NWphR0Z5UVhRb2FTa2dQVDBnSnpFbktUdGNiaUFnZlZ4dVhHNGdJQzh2THlCRGIyNXpkSEoxWTNSeklHRWdXMEpwZEZObGRGMHNJR0poYzJWa0lHOXVJR3hsYm1kMGFDQmJYMnhsYm1kMGFGMGdZVzVrSUdKNWRHVWdZWEp5WVhrZ1cxOWtZWFJoWFM1Y2JpQWdjM1JoZEdsaklHWnliMjFWYVc1ME16SkJjbkpoZVNoZmJHVnVaM1JvT2lCdWRXMWlaWElzSUY5a1lYUmhPaUJWYVc1ME16SkJjbkpoZVNrNklFSnBkRUZ5Y21GNUlIdGNiaUFnSUNCamIyNXpkQ0IwWlcxd0lEMGdibVYzSUVKcGRFRnljbUY1S0Y5c1pXNW5kR2dwTzF4dUlDQWdJSFJsYlhBdVgyUmhkR0VnUFNCZlpHRjBZVHRjYmlBZ0lDQnlaWFIxY200Z2RHVnRjRHRjYmlBZ2ZWeHVYRzRnSUM4dkx5QkVaWE5sY21saGJHbDZaWE1nWVNCYlFtbDBVMlYwWFNCbWNtOXRJRnRpZVhSbGMxMHVYRzRnSUhOMFlYUnBZeUJtY205dFFubDBaWE1vWW5sMFpYTTZJRlZwYm5RNFFYSnlZWGtwT2lCQ2FYUkJjbkpoZVNCN1hHNGdJQ0FnWTI5dWMzUWdiR1Z1SUQwZ1lubDBaWE11YkdWdVozUm9PMXh1SUNBZ0lHTnZibk4wSUhSbGJYQWdQU0J1WlhjZ1FtbDBRWEp5WVhrb2JHVnVJQ29nT0NrN1hHNGdJQ0FnZEdWdGNDNWZaR0YwWVNBOUlHNWxkeUJWYVc1ME16SkJjbkpoZVNoTllYUm9MbVpzYjI5eUtDaHNaVzRnS3lBektTQXZJRFFwS1R0Y2JpQWdJQ0IwWlcxd0xsOXNaVzVuZEdnZ1BTQnNaVzRnS2lBNE8xeHVJQ0FnSUd4bGRDQnVkVzB4SUQwZ01Ec2diR1YwSUc1MWJUSWdQU0F3TzF4dVhHNGdJQ0FnZDJocGJHVWdLQ2hzWlc0Z0xTQnVkVzB5S1NBK1BTQTBLU0I3WEc0Z0lDQWdJQ0IwWlcxd0xsOWtZWFJoVzI1MWJURXJLMTBnUFNBb1hHNGdJQ0FnSUNBZ0lDZ29ZbmwwWlhOYmJuVnRNbDBnSmlBd2VHWm1LU0I4WEc0Z0lDQWdJQ0FnSUNnb1lubDBaWE5iYm5WdE1pQXJJREZkSUNZZ01IaG1aaWtnUER3Z09Da3BJSHhjYmlBZ0lDQWdJQ0FnS0NoaWVYUmxjMXR1ZFcweUlDc2dNbDBnSmlBd2VHWm1LU0E4UENBd2VERXdLU2tnZkZ4dUlDQWdJQ0FnSUNBb0tHSjVkR1Z6VzI1MWJUSWdLeUF6WFNBbUlEQjRabVlwSUR3OElEQjRNVGdwTzF4dVhHNGdJQ0FnSUNCdWRXMHlJQ3M5SURRN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHeGxiaUF0SUc1MWJUSWdQVDBnTXlsY2JpQWdJQ0FnSUhSbGJYQXVYMlJoZEdGYmJuVnRNVjBnUFNBb1lubDBaWE5iYm5WdE1pQXJJREpkSUNZZ01IaG1aaWtnUER3Z01IZ3hNRHRjYmx4dUlDQWdJR2xtSUNoc1pXNGdMU0J1ZFcweUlEMDlJRElwWEc0Z0lDQWdJQ0IwWlcxd0xsOWtZWFJoVzI1MWJURmRJSHc5SUNoaWVYUmxjMXR1ZFcweUlDc2dNVjBnSmlBd2VHWm1LU0E4UENBNE8xeHVYRzRnSUNBZ2FXWWdLR3hsYmlBdElHNTFiVElnUFQwZ01TbGNiaUFnSUNBZ0lIUmxiWEF1WDJSaGRHRmJiblZ0TVYwZ2ZEMGdZbmwwWlhOYmJuVnRNbDBnSmlBd2VHWm1PMXh1WEc0Z0lDQWdkR1Z0Y0M1ZmRtVnljMmx2YmlBOUlEQTdYRzRnSUNBZ2NtVjBkWEp1SUhSbGJYQTdYRzRnSUgxY2JseHVJQ0IwYjFOMGNtbHVaeWdwT2lCemRISnBibWNnZTF4dUlDQWdJSEpsZEhWeWJpQmdKSHQwYUdsekxsOXNaVzVuZEdoOUlHSnBkSE1zSUNSN2RHaHBjeTVqYjNWdWRFSnBkSE1vZEhKMVpTbDlJSE5sZEdBN1hHNGdJSDFjYmx4dUlDQXZMeThnVUdWeVptOXliWE1nWkdWbGNDQmpiMjF3WVhKcGMyOXVJRzltSUhSM2J5QmlhWFJ6WlhSekxseHVJQ0JsY1hWaGJITW9iM1JvWlhJNklFSnBkRUZ5Y21GNUtUb2dZbTl2YkdWaGJpQjdYRzRnSUNBZ2FXWWdLSFJvYVhNZ1BUMGdiM1JvWlhJcElISmxkSFZ5YmlCMGNuVmxPMXh1SUNBZ0lHbG1JQ2h2ZEdobGNpQTlQU0J1ZFd4c0tTQnlaWFIxY200Z1ptRnNjMlU3WEc0Z0lDQWdhV1lnS0hSb2FYTXVYMnhsYm1kMGFDQWhQU0J2ZEdobGNpNWZiR1Z1WjNSb0tTQnlaWFIxY200Z1ptRnNjMlU3WEc0Z0lDQWdhV1lnS0hSb2FYTXVYMnhsYm1kMGFDQTlQU0F3S1NCeVpYUjFjbTRnZEhKMVpUdGNibHh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dkR2hwY3k1ZlpHRjBZUzVzWlc1bmRHZ2dMU0F4T3lCcEt5c3BYRzRnSUNBZ0lDQnBaaUFvZEdocGN5NWZaR0YwWVZ0cFhTQWhQU0J2ZEdobGNpNWZaR0YwWVZ0cFhTa2djbVYwZFhKdUlHWmhiSE5sTzF4dVhHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlDaDBhR2x6TGw5a1lYUmhMbXhsYm1kMGFDQXRJREVwSUNvZ09Ec2dhU0E4SUhSb2FYTXVYMnhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCcFppQW9kR2hwY3k1blpYUkNhWFFvYVNrZ0lUMGdiM1JvWlhJdVoyVjBRbWwwS0drcEtWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1ptRnNjMlU3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCMGNuVmxPMXh1SUNCOVhHNWNiaUFnTHlvcUlFTnNiMjVsY3lCaElHSnBkSE5sZEM0Z0tpOWNiaUFnWTJ4dmJtVW9LVG9nUW1sMFFYSnlZWGtnZTF4dUlDQWdJR052Ym5OMElHSnBkRUZ5Y21GNUlEMGdibVYzSUVKcGRFRnljbUY1S0RBc0lHWmhiSE5sS1R0Y2JpQWdJQ0JpYVhSQmNuSmhlUzVmWkdGMFlTQTlJRlZwYm5Rek1rRnljbUY1TG1aeWIyMG9kR2hwY3k1ZlpHRjBZU2s3SUM4dklHVm1abVZqZEdsMlpTQnNaVzVuZEdnNklDaHNaVzVuZEdoSmJrbHVkSE1wWEc0Z0lDQWdZbWwwUVhKeVlYa3VYMnhsYm1kMGFDQTlJSFJvYVhNdVgyeGxibWQwYUR0Y2JpQWdJQ0JpYVhSQmNuSmhlUzVmZG1WeWMybHZiaUE5SUhSb2FYTXVYM1psY25OcGIyNDdYRzRnSUNBZ2NtVjBkWEp1SUdKcGRFRnljbUY1TzF4dUlDQjlYRzVjYmlBZ0x5b3FJRWx1YVhScFlXeHBlbVZ6SUdFZ1ltbDBjMlYwTGlBcUwxeHVJQ0JwYm1sMEtHWnNZV2M2SUVaMWJtTjBhVzl1TENCdWIzUnBabms2SUdKdmIyeGxZVzRwT2lCQ2FYUkJjbkpoZVNCN1hHNGdJQ0FnZEdocGN5NXpaWFJCYkd3b1ptRnNjMlVzSUdaaGJITmxLVHRjYmx4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnZEdocGN5NWZiR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUdsbUlDaG1iR0ZuS0drcEtWeHVJQ0FnSUNBZ0lDQjBhR2x6TGw5a1lYUmhXMDFoZEdndVpteHZiM0lvYVNBdklEQjRNakFwWFNCOFBTQXhJRHc4SUNnb2FTQWxJREI0TWpBcElDWWdNSGd4WmlrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnZEdocGN5NXBibU55WlcxbGJuUldaWEp6YVc5dUtHNXZkR2xtZVNrN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNN1hHNGdJSDFjYmx4dUlDQXZMeThnU1c1MlpYSjBjeUJoSUdKcGRITmxkQzVjYmlBZ2FXNTJaWEowS0c1dmRHbG1lU0E5SUhSeWRXVXBPaUIyYjJsa0lIdGNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElIUm9hWE11WDJSaGRHRXViR1Z1WjNSb095QnBLeXNwWEc0Z0lDQWdJQ0IwYUdsekxsOWtZWFJoVzJsZElGNDlJQzB4TzF4dVhHNGdJQ0FnZEdocGN5NXBibU55WlcxbGJuUldaWEp6YVc5dUtHNXZkR2xtZVNrN1hHNGdJSDFjYmx4dUlDQXZMeThnVTJWMGN5QmhiR3dnWW1sMGN5QjBieUJiZG1Gc2RXVmRMQ0J2Y0hScGIyNWhiR3g1SUhOMWNIQnlaWE56YVc1bklHNXZkR2xtYVdOaGRHbHZibk11WEc0Z0lITmxkRUZzYkNoMllXeDFaVG9nWW05dmJHVmhiaXdnYm05MGFXWjVJRDBnWm1Gc2MyVXBPaUIyYjJsa0lIdGNiaUFnSUNCamIyNXpkQ0JtYkdGbmN5QTlJSFpoYkhWbElEOGdMVEVnT2lBd08xeHVJQ0FnSUdOdmJuTjBJR3hsYmlBOUlIUm9hWE11YkdWdVozUm9TVzVKYm5Sek8xeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnNaVzQ3SUdrckt5a2dlMXh1SUNBZ0lDQWdkR2hwY3k1ZlpHRjBZVnRwWFNBOUlHWnNZV2R6TzF4dUlDQWdJSDBnTHk5MGIyUnZPaUJ2Y0hScGJXbDZaVnh1WEc0Z0lDQWdkR2hwY3k1cGJtTnlaVzFsYm5SV1pYSnphVzl1S0c1dmRHbG1lU2s3WEc0Z0lIMWNibHh1SUNBdkx5OGdVMlYwY3lCaWFYUnpJR0YwSUZ0cGJtUmxlR1Z6WFNCd2IzTnBkR2x2YmlCMGJ5QmJkbUZzZFdWZExseHVJQ0F2THk4Z1EyeGxZWEp6SUhSb1pTQmlhWFJ6WlhRZ2FXWWdXMk5zWldGeVhTQm1iR0ZuSUdseklIUnlkV1V1WEc0Z0lDOHZMeUJEYUdGdVoyVWdibTkwYVdacFkyRjBhVzl1SUdseklISmhhWE5sWkNCM2FHVnVJRnR1YjNScFpubGRJR2x6SUhSeWRXVXVYRzRnSUhObGRFbHVaR1Y0WlhNb2FXNWtaWGhsY3pvZ1FYSnlZWGs4Ym5WdFltVnlQaXdnZG1Gc2RXVTlkSEoxWlN3Z1kyeGxZWEk5ZEhKMVpTd2dibTkwYVdaNVBYUnlkV1VwT2lCMmIybGtJSHRjYmlBZ0lDQnBaaUFvWTJ4bFlYSXBYRzRnSUNBZ0lDQjBhR2x6TG5ObGRFRnNiQ2doZG1Gc2RXVXNJR1poYkhObEtUdGNibHh1SUNBZ0lHWnZjaUFvWTI5dWMzUWdhU0J2WmlCcGJtUmxlR1Z6S1Z4dUlDQWdJQ0FnZEdocGN5NXpaWFJHWVhOMEtHa3NJSFpoYkhWbEtUdGNibHh1SUNBZ0lIUm9hWE11YVc1amNtVnRaVzUwVm1WeWMybHZiaWh1YjNScFpua3BPMXh1SUNCOVhHNWNiaUFnWlhabGNubEpibVJsZUNocGJtUmxlR1Z6T2lCQmNuSmhlVHh1ZFcxaVpYSStMQ0IyWVd4MVpUMTBjblZsS1RvZ1ltOXZiR1ZoYmlCN1hHNGdJQ0FnWm05eUlDaGpiMjV6ZENCcGJtUmxlQ0J2WmlCcGJtUmxlR1Z6S1NCN1hHNGdJQ0FnSUNCcFppQW9kR2hwY3k1blpYUkNhWFFvYVc1a1pYZ3BJQ0U5SUhaaGJIVmxLVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdabUZzYzJVN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQjBjblZsTzF4dUlDQjlYRzVjYmlBZ1lXNTVTVzVrWlhnb2FXNWtaWGhsY3pvZ1FYSnlZWGs4Ym5WdFltVnlQaXdnZG1Gc2RXVTlkSEoxWlNrNklHSnZiMnhsWVc0Z2UxeHVJQ0FnSUdadmNpQW9ZMjl1YzNRZ2FXNWtaWGdnYjJZZ2FXNWtaWGhsY3lrZ2UxeHVJQ0FnSUNBZ2FXWWdLSFJvYVhNdVoyVjBRbWwwS0dsdVpHVjRLU0E5UFNCMllXeDFaU2xjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFJ5ZFdVN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JpQWdmVnh1WEc0Z0lITmxkRmRvWlhKbEtHTm9aV05yT2lCR2RXNWpkR2x2Yml3Z2RtRnNkV1U5ZEhKMVpTd2dZMnhsWVhJOWRISjFaU3dnYm05MGFXWjVQWFJ5ZFdVc0lHRnNiRzkzUTJ4bFlYSTlkSEoxWlNrNklIWnZhV1FnZTF4dUlDQWdJR2xtSUNoamJHVmhjaUFtSmlCaGJHeHZkME5zWldGeUtWeHVJQ0FnSUNBZ2RHaHBjeTV6WlhSQmJHd29JWFpoYkhWbExDQm1ZV3h6WlNrN1hHNWNiaUFnSUNCcFppQW9ZV3hzYjNkRGJHVmhjaWtnZTF4dUlDQWdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCMGFHbHpMbDlzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvWTJobFkyc29hU2twWEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTV6WlhSR1lYTjBLR2tzSUhaaGJIVmxLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQjBhR2x6TGw5c1pXNW5kR2c3SUdrckt5bGNiaUFnSUNBZ0lDQWdkR2hwY3k1elpYUkdZWE4wS0drc0lHTm9aV05yS0drcElEOGdkbUZzZFdVZ09pQWhkbUZzZFdVcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhSb2FYTXVhVzVqY21WdFpXNTBWbVZ5YzJsdmJpaHViM1JwWm5rcE8xeHVJQ0I5WEc1Y2JpQWdjMlYwVW1GdVoyVW9abkp2YlRvZ2JuVnRZbVZ5TENCMGJ6b2diblZ0WW1WeUxDQjJZV3gxWlRvZ1ltOXZiR1ZoYml3Z2JtOTBhV1o1UFhSeWRXVXBPaUJDYVhSQmNuSmhlU0I3WEc0Z0lDQWdkR2hwY3k1aGMzTjFjbVZKYmxKaGJtZGxLR1p5YjIwc0lEQXNJSFJvYVhNdVgyeGxibWQwYUNBdElERXNJQ2RtY205dEp5azdYRzRnSUNBZ2RHaHBjeTVoYzNOMWNtVkpibEpoYm1kbEtIUnZMQ0F3TENCMGFHbHpMbDlzWlc1bmRHZ2dMU0F4TENBbmRHOG5LVHRjYmx4dUlDQWdJR052Ym5OMElITjBZWEowSUQwZ1RXRjBhQzV0YVc0b1puSnZiU3dnZEc4cE8xeHVJQ0FnSUdOdmJuTjBJR1Z1WkNBOUlFMWhkR2d1YldGNEtHWnliMjBzSUhSdktUdGNibHh1SUNBZ0lDOHZkRzlrYnpvZ2IzQjBhVzFwZW1WY2JpQWdJQ0JwWmlBb2RtRnNkV1VwSUh0Y2JpQWdJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQnpkR0Z5ZERzZ2FTQThQU0JsYm1RN0lHa3JLeWxjYmlBZ0lDQWdJQ0FnZEdocGN5NXpaWFJVY25WbEtHa3BPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCbWIzSWdLR3hsZENCcElEMGdjM1JoY25RN0lHa2dQRDBnWlc1a095QnBLeXNwWEc0Z0lDQWdJQ0FnSUhSb2FYTXVjMlYwUm1Gc2MyVW9hU2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdkR2hwY3k1cGJtTnlaVzFsYm5SV1pYSnphVzl1S0c1dmRHbG1lU2s3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE03WEc0Z0lIMWNibHh1SUNBdkx5OGdVMlYwY3lCdUlISmhibVJ2Yld4NUlHTm9iM05sYmlCaWFYUnpJSFJ2SUhaaGJIVmxMQ0J5WlcxaGFXNXBibWNnWW1sMGN5QjBieUFoZG1Gc2RXVXVYRzRnSUhObGRGSmhibVJ2YlNodU9pQnVkVzFpWlhJc0lIWmhiSFZsT2lCaWIyOXNaV0Z1TENCdWIzUnBabms5ZEhKMVpTazZJSFp2YVdRZ2UxeHVJQ0FnSUdsbUlDaHVJRHdnTUNCOGZDQnVJRDRnZEdocGN5NWZiR1Z1WjNSb0tWeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkdUlHMTFjM1FnWW1VZ1BqMGdNQ0FtSmlBOFBTQkRiM1Z1ZENjcE8xeHVYRzRnSUNBZ2FXWWdLRzRnUGlCMGFHbHpMbDlzWlc1bmRHZ2dMeUF5S1Z4dUlDQWdJQ0FnZEdocGN5NXpaWFJTWVc1a2IyMG9kR2hwY3k1ZmJHVnVaM1JvSUMwZ2Jpd2dJWFpoYkhWbEtUdGNibHh1SUNBZ0lIUm9hWE11YzJWMFFXeHNLQ0YyWVd4MVpTazdYRzVjYmlBZ0lDQm1iM0lnS0d4bGRDQnJJRDBnTURzZ2F5QThJRzQ3SUNrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYVNBOUlFMWhkR2d1Wm14dmIzSW9UV0YwYUM1eVlXNWtiMjBvS1NBcUlIUm9hWE11WDJ4bGJtZDBhQ2s3WEc0Z0lDQWdJQ0JwWmlBb2RHaHBjeTVuWlhSQ2FYUW9hU2tnUFQwZ2RtRnNkV1VwSUdOdmJuUnBiblZsTzF4dUlDQWdJQ0FnZEdocGN5NXpaWFJHWVhOMEtHa3NJSFpoYkhWbEtUdGNiaUFnSUNBZ0lHc3JLenRjYmlBZ0lDQjlYRzVjYmlBZ0lDQjBhR2x6TG1sdVkzSmxiV1Z1ZEZabGNuTnBiMjRvYm05MGFXWjVLVHRjYmlBZ2ZWeHVYRzRnSUM4dkx5Qk5iMlJwWm1sbGN5QmpkWEp5Wlc1MElHSnBkSE5sZENCaWVTQndaWEptYjNKdGFXNW5JSFJvWlNCaWFYUjNhWE5sSUVGT1JDQnZjR1Z5WVhScGIyNGdZV2RoYVc1emRDQjBhR1ZjYmlBZ0x5OHZJR052Y25KbGMzQnZibVJwYm1jZ1pXeGxiV1Z1ZEhNZ2FXNGdkR2hsSUhOd1pXTnBabWxsWkNCaWFYUnpaWFF1WEc0Z0lHRnVaQ2gyWVd4MVpUb2dRbWwwUVhKeVlYa3NJRzV2ZEdsbWVUMTBjblZsS1RvZ1FtbDBRWEp5WVhrZ2UxeHVJQ0FnSUdsbUlDaDBhR2x6TGw5c1pXNW5kR2dnSVQwZ2RtRnNkV1V1WDJ4bGJtZDBhQ2xjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25RWEp5WVhrZ2JHVnVaM1JvY3lCa2FXWm1aWEl1SnlrN1hHNWNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNQ3dnYkdWdUlEMGdkR2hwY3k1c1pXNW5kR2hKYmtsdWRITTdJR2tnUENCc1pXNDdJR2tyS3lsY2JpQWdJQ0FnSUhSb2FYTXVYMlJoZEdGYmFWMGdKajBnZG1Gc2RXVXVYMlJoZEdGYmFWMDdYRzVjYmlBZ0lDQjBhR2x6TG1sdVkzSmxiV1Z1ZEZabGNuTnBiMjRvYm05MGFXWjVLVHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjenRjYmlBZ2ZWeHVYRzRnSUM4dkx5QlFaWEptYjNKdGN5QjBhR1VnWW1sMGQybHpaU0JCVGtRZ1RrOVVJRzl3WlhKaGRHbHZiaUJ2YmlCMGFHVWdaV3hsYldWdWRITWdhVzRnZEdobElHTjFjbkpsYm5RZ1ltbDBjMlYwWEc0Z0lDOHZMeUJoWjJGcGJuTjBJSFJvWlNCamIzSnlaWE53YjI1a2FXNW5JR1ZzWlcxbGJuUnpJR2x1SUhSb1pTQnpjR1ZqYVdacFpXUWdZbWwwYzJWMExseHVJQ0JoYm1ST2IzUW9kbUZzZFdVNklFSnBkRUZ5Y21GNUxDQnViM1JwWm5rOWRISjFaU2s2SUVKcGRFRnljbUY1SUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTVmYkdWdVozUm9JQ0U5SUhaaGJIVmxMbDlzWlc1bmRHZ3BYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0owRnljbUY1SUd4bGJtZDBhSE1nWkdsbVptVnlMaWNwTzF4dVhHNGdJQ0FnWTI5dWMzUWdiR1Z1SUQwZ2RHaHBjeTVzWlc1bmRHaEpia2x1ZEhNN1hHNGdJQ0FnWm05eUlDaHNaWFFnYm5WdE1pQTlJREE3SUc1MWJUSWdQQ0JzWlc0N0lHNTFiVElyS3lsY2JpQWdJQ0FnSUhSb2FYTXVYMlJoZEdGYmJuVnRNbDBnSmowZ2ZuWmhiSFZsTGw5a1lYUmhXMjUxYlRKZE8xeHVYRzRnSUNBZ2RHaHBjeTVwYm1OeVpXMWxiblJXWlhKemFXOXVLRzV2ZEdsbWVTazdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTTdYRzRnSUgxY2JseHVJQ0F2THk4Z1VHVnlabTl5YlhNZ2RHaGxJR0pwZEhkcGMyVWdUazlVSUVGT1JDQnZjR1Z5WVhScGIyNGdiMjRnZEdobElHVnNaVzFsYm5SeklHbHVJSFJvWlNCamRYSnlaVzUwSUdKcGRITmxkRnh1SUNBdkx5OGdZV2RoYVc1emRDQjBhR1VnWTI5eWNtVnpjRzl1WkdsdVp5QmxiR1Z0Wlc1MGN5QnBiaUIwYUdVZ2MzQmxZMmxtYVdWa0lHSnBkSE5sZEM1Y2JpQWdibTkwUVc1a0tIWmhiSFZsT2lCQ2FYUkJjbkpoZVN3Z2JtOTBhV1o1UFhSeWRXVXBPaUJDYVhSQmNuSmhlU0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXVYMnhsYm1kMGFDQWhQU0IyWVd4MVpTNWZiR1Z1WjNSb0tWeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkQmNuSmhlU0JzWlc1bmRHaHpJR1JwWm1abGNpNG5LVHRjYmx4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd0xDQnNaVzRnUFNCMGFHbHpMbXhsYm1kMGFFbHVTVzUwY3pzZ2FTQThJR3hsYmpzZ2FTc3JLVnh1SUNBZ0lDQWdkR2hwY3k1ZlpHRjBZVnRwWFNBOUlDaCtkR2hwY3k1ZlpHRjBZVnRwWFNrZ0ppQjJZV3gxWlM1ZlpHRjBZVnRwWFR0Y2JseHVJQ0FnSUhSb2FYTXVhVzVqY21WdFpXNTBWbVZ5YzJsdmJpaHViM1JwWm5rcE8xeHVJQ0FnSUhKbGRIVnliaUIwYUdsek8xeHVJQ0I5WEc1Y2JpQWdMeTh2SUVsdWRtVnlkSE1nWVd4c0lHSnBkQ0IyWVd4MVpYTWdhVzRnZEdobElHTjFjbkpsYm5RZ1ltbDBjMlYwWEc0Z0lHNXZkQ2h1YjNScFpua2dQU0IwY25WbEtUb2dRbWwwUVhKeVlYa2dlMXh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3TENCc1pXNGdQU0IwYUdsekxteGxibWQwYUVsdVNXNTBjenNnYVNBOElHeGxianNnYVNzcktWeHVJQ0FnSUNBZ2RHaHBjeTVmWkdGMFlWdHBYU0E5SUg1MGFHbHpMbDlrWVhSaFcybGRPMXh1WEc0Z0lDQWdkR2hwY3k1cGJtTnlaVzFsYm5SV1pYSnphVzl1S0c1dmRHbG1lU2s3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE03WEc0Z0lIMWNibHh1SUNBdkx5OGdVR1Z5Wm05eWJYTWdkR2hsSUdKcGRIZHBjMlVnVDFJZ2IzQmxjbUYwYVc5dUlHOXVJSFJvWlNCbGJHVnRaVzUwY3lCcGJpQjBhR1VnWTNWeWNtVnVkQ0JpYVhSelpYUmNiaUFnTHk4dklHRm5ZV2x1YzNRZ2RHaGxJR052Y25KbGMzQnZibVJwYm1jZ1pXeGxiV1Z1ZEhNZ2FXNGdkR2hsSUhOd1pXTnBabWxsWkNCaWFYUnpaWFF1WEc0Z0lHOXlLSFpoYkhWbE9pQkNhWFJCY25KaGVTd2dibTkwYVdaNUlEMGdkSEoxWlNrZ2UxeHVJQ0FnSUdsbUlDaDBhR2x6TGw5c1pXNW5kR2dnSVQwZ2RtRnNkV1V1WDJ4bGJtZDBhQ2xjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25RWEp5WVhrZ2JHVnVaM1JvY3lCa2FXWm1aWEl1SnlrN1hHNWNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNQ3dnYkdWdUlEMGdkR2hwY3k1c1pXNW5kR2hKYmtsdWRITTdJR2tnUENCc1pXNDdJR2tyS3lsY2JpQWdJQ0FnSUhSb2FYTXVYMlJoZEdGYmFWMGdmRDBnZG1Gc2RXVXVYMlJoZEdGYmFWMDdYRzVjYmlBZ0lDQjBhR2x6TG1sdVkzSmxiV1Z1ZEZabGNuTnBiMjRvYm05MGFXWjVLVHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjenRjYmlBZ2ZWeHVYRzRnSUM4dkx5QlFaWEptYjNKdGN5QjBhR1VnWW1sMGQybHpaU0JsZUdOc2RYTnBkbVVnVDFJZ2IzQmxjbUYwYVc5dUlHOXVJSFJvWlNCbGJHVnRaVzUwY3lCcGJpQjBhR1VnWTNWeWNtVnVkQ0JpYVhSelpYUmNiaUFnTHk4dklHRm5ZV2x1YzNRZ2RHaGxJR052Y25KbGMzQnZibVJwYm1jZ1pXeGxiV1Z1ZEhNZ2FXNGdkR2hsSUhOd1pXTnBabWxsWkNCaWFYUnpaWFF1WEc0Z0lIaHZjaWgyWVd4MVpUb2dRbWwwUVhKeVlYa3NJRzV2ZEdsbWVTQTlJSFJ5ZFdVcElIdGNiaUFnSUNCcFppQW9kR2hwY3k1ZmJHVnVaM1JvSUNFOUlIWmhiSFZsTGw5c1pXNW5kR2dwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMEZ5Y21GNUlHeGxibWQwYUhNZ1pHbG1abVZ5TGljcE8xeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREFzSUd4bGJpQTlJSFJvYVhNdWJHVnVaM1JvU1c1SmJuUnpPeUJwSUR3Z2JHVnVPeUJwS3lzcFhHNGdJQ0FnSUNCMGFHbHpMbDlrWVhSaFcybGRJRjQ5SUhaaGJIVmxMbDlrWVhSaFcybGRPMXh1WEc0Z0lDQWdkR2hwY3k1cGJtTnlaVzFsYm5SV1pYSnphVzl1S0c1dmRHbG1lU2s3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE03WEc0Z0lIMWNibHh1SUNBdkx5OGdTVzV6WlhKMGN5QnVJREF0WW1sMGN5QmhkQ0J3YjNOcGRHbHZiaUJ3YjNNc0lISmxjMmw2YVc1bklITmxiR1lnWVc1a0lITm9hV1owYVc1bklHSnBkSE1nWVhCd2NtOXdjbWxoZEdWc2VTNWNiaUFnYVc1elpYSjBRWFFvY0c5ek9pQnVkVzFpWlhJc0lHNDZJRzUxYldKbGNpd2dabXhoWnlBOUlHWmhiSE5sS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdkR2hwY3k1aGMzTjFjbVZKYmxKaGJtZGxLSEJ2Y3l3Z01Dd2dkR2hwY3k1ZmJHVnVaM1JvTENBbmNHOXpKeWs3WEc1Y2JpQWdJQ0JwWmlBb2JpQTlQU0F3S1NCeVpYUjFjbTQ3WEc1Y2JpQWdJQ0F2TDFSUFJFODZJRzl3ZEdsdGFYcGxYRzRnSUNBZ0x5OTBhR1VnYlc5emRDQndjbWx0YVhScGRtVWdhVzF3YkdWdFpXNTBZWFJwYjI0c0lHOXdkR2x0YVhwbElHbDBJR3hoZEdWeUlWeHVYRzRnSUNBZ0x5OGdZbVZuYVc1VmNHUmhkR1VvS1R0Y2JpQWdJQ0JqYjI1emRDQnZiR1JzWlc1bmRHZ2dQU0IwYUdsekxsOXNaVzVuZEdnN1hHNGdJQ0FnZEdocGN5NXpaWFJNWlc1bmRHZ29kR2hwY3k1ZmJHVnVaM1JvSUNzZ2JpazdYRzVjYmlBZ0lDQXZMMmxtSUNnaFkyOXVkR0ZwYm5Nb0lXWnNZV2NwS1NCeVpYUjFjbTQ3SUM4dklHNXZkR2hwYm1jZ2RHOGdaRzljYmx4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNCdmJHUnNaVzVuZEdnZ0xTQXhPeUJwSUQ0OUlIQnZjenNnYVMwdEtWeHVJQ0FnSUNBZ2RHaHBjeTV6WlhSQ2FYUW9hU0FySUc0c0lIUm9hWE11WjJWMFFtbDBLR2twS1R0Y2JseHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQndiM003SUdrZ1BDQndiM01nS3lCdU95QnBLeXNwWEc0Z0lDQWdJQ0IwYUdsekxuTmxkRUpwZENocExDQm1iR0ZuS1R0Y2JseHVJQ0FnSUM4dklHVnVaRlZ3WkdGMFpTZ3BPMXh1SUNCOVhHNWNiaUFnTHk4dklFUmxiR1YwWlhNZ2JpQmlhWFJ6SUdKbFoybHVibWx1WnlCaGRDQndiM05wZEdsdmJpQndiM01zSUhKbGMybDZhVzVuSUhObGJHWWdZVzVrSUhOb2FXWjBhVzVuSUhKbGJXRnBibWx1WjF4dUlDQXZMeThnWW1sMGN5QmhjSEJ5YjNCeWFXRjBaV3g1TGx4dUlDQnlaVzF2ZG1WQmRDaHdiM002SUc1MWJXSmxjaXdnYmlBOUlERXBPaUIyYjJsa0lIdGNiaUFnSUNBdkx5QjBhR1VnYlc5emRDQndjbWx0YVhScGRtVWdhVzF3YkdWdFpXNTBZWFJwYjI0c0lHOXdkR2x0YVhwbElHbDBJR3hoZEdWeUlWeHVJQ0FnSUdsbUlDaHVJRHdnTUNsY2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduYmlCallXNXViM1FnWW1VZ2JtVm5ZWFJwZG1VbktUdGNibHh1SUNBZ0lIUm9hWE11WVhOemRYSmxTVzVTWVc1blpTaHdiM01zSURBc0lIUm9hWE11WDJ4bGJtZDBhQ0F0SUc0c0lDZHdiM01uS1R0Y2JseHVJQ0FnSUdsbUlDaDBhR2x6TG1OdmJuUmhhVzV6S0hSeWRXVXBLU0I3WEc0Z0lDQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ2NHOXpPeUJwSUR3Z2RHaHBjeTVmYkdWdVozUm9JQzBnYmpzZ2FTc3JLVnh1SUNBZ0lDQWdJQ0IwYUdsekxuTmxkRUpwZENocExDQjBhR2x6TG1kbGRFSnBkQ2hwSUNzZ2Jpa3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11YzJWMFRHVnVaM1JvS0hSb2FYTXVYMnhsYm1kMGFDQXRJRzRwTzF4dUlDQjlYRzVjYmlBZ2NtVnRiM1psUW5sTllYTnJLRzFoYzJzNklFSnBkRUZ5Y21GNUxDQm1iR0ZuSUQwZ2RISjFaU2s2SUVKcGRFRnljbUY1SUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTVmYkdWdVozUm9JQ0U5SUcxaGMyc3ViR1Z1WjNSb0tWeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0Nkc1pXNW5kR2dnSVQwZ2JXRnpheTVzWlc1bmRHZ25LVHRjYmx4dUlDQWdJR2xtSUNodFlYTnJJRDA5SUhSb2FYTXBJSHNnTHk4Z2JtOGdibVZsWkNCMGJ5QnBkR1Z5WVhSbFhHNGdJQ0FnSUNCMGFHbHpMbk5sZEV4bGJtZDBhQ2h0WVhOckxtTnZkVzUwUW1sMGN5Z2habXhoWnlrcE8xeHVJQ0FnSUNBZ2RHaHBjeTV6WlhSQmJHd29JV1pzWVdjcE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0JzWlhRZ1pITjBTV1I0SUQwZ01EdGNibHh1SUNBZ0lDQWdabTl5SUNoc1pYUWdjM0pqU1dSNElEMGdMVEU3SUNoemNtTkpaSGdnUFNCdFlYTnJMbVpwYm1ST1pYaDBLSE55WTBsa2VDd2dJV1pzWVdjcEtTQWhQU0F0TVRzcFhHNGdJQ0FnSUNBZ0lIUm9hWE11YzJWMFJtRnpkQ2hrYzNSSlpIZ3JLeXdnZEdocGN5NW5aWFJDYVhRb2MzSmpTV1I0S1NrN1hHNWNiaUFnSUNBZ0lIUm9hWE11WDJ4bGJtZDBhQ0E5SUdSemRFbGtlRHRjYmlBZ0lDQWdJSFJvYVhNdVgzWmxjbk5wYjI0ckt6dGNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnZEdocGN6dGNiaUFnZlZ4dVhHNGdJQzh2THlCVGFXMXBiR0Z5SUhSdklIUm9aU0JiWFNCdmNHVnlZWFJ2Y2k1Y2JpQWdaMlYwUW1sMEtIQnZjem9nYm5WdFltVnlLVG9nWW05dmJHVmhiaUI3WEc0Z0lDQWdjbVYwZFhKdUlDaDBhR2x6TGw5a1lYUmhXMDFoZEdndVpteHZiM0lvY0c5eklDOGdNSGd5TUNsZElDWWdLREVnUER3Z0tIQnZjeUFtSURCNE1XWXBLU2tnSVQwZ01EdGNiaUFnZlZ4dVhHNGdJQzh2THlCVGFXMXBiR0Z5SUhSdklIUm9aU0JiWFNCdmNHVnlZWFJ2Y2k1Y2JpQWdjMlYwUW1sMEtIQnZjem9nYm5WdFltVnlMQ0JpYVhRNklHSnZiMnhsWVc0c0lHNXZkR2xtZVNBOUlIUnlkV1VwSUh0Y2JpQWdJQ0IwYUdsekxuTmxkRVpoYzNRb2NHOXpMQ0JpYVhRcE8xeHVJQ0FnSUdsbUlDaHViM1JwWm5rcFhHNGdJQ0FnSUNCMGFHbHpMbDkyWlhKemFXOXVLeXM3WEc0Z0lDQWdaV3h6WlZ4dUlDQWdJQ0FnZEdocGN5NWZkbVZ5YzJsdmJpc3JPMXh1SUNCOVhHNWNiaUFnTHk4dklGTmxkSE1nVzJsZExYUm9JR0pwZENCMGJ5QmJkbUZzZFdWZExDQmtiMlZ6SUc1dmRDQmphR1ZqYXlCaWIzVnVaSE1zSUdSdlpYTWdibTkwSUdsdVkzSmxiV1Z1ZENCMlpYSnphVzl1WEc0Z0lITmxkRVpoYzNRb2FUb2diblZ0WW1WeUxDQjJZV3gxWlRvZ1ltOXZiR1ZoYmlrNklIWnZhV1FnZTF4dUlDQWdJR2xtSUNoMllXeDFaU2xjYmlBZ0lDQWdJSFJvYVhNdVgyUmhkR0ZiVFdGMGFDNW1iRzl2Y2locElDOGdNSGd5TUNsZElIdzlJREVnUER3Z0tHa2dKaUF3ZURGbUtUdGNiaUFnSUNCbGJITmxYRzRnSUNBZ0lDQjBhR2x6TGw5a1lYUmhXMDFoZEdndVpteHZiM0lvYVNBdklEQjRNakFwWFNBbVBTQitLREVnUER3Z0tHa2dKaUF3ZURGbUtTazdYRzRnSUgxY2JseHVJQ0J6WlhSVWNuVmxLSEJ2Y3pvZ2JuVnRZbVZ5S1RvZ2RtOXBaQ0I3WEc0Z0lDQWdkR2hwY3k1ZlpHRjBZVnROWVhSb0xtWnNiMjl5S0hCdmN5QXZJREI0TWpBcFhTQjhQU0F4SUR3OElDaHdiM01nSmlBd2VERm1LVHRjYmlBZ2ZWeHVJQ0J6WlhSR1lXeHpaU2h3YjNNNklHNTFiV0psY2lrZ2UxeHVJQ0FnSUhSb2FYTXVYMlJoZEdGYlRXRjBhQzVtYkc5dmNpaHdiM01nTHlBd2VESXdLVjBnSmowZ2ZpZ3hJRHc4SUNod2IzTWdKaUF3ZURGbUtTazdYRzRnSUgxY2JseHVJQ0IwY25WbFEyOTFiblFvS1RvZ2JuVnRZbVZ5SUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1amIzVnVkRUpwZEhNb2RISjFaU2s3WEc0Z0lIMWNiaUFnWm1Gc2MyVkRiM1Z1ZENncE9pQnVkVzFpWlhJZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtTnZkVzUwUW1sMGN5aG1ZV3h6WlNrN1hHNGdJSDFjYmx4dUlDQXZMeThnUTI5MWJuUnpJR0pwZEhNZ2IyWWdkR2hsSUhOd1pXTnBabWxsWkNCMllXeDFaUzVjYmlBZ1kyOTFiblJDYVhSektIWmhiSFZsT2lCaWIyOXNaV0Z1S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTVmYkdWdVozUm9JRDA5SURBcElISmxkSFZ5YmlBd08xeHVYRzRnSUNBZ2FXWWdLSFJvYVhNdVgzTmxiR1ZqZEdWa1EyOTFiblJXWlhKemFXOXVJQ0U5SUhSb2FYTXVYM1psY25OcGIyNHBJSHRjYmlBZ0lDQWdJSFJvYVhNdVgzTmxiR1ZqZEdWa1EyOTFiblFnUFNBd08xeHVJQ0FnSUNBZ1kyOXVjM1FnYkdWdUlEMGdkR2hwY3k1c1pXNW5kR2hKYmtsdWRITTdYRzRnSUNBZ0lDQnNaWFFnYVNBOUlEQTdYRzRnSUNBZ0lDQm1iM0lnS0RzZ2FTQThJR3hsYmlBdElERTdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ0lDQm1iM0lnS0d4bGRDQnJJRDBnZEdocGN5NWZaR0YwWVZ0cFhUc2dheUFoUFNBd095QnJJRDQrUGowZ09Da2dleUF2TDNSdlpHODZJR05oYzNRZ1pHRjBZVnRwWFNCMGJ5QjFhVzUwWEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTVmYzJWc1pXTjBaV1JEYjNWdWRDQXJQU0JDYVhSQmNuSmhlUzVmYjI1Q2FYUkRiM1Z1ZEZ0cklDWWdNSGhtWmwwN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdMeThnVkdobElHeGhjM1FnYVc1MExseHVJQ0FnSUNBZ2JHVjBJR3NnUFNCMGFHbHpMbDlrWVhSaFcybGRPMXh1SUNBZ0lDQWdZMjl1YzNRZ2NtVnRZV2x1YVc1blFtbDBjeUE5SUhSb2FYTXVYMnhsYm1kMGFDQW1JREI0TVdZN1hHNGdJQ0FnSUNCcFppQW9jbVZ0WVdsdWFXNW5RbWwwY3lBaFBTQXdLU0I3THk4Z2FXWWdjbVZ0WVdsdWFXNW5RbWwwY3lBOVBTQXdMQ0IwYUdVZ2JHRnpkQ0JwYm5RZ2FYTWdablZzYkhrZ2RYTmxaQ0JoYm1RZ1FVeE1JR0pwZEhNZ2MyaHZkV3hrSUdKbElHeGxablFnWVhNZ2FYTXVYRzRnSUNBZ0lDQWdJR3NnSmowZ2ZpZ29OREk1TkRrMk56STVOU2tnUER3Z2NtVnRZV2x1YVc1blFtbDBjeWs3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUdadmNpQW9PeUJySUNFOUlEQTdJR3NnUGo0K1BTQTRLVnh1SUNBZ0lDQWdJQ0IwYUdsekxsOXpaV3hsWTNSbFpFTnZkVzUwSUNzOUlFSnBkRUZ5Y21GNUxsOXZia0pwZEVOdmRXNTBXMnNnSmlBd2VHWm1YVHRjYmx4dUlDQWdJQ0FnZEdocGN5NWZjMlZzWldOMFpXUkRiM1Z1ZEZabGNuTnBiMjRnUFNCMGFHbHpMbDkyWlhKemFXOXVPMXh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlBb2RtRnNkV1VnUHlCMGFHbHpMbDl6Wld4bFkzUmxaRU52ZFc1MElEb2dkR2hwY3k1ZmJHVnVaM1JvSUMwZ2RHaHBjeTVmYzJWc1pXTjBaV1JEYjNWdWRDazdYRzRnSUgxY2JseHVJQ0F2THk4Z1VtVjBkWEp1Y3lCaElHNTFiV0psY2lCdlppQnpaWFFnWW1sMGN5QjNhR1Z5WlNCaGJITnZJRnRqYUdWamExMGdhWE1nZEhKMVpWeHVJQ0JqYjNWdWRGZG9aWEpsS0dOb1pXTnJPaUJHZFc1amRHbHZiaWs2SUc1MWJXSmxjaUI3WEc0Z0lDQWdiR1YwSUhKbGMzVnNkQ0E5SURBN1hHNGdJQ0FnYVdZZ0tIUm9hWE11ZEhKMVpVTnZkVzUwS0NrZ1BUMGdkR2hwY3k1ZmJHVnVaM1JvS1NCN1hHNGdJQ0FnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElIUm9hWE11WDJ4bGJtZDBhRHNnYVNzcktWeHVJQ0FnSUNBZ0lDQnlaWE4xYkhRZ0t6MGdZMmhsWTJzb2FTa2dQeUF4SURvZ01EdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnWm05eUlDaHNaWFFnYVNBOUlDMHhPeUFvYVNBOUlIUm9hWE11Wm1sdVpFNWxlSFFvYVN3Z2RISjFaU2twSUNFOUlDMHhPeWxjYmlBZ0lDQWdJQ0FnY21WemRXeDBJQ3M5SUdOb1pXTnJLR2twSUQ4Z01TQTZJREE3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCeVpYTjFiSFE3WEc0Z0lIMWNibHh1SUNBdkx5OGdVR1Z5Wm05eWJYTWdZbWwwSUZ3aVlXNWtYQ0lnWVc1a0lHTnZkVzUwY3lCaWFYUnpJRzltSUhSb1pTQnpjR1ZqYVdacFpXUWdkbUZzZFdVc0lIZHBkR2h2ZFhRZ1ltbDBjMlYwSUcxdlpHbG1hV05oZEdsdmJpNWNiaUFnWVc1a1YybDBhRU52ZFc1MFFtbDBjeWh6WldOdmJtUTZJRUpwZEVGeWNtRjVMQ0IyWVd4MVpUb2dZbTl2YkdWaGJpazZJRzUxYldKbGNpQjdYRzRnSUNBZ2FXWWdLSFJvYVhNdVgyeGxibWQwYUNBOVBTQXdLU0J5WlhSMWNtNGdNRHRjYmx4dUlDQWdJR3hsZENCamIzVnVkQ0E5SURBN0lHTnZibk4wSUd4bGJpQTlJSFJvYVhNdWJHVnVaM1JvU1c1SmJuUnpPeUJzWlhRZ2FTQTlJREE3WEc0Z0lDQWdabTl5SUNnN0lHa2dQQ0JzWlc0Z0xTQXhPeUJwS3lzcElIdGNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHc2dQU0IwYUdsekxsOWtZWFJoVzJsZElDWWdjMlZqYjI1a0xsOWtZWFJoVzJsZE95QnJJQ0U5SURBN0lHc2dQajQrUFNBNEtWeHVJQ0FnSUNBZ0lDQmpiM1Z1ZENBclBTQkNhWFJCY25KaGVTNWZiMjVDYVhSRGIzVnVkRnRySUNZZ01IaG1abDA3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeThnVkdobElHeGhjM1FnYVc1MExseHVJQ0FnSUd4bGRDQnJJRDBnZEdocGN5NWZaR0YwWVZ0cFhTQW1JSE5sWTI5dVpDNWZaR0YwWVZ0cFhUdGNiaUFnSUNCamIyNXpkQ0J5WlcxaGFXNXBibWRDYVhSeklEMGdkR2hwY3k1ZmJHVnVaM1JvSUNZZ01IZ3haanRjYmlBZ0lDQnBaaUFvY21WdFlXbHVhVzVuUW1sMGN5QWhQU0F3S1Z4dUlDQWdJQ0FnYXlBbVBTQitLQ2cwTWprME9UWTNNamsxS1NBOFBDQnlaVzFoYVc1cGJtZENhWFJ6S1R0Y2JpQWdJQ0JtYjNJZ0tEc2dheUFoUFNBd095QnJJRDQrUGowZ09DbGNiaUFnSUNBZ0lHTnZkVzUwSUNzOUlFSnBkRUZ5Y21GNUxsOXZia0pwZEVOdmRXNTBXMnNnSmlBd2VHWm1YVHRjYmx4dUlDQWdJSEpsZEhWeWJpQW9kbUZzZFdVZ1B5QmpiM1Z1ZENBNklIUm9hWE11WDJ4bGJtZDBhQ0F0SUdOdmRXNTBLVHRjYmlBZ2ZWeHVYRzRnSUdOc1pXRnlLQ2s2SUhadmFXUWdlMXh1SUNBZ0lIUm9hWE11YzJWMFRHVnVaM1JvS0RBcE8xeHVJQ0I5WEc0Z0lHTnZiblJoYVc1ektIWmhiSFZsT2lCaWIyOXNaV0Z1S1RvZ1ltOXZiR1ZoYmlCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVptbHVaRTVsZUhRb0xURXNJSFpoYkhWbEtTQStQU0F3TzF4dUlDQjlYRzRnSUdkbGRDQmhiR3hVY25WbEtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbU52ZFc1MFFtbDBjeWgwY25WbEtTQTlQU0IwYUdsekxsOXNaVzVuZEdnN1hHNGdJSDFjYmlBZ1oyVjBJR0ZzYkVaaGJITmxLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG1OdmRXNTBRbWwwY3lobVlXeHpaU2tnUFQwZ2RHaHBjeTVmYkdWdVozUm9PMXh1SUNCOVhHNGdJR2RsZENCaGJubFVjblZsS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtTnZkVzUwUW1sMGN5aDBjblZsS1NBK0lEQTdYRzRnSUgxY2JpQWdaMlYwSUdGdWVVWmhiSE5sS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtTnZkVzUwUW1sMGN5aG1ZV3h6WlNrZ1BpQXdPMXh1SUNCOVhHNWNiaUFnTHk4dklGSmxkSFZ5Ym5NZ2RHaGxJSEJ2YzJsMGFXOXVJRzltSUhSb1pTQnVaWGgwSUdKcGRDQnZaaUIwYUdVZ2MzQmxZMmxtYVdWa0lIWmhiSFZsTENCemRHRnlkR2x1WnlCbWNtOXRJSFJvWlNCemNHVmphV1pwWldRZ2NHOXphWFJwYjI0dVhHNGdJQzh2THlCU1pYUjFjbTV6SUMweExDQnBaaUIwYUdWeVpTQmhjbVVnYm04Z2MzVmphQ0JpYVhSekxseHVJQ0JtYVc1a1RtVjRkQ2hwYm1SbGVEb2diblZ0WW1WeUxDQjJZV3gxWlNBOUlIUnlkV1VwT2lCdWRXMWlaWElnZTF4dUlDQWdJSFJvYVhNdVlYTnpkWEpsU1c1U1lXNW5aU2hwYm1SbGVDd2dMVEVzSUhSb2FYTXVYMnhsYm1kMGFDd2dKMmx1WkdWNEp5azdYRzVjYmlBZ0lDQnBaaUFvYVc1a1pYZ2dQajBnZEdocGN5NWZiR1Z1WjNSb0lDMGdNU2tnY21WMGRYSnVJQzB4TzF4dUlDQWdJR2x1WkdWNElEMGdhVzVrWlhnZ1BDQXdJRDhnTUNBNklHbHVaR1Y0SUNzZ01Uc2dMeThnYzJ0cGNDQnpkR0Z5ZEZ4dUlDQWdJR3hsZENCMWJuVnpaV1JDYVhSeklEMGdhVzVrWlhnZ0ppQXdlREZtTzF4dUlDQWdJR052Ym5OMElHNTFiVWx1ZEhNZ1BTQjBhR2x6TG14bGJtZDBhRWx1U1c1MGN6dGNibHh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0JOWVhSb0xtWnNiMjl5S0dsdVpHVjRJQzhnTXpJcE95QnBJRHdnYm5WdFNXNTBjenNnYVNzcktTQjdYRzRnSUNBZ0lDQnNaWFFnYXlBOUlDaDJZV3gxWlNBL0lIUm9hWE11WDJSaGRHRmJhVjBnT2lCK2RHaHBjeTVmWkdGMFlWdHBYU2s3SUM4dklIVnBiblFnWTJGemRGeHVJQ0FnSUNBZ2FXWWdLSFZ1ZFhObFpFSnBkSE1nSVQwZ01Da2dlMXh1SUNBZ0lDQWdJQ0JySUNZOUlDZ29NSGhtWm1abVptWm1aaUE4UENCMWJuVnpaV1JDYVhSektTQW1JREI0Wm1abVptWm1abVlwTzF4dUlDQWdJQ0FnSUNCMWJuVnpaV1JDYVhSeklEMGdNRHRjYmlBZ0lDQWdJSDBnWld4elpTQnBaaUFvSVhaaGJIVmxJQ1ltSUdzZ1BUMGdMVFF5T1RRNU5qY3lPVFlwSUM4dklHeHZiMnRwYm1jZ1ptOXlJR1poYkhObExDQmhiR3dnWW1sMGN5QmhjbVVnYzJWMFhHNWNiaUFnSUNBZ0lDQWdZMjl1ZEdsdWRXVTdYRzVjYmlBZ0lDQWdJR1p2Y2lBb2JHVjBJR29nUFNBd095QnJJQ0U5SURBN0lHb2dLejBnT0N3Z2F5QStQajQ5SURncElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2NDQTlJRUpwZEVGeWNtRjVMbDltYVhKemRFOXVRbWwwVzJzZ0ppQXdlR1ptWFR0Y2JpQWdJQ0FnSUNBZ2FXWWdLSEFnUGowZ01Da2dlMXh1SUNBZ0lDQWdJQ0FnSUdsdVpHVjRJRDBnY0NBcklDaHBJQ29nTXpJcElDc2dhanRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9hVzVrWlhnZ1BqMGdkR2hwY3k1ZmJHVnVaM1JvS1NCeVpYUjFjbTRnTFRFN1hHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHbHVaR1Y0TzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQXRNVHRjYmlBZ2ZWeHVYRzRnSUM4dkx5QkdhVzVrY3lCd2NtVjJhVzkxY3lCaWFYUWdiMllnZEdobElITndaV05wWm1sbFpDQjJZV3gxWlNCcGJpQjBhR1VnWW1sMGMyVjBMbHh1SUNCbWFXNWtVSEpsZGlocGJtUmxlRG9nYm5WdFltVnlMQ0IyWVd4MVpTQTlJSFJ5ZFdVcE9pQnVkVzFpWlhJZ2UxeHVJQ0FnSUdsbUlDaHBibVJsZUNBOVBTQXdLU0J5WlhSMWNtNGdMVEU3WEc0Z0lDQWdkR2hwY3k1aGMzTjFjbVZKYmxKaGJtZGxLR2x1WkdWNExDQXRNU3dnZEdocGN5NWZiR1Z1WjNSb0xDQW5hVzVrWlhnbktUdGNibHh1SUNBZ0lHbHVaR1Y0SUQwZ2FXNWtaWGdnUENBd0lEOGdkR2hwY3k1ZmJHVnVaM1JvSUMwZ01TQTZJR2x1WkdWNElDMGdNVHNnTHk4Z2MydHBjQ0J6ZEdGeWRGeHVYRzRnSUNBZ1kyOXVjM1FnYkdGemRFbHVkRWxrZUNBOUlFMWhkR2d1Wm14dmIzSW9hVzVrWlhnZ0x5QXdlREl3S1R0Y2JpQWdJQ0JzWlhRZ2NtVnRZV2x1YVc1blFtbDBjeUE5SUNocGJtUmxlQ0FySURFcElDWWdNSGd4Wmp0Y2JseHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQnNZWE4wU1c1MFNXUjRPeUJwSUQ0OUlEQTdJR2t0TFNrZ2UxeHVJQ0FnSUNBZ2JHVjBJR3NnUFNBb2RtRnNkV1VnUHlCMGFHbHpMbDlrWVhSaFcybGRJRG9nZm5Sb2FYTXVYMlJoZEdGYmFWMHBPeUF2THlCallYTjBYRzRnSUNBZ0lDQnBaaUFvY21WdFlXbHVhVzVuUW1sMGN5QWhQU0F3S1NCN1hHNGdJQ0FnSUNBZ0lHc2dKajBnZmlnb05ESTVORGsyTnpJNU5Ta2dQRHdnY21WdFlXbHVhVzVuUW1sMGN5azdYRzRnSUNBZ0lDQWdJSEpsYldGcGJtbHVaMEpwZEhNZ1BTQXdPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdabTl5SUNoc1pYUWdhaUE5SURJME95QnJJQ0U5SURBN0lHb2dMVDBnT0N3Z2F5QThQRDBnT0NrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCd0lEMGdRbWwwUVhKeVlYa3VYMnhoYzNSUGJrSnBkRnRySUQ0K1BpQXdlREU0WFR0Y2JpQWdJQ0FnSUNBZ2FXWWdLSEFnUGowZ01DbGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjQ0FySUNocElDb2dNeklwSUNzZ2FqdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJQzB4TzF4dUlDQjlYRzU5WEc0aVhYMD0iLCIvKipcbiAqIEdlbmVyYXRlcyBzaW5nbGUgcmFuZG9tIGZsb2F0IGZyb20gMCB0byByYW5nZS5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge251bWJlcn0gcmFuZ2UgTWF4IGdlbmVyYXRpbmcgdmFsdWUuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEEgcmFuZG9tIGZsb2F0IGdlbmVyYXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbUZsb2F0KHJhbmdlKSB7XG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiByYW5nZTtcbn1cbi8qKlxuICogR2VuZXJhdGVzIHNpbmdsZSByYW5kb20gaW50ZWdlciBmcm9tIDAgdG8gcmFuZ2UuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtudW1iZXJ9IHJhbmdlIE1heCBnZW5lcmF0aW5nIHZhbHVlLlxuICogQHJldHVybiB7bnVtYmVyfSBBIHJhbmRvbSBpbnRlZ2VyIGdlbmVyYXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbUludChyYW5nZSkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKHJhbmRvbUZsb2F0KHJhbmdlKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljbUZ1Wkc5dExtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpY21GdVpHOXRMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQk96czdPenM3UjBGTlJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4WFFVRlhMRU5CUVVNc1MwRkJZVHRKUVVOMlF5eFBRVUZQTEVsQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGREwwSXNRMEZCUXp0QlFVVkVPenM3T3pzN1IwRk5SenRCUVVOSUxFMUJRVTBzVlVGQlZTeFRRVUZUTEVOQlFVTXNTMEZCWVR0SlFVTnlReXhQUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNWMEZCVnl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGVFTXNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWeklITnBibWRzWlNCeVlXNWtiMjBnWm14dllYUWdabkp2YlNBd0lIUnZJSEpoYm1kbExseHVJQ3BjYmlBcUlFQmxlSEJ2Y25SY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQnlZVzVuWlNCTllYZ2daMlZ1WlhKaGRHbHVaeUIyWVd4MVpTNWNiaUFxSUVCeVpYUjFjbTRnZTI1MWJXSmxjbjBnUVNCeVlXNWtiMjBnWm14dllYUWdaMlZ1WlhKaGRHVmtMbHh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2NtRnVaRzl0Um14dllYUW9jbUZ1WjJVNklHNTFiV0psY2lrNklHNTFiV0psY2lCN1hHNGdJSEpsZEhWeWJpQk5ZWFJvTG5KaGJtUnZiU2dwSUNvZ2NtRnVaMlU3WEc1OVhHNWNiaThxS2x4dUlDb2dSMlZ1WlhKaGRHVnpJSE5wYm1kc1pTQnlZVzVrYjIwZ2FXNTBaV2RsY2lCbWNtOXRJREFnZEc4Z2NtRnVaMlV1WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUhKaGJtZGxJRTFoZUNCblpXNWxjbUYwYVc1bklIWmhiSFZsTGx4dUlDb2dRSEpsZEhWeWJpQjdiblZ0WW1WeWZTQkJJSEpoYm1SdmJTQnBiblJsWjJWeUlHZGxibVZ5WVhSbFpDNWNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhKaGJtUnZiVWx1ZENoeVlXNW5aVG9nYm5WdFltVnlLVG9nYm5WdFltVnlJSHRjYmlBZ2NtVjBkWEp1SUUxaGRHZ3VabXh2YjNJb2NtRnVaRzl0Um14dllYUW9jbUZ1WjJVcEtUdGNibjFjYmlKZGZRPT0iLCJpbXBvcnQgeyByYW5kb21JbnQgfSBmcm9tICcuL3JhbmRvbSc7XG5leHBvcnQgY29uc3Qgc2ltaWxhcml0eU1ldHJpYyA9IHtcbiAgICAnVGFuaW1vdG8nOiB0YW5pbW90b1NpbWlsYXJpdHksXG4gICAgJ0RpY2UnOiBkaWNlU2ltaWxhcml0eSxcbiAgICAnQXN5bW1ldHJpYyc6IGFzeW1tZXRyaWNTaW1pbGFyaXR5LFxuICAgICdCcmF1bi1CbGFucXVldCc6IGJyYXVuQmxhbnF1ZXRTaW1pbGFyaXR5LFxuICAgICdDb3NpbmUnOiBjb3NpbmVTaW1pbGFyaXR5LFxuICAgICdLdWxjenluc2tpJzoga3VsY3p5bnNraVNpbWlsYXJpdHksXG4gICAgJ01jLUNvbm5hdWdoZXknOiBtY0Nvbm5hdWdoZXlTaW1pbGFyaXR5LFxuICAgICdSb2dvdC1Hb2xkYmVyZyc6IHJvZ290R29sZGJlcmdTaW1pbGFyaXR5LFxuICAgICdSdXNzZWwnOiBydXNzZWxTaW1pbGFyaXR5LFxuICAgICdTb2thbCc6IHNva2FsU2ltaWxhcml0eSxcbiAgICAnSGFtbWluZyc6IGhhbW1pbmdTaW1pbGFyaXR5LFxuICAgICdFdWNsaWRlYW4nOiBldWNsaWRlYW5TaW1pbGFyaXR5LFxufTtcbmV4cG9ydCBjb25zdCBkaXN0YW5jZU1ldHJpY3MgPSB7XG4gICAgJ1Rhbmltb3RvJzogdGFuaW1vdG9EaXN0YW5jZSxcbiAgICAnRGljZSc6IGRpY2VEaXN0YW5jZSxcbiAgICAnQXN5bW1ldHJpYyc6IGFzeW1tZXRyaWNEaXN0YW5jZSxcbiAgICAnQnJhdW4tQmxhbnF1ZXQnOiBicmF1bkJsYW5xdWV0RGlzdGFuY2UsXG4gICAgJ0Nvc2luZSc6IGNvc2luZURpc3RhbmNlLFxuICAgICdLdWxjenluc2tpJzoga3VsY3p5bnNraURpc3RhbmNlLFxuICAgICdNYy1Db25uYXVnaGV5JzogbWNDb25uYXVnaGV5RGlzdGFuY2UsXG4gICAgJ1JvZ290LUdvbGRiZXJnJzogcm9nb3RHb2xkYmVyZ0Rpc3RhbmNlLFxuICAgICdSdXNzZWwnOiBydXNzZWxEaXN0YW5jZSxcbiAgICAnU29rYWwnOiBzb2thbERpc3RhbmNlLFxuICAgICdIYW1taW5nJzogaGFtbWluZ0Rpc3RhbmNlLFxuICAgICdFdWNsaWRlYW4nOiBldWNsaWRlYW5EaXN0YW5jZSxcbn07XG5leHBvcnQgY29uc3QgQ0hFTV9TSU1JTEFSSVRZX01FVFJJQ1MgPSBbJ1Rhbmltb3RvJywgJ0RpY2UnLCAnQ29zaW5lJywgJ0hhbW1pbmcnLCAnRXVjbGlkZWFuJ107XG5leHBvcnQgZnVuY3Rpb24gdGFuaW1vdG9TaW1pbGFyaXR5KHgsIHkpIHtcbiAgICBjb25zdCB0b3RhbCA9IHgudHJ1ZUNvdW50KCkgKyB5LnRydWVDb3VudCgpO1xuICAgIGlmICh0b3RhbCA9PSAwKVxuICAgICAgICByZXR1cm4gMS4wO1xuICAgIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgICByZXR1cm4gY29tbW9uIC8gKHRvdGFsIC0gY29tbW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0YW5pbW90b0Rpc3RhbmNlKHgsIHkpIHtcbiAgICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eSh0YW5pbW90b1NpbWlsYXJpdHkoeCwgeSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRpY2VTaW1pbGFyaXR5KHgsIHkpIHtcbiAgICBjb25zdCB0b3RhbCA9IHgudHJ1ZUNvdW50KCkgKyB5LnRydWVDb3VudCgpO1xuICAgIGlmICh0b3RhbCA9PSAwKVxuICAgICAgICByZXR1cm4gMC4wO1xuICAgIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgICByZXR1cm4gMiAqIGNvbW1vbiAvIHRvdGFsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRpY2VEaXN0YW5jZSh4LCB5KSB7XG4gICAgcmV0dXJuIGdldERpc3RhbmNlRnJvbVNpbWlsYXJpdHkoZGljZVNpbWlsYXJpdHkoeCwgeSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNvc2luZVNpbWlsYXJpdHkoeCwgeSkge1xuICAgIGNvbnN0IHRvdGFsID0geC50cnVlQ291bnQoKSAqIHkudHJ1ZUNvdW50KCk7XG4gICAgaWYgKHRvdGFsID09IDApXG4gICAgICAgIHJldHVybiAwLjA7XG4gICAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICAgIHJldHVybiBjb21tb24gLyBNYXRoLnNxcnQodG90YWwpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNvc2luZURpc3RhbmNlKHgsIHkpIHtcbiAgICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShjb3NpbmVTaW1pbGFyaXR5KHgsIHkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBldWNsaWRlYW5TaW1pbGFyaXR5KHgsIHkpIHtcbiAgICByZXR1cm4gZ2V0U2ltaWxhcml0eUZyb21EaXN0YW5jZShldWNsaWRlYW5EaXN0YW5jZSh4LCB5KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZXVjbGlkZWFuRGlzdGFuY2UoeCwgeSkge1xuICAgIHJldHVybiBNYXRoLnNxcnQoeC50cnVlQ291bnQoKSArIHkudHJ1ZUNvdW50KCkgLSAyICogeC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBoYW1taW5nU2ltaWxhcml0eSh4LCB5KSB7XG4gICAgcmV0dXJuIGdldFNpbWlsYXJpdHlGcm9tRGlzdGFuY2UoaGFtbWluZ0Rpc3RhbmNlKHgsIHkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBoYW1taW5nRGlzdGFuY2UoeCwgeSkge1xuICAgIHJldHVybiB4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKSAtIDIgKiB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gc29rYWxTaW1pbGFyaXR5KHgsIHkpIHtcbiAgICBjb25zdCB0b3RhbCA9IHgudHJ1ZUNvdW50KCkgKyB5LnRydWVDb3VudCgpO1xuICAgIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgICByZXR1cm4gY29tbW9uIC8gKDIgKiB0b3RhbCAtIDMgKiBjb21tb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNva2FsRGlzdGFuY2UoeCwgeSkge1xuICAgIHJldHVybiBnZXREaXN0YW5jZUZyb21TaW1pbGFyaXR5KHNva2FsU2ltaWxhcml0eSh4LCB5KSk7XG59XG5leHBvcnQgZnVuY3Rpb24ga3VsY3p5bnNraVNpbWlsYXJpdHkoeCwgeSkge1xuICAgIGNvbnN0IHRvdGFsID0geC50cnVlQ291bnQoKSArIHkudHJ1ZUNvdW50KCk7XG4gICAgY29uc3QgdG90YWxQcm9kID0geC50cnVlQ291bnQoKSAqIHkudHJ1ZUNvdW50KCk7XG4gICAgaWYgKHRvdGFsUHJvZCA9PSAwKVxuICAgICAgICByZXR1cm4gMC4wO1xuICAgIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgICByZXR1cm4gKGNvbW1vbiAqIHRvdGFsKSAvICgyICogdG90YWxQcm9kKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBrdWxjenluc2tpRGlzdGFuY2UoeCwgeSkge1xuICAgIHJldHVybiBnZXREaXN0YW5jZUZyb21TaW1pbGFyaXR5KGt1bGN6eW5za2lTaW1pbGFyaXR5KHgsIHkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtY0Nvbm5hdWdoZXlTaW1pbGFyaXR5KHgsIHkpIHtcbiAgICBjb25zdCB0b3RhbCA9IHgudHJ1ZUNvdW50KCkgKyB5LnRydWVDb3VudCgpO1xuICAgIGNvbnN0IHRvdGFsUHJvZCA9IHgudHJ1ZUNvdW50KCkgKiB5LnRydWVDb3VudCgpO1xuICAgIGlmICh0b3RhbFByb2QgPT0gMClcbiAgICAgICAgcmV0dXJuIDAuMDtcbiAgICBjb25zdCBjb21tb24gPSB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG4gICAgcmV0dXJuIChjb21tb24gKiB0b3RhbCAtIHRvdGFsUHJvZCkgLyB0b3RhbFByb2Q7XG59XG5leHBvcnQgZnVuY3Rpb24gbWNDb25uYXVnaGV5RGlzdGFuY2UoeCwgeSkge1xuICAgIHJldHVybiBnZXREaXN0YW5jZUZyb21TaW1pbGFyaXR5KG1jQ29ubmF1Z2hleVNpbWlsYXJpdHkoeCwgeSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFzeW1tZXRyaWNTaW1pbGFyaXR5KHgsIHkpIHtcbiAgICBjb25zdCBtaW4gPSBNYXRoLm1pbih4LnRydWVDb3VudCgpLCB5LnRydWVDb3VudCgpKTtcbiAgICBpZiAobWluID09IDApXG4gICAgICAgIHJldHVybiAwLjA7XG4gICAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICAgIHJldHVybiBjb21tb24gLyBtaW47XG59XG5leHBvcnQgZnVuY3Rpb24gYXN5bW1ldHJpY0Rpc3RhbmNlKHgsIHkpIHtcbiAgICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShhc3ltbWV0cmljU2ltaWxhcml0eSh4LCB5KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYnJhdW5CbGFucXVldFNpbWlsYXJpdHkoeCwgeSkge1xuICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KHgudHJ1ZUNvdW50KCksIHkudHJ1ZUNvdW50KCkpO1xuICAgIGlmIChtYXggPT0gMClcbiAgICAgICAgcmV0dXJuIDAuMDtcbiAgICBjb25zdCBjb21tb24gPSB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG4gICAgcmV0dXJuIGNvbW1vbiAvIG1heDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBicmF1bkJsYW5xdWV0RGlzdGFuY2UoeCwgeSkge1xuICAgIHJldHVybiBnZXREaXN0YW5jZUZyb21TaW1pbGFyaXR5KGJyYXVuQmxhbnF1ZXRTaW1pbGFyaXR5KHgsIHkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBydXNzZWxTaW1pbGFyaXR5KHgsIHkpIHtcbiAgICBpZiAoeC5sZW5ndGggPT0gMClcbiAgICAgICAgcmV0dXJuIDAuMDtcbiAgICBjb25zdCBjb21tb24gPSB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG4gICAgcmV0dXJuIGNvbW1vbiAvIHgubGVuZ3RoO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJ1c3NlbERpc3RhbmNlKHgsIHkpIHtcbiAgICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShydXNzZWxTaW1pbGFyaXR5KHgsIHkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByb2dvdEdvbGRiZXJnU2ltaWxhcml0eSh4LCB5KSB7XG4gICAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICAgIGNvbnN0IHRvdGFsID0geC5jb3VudEJpdHModHJ1ZSkgKyB5LmNvdW50Qml0cyh0cnVlKTtcbiAgICBjb25zdCBsZW4gPSB4Lmxlbmd0aDtcbiAgICBjb25zdCBkaWZmID0gbGVuIC0gdG90YWwgKyBjb21tb247XG4gICAgaWYgKChjb21tb24gPT0gbGVuKSB8fCAoZGlmZiA9PSBsZW4pKVxuICAgICAgICByZXR1cm4gMS4wO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGNvbW1vbiAvIHRvdGFsICsgZGlmZiAvICgyICogbGVuIC0gdG90YWwpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJvZ290R29sZGJlcmdEaXN0YW5jZSh4LCB5KSB7XG4gICAgcmV0dXJuIGdldERpc3RhbmNlRnJvbVNpbWlsYXJpdHkocm9nb3RHb2xkYmVyZ1NpbWlsYXJpdHkoeCwgeSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFNpbWlsYXJpdHlGcm9tRGlzdGFuY2UoZGlzdGFuY2UpIHtcbiAgICByZXR1cm4gMSAvICgxICsgZGlzdGFuY2UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERpc3RhbmNlRnJvbVNpbWlsYXJpdHkoc2ltaWxhcml0eSkge1xuICAgIHJldHVybiAxIC8gc2ltaWxhcml0eSAtIDE7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGl2ZXJzZVN1YnNldChsZW5ndGgsIG4sIGRpc3QpIHtcbiAgICBmdW5jdGlvbiBtYXhCeSh2YWx1ZXMsIG9yZGVyQnkpIHtcbiAgICAgICAgbGV0IG1heFZhbHVlID0gbnVsbDtcbiAgICAgICAgbGV0IG1heE9yZGVyQnkgPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50T3JkZXJCeSA9IG9yZGVyQnkoZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAobWF4T3JkZXJCeSA9PSBudWxsIHx8IGVsZW1lbnRPcmRlckJ5ID4gbWF4T3JkZXJCeSkge1xuICAgICAgICAgICAgICAgIG1heFZhbHVlID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICBtYXhPcmRlckJ5ID0gZWxlbWVudE9yZGVyQnk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heFZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBzdWJzZXQgPSBbcmFuZG9tSW50KGxlbmd0aCAtIDEpXTtcbiAgICBjb25zdCBjb21wbGVtZW50ID0gbmV3IFNldCgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKCFzdWJzZXQuaW5jbHVkZXMoaSkpXG4gICAgICAgICAgICBjb21wbGVtZW50LmFkZChpKTtcbiAgICB9XG4gICAgd2hpbGUgKHN1YnNldC5sZW5ndGggPCBuKSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IG1heEJ5KGNvbXBsZW1lbnQudmFsdWVzKCksIChpKSA9PiBNYXRoLm1pbi5hcHBseShNYXRoLCBzdWJzZXQubWFwKGZ1bmN0aW9uICh2YWwsIGluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gZGlzdChpLCB2YWwpO1xuICAgICAgICB9KSkpO1xuICAgICAgICBpZiAoaWR4KSB7XG4gICAgICAgICAgICBzdWJzZXQucHVzaChpZHgpO1xuICAgICAgICAgICAgY29tcGxlbWVudC5kZWxldGUoaWR4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3Vic2V0O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYzJsdGFXeGhjbWwwZVMxdFpYUnlhV056TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2ljMmx0YVd4aGNtbDBlUzF0WlhSeWFXTnpMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVOQkxFOUJRVThzUlVGQlF5eFRRVUZUTEVWQlFVTXNUVUZCVFN4VlFVRlZMRU5CUVVNN1FVRkZia01zVFVGQlRTeERRVUZETEUxQlFVMHNaMEpCUVdkQ0xFZEJRVEpFTzBsQlEzUkdMRlZCUVZVc1JVRkJSU3hyUWtGQmEwSTdTVUZET1VJc1RVRkJUU3hGUVVGRkxHTkJRV003U1VGRGRFSXNXVUZCV1N4RlFVRkZMRzlDUVVGdlFqdEpRVU5zUXl4blFrRkJaMElzUlVGQlJTeDFRa0ZCZFVJN1NVRkRla01zVVVGQlVTeEZRVUZGTEdkQ1FVRm5RanRKUVVNeFFpeFpRVUZaTEVWQlFVVXNiMEpCUVc5Q08wbEJRMnhETEdWQlFXVXNSVUZCUlN4elFrRkJjMEk3U1VGRGRrTXNaMEpCUVdkQ0xFVkJRVVVzZFVKQlFYVkNPMGxCUTNwRExGRkJRVkVzUlVGQlJTeG5Ra0ZCWjBJN1NVRkRNVUlzVDBGQlR5eEZRVUZGTEdWQlFXVTdTVUZEZUVJc1UwRkJVeXhGUVVGRkxHbENRVUZwUWp0SlFVTTFRaXhYUVVGWExFVkJRVVVzYlVKQlFXMUNPME5CUTJwRExFTkJRVU03UVVGRlJpeE5RVUZOTEVOQlFVTXNUVUZCVFN4bFFVRmxMRWRCUVRKRU8wbEJRM0pHTEZWQlFWVXNSVUZCUlN4blFrRkJaMEk3U1VGRE5VSXNUVUZCVFN4RlFVRkZMRmxCUVZrN1NVRkRjRUlzV1VGQldTeEZRVUZGTEd0Q1FVRnJRanRKUVVOb1F5eG5Ra0ZCWjBJc1JVRkJSU3h4UWtGQmNVSTdTVUZEZGtNc1VVRkJVU3hGUVVGRkxHTkJRV003U1VGRGVFSXNXVUZCV1N4RlFVRkZMR3RDUVVGclFqdEpRVU5vUXl4bFFVRmxMRVZCUVVVc2IwSkJRVzlDTzBsQlEzSkRMR2RDUVVGblFpeEZRVUZGTEhGQ1FVRnhRanRKUVVOMlF5eFJRVUZSTEVWQlFVVXNZMEZCWXp0SlFVTjRRaXhQUVVGUExFVkJRVVVzWVVGQllUdEpRVU4wUWl4VFFVRlRMRVZCUVVVc1pVRkJaVHRKUVVNeFFpeFhRVUZYTEVWQlFVVXNhVUpCUVdsQ08wTkJReTlDTEVOQlFVTTdRVUZGUml4TlFVRk5MRU5CUVVNc1RVRkJUU3gxUWtGQmRVSXNSMEZCUnl4RFFVRkRMRlZCUVZVc1JVRkJSU3hOUVVGTkxFVkJRVVVzVVVGQlVTeEZRVUZGTEZOQlFWTXNSVUZCUlN4WFFVRlhMRU5CUVVNc1EwRkJRenRCUVVVNVJpeE5RVUZOTEZWQlFWVXNhMEpCUVd0Q0xFTkJRVU1zUTBGQlZ5eEZRVUZGTEVOQlFWYzdTVUZEZWtRc1RVRkJUU3hMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETEZOQlFWTXNSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJReXhUUVVGVExFVkJRVVVzUTBGQlF6dEpRVU0xUXl4SlFVRkpMRXRCUVVzc1NVRkJTU3hEUVVGRE8xRkJRMW9zVDBGQlR5eEhRVUZITEVOQlFVTTdTVUZEWWl4TlFVRk5MRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzBsQlF6TkRMRTlCUVU4c1RVRkJUU3hIUVVGSExFTkJRVU1zUzBGQlN5eEhRVUZITEUxQlFVMHNRMEZCUXl4RFFVRkRPMEZCUTI1RExFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNaMEpCUVdkQ0xFTkJRVU1zUTBGQlZ5eEZRVUZGTEVOQlFWYzdTVUZEZGtRc1QwRkJUeXg1UWtGQmVVSXNRMEZCUXl4clFrRkJhMElzUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNM1JDeERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMR05CUVdNc1EwRkJReXhEUVVGWExFVkJRVVVzUTBGQlZ6dEpRVU55UkN4TlFVRk5MRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU1zVTBGQlV5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8wbEJRelZETEVsQlFVa3NTMEZCU3l4SlFVRkpMRU5CUVVNN1VVRkRXaXhQUVVGUExFZEJRVWNzUTBGQlF6dEpRVU5pTEUxQlFVMHNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRE0wTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1RVRkJUU3hIUVVGSExFdEJRVXNzUTBGQlF6dEJRVU0xUWl4RFFVRkRPMEZCUlVRc1RVRkJUU3hWUVVGVkxGbEJRVmtzUTBGQlF5eERRVUZYTEVWQlFVVXNRMEZCVnp0SlFVTnVSQ3hQUVVGUExIbENRVUY1UWl4RFFVRkRMR05CUVdNc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTjZSQ3hEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEdkQ1FVRm5RaXhEUVVGRExFTkJRVmNzUlVGQlJTeERRVUZYTzBsQlEzWkVMRTFCUVUwc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF5eFRRVUZUTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNc1UwRkJVeXhGUVVGRkxFTkJRVU03U1VGRE5VTXNTVUZCU1N4TFFVRkxMRWxCUVVrc1EwRkJRenRSUVVOYUxFOUJRVThzUjBGQlJ5eERRVUZETzBsQlEySXNUVUZCVFN4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRExHZENRVUZuUWl4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVU16UXl4UFFVRlBMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTI1RExFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNZMEZCWXl4RFFVRkRMRU5CUVZjc1JVRkJSU3hEUVVGWE8wbEJRM0pFTEU5QlFVOHNlVUpCUVhsQ0xFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZETTBRc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeHRRa0ZCYlVJc1EwRkJReXhEUVVGWExFVkJRVVVzUTBGQlZ6dEpRVU14UkN4UFFVRlBMSGxDUVVGNVFpeERRVUZETEdsQ1FVRnBRaXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpWRUxFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNhVUpCUVdsQ0xFTkJRVU1zUTBGQlZ5eEZRVUZGTEVOQlFWYzdTVUZEZUVRc1QwRkJUeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4VFFVRlRMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU1zVTBGQlV5eEZRVUZGTEVkQlFVY3NRMEZCUXl4SFFVRkRMRU5CUVVNc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU5zUml4RFFVRkRPMEZCUlVRc1RVRkJUU3hWUVVGVkxHbENRVUZwUWl4RFFVRkRMRU5CUVZjc1JVRkJSU3hEUVVGWE8wbEJRM2hFTEU5QlFVOHNlVUpCUVhsQ0xFTkJRVU1zWlVGQlpTeERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRekZFTEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc1pVRkJaU3hEUVVGRExFTkJRVmNzUlVGQlJTeERRVUZYTzBsQlEzUkVMRTlCUVU4c1EwRkJReXhEUVVGRExGTkJRVk1zUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXl4VFFVRlRMRVZCUVVVc1IwRkJSeXhEUVVGRExFZEJRVU1zUTBGQlF5eERRVUZETEdkQ1FVRm5RaXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0QlFVTjJSU3hEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEdWQlFXVXNRMEZCUXl4RFFVRlhMRVZCUVVVc1EwRkJWenRKUVVOMFJDeE5RVUZOTEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNc1UwRkJVeXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkRPMGxCUXpWRExFMUJRVTBzVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4blFrRkJaMElzUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1NVRkRNME1zVDBGQlR5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1MwRkJTeXhIUVVGSExFTkJRVU1zUjBGQlJ5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTXpReXhEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEdGQlFXRXNRMEZCUXl4RFFVRlhMRVZCUVVVc1EwRkJWenRKUVVOd1JDeFBRVUZQTEhsQ1FVRjVRaXhEUVVGRExHVkJRV1VzUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNeFJDeERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMRzlDUVVGdlFpeERRVUZETEVOQlFWY3NSVUZCUlN4RFFVRlhPMGxCUXpORUxFMUJRVTBzUzBGQlN5eEhRVUZITEVOQlFVTXNRMEZCUXl4VFFVRlRMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU1zVTBGQlV5eEZRVUZGTEVOQlFVTTdTVUZETlVNc1RVRkJUU3hUUVVGVExFZEJRVWNzUTBGQlF5eERRVUZETEZOQlFWTXNSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJReXhUUVVGVExFVkJRVVVzUTBGQlF6dEpRVU5vUkN4SlFVRkpMRk5CUVZNc1NVRkJTU3hEUVVGRE8xRkJRMmhDTEU5QlFVOHNSMEZCUnl4RFFVRkRPMGxCUTJJc1RVRkJUU3hOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEdkQ1FVRm5RaXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTXpReXhQUVVGUExFTkJRVU1zVFVGQlRTeEhRVUZITEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExGTkJRVk1zUTBGQlF5eERRVUZETzBGQlF6VkRMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzYTBKQlFXdENMRU5CUVVNc1EwRkJWeXhGUVVGRkxFTkJRVmM3U1VGRGVrUXNUMEZCVHl4NVFrRkJlVUlzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTXZSQ3hEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEhOQ1FVRnpRaXhEUVVGRExFTkJRVmNzUlVGQlJTeERRVUZYTzBsQlF6ZEVMRTFCUVUwc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF5eFRRVUZUTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNc1UwRkJVeXhGUVVGRkxFTkJRVU03U1VGRE5VTXNUVUZCVFN4VFFVRlRMRWRCUVVjc1EwRkJReXhEUVVGRExGTkJRVk1zUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXl4VFFVRlRMRVZCUVVVc1EwRkJRenRKUVVOb1JDeEpRVUZKTEZOQlFWTXNTVUZCU1N4RFFVRkRPMUZCUTJoQ0xFOUJRVThzUjBGQlJ5eERRVUZETzBsQlEySXNUVUZCVFN4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRExHZENRVUZuUWl4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVU16UXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hIUVVGSExFdEJRVXNzUjBGQlJ5eFRRVUZUTEVOQlFVTXNSMEZCUnl4VFFVRlRMRU5CUVVNN1FVRkRiRVFzUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4dlFrRkJiMElzUTBGQlF5eERRVUZYTEVWQlFVVXNRMEZCVnp0SlFVTXpSQ3hQUVVGUExIbENRVUY1UWl4RFFVRkRMSE5DUVVGelFpeERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRMnBGTEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc2IwSkJRVzlDTEVOQlFVTXNRMEZCVnl4RlFVRkZMRU5CUVZjN1NVRkRNMFFzVFVGQlRTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRExFTkJRVU03U1VGRGJrUXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJRenRSUVVOV0xFOUJRVThzUjBGQlJ5eERRVUZETzBsQlEySXNUVUZCVFN4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRExHZENRVUZuUWl4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVU16UXl4UFFVRlBMRTFCUVUwc1IwRkJSeXhIUVVGSExFTkJRVU03UVVGRGRFSXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3hyUWtGQmEwSXNRMEZCUXl4RFFVRlhMRVZCUVVVc1EwRkJWenRKUVVONlJDeFBRVUZQTEhsQ1FVRjVRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlF5OUVMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzZFVKQlFYVkNMRU5CUVVNc1EwRkJWeXhGUVVGRkxFTkJRVmM3U1VGRE9VUXNUVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNVMEZCVXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZETEVOQlFVTTdTVUZEYmtRc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF6dFJRVU5XTEU5QlFVOHNSMEZCUnl4RFFVRkRPMGxCUTJJc1RVRkJUU3hOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEdkQ1FVRm5RaXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTXpReXhQUVVGUExFMUJRVTBzUjBGQlJ5eEhRVUZITEVOQlFVTTdRVUZEZEVJc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeHhRa0ZCY1VJc1EwRkJReXhEUVVGWExFVkJRVVVzUTBGQlZ6dEpRVU0xUkN4UFFVRlBMSGxDUVVGNVFpeERRVUZETEhWQ1FVRjFRaXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTJ4RkxFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNaMEpCUVdkQ0xFTkJRVU1zUTBGQlZ5eEZRVUZGTEVOQlFWYzdTVUZEZGtRc1NVRkJTU3hEUVVGRExFTkJRVU1zVFVGQlRTeEpRVUZKTEVOQlFVTTdVVUZEWml4UFFVRlBMRWRCUVVjc1EwRkJRenRKUVVOaUxFMUJRVTBzVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4blFrRkJaMElzUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1NVRkRNME1zVDBGQlR5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJRenRCUVVNelFpeERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMR05CUVdNc1EwRkJReXhEUVVGWExFVkJRVVVzUTBGQlZ6dEpRVU55UkN4UFFVRlBMSGxDUVVGNVFpeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpORUxFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNkVUpCUVhWQ0xFTkJRVU1zUTBGQlZ5eEZRVUZGTEVOQlFWYzdTVUZET1VRc1RVRkJUU3hOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEdkQ1FVRm5RaXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTXpReXhOUVVGTkxFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1NVRkRjRVFzVFVGQlRTeEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJRenRKUVVOeVFpeE5RVUZOTEVsQlFVa3NSMEZCUnl4SFFVRkhMRWRCUVVjc1MwRkJTeXhIUVVGSExFMUJRVTBzUTBGQlF6dEpRVU5zUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hKUVVGSkxFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SlFVRkpMRWRCUVVjc1EwRkJRenRSUVVGRkxFOUJRVThzUjBGQlJ5eERRVUZET3p0UlFVTTFReXhQUVVGUExFMUJRVTBzUjBGQlJ5eExRVUZMTEVkQlFVY3NTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFZEJRVWNzUjBGQlJ5eExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTjRSQ3hEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEhGQ1FVRnhRaXhEUVVGRExFTkJRVmNzUlVGQlJTeERRVUZYTzBsQlF6VkVMRTlCUVU4c2VVSkJRWGxDTEVOQlFVTXNkVUpCUVhWQ0xFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRiRVVzUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4NVFrRkJlVUlzUTBGQlF5eFJRVUZuUWp0SlFVTjRSQ3hQUVVGUExFTkJRVU1zUjBGQlF5eERRVUZETEVOQlFVTXNSMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRCUVVONFFpeERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMSGxDUVVGNVFpeERRVUZETEZWQlFXdENPMGxCUXpGRUxFOUJRVThzUTBGQlF5eEhRVUZETEZWQlFWVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1FVRkRNVUlzUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4blFrRkJaMElzUTBGQlF5eE5RVUZqTEVWQlFVVXNRMEZCVXl4RlFVRkZMRWxCUVhkRE8wbEJRMnhITEZOQlFWTXNTMEZCU3l4RFFVRkRMRTFCUVdkRExFVkJRVVVzVDBGQk9FSTdVVUZETjBVc1NVRkJTU3hSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETzFGQlEzQkNMRWxCUVVrc1ZVRkJWU3hIUVVGSExFbEJRVWtzUTBGQlF6dFJRVVYwUWl4TFFVRkxMRTFCUVUwc1QwRkJUeXhKUVVGSkxFMUJRVTBzUlVGQlJUdFpRVU0xUWl4TlFVRk5MR05CUVdNc1IwRkJSeXhQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdXVUZEZUVNc1NVRkJTU3hWUVVGVkxFbEJRVWtzU1VGQlNTeEpRVUZKTEdOQlFXTXNSMEZCUnl4VlFVRlZMRVZCUVVVN1owSkJRM0pFTEZGQlFWRXNSMEZCUnl4UFFVRlBMRU5CUVVNN1owSkJRMjVDTEZWQlFWVXNSMEZCUnl4alFVRmpMRU5CUVVNN1lVRkROMEk3VTBGRFJqdFJRVU5FTEU5QlFVOHNVVUZCVVN4RFFVRkRPMGxCUTJ4Q0xFTkJRVU03U1VGRlJDeE5RVUZOTEUxQlFVMHNSMEZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTjJReXhOUVVGTkxGVkJRVlVzUjBGQlJ5eEpRVUZKTEVkQlFVY3NSVUZCUlN4RFFVRkRPMGxCUlRkQ0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhOUVVGTkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVTdVVUZETDBJc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTNKQ0xGVkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1MwRkRja0k3U1VGRlJDeFBRVUZQTEUxQlFVMHNRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhGUVVGRk8xRkJRM2hDTEUxQlFVMHNSMEZCUnl4SFFVRkhMRXRCUVVzc1EwRkRaaXhWUVVGVkxFTkJRVU1zVFVGQlRTeEZRVUU0UWl4RlFVTXZReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeEZRVUZGTEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1ZVRkJVeXhIUVVGSExFVkJRVVVzUzBGQlN6dFpRVU40UkN4UFFVRlBMRWxCUVVrc1EwRkJReXhEUVVGRExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEZEVJc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlExQXNTVUZCU1N4SFFVRkhMRVZCUVVVN1dVRkRVQ3hOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTJwQ0xGVkJRVlVzUTBGQlF5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1UwRkRlRUk3UzBGRFJqdEpRVU5FTEU5QlFVOHNUVUZCVFN4RFFVRkRPMEZCUTJoQ0xFTkJRVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnUW1sMFFYSnlZWGtnWm5KdmJTQW5MaTlpYVhRdFlYSnlZWGtuTzF4dWFXMXdiM0owSUh0eVlXNWtiMjFKYm5SOUlHWnliMjBnSnk0dmNtRnVaRzl0Snp0Y2JseHVaWGh3YjNKMElHTnZibk4wSUhOcGJXbHNZWEpwZEhsTlpYUnlhV002SUh0YmJtRnRaVG9nYzNSeWFXNW5YVG9nS0hnNklFSnBkRUZ5Y21GNUxDQjVPaUJDYVhSQmNuSmhlU2tnUFQ0Z2JuVnRZbVZ5ZlNBOUlIdGNiaUFnSjFSaGJtbHRiM1J2SnpvZ2RHRnVhVzF2ZEc5VGFXMXBiR0Z5YVhSNUxGeHVJQ0FuUkdsalpTYzZJR1JwWTJWVGFXMXBiR0Z5YVhSNUxGeHVJQ0FuUVhONWJXMWxkSEpwWXljNklHRnplVzF0WlhSeWFXTlRhVzFwYkdGeWFYUjVMRnh1SUNBblFuSmhkVzR0UW14aGJuRjFaWFFuT2lCaWNtRjFia0pzWVc1eGRXVjBVMmx0YVd4aGNtbDBlU3hjYmlBZ0owTnZjMmx1WlNjNklHTnZjMmx1WlZOcGJXbHNZWEpwZEhrc1hHNGdJQ2RMZFd4amVubHVjMnRwSnpvZ2EzVnNZM3A1Ym5OcmFWTnBiV2xzWVhKcGRIa3NYRzRnSUNkTll5MURiMjV1WVhWbmFHVjVKem9nYldORGIyNXVZWFZuYUdWNVUybHRhV3hoY21sMGVTeGNiaUFnSjFKdloyOTBMVWR2YkdSaVpYSm5Kem9nY205bmIzUkhiMnhrWW1WeVoxTnBiV2xzWVhKcGRIa3NYRzRnSUNkU2RYTnpaV3duT2lCeWRYTnpaV3hUYVcxcGJHRnlhWFI1TEZ4dUlDQW5VMjlyWVd3bk9pQnpiMnRoYkZOcGJXbHNZWEpwZEhrc1hHNGdJQ2RJWVcxdGFXNW5Kem9nYUdGdGJXbHVaMU5wYldsc1lYSnBkSGtzWEc0Z0lDZEZkV05zYVdSbFlXNG5PaUJsZFdOc2FXUmxZVzVUYVcxcGJHRnlhWFI1TEZ4dWZUdGNibHh1Wlhod2IzSjBJR052Ym5OMElHUnBjM1JoYm1ObFRXVjBjbWxqY3pvZ2UxdHVZVzFsT2lCemRISnBibWRkT2lBb2VEb2dRbWwwUVhKeVlYa3NJSGs2SUVKcGRFRnljbUY1S1NBOVBpQnVkVzFpWlhKOUlEMGdlMXh1SUNBblZHRnVhVzF2ZEc4bk9pQjBZVzVwYlc5MGIwUnBjM1JoYm1ObExGeHVJQ0FuUkdsalpTYzZJR1JwWTJWRWFYTjBZVzVqWlN4Y2JpQWdKMEZ6ZVcxdFpYUnlhV01uT2lCaGMzbHRiV1YwY21salJHbHpkR0Z1WTJVc1hHNGdJQ2RDY21GMWJpMUNiR0Z1Y1hWbGRDYzZJR0p5WVhWdVFteGhibkYxWlhSRWFYTjBZVzVqWlN4Y2JpQWdKME52YzJsdVpTYzZJR052YzJsdVpVUnBjM1JoYm1ObExGeHVJQ0FuUzNWc1kzcDVibk5yYVNjNklHdDFiR042ZVc1emEybEVhWE4wWVc1alpTeGNiaUFnSjAxakxVTnZibTVoZFdkb1pYa25PaUJ0WTBOdmJtNWhkV2RvWlhsRWFYTjBZVzVqWlN4Y2JpQWdKMUp2WjI5MExVZHZiR1JpWlhKbkp6b2djbTluYjNSSGIyeGtZbVZ5WjBScGMzUmhibU5sTEZ4dUlDQW5VblZ6YzJWc0p6b2djblZ6YzJWc1JHbHpkR0Z1WTJVc1hHNGdJQ2RUYjJ0aGJDYzZJSE52YTJGc1JHbHpkR0Z1WTJVc1hHNGdJQ2RJWVcxdGFXNW5Kem9nYUdGdGJXbHVaMFJwYzNSaGJtTmxMRnh1SUNBblJYVmpiR2xrWldGdUp6b2daWFZqYkdsa1pXRnVSR2x6ZEdGdVkyVXNYRzU5TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnUTBoRlRWOVRTVTFKVEVGU1NWUlpYMDFGVkZKSlExTWdQU0JiSjFSaGJtbHRiM1J2Snl3Z0owUnBZMlVuTENBblEyOXphVzVsSnl3Z0owaGhiVzFwYm1jbkxDQW5SWFZqYkdsa1pXRnVKMTA3WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCMFlXNXBiVzkwYjFOcGJXbHNZWEpwZEhrb2VEb2dRbWwwUVhKeVlYa3NJSGs2SUVKcGRFRnljbUY1S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdZMjl1YzNRZ2RHOTBZV3dnUFNCNExuUnlkV1ZEYjNWdWRDZ3BJQ3NnZVM1MGNuVmxRMjkxYm5Rb0tUdGNiaUFnYVdZZ0tIUnZkR0ZzSUQwOUlEQXBYRzRnSUNBZ2NtVjBkWEp1SURFdU1EdGNiaUFnWTI5dWMzUWdZMjl0Ylc5dUlEMGdlQzVoYm1SWGFYUm9RMjkxYm5SQ2FYUnpLSGtzSUhSeWRXVXBPMXh1SUNCeVpYUjFjbTRnWTI5dGJXOXVJQzhnS0hSdmRHRnNJQzBnWTI5dGJXOXVLVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlIUmhibWx0YjNSdlJHbHpkR0Z1WTJVb2VEb2dRbWwwUVhKeVlYa3NJSGs2SUVKcGRFRnljbUY1S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdjbVYwZFhKdUlHZGxkRVJwYzNSaGJtTmxSbkp2YlZOcGJXbHNZWEpwZEhrb2RHRnVhVzF2ZEc5VGFXMXBiR0Z5YVhSNUtIZ3NJSGtwS1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR1JwWTJWVGFXMXBiR0Z5YVhSNUtIZzZJRUpwZEVGeWNtRjVMQ0I1T2lCQ2FYUkJjbkpoZVNrNklHNTFiV0psY2lCN1hHNGdJR052Ym5OMElIUnZkR0ZzSUQwZ2VDNTBjblZsUTI5MWJuUW9LU0FySUhrdWRISjFaVU52ZFc1MEtDazdYRzRnSUdsbUlDaDBiM1JoYkNBOVBTQXdLVnh1SUNBZ0lISmxkSFZ5YmlBd0xqQTdYRzRnSUdOdmJuTjBJR052YlcxdmJpQTlJSGd1WVc1a1YybDBhRU52ZFc1MFFtbDBjeWg1TENCMGNuVmxLVHRjYmlBZ2NtVjBkWEp1SURJZ0tpQmpiMjF0YjI0Z0x5QjBiM1JoYkR0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR1JwWTJWRWFYTjBZVzVqWlNoNE9pQkNhWFJCY25KaGVTd2dlVG9nUW1sMFFYSnlZWGtwT2lCdWRXMWlaWElnZTF4dUlDQnlaWFIxY200Z1oyVjBSR2x6ZEdGdVkyVkdjbTl0VTJsdGFXeGhjbWwwZVNoa2FXTmxVMmx0YVd4aGNtbDBlU2g0TENCNUtTazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCamIzTnBibVZUYVcxcGJHRnlhWFI1S0hnNklFSnBkRUZ5Y21GNUxDQjVPaUJDYVhSQmNuSmhlU2s2SUc1MWJXSmxjaUI3WEc0Z0lHTnZibk4wSUhSdmRHRnNJRDBnZUM1MGNuVmxRMjkxYm5Rb0tTQXFJSGt1ZEhKMVpVTnZkVzUwS0NrN1hHNGdJR2xtSUNoMGIzUmhiQ0E5UFNBd0tWeHVJQ0FnSUhKbGRIVnliaUF3TGpBN1hHNGdJR052Ym5OMElHTnZiVzF2YmlBOUlIZ3VZVzVrVjJsMGFFTnZkVzUwUW1sMGN5aDVMQ0IwY25WbEtUdGNiaUFnY21WMGRYSnVJR052YlcxdmJpQXZJRTFoZEdndWMzRnlkQ2gwYjNSaGJDazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCamIzTnBibVZFYVhOMFlXNWpaU2g0T2lCQ2FYUkJjbkpoZVN3Z2VUb2dRbWwwUVhKeVlYa3BPaUJ1ZFcxaVpYSWdlMXh1SUNCeVpYUjFjbTRnWjJWMFJHbHpkR0Z1WTJWR2NtOXRVMmx0YVd4aGNtbDBlU2hqYjNOcGJtVlRhVzFwYkdGeWFYUjVLSGdzSUhrcEtUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdWMVkyeHBaR1ZoYmxOcGJXbHNZWEpwZEhrb2VEb2dRbWwwUVhKeVlYa3NJSGs2SUVKcGRFRnljbUY1S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdjbVYwZFhKdUlHZGxkRk5wYldsc1lYSnBkSGxHY205dFJHbHpkR0Z1WTJVb1pYVmpiR2xrWldGdVJHbHpkR0Z1WTJVb2VDd2dlU2twTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdaWFZqYkdsa1pXRnVSR2x6ZEdGdVkyVW9lRG9nUW1sMFFYSnlZWGtzSUhrNklFSnBkRUZ5Y21GNUtUb2diblZ0WW1WeUlIdGNiaUFnY21WMGRYSnVJRTFoZEdndWMzRnlkQ2g0TG5SeWRXVkRiM1Z1ZENncElDc2dlUzUwY25WbFEyOTFiblFvS1NBdElESXFlQzVoYm1SWGFYUm9RMjkxYm5SQ2FYUnpLSGtzSUhSeWRXVXBLVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHaGhiVzFwYm1kVGFXMXBiR0Z5YVhSNUtIZzZJRUpwZEVGeWNtRjVMQ0I1T2lCQ2FYUkJjbkpoZVNrNklHNTFiV0psY2lCN1hHNGdJSEpsZEhWeWJpQm5aWFJUYVcxcGJHRnlhWFI1Um5KdmJVUnBjM1JoYm1ObEtHaGhiVzFwYm1kRWFYTjBZVzVqWlNoNExDQjVLU2s3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQm9ZVzF0YVc1blJHbHpkR0Z1WTJVb2VEb2dRbWwwUVhKeVlYa3NJSGs2SUVKcGRFRnljbUY1S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdjbVYwZFhKdUlIZ3VkSEoxWlVOdmRXNTBLQ2tnS3lCNUxuUnlkV1ZEYjNWdWRDZ3BJQzBnTWlwNExtRnVaRmRwZEdoRGIzVnVkRUpwZEhNb2VTd2dkSEoxWlNrN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ6YjJ0aGJGTnBiV2xzWVhKcGRIa29lRG9nUW1sMFFYSnlZWGtzSUhrNklFSnBkRUZ5Y21GNUtUb2diblZ0WW1WeUlIdGNiaUFnWTI5dWMzUWdkRzkwWVd3Z1BTQjRMblJ5ZFdWRGIzVnVkQ2dwSUNzZ2VTNTBjblZsUTI5MWJuUW9LVHRjYmlBZ1kyOXVjM1FnWTI5dGJXOXVJRDBnZUM1aGJtUlhhWFJvUTI5MWJuUkNhWFJ6S0hrc0lIUnlkV1VwTzF4dUlDQnlaWFIxY200Z1kyOXRiVzl1SUM4Z0tESWdLaUIwYjNSaGJDQXRJRE1nS2lCamIyMXRiMjRwTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdjMjlyWVd4RWFYTjBZVzVqWlNoNE9pQkNhWFJCY25KaGVTd2dlVG9nUW1sMFFYSnlZWGtwT2lCdWRXMWlaWElnZTF4dUlDQnlaWFIxY200Z1oyVjBSR2x6ZEdGdVkyVkdjbTl0VTJsdGFXeGhjbWwwZVNoemIydGhiRk5wYldsc1lYSnBkSGtvZUN3Z2VTa3BPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2EzVnNZM3A1Ym5OcmFWTnBiV2xzWVhKcGRIa29lRG9nUW1sMFFYSnlZWGtzSUhrNklFSnBkRUZ5Y21GNUtUb2diblZ0WW1WeUlIdGNiaUFnWTI5dWMzUWdkRzkwWVd3Z1BTQjRMblJ5ZFdWRGIzVnVkQ2dwSUNzZ2VTNTBjblZsUTI5MWJuUW9LVHRjYmlBZ1kyOXVjM1FnZEc5MFlXeFFjbTlrSUQwZ2VDNTBjblZsUTI5MWJuUW9LU0FxSUhrdWRISjFaVU52ZFc1MEtDazdYRzRnSUdsbUlDaDBiM1JoYkZCeWIyUWdQVDBnTUNsY2JpQWdJQ0J5WlhSMWNtNGdNQzR3TzF4dUlDQmpiMjV6ZENCamIyMXRiMjRnUFNCNExtRnVaRmRwZEdoRGIzVnVkRUpwZEhNb2VTd2dkSEoxWlNrN1hHNGdJSEpsZEhWeWJpQW9ZMjl0Ylc5dUlDb2dkRzkwWVd3cElDOGdLRElnS2lCMGIzUmhiRkJ5YjJRcE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYTNWc1kzcDVibk5yYVVScGMzUmhibU5sS0hnNklFSnBkRUZ5Y21GNUxDQjVPaUJDYVhSQmNuSmhlU2s2SUc1MWJXSmxjaUI3WEc0Z0lISmxkSFZ5YmlCblpYUkVhWE4wWVc1alpVWnliMjFUYVcxcGJHRnlhWFI1S0d0MWJHTjZlVzV6YTJsVGFXMXBiR0Z5YVhSNUtIZ3NJSGtwS1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJRzFqUTI5dWJtRjFaMmhsZVZOcGJXbHNZWEpwZEhrb2VEb2dRbWwwUVhKeVlYa3NJSGs2SUVKcGRFRnljbUY1S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdZMjl1YzNRZ2RHOTBZV3dnUFNCNExuUnlkV1ZEYjNWdWRDZ3BJQ3NnZVM1MGNuVmxRMjkxYm5Rb0tUdGNiaUFnWTI5dWMzUWdkRzkwWVd4UWNtOWtJRDBnZUM1MGNuVmxRMjkxYm5Rb0tTQXFJSGt1ZEhKMVpVTnZkVzUwS0NrN1hHNGdJR2xtSUNoMGIzUmhiRkJ5YjJRZ1BUMGdNQ2xjYmlBZ0lDQnlaWFIxY200Z01DNHdPMXh1SUNCamIyNXpkQ0JqYjIxdGIyNGdQU0I0TG1GdVpGZHBkR2hEYjNWdWRFSnBkSE1vZVN3Z2RISjFaU2s3WEc0Z0lISmxkSFZ5YmlBb1kyOXRiVzl1SUNvZ2RHOTBZV3dnTFNCMGIzUmhiRkJ5YjJRcElDOGdkRzkwWVd4UWNtOWtPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2JXTkRiMjV1WVhWbmFHVjVSR2x6ZEdGdVkyVW9lRG9nUW1sMFFYSnlZWGtzSUhrNklFSnBkRUZ5Y21GNUtUb2diblZ0WW1WeUlIdGNiaUFnY21WMGRYSnVJR2RsZEVScGMzUmhibU5sUm5KdmJWTnBiV2xzWVhKcGRIa29iV05EYjI1dVlYVm5hR1Y1VTJsdGFXeGhjbWwwZVNoNExDQjVLU2s3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmhjM2x0YldWMGNtbGpVMmx0YVd4aGNtbDBlU2g0T2lCQ2FYUkJjbkpoZVN3Z2VUb2dRbWwwUVhKeVlYa3BPaUJ1ZFcxaVpYSWdlMXh1SUNCamIyNXpkQ0J0YVc0Z1BTQk5ZWFJvTG0xcGJpaDRMblJ5ZFdWRGIzVnVkQ2dwTENCNUxuUnlkV1ZEYjNWdWRDZ3BLVHRjYmlBZ2FXWWdLRzFwYmlBOVBTQXdLVnh1SUNBZ0lISmxkSFZ5YmlBd0xqQTdYRzRnSUdOdmJuTjBJR052YlcxdmJpQTlJSGd1WVc1a1YybDBhRU52ZFc1MFFtbDBjeWg1TENCMGNuVmxLVHRjYmlBZ2NtVjBkWEp1SUdOdmJXMXZiaUF2SUcxcGJqdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdGemVXMXRaWFJ5YVdORWFYTjBZVzVqWlNoNE9pQkNhWFJCY25KaGVTd2dlVG9nUW1sMFFYSnlZWGtwT2lCdWRXMWlaWElnZTF4dUlDQnlaWFIxY200Z1oyVjBSR2x6ZEdGdVkyVkdjbTl0VTJsdGFXeGhjbWwwZVNoaGMzbHRiV1YwY21salUybHRhV3hoY21sMGVTaDRMQ0I1S1NrN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJpY21GMWJrSnNZVzV4ZFdWMFUybHRhV3hoY21sMGVTaDRPaUJDYVhSQmNuSmhlU3dnZVRvZ1FtbDBRWEp5WVhrcE9pQnVkVzFpWlhJZ2UxeHVJQ0JqYjI1emRDQnRZWGdnUFNCTllYUm9MbTFoZUNoNExuUnlkV1ZEYjNWdWRDZ3BMQ0I1TG5SeWRXVkRiM1Z1ZENncEtUdGNiaUFnYVdZZ0tHMWhlQ0E5UFNBd0tWeHVJQ0FnSUhKbGRIVnliaUF3TGpBN1hHNGdJR052Ym5OMElHTnZiVzF2YmlBOUlIZ3VZVzVrVjJsMGFFTnZkVzUwUW1sMGN5aDVMQ0IwY25WbEtUdGNiaUFnY21WMGRYSnVJR052YlcxdmJpQXZJRzFoZUR0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR0p5WVhWdVFteGhibkYxWlhSRWFYTjBZVzVqWlNoNE9pQkNhWFJCY25KaGVTd2dlVG9nUW1sMFFYSnlZWGtwT2lCdWRXMWlaWElnZTF4dUlDQnlaWFIxY200Z1oyVjBSR2x6ZEdGdVkyVkdjbTl0VTJsdGFXeGhjbWwwZVNoaWNtRjFia0pzWVc1eGRXVjBVMmx0YVd4aGNtbDBlU2g0TENCNUtTazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCeWRYTnpaV3hUYVcxcGJHRnlhWFI1S0hnNklFSnBkRUZ5Y21GNUxDQjVPaUJDYVhSQmNuSmhlU2s2SUc1MWJXSmxjaUI3WEc0Z0lHbG1JQ2g0TG14bGJtZDBhQ0E5UFNBd0tWeHVJQ0FnSUhKbGRIVnliaUF3TGpBN1hHNGdJR052Ym5OMElHTnZiVzF2YmlBOUlIZ3VZVzVrVjJsMGFFTnZkVzUwUW1sMGN5aDVMQ0IwY25WbEtUdGNiaUFnY21WMGRYSnVJR052YlcxdmJpQXZJSGd1YkdWdVozUm9PMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2NuVnpjMlZzUkdsemRHRnVZMlVvZURvZ1FtbDBRWEp5WVhrc0lIazZJRUpwZEVGeWNtRjVLVG9nYm5WdFltVnlJSHRjYmlBZ2NtVjBkWEp1SUdkbGRFUnBjM1JoYm1ObFJuSnZiVk5wYldsc1lYSnBkSGtvY25WemMyVnNVMmx0YVd4aGNtbDBlU2g0TENCNUtTazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCeWIyZHZkRWR2YkdSaVpYSm5VMmx0YVd4aGNtbDBlU2g0T2lCQ2FYUkJjbkpoZVN3Z2VUb2dRbWwwUVhKeVlYa3BPaUJ1ZFcxaVpYSWdlMXh1SUNCamIyNXpkQ0JqYjIxdGIyNGdQU0I0TG1GdVpGZHBkR2hEYjNWdWRFSnBkSE1vZVN3Z2RISjFaU2s3WEc0Z0lHTnZibk4wSUhSdmRHRnNJRDBnZUM1amIzVnVkRUpwZEhNb2RISjFaU2tnS3lCNUxtTnZkVzUwUW1sMGN5aDBjblZsS1R0Y2JpQWdZMjl1YzNRZ2JHVnVJRDBnZUM1c1pXNW5kR2c3WEc0Z0lHTnZibk4wSUdScFptWWdQU0JzWlc0Z0xTQjBiM1JoYkNBcklHTnZiVzF2Ymp0Y2JpQWdhV1lnS0NoamIyMXRiMjRnUFQwZ2JHVnVLU0I4ZkNBb1pHbG1aaUE5UFNCc1pXNHBLU0J5WlhSMWNtNGdNUzR3TzF4dUlDQmxiSE5sSUhKbGRIVnliaUJqYjIxdGIyNGdMeUIwYjNSaGJDQXJJR1JwWm1ZZ0x5QW9NaUFxSUd4bGJpQXRJSFJ2ZEdGc0tUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhKdloyOTBSMjlzWkdKbGNtZEVhWE4wWVc1alpTaDRPaUJDYVhSQmNuSmhlU3dnZVRvZ1FtbDBRWEp5WVhrcE9pQnVkVzFpWlhJZ2UxeHVJQ0J5WlhSMWNtNGdaMlYwUkdsemRHRnVZMlZHY205dFUybHRhV3hoY21sMGVTaHliMmR2ZEVkdmJHUmlaWEpuVTJsdGFXeGhjbWwwZVNoNExDQjVLU2s3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQm5aWFJUYVcxcGJHRnlhWFI1Um5KdmJVUnBjM1JoYm1ObEtHUnBjM1JoYm1ObE9pQnVkVzFpWlhJcElIdGNiaUFnY21WMGRYSnVJREV2S0RFclpHbHpkR0Z1WTJVcE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWjJWMFJHbHpkR0Z1WTJWR2NtOXRVMmx0YVd4aGNtbDBlU2h6YVcxcGJHRnlhWFI1T2lCdWRXMWlaWElwSUh0Y2JpQWdjbVYwZFhKdUlERXZjMmx0YVd4aGNtbDBlU0F0SURFN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJuWlhSRWFYWmxjbk5sVTNWaWMyVjBLR3hsYm1kMGFEb2diblZ0WW1WeUxDQnVPaUJ1ZFcxaVpYSXNJR1JwYzNRNklDaHBNVG9nYm5WdFltVnlMQ0JwTWpvZ2JuVnRZbVZ5S1NBOVBpQnVkVzFpWlhJcElIdGNiaUFnWm5WdVkzUnBiMjRnYldGNFFua29kbUZzZFdWek9pQkpkR1Z5WVdKc1pVbDBaWEpoZEc5eVBHNTFiV0psY2o0c0lHOXlaR1Z5UW5rNklDaHBPaUJ1ZFcxaVpYSXBJRDArSUc1MWJXSmxjaWtnZTF4dUlDQWdJR3hsZENCdFlYaFdZV3gxWlNBOUlHNTFiR3c3WEc0Z0lDQWdiR1YwSUcxaGVFOXlaR1Z5UW5rZ1BTQnVkV3hzTzF4dVhHNGdJQ0FnWm05eUlDaGpiMjV6ZENCbGJHVnRaVzUwSUc5bUlIWmhiSFZsY3lrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWld4bGJXVnVkRTl5WkdWeVFua2dQU0J2Y21SbGNrSjVLR1ZzWlcxbGJuUXBPMXh1SUNBZ0lDQWdhV1lnS0cxaGVFOXlaR1Z5UW5rZ1BUMGdiblZzYkNCOGZDQmxiR1Z0Wlc1MFQzSmtaWEpDZVNBK0lHMWhlRTl5WkdWeVFua3BJSHRjYmlBZ0lDQWdJQ0FnYldGNFZtRnNkV1VnUFNCbGJHVnRaVzUwTzF4dUlDQWdJQ0FnSUNCdFlYaFBjbVJsY2tKNUlEMGdaV3hsYldWdWRFOXlaR1Z5UW5rN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnRZWGhXWVd4MVpUdGNiaUFnZlZ4dVhHNGdJR052Ym5OMElITjFZbk5sZENBOUlGdHlZVzVrYjIxSmJuUW9iR1Z1WjNSb0lDMGdNU2xkTzF4dUlDQmpiMjV6ZENCamIyMXdiR1Z0Wlc1MElEMGdibVYzSUZObGRDZ3BPMXh1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2diR1Z1WjNSb095QXJLMmtwSUh0Y2JpQWdJQ0JwWmlBb0lYTjFZbk5sZEM1cGJtTnNkV1JsY3locEtTbGNiaUFnSUNBZ0lHTnZiWEJzWlcxbGJuUXVZV1JrS0drcE8xeHVJQ0I5WEc1Y2JpQWdkMmhwYkdVZ0tITjFZbk5sZEM1c1pXNW5kR2dnUENCdUtTQjdYRzRnSUNBZ1kyOXVjM1FnYVdSNElEMGdiV0Y0UW5rb1hHNGdJQ0FnSUNCamIyMXdiR1Z0Wlc1MExuWmhiSFZsY3lncElHRnpJRWwwWlhKaFlteGxTWFJsY21GMGIzSThiblZ0WW1WeVBpeGNiaUFnSUNBZ0lDaHBLU0E5UGlCTllYUm9MbTFwYmk1aGNIQnNlU2hOWVhSb0xDQnpkV0p6WlhRdWJXRndLR1oxYm1OMGFXOXVLSFpoYkN3Z2FXNWtaWGdwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdScGMzUW9hU3dnZG1Gc0tUdGNiaUFnSUNBZ0lIMHBLU2s3WEc0Z0lDQWdhV1lnS0dsa2VDa2dlMXh1SUNBZ0lDQWdjM1ZpYzJWMExuQjFjMmdvYVdSNEtUdGNiaUFnSUNBZ0lHTnZiWEJzWlcxbGJuUXVaR1ZzWlhSbEtHbGtlQ2s3WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQnpkV0p6WlhRN1hHNTlYRzRpWFgwPSIsIi8qKlxuICogRGVub3RlcyBhIHZlY3RvciBvZiBmbG9hdGluZyBwb2l0IHZhbHVlcy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgVmVjdG9yXG4gKiBAZXh0ZW5kcyB7RmxvYXQzMkFycmF5fVxuICovXG5leHBvcnQgY2xhc3MgVmVjdG9yIGV4dGVuZHMgRmxvYXQzMkFycmF5IHtcbn1cbi8qKlxuICogRGVub3RlcyBhIHR3by1kaW1lbnNpb25hbCBtYXRyaXguXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIE1hdHJpeFxuICogQGV4dGVuZHMge0FycmF5PFZlY3Rvcj59XG4gKi9cbmV4cG9ydCBjbGFzcyBNYXRyaXggZXh0ZW5kcyBBcnJheSB7XG59XG4vKipcbiAqIERlbm90ZXMgY2FydGVzaWFuIGNvb3JkaW5hdGVzLlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBDb29yZGluYXRlc1xuICogQGV4dGVuZHMge01hdHJpeH1cbiAqL1xuZXhwb3J0IGNsYXNzIENvb3JkaW5hdGVzIGV4dGVuZHMgTWF0cml4IHtcbn1cbi8qKlxuICogRGVub3RlcyBhbiBhcnJheSBvZiBhcmJpdHJhcnktdHlwZWQgdmVjdG9ycy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgVmVjdG9yc1xuICogQGV4dGVuZHMge0FycmF5PGFueT59XG4gKi9cbmV4cG9ydCBjbGFzcyBWZWN0b3JzIGV4dGVuZHMgQXJyYXkge1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZEhsd1pTMWtaV05zWVhKaGRHbHZibk11YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SjBlWEJsTFdSbFkyeGhjbUYwYVc5dWN5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZCUVRzN096czdPMGRCVFVjN1FVRkRTQ3hOUVVGTkxFOUJRVThzVFVGQlR5eFRRVUZSTEZsQlFWazdRMEZCUnp0QlFVVXpRenM3T3pzN08wZEJUVWM3UVVGRFNDeE5RVUZOTEU5QlFVOHNUVUZCVHl4VFFVRlJMRXRCUVdFN1EwRkJSenRCUVVVMVF6czdPenM3TzBkQlRVYzdRVUZEU0N4TlFVRk5MRTlCUVU4c1YwRkJXU3hUUVVGUkxFMUJRVTA3UTBGQlJ6dEJRVVV4UXpzN096czdPMGRCVFVjN1FVRkRTQ3hOUVVGTkxFOUJRVThzVDBGQlVTeFRRVUZSTEV0QlFWVTdRMEZCUnlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1JHVnViM1JsY3lCaElIWmxZM1J2Y2lCdlppQm1iRzloZEdsdVp5QndiMmwwSUhaaGJIVmxjeTVjYmlBcVhHNGdLaUJBWlhod2IzSjBYRzRnS2lCQVkyeGhjM01nVm1WamRHOXlYRzRnS2lCQVpYaDBaVzVrY3lCN1JteHZZWFF6TWtGeWNtRjVmVnh1SUNvdlhHNWxlSEJ2Y25RZ1kyeGhjM01nVm1WamRHOXlJR1Y0ZEdWdVpITWdSbXh2WVhRek1rRnljbUY1SUh0OVhHNWNiaThxS2x4dUlDb2dSR1Z1YjNSbGN5QmhJSFIzYnkxa2FXMWxibk5wYjI1aGJDQnRZWFJ5YVhndVhHNGdLbHh1SUNvZ1FHVjRjRzl5ZEZ4dUlDb2dRR05zWVhOeklFMWhkSEpwZUZ4dUlDb2dRR1Y0ZEdWdVpITWdlMEZ5Y21GNVBGWmxZM1J2Y2o1OVhHNGdLaTljYm1WNGNHOXlkQ0JqYkdGemN5Qk5ZWFJ5YVhnZ1pYaDBaVzVrY3lCQmNuSmhlVHhXWldOMGIzSStJSHQ5WEc1Y2JpOHFLbHh1SUNvZ1JHVnViM1JsY3lCallYSjBaWE5wWVc0Z1kyOXZjbVJwYm1GMFpYTXVYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUdOc1lYTnpJRU52YjNKa2FXNWhkR1Z6WEc0Z0tpQkFaWGgwWlc1a2N5QjdUV0YwY21sNGZWeHVJQ292WEc1bGVIQnZjblFnWTJ4aGMzTWdRMjl2Y21ScGJtRjBaWE1nWlhoMFpXNWtjeUJOWVhSeWFYZ2dlMzFjYmx4dUx5b3FYRzRnS2lCRVpXNXZkR1Z6SUdGdUlHRnljbUY1SUc5bUlHRnlZbWwwY21GeWVTMTBlWEJsWkNCMlpXTjBiM0p6TGx4dUlDcGNiaUFxSUVCbGVIQnZjblJjYmlBcUlFQmpiR0Z6Y3lCV1pXTjBiM0p6WEc0Z0tpQkFaWGgwWlc1a2N5QjdRWEp5WVhrOFlXNTVQbjFjYmlBcUwxeHVaWGh3YjNKMElHTnNZWE56SUZabFkzUnZjbk1nWlhoMFpXNWtjeUJCY25KaGVUeGhibmsrSUh0OVhHNWNiaThxS2x4dUlDb2dSR1Z1YjNSbGN5QmhJR1JwWTNScGIyNWhjbmtnWTI5dWRHRnBibWx1WnlCbWRXNWpkR2x2YmlCdmNIUnBiMjV6TGx4dUlDcGNiaUFxSUVCbGVIQnZjblJjYmlBcUlFQjBlWEJsSUU5d2RHbHZibk5jYmlBcUwxeHVaWGh3YjNKMElIUjVjR1VnVDNCMGFXOXVjeUE5SUh0YmJtRnRaVG9nYzNSeWFXNW5YVG9nWVc1NWZUdGNibHh1THlvcVhHNGdLaUJFWlc1dmRHVnpJR04xYzNSdmJTQmthWE4wWVc1alpTQnRaWFJ5YVdNZ1ltVjBkMlZsYmlCMGFHVWdkSGR2SUdkcGRtVnVJSFpsWTNSdmNuTXVYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUhSNWNHVWdSR2x6ZEdGdVkyVk5aWFJ5YVdOY2JpQXFJRUJ3WVhKaGJTQjdZVzU1ZlNCMk1TQlVhR1VnWm1seWMzUWdkbVZqZEc5eUxseHVJQ29nUUhCaGNtRnRJSHRoYm5sOUlIWXlJRlJvWlNCelpXTnZibVFnZG1WamRHOXlMbHh1SUNvZ1FISmxkSFZ5YmlCN2JuVnRZbVZ5ZlNCRWFYTjBZVzVqWlNCaVpYUjNaV1Z1SUhSb1pYTmxJSFIzYnlCMlpXTjBiM0p6TGx4dUlDb3ZYRzVsZUhCdmNuUWdkSGx3WlNCRWFYTjBZVzVqWlUxbGRISnBZeUE5SUNoMk1Ub2dZVzU1TENCMk1qb2dZVzU1S1NBOVBpQW9iblZ0WW1WeUtUdGNibHh1THlvcVhHNGdLaUJFWlc1dmRHVnpJR0VnYzJsdGNHeGxJSE4wY21sdVp5QjBieUJ6ZEhKcGJtY2daR2xqZEdsdmJtRnllUzVjYmlBcVhHNGdLaUJBWlhod2IzSjBYRzRnS2lCQWRIbHdaU0JUZEhKcGJtZEVhV04wYVc5dVlYSjVYRzRnS2k5Y2JtVjRjRzl5ZENCMGVYQmxJRk4wY21sdVowUnBZM1JwYjI1aGNua2dQU0I3VzJ0bGVUb2djM1J5YVc1blhUb2djM1J5YVc1bmZUdGNiaUpkZlE9PSIsImltcG9ydCB7IFZlY3RvciB9IGZyb20gJy4vdHlwZS1kZWNsYXJhdGlvbnMnO1xuaW1wb3J0IHsgcmFuZG9tRmxvYXQsIHJhbmRvbUludCB9IGZyb20gJy4vcmFuZG9tJztcbi8qKlxuICogQXNzZXJ0cyBhIGNvbmRpdGlvbiBieSB0aHJvd2luZyBhbiBFcnJvci5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtjb25kaXRpb249ZmFsc2VdIENvbmRpdGlvbiB0byBhc3NlcnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2U9J0Fzc2VydGlvbiBlcnJvci4nXSBNZXNzYWdlIHRvIG91dHB1dC5cbiAqIEB0aHJvd3Mge0Vycm9yfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiA9IGZhbHNlLCBtZXNzYWdlID0gJ0Fzc2VydGlvbiBlcnJvci4nKSB7XG4gICAgaWYgKCFjb25kaXRpb24pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBuZXcgdHdvLWRpbWVuc2lvbmFsIGFycmF5IGFuZCBmaWxscyBpdCB3aXRoIHRoZSB2YWx1ZSBnaXZlbi5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZGltZW5zaW9uMSBUaGUgZmlyc3QgZGltZW5zaW9uIG9mIHRoZSBjb29yZGluYXRlcyAobnVtYmVyIG9mIHJvd3MpLlxuICogQHBhcmFtIHtudW1iZXJ9IGRpbWVuc2lvbjIgVGhlIHNlY29uZCBkaW1lbnNpb24gb2YgdGhlIGNvb3JkaW5hdGVzIChudW1iZXIgb2YgY29sdW1ucykuXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGw9MF0gQSB2YWx1ZSB0byBmaWxsIHRoZSBjb29yZGluYXRlcyB3aXRoLlxuICogQHJldHVybiB7Q29vcmRpbmF0ZXN9IEEgdHdvLWRpbWVuc2lvbmFsIGZpbGxlZCB3aXRoIHRoZSB2YWx1ZSBnaXZlbi5cbiAqIEB0b2RvIE1pZ2h0IGJlIHNsb3cgc2luY2UgdXNlZCBBcnJheS5tYXAuIFByb2JhYmx5IG5lZWRzIHBlcmZvcm1hbmNlIHJldmlzaW9uLlxuICovXG5mdW5jdGlvbiBpbml0Q29vcmRpbmF0ZXMoZGltZW5zaW9uMSwgZGltZW5zaW9uMiwgZmlsbCA9IDApIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KGRpbWVuc2lvbjEpLmZpbGwoZmlsbCkubWFwKCgpID0+IChuZXcgVmVjdG9yKGRpbWVuc2lvbjIpLmZpbGwoZmlsbCkpKTtcbn1cbi8qKlxuICogVHJhbnNwb3NlIG1hdHJpeC5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4IFRoZSBtYXRyaXggdG8gYmUgdHJhbnNwb3NlZC5cbiAqIEByZXR1cm4ge01hdHJpeH0gVHJhbnNwb3NlZCBtYXRyaXguXG4gKiBAdG9kbyBNaWdodCBiZSBzbG93IHNpbmNlIHVzZWQgQXJyYXkubWFwLiBQcm9iYWJseSBuZWVkcyBwZXJmb3JtYW5jZSByZXZpc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zcG9zZU1hdHJpeChtYXRyaXgpIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KG1hdHJpeFswXS5sZW5ndGgpLmZpbGwoMClcbiAgICAgICAgLm1hcCgoXywgaSkgPT4gKG5ldyBWZWN0b3IobWF0cml4Lmxlbmd0aCkuZmlsbCgwKS5tYXAoKF8sIGopID0+IChtYXRyaXhbal1baV0pKSkpO1xufVxuLyoqXG4gKiBBZGRzIHR3byB2ZWN0b3JzIHdpdGggdGhlIHNlY29uZCBvbmUgdG8gYmUgbXVsdGlwbGllZCBieSB0aGUgZ2l2ZW4gcmF0aW8uXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtWZWN0b3J9IHAgVGhlIGZpcnN0IHZlY3RvciB0byBhZGQuXG4gKiBAcGFyYW0ge1ZlY3Rvcn0gcSBUaGUgc2Vjb25kIHZlY3RvciB0byBhZGQuXG4gKiBAcGFyYW0ge251bWJlcn0gW211bHRpcGxpZXI9MV0gQSBtdWx0aXBsaWVyIHRvIGJlIHVzZWQgYmVmb3JlIHRoZSBzZWNvbmQgdmVjdG9yIGlzIGFkZGVkLlxuICogQHJldHVybiB7VmVjdG9yfSBOZXcgdmVjdG9yIGNvbnRhaW5lZCB0aGUgcmVzdWx0IG9mIG9wZXJhdGlvbiBwK211bHRpcGxpZXIqcS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlY3RvckFkZChwLCBxLCBtdWx0aXBsaWVyID0gMSkge1xuICAgIGNvbnN0IG5JdGVtcyA9IHAubGVuZ3RoO1xuICAgIGFzc2VydChuSXRlbXMgPT0gcS5sZW5ndGgsICdWZWN0b3IgbGVuZ3RocyBkbyBub3QgbWF0Y2guJyk7XG4gICAgY29uc3QgdG90YWwgPSBuZXcgVmVjdG9yKG5JdGVtcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwLmxlbmd0aDsgKytpKVxuICAgICAgICB0b3RhbFtpXSA9IHBbaV0gKyBtdWx0aXBsaWVyICogcVtpXTtcbiAgICByZXR1cm4gdG90YWw7XG59XG4vKipcbiAqIFN1bXMgdGhlIHZlY3RvcidzIGl0ZW1zLlxuICpcbiAqIEBwYXJhbSB7VmVjdG9yfSB2IFRoZSB2ZWN0b3IgdG8gYmUgc3VtbWVkLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdmVjdG9yJ3MgaXRlbXMgc3VtLlxuICovXG5mdW5jdGlvbiBpdGVtc1N1bSh2KSB7XG4gICAgbGV0IHRvdGFsID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHYubGVuZ3RoOyArK2kpXG4gICAgICAgIHRvdGFsICs9IHZbaV07XG4gICAgcmV0dXJuIHRvdGFsO1xufVxuLyoqXG4gKiBTdXFhcmVzIHRoZSB2ZWN0b3IncyBpdGVtcy5cbiAqXG4gKiBAcGFyYW0ge1ZlY3Rvcn0gdiBUaGUgdmVjdG9yIHRvIHNxdWFyZS5cbiAqIEByZXR1cm4ge1ZlY3Rvcn0gQSBuZXcgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsJ3MgaXRlbXMgc3F1YXJlZC5cbiAqL1xuZnVuY3Rpb24gdmVjdG9yU3F1YXJlKHYpIHtcbiAgICBjb25zdCBuSXRlbXMgPSB2Lmxlbmd0aDtcbiAgICBjb25zdCB0b3RhbCA9IG5ldyBWZWN0b3Iobkl0ZW1zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHYubGVuZ3RoOyArK2kpXG4gICAgICAgIHRvdGFsW2ldID0gdltpXSAqIHZbaV07XG4gICAgcmV0dXJuIHRvdGFsO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZpbGxlZCB3aXRoIHJhbmRvbSBmbG9hdGluZyBwb2ludCB2YWx1ZXMuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtudW1iZXJ9IGRpbWVuc2lvbjEgVGhlIGZpcnN0IGRpbWVuc2lvbiBvZiB0aGUgbWF0cml4LlxuICogQHBhcmFtIHtudW1iZXJ9IGRpbWVuc2lvbjIgVGhlIHNlY29uZCBkaW1lbnNpb24gb2YgdGhlIG1hdHJpeC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc2NhbGU9MS5dIE1heCB2YWx1ZSBnaXZlbiBieSByYW5kb20gZ2VuZXJhdG9yLlxuICogQHJldHVybiB7TWF0cml4fSBBIG5ldyBtYXRyaXggZmlsbGVkIHdpdGggcmFuZG9tIGZsb2F0aW5nIHBvaW50ICB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWxsUmFuZG9tTWF0cml4KGRpbWVuc2lvbjEsIGRpbWVuc2lvbjIsIHNjYWxlID0gMS4pIHtcbiAgICBjb25zdCBtYXRyaXggPSBpbml0Q29vcmRpbmF0ZXMoZGltZW5zaW9uMSwgZGltZW5zaW9uMik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW1lbnNpb24xOyArK2kpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkaW1lbnNpb24yOyArK2opXG4gICAgICAgICAgICBtYXRyaXhbaV1bal0gPSByYW5kb21GbG9hdChzY2FsZSk7XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgRXVjbGlkZWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlY3RvcnMuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtWZWN0b3J9IHAgVGhlIGZpcnN0IHZlY3Rvci5cbiAqIEBwYXJhbSB7VmVjdG9yfSBxIFRoZSBzZWNvbmQgdmVjdG9yLlxuICogQHJldHVybiB7bnVtYmVyfSBFdWNsaWRlYW4gZGlzdGFuY2UgYmV0d2VlbiB0aGUgZ2l2ZW4gdmVjdG9ycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUV1Y2xpZGVhbkRpc3RhbmNlKHAsIHEpIHtcbiAgICBjb25zdCBkaWZmID0gdmVjdG9yQWRkKHAsIHEsIC0xKTtcbiAgICBjb25zdCBzcWRpZmYgPSB2ZWN0b3JTcXVhcmUoZGlmZik7XG4gICAgY29uc3Qgc3FkaWZmU3VtbSA9IGl0ZW1zU3VtKHNxZGlmZik7XG4gICAgcmV0dXJuIE1hdGguc3FydChzcWRpZmZTdW1tKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIGRpc3RhbmNlIG1hdHJpeCB1c2luZyBhIGN1c3RvbSBkaXN0YW5jZSBmdW5jdGlvbi5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge1ZlY3RvcnN9IGRhdGEgSW5wdXQgdmVjdG9ycyB0byBjYWxjdWxhdGUgZGlzdGFuY2VzLlxuICogQHBhcmFtIHtEaXN0YW5jZU1ldHJpY30gZGlzdGFuY2UgQ3VzdG9tIGRpc3RhbmNlIGZ1bmN0aW9uLlxuICogQHJldHVybiB7TWF0cml4fSBDYWxjdWxhdGVkIGN1c3RvbSBkaXN0YW5jZSBtYXRyaXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjRGlzdGFuY2VNYXRyaXgoZGF0YSwgZGlzdGFuY2UpIHtcbiAgICBjb25zdCBuSXRlbXMgPSBkYXRhLmxlbmd0aDtcbiAgICBjb25zdCBtYXRyaXggPSBpbml0Q29vcmRpbmF0ZXMobkl0ZW1zLCBuSXRlbXMsIDApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbkl0ZW1zOyArK2kpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgbkl0ZW1zOyArK2opIHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSAoZGF0YVtpXSA9PSBudWxsKSB8fCAoZGF0YVtqXSA9PSBudWxsKSA/IDAgOiBkaXN0YW5jZShkYXRhW2ldLCBkYXRhW2pdKTtcbiAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IG1hdHJpeFtqXVtpXSA9IGQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeDtcbn1cbi8qKiBHZW5lcmF0ZXMgYXJyYXkgZnJvbSBhIHJhbmdlIFtiZWdpbjsgZW5kXSBvciBbYmVnaW47IGVuZCkgaWYgZW5kRXhjbHVzaXZlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlblJhbmdlKGJlZ2luLCBlbmQsIGVuZEV4Y2x1c2l2ZSA9IGZhbHNlKSB7XG4gICAgY29uc3Qgbkl0ZW1zID0gZW5kIC0gYmVnaW4gKyAoZW5kRXhjbHVzaXZlID8gMCA6IDEpO1xuICAgIGNvbnN0IHNlcmllcyA9IG5ldyBJbnQzMkFycmF5KG5JdGVtcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuSXRlbXM7ICsraSlcbiAgICAgICAgc2VyaWVzW2ldID0gYmVnaW4gKyBpO1xuICAgIHJldHVybiBzZXJpZXM7XG59XG4vKipcbiAqIFJldHVybnMgb3JkZXIgb2YgdmFsdWVzIGFzIGlmIHRoZXkgYXJlIHNvcnRlZC5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge2FueVtdfSB2YWx1ZXMgSW5wdXQgYXJyYXkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXZlcnNlPWZhbHNlXSBXaGV0aGVyIHRvIHJldHVybiByZXZlcnNlZCBvcmRlci5cbiAqIEByZXR1cm4ge251bWJlcltdfSBUaGUgb3JkZXIgY29tcHV0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcmdTb3J0KHZhbHVlcywgcmV2ZXJzZSA9IGZhbHNlKSB7XG4gICAgY29uc3Qgc29ydGZuID0gcmV2ZXJzZSA/IChhLCBiKSA9PiAoYlswXSAtIGFbMF0pIDogKGEsIGIpID0+IChhWzBdIC0gYlswXSk7XG4gICAgY29uc3QgZGVjb3IgPSAodiwgaSkgPT4gW3YsIGldOyAvLyBzZXQgaW5kZXggdG8gdmFsdWVcbiAgICBjb25zdCB1bmRlY29yID0gKGEpID0+IGFbMV07IC8vIGxlYXZlIG9ubHkgaW5kZXhcbiAgICBjb25zdCBfYXJnc29ydCA9IChhcnIpID0+IGFyci5tYXAoZGVjb3IpLnNvcnQoc29ydGZuKS5tYXAodW5kZWNvcik7XG4gICAgcmV0dXJuIF9hcmdzb3J0KHZhbHVlcyk7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGluZGV4ZXMgb2YgdGhlIG1vc3QgZGl2ZXJzZSBvYmplY3RzIGFjY29yZGluZyB0byB0aGUgZGlzdCBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCB0b3RhbCBudW1iZXIgb2Ygb2JqZWN0c1xuICogQHBhcmFtIHtudW1iZXJ9IG4gbnVtYmVyIG9mIGRpdmVyc2UgZWxlbWVudHMgdG8gZmluZFxuICogQHBhcmFtIHsoaTE6IG51bWJlciwgaTI6IG51bWJlcikgPT4gbnVtYmVyfSBkaXN0IGEgZnVuY3Rpb24gd2hpY2ggY2FsY3VsYXRlcyBkaXN0YW5jZSBiZXR3ZWVuIHR3byBvYmplY3RzIHVzaW5nIHRoZWlyIGluZGV4ZXNcbiAqIEByZXR1cm5zIHtudW1iZXJbXX0gVGhlIGluZGV4ZXMgb2YgdGhlIG1vc3QgZGl2ZXJzZSBvYmplY3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXZlcnNlU3Vic2V0KGxlbmd0aCwgbiwgZGlzdCkge1xuICAgIGZ1bmN0aW9uIG1heEJ5KHZhbHVlcywgb3JkZXJCeSkge1xuICAgICAgICBsZXQgbWF4VmFsdWUgPSBudWxsO1xuICAgICAgICBsZXQgbWF4T3JkZXJCeSA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRPcmRlckJ5ID0gb3JkZXJCeShlbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChtYXhPcmRlckJ5ID09IG51bGwgfHwgZWxlbWVudE9yZGVyQnkgPiBtYXhPcmRlckJ5KSB7XG4gICAgICAgICAgICAgICAgbWF4VmFsdWUgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIG1heE9yZGVyQnkgPSBlbGVtZW50T3JkZXJCeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4VmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHN1YnNldCA9IFtyYW5kb21JbnQobGVuZ3RoIC0gMSldO1xuICAgIGNvbnN0IGNvbXBsZW1lbnQgPSBuZXcgU2V0KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoIXN1YnNldC5pbmNsdWRlcyhpKSlcbiAgICAgICAgICAgIGNvbXBsZW1lbnQuYWRkKGkpO1xuICAgIH1cbiAgICB3aGlsZSAoc3Vic2V0Lmxlbmd0aCA8IG4pIHtcbiAgICAgICAgY29uc3QgaWR4ID0gbWF4QnkoY29tcGxlbWVudC52YWx1ZXMoKSwgKGkpID0+IE1hdGgubWluLmFwcGx5KE1hdGgsIHN1YnNldC5tYXAoZnVuY3Rpb24gKHZhbCwgaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBkaXN0KGksIHZhbCk7XG4gICAgICAgIH0pKSk7XG4gICAgICAgIGlmIChpZHgpIHtcbiAgICAgICAgICAgIHN1YnNldC5wdXNoKGlkeCk7XG4gICAgICAgICAgICBjb21wbGVtZW50LmRlbGV0ZShpZHgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdWJzZXQ7XG59XG4vKipcbiAqIFJldHVybnMgbm9ybWFsaXplZCB2ZWN0b3JcbiAqIEBwYXJhbSBkYXRhIG51bWVyaWNhbCBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKGRhdGEpIHtcbiAgICBsZXQgbWVhbiA9IDA7XG4gICAgbGV0IHN0ZCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgKytpKVxuICAgICAgICBtZWFuICs9IGRhdGFbaV07XG4gICAgbWVhbiAvPSBkYXRhLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpXG4gICAgICAgIHN0ZCArPSAoZGF0YVtpXSAtIG1lYW4pICogKGRhdGFbaV0gLSBtZWFuKTtcbiAgICBzdGQgPSBNYXRoLnNxcnQoc3RkIC8gZGF0YS5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7ICsraSlcbiAgICAgICAgZGF0YVtpXSA9IChkYXRhW2ldIC0gbWVhbikgLyBzdGQ7XG4gICAgcmV0dXJuIGRhdGE7XG59XG4vKipcbiAqIEZpbmRzIHNldCBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGxpc3RzLlxuICogQHBhcmFtIHthbnlbXX0gYSBUaGUgZmlyc3QgbGlzdC5cbiAqIEBwYXJhbSB7YW55W119IGIgVGhlIHNlY29uZCBsaXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RGlmZmVyZW5jZShhLCBiKSB7XG4gICAgY29uc3QgYlNldCA9IG5ldyBTZXQoYik7XG4gICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChhLmZpbHRlcigoeCkgPT4gIWJTZXQuaGFzKHgpKSkudmFsdWVzKCkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZG1WamRHOXlMVzl3WlhKaGRHbHZibk11YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SjJaV04wYjNJdGIzQmxjbUYwYVc5dWN5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZCUVN4UFFVRlBMRVZCUVZNc1RVRkJUU3hGUVVGMVF5eE5RVUZOTEhGQ1FVRnhRaXhEUVVGRE8wRkJRM3BHTEU5QlFVOHNSVUZCUXl4WFFVRlhMRVZCUVVVc1UwRkJVeXhGUVVGRExFMUJRVTBzVlVGQlZTeERRVUZETzBGQlJXaEVPenM3T3pzN08wZEJUMGM3UVVGRFNDeE5RVUZOTEZWQlFWVXNUVUZCVFN4RFFVRkRMRmxCUVhGQ0xFdEJRVXNzUlVGQlJTeFZRVUZyUWl4clFrRkJhMEk3U1VGRGNrWXNTVUZCU1N4RFFVRkRMRk5CUVZNN1VVRkRXaXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMEZCUXpkQ0xFTkJRVU03UVVGRlJEczdPenM3T3pzN1IwRlJSenRCUVVOSUxGTkJRVk1zWlVGQlpTeERRVUZETEZWQlFXdENMRVZCUVVVc1ZVRkJhMElzUlVGQlJTeFBRVUZsTEVOQlFVTTdTVUZETDBVc1QwRkJUeXhKUVVGSkxFdEJRVXNzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRU5CUVVNc1NVRkJTU3hOUVVGTkxFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU42Uml4RFFVRkRPMEZCUlVRN096czdPenM3UjBGUFJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4bFFVRmxMRU5CUVVNc1RVRkJZenRKUVVNMVF5eFBRVUZQTEVsQlFVa3NTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRM1pETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEzUkdMRU5CUVVNN1FVRkZSRHM3T3pzN096czdSMEZSUnp0QlFVTklMRTFCUVUwc1ZVRkJWU3hUUVVGVExFTkJRVU1zUTBGQlV5eEZRVUZGTEVOQlFWTXNSVUZCUlN4aFFVRnhRaXhEUVVGRE8wbEJRM0JGTEUxQlFVMHNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU03U1VGRmVFSXNUVUZCVFN4RFFVRkRMRTFCUVUwc1NVRkJTU3hEUVVGRExFTkJRVU1zVFVGQlRTeEZRVUZGTERoQ1FVRTRRaXhEUVVGRExFTkJRVU03U1VGRk0wUXNUVUZCVFN4TFFVRkxMRWRCUVVjc1NVRkJTU3hOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdTVUZGYWtNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUlVGQlJTeERRVUZETzFGQlF5OUNMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1ZVRkJWU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVVjBReXhQUVVGUExFdEJRVXNzUTBGQlF6dEJRVU5tTEVOQlFVTTdRVUZGUkRzN096czdSMEZMUnp0QlFVTklMRk5CUVZNc1VVRkJVU3hEUVVGRExFTkJRVk03U1VGRGVrSXNTVUZCU1N4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJSV1FzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRPMUZCUXk5Q0xFdEJRVXNzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkZhRUlzVDBGQlR5eExRVUZMTEVOQlFVTTdRVUZEWml4RFFVRkRPMEZCUlVRN096czdPMGRCUzBjN1FVRkRTQ3hUUVVGVExGbEJRVmtzUTBGQlF5eERRVUZUTzBsQlF6ZENMRTFCUVUwc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZEZUVJc1RVRkJUU3hMUVVGTExFZEJRVWNzU1VGQlNTeE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkZha01zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRPMUZCUXk5Q0xFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUlhwQ0xFOUJRVThzUzBGQlN5eERRVUZETzBGQlEyWXNRMEZCUXp0QlFVVkVPenM3T3pzN096dEhRVkZITzBGQlEwZ3NUVUZCVFN4VlFVRlZMR2RDUVVGblFpeERRVUZETEZWQlFXdENMRVZCUVVVc1ZVRkJhMElzUlVGQlJTeFJRVUZuUWl4RlFVRkZPMGxCUTNwR0xFMUJRVTBzVFVGQlRTeEhRVUZITEdWQlFXVXNRMEZCUXl4VlFVRlZMRVZCUVVVc1ZVRkJWU3hEUVVGRExFTkJRVU03U1VGRmRrUXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEZWQlFWVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSVHRSUVVOdVF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVlVGQlZTeEZRVUZGTEVWQlFVVXNRMEZCUXp0WlFVTnFReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1YwRkJWeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzB0QlEzSkRPMGxCUTBRc1QwRkJUeXhOUVVGTkxFTkJRVU03UVVGRGFFSXNRMEZCUXp0QlFVVkVPenM3T3pzN08wZEJUMGM3UVVGRFNDeE5RVUZOTEZWQlFWVXNNRUpCUVRCQ0xFTkJRVU1zUTBGQlV5eEZRVUZGTEVOQlFWTTdTVUZETjBRc1RVRkJUU3hKUVVGSkxFZEJRVWNzVTBGQlV5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU5xUXl4TlFVRk5MRTFCUVUwc1IwRkJSeXhaUVVGWkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdTVUZEYkVNc1RVRkJUU3hWUVVGVkxFZEJRVWNzVVVGQlVTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMGxCUTNCRExFOUJRVThzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJRenRCUVVNdlFpeERRVUZETzBGQlJVUTdPenM3T3pzN1IwRlBSenRCUVVOSUxFMUJRVTBzVlVGQlZTeHJRa0ZCYTBJc1EwRkJReXhKUVVGaExFVkJRVVVzVVVGQmQwSTdTVUZEZUVVc1RVRkJUU3hOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXp0SlFVTXpRaXhOUVVGTkxFMUJRVTBzUjBGQlJ5eGxRVUZsTEVOQlFVTXNUVUZCVFN4RlFVRkZMRTFCUVUwc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dEpRVVZzUkN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NUVUZCVFN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRk8xRkJReTlDTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NUVUZCVFN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRk8xbEJRMnBETEUxQlFVMHNRMEZCUXl4SFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRNVVlzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VTBGRGFrTTdTMEZEUmp0SlFVTkVMRTlCUVU4c1RVRkJUU3hEUVVGRE8wRkJRMmhDTEVOQlFVTTdRVUZGUkN4cFJrRkJhVVk3UVVGRGFrWXNUVUZCVFN4VlFVRlZMRkZCUVZFc1EwRkJReXhMUVVGaExFVkJRVVVzUjBGQlZ5eEZRVUZGTEZsQlFWa3NSMEZCUnl4TFFVRkxPMGxCUTNaRkxFMUJRVTBzVFVGQlRTeEhRVUZITEVkQlFVY3NSMEZCUnl4TFFVRkxMRWRCUVVjc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGNFUXNUVUZCVFN4TlFVRk5MRWRCUVVjc1NVRkJTU3hWUVVGVkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdTVUZGZEVNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRTFCUVUwc1JVRkJSU3hGUVVGRkxFTkJRVU03VVVGRE4wSXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZGZUVJc1QwRkJUeXhOUVVGTkxFTkJRVU03UVVGRGFFSXNRMEZCUXp0QlFVVkVPenM3T3pzN08wZEJUMGM3UVVGRFNDeE5RVUZOTEZWQlFWVXNUMEZCVHl4RFFVRkRMRTFCUVdFc1JVRkJSU3hQUVVGUExFZEJRVWNzUzBGQlN6dEpRVU53UkN4TlFVRk5MRTFCUVUwc1IwRkJSeXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCVVN4RlFVRkZMRU5CUVZFc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJVU3hGUVVGRkxFTkJRVkVzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRka2NzVFVGQlRTeExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRk5MRVZCUVVVc1EwRkJVeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExIRkNRVUZ4UWp0SlFVTnNSU3hOUVVGTkxFOUJRVThzUjBGQlJ5eERRVUZETEVOQlFWRXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNiVUpCUVcxQ08wbEJRM1pFTEUxQlFVMHNVVUZCVVN4SFFVRkhMRU5CUVVNc1IwRkJWU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03U1VGRE1VVXNUMEZCVHl4UlFVRlJMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGRE1VSXNRMEZCUXp0QlFVVkVPenM3T3pzN1IwRk5SenRCUVVOSUxFMUJRVTBzVlVGQlZTeG5Ra0ZCWjBJc1EwRkJReXhOUVVGakxFVkJRVVVzUTBGQlV5eEZRVUZGTEVsQlFYZERPMGxCUTJ4SExGTkJRVk1zUzBGQlN5eERRVUZETEUxQlFXZERMRVZCUVVVc1QwRkJPRUk3VVVGRE4wVXNTVUZCU1N4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRM0JDTEVsQlFVa3NWVUZCVlN4SFFVRkhMRWxCUVVrc1EwRkJRenRSUVVWMFFpeExRVUZMTEUxQlFVMHNUMEZCVHl4SlFVRkpMRTFCUVUwc1JVRkJSVHRaUVVNMVFpeE5RVUZOTEdOQlFXTXNSMEZCUnl4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03V1VGRGVFTXNTVUZCU1N4VlFVRlZMRWxCUVVrc1NVRkJTU3hKUVVGSkxHTkJRV01zUjBGQlJ5eFZRVUZWTEVWQlFVVTdaMEpCUTNKRUxGRkJRVkVzUjBGQlJ5eFBRVUZQTEVOQlFVTTdaMEpCUTI1Q0xGVkJRVlVzUjBGQlJ5eGpRVUZqTEVOQlFVTTdZVUZETjBJN1UwRkRSanRSUVVORUxFOUJRVThzVVVGQlVTeERRVUZETzBsQlEyeENMRU5CUVVNN1NVRkZSQ3hOUVVGTkxFMUJRVTBzUjBGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU4yUXl4TlFVRk5MRlZCUVZVc1IwRkJSeXhKUVVGSkxFZEJRVWNzUlVGQlJTeERRVUZETzBsQlJUZENMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVU3VVVGREwwSXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEzSkNMRlZCUVZVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTMEZEY2tJN1NVRkZSQ3hQUVVGUExFMUJRVTBzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RlFVRkZPMUZCUTNoQ0xFMUJRVTBzUjBGQlJ5eEhRVUZITEV0QlFVc3NRMEZEWml4VlFVRlZMRU5CUVVNc1RVRkJUU3hGUVVFNFFpeEZRVU12UXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hGUVVGRkxFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNWVUZCVlN4SFFVRkhMRVZCUVVVc1MwRkJTenRaUVVONlJDeFBRVUZQTEVsQlFVa3NRMEZCUXl4RFFVRkRMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGRFSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMUFzU1VGQlNTeEhRVUZITEVWQlFVVTdXVUZEVUN4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEycENMRlZCUVZVc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVMEZEZUVJN1MwRkRSanRKUVVORUxFOUJRVThzVFVGQlRTeERRVUZETzBGQlEyaENMRU5CUVVNN1FVRkZSRHM3TzBkQlIwYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1UwRkJVeXhEUVVGRExFbEJRVms3U1VGRGNFTXNTVUZCU1N4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMklzU1VGQlNTeEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUlZvc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUlVGQlJTeERRVUZETzFGQlEyeERMRWxCUVVrc1NVRkJTU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZGYkVJc1NVRkJTU3hKUVVGSkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZGY0VJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUlVGQlJTeERRVUZETzFGQlEyeERMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVVM1F5eEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMGxCUlc1RExFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVWQlFVVXNRMEZCUXp0UlFVTnNReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRPMGxCUlc1RExFOUJRVThzU1VGQlNTeERRVUZETzBGQlEyUXNRMEZCUXp0QlFVVkVPenM3TzBkQlNVYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1lVRkJZU3hEUVVGRExFTkJRVkVzUlVGQlJTeERRVUZSTzBsQlF6bERMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTNoQ0xFOUJRVThzUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVOQlFVTTdRVUZEY2tVc1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0I3VFdGMGNtbDRMQ0JXWldOMGIzSXNJRU52YjNKa2FXNWhkR1Z6TENCV1pXTjBiM0p6TENCRWFYTjBZVzVqWlUxbGRISnBZMzBnWm5KdmJTQW5MaTkwZVhCbExXUmxZMnhoY21GMGFXOXVjeWM3WEc1cGJYQnZjblFnZTNKaGJtUnZiVVpzYjJGMExDQnlZVzVrYjIxSmJuUjlJR1p5YjIwZ0p5NHZjbUZ1Wkc5dEp6dGNibHh1THlvcVhHNGdLaUJCYzNObGNuUnpJR0VnWTI5dVpHbDBhVzl1SUdKNUlIUm9jbTkzYVc1bklHRnVJRVZ5Y205eUxseHVJQ3BjYmlBcUlFQmxlSEJ2Y25SY2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJuMGdXMk52Ym1ScGRHbHZiajFtWVd4elpWMGdRMjl1WkdsMGFXOXVJSFJ2SUdGemMyVnlkQzVjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCYmJXVnpjMkZuWlQwblFYTnpaWEowYVc5dUlHVnljbTl5TGlkZElFMWxjM05oWjJVZ2RHOGdiM1YwY0hWMExseHVJQ29nUUhSb2NtOTNjeUI3UlhKeWIzSjlYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCaGMzTmxjblFvWTI5dVpHbDBhVzl1T2lCaWIyOXNaV0Z1SUQwZ1ptRnNjMlVzSUcxbGMzTmhaMlU2SUhOMGNtbHVaeUE5SUNkQmMzTmxjblJwYjI0Z1pYSnliM0l1SnlrZ2UxeHVJQ0JwWmlBb0lXTnZibVJwZEdsdmJpbGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvYldWemMyRm5aU2s3WEc1OVhHNWNiaThxS2x4dUlDb2dRM0psWVhSbGN5QnVaWGNnZEhkdkxXUnBiV1Z1YzJsdmJtRnNJR0Z5Y21GNUlHRnVaQ0JtYVd4c2N5QnBkQ0IzYVhSb0lIUm9aU0IyWVd4MVpTQm5hWFpsYmk1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnWkdsdFpXNXphVzl1TVNCVWFHVWdabWx5YzNRZ1pHbHRaVzV6YVc5dUlHOW1JSFJvWlNCamIyOXlaR2x1WVhSbGN5QW9iblZ0WW1WeUlHOW1JSEp2ZDNNcExseHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJR1JwYldWdWMybHZiaklnVkdobElITmxZMjl1WkNCa2FXMWxibk5wYjI0Z2IyWWdkR2hsSUdOdmIzSmthVzVoZEdWeklDaHVkVzFpWlhJZ2IyWWdZMjlzZFcxdWN5a3VYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnVzJacGJHdzlNRjBnUVNCMllXeDFaU0IwYnlCbWFXeHNJSFJvWlNCamIyOXlaR2x1WVhSbGN5QjNhWFJvTGx4dUlDb2dRSEpsZEhWeWJpQjdRMjl2Y21ScGJtRjBaWE45SUVFZ2RIZHZMV1JwYldWdWMybHZibUZzSUdacGJHeGxaQ0IzYVhSb0lIUm9aU0IyWVd4MVpTQm5hWFpsYmk1Y2JpQXFJRUIwYjJSdklFMXBaMmgwSUdKbElITnNiM2NnYzJsdVkyVWdkWE5sWkNCQmNuSmhlUzV0WVhBdUlGQnliMkpoWW14NUlHNWxaV1J6SUhCbGNtWnZjbTFoYm1ObElISmxkbWx6YVc5dUxseHVJQ292WEc1bWRXNWpkR2x2YmlCcGJtbDBRMjl2Y21ScGJtRjBaWE1vWkdsdFpXNXphVzl1TVRvZ2JuVnRZbVZ5TENCa2FXMWxibk5wYjI0eU9pQnVkVzFpWlhJc0lHWnBiR3c2SUc1MWJXSmxjaUE5SURBcE9pQkRiMjl5WkdsdVlYUmxjeUI3WEc0Z0lISmxkSFZ5YmlCdVpYY2dRWEp5WVhrb1pHbHRaVzV6YVc5dU1Ta3VabWxzYkNobWFXeHNLUzV0WVhBb0tDa2dQVDRnS0c1bGR5QldaV04wYjNJb1pHbHRaVzV6YVc5dU1pa3VabWxzYkNobWFXeHNLU2twTzF4dWZWeHVYRzR2S2lwY2JpQXFJRlJ5WVc1emNHOXpaU0J0WVhSeWFYZ3VYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUhCaGNtRnRJSHROWVhSeWFYaDlJRzFoZEhKcGVDQlVhR1VnYldGMGNtbDRJSFJ2SUdKbElIUnlZVzV6Y0c5elpXUXVYRzRnS2lCQWNtVjBkWEp1SUh0TllYUnlhWGg5SUZSeVlXNXpjRzl6WldRZ2JXRjBjbWw0TGx4dUlDb2dRSFJ2Wkc4Z1RXbG5hSFFnWW1VZ2MyeHZkeUJ6YVc1alpTQjFjMlZrSUVGeWNtRjVMbTFoY0M0Z1VISnZZbUZpYkhrZ2JtVmxaSE1nY0dWeVptOXliV0Z1WTJVZ2NtVjJhWE5wYjI0dVhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUIwY21GdWMzQnZjMlZOWVhSeWFYZ29iV0YwY21sNE9pQk5ZWFJ5YVhncE9pQk5ZWFJ5YVhnZ2UxeHVJQ0J5WlhSMWNtNGdibVYzSUVGeWNtRjVLRzFoZEhKcGVGc3dYUzVzWlc1bmRHZ3BMbVpwYkd3b01DbGNiaUFnSUNBdWJXRndLQ2hmTENCcEtTQTlQaUFvYm1WM0lGWmxZM1J2Y2lodFlYUnlhWGd1YkdWdVozUm9LUzVtYVd4c0tEQXBMbTFoY0Nnb1h5d2dhaWtnUFQ0Z0tHMWhkSEpwZUZ0cVhWdHBYU2twS1NrN1hHNTlYRzVjYmk4cUtseHVJQ29nUVdSa2N5QjBkMjhnZG1WamRHOXljeUIzYVhSb0lIUm9aU0J6WldOdmJtUWdiMjVsSUhSdklHSmxJRzExYkhScGNHeHBaV1FnWW5rZ2RHaGxJR2RwZG1WdUlISmhkR2x2TGx4dUlDcGNiaUFxSUVCbGVIQnZjblJjYmlBcUlFQndZWEpoYlNCN1ZtVmpkRzl5ZlNCd0lGUm9aU0JtYVhKemRDQjJaV04wYjNJZ2RHOGdZV1JrTGx4dUlDb2dRSEJoY21GdElIdFdaV04wYjNKOUlIRWdWR2hsSUhObFkyOXVaQ0IyWldOMGIzSWdkRzhnWVdSa0xseHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJRnR0ZFd4MGFYQnNhV1Z5UFRGZElFRWdiWFZzZEdsd2JHbGxjaUIwYnlCaVpTQjFjMlZrSUdKbFptOXlaU0IwYUdVZ2MyVmpiMjVrSUhabFkzUnZjaUJwY3lCaFpHUmxaQzVjYmlBcUlFQnlaWFIxY200Z2UxWmxZM1J2Y24wZ1RtVjNJSFpsWTNSdmNpQmpiMjUwWVdsdVpXUWdkR2hsSUhKbGMzVnNkQ0J2WmlCdmNHVnlZWFJwYjI0Z2NDdHRkV3gwYVhCc2FXVnlLbkV1WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQjJaV04wYjNKQlpHUW9jRG9nVm1WamRHOXlMQ0J4T2lCV1pXTjBiM0lzSUcxMWJIUnBjR3hwWlhJNklHNTFiV0psY2lBOUlERXBPaUJXWldOMGIzSWdlMXh1SUNCamIyNXpkQ0J1U1hSbGJYTWdQU0J3TG14bGJtZDBhRHRjYmx4dUlDQmhjM05sY25Rb2JrbDBaVzF6SUQwOUlIRXViR1Z1WjNSb0xDQW5WbVZqZEc5eUlHeGxibWQwYUhNZ1pHOGdibTkwSUcxaGRHTm9MaWNwTzF4dVhHNGdJR052Ym5OMElIUnZkR0ZzSUQwZ2JtVjNJRlpsWTNSdmNpaHVTWFJsYlhNcE8xeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2NDNXNaVzVuZEdnN0lDc3JhU2xjYmlBZ0lDQjBiM1JoYkZ0cFhTQTlJSEJiYVYwZ0t5QnRkV3gwYVhCc2FXVnlJQ29nY1Z0cFhUdGNibHh1SUNCeVpYUjFjbTRnZEc5MFlXdzdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1UzVnRjeUIwYUdVZ2RtVmpkRzl5SjNNZ2FYUmxiWE11WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHRXWldOMGIzSjlJSFlnVkdobElIWmxZM1J2Y2lCMGJ5QmlaU0J6ZFcxdFpXUXVYRzRnS2lCQWNtVjBkWEp1SUh0dWRXMWlaWEo5SUZSb1pTQjJaV04wYjNJbmN5QnBkR1Z0Y3lCemRXMHVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHbDBaVzF6VTNWdEtIWTZJRlpsWTNSdmNpazZJRzUxYldKbGNpQjdYRzRnSUd4bGRDQjBiM1JoYkNBOUlEQTdYRzVjYmlBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQjJMbXhsYm1kMGFEc2dLeXRwS1Z4dUlDQWdJSFJ2ZEdGc0lDczlJSFpiYVYwN1hHNWNiaUFnY21WMGRYSnVJSFJ2ZEdGc08xeHVmVnh1WEc0dktpcGNiaUFxSUZOMWNXRnlaWE1nZEdobElIWmxZM1J2Y2lkeklHbDBaVzF6TGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3Vm1WamRHOXlmU0IySUZSb1pTQjJaV04wYjNJZ2RHOGdjM0YxWVhKbExseHVJQ29nUUhKbGRIVnliaUI3Vm1WamRHOXlmU0JCSUc1bGR5QjJaV04wYjNJZ1kyOXVkR0ZwYm1sdVp5QjBhR1VnYjNKcFoybHVZV3duY3lCcGRHVnRjeUJ6Y1hWaGNtVmtMbHh1SUNvdlhHNW1kVzVqZEdsdmJpQjJaV04wYjNKVGNYVmhjbVVvZGpvZ1ZtVmpkRzl5S1RvZ1ZtVmpkRzl5SUh0Y2JpQWdZMjl1YzNRZ2JrbDBaVzF6SUQwZ2RpNXNaVzVuZEdnN1hHNGdJR052Ym5OMElIUnZkR0ZzSUQwZ2JtVjNJRlpsWTNSdmNpaHVTWFJsYlhNcE8xeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2RpNXNaVzVuZEdnN0lDc3JhU2xjYmlBZ0lDQjBiM1JoYkZ0cFhTQTlJSFpiYVYwZ0tpQjJXMmxkTzF4dVhHNGdJSEpsZEhWeWJpQjBiM1JoYkR0Y2JuMWNibHh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0VnYldGMGNtbDRJR1pwYkd4bFpDQjNhWFJvSUhKaGJtUnZiU0JtYkc5aGRHbHVaeUJ3YjJsdWRDQjJZV3gxWlhNdVhHNGdLbHh1SUNvZ1FHVjRjRzl5ZEZ4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHUnBiV1Z1YzJsdmJqRWdWR2hsSUdacGNuTjBJR1JwYldWdWMybHZiaUJ2WmlCMGFHVWdiV0YwY21sNExseHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJR1JwYldWdWMybHZiaklnVkdobElITmxZMjl1WkNCa2FXMWxibk5wYjI0Z2IyWWdkR2hsSUcxaGRISnBlQzVjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCYmMyTmhiR1U5TVM1ZElFMWhlQ0IyWVd4MVpTQm5hWFpsYmlCaWVTQnlZVzVrYjIwZ1oyVnVaWEpoZEc5eUxseHVJQ29nUUhKbGRIVnliaUI3VFdGMGNtbDRmU0JCSUc1bGR5QnRZWFJ5YVhnZ1ptbHNiR1ZrSUhkcGRHZ2djbUZ1Wkc5dElHWnNiMkYwYVc1bklIQnZhVzUwSUNCMllXeDFaWE11WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQm1hV3hzVW1GdVpHOXRUV0YwY21sNEtHUnBiV1Z1YzJsdmJqRTZJRzUxYldKbGNpd2daR2x0Wlc1emFXOXVNam9nYm5WdFltVnlMQ0J6WTJGc1pUb2diblZ0WW1WeUlEMGdNUzRwT2lCTllYUnlhWGdnZTF4dUlDQmpiMjV6ZENCdFlYUnlhWGdnUFNCcGJtbDBRMjl2Y21ScGJtRjBaWE1vWkdsdFpXNXphVzl1TVN3Z1pHbHRaVzV6YVc5dU1pazdYRzVjYmlBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQmthVzFsYm5OcGIyNHhPeUFySzJrcElIdGNiaUFnSUNCbWIzSWdLR3hsZENCcUlEMGdNRHNnYWlBOElHUnBiV1Z1YzJsdmJqSTdJQ3NyYWlsY2JpQWdJQ0FnSUcxaGRISnBlRnRwWFZ0cVhTQTlJSEpoYm1SdmJVWnNiMkYwS0hOallXeGxLVHRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiV0YwY21sNE8xeHVmVnh1WEc0dktpcGNiaUFxSUVOaGJHTjFiR0YwWlhNZ1JYVmpiR2xrWldGdUlHUnBjM1JoYm1ObElHSmxkSGRsWlc0Z2RIZHZJSFpsWTNSdmNuTXVYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUhCaGNtRnRJSHRXWldOMGIzSjlJSEFnVkdobElHWnBjbk4wSUhabFkzUnZjaTVjYmlBcUlFQndZWEpoYlNCN1ZtVmpkRzl5ZlNCeElGUm9aU0J6WldOdmJtUWdkbVZqZEc5eUxseHVJQ29nUUhKbGRIVnliaUI3Ym5WdFltVnlmU0JGZFdOc2FXUmxZVzRnWkdsemRHRnVZMlVnWW1WMGQyVmxiaUIwYUdVZ1oybDJaVzRnZG1WamRHOXljeTVjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHTmhiR04xYkdGMFpVVjFZMnhwWkdWaGJrUnBjM1JoYm1ObEtIQTZJRlpsWTNSdmNpd2djVG9nVm1WamRHOXlLVG9nYm5WdFltVnlJSHRjYmlBZ1kyOXVjM1FnWkdsbVppQTlJSFpsWTNSdmNrRmtaQ2h3TENCeExDQXRNU2s3WEc0Z0lHTnZibk4wSUhOeFpHbG1aaUE5SUhabFkzUnZjbE54ZFdGeVpTaGthV1ptS1R0Y2JpQWdZMjl1YzNRZ2MzRmthV1ptVTNWdGJTQTlJR2wwWlcxelUzVnRLSE54WkdsbVppazdYRzRnSUhKbGRIVnliaUJOWVhSb0xuTnhjblFvYzNGa2FXWm1VM1Z0YlNrN1hHNTlYRzVjYmk4cUtseHVJQ29nUTNKbFlYUmxjeUJoSUdScGMzUmhibU5sSUcxaGRISnBlQ0IxYzJsdVp5QmhJR04xYzNSdmJTQmthWE4wWVc1alpTQm1kVzVqZEdsdmJpNWNiaUFxWEc0Z0tpQkFaWGh3YjNKMFhHNGdLaUJBY0dGeVlXMGdlMVpsWTNSdmNuTjlJR1JoZEdFZ1NXNXdkWFFnZG1WamRHOXljeUIwYnlCallXeGpkV3hoZEdVZ1pHbHpkR0Z1WTJWekxseHVJQ29nUUhCaGNtRnRJSHRFYVhOMFlXNWpaVTFsZEhKcFkzMGdaR2x6ZEdGdVkyVWdRM1Z6ZEc5dElHUnBjM1JoYm1ObElHWjFibU4wYVc5dUxseHVJQ29nUUhKbGRIVnliaUI3VFdGMGNtbDRmU0JEWVd4amRXeGhkR1ZrSUdOMWMzUnZiU0JrYVhOMFlXNWpaU0J0WVhSeWFYZ3VYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCallXeGpSR2x6ZEdGdVkyVk5ZWFJ5YVhnb1pHRjBZVG9nVm1WamRHOXljeXdnWkdsemRHRnVZMlU2SUVScGMzUmhibU5sVFdWMGNtbGpLVG9nVFdGMGNtbDRJSHRjYmlBZ1kyOXVjM1FnYmtsMFpXMXpJRDBnWkdGMFlTNXNaVzVuZEdnN1hHNGdJR052Ym5OMElHMWhkSEpwZUNBOUlHbHVhWFJEYjI5eVpHbHVZWFJsY3lodVNYUmxiWE1zSUc1SmRHVnRjeXdnTUNrN1hHNWNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCdVNYUmxiWE03SUNzcmFTa2dlMXh1SUNBZ0lHWnZjaUFvYkdWMElHb2dQU0JwS3pFN0lHb2dQQ0J1U1hSbGJYTTdJQ3NyYWlrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWkRvZ2JuVnRZbVZ5SUQwZ0tHUmhkR0ZiYVYwZ1BUMGdiblZzYkNrZ2ZId2dLR1JoZEdGYmFsMGdQVDBnYm5Wc2JDa2dQeUF3SURvZ1pHbHpkR0Z1WTJVb1pHRjBZVnRwWFN3Z1pHRjBZVnRxWFNrN1hHNGdJQ0FnSUNCdFlYUnlhWGhiYVYxYmFsMGdQU0J0WVhSeWFYaGJhbDFiYVYwZ1BTQmtPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z2JXRjBjbWw0TzF4dWZWeHVYRzR2S2lvZ1IyVnVaWEpoZEdWeklHRnljbUY1SUdaeWIyMGdZU0J5WVc1blpTQmJZbVZuYVc0N0lHVnVaRjBnYjNJZ1cySmxaMmx1T3lCbGJtUXBJR2xtSUdWdVpFVjRZMngxYzJsMlpTNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJuWlc1U1lXNW5aU2hpWldkcGJqb2diblZ0WW1WeUxDQmxibVE2SUc1MWJXSmxjaXdnWlc1a1JYaGpiSFZ6YVhabElEMGdabUZzYzJVcE9pQkpiblF6TWtGeWNtRjVJSHRjYmlBZ1kyOXVjM1FnYmtsMFpXMXpJRDBnWlc1a0lDMGdZbVZuYVc0Z0t5QW9aVzVrUlhoamJIVnphWFpsSUQ4Z01DQTZJREVwTzF4dUlDQmpiMjV6ZENCelpYSnBaWE1nUFNCdVpYY2dTVzUwTXpKQmNuSmhlU2h1U1hSbGJYTXBPMXh1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dia2wwWlcxek95QXJLMmtwWEc0Z0lDQWdjMlZ5YVdWelcybGRJRDBnWW1WbmFXNGdLeUJwTzF4dVhHNGdJSEpsZEhWeWJpQnpaWEpwWlhNN1hHNTlYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUJ2Y21SbGNpQnZaaUIyWVd4MVpYTWdZWE1nYVdZZ2RHaGxlU0JoY21VZ2MyOXlkR1ZrTGx4dUlDcGNiaUFxSUVCbGVIQnZjblJjYmlBcUlFQndZWEpoYlNCN1lXNTVXMTE5SUhaaGJIVmxjeUJKYm5CMWRDQmhjbkpoZVM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJuMGdXM0psZG1WeWMyVTlabUZzYzJWZElGZG9aWFJvWlhJZ2RHOGdjbVYwZFhKdUlISmxkbVZ5YzJWa0lHOXlaR1Z5TGx4dUlDb2dRSEpsZEhWeWJpQjdiblZ0WW1WeVcxMTlJRlJvWlNCdmNtUmxjaUJqYjIxd2RYUmxaQzVjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHRnlaMU52Y25Rb2RtRnNkV1Z6T2lCaGJubGJYU3dnY21WMlpYSnpaU0E5SUdaaGJITmxLVG9nYm5WdFltVnlXMTBnZTF4dUlDQmpiMjV6ZENCemIzSjBabTRnUFNCeVpYWmxjbk5sSUQ4Z0tHRTZJR0Z1ZVZ0ZExDQmlPaUJoYm5sYlhTa2dQVDRnS0dKYk1GMGdMU0JoV3pCZEtTQTZJQ2hoT2lCaGJubGJYU3dnWWpvZ1lXNTVXMTBwSUQwK0lDaGhXekJkSUMwZ1lsc3dYU2s3WEc0Z0lHTnZibk4wSUdSbFkyOXlJRDBnS0hZNklHRnVlU3dnYVRvZ2JuVnRZbVZ5S1NBOVBpQmJkaXdnYVYwN0lDOHZJSE5sZENCcGJtUmxlQ0IwYnlCMllXeDFaVnh1SUNCamIyNXpkQ0IxYm1SbFkyOXlJRDBnS0dFNklHRnVlVnRkS1NBOVBpQmhXekZkT3lBdkx5QnNaV0YyWlNCdmJteDVJR2x1WkdWNFhHNGdJR052Ym5OMElGOWhjbWR6YjNKMElEMGdLR0Z5Y2pvZ1lXNTVXMTBwSUQwK0lHRnljaTV0WVhBb1pHVmpiM0lwTG5OdmNuUW9jMjl5ZEdadUtTNXRZWEFvZFc1a1pXTnZjaWs3WEc0Z0lISmxkSFZ5YmlCZllYSm5jMjl5ZENoMllXeDFaWE1wTzF4dWZWeHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkR2hsSUdsdVpHVjRaWE1nYjJZZ2RHaGxJRzF2YzNRZ1pHbDJaWEp6WlNCdlltcGxZM1J6SUdGalkyOXlaR2x1WnlCMGJ5QjBhR1VnWkdsemRDQm1kVzVqZEdsdmJseHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJR3hsYm1kMGFDQjBiM1JoYkNCdWRXMWlaWElnYjJZZ2IySnFaV04wYzF4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHNGdiblZ0WW1WeUlHOW1JR1JwZG1WeWMyVWdaV3hsYldWdWRITWdkRzhnWm1sdVpGeHVJQ29nUUhCaGNtRnRJSHNvYVRFNklHNTFiV0psY2l3Z2FUSTZJRzUxYldKbGNpa2dQVDRnYm5WdFltVnlmU0JrYVhOMElHRWdablZ1WTNScGIyNGdkMmhwWTJnZ1kyRnNZM1ZzWVhSbGN5QmthWE4wWVc1alpTQmlaWFIzWldWdUlIUjNieUJ2WW1wbFkzUnpJSFZ6YVc1bklIUm9aV2x5SUdsdVpHVjRaWE5jYmlBcUlFQnlaWFIxY201eklIdHVkVzFpWlhKYlhYMGdWR2hsSUdsdVpHVjRaWE1nYjJZZ2RHaGxJRzF2YzNRZ1pHbDJaWEp6WlNCdlltcGxZM1J6WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQm5aWFJFYVhabGNuTmxVM1ZpYzJWMEtHeGxibWQwYURvZ2JuVnRZbVZ5TENCdU9pQnVkVzFpWlhJc0lHUnBjM1E2SUNocE1Ub2diblZ0WW1WeUxDQnBNam9nYm5WdFltVnlLU0E5UGlCdWRXMWlaWElwT2lCdWRXMWlaWEpiWFNCN1hHNGdJR1oxYm1OMGFXOXVJRzFoZUVKNUtIWmhiSFZsY3pvZ1NYUmxjbUZpYkdWSmRHVnlZWFJ2Y2p4dWRXMWlaWEkrTENCdmNtUmxja0o1T2lBb2FUb2diblZ0WW1WeUtTQTlQaUJ1ZFcxaVpYSXBJSHRjYmlBZ0lDQnNaWFFnYldGNFZtRnNkV1VnUFNCdWRXeHNPMXh1SUNBZ0lHeGxkQ0J0WVhoUGNtUmxja0o1SUQwZ2JuVnNiRHRjYmx4dUlDQWdJR1p2Y2lBb1kyOXVjM1FnWld4bGJXVnVkQ0J2WmlCMllXeDFaWE1wSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJR1ZzWlcxbGJuUlBjbVJsY2tKNUlEMGdiM0prWlhKQ2VTaGxiR1Z0Wlc1MEtUdGNiaUFnSUNBZ0lHbG1JQ2h0WVhoUGNtUmxja0o1SUQwOUlHNTFiR3dnZkh3Z1pXeGxiV1Z1ZEU5eVpHVnlRbmtnUGlCdFlYaFBjbVJsY2tKNUtTQjdYRzRnSUNBZ0lDQWdJRzFoZUZaaGJIVmxJRDBnWld4bGJXVnVkRHRjYmlBZ0lDQWdJQ0FnYldGNFQzSmtaWEpDZVNBOUlHVnNaVzFsYm5SUGNtUmxja0o1TzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2JXRjRWbUZzZFdVN1hHNGdJSDFjYmx4dUlDQmpiMjV6ZENCemRXSnpaWFFnUFNCYmNtRnVaRzl0U1c1MEtHeGxibWQwYUNBdElERXBYVHRjYmlBZ1kyOXVjM1FnWTI5dGNHeGxiV1Z1ZENBOUlHNWxkeUJUWlhRb0tUdGNibHh1SUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHeGxibWQwYURzZ0t5dHBLU0I3WEc0Z0lDQWdhV1lnS0NGemRXSnpaWFF1YVc1amJIVmtaWE1vYVNrcFhHNGdJQ0FnSUNCamIyMXdiR1Z0Wlc1MExtRmtaQ2hwS1R0Y2JpQWdmVnh1WEc0Z0lIZG9hV3hsSUNoemRXSnpaWFF1YkdWdVozUm9JRHdnYmlrZ2UxeHVJQ0FnSUdOdmJuTjBJR2xrZUNBOUlHMWhlRUo1S0Z4dUlDQWdJQ0FnWTI5dGNHeGxiV1Z1ZEM1MllXeDFaWE1vS1NCaGN5QkpkR1Z5WVdKc1pVbDBaWEpoZEc5eVBHNTFiV0psY2o0c1hHNGdJQ0FnSUNBb2FTa2dQVDRnVFdGMGFDNXRhVzR1WVhCd2JIa29UV0YwYUN3Z2MzVmljMlYwTG0xaGNDaG1kVzVqZEdsdmJpQW9kbUZzTENCcGJtUmxlQ2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnWkdsemRDaHBMQ0IyWVd3cE8xeHVJQ0FnSUNBZ2ZTa3BLVHRjYmlBZ0lDQnBaaUFvYVdSNEtTQjdYRzRnSUNBZ0lDQnpkV0p6WlhRdWNIVnphQ2hwWkhncE8xeHVJQ0FnSUNBZ1kyOXRjR3hsYldWdWRDNWtaV3hsZEdVb2FXUjRLVHRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlITjFZbk5sZER0Y2JuMWNibHh1THlvcVhHNGdLaUJTWlhSMWNtNXpJRzV2Y20xaGJHbDZaV1FnZG1WamRHOXlYRzRnS2lCQWNHRnlZVzBnWkdGMFlTQnVkVzFsY21sallXd2dZWEp5WVhsY2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJRzV2Y20xaGJHbDZaU2hrWVhSaE9pQldaV04wYjNJcE9pQldaV04wYjNJZ2UxeHVJQ0JzWlhRZ2JXVmhiaUE5SURBN1hHNGdJR3hsZENCemRHUWdQU0F3TzF4dVhHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnWkdGMFlTNXNaVzVuZEdnN0lDc3JhU2xjYmlBZ0lDQnRaV0Z1SUNzOUlHUmhkR0ZiYVYwN1hHNWNiaUFnYldWaGJpQXZQU0JrWVhSaExteGxibWQwYUR0Y2JseHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUdSaGRHRXViR1Z1WjNSb095QXJLMmtwWEc0Z0lDQWdjM1JrSUNzOUlDaGtZWFJoVzJsZElDMGdiV1ZoYmlrZ0tpQW9aR0YwWVZ0cFhTQXRJRzFsWVc0cE8xeHVYRzRnSUhOMFpDQTlJRTFoZEdndWMzRnlkQ2h6ZEdRZ0x5QmtZWFJoTG14bGJtZDBhQ2s3WEc1Y2JpQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JrWVhSaExteGxibWQwYURzZ0t5dHBLVnh1SUNBZ0lHUmhkR0ZiYVYwZ1BTQW9aR0YwWVZ0cFhTQXRJRzFsWVc0cElDOGdjM1JrTzF4dVhHNGdJSEpsZEhWeWJpQmtZWFJoTzF4dWZWeHVYRzR2S2lwY2JpQXFJRVpwYm1SeklITmxkQ0JrYVdabVpYSmxibU5sSUdKbGRIZGxaVzRnZEhkdklHeHBjM1J6TGx4dUlDb2dRSEJoY21GdElIdGhibmxiWFgwZ1lTQlVhR1VnWm1seWMzUWdiR2x6ZEM1Y2JpQXFJRUJ3WVhKaGJTQjdZVzU1VzExOUlHSWdWR2hsSUhObFkyOXVaQ0JzYVhOMExseHVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYzJWMFJHbG1abVZ5Wlc1alpTaGhPaUJoYm5sYlhTd2dZam9nWVc1NVcxMHBPaUJoYm5sYlhTQjdYRzRnSUdOdmJuTjBJR0pUWlhRZ1BTQnVaWGNnVTJWMEtHSXBPMXh1SUNCeVpYUjFjbTRnUVhKeVlYa3Vabkp2YlNodVpYY2dVMlYwS0dFdVptbHNkR1Z5S0NoNEtTQTlQaUFoWWxObGRDNW9ZWE1vZUNrcEtTNTJZV3gxWlhNb0tTazdYRzU5WEc0aVhYMD0iLCJpbXBvcnQgKiBhcyB1bWogZnJvbSAndW1hcC1qcyc7XG5pbXBvcnQgeyBUU05FIH0gZnJvbSAnQGtlY2tlbHQvdHNuZSc7XG5pbXBvcnQgeyBWZWN0b3IgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90eXBlLWRlY2xhcmF0aW9ucyc7XG5pbXBvcnQgeyBjYWxjRGlzdGFuY2VNYXRyaXgsIHRyYW5zcG9zZU1hdHJpeCwgYXNzZXJ0LCB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3ZlY3Rvci1vcGVyYXRpb25zJztcbmltcG9ydCB7IFNQRUJhc2UsIFBTUEVCYXNlLCBPcmlnaW5hbFNQRSB9IGZyb20gJy4vc3BlJztcbmltcG9ydCB7IE1lYXN1cmUsIEF2YWlsYWJsZU1ldHJpY3MsIGlzQml0QXJyYXlNZXRyaWMgfSBmcm9tICcuL3R5cGVkLW1ldHJpY3MnO1xuaW1wb3J0IEJpdEFycmF5IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL2JpdC1hcnJheSc7XG4vKipcbiAqIEFic3RyYWN0IGRpbWVuc2lvbmFsaXR5IHJlZHVjZXIuXG4gKlxuICogQGFic3RyYWN0XG4gKiBAY2xhc3MgUmVkdWNlclxuICovXG5jbGFzcyBSZWR1Y2VyIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFJlZHVjZXIuXG4gICAgICogQHBhcmFtIHtPcHRpb25zfSBvcHRpb25zIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgICogQG1lbWJlcm9mIFJlZHVjZXJcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG9wdGlvbnMuZGF0YTtcbiAgICB9XG59XG4vKipcbiAqIEltcGxlbWVudHMgdC1TTkUgZGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uLlxuICpcbiAqIEBjbGFzcyBUU05FUmVkdWNlclxuICogQGV4dGVuZHMge1JlZHVjZXJ9XG4gKi9cbmNsYXNzIFRTTkVSZWR1Y2VyIGV4dGVuZHMgUmVkdWNlciB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBUU05FUmVkdWNlci5cbiAgICAgKiBAcGFyYW0ge09wdGlvbnN9IG9wdGlvbnMgT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgKiBAbWVtYmVyb2YgVFNORVJlZHVjZXJcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XG4gICAgICAgIHRoaXMucmVkdWNlciA9IG5ldyBUU05FKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLml0ZXJhdGlvbnMgPSAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuaXRlcmF0aW9ucykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMTAwO1xuICAgICAgICB0aGlzLmRpc3RhbmNlRm4gPSBvcHRpb25zLmRpc3RhbmNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbWJlZHMgdGhlIGRhdGEgZ2l2ZW4gaW50byB0aGUgdHdvLWRpbWVuc2lvbmFsIHNwYWNlIHVzaW5nIHQtU05FIG1ldGhvZC5cbiAgICAgKiBAcmV0dXJuIHthbnl9IENhcnRlc2lhbiBjb29yZGluYXRlIG9mIHRoaXMgZW1iZWRkaW5nIGFuZCBkaXN0YW5jZSBtYXRyaXggd2hlcmUgYXBwbGljYWJsZS5cbiAgICAgKi9cbiAgICB0cmFuc2Zvcm0oKSB7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlID0gY2FsY0Rpc3RhbmNlTWF0cml4KHRoaXMuZGF0YSwgdGhpcy5kaXN0YW5jZUZuKTtcbiAgICAgICAgdGhpcy5yZWR1Y2VyLmluaXREYXRhRGlzdChkaXN0YW5jZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5pdGVyYXRpb25zOyArK2kpIHtcbiAgICAgICAgICAgIHRoaXMucmVkdWNlci5zdGVwKCk7IC8vIGV2ZXJ5IHRpbWUgeW91IGNhbGwgdGhpcywgc29sdXRpb24gZ2V0cyBiZXR0ZXJcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkaXN0YW5jZTogZGlzdGFuY2UsIGVtYmVkZGluZzogdGhpcy5yZWR1Y2VyLmdldFNvbHV0aW9uKCkgfTtcbiAgICB9XG59XG4vKipcbiAqIEltcGxlbWVudHMgVU1BUCBkaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24uXG4gKlxuICogQGNsYXNzIFVNQVBSZWR1Y2VyXG4gKiBAZXh0ZW5kcyB7UmVkdWNlcn1cbiAqL1xuY2xhc3MgVU1BUFJlZHVjZXIgZXh0ZW5kcyBSZWR1Y2VyIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFVNQVBSZWR1Y2VyLlxuICAgICAqIEBwYXJhbSB7T3B0aW9uc30gb3B0aW9ucyBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAqIEBtZW1iZXJvZiBVTUFQUmVkdWNlclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XG4gICAgICAgIGFzc2VydCgnZGlzdGFuY2VGbicgaW4gb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuZGlzdGFuY2VGbiA9IG9wdGlvbnMuZGlzdGFuY2VGbjtcbiAgICAgICAgdGhpcy52ZWN0b3JzID0gW107XG4gICAgICAgIG9wdGlvbnMuZGlzdGFuY2VGbiA9IHRoaXMuX2VuY29kZWREaXN0YW5jZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnJlZHVjZXIgPSBuZXcgdW1qLlVNQVAob3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBkaXN0YW5jZSB3cmFwcGVyIHRvIGhhdmUgbnVtZXJpYyBpbnB1dHMgaW5zdGVhZCBvZiBzdHJpbmcgb25lcy5cbiAgICAgKlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKiBAcGFyYW0ge251bWJlcltdfSBhIFRoZSBmaXJzdCBpdGVtLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyW119IGIgVGhlIGZpcnN0IGl0ZW0uXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBEaXN0YW5jZSBtZXRyaWMuXG4gICAgICogQG1lbWJlcm9mIFVNQVBSZWR1Y2VyXG4gICAgICovXG4gICAgX2VuY29kZWREaXN0YW5jZShhLCBiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc3RhbmNlRm4odGhpcy5kYXRhW2FbMF1dLCB0aGlzLmRhdGFbYlswXV0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbmNvZGVzIHRoZSBpbnB1dCBkYXRhIGFzIGEgdmVjdG9yIG9mIGluZGljZXMuXG4gICAgICpcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICogQG1lbWJlcm9mIFVNQVBSZWR1Y2VyXG4gICAgICovXG4gICAgX2VuY29kZSgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHRoaXMudmVjdG9ycy5wdXNoKFtpXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRW1iZWRzIHRoZSBkYXRhIGdpdmVuIGludG8gdGhlIHR3by1kaW1lbnNpb25hbCBzcGFjZSB1c2luZyBVTUFQIG1ldGhvZC5cbiAgICAgKiBAcmV0dXJuIHthbnl9IENhcnRlc2lhbiBjb29yZGluYXRlIG9mIHRoaXMgZW1iZWRkaW5nLlxuICAgICAqL1xuICAgIHRyYW5zZm9ybSgpIHtcbiAgICAgICAgdGhpcy5fZW5jb2RlKCk7XG4gICAgICAgIGNvbnN0IGVtYmVkZGluZyA9IHRoaXMucmVkdWNlci5maXQodGhpcy52ZWN0b3JzKTtcbiAgICAgICAgZnVuY3Rpb24gYXJyYXlDYXN0MkNvb3JkaW5hdGVzKGRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXkoZGF0YS5sZW5ndGgpLmZpbGwoMCkubWFwKChfLCBpKSA9PiAoVmVjdG9yLmZyb20oZGF0YVtpXSkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBlbWJlZGRpbmc6IGFycmF5Q2FzdDJDb29yZGluYXRlcyhlbWJlZGRpbmcpIH07XG4gICAgfVxufVxuLyoqXG4gKiBJbXBsZW1lbnRzIG9yaWdpbmFsIFNQRSBkaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24uXG4gKlxuICogQGNsYXNzIFNQRVJlZHVjZXJcbiAqIEBleHRlbmRzIHtSZWR1Y2VyfVxuICovXG5jbGFzcyBTUEVSZWR1Y2VyIGV4dGVuZHMgUmVkdWNlciB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTUEVSZWR1Y2VyLlxuICAgICAqIEBwYXJhbSB7T3B0aW9uc30gb3B0aW9ucyBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAqIEBtZW1iZXJvZiBTUEVSZWR1Y2VyXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcihvcHRpb25zKTtcbiAgICAgICAgdGhpcy5yZWR1Y2VyID0gbmV3IFNQRUJhc2Uob3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVtYmVkcyB0aGUgZGF0YSBnaXZlbiBpbnRvIHRoZSB0d28tZGltZW5zaW9uYWwgc3BhY2UgdXNpbmcgdGhlIG9yaWdpbmFsIFNQRSBtZXRob2QuXG4gICAgICogQHJldHVybiB7YW55fSBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBvZiB0aGlzIGVtYmVkZGluZyBhbmQgZGlzdGFuY2UgbWF0cml4IHdoZXJlIGFwcGxpY2FibGUuXG4gICAgICovXG4gICAgdHJhbnNmb3JtKCkge1xuICAgICAgICBjb25zdCBlbWIgPSB0aGlzLnJlZHVjZXIuZW1iZWQodGhpcy5kYXRhKTtcbiAgICAgICAgcmV0dXJuIHsgZGlzdGFuY2U6IHRoaXMucmVkdWNlci5kaXN0YW5jZSwgZW1iZWRkaW5nOiBlbWIgfTtcbiAgICB9XG59XG4vKipcbiAqIEltcGxlbWVudHMgbW9kaWZpZWQgU1BFIGRpbWVuc2lvbmFsaXR5IHJlZHVjdGlvbi5cbiAqXG4gKiBAY2xhc3MgUFNQRVJlZHVjZXJcbiAqIEBleHRlbmRzIHtSZWR1Y2VyfVxuICovXG5jbGFzcyBQU1BFUmVkdWNlciBleHRlbmRzIFJlZHVjZXIge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUFNQRVJlZHVjZXIuXG4gICAgICogQHBhcmFtIHtPcHRpb25zfSBvcHRpb25zIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgICogQG1lbWJlcm9mIFBTUEVSZWR1Y2VyXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcihvcHRpb25zKTtcbiAgICAgICAgdGhpcy5yZWR1Y2VyID0gbmV3IFBTUEVCYXNlKG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbWJlZHMgdGhlIGRhdGEgZ2l2ZW4gaW50byB0aGUgdHdvLWRpbWVuc2lvbmFsIHNwYWNlIHVzaW5nIHRoZSBtb2RpZmllZCBTUEUgbWV0aG9kLlxuICAgICAqIEByZXR1cm4ge2FueX0gQ2FydGVzaWFuIGNvb3JkaW5hdGUgb2YgdGhpcyBlbWJlZGRpbmcgYW5kIGRpc3RhbmNlIG1hdHJpeCB3aGVyZSBhcHBsaWNhYmxlLlxuICAgICAqL1xuICAgIHRyYW5zZm9ybSgpIHtcbiAgICAgICAgY29uc3QgZW1iID0gdGhpcy5yZWR1Y2VyLmVtYmVkKHRoaXMuZGF0YSk7XG4gICAgICAgIHJldHVybiB7IGRpc3RhbmNlOiB0aGlzLnJlZHVjZXIuZGlzdGFuY2UsIGVtYmVkZGluZzogZW1iIH07XG4gICAgfVxufVxuLyoqXG4gKiBJbXBsZW1lbnRzIG9yaWdpbmFsIFNQRSBkaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24uXG4gKlxuICogQGNsYXNzIE9yaWdpbmFsU1BFUmVkdWNlclxuICogQGV4dGVuZHMge1JlZHVjZXJ9XG4gKi9cbmNsYXNzIE9yaWdpbmFsU1BFUmVkdWNlciBleHRlbmRzIFJlZHVjZXIge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgT3JpZ2luYWxTUEVSZWR1Y2VyLlxuICAgICAqIEBwYXJhbSB7T3B0aW9uc30gb3B0aW9ucyBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAqIEBtZW1iZXJvZiBPcmlnaW5hbFNQRVJlZHVjZXJcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLnJlZHVjZXIgPSBuZXcgT3JpZ2luYWxTUEUob3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVtYmVkcyB0aGUgZGF0YSBnaXZlbiBpbnRvIHRoZSB0d28tZGltZW5zaW9uYWwgc3BhY2UgdXNpbmcgdGhlIG9yaWdpbmFsIFNQRSBtZXRob2QuXG4gICAgICogQHJldHVybiB7YW55fSBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBvZiB0aGlzIGVtYmVkZGluZyBhbmQgZGlzdGFuY2UgbWF0cml4IHdoZXJlIGFwcGxpY2FibGUuXG4gICAgICovXG4gICAgdHJhbnNmb3JtKCkge1xuICAgICAgICBjb25zdCBlbWIgPSB0aGlzLnJlZHVjZXIuZW1iZWQodGhpcy5kYXRhKTtcbiAgICAgICAgcmV0dXJuIHsgZGlzdGFuY2U6IHRoaXMucmVkdWNlci5kaXN0YW5jZSwgZW1iZWRkaW5nOiBlbWIgfTtcbiAgICB9XG59XG5jb25zdCBBdmFpbGFibGVSZWR1Y2VycyA9IHtcbiAgICAnVU1BUCc6IFVNQVBSZWR1Y2VyLFxuICAgICd0LVNORSc6IFRTTkVSZWR1Y2VyLFxuICAgICdTUEUnOiBTUEVSZWR1Y2VyLFxuICAgICdwU1BFJzogUFNQRVJlZHVjZXIsXG4gICAgJ09yaWdpbmFsU1BFJzogT3JpZ2luYWxTUEVSZWR1Y2VyLFxufTtcbi8qKlxuICogVW5pZmllZCBjbGFzcyBpbXBsZW1lbnRpbmcgZGlmZmVyZW50IGRpbWVuc2lvbmFsaXR5IHJlZHVjdGlvbiBtZXRob2RzLlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBEaW1lbnNpb25hbGl0eVJlZHVjZXJcbiAqL1xuZXhwb3J0IGNsYXNzIERpbWVuc2lvbmFsaXR5UmVkdWNlciB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBEaW1lbnNpb25hbGl0eVJlZHVjZXIuXG4gICAgICogQHBhcmFtIHthbnlbXX0gZGF0YSBWZWN0b3JzIHRvIGVtYmVkLlxuICAgICAqIEBwYXJhbSB7S25vd25NZXRob2RzfSBtZXRob2QgRW1iZWRkaW5nIG1ldGhvZCB0byBiZSBhcHBsaWVkXG4gICAgICogQHBhcmFtIHtLbm93bk1ldHJpY3N9IG1ldHJpYyBEaXN0YW5jZSBtZXRyaWMgdG8gYmUgY29tcHV0ZWQgYmV0d2VlbiBlYWNoIG9mIHRoZSB2ZWN0b3JzLlxuICAgICAqIEBwYXJhbSB7T3B0aW9uc30gW29wdGlvbnNdIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgaW1wbGVtZW50aW5nIGVtYmVkZGVycy5cbiAgICAgKiBAbWVtYmVyb2YgRGltZW5zaW9uYWxpdHlSZWR1Y2VyXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoZGF0YSwgbWV0aG9kLCBtZXRyaWMsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBtZWFzdXJlID0gbmV3IE1lYXN1cmUobWV0cmljKS5nZXRNZWFzdXJlKCk7XG4gICAgICAgIGxldCBzcGVjT3B0aW9ucyA9IHt9O1xuICAgICAgICBpZiAoaXNCaXRBcnJheU1ldHJpYyhtZXRyaWMpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBkYXRhW2ldID0gbmV3IEJpdEFycmF5KGRhdGFbaV0uX2RhdGEsIGRhdGFbaV0uX2xlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGhvZCA9PSAnVU1BUCcpIHtcbiAgICAgICAgICAgIHNwZWNPcHRpb25zID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBkYXRhOiBkYXRhIH0sIHsgZGlzdGFuY2VGbjogbWVhc3VyZSB9KSwgeyBuRXBvY2hzOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY3ljbGVzIH0pLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtZXRob2QgPT0gJ3QtU05FJykge1xuICAgICAgICAgICAgc3BlY09wdGlvbnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IGRhdGE6IGRhdGEgfSwgeyBkaXN0YW5jZTogbWVhc3VyZSB9KSwgeyBpdGVyYXRpb25zOiAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY3ljbGVzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB1bmRlZmluZWQgfSksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAnU1BFJykge1xuICAgICAgICAgICAgc3BlY09wdGlvbnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBkYXRhOiBkYXRhIH0sIHsgZGlzdGFuY2U6IG1lYXN1cmUgfSksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3BlY09wdGlvbnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBkYXRhOiBkYXRhIH0sIHsgZGlzdGFuY2U6IG1lYXN1cmUgfSksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVkdWNlciA9IG5ldyBBdmFpbGFibGVSZWR1Y2Vyc1ttZXRob2RdKHNwZWNPcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW1iZWRzIHRoZSBkYXRhIGdpdmVuIGludG8gdGhlIHR3by1kaW1lbnNpb25hbCBzcGFjZSB1c2luZyB0aGUgY2hvc2VuIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdHJhbnNwb3NlIFdoZXRoZXIgdG8gdHJhbnNmb3JtIGNvb3JkaW5hdGVzIHRvIGhhdmUgY29sdW1ucy1maXJzdCBvcmllbnRhdGlvbi5cbiAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGVtYmVkZGluZyBtZXRob2Qgd2FzIG5vdCBmb3VuZC5cbiAgICAgKiBAcmV0dXJuIHthbnl9IENhcnRlc2lhbiBjb29yZGluYXRlIG9mIHRoaXMgZW1iZWRkaW5nIGFuZCBkaXN0YW5jZSBtYXRyaXggd2hlcmUgYXBwbGljYWJsZS5cbiAgICAgKiBAbWVtYmVyb2YgRGltZW5zaW9uYWxpdHlSZWR1Y2VyXG4gICAgICovXG4gICAgdHJhbnNmb3JtKHRyYW5zcG9zZSA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLnJlZHVjZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXIgd2FzIG5vdCBkZWZpbmVkLicpO1xuICAgICAgICB9XG4gICAgICAgIGxldCB7IGVtYmVkZGluZywgZGlzdGFuY2UgfSA9IHRoaXMucmVkdWNlci50cmFuc2Zvcm0oKTtcbiAgICAgICAgaWYgKHRyYW5zcG9zZSkge1xuICAgICAgICAgICAgZW1iZWRkaW5nID0gdHJhbnNwb3NlTWF0cml4KGVtYmVkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZGlzdGFuY2U6IGRpc3RhbmNlLCBlbWJlZGRpbmc6IGVtYmVkZGluZyB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIG1ldHJpY3MgYXZhaWxhYmxlIGJ5IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0F2YWlsYWJsZURhdGFUeXBlc30gdHlwZU5hbWUgdHlwZSBuYW1lXG4gICAgICogQHJldHVybiB7c3RyaW5nW119IE1ldHJpYyBuYW1lcyB3aGljaCBleHBlY3RzIHRoZSBnaXZlbiBkYXRhIHR5cGVcbiAgICAgKiBAbWVtYmVyb2YgRGltZW5zaW9uYWxpdHlSZWR1Y2VyXG4gICAgICovXG4gICAgc3RhdGljIGF2YWlsYWJsZU1ldHJpY3NCeVR5cGUodHlwZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKEF2YWlsYWJsZU1ldHJpY3NbdHlwZU5hbWVdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBkaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24gbWV0aG9kcyBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKiBAbWVtYmVyb2YgRGltZW5zaW9uYWxpdHlSZWR1Y2VyXG4gICAgICovXG4gICAgc3RhdGljIGdldCBhdmFpbGFibGVNZXRob2RzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoQXZhaWxhYmxlUmVkdWNlcnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIG1ldHJpY3MgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICogQG1lbWJlcm9mIERpbWVuc2lvbmFsaXR5UmVkdWNlclxuICAgICAqL1xuICAgIHN0YXRpYyBnZXQgYXZhaWxhYmxlTWV0cmljcygpIHtcbiAgICAgICAgbGV0IGFucyA9IFtdO1xuICAgICAgICBPYmplY3QudmFsdWVzKEF2YWlsYWJsZU1ldHJpY3MpLmZvckVhY2goKG9iaikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXJyYXkgPSBPYmplY3QudmFsdWVzKG9iaik7XG4gICAgICAgICAgICBhbnMgPSBbLi4uYW5zLCAuLi5hcnJheV07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYW5zO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNtVmtkV05sTFdScGJXVnVjMmx2Ym1Gc2FYUjVMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaWNtVmtkV05sTFdScGJXVnVjMmx2Ym1Gc2FYUjVMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFOUJRVThzUzBGQlN5eEhRVUZITEUxQlFVMHNVMEZCVXl4RFFVRkRPMEZCUXk5Q0xFOUJRVThzUlVGQlF5eEpRVUZKTEVWQlFVTXNUVUZCVFN4bFFVRmxMRU5CUVVNN1FVRkRia01zVDBGQlR5eEZRVWxNTEUxQlFVMHNSVUZGUXl4TlFVRk5MR2xFUVVGcFJDeERRVUZETzBGQlEycEZMRTlCUVU4c1JVRkRUQ3hyUWtGQmEwSXNSVUZEYkVJc1pVRkJaU3hGUVVObUxFMUJRVTBzUjBGRFVDeE5RVUZOTEdsRVFVRnBSQ3hEUVVGRE8wRkJRM3BFTEU5QlFVOHNSVUZCUXl4UFFVRlBMRVZCUVVVc1VVRkJVU3hGUVVGRkxGZEJRVmNzUlVGQlF5eE5RVUZOTEU5QlFVOHNRMEZCUXp0QlFVTnlSQ3hQUVVGUExFVkJRVU1zVDBGQlR5eEZRVUZuUWl4blFrRkJaMElzUlVGQlJTeG5Ra0ZCWjBJc1JVRkJjVUlzVFVGQlRTeHBRa0ZCYVVJc1EwRkJRenRCUVVNNVJ5eFBRVUZQTEZGQlFWRXNUVUZCVFN4NVEwRkJlVU1zUTBGQlF6dEJRVVV2UkRzN096czdSMEZMUnp0QlFVTklMRTFCUVdVc1QwRkJUenRKUVVkd1FqczdPenRQUVVsSE8wbEJRMGdzV1VGQldTeFBRVUZuUWp0UlFVTXhRaXhKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNN1NVRkRNMElzUTBGQlF6dERRVlZHTzBGQlJVUTdPenM3TzBkQlMwYzdRVUZEU0N4TlFVRk5MRmRCUVZrc1UwRkJVU3hQUVVGUE8wbEJTeTlDT3pzN08wOUJTVWM3U1VGRFNDeFpRVUZaTEU5QlFXZENPenRSUVVNeFFpeExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1VVRkRaaXhKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVsQlFVa3NTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJRMnBETEVsQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc1RVRkJRU3hQUVVGUExHRkJRVkFzVDBGQlR5eDFRa0ZCVUN4UFFVRlBMRU5CUVVVc1ZVRkJWU3h0UTBGQlNTeEhRVUZITEVOQlFVTTdVVUZETjBNc1NVRkJTU3hEUVVGRExGVkJRVlVzUjBGQlJ5eFBRVUZQTEVOQlFVTXNVVUZCVVN4RFFVRkRPMGxCUTNKRExFTkJRVU03U1VGRlJEczdPMDlCUjBjN1NVRkRTU3hUUVVGVE8xRkJRMlFzVFVGQlRTeFJRVUZSTEVkQlFVY3NhMEpCUVd0Q0xFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NSVUZCUlN4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU03VVVGRGFFVXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhaUVVGWkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdVVUZGY0VNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVTdXVUZEZUVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXl4RFFVRkRMR2xFUVVGcFJEdFRRVU4yUlR0UlFVTkVMRTlCUVU4c1JVRkJReXhSUVVGUkxFVkJRVVVzVVVGQlVTeEZRVUZGTEZOQlFWTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUlVGQlJTeEZRVUZETEVOQlFVTTdTVUZEY2tVc1EwRkJRenREUVVOR08wRkJSVVE3T3pzN08wZEJTMGM3UVVGRFNDeE5RVUZOTEZkQlFWa3NVMEZCVVN4UFFVRlBPMGxCU3k5Q096czdPMDlCU1VjN1NVRkRTQ3haUVVGWkxFOUJRV2RDTzFGQlF6RkNMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dFJRVVZtTEUxQlFVMHNRMEZCUXl4WlFVRlpMRWxCUVVrc1QwRkJUeXhEUVVGRExFTkJRVU03VVVGRmFFTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1IwRkJSeXhQUVVGUExFTkJRVU1zVlVGQlZTeERRVUZETzFGQlEzSkRMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzUlVGQlJTeERRVUZETzFGQlEyeENMRTlCUVU4c1EwRkJReXhWUVVGVkxFZEJRVWNzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTjBSQ3hKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVsQlFVa3NSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dEpRVU4yUXl4RFFVRkRPMGxCUlVRN096czdPenM3TzA5QlVVYzdTVUZEVHl4blFrRkJaMElzUTBGQlF5eERRVUZYTEVWQlFVVXNRMEZCVnp0UlFVTnFSQ3hQUVVGUExFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRNMFFzUTBGQlF6dEpRVVZFT3pzN096dFBRVXRITzBsQlEwOHNUMEZCVHp0UlFVTm1MRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlR0WlFVTjZReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VTBGRGVFSTdTVUZEU0N4RFFVRkRPMGxCUlVRN096dFBRVWRITzBsQlEwa3NVMEZCVXp0UlFVTmtMRWxCUVVrc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dFJRVVZtTEUxQlFVMHNVMEZCVXl4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRSUVVWcVJDeFRRVUZUTEhGQ1FVRnhRaXhEUVVGRExFbEJRV2RDTzFsQlF6ZERMRTlCUVU4c1NVRkJTU3hMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUXpsRkxFTkJRVU03VVVGRlJDeFBRVUZQTEVWQlFVTXNVMEZCVXl4RlFVRkZMSEZDUVVGeFFpeERRVUZETEZOQlFWTXNRMEZCUXl4RlFVRkRMRU5CUVVNN1NVRkRka1FzUTBGQlF6dERRVU5HTzBGQlJVUTdPenM3TzBkQlMwYzdRVUZEU0N4TlFVRk5MRlZCUVZjc1UwRkJVU3hQUVVGUE8wbEJSemxDT3pzN08wOUJTVWM3U1VGRFNDeFpRVUZaTEU5QlFXZENPMUZCUXpGQ0xFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTm1MRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzU1VGQlNTeFBRVUZQTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1NVRkRkRU1zUTBGQlF6dEpRVVZFT3pzN1QwRkhSenRKUVVOSkxGTkJRVk03VVVGRFpDeE5RVUZOTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkRNVU1zVDBGQlR5eEZRVUZETEZGQlFWRXNSVUZCUlN4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGRkJRVkVzUlVGQlJTeFRRVUZUTEVWQlFVVXNSMEZCUnl4RlFVRkRMRU5CUVVNN1NVRkRNMFFzUTBGQlF6dERRVU5HTzBGQlJVUTdPenM3TzBkQlMwYzdRVUZEU0N4TlFVRk5MRmRCUVZrc1UwRkJVU3hQUVVGUE8wbEJSeTlDT3pzN08wOUJTVWM3U1VGRFNDeFpRVUZaTEU5QlFXZENPMUZCUXpGQ0xFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTm1MRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzU1VGQlNTeFJRVUZSTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1NVRkRka01zUTBGQlF6dEpRVVZFT3pzN1QwRkhSenRKUVVOSkxGTkJRVk03VVVGRFpDeE5RVUZOTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkRNVU1zVDBGQlR5eEZRVUZETEZGQlFWRXNSVUZCUlN4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGRkJRVkVzUlVGQlJTeFRRVUZUTEVWQlFVVXNSMEZCUnl4RlFVRkRMRU5CUVVNN1NVRkRNMFFzUTBGQlF6dERRVU5HTzBGQlJVUTdPenM3TzBkQlMwYzdRVUZEU0N4TlFVRk5MR3RDUVVGdFFpeFRRVUZSTEU5QlFVODdTVUZIZEVNN096czdUMEZKUnp0SlFVTklMRmxCUVZrc1QwRkJaMEk3VVVGRE1VSXNTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJRMllzU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4SlFVRkpMRmRCUVZjc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dEpRVU14UXl4RFFVRkRPMGxCUlVRN096dFBRVWRITzBsQlEwa3NVMEZCVXp0UlFVTmtMRTFCUVUwc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU14UXl4UFFVRlBMRVZCUVVNc1VVRkJVU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNVVUZCVVN4RlFVRkZMRk5CUVZNc1JVRkJSU3hIUVVGSExFVkJRVU1zUTBGQlF6dEpRVU16UkN4RFFVRkRPME5CUTBZN1FVRkZSQ3hOUVVGTkxHbENRVUZwUWl4SFFVRkhPMGxCUTNoQ0xFMUJRVTBzUlVGQlJTeFhRVUZYTzBsQlEyNUNMRTlCUVU4c1JVRkJSU3hYUVVGWE8wbEJRM0JDTEV0QlFVc3NSVUZCUlN4VlFVRlZPMGxCUTJwQ0xFMUJRVTBzUlVGQlJTeFhRVUZYTzBsQlEyNUNMR0ZCUVdFc1JVRkJSU3hyUWtGQmEwSTdRMEZEYkVNc1EwRkJRenRCUVVsR096czdPenRIUVV0SE8wRkJRMGdzVFVGQlRTeFBRVUZQTEhGQ1FVRnhRanRKUVVkb1F6czdPenM3T3p0UFFVOUhPMGxCUTBnc1dVRkJXU3hKUVVGWExFVkJRVVVzVFVGQmIwSXNSVUZCUlN4TlFVRnZRaXhGUVVGRkxFOUJRV2xDT3p0UlFVTndSaXhOUVVGTkxFOUJRVThzUjBGQlJ5eEpRVUZKTEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF6dFJRVU5xUkN4SlFVRkpMRmRCUVZjc1IwRkJSeXhGUVVGRkxFTkJRVU03VVVGRmNrSXNTVUZCU1N4blFrRkJaMElzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlR0WlFVTTFRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlR0blFrRkRjRU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMkZCUTNoRU8xTkJRMFk3VVVGRlJDeEpRVUZKTEUxQlFVMHNTVUZCU1N4TlFVRk5MRVZCUVVVN1dVRkRjRUlzVjBGQlZ5dzJRMEZEVGl4RlFVRkRMRWxCUVVrc1JVRkJSU3hKUVVGSkxFVkJRVU1zUlVGRFdpeEZRVUZETEZWQlFWVXNSVUZCUlN4UFFVRlBMRVZCUVVNc1IwRkRja0lzUlVGQlF5eFBRVUZQTEVWQlFVVXNUMEZCVHl4aFFVRlFMRTlCUVU4c2RVSkJRVkFzVDBGQlR5eERRVUZGTEUxQlFVMHNSVUZCUXl4SFFVTXhRaXhQUVVGUExFTkJRMWdzUTBGQlF6dFRRVU5JTzJGQlFVMHNTVUZCU1N4TlFVRk5MRWxCUVVrc1QwRkJUeXhGUVVGRk8xbEJRelZDTEZkQlFWY3NOa05CUTA0c1JVRkJReXhKUVVGSkxFVkJRVVVzU1VGQlNTeEZRVUZETEVWQlExb3NSVUZCUXl4UlFVRlJMRVZCUVVVc1QwRkJUeXhGUVVGRExFZEJRMjVDTEVWQlFVTXNWVUZCVlN4RlFVRkZMRTFCUVVFc1QwRkJUeXhoUVVGUUxFOUJRVThzZFVKQlFWQXNUMEZCVHl4RFFVRkZMRTFCUVUwc2JVTkJRVWtzVTBGQlV5eEZRVUZETEVkQlF6RkRMRTlCUVU4c1EwRkRXQ3hEUVVGRE8xTkJRMGc3WVVGQlRTeEpRVUZKTEUxQlFVMHNTVUZCU1N4TFFVRkxMRVZCUVVVN1dVRkRNVUlzVjBGQlZ5d3JRa0ZCVHl4RlFVRkRMRWxCUVVrc1JVRkJSU3hKUVVGSkxFVkJRVU1zUlVGQlN5eEZRVUZETEZGQlFWRXNSVUZCUlN4UFFVRlBMRVZCUVVNc1IwRkJTeXhQUVVGUExFTkJRVU1zUTBGQlF6dFRRVU55UlR0aFFVRk5PMWxCUTB3c1YwRkJWeXdyUWtGQlR5eEZRVUZETEVsQlFVa3NSVUZCUlN4SlFVRkpMRVZCUVVNc1JVRkJTeXhGUVVGRExGRkJRVkVzUlVGQlJTeFBRVUZQTEVWQlFVTXNSMEZCU3l4UFFVRlBMRU5CUVVNc1EwRkJRenRUUVVOeVJUdFJRVU5FTEVsQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1NVRkJTU3hwUWtGQmFVSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF6dEpRVU0xUkN4RFFVRkRPMGxCUlVRN096czdPenM3VDBGUFJ6dEpRVU5KTEZOQlFWTXNRMEZCUXl4WlFVRnhRaXhMUVVGTE8xRkJRM3BETEVsQlFVa3NTVUZCU1N4RFFVRkRMRTlCUVU4c1NVRkJTU3hUUVVGVExFVkJRVVU3V1VGRE4wSXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXd3UWtGQk1FSXNRMEZCUXl4RFFVRkRPMU5CUXpkRE8xRkJSVVFzU1VGQlNTeEZRVUZETEZOQlFWTXNSVUZCUlN4UlFVRlJMRVZCUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkRPMUZCUlhKRUxFbEJRVWtzVTBGQlV5eEZRVUZGTzFsQlEySXNVMEZCVXl4SFFVRkhMR1ZCUVdVc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dFRRVU40UXp0UlFVTkVMRTlCUVU4c1JVRkJReXhSUVVGUkxFVkJRVVVzVVVGQlVTeEZRVUZGTEZOQlFWTXNSVUZCUlN4VFFVRlRMRVZCUVVNc1EwRkJRenRKUVVOd1JDeERRVUZETzBsQlJVUTdPenM3T3p0UFFVMUhPMGxCUTBnc1RVRkJUU3hEUVVGRExITkNRVUZ6UWl4RFFVRkRMRkZCUVRSQ08xRkJRM2hFTEU5QlFVOHNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRMnBFTEVOQlFVTTdTVUZGUkRzN096czdUMEZMUnp0SlFVTklMRTFCUVUwc1MwRkJTeXhuUWtGQlowSTdVVUZEZWtJc1QwRkJUeXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEdsQ1FVRnBRaXhEUVVGRExFTkJRVU03U1VGRGVFTXNRMEZCUXp0SlFVVkVPenM3T3p0UFFVdEhPMGxCUTBnc1RVRkJUU3hMUVVGTExHZENRVUZuUWp0UlFVTjZRaXhKUVVGSkxFZEJRVWNzUjBGQllTeEZRVUZGTEVOQlFVTTdVVUZEZGtJc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZPMWxCUXpsRExFMUJRVTBzUzBGQlN5eEhRVUZITEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGFrTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1IwRkJSeXhIUVVGSExFVkJRVVVzUjBGQlJ5eExRVUZMTEVOQlFVTXNRMEZCUXp0UlFVTXpRaXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5JTEU5QlFVOHNSMEZCUnl4RFFVRkRPMGxCUTJJc1EwRkJRenREUVVOR0lpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElDb2dZWE1nZFcxcUlHWnliMjBnSjNWdFlYQXRhbk1uTzF4dWFXMXdiM0owSUh0VVUwNUZmU0JtY205dElDZEFhMlZqYTJWc2RDOTBjMjVsSnp0Y2JtbHRjRzl5ZENCN1hHNGdJRTl3ZEdsdmJuTXNYRzRnSUVScGMzUmhibU5sVFdWMGNtbGpMRnh1SUNCRGIyOXlaR2x1WVhSbGN5eGNiaUFnVm1WamRHOXlMRnh1SUNCV1pXTjBiM0p6TEZ4dUlDQk5ZWFJ5YVhoOUlHWnliMjBnSjBCa1lYUmhaM0p2YXkxc2FXSnlZWEpwWlhNdmRYUnBiSE12YzNKakwzUjVjR1V0WkdWamJHRnlZWFJwYjI1ekp6dGNibWx0Y0c5eWRDQjdYRzRnSUdOaGJHTkVhWE4wWVc1alpVMWhkSEpwZUN4Y2JpQWdkSEpoYm5Od2IzTmxUV0YwY21sNExGeHVJQ0JoYzNObGNuUXNYRzU5SUdaeWIyMGdKMEJrWVhSaFozSnZheTFzYVdKeVlYSnBaWE12ZFhScGJITXZjM0pqTDNabFkzUnZjaTF2Y0dWeVlYUnBiMjV6Snp0Y2JtbHRjRzl5ZENCN1UxQkZRbUZ6WlN3Z1VGTlFSVUpoYzJVc0lFOXlhV2RwYm1Gc1UxQkZmU0JtY205dElDY3VMM053WlNjN1hHNXBiWEJ2Y25RZ2UwMWxZWE4xY21Vc0lFdHViM2R1VFdWMGNtbGpjeXdnUVhaaGFXeGhZbXhsVFdWMGNtbGpjeXdnYVhOQ2FYUkJjbkpoZVUxbGRISnBZeXdnUVhaaGFXeGhZbXhsUkdGMFlWUjVjR1Z6ZlNCbWNtOXRJQ2N1TDNSNWNHVmtMVzFsZEhKcFkzTW5PMXh1YVcxd2IzSjBJRUpwZEVGeWNtRjVJR1p5YjIwZ0owQmtZWFJoWjNKdmF5MXNhV0p5WVhKcFpYTXZkWFJwYkhNdmMzSmpMMkpwZEMxaGNuSmhlU2M3WEc1Y2JpOHFLbHh1SUNvZ1FXSnpkSEpoWTNRZ1pHbHRaVzV6YVc5dVlXeHBkSGtnY21Wa2RXTmxjaTVjYmlBcVhHNGdLaUJBWVdKemRISmhZM1JjYmlBcUlFQmpiR0Z6Y3lCU1pXUjFZMlZ5WEc0Z0tpOWNibUZpYzNSeVlXTjBJR05zWVhOeklGSmxaSFZqWlhJZ2UxeHVJQ0J3Y205MFpXTjBaV1FnWkdGMFlUb2dWbVZqZEc5eWN6dGNibHh1SUNBdktpcGNiaUFnSUNvZ1EzSmxZWFJsY3lCaGJpQnBibk4wWVc1alpTQnZaaUJTWldSMVkyVnlMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwOXdkR2x2Ym5OOUlHOXdkR2x2Ym5NZ1QzQjBhVzl1Y3lCMGJ5QndZWE56SUhSdklIUm9aU0JqYjI1emRISjFZM1J2Y2k1Y2JpQWdJQ29nUUcxbGJXSmxjbTltSUZKbFpIVmpaWEpjYmlBZ0lDb3ZYRzRnSUdOdmJuTjBjblZqZEc5eUtHOXdkR2x2Ym5NNklFOXdkR2x2Ym5NcElIdGNiaUFnSUNCMGFHbHpMbVJoZEdFZ1BTQnZjSFJwYjI1ekxtUmhkR0U3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1NYTWdkRzhnWlcxaVpXUWdkR2hsSUdSaGRHRWdaMmwyWlc0Z2FXNTBieUIwYUdVZ2RIZHZMV1JwYldWdWMybHZibUZzSUhOd1lXTmxMbHh1SUNBZ0tseHVJQ0FnS2lCQVlXSnpkSEpoWTNSY2JpQWdJQ29nUUhKbGRIVnliaUI3WVc1NWZTQkRZWEowWlhOcFlXNGdZMjl2Y21ScGJtRjBaU0J2WmlCMGFHbHpJR1Z0WW1Wa1pHbHVaeUJoYm1RZ1pHbHpkR0Z1WTJVZ2JXRjBjbWw0SUhkb1pYSmxJR0Z3Y0d4cFkyRmliR1V1WEc0Z0lDQXFJRUJ0WlcxaVpYSnZaaUJTWldSMVkyVnlYRzRnSUNBcUwxeHVJQ0JoWW5OMGNtRmpkQ0IwY21GdWMyWnZjbTBvS1RvZ2V5QmJhMlY1T2lCemRISnBibWRkSURvZ1RXRjBjbWw0SUgwN1hHNTlYRzVjYmk4cUtseHVJQ29nU1cxd2JHVnRaVzUwY3lCMExWTk9SU0JrYVcxbGJuTnBiMjVoYkdsMGVTQnlaV1IxWTNScGIyNHVYRzRnS2x4dUlDb2dRR05zWVhOeklGUlRUa1ZTWldSMVkyVnlYRzRnS2lCQVpYaDBaVzVrY3lCN1VtVmtkV05sY24xY2JpQXFMMXh1WTJ4aGMzTWdWRk5PUlZKbFpIVmpaWElnWlhoMFpXNWtjeUJTWldSMVkyVnlJSHRjYmlBZ2NISnZkR1ZqZEdWa0lISmxaSFZqWlhJNklGUlRUa1U3WEc0Z0lIQnliM1JsWTNSbFpDQnBkR1Z5WVhScGIyNXpPaUJ1ZFcxaVpYSTdYRzRnSUhCeWIzUmxZM1JsWkNCa2FYTjBZVzVqWlVadU9pQkVhWE4wWVc1alpVMWxkSEpwWXp0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUTNKbFlYUmxjeUJoYmlCcGJuTjBZVzVqWlNCdlppQlVVMDVGVW1Wa2RXTmxjaTVjYmlBZ0lDb2dRSEJoY21GdElIdFBjSFJwYjI1emZTQnZjSFJwYjI1eklFOXdkR2x2Ym5NZ2RHOGdjR0Z6Y3lCMGJ5QjBhR1VnWTI5dWMzUnlkV04wYjNJdVhHNGdJQ0FxSUVCdFpXMWlaWEp2WmlCVVUwNUZVbVZrZFdObGNseHVJQ0FnS2k5Y2JpQWdZMjl1YzNSeWRXTjBiM0lvYjNCMGFXOXVjem9nVDNCMGFXOXVjeWtnZTF4dUlDQWdJSE4xY0dWeUtHOXdkR2x2Ym5NcE8xeHVJQ0FnSUhSb2FYTXVjbVZrZFdObGNpQTlJRzVsZHlCVVUwNUZLRzl3ZEdsdmJuTXBPMXh1SUNBZ0lIUm9hWE11YVhSbGNtRjBhVzl1Y3lBOUlHOXdkR2x2Ym5NL0xtbDBaWEpoZEdsdmJuTWdQejhnTVRBd08xeHVJQ0FnSUhSb2FYTXVaR2x6ZEdGdVkyVkdiaUE5SUc5d2RHbHZibk11WkdsemRHRnVZMlU3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1JXMWlaV1J6SUhSb1pTQmtZWFJoSUdkcGRtVnVJR2x1ZEc4Z2RHaGxJSFIzYnkxa2FXMWxibk5wYjI1aGJDQnpjR0ZqWlNCMWMybHVaeUIwTFZOT1JTQnRaWFJvYjJRdVhHNGdJQ0FxSUVCeVpYUjFjbTRnZTJGdWVYMGdRMkZ5ZEdWemFXRnVJR052YjNKa2FXNWhkR1VnYjJZZ2RHaHBjeUJsYldKbFpHUnBibWNnWVc1a0lHUnBjM1JoYm1ObElHMWhkSEpwZUNCM2FHVnlaU0JoY0hCc2FXTmhZbXhsTGx4dUlDQWdLaTljYmlBZ2NIVmliR2xqSUhSeVlXNXpabTl5YlNncE9pQjdJRnRyWlhrNklITjBjbWx1WjEwZ09pQk5ZWFJ5YVhnZ2ZTQjdYRzRnSUNBZ1kyOXVjM1FnWkdsemRHRnVZMlVnUFNCallXeGpSR2x6ZEdGdVkyVk5ZWFJ5YVhnb2RHaHBjeTVrWVhSaExDQjBhR2x6TG1ScGMzUmhibU5sUm00cE8xeHVJQ0FnSUhSb2FYTXVjbVZrZFdObGNpNXBibWwwUkdGMFlVUnBjM1FvWkdsemRHRnVZMlVwTzF4dVhHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCMGFHbHpMbWwwWlhKaGRHbHZibk03SUNzcmFTa2dlMXh1SUNBZ0lDQWdkR2hwY3k1eVpXUjFZMlZ5TG5OMFpYQW9LVHNnTHk4Z1pYWmxjbmtnZEdsdFpTQjViM1VnWTJGc2JDQjBhR2x6TENCemIyeDFkR2x2YmlCblpYUnpJR0psZEhSbGNseHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdlMlJwYzNSaGJtTmxPaUJrYVhOMFlXNWpaU3dnWlcxaVpXUmthVzVuT2lCMGFHbHpMbkpsWkhWalpYSXVaMlYwVTI5c2RYUnBiMjRvS1gwN1hHNGdJSDFjYm4xY2JseHVMeW9xWEc0Z0tpQkpiWEJzWlcxbGJuUnpJRlZOUVZBZ1pHbHRaVzV6YVc5dVlXeHBkSGtnY21Wa2RXTjBhVzl1TGx4dUlDcGNiaUFxSUVCamJHRnpjeUJWVFVGUVVtVmtkV05sY2x4dUlDb2dRR1Y0ZEdWdVpITWdlMUpsWkhWalpYSjlYRzRnS2k5Y2JtTnNZWE56SUZWTlFWQlNaV1IxWTJWeUlHVjRkR1Z1WkhNZ1VtVmtkV05sY2lCN1hHNGdJSEJ5YjNSbFkzUmxaQ0J5WldSMVkyVnlPaUIxYldvdVZVMUJVRHRjYmlBZ2NISnZkR1ZqZEdWa0lHUnBjM1JoYm1ObFJtNDZJRVoxYm1OMGFXOXVPMXh1SUNCd2NtOTBaV04wWldRZ2RtVmpkRzl5Y3pvZ2JuVnRZbVZ5VzExYlhUdGNibHh1SUNBdktpcGNiaUFnSUNvZ1EzSmxZWFJsY3lCaGJpQnBibk4wWVc1alpTQnZaaUJWVFVGUVVtVmtkV05sY2k1Y2JpQWdJQ29nUUhCaGNtRnRJSHRQY0hScGIyNXpmU0J2Y0hScGIyNXpJRTl3ZEdsdmJuTWdkRzhnY0dGemN5QjBieUIwYUdVZ1kyOXVjM1J5ZFdOMGIzSXVYRzRnSUNBcUlFQnRaVzFpWlhKdlppQlZUVUZRVW1Wa2RXTmxjbHh1SUNBZ0tpOWNiaUFnWTI5dWMzUnlkV04wYjNJb2IzQjBhVzl1Y3pvZ1QzQjBhVzl1Y3lrZ2UxeHVJQ0FnSUhOMWNHVnlLRzl3ZEdsdmJuTXBPMXh1WEc0Z0lDQWdZWE56WlhKMEtDZGthWE4wWVc1alpVWnVKeUJwYmlCdmNIUnBiMjV6S1R0Y2JseHVJQ0FnSUhSb2FYTXVaR2x6ZEdGdVkyVkdiaUE5SUc5d2RHbHZibk11WkdsemRHRnVZMlZHYmp0Y2JpQWdJQ0IwYUdsekxuWmxZM1J2Y25NZ1BTQmJYVHRjYmlBZ0lDQnZjSFJwYjI1ekxtUnBjM1JoYm1ObFJtNGdQU0IwYUdsekxsOWxibU52WkdWa1JHbHpkR0Z1WTJVdVltbHVaQ2gwYUdsektUdGNiaUFnSUNCMGFHbHpMbkpsWkhWalpYSWdQU0J1WlhjZ2RXMXFMbFZOUVZBb2IzQjBhVzl1Y3lrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRM1Z6ZEc5dElHUnBjM1JoYm1ObElIZHlZWEJ3WlhJZ2RHOGdhR0YyWlNCdWRXMWxjbWxqSUdsdWNIVjBjeUJwYm5OMFpXRmtJRzltSUhOMGNtbHVaeUJ2Ym1WekxseHVJQ0FnS2x4dUlDQWdLaUJBY0hKdmRHVmpkR1ZrWEc0Z0lDQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeVcxMTlJR0VnVkdobElHWnBjbk4wSUdsMFpXMHVYRzRnSUNBcUlFQndZWEpoYlNCN2JuVnRZbVZ5VzExOUlHSWdWR2hsSUdacGNuTjBJR2wwWlcwdVhHNGdJQ0FxSUVCeVpYUjFjbTRnZTI1MWJXSmxjbjBnUkdsemRHRnVZMlVnYldWMGNtbGpMbHh1SUNBZ0tpQkFiV1Z0WW1WeWIyWWdWVTFCVUZKbFpIVmpaWEpjYmlBZ0lDb3ZYRzRnSUhCeWIzUmxZM1JsWkNCZlpXNWpiMlJsWkVScGMzUmhibU5sS0dFNklHNTFiV0psY2x0ZExDQmlPaUJ1ZFcxaVpYSmJYU2s2SUc1MWJXSmxjaUI3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WkdsemRHRnVZMlZHYmloMGFHbHpMbVJoZEdGYllWc3dYVjBzSUhSb2FYTXVaR0YwWVZ0aVd6QmRYU2s3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1JXNWpiMlJsY3lCMGFHVWdhVzV3ZFhRZ1pHRjBZU0JoY3lCaElIWmxZM1J2Y2lCdlppQnBibVJwWTJWekxseHVJQ0FnS2x4dUlDQWdLaUJBY0hKdmRHVmpkR1ZrWEc0Z0lDQXFJRUJ0WlcxaVpYSnZaaUJWVFVGUVVtVmtkV05sY2x4dUlDQWdLaTljYmlBZ2NISnZkR1ZqZEdWa0lGOWxibU52WkdVb0tTQjdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQjBhR2x6TG1SaGRHRXViR1Z1WjNSb095QXJLMmtwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVkbVZqZEc5eWN5NXdkWE5vS0Z0cFhTazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRVZ0WW1Wa2N5QjBhR1VnWkdGMFlTQm5hWFpsYmlCcGJuUnZJSFJvWlNCMGQyOHRaR2x0Wlc1emFXOXVZV3dnYzNCaFkyVWdkWE5wYm1jZ1ZVMUJVQ0J0WlhSb2IyUXVYRzRnSUNBcUlFQnlaWFIxY200Z2UyRnVlWDBnUTJGeWRHVnphV0Z1SUdOdmIzSmthVzVoZEdVZ2IyWWdkR2hwY3lCbGJXSmxaR1JwYm1jdVhHNGdJQ0FxTDF4dUlDQndkV0pzYVdNZ2RISmhibk5tYjNKdEtDazZJSHNnVzJ0bGVUb2djM1J5YVc1blhTQTZJRTFoZEhKcGVDQjlJSHRjYmlBZ0lDQjBhR2x6TGw5bGJtTnZaR1VvS1R0Y2JseHVJQ0FnSUdOdmJuTjBJR1Z0WW1Wa1pHbHVaeUE5SUhSb2FYTXVjbVZrZFdObGNpNW1hWFFvZEdocGN5NTJaV04wYjNKektUdGNibHh1SUNBZ0lHWjFibU4wYVc5dUlHRnljbUY1UTJGemRESkRiMjl5WkdsdVlYUmxjeWhrWVhSaE9pQnVkVzFpWlhKYlhWdGRLVG9nUTI5dmNtUnBibUYwWlhNZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUc1bGR5QkJjbkpoZVNoa1lYUmhMbXhsYm1kMGFDa3VabWxzYkNnd0tTNXRZWEFvS0Y4c0lHa3BJRDArSUNoV1pXTjBiM0l1Wm5KdmJTaGtZWFJoVzJsZEtTa3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCN1pXMWlaV1JrYVc1bk9pQmhjbkpoZVVOaGMzUXlRMjl2Y21ScGJtRjBaWE1vWlcxaVpXUmthVzVuS1gwN1hHNGdJSDFjYm4xY2JseHVMeW9xWEc0Z0tpQkpiWEJzWlcxbGJuUnpJRzl5YVdkcGJtRnNJRk5RUlNCa2FXMWxibk5wYjI1aGJHbDBlU0J5WldSMVkzUnBiMjR1WEc0Z0tseHVJQ29nUUdOc1lYTnpJRk5RUlZKbFpIVmpaWEpjYmlBcUlFQmxlSFJsYm1SeklIdFNaV1IxWTJWeWZWeHVJQ292WEc1amJHRnpjeUJUVUVWU1pXUjFZMlZ5SUdWNGRHVnVaSE1nVW1Wa2RXTmxjaUI3WEc0Z0lIQnliM1JsWTNSbFpDQnlaV1IxWTJWeU9pQlRVRVZDWVhObE8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGNtVmhkR1Z6SUdGdUlHbHVjM1JoYm1ObElHOW1JRk5RUlZKbFpIVmpaWEl1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdUM0IwYVc5dWMzMGdiM0IwYVc5dWN5QlBjSFJwYjI1eklIUnZJSEJoYzNNZ2RHOGdkR2hsSUdOdmJuTjBjblZqZEc5eUxseHVJQ0FnS2lCQWJXVnRZbVZ5YjJZZ1UxQkZVbVZrZFdObGNseHVJQ0FnS2k5Y2JpQWdZMjl1YzNSeWRXTjBiM0lvYjNCMGFXOXVjem9nVDNCMGFXOXVjeWtnZTF4dUlDQWdJSE4xY0dWeUtHOXdkR2x2Ym5NcE8xeHVJQ0FnSUhSb2FYTXVjbVZrZFdObGNpQTlJRzVsZHlCVFVFVkNZWE5sS0c5d2RHbHZibk1wTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFVnRZbVZrY3lCMGFHVWdaR0YwWVNCbmFYWmxiaUJwYm5SdklIUm9aU0IwZDI4dFpHbHRaVzV6YVc5dVlXd2djM0JoWTJVZ2RYTnBibWNnZEdobElHOXlhV2RwYm1Gc0lGTlFSU0J0WlhSb2IyUXVYRzRnSUNBcUlFQnlaWFIxY200Z2UyRnVlWDBnUTJGeWRHVnphV0Z1SUdOdmIzSmthVzVoZEdVZ2IyWWdkR2hwY3lCbGJXSmxaR1JwYm1jZ1lXNWtJR1JwYzNSaGJtTmxJRzFoZEhKcGVDQjNhR1Z5WlNCaGNIQnNhV05oWW14bExseHVJQ0FnS2k5Y2JpQWdjSFZpYkdsaklIUnlZVzV6Wm05eWJTZ3BPaUI3SUZ0clpYazZJSE4wY21sdVoxMGdPaUJOWVhSeWFYZ2dmU0I3WEc0Z0lDQWdZMjl1YzNRZ1pXMWlJRDBnZEdocGN5NXlaV1IxWTJWeUxtVnRZbVZrS0hSb2FYTXVaR0YwWVNrN1hHNGdJQ0FnY21WMGRYSnVJSHRrYVhOMFlXNWpaVG9nZEdocGN5NXlaV1IxWTJWeUxtUnBjM1JoYm1ObExDQmxiV0psWkdScGJtYzZJR1Z0WW4wN1hHNGdJSDFjYm4xY2JseHVMeW9xWEc0Z0tpQkpiWEJzWlcxbGJuUnpJRzF2WkdsbWFXVmtJRk5RUlNCa2FXMWxibk5wYjI1aGJHbDBlU0J5WldSMVkzUnBiMjR1WEc0Z0tseHVJQ29nUUdOc1lYTnpJRkJUVUVWU1pXUjFZMlZ5WEc0Z0tpQkFaWGgwWlc1a2N5QjdVbVZrZFdObGNuMWNiaUFxTDF4dVkyeGhjM01nVUZOUVJWSmxaSFZqWlhJZ1pYaDBaVzVrY3lCU1pXUjFZMlZ5SUh0Y2JpQWdjSEp2ZEdWamRHVmtJSEpsWkhWalpYSTZJRkJUVUVWQ1lYTmxPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkRjbVZoZEdWeklHRnVJR2x1YzNSaGJtTmxJRzltSUZCVFVFVlNaV1IxWTJWeUxseHVJQ0FnS2lCQWNHRnlZVzBnZTA5d2RHbHZibk45SUc5d2RHbHZibk1nVDNCMGFXOXVjeUIwYnlCd1lYTnpJSFJ2SUhSb1pTQmpiMjV6ZEhKMVkzUnZjaTVjYmlBZ0lDb2dRRzFsYldKbGNtOW1JRkJUVUVWU1pXUjFZMlZ5WEc0Z0lDQXFMMXh1SUNCamIyNXpkSEoxWTNSdmNpaHZjSFJwYjI1ek9pQlBjSFJwYjI1ektTQjdYRzRnSUNBZ2MzVndaWElvYjNCMGFXOXVjeWs3WEc0Z0lDQWdkR2hwY3k1eVpXUjFZMlZ5SUQwZ2JtVjNJRkJUVUVWQ1lYTmxLRzl3ZEdsdmJuTXBPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVWdFltVmtjeUIwYUdVZ1pHRjBZU0JuYVhabGJpQnBiblJ2SUhSb1pTQjBkMjh0WkdsdFpXNXphVzl1WVd3Z2MzQmhZMlVnZFhOcGJtY2dkR2hsSUcxdlpHbG1hV1ZrSUZOUVJTQnRaWFJvYjJRdVhHNGdJQ0FxSUVCeVpYUjFjbTRnZTJGdWVYMGdRMkZ5ZEdWemFXRnVJR052YjNKa2FXNWhkR1VnYjJZZ2RHaHBjeUJsYldKbFpHUnBibWNnWVc1a0lHUnBjM1JoYm1ObElHMWhkSEpwZUNCM2FHVnlaU0JoY0hCc2FXTmhZbXhsTGx4dUlDQWdLaTljYmlBZ2NIVmliR2xqSUhSeVlXNXpabTl5YlNncE9pQjdJRnRyWlhrNklITjBjbWx1WjEwZ09pQk5ZWFJ5YVhnZ2ZTQjdYRzRnSUNBZ1kyOXVjM1FnWlcxaUlEMGdkR2hwY3k1eVpXUjFZMlZ5TG1WdFltVmtLSFJvYVhNdVpHRjBZU2s3WEc0Z0lDQWdjbVYwZFhKdUlIdGthWE4wWVc1alpUb2dkR2hwY3k1eVpXUjFZMlZ5TG1ScGMzUmhibU5sTENCbGJXSmxaR1JwYm1jNklHVnRZbjA3WEc0Z0lIMWNibjFjYmx4dUx5b3FYRzRnS2lCSmJYQnNaVzFsYm5SeklHOXlhV2RwYm1Gc0lGTlFSU0JrYVcxbGJuTnBiMjVoYkdsMGVTQnlaV1IxWTNScGIyNHVYRzRnS2x4dUlDb2dRR05zWVhOeklFOXlhV2RwYm1Gc1UxQkZVbVZrZFdObGNseHVJQ29nUUdWNGRHVnVaSE1nZTFKbFpIVmpaWEo5WEc0Z0tpOWNibU5zWVhOeklFOXlhV2RwYm1Gc1UxQkZVbVZrZFdObGNpQmxlSFJsYm1SeklGSmxaSFZqWlhJZ2UxeHVJQ0J3Y205MFpXTjBaV1FnY21Wa2RXTmxjam9nVDNKcFoybHVZV3hUVUVVN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVOeVpXRjBaWE1nWVc0Z2FXNXpkR0Z1WTJVZ2IyWWdUM0pwWjJsdVlXeFRVRVZTWldSMVkyVnlMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwOXdkR2x2Ym5OOUlHOXdkR2x2Ym5NZ1QzQjBhVzl1Y3lCMGJ5QndZWE56SUhSdklIUm9aU0JqYjI1emRISjFZM1J2Y2k1Y2JpQWdJQ29nUUcxbGJXSmxjbTltSUU5eWFXZHBibUZzVTFCRlVtVmtkV05sY2x4dUlDQWdLaTljYmlBZ1kyOXVjM1J5ZFdOMGIzSW9iM0IwYVc5dWN6b2dUM0IwYVc5dWN5a2dlMXh1SUNBZ0lITjFjR1Z5S0c5d2RHbHZibk1wTzF4dUlDQWdJSFJvYVhNdWNtVmtkV05sY2lBOUlHNWxkeUJQY21sbmFXNWhiRk5RUlNodmNIUnBiMjV6S1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkZiV0psWkhNZ2RHaGxJR1JoZEdFZ1oybDJaVzRnYVc1MGJ5QjBhR1VnZEhkdkxXUnBiV1Z1YzJsdmJtRnNJSE53WVdObElIVnphVzVuSUhSb1pTQnZjbWxuYVc1aGJDQlRVRVVnYldWMGFHOWtMbHh1SUNBZ0tpQkFjbVYwZFhKdUlIdGhibmw5SUVOaGNuUmxjMmxoYmlCamIyOXlaR2x1WVhSbElHOW1JSFJvYVhNZ1pXMWlaV1JrYVc1bklHRnVaQ0JrYVhOMFlXNWpaU0J0WVhSeWFYZ2dkMmhsY21VZ1lYQndiR2xqWVdKc1pTNWNiaUFnSUNvdlhHNGdJSEIxWW14cFl5QjBjbUZ1YzJadmNtMG9LVG9nZXlCYmEyVjVPaUJ6ZEhKcGJtZGRJRG9nVFdGMGNtbDRJSDBnZTF4dUlDQWdJR052Ym5OMElHVnRZaUE5SUhSb2FYTXVjbVZrZFdObGNpNWxiV0psWkNoMGFHbHpMbVJoZEdFcE8xeHVJQ0FnSUhKbGRIVnliaUI3WkdsemRHRnVZMlU2SUhSb2FYTXVjbVZrZFdObGNpNWthWE4wWVc1alpTd2daVzFpWldSa2FXNW5PaUJsYldKOU8xeHVJQ0I5WEc1OVhHNWNibU52Ym5OMElFRjJZV2xzWVdKc1pWSmxaSFZqWlhKeklEMGdlMXh1SUNBblZVMUJVQ2M2SUZWTlFWQlNaV1IxWTJWeUxGeHVJQ0FuZEMxVFRrVW5PaUJVVTA1RlVtVmtkV05sY2l4Y2JpQWdKMU5RUlNjNklGTlFSVkpsWkhWalpYSXNYRzRnSUNkd1UxQkZKem9nVUZOUVJWSmxaSFZqWlhJc1hHNGdJQ2RQY21sbmFXNWhiRk5RUlNjNklFOXlhV2RwYm1Gc1UxQkZVbVZrZFdObGNpeGNibjA3WEc1Y2JtVjRjRzl5ZENCMGVYQmxJRXR1YjNkdVRXVjBhRzlrY3lBOUlHdGxlVzltSUhSNWNHVnZaaUJCZG1GcGJHRmliR1ZTWldSMVkyVnljenRjYmx4dUx5b3FYRzRnS2lCVmJtbG1hV1ZrSUdOc1lYTnpJR2x0Y0d4bGJXVnVkR2x1WnlCa2FXWm1aWEpsYm5RZ1pHbHRaVzV6YVc5dVlXeHBkSGtnY21Wa2RXTjBhVzl1SUcxbGRHaHZaSE11WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FHTnNZWE56SUVScGJXVnVjMmx2Ym1Gc2FYUjVVbVZrZFdObGNseHVJQ292WEc1bGVIQnZjblFnWTJ4aGMzTWdSR2x0Wlc1emFXOXVZV3hwZEhsU1pXUjFZMlZ5SUh0Y2JpQWdjSEpwZG1GMFpTQnlaV1IxWTJWeU9pQlNaV1IxWTJWeUlId2dkVzVrWldacGJtVmtPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkRjbVZoZEdWeklHRnVJR2x1YzNSaGJtTmxJRzltSUVScGJXVnVjMmx2Ym1Gc2FYUjVVbVZrZFdObGNpNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0aGJubGJYWDBnWkdGMFlTQldaV04wYjNKeklIUnZJR1Z0WW1Wa0xseHVJQ0FnS2lCQWNHRnlZVzBnZTB0dWIzZHVUV1YwYUc5a2MzMGdiV1YwYUc5a0lFVnRZbVZrWkdsdVp5QnRaWFJvYjJRZ2RHOGdZbVVnWVhCd2JHbGxaRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UwdHViM2R1VFdWMGNtbGpjMzBnYldWMGNtbGpJRVJwYzNSaGJtTmxJRzFsZEhKcFl5QjBieUJpWlNCamIyMXdkWFJsWkNCaVpYUjNaV1Z1SUdWaFkyZ2diMllnZEdobElIWmxZM1J2Y25NdVhHNGdJQ0FxSUVCd1lYSmhiU0I3VDNCMGFXOXVjMzBnVzI5d2RHbHZibk5kSUU5d2RHbHZibk1nZEc4Z2NHRnpjeUIwYnlCMGFHVWdhVzF3YkdWdFpXNTBhVzVuSUdWdFltVmtaR1Z5Y3k1Y2JpQWdJQ29nUUcxbGJXSmxjbTltSUVScGJXVnVjMmx2Ym1Gc2FYUjVVbVZrZFdObGNseHVJQ0FnS2k5Y2JpQWdZMjl1YzNSeWRXTjBiM0lvWkdGMFlUb2dZVzU1VzEwc0lHMWxkR2h2WkRvZ1MyNXZkMjVOWlhSb2IyUnpMQ0J0WlhSeWFXTTZJRXR1YjNkdVRXVjBjbWxqY3l3Z2IzQjBhVzl1Y3o4NklFOXdkR2x2Ym5NcElIdGNiaUFnSUNCamIyNXpkQ0J0WldGemRYSmxJRDBnYm1WM0lFMWxZWE4xY21Vb2JXVjBjbWxqS1M1blpYUk5aV0Z6ZFhKbEtDazdYRzRnSUNBZ2JHVjBJSE53WldOUGNIUnBiMjV6SUQwZ2UzMDdYRzVjYmlBZ0lDQnBaaUFvYVhOQ2FYUkJjbkpoZVUxbGRISnBZeWh0WlhSeWFXTXBLU0I3WEc0Z0lDQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUdSaGRHRXViR1Z1WjNSb095QXJLMmtwSUh0Y2JpQWdJQ0FnSUNBZ1pHRjBZVnRwWFNBOUlHNWxkeUJDYVhSQmNuSmhlU2hrWVhSaFcybGRMbDlrWVhSaExDQmtZWFJoVzJsZExsOXNaVzVuZEdncE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaHRaWFJvYjJRZ1BUMGdKMVZOUVZBbktTQjdYRzRnSUNBZ0lDQnpjR1ZqVDNCMGFXOXVjeUE5SUh0Y2JpQWdJQ0FnSUNBZ0xpNHVlMlJoZEdFNklHUmhkR0Y5TEZ4dUlDQWdJQ0FnSUNBdUxpNTdaR2x6ZEdGdVkyVkdiam9nYldWaGMzVnlaWDBzWEc0Z0lDQWdJQ0FnSUM0dUxudHVSWEJ2WTJoek9pQnZjSFJwYjI1elB5NWplV05zWlhOOUxGeHVJQ0FnSUNBZ0lDQXVMaTV2Y0hScGIyNXpMRnh1SUNBZ0lDQWdmVHRjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLRzFsZEdodlpDQTlQU0FuZEMxVFRrVW5LU0I3WEc0Z0lDQWdJQ0J6Y0dWalQzQjBhVzl1Y3lBOUlIdGNiaUFnSUNBZ0lDQWdMaTR1ZTJSaGRHRTZJR1JoZEdGOUxGeHVJQ0FnSUNBZ0lDQXVMaTU3WkdsemRHRnVZMlU2SUcxbFlYTjFjbVY5TEZ4dUlDQWdJQ0FnSUNBdUxpNTdhWFJsY21GMGFXOXVjem9nYjNCMGFXOXVjejh1WTNsamJHVnpJRDgvSUhWdVpHVm1hVzVsWkgwc1hHNGdJQ0FnSUNBZ0lDNHVMbTl3ZEdsdmJuTXNYRzRnSUNBZ0lDQjlPMXh1SUNBZ0lIMGdaV3h6WlNCcFppQW9iV1YwYUc5a0lEMDlJQ2RUVUVVbktTQjdYRzRnSUNBZ0lDQnpjR1ZqVDNCMGFXOXVjeUE5SUhzdUxpNTdaR0YwWVRvZ1pHRjBZWDBzSUM0dUxudGthWE4wWVc1alpUb2diV1ZoYzNWeVpYMHNJQzR1TG05d2RHbHZibk45TzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQnpjR1ZqVDNCMGFXOXVjeUE5SUhzdUxpNTdaR0YwWVRvZ1pHRjBZWDBzSUM0dUxudGthWE4wWVc1alpUb2diV1ZoYzNWeVpYMHNJQzR1TG05d2RHbHZibk45TzF4dUlDQWdJSDFjYmlBZ0lDQjBhR2x6TG5KbFpIVmpaWElnUFNCdVpYY2dRWFpoYVd4aFlteGxVbVZrZFdObGNuTmJiV1YwYUc5a1hTaHpjR1ZqVDNCMGFXOXVjeWs3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1JXMWlaV1J6SUhSb1pTQmtZWFJoSUdkcGRtVnVJR2x1ZEc4Z2RHaGxJSFIzYnkxa2FXMWxibk5wYjI1aGJDQnpjR0ZqWlNCMWMybHVaeUIwYUdVZ1kyaHZjMlZ1SUcxbGRHaHZaQzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZlNCMGNtRnVjM0J2YzJVZ1YyaGxkR2hsY2lCMGJ5QjBjbUZ1YzJadmNtMGdZMjl2Y21ScGJtRjBaWE1nZEc4Z2FHRjJaU0JqYjJ4MWJXNXpMV1pwY25OMElHOXlhV1Z1ZEdGMGFXOXVMbHh1SUNBZ0tpQkFkR2h5YjNkeklIdEZjbkp2Y24wZ1NXWWdkR2hsSUdWdFltVmtaR2x1WnlCdFpYUm9iMlFnZDJGeklHNXZkQ0JtYjNWdVpDNWNiaUFnSUNvZ1FISmxkSFZ5YmlCN1lXNTVmU0JEWVhKMFpYTnBZVzRnWTI5dmNtUnBibUYwWlNCdlppQjBhR2x6SUdWdFltVmtaR2x1WnlCaGJtUWdaR2x6ZEdGdVkyVWdiV0YwY21sNElIZG9aWEpsSUdGd2NHeHBZMkZpYkdVdVhHNGdJQ0FxSUVCdFpXMWlaWEp2WmlCRWFXMWxibk5wYjI1aGJHbDBlVkpsWkhWalpYSmNiaUFnSUNvdlhHNGdJSEIxWW14cFl5QjBjbUZ1YzJadmNtMG9kSEpoYm5Od2IzTmxPaUJpYjI5c1pXRnVJRDBnWm1Gc2MyVXBPaUI3SUZ0clpYazZJSE4wY21sdVoxMGdPaUJOWVhSeWFYZ2dmU0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXVjbVZrZFdObGNpQTlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduVW1Wa2RXTmxjaUIzWVhNZ2JtOTBJR1JsWm1sdVpXUXVKeWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiR1YwSUh0bGJXSmxaR1JwYm1jc0lHUnBjM1JoYm1ObGZTQTlJSFJvYVhNdWNtVmtkV05sY2k1MGNtRnVjMlp2Y20wb0tUdGNibHh1SUNBZ0lHbG1JQ2gwY21GdWMzQnZjMlVwSUh0Y2JpQWdJQ0FnSUdWdFltVmtaR2x1WnlBOUlIUnlZVzV6Y0c5elpVMWhkSEpwZUNobGJXSmxaR1JwYm1jcE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdlMlJwYzNSaGJtTmxPaUJrYVhOMFlXNWpaU3dnWlcxaVpXUmthVzVuT2lCbGJXSmxaR1JwYm1kOU8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsZEhWeWJuTWdiV1YwY21samN5QmhkbUZwYkdGaWJHVWdZbmtnZEhsd1pTNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRCZG1GcGJHRmliR1ZFWVhSaFZIbHdaWE45SUhSNWNHVk9ZVzFsSUhSNWNHVWdibUZ0WlZ4dUlDQWdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZGJYWDBnVFdWMGNtbGpJRzVoYldWeklIZG9hV05vSUdWNGNHVmpkSE1nZEdobElHZHBkbVZ1SUdSaGRHRWdkSGx3WlZ4dUlDQWdLaUJBYldWdFltVnliMllnUkdsdFpXNXphVzl1WVd4cGRIbFNaV1IxWTJWeVhHNGdJQ0FxTDF4dUlDQnpkR0YwYVdNZ1lYWmhhV3hoWW14bFRXVjBjbWxqYzBKNVZIbHdaU2gwZVhCbFRtRnRaVG9nUVhaaGFXeGhZbXhsUkdGMFlWUjVjR1Z6S1NCN1hHNGdJQ0FnY21WMGRYSnVJRTlpYW1WamRDNXJaWGx6S0VGMllXbHNZV0pzWlUxbGRISnBZM05iZEhsd1pVNWhiV1ZkS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaWFIxY201eklHUnBiV1Z1YzJsdmJtRnNhWFI1SUhKbFpIVmpkR2x2YmlCdFpYUm9iMlJ6SUdGMllXbHNZV0pzWlM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEpsWVdSdmJteDVYRzRnSUNBcUlFQnRaVzFpWlhKdlppQkVhVzFsYm5OcGIyNWhiR2wwZVZKbFpIVmpaWEpjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJuWlhRZ1lYWmhhV3hoWW14bFRXVjBhRzlrY3lncElIdGNiaUFnSUNCeVpYUjFjbTRnVDJKcVpXTjBMbXRsZVhNb1FYWmhhV3hoWW14bFVtVmtkV05sY25NcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsZEhWeWJuTWdiV1YwY21samN5QmhkbUZwYkdGaWJHVXVYRzRnSUNBcVhHNGdJQ0FxSUVCeVpXRmtiMjVzZVZ4dUlDQWdLaUJBYldWdFltVnliMllnUkdsdFpXNXphVzl1WVd4cGRIbFNaV1IxWTJWeVhHNGdJQ0FxTDF4dUlDQnpkR0YwYVdNZ1oyVjBJR0YyWVdsc1lXSnNaVTFsZEhKcFkzTW9LU0I3WEc0Z0lDQWdiR1YwSUdGdWN6b2djM1J5YVc1blcxMGdQU0JiWFR0Y2JpQWdJQ0JQWW1wbFkzUXVkbUZzZFdWektFRjJZV2xzWVdKc1pVMWxkSEpwWTNNcExtWnZja1ZoWTJnb0tHOWlhaWtnUFQ0Z2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWVhKeVlYa2dQU0JQWW1wbFkzUXVkbUZzZFdWektHOWlhaWs3WEc0Z0lDQWdJQ0JoYm5NZ1BTQmJMaTR1WVc1ekxDQXVMaTVoY25KaGVWMDdYRzRnSUNBZ2ZTazdYRzRnSUNBZ2NtVjBkWEp1SUdGdWN6dGNiaUFnZlZ4dWZWeHVJbDE5IiwiaW1wb3J0IHsgY2FsY3VsYXRlRXVjbGlkZWFuRGlzdGFuY2UsIGNhbGNEaXN0YW5jZU1hdHJpeCwgZmlsbFJhbmRvbU1hdHJpeCwgdmVjdG9yQWRkLCB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3ZlY3Rvci1vcGVyYXRpb25zJztcbmltcG9ydCB7IHJhbmRvbUludCB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3JhbmRvbSc7XG4vKipcbiAqIEltcGxlbWVudHMgc3RvY2hhc3RpYyBwcm94aW1pdHkgZW1iZWRkaW5nLlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBTUEVCYXNlXG4gKiBAbGluayBkb2k6MTAuMTAxNi9TMTA5My0zMjYzKDAzKTAwMTU1LTRcbiAqL1xuZXhwb3J0IGNsYXNzIFNQRUJhc2Uge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU1BFQmFzZS5cbiAgICAgKiBAcGFyYW0ge09wdGlvbnN9IFtvcHRpb25zXSBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAqIEBtZW1iZXJvZiBTUEVCYXNlXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2c7XG4gICAgICAgIHRoaXMuc3RlcHMgPSAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuc3RlcHMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDA7XG4gICAgICAgIHRoaXMuY3ljbGVzID0gKF9iID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmN5Y2xlcykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogMWU2O1xuICAgICAgICAvLyBTZWxlY3QgYSBjdXRvZmYgZGlzdGFuY2Uge2N1dG9mZn0gYW5kIC4uLlxuICAgICAgICB0aGlzLmN1dG9mZiA9IChfYyA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jdXRvZmYpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IDA7XG4gICAgICAgIC8vIC4uLiBhbiBpbml0aWFsIGxlYXJuaW5nIHJhdGUge2xhbWJkYX0gPiAwXG4gICAgICAgIHRoaXMubGFtYmRhID0gKF9kID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxhbWJkYSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogMi4wO1xuICAgICAgICB0aGlzLmRsYW1iZGEgPSAoX2UgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZGxhbWJkYSkgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogMC4wMTtcbiAgICAgICAgdGhpcy5sYW1iZGEyID0gdGhpcy5sYW1iZGEgLyAyLjtcbiAgICAgICAgdGhpcy5kbGFtYmRhMiA9IHRoaXMuZGxhbWJkYSAvIDIuO1xuICAgICAgICB0aGlzLmVwc2lsb24gPSAoX2YgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZXBzaWxvbikgIT09IG51bGwgJiYgX2YgIT09IHZvaWQgMCA/IF9mIDogMWUtMTA7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBicmFjZS1zdHlsZVxuICAgICAgICB0aGlzLmRpc3RhbmNlRnVuY3Rpb24gPSAoX2cgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZGlzdGFuY2UpICE9PSBudWxsICYmIF9nICE9PSB2b2lkIDAgPyBfZyA6IGNhbGN1bGF0ZUV1Y2xpZGVhbkRpc3RhbmNlO1xuICAgICAgICB0aGlzLmRpc3RhbmNlID0gW107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIGRpc3RhbmNlIG1hdHJpeC5cbiAgICAgKlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKiBAcGFyYW0ge1ZlY3RvcnN9IHZlY3RvcnMgSW5wdXQgdmVjdG9ycyB0byBjYWxjdWxhdGUgZGlzdGFuY2UgYmV0d2Vlbi5cbiAgICAgKiBAbWVtYmVyb2YgU1BFQmFzZVxuICAgICAqL1xuICAgIGluaXREaXN0YW5jZSh2ZWN0b3JzKSB7XG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSBjYWxjRGlzdGFuY2VNYXRyaXgodmVjdG9ycywgdGhpcy5kaXN0YW5jZUZ1bmN0aW9uKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB0d28gdmVjdG9ycyBnaXZlbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7VmVjdG9yc30gdmVjdG9ycyBTZXQgb2YgdmVjdG9ycyB0byBjYWxjdWxhdGUgZGlzdGFuY2VzIGJldHdlZW4uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4MSBJbmRleCBvZiB0aGUgZmlyc3QgdmVjdG9yIG9mIHRoZSBwYWlyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleDIgSW5kZXggb2YgdGhlIHNlY29uZCB2ZWN0b3Igb2YgdGhlIHBhaXIuXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBEaXN0YW5jZSBiZXR3ZWVuIHRoZXNlIHR3byB2ZWN0b3JzLlxuICAgICAqL1xuICAgIGNhbGNEaXN0YW5jZSh2ZWN0b3JzLCBpbmRleDEsIGluZGV4Mikge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXN0YW5jZVtpbmRleDFdW2luZGV4Ml07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVtYmVkcyB0aGUgdmVjdG9ycyBnaXZlbiBpbnRvIGEgdHdvLWRpbWVuc2lvbmFsIHNwYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtWZWN0b3JzfSB2ZWN0b3JzIEQtZGltZW5zaW9uYWwgY29vcmRpbmF0ZXMuXG4gICAgICogQHJldHVybiB7Q29vcmRpbmF0ZXN9IFNQRSBjb29yZGluYXRlcyBpbiBEIHNwYWNlLlxuICAgICAqL1xuICAgIGVtYmVkKHZlY3RvcnMpIHtcbiAgICAgICAgY29uc3Qgbkl0ZW1zID0gdmVjdG9ycy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGFyZWFXaWR0aCA9IDQwO1xuICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBELWRpbWVuc2lvbmFsIGNvb3JkaW5hdGVzIG9mIHRoZSBOIHBvaW50cy5cbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBmaWxsUmFuZG9tTWF0cml4KG5JdGVtcywgU1BFQmFzZS5kaW1lbnNpb24sIGFyZWFXaWR0aCk7XG4gICAgICAgIGxldCBsYW1iZGEyID0gdGhpcy5sYW1iZGEyO1xuICAgICAgICBpZiAodGhpcy5zdGVwcyA9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnN0ZXBzID0gdmVjdG9ycy5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5pdERpc3RhbmNlKHZlY3RvcnMpO1xuICAgICAgICBmb3IgKGxldCBjeWNsZSA9IDA7IGN5Y2xlIDwgdGhpcy5jeWNsZXM7ICsrY3ljbGUpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHN0ZXAgPSAwOyBzdGVwIDwgdGhpcy5zdGVwczsgKytzdGVwKSB7XG4gICAgICAgICAgICAgICAgLy8gU2VsZWN0IHR3byBwb2ludHMsIGkgYW5kIGosIGF0IHJhbmRvbSwgLi4uXG4gICAgICAgICAgICAgICAgY29uc3QgaSA9IHJhbmRvbUludChuSXRlbXMpO1xuICAgICAgICAgICAgICAgIGxldCBqID0gcmFuZG9tSW50KG5JdGVtcyk7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGkgPT0gailcbiAgICAgICAgICAgICAgICAgICAgaiA9IHJhbmRvbUludChuSXRlbXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd2kgPSBjb29yZGluYXRlc1tpXTtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dqID0gY29vcmRpbmF0ZXNbal07XG4gICAgICAgICAgICAgICAgLy8gLi4uIHJldHJpZXZlIChvciBldmFsdWF0ZSkgdGhlaXIgcHJveGltaXR5IGluIHRoZSBpbnB1dCBzcGFjZSwgcmlqIGFuZCAuLi5cbiAgICAgICAgICAgICAgICBjb25zdCByID0gdGhpcy5jYWxjRGlzdGFuY2UodmVjdG9ycywgaSwgaik7XG4gICAgICAgICAgICAgICAgLy8gLi4uIGNvbXB1dGUgdGhlaXIgRXVjbGlkZWFuIGRpc3RhbmNlIG9uIHRoZSBELWRpbWVuc2lvbmFsIG1hcCwgZGlqLlxuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBjYWxjdWxhdGVFdWNsaWRlYW5EaXN0YW5jZShyb3dpLCByb3dqKTtcbiAgICAgICAgICAgICAgICAvLyBJZiByaWogPD0gcmMsIG9yIGlmIHJpaiA+IHJjIGFuZCBkaWogPCByaWogLi4uXG4gICAgICAgICAgICAgICAgaWYgKCh0aGlzLmN1dG9mZiA9PSAwKSB8fCAociA8PSB0aGlzLmN1dG9mZikgfHwgKGQgPCByKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXBsaWVyID0gbGFtYmRhMiAqIChyIC0gZCkgLyAoZCArIHRoaXMuZXBzaWxvbik7XG4gICAgICAgICAgICAgICAgICAgIC8vIC4uLiB1cGRhdGUgdGhlIGNvb3JkaW5hdGVzIHhpIGFuZCB4ai5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlmZklKID0gdmVjdG9yQWRkKHJvd2ksIHJvd2osIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXNbaV0gPSB2ZWN0b3JBZGQocm93aSwgZGlmZklKLCBtdWx0aXBsaWVyKTtcbiAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXNbal0gPSB2ZWN0b3JBZGQocm93aiwgZGlmZklKLCAtbXVsdGlwbGllcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRGVjcmVhc2UgdGhlIGxlYXJuaW5nIHJhdGUge2xhbWJkYX0gYnkgYSBwcmVzY3JpYmVkIHtkbGFtYmRhfS5cbiAgICAgICAgICAgIGxhbWJkYTIgLT0gdGhpcy5kbGFtYmRhMjtcbiAgICAgICAgICAgIGlmIChsYW1iZGEyIDw9IDAuKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvb3JkaW5hdGVzO1xuICAgIH1cbn1cblNQRUJhc2UuZGltZW5zaW9uID0gMjtcbi8qKlxuICogSW1wbGVtZW50cyBtb2RpZmllZCBzdG9jaGFzdGljIHByb3hpbWl0eSBlbWJlZGRpbmcuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIFBTUEVCYXNlXG4gKiBAbGluayBkb2k6MTAuMTAxNi9TMTA5My0zMjYzKDAzKTAwMTU1LTRcbiAqL1xuZXhwb3J0IGNsYXNzIFBTUEVCYXNlIGV4dGVuZHMgU1BFQmFzZSB7XG4gICAgLyoqXG4gICAgICogRW1iZWRzIHRoZSB2ZWN0b3JzIGdpdmVuIGludG8gYSB0d28tZGltZW5zaW9uYWwgc3BhY2UgdXNpbmcgYSBtb2RpZmllZCB1cGRhdGUgcnVsZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7VmVjdG9yc30gdmVjdG9ycyBELWRpbWVuc2lvbmFsIGNvb3JkaW5hdGVzLlxuICAgICAqIEByZXR1cm4ge0Nvb3JkaW5hdGVzfSBTUEUgY29vcmRpbmF0ZXMgaW4gRCBzcGFjZS5cbiAgICAgKi9cbiAgICBlbWJlZCh2ZWN0b3JzKSB7XG4gICAgICAgIGNvbnN0IG5JdGVtcyA9IHZlY3RvcnMubGVuZ3RoO1xuICAgICAgICBjb25zdCBhcmVhV2lkdGggPSA0MDtcbiAgICAgICAgLy8gIEluaXRpYWxpemUgdGhlIEQtZGltZW5zaW9uYWwgY29vcmRpbmF0ZXMgb2YgdGhlIE4gcG9pbnRzLlxuICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IGZpbGxSYW5kb21NYXRyaXgobkl0ZW1zLCBQU1BFQmFzZS5kaW1lbnNpb24sIGFyZWFXaWR0aCk7XG4gICAgICAgIGxldCBsYW1iZGEgPSB0aGlzLmxhbWJkYTtcbiAgICAgICAgdGhpcy5pbml0RGlzdGFuY2UodmVjdG9ycyk7XG4gICAgICAgIGZvciAobGV0IGN5Y2xlID0gMDsgY3ljbGUgPCB0aGlzLmN5Y2xlczsgKytjeWNsZSkge1xuICAgICAgICAgICAgLy8gU2VsZWN0IGEgcG9pbnQsIGksIGF0IHJhbmRvbSAocGl2b3QpLlxuICAgICAgICAgICAgY29uc3QgaSA9IHJhbmRvbUludChuSXRlbXMpO1xuICAgICAgICAgICAgY29uc3Qgcm93aSA9IGNvb3JkaW5hdGVzW2ldO1xuICAgICAgICAgICAgLy8gRm9yIGV2ZXJ5IHBvaW50IGogIT0gaSAuLi5cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbkl0ZW1zOyArK2opIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA9PSBqKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dqID0gY29vcmRpbmF0ZXNbal07XG4gICAgICAgICAgICAgICAgLy8gLi4uIHJldHJpZXZlIChvciBldmFsdWF0ZSkgaXRzIHByb3hpbWl0eSB0byBpIGluIHRoZSBpbnB1dCBzcGFjZSwgcmlqIC4uLlxuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSB0aGlzLmNhbGNEaXN0YW5jZSh2ZWN0b3JzLCBpLCBqKTtcbiAgICAgICAgICAgICAgICAvLyAuLi4gYW5kIGNvbXB1dGUgdGhlaXIgRXVjbGlkZWFuIGRpc3RhbmNlIG9uIHRoZSBELWRpbWVuc2lvbmFsIG1hcCwgZGlqLlxuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBjYWxjdWxhdGVFdWNsaWRlYW5EaXN0YW5jZShyb3dpLCByb3dqKTtcbiAgICAgICAgICAgICAgICAvLyBJZiByaWogPD0gcmMsIG9yIGlmIHJpaiA+IHJjIGFuZCBkaWogPCByaWogLi4uXG4gICAgICAgICAgICAgICAgaWYgKCh0aGlzLmN1dG9mZiA9PSAwKSB8fCAociA8PSB0aGlzLmN1dG9mZikgfHwgKGQgPCByKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXBsaWVyID0gbGFtYmRhICogKHIgLSBkKSAvIChkICsgdGhpcy5lcHNpbG9uKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlmZklKID0gdmVjdG9yQWRkKHJvd2ksIHJvd2osIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gLi4uIHVwZGF0ZSB0aGUgY29vcmRpbmF0ZXMgeGouXG4gICAgICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzW2pdID0gdmVjdG9yQWRkKHJvd2osIGRpZmZJSiwgLW11bHRpcGxpZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIERlY3JlYXNlIHRoZSBsZWFybmluZyByYXRlIHtsYW1iZGF9IGJ5IGEgcHJlc2NyaWJlZCB7ZGxhbWJkYX0uXG4gICAgICAgICAgICBsYW1iZGEgLT0gdGhpcy5kbGFtYmRhO1xuICAgICAgICAgICAgaWYgKGxhbWJkYSA8PSAwLikge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb29yZGluYXRlcztcbiAgICB9XG59XG4vKipcbiAqIEltcGxlbWVudHMgbW9kaWZpZWQgc3RvY2hhc3RpYyBwcm94aW1pdHkgZW1iZWRkaW5nLlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBPcmlnaW5hbFNQRVxuICogQGxpbmsgZG9pOjEwLjEwMDIvamNjLjEwMjM0XG4gKi9cbmV4cG9ydCBjbGFzcyBPcmlnaW5hbFNQRSBleHRlbmRzIFNQRUJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuY3ljbGVzID0gKF9hID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmN5Y2xlcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMWUzO1xuICAgICAgICB0aGlzLnN0ZXBzID0gKF9iID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnN0ZXBzKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAxMDAwMDA7XG4gICAgICAgIHRoaXMucmFkaXVzUGVyY2VudCA9IChfYyA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yYWRpdXNQZXJjZW50KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAxLjA7XG4gICAgICAgIHRoaXMubWF4RGlzdGFuY2UgPSAoX2QgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubWF4RGlzdGFuY2UpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IG51bGw7XG4gICAgICAgIHRoaXMubWF4RGlzdGFuY2VTdGVwcyA9IChfZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5tYXhEaXN0YW5jZVN0ZXBzKSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiBudWxsO1xuICAgIH1cbiAgICBlbWJlZCh2ZWN0b3JzKSB7XG4gICAgICAgIGNvbnN0IG5JdGVtcyA9IHZlY3RvcnMubGVuZ3RoO1xuICAgICAgICBjb25zdCBhcmVhV2lkdGggPSA0MDtcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgRC1kaW1lbnNpb25hbCBjb29yZGluYXRlcyBvZiB0aGUgTiBwb2ludHMuXG4gICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gZmlsbFJhbmRvbU1hdHJpeChuSXRlbXMsIE9yaWdpbmFsU1BFLmRpbWVuc2lvbiwgYXJlYVdpZHRoKTtcbiAgICAgICAgdGhpcy5pbml0RGlzdGFuY2UodmVjdG9ycyk7XG4gICAgICAgIGlmICh0aGlzLm1heERpc3RhbmNlU3RlcHMgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5tYXhEaXN0YW5jZVN0ZXBzID0gbkl0ZW1zICogTWF0aC5mbG9vcigobkl0ZW1zIC0gMSkgLyAyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tYXhEaXN0YW5jZSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLm1heERpc3RhbmNlID0gLTFlMzc7XG4gICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IHRoaXMubWF4RGlzdGFuY2VTdGVwczsgbisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaSA9IHJhbmRvbUludChuSXRlbXMpO1xuICAgICAgICAgICAgICAgIGxldCBqID0gcmFuZG9tSW50KG5JdGVtcyk7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGkgPT0gailcbiAgICAgICAgICAgICAgICAgICAgaiA9IHJhbmRvbUludChuSXRlbXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSB0aGlzLmNhbGNEaXN0YW5jZSh2ZWN0b3JzLCBpLCBqKTtcbiAgICAgICAgICAgICAgICBpZiAoZCA+IHRoaXMubWF4RGlzdGFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXhEaXN0YW5jZSA9IGQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBsYW1iZGEgPSB0aGlzLmxhbWJkYTtcbiAgICAgICAgY29uc3QgcmFkaXVzID0gKHRoaXMucmFkaXVzUGVyY2VudCA9PSAwLjApID8gdGhpcy5tYXhEaXN0YW5jZSA6IHRoaXMubWF4RGlzdGFuY2UgKiB0aGlzLnJhZGl1c1BlcmNlbnQ7XG4gICAgICAgIGZvciAobGV0IGN5Y2xlID0gMDsgY3ljbGUgPCB0aGlzLmN5Y2xlczsgKytjeWNsZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgc3RlcCA9IDA7IHN0ZXAgPCB0aGlzLnN0ZXBzOyArK3N0ZXApIHtcbiAgICAgICAgICAgICAgICAvLyBTZWxlY3QgdHdvIHBvaW50cywgaSBhbmQgaiwgYXQgcmFuZG9tLCAuLi5cbiAgICAgICAgICAgICAgICBjb25zdCBpID0gcmFuZG9tSW50KG5JdGVtcyk7XG4gICAgICAgICAgICAgICAgbGV0IGogPSByYW5kb21JbnQobkl0ZW1zKTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoaSA9PSBqKVxuICAgICAgICAgICAgICAgICAgICBqID0gcmFuZG9tSW50KG5JdGVtcyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93aSA9IGNvb3JkaW5hdGVzW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd2ogPSBjb29yZGluYXRlc1tqXTtcbiAgICAgICAgICAgICAgICAvLyAuLi4gcmV0cmlldmUgKG9yIGV2YWx1YXRlKSB0aGVpciBwcm94aW1pdHkgaW4gdGhlIGlucHV0IHNwYWNlLCByaWogYW5kIC4uLlxuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSB0aGlzLmNhbGNEaXN0YW5jZSh2ZWN0b3JzLCBpLCBqKTtcbiAgICAgICAgICAgICAgICAvLyAuLi4gY29tcHV0ZSB0aGVpciBFdWNsaWRlYW4gZGlzdGFuY2Ugb24gdGhlIEQtZGltZW5zaW9uYWwgbWFwLCBkaWouXG4gICAgICAgICAgICAgICAgY29uc3QgZCA9IGNhbGN1bGF0ZUV1Y2xpZGVhbkRpc3RhbmNlKHJvd2ksIHJvd2opO1xuICAgICAgICAgICAgICAgIGlmICgociA8PSByYWRpdXMpIHx8IChkIDwgcikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlwbGllciA9IGxhbWJkYSAqIDAuNSAqIChyIC0gZCkgLyAoZCArIHRoaXMuZXBzaWxvbik7XG4gICAgICAgICAgICAgICAgICAgIC8vIC4uLiB1cGRhdGUgdGhlIGNvb3JkaW5hdGVzIHhpIGFuZCB4ai5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlmZklKID0gdmVjdG9yQWRkKHJvd2ksIHJvd2osIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXNbaV0gPSB2ZWN0b3JBZGQocm93aSwgZGlmZklKLCBtdWx0aXBsaWVyKTtcbiAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXNbal0gPSB2ZWN0b3JBZGQocm93aiwgZGlmZklKLCAtbXVsdGlwbGllcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFtYmRhIC09ICgodGhpcy5sYW1iZGEgLSB0aGlzLmRsYW1iZGEpIC8gKHRoaXMuY3ljbGVzIC0gMS4wKSk7XG4gICAgICAgICAgICA7XG4gICAgICAgICAgICBpZiAobGFtYmRhIDwgdGhpcy5kbGFtYmRhKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvb3JkaW5hdGVzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWMzQmxMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaWMzQmxMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVOQkxFOUJRVThzUlVGRFRDd3dRa0ZCTUVJc1JVRkRNVUlzYTBKQlFXdENMRVZCUTJ4Q0xHZENRVUZuUWl4RlFVTm9RaXhUUVVGVExFZEJRMVlzVFVGQlRTeHBSRUZCYVVRc1EwRkJRenRCUVVONlJDeFBRVUZQTEVWQlFVTXNVMEZCVXl4RlFVRkRMRTFCUVUwc2MwTkJRWE5ETEVOQlFVTTdRVUZGTDBRN096czdPenRIUVUxSE8wRkJRMGdzVFVGQlRTeFBRVUZQTEU5QlFVODdTVUZoYkVJN096czdUMEZKUnp0SlFVTklMRmxCUVZrc1QwRkJhVUk3TzFGQlF6TkNMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzVFVGQlFTeFBRVUZQTEdGQlFWQXNUMEZCVHl4MVFrRkJVQ3hQUVVGUExFTkJRVVVzUzBGQlN5eHRRMEZCU1N4RFFVRkRMRU5CUVVNN1VVRkRha01zU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4TlFVRkJMRTlCUVU4c1lVRkJVQ3hQUVVGUExIVkNRVUZRTEU5QlFVOHNRMEZCUlN4TlFVRk5MRzFEUVVGSkxFZEJRVWNzUTBGQlF6dFJRVU55UXl3MFEwRkJORU03VVVGRE5VTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhOUVVGQkxFOUJRVThzWVVGQlVDeFBRVUZQTEhWQ1FVRlFMRTlCUVU4c1EwRkJSU3hOUVVGTkxHMURRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTnVReXcwUTBGQk5FTTdVVUZETlVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eE5RVUZCTEU5QlFVOHNZVUZCVUN4UFFVRlBMSFZDUVVGUUxFOUJRVThzUTBGQlJTeE5RVUZOTEcxRFFVRkpMRWRCUVVjc1EwRkJRenRSUVVOeVF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRTFCUVVFc1QwRkJUeXhoUVVGUUxFOUJRVThzZFVKQlFWQXNUMEZCVHl4RFFVRkZMRTlCUVU4c2JVTkJRVWtzU1VGQlNTeERRVUZETzFGQlEzaERMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUXl4RlFVRkZMRU5CUVVNN1VVRkRPVUlzU1VGQlNTeERRVUZETEZGQlFWRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGRExFVkJRVVVzUTBGQlF6dFJRVU5vUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFMUJRVUVzVDBGQlR5eGhRVUZRTEU5QlFVOHNkVUpCUVZBc1QwRkJUeXhEUVVGRkxFOUJRVThzYlVOQlFVa3NTMEZCU3l4RFFVRkRPMUZCUTNwRExIVkRRVUYxUXp0UlFVTjJReXhKUVVGSkxFTkJRVU1zWjBKQlFXZENMRWRCUVVjc1RVRkJRU3hQUVVGUExHRkJRVkFzVDBGQlR5eDFRa0ZCVUN4UFFVRlBMRU5CUVVVc1VVRkJVU3h0UTBGQlNTd3dRa0ZCTUVJc1EwRkJRenRSUVVONFJTeEpRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVOeVFpeERRVUZETzBsQlJVUTdPenM3T3p0UFFVMUhPMGxCUTA4c1dVRkJXU3hEUVVGRExFOUJRV2RDTzFGQlEzSkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFZEJRVWNzYTBKQlFXdENMRU5CUVVNc1QwRkJUeXhGUVVGRkxFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhEUVVGRE8wbEJRM0pGTEVOQlFVTTdTVUZGUkRzN096czdPenRQUVU5SE8wbEJRMDhzV1VGQldTeERRVUZETEU5QlFXZENMRVZCUVVVc1RVRkJZeXhGUVVGRkxFMUJRV003VVVGRGNrVXNUMEZCVHl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMGxCUTNaRExFTkJRVU03U1VGRlJEczdPenM3VDBGTFJ6dEpRVU5KTEV0QlFVc3NRMEZCUXl4UFFVRm5RanRSUVVNelFpeE5RVUZOTEUxQlFVMHNSMEZCUnl4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRE8xRkJRemxDTEUxQlFVMHNVMEZCVXl4SFFVRkhMRVZCUVVVc1EwRkJRenRSUVVOeVFpdzBSRUZCTkVRN1VVRkROVVFzVFVGQlRTeFhRVUZYTEVkQlFVY3NaMEpCUVdkQ0xFTkJRVU1zVFVGQlRTeEZRVUZGTEU5QlFVOHNRMEZCUXl4VFFVRlRMRVZCUVVVc1UwRkJVeXhEUVVGRExFTkJRVU03VVVGRk0wVXNTVUZCU1N4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF6dFJRVVV6UWl4SlFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFbEJRVWtzUTBGQlF5eEZRVUZGTzFsQlEyNUNMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzVDBGQlR5eERRVUZETEUxQlFVMHNSMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRMMEk3VVVGRlJDeEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJSVE5DTEV0QlFVc3NTVUZCU1N4TFFVRkxMRWRCUVVjc1EwRkJReXhGUVVGRkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRVZCUVVVc1MwRkJTeXhGUVVGRk8xbEJRMmhFTEV0QlFVc3NTVUZCU1N4SlFVRkpMRWRCUVVjc1EwRkJReXhGUVVGRkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RlFVRkZMRVZCUVVVc1NVRkJTU3hGUVVGRk8yZENRVU0xUXl3MlEwRkJOa003WjBKQlF6ZERMRTFCUVUwc1EwRkJReXhIUVVGSExGTkJRVk1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0blFrRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eFRRVUZUTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1owSkJRM1pFTEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNN2IwSkJRVVVzUTBGQlF5eEhRVUZITEZOQlFWTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRuUWtGRmNrTXNUVUZCVFN4SlFVRkpMRWRCUVVjc1YwRkJWeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVRkRMRTFCUVUwc1NVRkJTU3hIUVVGSExGZEJRVmNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkZla1FzTmtWQlFUWkZPMmRDUVVNM1JTeE5RVUZOTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRek5ETEhORlFVRnpSVHRuUWtGRGRFVXNUVUZCVFN4RFFVRkRMRWRCUVVjc01FSkJRVEJDTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8yZENRVVZxUkN4cFJFRkJhVVE3WjBKQlEycEVMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJUdHZRa0ZEZGtRc1RVRkJUU3hWUVVGVkxFZEJRVWNzVDBGQlR5eEhRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenR2UWtGRGJFUXNkME5CUVhkRE8yOUNRVU40UXl4TlFVRk5MRTFCUVUwc1IwRkJSeXhUUVVGVExFTkJRVU1zU1VGQlNTeEZRVUZGTEVsQlFVa3NSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yOUNRVU42UXl4WFFVRlhMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVTBGQlV5eERRVUZETEVsQlFVa3NSVUZCUlN4TlFVRk5MRVZCUVVVc1ZVRkJWU3hEUVVGRExFTkJRVU03YjBKQlEzSkVMRmRCUVZjc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RlFVRkZMRTFCUVUwc1JVRkJSU3hEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzJsQ1FVTjJSRHRoUVVOR08xbEJRMFFzYVVWQlFXbEZPMWxCUTJwRkxFOUJRVThzU1VGQlNTeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRPMWxCUTNwQ0xFbEJRVWtzVDBGQlR5eEpRVUZKTEVWQlFVVXNSVUZCUlR0blFrRkRha0lzVFVGQlRUdGhRVU5RTzFOQlEwWTdVVUZEUkN4UFFVRlBMRmRCUVZjc1EwRkJRenRKUVVOeVFpeERRVUZET3p0QlFYcEhaMElzYVVKQlFWTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1FVRTBSMnBET3pzN096czdSMEZOUnp0QlFVTklMRTFCUVUwc1QwRkJUeXhSUVVGVExGTkJRVkVzVDBGQlR6dEpRVU51UXpzN096czdUMEZMUnp0SlFVTkpMRXRCUVVzc1EwRkJReXhQUVVGblFqdFJRVU16UWl4TlFVRk5MRTFCUVUwc1IwRkJSeXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETzFGQlF6bENMRTFCUVUwc1UwRkJVeXhIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU55UWl3MlJFRkJOa1E3VVVGRE4wUXNUVUZCVFN4WFFVRlhMRWRCUVVjc1owSkJRV2RDTEVOQlFVTXNUVUZCVFN4RlFVRkZMRkZCUVZFc1EwRkJReXhUUVVGVExFVkJRVVVzVTBGQlV5eERRVUZETEVOQlFVTTdVVUZETlVVc1NVRkJTU3hOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXp0UlFVVjZRaXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUlROQ0xFdEJRVXNzU1VGQlNTeExRVUZMTEVkQlFVY3NRMEZCUXl4RlFVRkZMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVWQlFVVXNTMEZCU3l4RlFVRkZPMWxCUTJoRUxIZERRVUYzUXp0WlFVTjRReXhOUVVGTkxFTkJRVU1zUjBGQlZ5eFRRVUZUTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkRjRU1zVFVGQlRTeEpRVUZKTEVkQlFVY3NWMEZCVnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJSVFZDTERaQ1FVRTJRanRaUVVNM1FpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVFVGQlRTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZPMmRDUVVNdlFpeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRPMjlDUVVGRkxGTkJRVk03WjBKQlEzSkNMRTFCUVUwc1NVRkJTU3hIUVVGSExGZEJRVmNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkROVUlzTkVWQlFUUkZPMmRDUVVNMVJTeE5RVUZOTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRek5ETERCRlFVRXdSVHRuUWtGRE1VVXNUVUZCVFN4RFFVRkRMRWRCUVVjc01FSkJRVEJDTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8yZENRVU5xUkN4cFJFRkJhVVE3WjBKQlEycEVMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJUdHZRa0ZEZGtRc1RVRkJUU3hWUVVGVkxFZEJRVWNzVFVGQlRTeEhRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenR2UWtGRGFrUXNUVUZCVFN4TlFVRk5MRWRCUVVjc1UwRkJVeXhEUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenR2UWtGRGVrTXNhVU5CUVdsRE8yOUNRVU5xUXl4WFFVRlhMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVTBGQlV5eERRVUZETEVsQlFVa3NSVUZCUlN4TlFVRk5MRVZCUVVVc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dHBRa0ZEZGtRN1lVRkRSanRaUVVORUxHbEZRVUZwUlR0WlFVTnFSU3hOUVVGTkxFbEJRVWtzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXp0WlFVTjJRaXhKUVVGSkxFMUJRVTBzU1VGQlNTeEZRVUZGTEVWQlFVVTdaMEpCUTJoQ0xFMUJRVTA3WVVGRFVEdFRRVU5HTzFGQlEwUXNUMEZCVHl4WFFVRlhMRU5CUVVNN1NVRkRja0lzUTBGQlF6dERRVU5HTzBGQlJVUTdPenM3T3p0SFFVMUhPMEZCUTBnc1RVRkJUU3hQUVVGUExGZEJRVmtzVTBGQlVTeFBRVUZQTzBsQlYzUkRMRmxCUVZrc1QwRkJhVUk3TzFGQlF6TkNMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dFJRVU5tTEVsQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1RVRkJRU3hQUVVGUExHRkJRVkFzVDBGQlR5eDFRa0ZCVUN4UFFVRlBMRU5CUVVVc1RVRkJUU3h0UTBGQlNTeEhRVUZITEVOQlFVTTdVVUZEY2tNc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eE5RVUZCTEU5QlFVOHNZVUZCVUN4UFFVRlBMSFZDUVVGUUxFOUJRVThzUTBGQlJTeExRVUZMTEcxRFFVRkpMRTFCUVUwc1EwRkJRenRSUVVOMFF5eEpRVUZKTEVOQlFVTXNZVUZCWVN4SFFVRkhMRTFCUVVFc1QwRkJUeXhoUVVGUUxFOUJRVThzZFVKQlFWQXNUMEZCVHl4RFFVRkZMR0ZCUVdFc2JVTkJRVWtzUjBGQlJ5eERRVUZETzFGQlEyNUVMRWxCUVVrc1EwRkJReXhYUVVGWExFZEJRVWNzVFVGQlFTeFBRVUZQTEdGQlFWQXNUMEZCVHl4MVFrRkJVQ3hQUVVGUExFTkJRVVVzVjBGQlZ5eHRRMEZCU1N4SlFVRkpMRU5CUVVNN1VVRkRhRVFzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhIUVVGSExFMUJRVUVzVDBGQlR5eGhRVUZRTEU5QlFVOHNkVUpCUVZBc1QwRkJUeXhEUVVGRkxHZENRVUZuUWl4dFEwRkJTU3hKUVVGSkxFTkJRVU03U1VGRE5VUXNRMEZCUXp0SlFVVk5MRXRCUVVzc1EwRkJReXhQUVVGblFqdFJRVU16UWl4TlFVRk5MRTFCUVUwc1IwRkJSeXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETzFGQlF6bENMRTFCUVUwc1UwRkJVeXhIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU55UWl3MFJFRkJORVE3VVVGRE5VUXNUVUZCVFN4WFFVRlhMRWRCUVVjc1owSkJRV2RDTEVOQlFVTXNUVUZCVFN4RlFVRkZMRmRCUVZjc1EwRkJReXhUUVVGVExFVkJRVVVzVTBGQlV5eERRVUZETEVOQlFVTTdVVUZGTDBVc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVVXpRaXhKUVVGSkxFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1NVRkJTU3hKUVVGSkxFVkJRVVU3V1VGRGFrTXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeEhRVUZITEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJReTlFTzFGQlEwUXNTVUZCU1N4SlFVRkpMRU5CUVVNc1YwRkJWeXhKUVVGSkxFbEJRVWtzUlVGQlJUdFpRVU0xUWl4SlFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETzFsQlEzcENMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1owSkJRemxETEUxQlFVMHNRMEZCUXl4SFFVRkhMRk5CUVZNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dG5Ra0ZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhUUVVGVExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdaMEpCUTNaRUxFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTTdiMEpCUVVVc1EwRkJReXhIUVVGSExGTkJRVk1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0blFrRkZja01zVFVGQlRTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVNelF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1YwRkJWeXhGUVVGRk8yOUNRVU40UWl4SlFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExFTkJRVU1zUTBGQlF6dHBRa0ZEZEVJN1lVRkRSanRUUVVOR08xRkJSVVFzU1VGQlNTeE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJRenRSUVVONlFpeE5RVUZOTEUxQlFVMHNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhoUVVGaExFbEJRVWtzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4WFFVRlhMRWRCUVVjc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF6dFJRVVYwUnl4TFFVRkxMRWxCUVVrc1MwRkJTeXhIUVVGSExFTkJRVU1zUlVGQlJTeExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hGUVVGRkxFdEJRVXNzUlVGQlJUdFpRVU5vUkN4TFFVRkxMRWxCUVVrc1NVRkJTU3hIUVVGSExFTkJRVU1zUlVGQlJTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1JVRkJSU3hGUVVGRkxFbEJRVWtzUlVGQlJUdG5Ra0ZETlVNc05rTkJRVFpETzJkQ1FVTTNReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eFRRVUZUTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1owSkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8yZENRVU4yUkN4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRE8yOUNRVUZGTEVOQlFVTXNSMEZCUnl4VFFVRlRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03WjBKQlJYSkRMRTFCUVUwc1NVRkJTU3hIUVVGSExGZEJRVmNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkJReXhOUVVGTkxFbEJRVWtzUjBGQlJ5eFhRVUZYTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJSWHBFTERaRlFVRTJSVHRuUWtGRE4wVXNUVUZCVFN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU16UXl4elJVRkJjMFU3WjBKQlEzUkZMRTFCUVUwc1EwRkJReXhIUVVGSExEQkNRVUV3UWl4RFFVRkRMRWxCUVVrc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dG5Ra0ZGYWtRc1NVRkJTU3hEUVVGRExFTkJRVU1zU1VGQlNTeE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJUdHZRa0ZETlVJc1RVRkJUU3hWUVVGVkxFZEJRVWNzVFVGQlRTeEhRVUZITEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03YjBKQlF5OUVMSGREUVVGM1F6dHZRa0ZEZUVNc1RVRkJUU3hOUVVGTkxFZEJRVWNzVTBGQlV5eERRVUZETEVsQlFVa3NSVUZCUlN4SlFVRkpMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dHZRa0ZEZWtNc1YwRkJWeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEZOQlFWTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1RVRkJUU3hGUVVGRkxGVkJRVlVzUTBGQlF5eERRVUZETzI5Q1FVTnlSQ3hYUVVGWExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NVMEZCVXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hOUVVGTkxFVkJRVVVzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXp0cFFrRkRka1E3WVVGRFJqdFpRVU5FTEUxQlFVMHNTVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkJReXhEUVVGRE8xbEJRMnBGTEVsQlFVa3NUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFVkJRVVU3WjBKQlEzcENMRTFCUVUwN1lVRkRVRHRUUVVOR08xRkJRMFFzVDBGQlR5eFhRVUZYTEVOQlFVTTdTVUZEY2tJc1EwRkJRenREUVVOR0lpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIdFBjSFJwYjI1ekxDQkRiMjl5WkdsdVlYUmxjeXdnVm1WamRHOXljeXdnUkdsemRHRnVZMlZOWlhSeWFXTjlJR1p5YjIwZ0owQmtZWFJoWjNKdmF5MXNhV0p5WVhKcFpYTXZkWFJwYkhNdmMzSmpMM1I1Y0dVdFpHVmpiR0Z5WVhScGIyNXpKenRjYm1sdGNHOXlkQ0I3WEc0Z0lHTmhiR04xYkdGMFpVVjFZMnhwWkdWaGJrUnBjM1JoYm1ObExGeHVJQ0JqWVd4alJHbHpkR0Z1WTJWTllYUnlhWGdzWEc0Z0lHWnBiR3hTWVc1a2IyMU5ZWFJ5YVhnc1hHNGdJSFpsWTNSdmNrRmtaQ3hjYm4wZ1puSnZiU0FuUUdSaGRHRm5jbTlyTFd4cFluSmhjbWxsY3k5MWRHbHNjeTl6Y21NdmRtVmpkRzl5TFc5d1pYSmhkR2x2Ym5Nbk8xeHVhVzF3YjNKMElIdHlZVzVrYjIxSmJuUjlJR1p5YjIwZ0owQmtZWFJoWjNKdmF5MXNhV0p5WVhKcFpYTXZkWFJwYkhNdmMzSmpMM0poYm1SdmJTYzdYRzVjYmk4cUtseHVJQ29nU1cxd2JHVnRaVzUwY3lCemRHOWphR0Z6ZEdsaklIQnliM2hwYldsMGVTQmxiV0psWkdScGJtY3VYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUdOc1lYTnpJRk5RUlVKaGMyVmNiaUFxSUVCc2FXNXJJR1J2YVRveE1DNHhNREUyTDFNeE1Ea3pMVE15TmpNb01ETXBNREF4TlRVdE5GeHVJQ292WEc1bGVIQnZjblFnWTJ4aGMzTWdVMUJGUW1GelpTQjdYRzRnSUhCeWIzUmxZM1JsWkNCemRHRjBhV01nWkdsdFpXNXphVzl1SUQwZ01qdGNiaUFnY0hKdmRHVmpkR1ZrSUhOMFpYQnpPaUJ1ZFcxaVpYSTdYRzRnSUhCeWIzUmxZM1JsWkNCamVXTnNaWE02SUc1MWJXSmxjanRjYmlBZ2NISnZkR1ZqZEdWa0lHTjFkRzltWmpvZ2JuVnRZbVZ5TzF4dUlDQndjbTkwWldOMFpXUWdiR0Z0WW1SaE9pQnVkVzFpWlhJN1hHNGdJSEJ5YjNSbFkzUmxaQ0JrYkdGdFltUmhPaUJ1ZFcxaVpYSTdYRzRnSUhCeWIzUmxZM1JsWkNCc1lXMWlaR0V5T2lCdWRXMWlaWEk3WEc0Z0lIQnliM1JsWTNSbFpDQmtiR0Z0WW1SaE1qb2diblZ0WW1WeU8xeHVJQ0J3Y205MFpXTjBaV1FnWlhCemFXeHZiam9nYm5WdFltVnlPMXh1SUNCd2NtOTBaV04wWldRZ1pHbHpkR0Z1WTJWR2RXNWpkR2x2YmpvZ1JHbHpkR0Z1WTJWTlpYUnlhV003WEc0Z0lHUnBjM1JoYm1ObE9pQkRiMjl5WkdsdVlYUmxjenRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRM0psWVhSbGN5QmhiaUJwYm5OMFlXNWpaU0J2WmlCVFVFVkNZWE5sTGx4dUlDQWdLaUJBY0dGeVlXMGdlMDl3ZEdsdmJuTjlJRnR2Y0hScGIyNXpYU0JQY0hScGIyNXpJSFJ2SUhCaGMzTWdkRzhnZEdobElHTnZibk4wY25WamRHOXlMbHh1SUNBZ0tpQkFiV1Z0WW1WeWIyWWdVMUJGUW1GelpWeHVJQ0FnS2k5Y2JpQWdZMjl1YzNSeWRXTjBiM0lvYjNCMGFXOXVjejg2SUU5d2RHbHZibk1wSUh0Y2JpQWdJQ0IwYUdsekxuTjBaWEJ6SUQwZ2IzQjBhVzl1Y3o4dWMzUmxjSE1nUHo4Z01EdGNiaUFnSUNCMGFHbHpMbU41WTJ4bGN5QTlJRzl3ZEdsdmJuTS9MbU41WTJ4bGN5QS9QeUF4WlRZN1hHNGdJQ0FnTHk4Z1UyVnNaV04wSUdFZ1kzVjBiMlptSUdScGMzUmhibU5sSUh0amRYUnZabVo5SUdGdVpDQXVMaTVjYmlBZ0lDQjBhR2x6TG1OMWRHOW1aaUE5SUc5d2RHbHZibk0vTG1OMWRHOW1aaUEvUHlBd08xeHVJQ0FnSUM4dklDNHVMaUJoYmlCcGJtbDBhV0ZzSUd4bFlYSnVhVzVuSUhKaGRHVWdlMnhoYldKa1lYMGdQaUF3WEc0Z0lDQWdkR2hwY3k1c1lXMWlaR0VnUFNCdmNIUnBiMjV6UHk1c1lXMWlaR0VnUHo4Z01pNHdPMXh1SUNBZ0lIUm9hWE11Wkd4aGJXSmtZU0E5SUc5d2RHbHZibk0vTG1Sc1lXMWlaR0VnUHo4Z01DNHdNVHRjYmlBZ0lDQjBhR2x6TG14aGJXSmtZVElnUFNCMGFHbHpMbXhoYldKa1lTOHlManRjYmlBZ0lDQjBhR2x6TG1Sc1lXMWlaR0V5SUQwZ2RHaHBjeTVrYkdGdFltUmhMekl1TzF4dUlDQWdJSFJvYVhNdVpYQnphV3h2YmlBOUlHOXdkR2x2Ym5NL0xtVndjMmxzYjI0Z1B6OGdNV1V0TVRBN1hHNGdJQ0FnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0Ym1WNGRDMXNhVzVsSUdKeVlXTmxMWE4wZVd4bFhHNGdJQ0FnZEdocGN5NWthWE4wWVc1alpVWjFibU4wYVc5dUlEMGdiM0IwYVc5dWN6OHVaR2x6ZEdGdVkyVWdQejhnWTJGc1kzVnNZWFJsUlhWamJHbGtaV0Z1UkdsemRHRnVZMlU3WEc0Z0lDQWdkR2hwY3k1a2FYTjBZVzVqWlNBOUlGdGRPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVsdWFYUnBZV3hwZW1WeklHUnBjM1JoYm1ObElHMWhkSEpwZUM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJ5YjNSbFkzUmxaRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UxWmxZM1J2Y25OOUlIWmxZM1J2Y25NZ1NXNXdkWFFnZG1WamRHOXljeUIwYnlCallXeGpkV3hoZEdVZ1pHbHpkR0Z1WTJVZ1ltVjBkMlZsYmk1Y2JpQWdJQ29nUUcxbGJXSmxjbTltSUZOUVJVSmhjMlZjYmlBZ0lDb3ZYRzRnSUhCeWIzUmxZM1JsWkNCcGJtbDBSR2x6ZEdGdVkyVW9kbVZqZEc5eWN6b2dWbVZqZEc5eWN5a2dlMXh1SUNBZ0lIUm9hWE11WkdsemRHRnVZMlVnUFNCallXeGpSR2x6ZEdGdVkyVk5ZWFJ5YVhnb2RtVmpkRzl5Y3l3Z2RHaHBjeTVrYVhOMFlXNWpaVVoxYm1OMGFXOXVLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCRFlXeGpkV3hoZEdWeklHUnBjM1JoYm1ObElHSmxkSGRsWlc0Z2RHaGxJSFIzYnlCMlpXTjBiM0p6SUdkcGRtVnVMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTFabFkzUnZjbk45SUhabFkzUnZjbk1nVTJWMElHOW1JSFpsWTNSdmNuTWdkRzhnWTJGc1kzVnNZWFJsSUdScGMzUmhibU5sY3lCaVpYUjNaV1Z1TGx4dUlDQWdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdhVzVrWlhneElFbHVaR1Y0SUc5bUlIUm9aU0JtYVhKemRDQjJaV04wYjNJZ2IyWWdkR2hsSUhCaGFYSXVYRzRnSUNBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCcGJtUmxlRElnU1c1a1pYZ2diMllnZEdobElITmxZMjl1WkNCMlpXTjBiM0lnYjJZZ2RHaGxJSEJoYVhJdVhHNGdJQ0FxSUVCeVpYUjFjbTRnZTI1MWJXSmxjbjBnUkdsemRHRnVZMlVnWW1WMGQyVmxiaUIwYUdWelpTQjBkMjhnZG1WamRHOXljeTVjYmlBZ0lDb3ZYRzRnSUhCeWIzUmxZM1JsWkNCallXeGpSR2x6ZEdGdVkyVW9kbVZqZEc5eWN6b2dWbVZqZEc5eWN5d2dhVzVrWlhneE9pQnVkVzFpWlhJc0lHbHVaR1Y0TWpvZ2JuVnRZbVZ5S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1a2FYTjBZVzVqWlZ0cGJtUmxlREZkVzJsdVpHVjRNbDA3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1JXMWlaV1J6SUhSb1pTQjJaV04wYjNKeklHZHBkbVZ1SUdsdWRHOGdZU0IwZDI4dFpHbHRaVzV6YVc5dVlXd2djM0JoWTJVdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdWbVZqZEc5eWMzMGdkbVZqZEc5eWN5QkVMV1JwYldWdWMybHZibUZzSUdOdmIzSmthVzVoZEdWekxseHVJQ0FnS2lCQWNtVjBkWEp1SUh0RGIyOXlaR2x1WVhSbGMzMGdVMUJGSUdOdmIzSmthVzVoZEdWeklHbHVJRVFnYzNCaFkyVXVYRzRnSUNBcUwxeHVJQ0J3ZFdKc2FXTWdaVzFpWldRb2RtVmpkRzl5Y3pvZ1ZtVmpkRzl5Y3lrNklFTnZiM0prYVc1aGRHVnpJSHRjYmlBZ0lDQmpiMjV6ZENCdVNYUmxiWE1nUFNCMlpXTjBiM0p6TG14bGJtZDBhRHRjYmlBZ0lDQmpiMjV6ZENCaGNtVmhWMmxrZEdnZ1BTQTBNRHRjYmlBZ0lDQXZMeUJKYm1sMGFXRnNhWHBsSUhSb1pTQkVMV1JwYldWdWMybHZibUZzSUdOdmIzSmthVzVoZEdWeklHOW1JSFJvWlNCT0lIQnZhVzUwY3k1Y2JpQWdJQ0JqYjI1emRDQmpiMjl5WkdsdVlYUmxjeUE5SUdacGJHeFNZVzVrYjIxTllYUnlhWGdvYmtsMFpXMXpMQ0JUVUVWQ1lYTmxMbVJwYldWdWMybHZiaXdnWVhKbFlWZHBaSFJvS1R0Y2JseHVJQ0FnSUd4bGRDQnNZVzFpWkdFeUlEMGdkR2hwY3k1c1lXMWlaR0V5TzF4dVhHNGdJQ0FnYVdZZ0tIUm9hWE11YzNSbGNITWdQVDBnTUNrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTV6ZEdWd2N5QTlJSFpsWTNSdmNuTXViR1Z1WjNSb0xURTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2RHaHBjeTVwYm1sMFJHbHpkR0Z1WTJVb2RtVmpkRzl5Y3lrN1hHNWNiaUFnSUNCbWIzSWdLR3hsZENCamVXTnNaU0E5SURBN0lHTjVZMnhsSUR3Z2RHaHBjeTVqZVdOc1pYTTdJQ3NyWTNsamJHVXBJSHRjYmlBZ0lDQWdJR1p2Y2lBb2JHVjBJSE4wWlhBZ1BTQXdPeUJ6ZEdWd0lEd2dkR2hwY3k1emRHVndjenNnS3l0emRHVndLU0I3WEc0Z0lDQWdJQ0FnSUM4dklGTmxiR1ZqZENCMGQyOGdjRzlwYm5SekxDQnBJR0Z1WkNCcUxDQmhkQ0J5WVc1a2IyMHNJQzR1TGx4dUlDQWdJQ0FnSUNCamIyNXpkQ0JwSUQwZ2NtRnVaRzl0U1c1MEtHNUpkR1Z0Y3lrN0lHeGxkQ0JxSUQwZ2NtRnVaRzl0U1c1MEtHNUpkR1Z0Y3lrN1hHNGdJQ0FnSUNBZ0lIZG9hV3hsSUNocElEMDlJR29wSUdvZ1BTQnlZVzVrYjIxSmJuUW9ia2wwWlcxektUdGNibHh1SUNBZ0lDQWdJQ0JqYjI1emRDQnliM2RwSUQwZ1kyOXZjbVJwYm1GMFpYTmJhVjA3SUdOdmJuTjBJSEp2ZDJvZ1BTQmpiMjl5WkdsdVlYUmxjMXRxWFR0Y2JseHVJQ0FnSUNBZ0lDQXZMeUF1TGk0Z2NtVjBjbWxsZG1VZ0tHOXlJR1YyWVd4MVlYUmxLU0IwYUdWcGNpQndjbTk0YVcxcGRIa2dhVzRnZEdobElHbHVjSFYwSUhOd1lXTmxMQ0J5YVdvZ1lXNWtJQzR1TGx4dUlDQWdJQ0FnSUNCamIyNXpkQ0J5SUQwZ2RHaHBjeTVqWVd4alJHbHpkR0Z1WTJVb2RtVmpkRzl5Y3l3Z2FTd2dhaWs3WEc0Z0lDQWdJQ0FnSUM4dklDNHVMaUJqYjIxd2RYUmxJSFJvWldseUlFVjFZMnhwWkdWaGJpQmthWE4wWVc1alpTQnZiaUIwYUdVZ1JDMWthVzFsYm5OcGIyNWhiQ0J0WVhBc0lHUnBhaTVjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdaQ0E5SUdOaGJHTjFiR0YwWlVWMVkyeHBaR1ZoYmtScGMzUmhibU5sS0hKdmQya3NJSEp2ZDJvcE8xeHVYRzRnSUNBZ0lDQWdJQzh2SUVsbUlISnBhaUE4UFNCeVl5d2diM0lnYVdZZ2NtbHFJRDRnY21NZ1lXNWtJR1JwYWlBOElISnBhaUF1TGk1Y2JpQWdJQ0FnSUNBZ2FXWWdLQ2gwYUdsekxtTjFkRzltWmlBOVBTQXdLU0I4ZkNBb2NpQThQU0IwYUdsekxtTjFkRzltWmlrZ2ZId2dLR1FnUENCeUtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJRzExYkhScGNHeHBaWElnUFNCc1lXMWlaR0V5S2loeUxXUXBMeWhrSzNSb2FYTXVaWEJ6YVd4dmJpazdYRzRnSUNBZ0lDQWdJQ0FnTHk4Z0xpNHVJSFZ3WkdGMFpTQjBhR1VnWTI5dmNtUnBibUYwWlhNZ2VHa2dZVzVrSUhocUxseHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElHUnBabVpKU2lBOUlIWmxZM1J2Y2tGa1pDaHliM2RwTENCeWIzZHFMQ0F0TVNrN1hHNGdJQ0FnSUNBZ0lDQWdZMjl2Y21ScGJtRjBaWE5iYVYwZ1BTQjJaV04wYjNKQlpHUW9jbTkzYVN3Z1pHbG1aa2xLTENCdGRXeDBhWEJzYVdWeUtUdGNiaUFnSUNBZ0lDQWdJQ0JqYjI5eVpHbHVZWFJsYzF0cVhTQTlJSFpsWTNSdmNrRmtaQ2h5YjNkcUxDQmthV1ptU1Vvc0lDMXRkV3gwYVhCc2FXVnlLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnTHk4Z1JHVmpjbVZoYzJVZ2RHaGxJR3hsWVhKdWFXNW5JSEpoZEdVZ2UyeGhiV0prWVgwZ1lua2dZU0J3Y21WelkzSnBZbVZrSUh0a2JHRnRZbVJoZlM1Y2JpQWdJQ0FnSUd4aGJXSmtZVElnTFQwZ2RHaHBjeTVrYkdGdFltUmhNanRjYmlBZ0lDQWdJR2xtSUNoc1lXMWlaR0V5SUR3OUlEQXVLU0I3WEc0Z0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnWTI5dmNtUnBibUYwWlhNN1hHNGdJSDFjYm4xY2JseHVMeW9xWEc0Z0tpQkpiWEJzWlcxbGJuUnpJRzF2WkdsbWFXVmtJSE4wYjJOb1lYTjBhV01nY0hKdmVHbHRhWFI1SUdWdFltVmtaR2x1Wnk1Y2JpQXFYRzRnS2lCQVpYaHdiM0owWEc0Z0tpQkFZMnhoYzNNZ1VGTlFSVUpoYzJWY2JpQXFJRUJzYVc1cklHUnZhVG94TUM0eE1ERTJMMU14TURrekxUTXlOak1vTURNcE1EQXhOVFV0TkZ4dUlDb3ZYRzVsZUhCdmNuUWdZMnhoYzNNZ1VGTlFSVUpoYzJVZ1pYaDBaVzVrY3lCVFVFVkNZWE5sSUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRVZ0WW1Wa2N5QjBhR1VnZG1WamRHOXljeUJuYVhabGJpQnBiblJ2SUdFZ2RIZHZMV1JwYldWdWMybHZibUZzSUhOd1lXTmxJSFZ6YVc1bklHRWdiVzlrYVdacFpXUWdkWEJrWVhSbElISjFiR1V1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN1ZtVmpkRzl5YzMwZ2RtVmpkRzl5Y3lCRUxXUnBiV1Z1YzJsdmJtRnNJR052YjNKa2FXNWhkR1Z6TGx4dUlDQWdLaUJBY21WMGRYSnVJSHREYjI5eVpHbHVZWFJsYzMwZ1UxQkZJR052YjNKa2FXNWhkR1Z6SUdsdUlFUWdjM0JoWTJVdVhHNGdJQ0FxTDF4dUlDQndkV0pzYVdNZ1pXMWlaV1FvZG1WamRHOXljem9nVm1WamRHOXljeWs2SUVOdmIzSmthVzVoZEdWeklIdGNiaUFnSUNCamIyNXpkQ0J1U1hSbGJYTWdQU0IyWldOMGIzSnpMbXhsYm1kMGFEdGNiaUFnSUNCamIyNXpkQ0JoY21WaFYybGtkR2dnUFNBME1EdGNiaUFnSUNBdkx5QWdTVzVwZEdsaGJHbDZaU0IwYUdVZ1JDMWthVzFsYm5OcGIyNWhiQ0JqYjI5eVpHbHVZWFJsY3lCdlppQjBhR1VnVGlCd2IybHVkSE11WEc0Z0lDQWdZMjl1YzNRZ1kyOXZjbVJwYm1GMFpYTWdQU0JtYVd4c1VtRnVaRzl0VFdGMGNtbDRLRzVKZEdWdGN5d2dVRk5RUlVKaGMyVXVaR2x0Wlc1emFXOXVMQ0JoY21WaFYybGtkR2dwTzF4dUlDQWdJR3hsZENCc1lXMWlaR0VnUFNCMGFHbHpMbXhoYldKa1lUdGNibHh1SUNBZ0lIUm9hWE11YVc1cGRFUnBjM1JoYm1ObEtIWmxZM1J2Y25NcE8xeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ1kzbGpiR1VnUFNBd095QmplV05zWlNBOElIUm9hWE11WTNsamJHVnpPeUFySzJONVkyeGxLU0I3WEc0Z0lDQWdJQ0F2THlCVFpXeGxZM1FnWVNCd2IybHVkQ3dnYVN3Z1lYUWdjbUZ1Wkc5dElDaHdhWFp2ZENrdVhHNGdJQ0FnSUNCamIyNXpkQ0JwT2lCdWRXMWlaWElnUFNCeVlXNWtiMjFKYm5Rb2JrbDBaVzF6S1R0Y2JpQWdJQ0FnSUdOdmJuTjBJSEp2ZDJrZ1BTQmpiMjl5WkdsdVlYUmxjMXRwWFR0Y2JseHVJQ0FnSUNBZ0x5OGdSbTl5SUdWMlpYSjVJSEJ2YVc1MElHb2dJVDBnYVNBdUxpNWNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHb2dQU0F3T3lCcUlEd2dia2wwWlcxek95QXJLMm9wSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR2tnUFQwZ2Fpa2dZMjl1ZEdsdWRXVTdYRzRnSUNBZ0lDQWdJR052Ym5OMElISnZkMm9nUFNCamIyOXlaR2x1WVhSbGMxdHFYVHRjYmlBZ0lDQWdJQ0FnTHk4Z0xpNHVJSEpsZEhKcFpYWmxJQ2h2Y2lCbGRtRnNkV0YwWlNrZ2FYUnpJSEJ5YjNocGJXbDBlU0IwYnlCcElHbHVJSFJvWlNCcGJuQjFkQ0J6Y0dGalpTd2djbWxxSUM0dUxseHVJQ0FnSUNBZ0lDQmpiMjV6ZENCeUlEMGdkR2hwY3k1allXeGpSR2x6ZEdGdVkyVW9kbVZqZEc5eWN5d2dhU3dnYWlrN1hHNGdJQ0FnSUNBZ0lDOHZJQzR1TGlCaGJtUWdZMjl0Y0hWMFpTQjBhR1ZwY2lCRmRXTnNhV1JsWVc0Z1pHbHpkR0Z1WTJVZ2IyNGdkR2hsSUVRdFpHbHRaVzV6YVc5dVlXd2diV0Z3TENCa2FXb3VYRzRnSUNBZ0lDQWdJR052Ym5OMElHUWdQU0JqWVd4amRXeGhkR1ZGZFdOc2FXUmxZVzVFYVhOMFlXNWpaU2h5YjNkcExDQnliM2RxS1R0Y2JpQWdJQ0FnSUNBZ0x5OGdTV1lnY21scUlEdzlJSEpqTENCdmNpQnBaaUJ5YVdvZ1BpQnlZeUJoYm1RZ1pHbHFJRHdnY21scUlDNHVMbHh1SUNBZ0lDQWdJQ0JwWmlBb0tIUm9hWE11WTNWMGIyWm1JRDA5SURBcElIeDhJQ2h5SUR3OUlIUm9hWE11WTNWMGIyWm1LU0I4ZkNBb1pDQThJSElwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2JYVnNkR2x3YkdsbGNpQTlJR3hoYldKa1lTb29jaTFrS1M4b1pDdDBhR2x6TG1Wd2MybHNiMjRwTzF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUdScFptWkpTaUE5SUhabFkzUnZja0ZrWkNoeWIzZHBMQ0J5YjNkcUxDQXRNU2s3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdMaTR1SUhWd1pHRjBaU0IwYUdVZ1kyOXZjbVJwYm1GMFpYTWdlR291WEc0Z0lDQWdJQ0FnSUNBZ1kyOXZjbVJwYm1GMFpYTmJhbDBnUFNCMlpXTjBiM0pCWkdRb2NtOTNhaXdnWkdsbVprbEtMQ0F0YlhWc2RHbHdiR2xsY2lrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lDOHZJRVJsWTNKbFlYTmxJSFJvWlNCc1pXRnlibWx1WnlCeVlYUmxJSHRzWVcxaVpHRjlJR0o1SUdFZ2NISmxjMk55YVdKbFpDQjdaR3hoYldKa1lYMHVYRzRnSUNBZ0lDQnNZVzFpWkdFZ0xUMGdkR2hwY3k1a2JHRnRZbVJoTzF4dUlDQWdJQ0FnYVdZZ0tHeGhiV0prWVNBOFBTQXdMaWtnZTF4dUlDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUdOdmIzSmthVzVoZEdWek8xeHVJQ0I5WEc1OVhHNWNiaThxS2x4dUlDb2dTVzF3YkdWdFpXNTBjeUJ0YjJScFptbGxaQ0J6ZEc5amFHRnpkR2xqSUhCeWIzaHBiV2wwZVNCbGJXSmxaR1JwYm1jdVhHNGdLbHh1SUNvZ1FHVjRjRzl5ZEZ4dUlDb2dRR05zWVhOeklFOXlhV2RwYm1Gc1UxQkZYRzRnS2lCQWJHbHVheUJrYjJrNk1UQXVNVEF3TWk5cVkyTXVNVEF5TXpSY2JpQXFMMXh1Wlhod2IzSjBJR05zWVhOeklFOXlhV2RwYm1Gc1UxQkZJR1Y0ZEdWdVpITWdVMUJGUW1GelpTQjdYRzRnSUM4cUtseHVJQ0FnS2lCRmJXSmxaSE1nZEdobElIWmxZM1J2Y25NZ1oybDJaVzRnYVc1MGJ5QmhJSFIzYnkxa2FXMWxibk5wYjI1aGJDQnpjR0ZqWlNCMWMybHVaeUJoSUcxdlpHbG1hV1ZrSUhWd1pHRjBaU0J5ZFd4bExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMVpsWTNSdmNuTjlJSFpsWTNSdmNuTWdSQzFrYVcxbGJuTnBiMjVoYkNCamIyOXlaR2x1WVhSbGN5NWNiaUFnSUNvZ1FISmxkSFZ5YmlCN1EyOXZjbVJwYm1GMFpYTjlJRk5RUlNCamIyOXlaR2x1WVhSbGN5QnBiaUJFSUhOd1lXTmxMbHh1SUNBZ0tpOWNiaUFnY0hKdmRHVmpkR1ZrSUhKaFpHbDFjMUJsY21ObGJuUTZJRzUxYldKbGNqdGNiaUFnY0hKdmRHVmpkR1ZrSUcxaGVFUnBjM1JoYm1ObE9pQnVkVzFpWlhJN1hHNGdJSEJ5YjNSbFkzUmxaQ0J0WVhoRWFYTjBZVzVqWlZOMFpYQnpPaUJ1ZFcxaVpYSTdYRzVjYmlBZ1kyOXVjM1J5ZFdOMGIzSW9iM0IwYVc5dWN6ODZJRTl3ZEdsdmJuTXBJSHRjYmlBZ0lDQnpkWEJsY2lodmNIUnBiMjV6S1R0Y2JpQWdJQ0IwYUdsekxtTjVZMnhsY3lBOUlHOXdkR2x2Ym5NL0xtTjVZMnhsY3lBL1B5QXhaVE03WEc0Z0lDQWdkR2hwY3k1emRHVndjeUE5SUc5d2RHbHZibk0vTG5OMFpYQnpJRDgvSURFd01EQXdNRHRjYmlBZ0lDQjBhR2x6TG5KaFpHbDFjMUJsY21ObGJuUWdQU0J2Y0hScGIyNXpQeTV5WVdScGRYTlFaWEpqWlc1MElEOC9JREV1TUR0Y2JpQWdJQ0IwYUdsekxtMWhlRVJwYzNSaGJtTmxJRDBnYjNCMGFXOXVjejh1YldGNFJHbHpkR0Z1WTJVZ1B6OGdiblZzYkR0Y2JpQWdJQ0IwYUdsekxtMWhlRVJwYzNSaGJtTmxVM1JsY0hNZ1BTQnZjSFJwYjI1elB5NXRZWGhFYVhOMFlXNWpaVk4wWlhCeklEOC9JRzUxYkd3N1hHNGdJSDFjYmx4dUlDQndkV0pzYVdNZ1pXMWlaV1FvZG1WamRHOXljem9nVm1WamRHOXljeWs2SUVOdmIzSmthVzVoZEdWeklIdGNiaUFnSUNCamIyNXpkQ0J1U1hSbGJYTWdQU0IyWldOMGIzSnpMbXhsYm1kMGFEdGNiaUFnSUNCamIyNXpkQ0JoY21WaFYybGtkR2dnUFNBME1EdGNiaUFnSUNBdkx5QkpibWwwYVdGc2FYcGxJSFJvWlNCRUxXUnBiV1Z1YzJsdmJtRnNJR052YjNKa2FXNWhkR1Z6SUc5bUlIUm9aU0JPSUhCdmFXNTBjeTVjYmlBZ0lDQmpiMjV6ZENCamIyOXlaR2x1WVhSbGN5QTlJR1pwYkd4U1lXNWtiMjFOWVhSeWFYZ29ia2wwWlcxekxDQlBjbWxuYVc1aGJGTlFSUzVrYVcxbGJuTnBiMjRzSUdGeVpXRlhhV1IwYUNrN1hHNWNiaUFnSUNCMGFHbHpMbWx1YVhSRWFYTjBZVzVqWlNoMlpXTjBiM0p6S1R0Y2JseHVJQ0FnSUdsbUlDaDBhR2x6TG0xaGVFUnBjM1JoYm1ObFUzUmxjSE1nUFQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnZEdocGN5NXRZWGhFYVhOMFlXNWpaVk4wWlhCeklEMGdia2wwWlcxeklDb2dUV0YwYUM1bWJHOXZjaWdvYmtsMFpXMXpJQzBnTVNrZ0x5QXlLVHRjYmlBZ0lDQjlYRzRnSUNBZ2FXWWdLSFJvYVhNdWJXRjRSR2x6ZEdGdVkyVWdQVDBnYm5Wc2JDa2dlMXh1SUNBZ0lDQWdkR2hwY3k1dFlYaEVhWE4wWVc1alpTQTlJQzB4WlRNM08xeHVJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2JpQTlJREE3SUc0Z1BDQjBhR2x6TG0xaGVFUnBjM1JoYm1ObFUzUmxjSE03SUc0ckt5a2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnBJRDBnY21GdVpHOXRTVzUwS0c1SmRHVnRjeWs3SUd4bGRDQnFJRDBnY21GdVpHOXRTVzUwS0c1SmRHVnRjeWs3WEc0Z0lDQWdJQ0FnSUhkb2FXeGxJQ2hwSUQwOUlHb3BJR29nUFNCeVlXNWtiMjFKYm5Rb2JrbDBaVzF6S1R0Y2JseHVJQ0FnSUNBZ0lDQmpiMjV6ZENCa0lEMGdkR2hwY3k1allXeGpSR2x6ZEdGdVkyVW9kbVZqZEc5eWN5d2dhU3dnYWlrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hrSUQ0Z2RHaHBjeTV0WVhoRWFYTjBZVzVqWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWJXRjRSR2x6ZEdGdVkyVWdQU0JrTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnYkdWMElHeGhiV0prWVNBOUlIUm9hWE11YkdGdFltUmhPMXh1SUNBZ0lHTnZibk4wSUhKaFpHbDFjeUE5SUNoMGFHbHpMbkpoWkdsMWMxQmxjbU5sYm5RZ1BUMGdNQzR3S1NBL0lIUm9hWE11YldGNFJHbHpkR0Z1WTJVZ09pQjBhR2x6TG0xaGVFUnBjM1JoYm1ObElDb2dkR2hwY3k1eVlXUnBkWE5RWlhKalpXNTBPMXh1WEc0Z0lDQWdabTl5SUNoc1pYUWdZM2xqYkdVZ1BTQXdPeUJqZVdOc1pTQThJSFJvYVhNdVkzbGpiR1Z6T3lBcksyTjVZMnhsS1NCN1hHNGdJQ0FnSUNCbWIzSWdLR3hsZENCemRHVndJRDBnTURzZ2MzUmxjQ0E4SUhSb2FYTXVjM1JsY0hNN0lDc3JjM1JsY0NrZ2UxeHVJQ0FnSUNBZ0lDQXZMeUJUWld4bFkzUWdkSGR2SUhCdmFXNTBjeXdnYVNCaGJtUWdhaXdnWVhRZ2NtRnVaRzl0TENBdUxpNWNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2FTQTlJSEpoYm1SdmJVbHVkQ2h1U1hSbGJYTXBPeUJzWlhRZ2FpQTlJSEpoYm1SdmJVbHVkQ2h1U1hSbGJYTXBPMXh1SUNBZ0lDQWdJQ0IzYUdsc1pTQW9hU0E5UFNCcUtTQnFJRDBnY21GdVpHOXRTVzUwS0c1SmRHVnRjeWs3WEc1Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnY205M2FTQTlJR052YjNKa2FXNWhkR1Z6VzJsZE95QmpiMjV6ZENCeWIzZHFJRDBnWTI5dmNtUnBibUYwWlhOYmFsMDdYRzVjYmlBZ0lDQWdJQ0FnTHk4Z0xpNHVJSEpsZEhKcFpYWmxJQ2h2Y2lCbGRtRnNkV0YwWlNrZ2RHaGxhWElnY0hKdmVHbHRhWFI1SUdsdUlIUm9aU0JwYm5CMWRDQnpjR0ZqWlN3Z2NtbHFJR0Z1WkNBdUxpNWNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2NpQTlJSFJvYVhNdVkyRnNZMFJwYzNSaGJtTmxLSFpsWTNSdmNuTXNJR2tzSUdvcE8xeHVJQ0FnSUNBZ0lDQXZMeUF1TGk0Z1kyOXRjSFYwWlNCMGFHVnBjaUJGZFdOc2FXUmxZVzRnWkdsemRHRnVZMlVnYjI0Z2RHaGxJRVF0WkdsdFpXNXphVzl1WVd3Z2JXRndMQ0JrYVdvdVhHNGdJQ0FnSUNBZ0lHTnZibk4wSUdRZ1BTQmpZV3hqZFd4aGRHVkZkV05zYVdSbFlXNUVhWE4wWVc1alpTaHliM2RwTENCeWIzZHFLVHRjYmx4dUlDQWdJQ0FnSUNCcFppQW9LSElnUEQwZ2NtRmthWFZ6S1NCOGZDQW9aQ0E4SUhJcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdiWFZzZEdsd2JHbGxjaUE5SUd4aGJXSmtZU0FxSURBdU5TQXFJQ2h5SUMwZ1pDa2dMeUFvWkNBcklIUm9hWE11WlhCemFXeHZiaWs3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdMaTR1SUhWd1pHRjBaU0IwYUdVZ1kyOXZjbVJwYm1GMFpYTWdlR2tnWVc1a0lIaHFMbHh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR1JwWm1aSlNpQTlJSFpsWTNSdmNrRmtaQ2h5YjNkcExDQnliM2RxTENBdE1TazdYRzRnSUNBZ0lDQWdJQ0FnWTI5dmNtUnBibUYwWlhOYmFWMGdQU0IyWldOMGIzSkJaR1FvY205M2FTd2daR2xtWmtsS0xDQnRkV3gwYVhCc2FXVnlLVHRjYmlBZ0lDQWdJQ0FnSUNCamIyOXlaR2x1WVhSbGMxdHFYU0E5SUhabFkzUnZja0ZrWkNoeWIzZHFMQ0JrYVdabVNVb3NJQzF0ZFd4MGFYQnNhV1Z5S1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2JHRnRZbVJoSUMwOUlDZ29kR2hwY3k1c1lXMWlaR0VnTFNCMGFHbHpMbVJzWVcxaVpHRXBJQzhnS0hSb2FYTXVZM2xqYkdWeklDMGdNUzR3S1NrN0lEdGNiaUFnSUNBZ0lHbG1JQ2hzWVcxaVpHRWdQQ0IwYUdsekxtUnNZVzFpWkdFcElIdGNiaUFnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQmpiMjl5WkdsdVlYUmxjenRjYmlBZ2ZWeHVmVnh1SWwxOSIsImltcG9ydCAqIGFzIGZsIGZyb20gJ2Zhc3Rlc3QtbGV2ZW5zaHRlaW4nO1xuaW1wb3J0IHsgamFyb1dpbmtsZXIgfSBmcm9tICdqYXJvLXdpbmtsZXItdHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBkaXN0YW5jZU1ldHJpY3MgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy9zaW1pbGFyaXR5LW1ldHJpY3MnO1xuaW1wb3J0IHsgY2FsY3VsYXRlRXVjbGlkZWFuRGlzdGFuY2UgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy92ZWN0b3Itb3BlcmF0aW9ucyc7XG5leHBvcnQgY29uc3QgQXZhaWxhYmxlTWV0cmljcyA9IHtcbiAgICAnVmVjdG9yJzoge1xuICAgICAgICAnRXVjbGlkZWFuRGlzdGFuY2UnOiBjYWxjdWxhdGVFdWNsaWRlYW5EaXN0YW5jZSxcbiAgICB9LFxuICAgICdTdHJpbmcnOiB7XG4gICAgICAgICdMZXZlbnNodGVpbic6IGZsLmRpc3RhbmNlLFxuICAgICAgICAnSmFyby1XaW5rbGVyJzogamFyb1dpbmtsZXIsXG4gICAgfSxcbiAgICAnQml0QXJyYXknOiB7XG4gICAgICAgICdUYW5pbW90byc6IGRpc3RhbmNlTWV0cmljc1snVGFuaW1vdG8nXSxcbiAgICAgICAgJ0RpY2UnOiBkaXN0YW5jZU1ldHJpY3NbJ0RpY2UnXSxcbiAgICAgICAgJ0FzeW1tZXRyaWMnOiBkaXN0YW5jZU1ldHJpY3NbJ0FzeW1tZXRyaWMnXSxcbiAgICAgICAgJ0JyYXVuLUJsYW5xdWV0JzogZGlzdGFuY2VNZXRyaWNzWydCcmF1bi1CbGFucXVldCddLFxuICAgICAgICAnQ29zaW5lJzogZGlzdGFuY2VNZXRyaWNzWydDb3NpbmUnXSxcbiAgICAgICAgJ0t1bGN6eW5za2knOiBkaXN0YW5jZU1ldHJpY3NbJ0t1bGN6eW5za2knXSxcbiAgICAgICAgJ01jLUNvbm5hdWdoZXknOiBkaXN0YW5jZU1ldHJpY3NbJ01jLUNvbm5hdWdoZXknXSxcbiAgICAgICAgJ1JvZ290LUdvbGRiZXJnJzogZGlzdGFuY2VNZXRyaWNzWydSb2dvdC1Hb2xkYmVyZyddLFxuICAgICAgICAnUnVzc2VsJzogZGlzdGFuY2VNZXRyaWNzWydSdXNzZWwnXSxcbiAgICAgICAgJ1Nva2FsJzogZGlzdGFuY2VNZXRyaWNzWydTb2thbCddLFxuICAgIH0sXG59O1xuZXhwb3J0IGNvbnN0IE1ldHJpY1RvRGF0YVR5cGUgPSBPYmplY3Qua2V5cyhBdmFpbGFibGVNZXRyaWNzKVxuICAgIC5yZWR1Y2UoKHJldCwga2V5KSA9PiB7XG4gICAgZm9yIChjb25zdCB2YWwgb2YgT2JqZWN0LmtleXMoQXZhaWxhYmxlTWV0cmljc1trZXldKSkge1xuICAgICAgICByZXRbdmFsXSA9IGtleTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn0sIHt9KTtcbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZ01ldHJpYyhuYW1lKSB7XG4gICAgcmV0dXJuIE1ldHJpY1RvRGF0YVR5cGVbbmFtZV0gPT0gJ1N0cmluZyc7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNCaXRBcnJheU1ldHJpYyhuYW1lKSB7XG4gICAgcmV0dXJuIE1ldHJpY1RvRGF0YVR5cGVbbmFtZV0gPT0gJ0JpdEFycmF5Jztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlY3Rvck1ldHJpYyhuYW1lKSB7XG4gICAgcmV0dXJuIE1ldHJpY1RvRGF0YVR5cGVbbmFtZV0gPT0gJ1ZlY3Rvcic7XG59XG4vKiogVW5pZmllZCBjbGFzcyBpbXBsZW1lbnRpbmcgZGlmZmVyZW50IHN0cmluZyBtZWFzdXJlcy4gKi9cbmV4cG9ydCBjbGFzcyBNZWFzdXJlIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIE1lYXN1cmUgd2l0aCAuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZCBNZXRob2QgdG8gY2FsY3VsYXRlIGRpc3RhbmNlIGJldHdlZW4gc3RyaW5ncy5cbiAgICAgKiBAbWVtYmVyb2YgTWVhc3VyZXJcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtZXRob2QpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgIHRoaXMuZGF0YVR5cGUgPSBNZXRyaWNUb0RhdGFUeXBlW21ldGhvZF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgY3VzdG9tIHN0cmluZyBkaXN0YW5jZSBmdW5jdGlvbiBzcGVjaWZpZWQuXG4gICAgICogQHJldHVybiB7RGlzdGFuY2VNZXRyaWN9IENhbGxiYWNrIG9mIHRoZSBtZWFzdXJlIGNob3Nlbi5cbiAgICAgKiBAbWVtYmVyb2YgTWVhc3VyZXJcbiAgICAgKi9cbiAgICBnZXRNZWFzdXJlKCkge1xuICAgICAgICBjb25zdCBkaWN0ID0gQXZhaWxhYmxlTWV0cmljcztcbiAgICAgICAgcmV0dXJuIGRpY3RbdGhpcy5kYXRhVHlwZV1bdGhpcy5tZXRob2RdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGN1c3RvbSBzdHJpbmcgZGlzdGFuY2UgYnkgdGhlIGdpdmVuIGRhdGEgdHlwZS5cbiAgICAgKiBAcGFyYW0ge0F2YWlsYWJsZURhdGFUeXBlc30gZGF0YVR5cGUgTWV0cmljJ3MgZGF0YSB0eXBlXG4gICAgICogQHJldHVybiB7c3RyaW5nW119IE1ldHJpYyBuYW1lcyB3aGljaCBleHBlY3RzIHRoZSBnaXZlbiBkYXRhIHR5cGVcbiAgICAgKiBAbWVtYmVyb2YgTWVhc3VyZXJcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0TWV0cmljQnlEYXRhVHlwZShkYXRhVHlwZSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoQXZhaWxhYmxlTWV0cmljc1tkYXRhVHlwZV0pO1xuICAgIH1cbiAgICAvKiogUmV0dXJucyBtZXRyaWMgbmFtZXMgYXZhaWxhYmxlLlxuICAgICAqIEBtZW1iZXJvZiBNZWFzdXJlclxuICAgICovXG4gICAgc3RhdGljIGdldCBhdmFpbGFibGVNZWFzdXJlcygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKEF2YWlsYWJsZU1ldHJpY3MpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRIbHdaV1F0YldWMGNtbGpjeTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkluUjVjR1ZrTFcxbGRISnBZM011ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRXNUMEZCVHl4TFFVRkxMRVZCUVVVc1RVRkJUU3h4UWtGQmNVSXNRMEZCUXp0QlFVTXhReXhQUVVGUExFVkJRVU1zVjBGQlZ5eEZRVUZETEUxQlFVMHNlVUpCUVhsQ0xFTkJRVU03UVVGRmNFUXNUMEZCVHl4RlFVRkRMR1ZCUVdVc1JVRkJReXhOUVVGTkxHdEVRVUZyUkN4RFFVRkRPMEZCUTJwR0xFOUJRVThzUlVGQlF5d3dRa0ZCTUVJc1JVRkJReXhOUVVGTkxHbEVRVUZwUkN4RFFVRkRPMEZCU1ROR0xFMUJRVTBzUTBGQlF5eE5RVUZOTEdkQ1FVRm5RaXhIUVVGSE8wbEJRemxDTEZGQlFWRXNSVUZCUlR0UlFVTlNMRzFDUVVGdFFpeEZRVUZGTERCQ1FVRXdRanRMUVVOb1JEdEpRVU5FTEZGQlFWRXNSVUZCUlR0UlFVTlNMR0ZCUVdFc1JVRkJSU3hGUVVGRkxFTkJRVU1zVVVGQlVUdFJRVU14UWl4alFVRmpMRVZCUVVVc1YwRkJWenRMUVVNMVFqdEpRVU5FTEZWQlFWVXNSVUZCUlR0UlFVTldMRlZCUVZVc1JVRkJSU3hsUVVGbExFTkJRVU1zVlVGQlZTeERRVUZETzFGQlEzWkRMRTFCUVUwc1JVRkJSU3hsUVVGbExFTkJRVU1zVFVGQlRTeERRVUZETzFGQlF5OUNMRmxCUVZrc1JVRkJSU3hsUVVGbExFTkJRVU1zV1VGQldTeERRVUZETzFGQlF6TkRMR2RDUVVGblFpeEZRVUZGTEdWQlFXVXNRMEZCUXl4blFrRkJaMElzUTBGQlF6dFJRVU51UkN4UlFVRlJMRVZCUVVVc1pVRkJaU3hEUVVGRExGRkJRVkVzUTBGQlF6dFJRVU51UXl4WlFVRlpMRVZCUVVVc1pVRkJaU3hEUVVGRExGbEJRVmtzUTBGQlF6dFJRVU16UXl4bFFVRmxMRVZCUVVVc1pVRkJaU3hEUVVGRExHVkJRV1VzUTBGQlF6dFJRVU5xUkN4blFrRkJaMElzUlVGQlJTeGxRVUZsTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU03VVVGRGJrUXNVVUZCVVN4RlFVRkZMR1ZCUVdVc1EwRkJReXhSUVVGUkxFTkJRVU03VVVGRGJrTXNUMEZCVHl4RlFVRkZMR1ZCUVdVc1EwRkJReXhQUVVGUExFTkJRVU03UzBGRGJFTTdRMEZEUml4RFFVRkRPMEZCUlVZc1RVRkJUU3hEUVVGRExFMUJRVTBzWjBKQlFXZENMRWRCUVhGQ0xFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU03UzBGRE5VVXNUVUZCVFN4RFFVRkRMRU5CUVVNc1IwRkJjVUlzUlVGQlJTeEhRVUZITEVWQlFVVXNSVUZCUlR0SlFVTnlReXhMUVVGTExFMUJRVTBzUjBGQlJ5eEpRVUZKTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNSMEZCZVVJc1EwRkJReXhEUVVGRExFVkJRVVU3VVVGRE1VVXNSMEZCUnl4RFFVRkRMRWRCUVhsQ0xFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTTdTMEZEZEVNN1NVRkRSQ3hQUVVGUExFZEJRVWNzUTBGQlF6dEJRVU5pTEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVZkVUxFMUJRVTBzVlVGQlZTeGpRVUZqTEVOQlFVTXNTVUZCYTBJN1NVRkRMME1zVDBGQlR5eG5Ra0ZCWjBJc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeFJRVUZSTEVOQlFVTTdRVUZETlVNc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeG5Ra0ZCWjBJc1EwRkJReXhKUVVGclFqdEpRVU5xUkN4UFFVRlBMR2RDUVVGblFpeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRlZCUVZVc1EwRkJRenRCUVVNNVF5eERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMR05CUVdNc1EwRkJReXhKUVVGclFqdEpRVU12UXl4UFFVRlBMR2RDUVVGblFpeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRkZCUVZFc1EwRkJRenRCUVVNMVF5eERRVUZETzBGQlJVUXNORVJCUVRSRU8wRkJRelZFTEUxQlFVMHNUMEZCVHl4UFFVRlBPMGxCU1d4Q096czdPMDlCU1VjN1NVRkRTQ3haUVVGWkxFMUJRVzlDTzFGQlF6bENMRWxCUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzVFVGQlRTeERRVUZETzFGQlEzSkNMRWxCUVVrc1EwRkJReXhSUVVGUkxFZEJRVWNzWjBKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGMVFpeERRVUZETzBsQlEycEZMRU5CUVVNN1NVRkZSRHM3T3p0UFFVbEhPMGxCUTBrc1ZVRkJWVHRSUVVObUxFMUJRVTBzU1VGQlNTeEhRVUZ6UkN4blFrRkJaMElzUTBGQlF6dFJRVU5xUml4UFFVRlBMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJRekZETEVOQlFVTTdTVUZGUkRzN096czdUMEZMUnp0SlFVTkpMRTFCUVUwc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4UlFVRTBRanRSUVVNMVJDeFBRVUZQTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOcVJDeERRVUZETzBsQlJVUTdPMDFCUlVVN1NVRkRSaXhOUVVGTkxFdEJRVXNzYVVKQlFXbENPMUZCUXpGQ0xFOUJRVThzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eERRVUZETzBsQlEzWkRMRU5CUVVNN1EwRkRSaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0FxSUdGeklHWnNJR1p5YjIwZ0oyWmhjM1JsYzNRdGJHVjJaVzV6YUhSbGFXNG5PMXh1YVcxd2IzSjBJSHRxWVhKdlYybHVhMnhsY24wZ1puSnZiU0FuYW1GeWJ5MTNhVzVyYkdWeUxYUjVjR1Z6WTNKcGNIUW5PMXh1YVcxd2IzSjBJSHRFYVhOMFlXNWpaVTFsZEhKcFkzMGdabkp2YlNBblFHUmhkR0ZuY205ckxXeHBZbkpoY21sbGN5OTFkR2xzY3k5emNtTXZkSGx3WlMxa1pXTnNZWEpoZEdsdmJuTW5PMXh1YVcxd2IzSjBJSHRrYVhOMFlXNWpaVTFsZEhKcFkzTjlJR1p5YjIwZ0owQmtZWFJoWjNKdmF5MXNhV0p5WVhKcFpYTXZkWFJwYkhNdmMzSmpMM05wYldsc1lYSnBkSGt0YldWMGNtbGpjeWM3WEc1cGJYQnZjblFnZTJOaGJHTjFiR0YwWlVWMVkyeHBaR1ZoYmtScGMzUmhibU5sZlNCbWNtOXRJQ2RBWkdGMFlXZHliMnN0YkdsaWNtRnlhV1Z6TDNWMGFXeHpMM055WXk5MlpXTjBiM0l0YjNCbGNtRjBhVzl1Y3ljN1hHNXBiWEJ2Y25RZ1FtbDBRWEp5WVhrZ1puSnZiU0FuUUdSaGRHRm5jbTlyTFd4cFluSmhjbWxsY3k5MWRHbHNjeTl6Y21NdlltbDBMV0Z5Y21GNUp6dGNibWx0Y0c5eWRDQjdWbVZqZEc5eUxDQlRkSEpwYm1kRWFXTjBhVzl1WVhKNWZTQm1jbTl0SUNkQVpHRjBZV2R5YjJzdGJHbGljbUZ5YVdWekwzVjBhV3h6TDNOeVl5OTBlWEJsTFdSbFkyeGhjbUYwYVc5dWN5YzdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQkJkbUZwYkdGaWJHVk5aWFJ5YVdOeklEMGdlMXh1SUNBblZtVmpkRzl5SnpvZ2UxeHVJQ0FnSUNkRmRXTnNhV1JsWVc1RWFYTjBZVzVqWlNjNklHTmhiR04xYkdGMFpVVjFZMnhwWkdWaGJrUnBjM1JoYm1ObExGeHVJQ0I5TEZ4dUlDQW5VM1J5YVc1bkp6b2dlMXh1SUNBZ0lDZE1aWFpsYm5Ob2RHVnBiaWM2SUdac0xtUnBjM1JoYm1ObExGeHVJQ0FnSUNkS1lYSnZMVmRwYm10c1pYSW5PaUJxWVhKdlYybHVhMnhsY2l4Y2JpQWdmU3hjYmlBZ0owSnBkRUZ5Y21GNUp6b2dlMXh1SUNBZ0lDZFVZVzVwYlc5MGJ5YzZJR1JwYzNSaGJtTmxUV1YwY21samMxc25WR0Z1YVcxdmRHOG5YU3hjYmlBZ0lDQW5SR2xqWlNjNklHUnBjM1JoYm1ObFRXVjBjbWxqYzFzblJHbGpaU2RkTEZ4dUlDQWdJQ2RCYzNsdGJXVjBjbWxqSnpvZ1pHbHpkR0Z1WTJWTlpYUnlhV056V3lkQmMzbHRiV1YwY21sakoxMHNYRzRnSUNBZ0owSnlZWFZ1TFVKc1lXNXhkV1YwSnpvZ1pHbHpkR0Z1WTJWTlpYUnlhV056V3lkQ2NtRjFiaTFDYkdGdWNYVmxkQ2RkTEZ4dUlDQWdJQ2REYjNOcGJtVW5PaUJrYVhOMFlXNWpaVTFsZEhKcFkzTmJKME52YzJsdVpTZGRMRnh1SUNBZ0lDZExkV3hqZW5sdWMydHBKem9nWkdsemRHRnVZMlZOWlhSeWFXTnpXeWRMZFd4amVubHVjMnRwSjEwc1hHNGdJQ0FnSjAxakxVTnZibTVoZFdkb1pYa25PaUJrYVhOMFlXNWpaVTFsZEhKcFkzTmJKMDFqTFVOdmJtNWhkV2RvWlhrblhTeGNiaUFnSUNBblVtOW5iM1F0UjI5c1pHSmxjbWNuT2lCa2FYTjBZVzVqWlUxbGRISnBZM05iSjFKdloyOTBMVWR2YkdSaVpYSm5KMTBzWEc0Z0lDQWdKMUoxYzNObGJDYzZJR1JwYzNSaGJtTmxUV1YwY21samMxc25VblZ6YzJWc0oxMHNYRzRnSUNBZ0oxTnZhMkZzSnpvZ1pHbHpkR0Z1WTJWTlpYUnlhV056V3lkVGIydGhiQ2RkTEZ4dUlDQjlMRnh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUUxbGRISnBZMVJ2UkdGMFlWUjVjR1U2SUZOMGNtbHVaMFJwWTNScGIyNWhjbmtnUFNCUFltcGxZM1F1YTJWNWN5aEJkbUZwYkdGaWJHVk5aWFJ5YVdOektWeHVJQ0F1Y21Wa2RXTmxLQ2h5WlhRNklGTjBjbWx1WjBScFkzUnBiMjVoY25rc0lHdGxlU2tnUFQ0Z2UxeHVJQ0FnSUdadmNpQW9ZMjl1YzNRZ2RtRnNJRzltSUU5aWFtVmpkQzVyWlhsektFRjJZV2xzWVdKc1pVMWxkSEpwWTNOYmEyVjVJR0Z6SUVGMllXbHNZV0pzWlVSaGRHRlVlWEJsYzEwcEtTQjdYRzRnSUNBZ0lDQnlaWFJiZG1Gc0lHRnpJRUYyWVdsc1lXSnNaVVJoZEdGVWVYQmxjMTBnUFNCclpYazdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ5WlhRN1hHNGdJSDBzSUh0OUtUdGNibHh1Wlhod2IzSjBJSFI1Y0dVZ1FYWmhhV3hoWW14bFJHRjBZVlI1Y0dWeklEMGdhMlY1YjJZZ2RIbHdaVzltSUVGMllXbHNZV0pzWlUxbGRISnBZM003WEc1bGVIQnZjblFnZEhsd1pTQlRkSEpwYm1kTlpYUnlhV056SUQwZ2EyVjViMllnZEhsd1pXOW1JRUYyWVdsc1lXSnNaVTFsZEhKcFkzTmJKMU4wY21sdVp5ZGRPMXh1Wlhod2IzSjBJSFI1Y0dVZ1FtbDBRWEp5WVhsTlpYUnlhV056SUQwZ2EyVjViMllnZEhsd1pXOW1JRUYyWVdsc1lXSnNaVTFsZEhKcFkzTmJKMEpwZEVGeWNtRjVKMTA3WEc1bGVIQnZjblFnZEhsd1pTQldaV04wYjNKTlpYUnlhV056SUQwZ2EyVjViMllnZEhsd1pXOW1JRUYyWVdsc1lXSnNaVTFsZEhKcFkzTmJKMVpsWTNSdmNpZGRPMXh1Wlhod2IzSjBJSFI1Y0dVZ1MyNXZkMjVOWlhSeWFXTnpJRDBnVTNSeWFXNW5UV1YwY21samN5QjhJRUpwZEVGeWNtRjVUV1YwY21samN5QjhJRlpsWTNSdmNrMWxkSEpwWTNNN1hHNWNibVY0Y0c5eWRDQjBlWEJsSUZaaGJHbGtWSGx3WlhNZ1BTQjdaR0YwWVRvZ2MzUnlhVzVuVzEwc0lHMWxkSEpwWXpvZ1UzUnlhVzVuVFdWMGNtbGpjMzBnZkNCN1pHRjBZVG9nVm1WamRHOXlXMTBzSUcxbGRISnBZem9nVm1WamRHOXlUV1YwY21samMzMGdmRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHRrWVhSaE9pQkNhWFJCY25KaGVWdGRMQ0J0WlhSeWFXTTZJRUpwZEVGeWNtRjVUV1YwY21samMzMDdYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJwYzFOMGNtbHVaMDFsZEhKcFl5aHVZVzFsT2lCTGJtOTNiazFsZEhKcFkzTXBJSHRjYmlBZ2NtVjBkWEp1SUUxbGRISnBZMVJ2UkdGMFlWUjVjR1ZiYm1GdFpWMGdQVDBnSjFOMGNtbHVaeWM3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnBjMEpwZEVGeWNtRjVUV1YwY21saktHNWhiV1U2SUV0dWIzZHVUV1YwY21samN5a2dlMXh1SUNCeVpYUjFjbTRnVFdWMGNtbGpWRzlFWVhSaFZIbHdaVnR1WVcxbFhTQTlQU0FuUW1sMFFYSnlZWGtuTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdhWE5XWldOMGIzSk5aWFJ5YVdNb2JtRnRaVG9nUzI1dmQyNU5aWFJ5YVdOektTQjdYRzRnSUhKbGRIVnliaUJOWlhSeWFXTlViMFJoZEdGVWVYQmxXMjVoYldWZElEMDlJQ2RXWldOMGIzSW5PMXh1ZlZ4dVhHNHZLaW9nVlc1cFptbGxaQ0JqYkdGemN5QnBiWEJzWlcxbGJuUnBibWNnWkdsbVptVnlaVzUwSUhOMGNtbHVaeUJ0WldGemRYSmxjeTRnS2k5Y2JtVjRjRzl5ZENCamJHRnpjeUJOWldGemRYSmxJSHRjYmlBZ2NISnZkR1ZqZEdWa0lHMWxkR2h2WkRvZ1MyNXZkMjVOWlhSeWFXTnpPMXh1SUNCd2NtOTBaV04wWldRZ1pHRjBZVlI1Y0dVNklFRjJZV2xzWVdKc1pVUmhkR0ZVZVhCbGN6dGNibHh1SUNBdktpcGNiaUFnSUNvZ1EzSmxZWFJsY3lCaGJpQnBibk4wWVc1alpTQnZaaUJOWldGemRYSmxJSGRwZEdnZ0xseHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYldWMGFHOWtJRTFsZEdodlpDQjBieUJqWVd4amRXeGhkR1VnWkdsemRHRnVZMlVnWW1WMGQyVmxiaUJ6ZEhKcGJtZHpMbHh1SUNBZ0tpQkFiV1Z0WW1WeWIyWWdUV1ZoYzNWeVpYSmNiaUFnSUNvdlhHNGdJR052Ym5OMGNuVmpkRzl5S0cxbGRHaHZaRG9nUzI1dmQyNU5aWFJ5YVdOektTQjdYRzRnSUNBZ2RHaHBjeTV0WlhSb2IyUWdQU0J0WlhSb2IyUTdYRzRnSUNBZ2RHaHBjeTVrWVhSaFZIbHdaU0E5SUUxbGRISnBZMVJ2UkdGMFlWUjVjR1ZiYldWMGFHOWtYU0JoY3lCQmRtRnBiR0ZpYkdWRVlYUmhWSGx3WlhNN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVYwZFhKdWN5QmpkWE4wYjIwZ2MzUnlhVzVuSUdScGMzUmhibU5sSUdaMWJtTjBhVzl1SUhOd1pXTnBabWxsWkM1Y2JpQWdJQ29nUUhKbGRIVnliaUI3UkdsemRHRnVZMlZOWlhSeWFXTjlJRU5oYkd4aVlXTnJJRzltSUhSb1pTQnRaV0Z6ZFhKbElHTm9iM05sYmk1Y2JpQWdJQ29nUUcxbGJXSmxjbTltSUUxbFlYTjFjbVZ5WEc0Z0lDQXFMMXh1SUNCd2RXSnNhV01nWjJWMFRXVmhjM1Z5WlNncE9pQkVhWE4wWVc1alpVMWxkSEpwWXlCN1hHNGdJQ0FnWTI5dWMzUWdaR2xqZERvZ2UxdHJaWGs2SUhOMGNtbHVaMTA2SUh0YmEyVjVNam9nYzNSeWFXNW5YVG9nUkdsemRHRnVZMlZOWlhSeWFXTjlmU0E5SUVGMllXbHNZV0pzWlUxbGRISnBZM003WEc0Z0lDQWdjbVYwZFhKdUlHUnBZM1JiZEdocGN5NWtZWFJoVkhsd1pWMWJkR2hwY3k1dFpYUm9iMlJkTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxkSFZ5Ym5NZ1kzVnpkRzl0SUhOMGNtbHVaeUJrYVhOMFlXNWpaU0JpZVNCMGFHVWdaMmwyWlc0Z1pHRjBZU0IwZVhCbExseHVJQ0FnS2lCQWNHRnlZVzBnZTBGMllXbHNZV0pzWlVSaGRHRlVlWEJsYzMwZ1pHRjBZVlI1Y0dVZ1RXVjBjbWxqSjNNZ1pHRjBZU0IwZVhCbFhHNGdJQ0FxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMXRkZlNCTlpYUnlhV01nYm1GdFpYTWdkMmhwWTJnZ1pYaHdaV04wY3lCMGFHVWdaMmwyWlc0Z1pHRjBZU0IwZVhCbFhHNGdJQ0FxSUVCdFpXMWlaWEp2WmlCTlpXRnpkWEpsY2x4dUlDQWdLaTljYmlBZ2NIVmliR2xqSUhOMFlYUnBZeUJuWlhSTlpYUnlhV05DZVVSaGRHRlVlWEJsS0dSaGRHRlVlWEJsT2lCQmRtRnBiR0ZpYkdWRVlYUmhWSGx3WlhNcE9pQnpkSEpwYm1kYlhTQjdYRzRnSUNBZ2NtVjBkWEp1SUU5aWFtVmpkQzVyWlhsektFRjJZV2xzWVdKc1pVMWxkSEpwWTNOYlpHRjBZVlI1Y0dWZEtUdGNiaUFnZlZ4dVhHNGdJQzhxS2lCU1pYUjFjbTV6SUcxbGRISnBZeUJ1WVcxbGN5QmhkbUZwYkdGaWJHVXVYRzRnSUNBcUlFQnRaVzFpWlhKdlppQk5aV0Z6ZFhKbGNseHVJQ0FxTDF4dUlDQnpkR0YwYVdNZ1oyVjBJR0YyWVdsc1lXSnNaVTFsWVhOMWNtVnpLQ2s2SUhOMGNtbHVaMXRkSUh0Y2JpQWdJQ0J5WlhSMWNtNGdUMkpxWldOMExtdGxlWE1vUVhaaGFXeGhZbXhsVFdWMGNtbGpjeWs3WEc0Z0lIMWNibjFjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVFNORSA9IHZvaWQgMDtcbnZhciB0c25lXzEgPSByZXF1aXJlKFwiLi90c25lXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVFNORVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHNuZV8xLlRTTkU7IH0gfSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVFNORSA9IHZvaWQgMDtcbmNsYXNzIFRTTkUge1xuICAgIGNvbnN0cnVjdG9yKG9wdCkge1xuICAgICAgICAvLyByZXR1cm4gMCBtZWFuIHVuaXQgc3RhbmRhcmQgZGV2aWF0aW9uIHJhbmRvbSBudW1iZXJcbiAgICAgICAgdGhpcy5yZXR1cm5WID0gZmFsc2U7XG4gICAgICAgIHRoaXMudlZhbHVlID0gMC4wO1xuICAgICAgICB0aGlzLml0ZXIgPSAwO1xuICAgICAgICBvcHQgPSBvcHQgfHwge307XG4gICAgICAgIHRoaXMucGVycGxleGl0eSA9IHRoaXMuZ2V0b3B0KG9wdCwgJ3BlcnBsZXhpdHknLCAzMCk7IC8vIGVmZmVjdGl2ZSBudW1iZXIgb2YgbmVhcmVzdCBuZWlnaGJvcnNcbiAgICAgICAgdGhpcy5kaW0gPSB0aGlzLmdldG9wdChvcHQsICdkaW0nLCAyKTsgLy8gYnkgZGVmYXVsdCAyLUQgdFNORVxuICAgICAgICB0aGlzLmVwc2lsb24gPSB0aGlzLmdldG9wdChvcHQsICdlcHNpbG9uJywgMTApOyAvLyBsZWFybmluZyByYXRlXG4gICAgfVxuICAgIGFzc2VydChjb25kaXRpb24sIG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgICAgICAgIHRocm93IG1lc3NhZ2UgfHwgJ0Fzc2VydGlvbiBmYWlsZWQnO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHN5bnRheCBzdWdhclxuICAgIGdldG9wdChvcHQsIGZpZWxkLCBkZWZhdWx0dmFsKSB7XG4gICAgICAgIGlmIChvcHQuaGFzT3duUHJvcGVydHkoZmllbGQpKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0W2ZpZWxkXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0dmFsO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdhdXNzUmFuZG9tKCkge1xuICAgICAgICBpZiAodGhpcy5yZXR1cm5WKSB7XG4gICAgICAgICAgICB0aGlzLnJldHVyblYgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1ID0gMiAqIE1hdGgucmFuZG9tKCkgLSAxO1xuICAgICAgICBjb25zdCB2ID0gMiAqIE1hdGgucmFuZG9tKCkgLSAxO1xuICAgICAgICBjb25zdCByID0gdSAqIHUgKyB2ICogdjtcbiAgICAgICAgaWYgKHIgPT09IDAgfHwgciA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdhdXNzUmFuZG9tKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYyA9IE1hdGguc3FydCgtMiAqIE1hdGgubG9nKHIpIC8gcik7XG4gICAgICAgIHRoaXMudlZhbHVlID0gdiAqIGM7IC8vIGNhY2hlIHRoaXMgZm9yIG5leHQgZnVuY3Rpb24gY2FsbCBmb3IgZWZmaWNpZW5jeVxuICAgICAgICB0aGlzLnJldHVyblYgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdSAqIGM7XG4gICAgfVxuICAgIC8vIHJldHVybiByYW5kb20gbm9ybWFsIG51bWJlclxuICAgIHJhbmRuKG11LCBzdGQpIHsgcmV0dXJuIG11ICsgdGhpcy5nYXVzc1JhbmRvbSgpICogc3RkOyB9XG4gICAgLy8gdXRpbGl0aXR5IHRoYXQgY3JlYXRlcyBjb250aWd1b3VzIHZlY3RvciBvZiB6ZXJvcyBvZiBzaXplIG5cbiAgICB6ZXJvcyhuKSB7XG4gICAgICAgIGlmICh0eXBlb2YgKG4pID09PSAndW5kZWZpbmVkJyB8fCBpc05hTihuKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAvLyBsYWNraW5nIGJyb3dzZXIgc3VwcG9ydFxuICAgICAgICAgICAgY29uc3QgYXJyID0gbmV3IEFycmF5KG4pO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBhcnJbaV0gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFycjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQ2NEFycmF5KG4pOyAvLyB0eXBlZCBhcnJheXMgYXJlIGZhc3RlclxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHV0aWxpdHkgdGhhdCByZXR1cm5zIDJkIGFycmF5IGZpbGxlZCB3aXRoIHJhbmRvbSBudW1iZXJzXG4gICAgLy8gb3Igd2l0aCB2YWx1ZSBzLCBpZiBwcm92aWRlZFxuICAgIHJhbmRuMmQobiwgZCwgcykge1xuICAgICAgICBjb25zdCB1c2VzID0gdHlwZW9mIHMgIT09ICd1bmRlZmluZWQnO1xuICAgICAgICBjb25zdCB4ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB4aGVyZSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodXNlcykge1xuICAgICAgICAgICAgICAgICAgICB4aGVyZS5wdXNoKHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgeGhlcmUucHVzaCh0aGlzLnJhbmRuKDAuMCwgMWUtNCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHgucHVzaCh4aGVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIC8vIGNvbXB1dGUgTDIgZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjdG9yc1xuICAgIEwyKHgxLCB4Mikge1xuICAgICAgICBjb25zdCBEID0geDEubGVuZ3RoO1xuICAgICAgICBsZXQgZCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgRDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB4MWkgPSB4MVtpXTtcbiAgICAgICAgICAgIGNvbnN0IHgyaSA9IHgyW2ldO1xuICAgICAgICAgICAgZCArPSAoeDFpIC0geDJpKSAqICh4MWkgLSB4MmkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkO1xuICAgIH1cbiAgICAvLyBjb21wdXRlIHBhaXJ3aXNlIGRpc3RhbmNlIGluIGFsbCB2ZWN0b3JzIGluIFhcbiAgICB4dG9kKFgpIHtcbiAgICAgICAgY29uc3QgTiA9IFgubGVuZ3RoO1xuICAgICAgICBjb25zdCBkaXN0ID0gdGhpcy56ZXJvcyhOICogTik7IC8vIGFsbG9jYXRlIGNvbnRpZ3VvdXMgYXJyYXlcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IE47IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSB0aGlzLkwyKFhbaV0sIFhbal0pO1xuICAgICAgICAgICAgICAgIGRpc3RbaSAqIE4gKyBqXSA9IGQ7XG4gICAgICAgICAgICAgICAgZGlzdFtqICogTiArIGldID0gZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlzdDtcbiAgICB9XG4gICAgLy8gY29tcHV0ZSAocF97aXxqfSArIHBfe2p8aX0pLygybilcbiAgICBkMnAoRCwgcGVycGxleGl0eSwgdG9sKSB7XG4gICAgICAgIGNvbnN0IG5mID0gTWF0aC5zcXJ0KEQubGVuZ3RoKTsgLy8gdGhpcyBiZXR0ZXIgYmUgYW4gaW50ZWdlclxuICAgICAgICBjb25zdCBuID0gTWF0aC5mbG9vcihuZik7XG4gICAgICAgIHRoaXMuYXNzZXJ0KG4gPT09IG5mLCAnRCBzaG91bGQgaGF2ZSBzcXVhcmUgbnVtYmVyIG9mIGVsZW1lbnRzLicpO1xuICAgICAgICBjb25zdCBoVGFyZ2V0ID0gTWF0aC5sb2cocGVycGxleGl0eSk7IC8vIHRhcmdldCBlbnRyb3B5IG9mIGRpc3RyaWJ1dGlvblxuICAgICAgICBjb25zdCBQID0gdGhpcy56ZXJvcyhuICogbik7IC8vIHRlbXBvcmFyeSBwcm9iYWJpbGl0eSBtYXRyaXhcbiAgICAgICAgY29uc3QgcHJvdyA9IHRoaXMuemVyb3Mobik7IC8vIGEgdGVtcG9yYXJ5IHN0b3JhZ2UgY29tcGFydG1lbnRcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBiZXRhbWluID0gLUluZmluaXR5O1xuICAgICAgICAgICAgbGV0IGJldGFtYXggPSBJbmZpbml0eTtcbiAgICAgICAgICAgIGxldCBiZXRhID0gMTsgLy8gaW5pdGlhbCB2YWx1ZSBvZiBwcmVjaXNpb25cbiAgICAgICAgICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBtYXh0cmllcyA9IDUwO1xuICAgICAgICAgICAgLy8gcGVyZm9ybSBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgYSBzdWl0YWJsZSBwcmVjaXNpb24gYmV0YVxuICAgICAgICAgICAgLy8gc28gdGhhdCB0aGUgZW50cm9weSBvZiB0aGUgZGlzdHJpYnV0aW9uIGlzIGFwcHJvcHJpYXRlXG4gICAgICAgICAgICBsZXQgbnVtID0gMDtcbiAgICAgICAgICAgIHdoaWxlICghZG9uZSkge1xuICAgICAgICAgICAgICAgIC8vZGVidWdnZXI7XG4gICAgICAgICAgICAgICAgLy8gY29tcHV0ZSBlbnRyb3B5IGFuZCBrZXJuZWwgcm93IHdpdGggYmV0YSBwcmVjaXNpb25cbiAgICAgICAgICAgICAgICBsZXQgcHN1bSA9IDAuMDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGogPSBNYXRoLmV4cCgtRFtpICogbiArIGpdICogYmV0YSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSBqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwaiA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH0gLy8gd2UgZG9udCBjYXJlIGFib3V0IGRpYWdvbmFsc1xuICAgICAgICAgICAgICAgICAgICBwcm93W2pdID0gcGo7XG4gICAgICAgICAgICAgICAgICAgIHBzdW0gKz0gcGo7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSBwIGFuZCBjb21wdXRlIGVudHJvcHlcbiAgICAgICAgICAgICAgICBsZXQgbkhlcmUgPSAwLjA7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBqO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHN1bSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGogPSAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGogPSBwcm93W2pdIC8gcHN1bTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwcm93W2pdID0gcGo7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwaiA+IDFlLTcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5IZXJlIC09IHBqICogTWF0aC5sb2cocGopO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGFkanVzdCBiZXRhIGJhc2VkIG9uIHJlc3VsdFxuICAgICAgICAgICAgICAgIGlmIChuSGVyZSA+IGhUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZW50cm9weSB3YXMgdG9vIGhpZ2ggKGRpc3RyaWJ1dGlvbiB0b28gZGlmZnVzZSlcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gd2UgbmVlZCB0byBpbmNyZWFzZSB0aGUgcHJlY2lzaW9uIGZvciBtb3JlIHBlYWt5IGRpc3RyaWJ1dGlvblxuICAgICAgICAgICAgICAgICAgICBiZXRhbWluID0gYmV0YTsgLy8gbW92ZSB1cCB0aGUgYm91bmRzXG4gICAgICAgICAgICAgICAgICAgIGlmIChiZXRhbWF4ID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmV0YSA9IGJldGEgKiAyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmV0YSA9IChiZXRhICsgYmV0YW1heCkgLyAyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJzZSBjYXNlLiBtYWtlIGRpc3RydWJ0aW9uIGxlc3MgcGVha3lcbiAgICAgICAgICAgICAgICAgICAgYmV0YW1heCA9IGJldGE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChiZXRhbWluID09PSAtSW5maW5pdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJldGEgPSBiZXRhIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJldGEgPSAoYmV0YSArIGJldGFtaW4pIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBzdG9wcGluZyBjb25kaXRpb25zOiB0b28gbWFueSB0cmllcyBvciBnb3QgYSBnb29kIHByZWNpc2lvblxuICAgICAgICAgICAgICAgIG51bSsrO1xuICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhuSGVyZSAtIGhUYXJnZXQpIDwgdG9sKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobnVtID49IG1heHRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdkYXRhIHBvaW50ICcgKyBpICsgJyBnZXRzIHByZWNpc2lvbiAnICsgYmV0YSArICcgYWZ0ZXIgJyArIG51bSArICcgYmluYXJ5IHNlYXJjaCBzdGVwcy4nKTtcbiAgICAgICAgICAgIC8vIGNvcHkgb3ZlciB0aGUgZmluYWwgcHJvdyB0byBQIGF0IHJvdyBpXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICAgICAgICAgIFBbaSAqIG4gKyBqXSA9IHByb3dbal07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gLy8gZW5kIGxvb3Agb3ZlciBleGFtcGxlcyBpXG4gICAgICAgIC8vIHN5bW1ldHJpemUgUCBhbmQgbm9ybWFsaXplIGl0IHRvIHN1bSB0byAxIG92ZXIgYWxsIGlqXG4gICAgICAgIGNvbnN0IHBPdXQgPSB0aGlzLnplcm9zKG4gKiBuKTtcbiAgICAgICAgY29uc3QgTjIgPSBuICogMjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgICAgICAgcE91dFtpICogbiArIGpdID0gTWF0aC5tYXgoKFBbaSAqIG4gKyBqXSArIFBbaiAqIG4gKyBpXSkgLyBOMiwgMWUtMTAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcE91dDtcbiAgICB9XG4gICAgLy8gaGVscGVyIGZ1bmN0aW9uXG4gICAgc2lnbih4KSB7IHJldHVybiB4ID4gMCA/IDEgOiB4IDwgMCA/IC0xIDogMDsgfVxuICAgIC8vIHRoaXMgZnVuY3Rpb24gdGFrZXMgYSBzZXQgb2YgaGlnaC1kaW1lbnNpb25hbCBwb2ludHNcbiAgICAvLyBhbmQgY3JlYXRlcyBtYXRyaXggUCBmcm9tIHRoZW0gdXNpbmcgZ2F1c3NpYW4ga2VybmVsXG4gICAgaW5pdERhdGFSYXcoWCkge1xuICAgICAgICBjb25zdCBOID0gWC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IEQgPSBYWzBdLmxlbmd0aDtcbiAgICAgICAgdGhpcy5hc3NlcnQoTiA+IDAsICcgWCBpcyBlbXB0eT8gWW91IG11c3QgaGF2ZSBzb21lIGRhdGEhJyk7XG4gICAgICAgIHRoaXMuYXNzZXJ0KEQgPiAwLCAnIFhbMF0gaXMgZW1wdHk/IFdoZXJlIGlzIHRoZSBkYXRhPycpO1xuICAgICAgICBjb25zdCBkaXN0cyA9IHRoaXMueHRvZChYKTsgLy8gY29udmVydCBYIHRvIGRpc3RhbmNlcyB1c2luZyBnYXVzc2lhbiBrZXJuZWxcbiAgICAgICAgdGhpcy5QID0gdGhpcy5kMnAoZGlzdHMsIHRoaXMucGVycGxleGl0eSwgMWUtNCk7IC8vIGF0dGFjaCB0byBvYmplY3RcbiAgICAgICAgdGhpcy5OID0gTjsgLy8gYmFjayB1cCB0aGUgc2l6ZSBvZiB0aGUgZGF0YXNldFxuICAgICAgICB0aGlzLmluaXRTb2x1dGlvbigpOyAvLyByZWZyZXNoIHRoaXNcbiAgICB9XG4gICAgLy8gdGhpcyBmdW5jdGlvbiB0YWtlcyBhIGdpdmVuIGRpc3RhbmNlIG1hdHJpeCBhbmQgY3JlYXRlc1xuICAgIC8vIG1hdHJpeCBQIGZyb20gdGhlbS5cbiAgICAvLyBEIGlzIGFzc3VtZWQgdG8gYmUgcHJvdmlkZWQgYXMgYSBsaXN0IG9mIGxpc3RzLCBhbmQgc2hvdWxkIGJlIHN5bW1ldHJpY1xuICAgIGluaXREYXRhRGlzdChEKSB7XG4gICAgICAgIGNvbnN0IE4gPSBELmxlbmd0aDtcbiAgICAgICAgdGhpcy5hc3NlcnQoTiA+IDAsICcgWCBpcyBlbXB0eT8gWW91IG11c3QgaGF2ZSBzb21lIGRhdGEhJyk7XG4gICAgICAgIC8vIGNvbnZlcnQgRCB0byBhIChmYXN0KSB0eXBlZCBhcnJheSB2ZXJzaW9uXG4gICAgICAgIGNvbnN0IGRpc3RzID0gdGhpcy56ZXJvcyhOICogTik7IC8vIGFsbG9jYXRlIGNvbnRpZ3VvdXMgYXJyYXlcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IE47IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBEW2ldW2pdO1xuICAgICAgICAgICAgICAgIGRpc3RzW2kgKiBOICsgal0gPSBkO1xuICAgICAgICAgICAgICAgIGRpc3RzW2ogKiBOICsgaV0gPSBkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuUCA9IHRoaXMuZDJwKGRpc3RzLCB0aGlzLnBlcnBsZXhpdHksIDFlLTQpO1xuICAgICAgICB0aGlzLk4gPSBOO1xuICAgICAgICB0aGlzLmluaXRTb2x1dGlvbigpOyAvLyByZWZyZXNoIHRoaXNcbiAgICB9XG4gICAgLy8gKHJlKWluaXRpYWxpemVzIHRoZSBzb2x1dGlvbiB0byByYW5kb21cbiAgICBpbml0U29sdXRpb24oKSB7XG4gICAgICAgIC8vIGdlbmVyYXRlIHJhbmRvbSBzb2x1dGlvbiB0byB0LVNORVxuICAgICAgICB0aGlzLlkgPSB0aGlzLnJhbmRuMmQodGhpcy5OLCB0aGlzLmRpbSk7IC8vIHRoZSBzb2x1dGlvblxuICAgICAgICB0aGlzLmdhaW5zID0gdGhpcy5yYW5kbjJkKHRoaXMuTiwgdGhpcy5kaW0sIDEuMCk7IC8vIHN0ZXAgZ2FpbnMgdG8gYWNjZWxlcmF0ZSBwcm9ncmVzcyBpbiB1bmNoYW5naW5nIGRpcmVjdGlvbnNcbiAgICAgICAgdGhpcy55c3RlcCA9IHRoaXMucmFuZG4yZCh0aGlzLk4sIHRoaXMuZGltLCAwLjApOyAvLyBtb21lbnR1bSBhY2N1bXVsYXRvclxuICAgICAgICB0aGlzLml0ZXIgPSAwO1xuICAgIH1cbiAgICAvLyByZXR1cm4gcG9pbnRlciB0byBjdXJyZW50IHNvbHV0aW9uXG4gICAgZ2V0U29sdXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLlk7XG4gICAgfVxuICAgIC8vIHBlcmZvcm0gYSBzaW5nbGUgc3RlcCBvZiBvcHRpbWl6YXRpb24gdG8gaW1wcm92ZSB0aGUgZW1iZWRkaW5nXG4gICAgc3RlcCgpIHtcbiAgICAgICAgdGhpcy5pdGVyICs9IDE7XG4gICAgICAgIGNvbnN0IE4gPSB0aGlzLk47XG4gICAgICAgIGNvbnN0IGNnID0gdGhpcy5jb3N0R3JhZCh0aGlzLlkpOyAvLyBldmFsdWF0ZSBncmFkaWVudFxuICAgICAgICBjb25zdCBjb3N0ID0gY2cuY29zdDtcbiAgICAgICAgY29uc3QgZ3JhZCA9IGNnLmdyYWQ7XG4gICAgICAgIC8vIHBlcmZvcm0gZ3JhZGllbnQgc3RlcFxuICAgICAgICBjb25zdCB5bWVhbiA9IHRoaXMuemVyb3ModGhpcy5kaW0pO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgZCA9IDA7IGQgPCB0aGlzLmRpbTsgZCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2lkID0gZ3JhZFtpXVtkXTtcbiAgICAgICAgICAgICAgICBjb25zdCBzaWQgPSB0aGlzLnlzdGVwW2ldW2RdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdhaW5pZCA9IHRoaXMuZ2FpbnNbaV1bZF07XG4gICAgICAgICAgICAgICAgLy8gY29tcHV0ZSBnYWluIHVwZGF0ZVxuICAgICAgICAgICAgICAgIGxldCBuZXdnYWluID0gdGhpcy5zaWduKGdpZCkgPT09IHRoaXMuc2lnbihzaWQpID8gZ2FpbmlkICogMC44IDogZ2FpbmlkICsgMC4yO1xuICAgICAgICAgICAgICAgIGlmIChuZXdnYWluIDwgMC4wMSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdnYWluID0gMC4wMTtcbiAgICAgICAgICAgICAgICB9IC8vIGNsYW1wXG4gICAgICAgICAgICAgICAgdGhpcy5nYWluc1tpXVtkXSA9IG5ld2dhaW47IC8vIHN0b3JlIGZvciBuZXh0IHR1cm5cbiAgICAgICAgICAgICAgICAvLyBjb21wdXRlIG1vbWVudHVtIHN0ZXAgZGlyZWN0aW9uXG4gICAgICAgICAgICAgICAgY29uc3QgbW9tdmFsID0gdGhpcy5pdGVyIDwgMjUwID8gMC41IDogMC44O1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld3NpZCA9IG1vbXZhbCAqIHNpZCAtIHRoaXMuZXBzaWxvbiAqIG5ld2dhaW4gKiBncmFkW2ldW2RdO1xuICAgICAgICAgICAgICAgIHRoaXMueXN0ZXBbaV1bZF0gPSBuZXdzaWQ7IC8vIHJlbWVtYmVyIHRoZSBzdGVwIHdlIHRvb2tcbiAgICAgICAgICAgICAgICAvLyBzdGVwIVxuICAgICAgICAgICAgICAgIHRoaXMuWVtpXVtkXSArPSBuZXdzaWQ7XG4gICAgICAgICAgICAgICAgeW1lYW5bZF0gKz0gdGhpcy5ZW2ldW2RdOyAvLyBhY2N1bXVsYXRlIG1lYW4gc28gdGhhdCB3ZSBjYW4gY2VudGVyIGxhdGVyXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVwcm9qZWN0IFkgdG8gYmUgemVybyBtZWFuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBkID0gMDsgZCA8IHRoaXMuZGltOyBkKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLllbaV1bZF0gLT0geW1lYW5bZF0gLyBOO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vaWYodGhpcy5pdGVyJTEwMD09PTApIGNvbnNvbGUubG9nKCdpdGVyICcgKyB0aGlzLml0ZXIgKyAnLCBjb3N0OiAnICsgY29zdCk7XG4gICAgICAgIHJldHVybiBjb3N0OyAvLyByZXR1cm4gY3VycmVudCBjb3N0XG4gICAgfVxuICAgIC8vIGZvciBkZWJ1Z2dpbmc6IGdyYWRpZW50IGNoZWNrXG4gICAgZGVidWdHcmFkKCkge1xuICAgICAgICBjb25zdCBOID0gdGhpcy5OO1xuICAgICAgICBjb25zdCBjZyA9IHRoaXMuY29zdEdyYWQodGhpcy5ZKTsgLy8gZXZhbHVhdGUgZ3JhZGllbnRcbiAgICAgICAgY29uc3QgY29zdCA9IGNnLmNvc3Q7XG4gICAgICAgIGNvbnN0IGdyYWQgPSBjZy5ncmFkO1xuICAgICAgICBjb25zdCBlID0gMWUtNTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGQgPSAwOyBkIDwgdGhpcy5kaW07IGQrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHlvbGQgPSB0aGlzLllbaV1bZF07XG4gICAgICAgICAgICAgICAgdGhpcy5ZW2ldW2RdID0geW9sZCArIGU7XG4gICAgICAgICAgICAgICAgY29uc3QgY2cwID0gdGhpcy5jb3N0R3JhZCh0aGlzLlkpO1xuICAgICAgICAgICAgICAgIHRoaXMuWVtpXVtkXSA9IHlvbGQgLSBlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNnMSA9IHRoaXMuY29zdEdyYWQodGhpcy5ZKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhbmFseXRpYyA9IGdyYWRbaV1bZF07XG4gICAgICAgICAgICAgICAgY29uc3QgbnVtZXJpY2FsID0gKGNnMC5jb3N0IC0gY2cxLmNvc3QpIC8gKDIgKiBlKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhpICsgJywnICsgZCArICc6IGdyYWRjaGVjayBhbmFseXRpYzogJyArIGFuYWx5dGljICsgJyB2cy4gbnVtZXJpY2FsOiAnICsgbnVtZXJpY2FsKTtcbiAgICAgICAgICAgICAgICB0aGlzLllbaV1bZF0gPSB5b2xkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHJldHVybiBjb3N0IGFuZCBncmFkaWVudCwgZ2l2ZW4gYW4gYXJyYW5nZW1lbnRcbiAgICBjb3N0R3JhZChZKSB7XG4gICAgICAgIGNvbnN0IE4gPSB0aGlzLk47XG4gICAgICAgIGNvbnN0IGRpbSA9IHRoaXMuZGltOyAvLyBkaW0gb2Ygb3V0cHV0IHNwYWNlXG4gICAgICAgIGNvbnN0IFAgPSB0aGlzLlA7XG4gICAgICAgIGNvbnN0IHBtdWwgPSB0aGlzLml0ZXIgPCAxMDAgPyA0IDogMTsgLy8gdHJpY2sgdGhhdCBoZWxwcyB3aXRoIGxvY2FsIG9wdGltYVxuICAgICAgICAvLyBjb21wdXRlIGN1cnJlbnQgUSBkaXN0cmlidXRpb24sIHVubm9ybWFsaXplZCBmaXJzdFxuICAgICAgICBjb25zdCBxdUFyciA9IHRoaXMuemVyb3MoTiAqIE4pO1xuICAgICAgICBsZXQgcXN1bSA9IDAuMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IE47IGorKykge1xuICAgICAgICAgICAgICAgIGxldCBkc3VtID0gMC4wO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGQgPSAwOyBkIDwgZGltOyBkKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGhlcmUgPSBZW2ldW2RdIC0gWVtqXVtkXTtcbiAgICAgICAgICAgICAgICAgICAgZHN1bSArPSBkaGVyZSAqIGRoZXJlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBxdSA9IDEuMCAvICgxLjAgKyBkc3VtKTsgLy8gU3R1ZGVudCB0LWRpc3RyaWJ1dGlvblxuICAgICAgICAgICAgICAgIHF1QXJyW2kgKiBOICsgal0gPSBxdTtcbiAgICAgICAgICAgICAgICBxdUFycltqICogTiArIGldID0gcXU7XG4gICAgICAgICAgICAgICAgcXN1bSArPSAyICogcXU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm9ybWFsaXplIFEgZGlzdHJpYnV0aW9uIHRvIHN1bSB0byAxXG4gICAgICAgIGNvbnN0IE5OID0gTiAqIE47XG4gICAgICAgIGNvbnN0IFEgPSB0aGlzLnplcm9zKE5OKTtcbiAgICAgICAgZm9yIChsZXQgcSA9IDA7IHEgPCBOTjsgcSsrKSB7XG4gICAgICAgICAgICBRW3FdID0gTWF0aC5tYXgocXVBcnJbcV0gLyBxc3VtLCAxZS0xMDApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb3N0ID0gMC4wO1xuICAgICAgICBjb25zdCBncmFkID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBnc3VtID0gbmV3IEFycmF5KGRpbSk7IC8vIGluaXQgZ3JhZCBmb3IgcG9pbnQgaVxuICAgICAgICAgICAgZm9yIChsZXQgZCA9IDA7IGQgPCBkaW07IGQrKykge1xuICAgICAgICAgICAgICAgIGdzdW1bZF0gPSAwLjA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IE47IGorKykge1xuICAgICAgICAgICAgICAgIGNvc3QgKz0gLVBbaSAqIE4gKyBqXSAqIE1hdGgubG9nKFFbaSAqIE4gKyBqXSk7IC8vIGFjY3VtdWxhdGUgY29zdCAodGhlIG5vbi1jb25zdGFudCBwb3J0aW9uIGF0IGxlYXN0Li4uKVxuICAgICAgICAgICAgICAgIGNvbnN0IHByZW11bHQgPSA0ICogKHBtdWwgKiBQW2kgKiBOICsgal0gLSBRW2kgKiBOICsgal0pICogcXVBcnJbaSAqIE4gKyBqXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBkID0gMDsgZCA8IGRpbTsgZCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGdzdW1bZF0gKz0gcHJlbXVsdCAqIChZW2ldW2RdIC0gWVtqXVtkXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JhZC5wdXNoKGdzdW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGNvc3QsIGdyYWQgfTtcbiAgICB9XG59XG5leHBvcnRzLlRTTkUgPSBUU05FO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBwZXEgPSBuZXcgVWludDMyQXJyYXkoMHgxMDAwMCk7XG5jb25zdCBteWVyc18zMiA9IChhLCBiKSA9PiB7XG4gIGNvbnN0IG4gPSBhLmxlbmd0aDtcbiAgY29uc3QgbSA9IGIubGVuZ3RoO1xuICBjb25zdCBsc3QgPSAxIDw8IChuIC0gMSk7XG4gIGxldCBwdiA9IC0xO1xuICBsZXQgbXYgPSAwO1xuICBsZXQgc2MgPSBuO1xuICBsZXQgaSA9IG47XG4gIHdoaWxlIChpLS0pIHtcbiAgICBwZXFbYS5jaGFyQ29kZUF0KGkpXSB8PSAxIDw8IGk7XG4gIH1cbiAgZm9yIChpID0gMDsgaSA8IG07IGkrKykge1xuICAgIGxldCBlcSA9IHBlcVtiLmNoYXJDb2RlQXQoaSldO1xuICAgIGNvbnN0IHh2ID0gZXEgfCBtdjtcbiAgICBlcSB8PSAoKGVxICYgcHYpICsgcHYpIF4gcHY7XG4gICAgbXYgfD0gfihlcSB8IHB2KTtcbiAgICBwdiAmPSBlcTtcbiAgICBpZiAobXYgJiBsc3QpIHtcbiAgICAgIHNjKys7XG4gICAgfVxuICAgIGlmIChwdiAmIGxzdCkge1xuICAgICAgc2MtLTtcbiAgICB9XG4gICAgbXYgPSAobXYgPDwgMSkgfCAxO1xuICAgIHB2ID0gKHB2IDw8IDEpIHwgfih4diB8IG12KTtcbiAgICBtdiAmPSB4djtcbiAgfVxuICBpID0gbjtcbiAgd2hpbGUgKGktLSkge1xuICAgIHBlcVthLmNoYXJDb2RlQXQoaSldID0gMDtcbiAgfVxuICByZXR1cm4gc2M7XG59O1xuXG5jb25zdCBteWVyc194ID0gKGEsIGIpID0+IHtcbiAgY29uc3QgbiA9IGEubGVuZ3RoO1xuICBjb25zdCBtID0gYi5sZW5ndGg7XG4gIGNvbnN0IG1oYyA9IFtdO1xuICBjb25zdCBwaGMgPSBbXTtcbiAgY29uc3QgaHNpemUgPSBNYXRoLmNlaWwobiAvIDMyKTtcbiAgY29uc3QgdnNpemUgPSBNYXRoLmNlaWwobSAvIDMyKTtcbiAgbGV0IHNjb3JlID0gbTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBoc2l6ZTsgaSsrKSB7XG4gICAgcGhjW2ldID0gLTE7XG4gICAgbWhjW2ldID0gMDtcbiAgfVxuICBsZXQgaiA9IDA7XG4gIGZvciAoOyBqIDwgdnNpemUgLSAxOyBqKyspIHtcbiAgICBsZXQgbXYgPSAwO1xuICAgIGxldCBwdiA9IC0xO1xuICAgIGNvbnN0IHN0YXJ0ID0gaiAqIDMyO1xuICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKDMyLCBtKSArIHN0YXJ0O1xuICAgIGZvciAobGV0IGsgPSBzdGFydDsgayA8IGVuZDsgaysrKSB7XG4gICAgICBwZXFbYi5jaGFyQ29kZUF0KGspXSB8PSAxIDw8IGs7XG4gICAgfVxuICAgIHNjb3JlID0gbTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgY29uc3QgZXEgPSBwZXFbYS5jaGFyQ29kZUF0KGkpXTtcbiAgICAgIGNvbnN0IHBiID0gKHBoY1soaSAvIDMyKSB8IDBdID4+PiBpKSAmIDE7XG4gICAgICBjb25zdCBtYiA9IChtaGNbKGkgLyAzMikgfCAwXSA+Pj4gaSkgJiAxO1xuICAgICAgY29uc3QgeHYgPSBlcSB8IG12O1xuICAgICAgY29uc3QgeGggPSAoKCgoZXEgfCBtYikgJiBwdikgKyBwdikgXiBwdikgfCBlcSB8IG1iO1xuICAgICAgbGV0IHBoID0gbXYgfCB+KHhoIHwgcHYpO1xuICAgICAgbGV0IG1oID0gcHYgJiB4aDtcbiAgICAgIGlmICgocGggPj4+IDMxKSBeIHBiKSB7XG4gICAgICAgIHBoY1soaSAvIDMyKSB8IDBdIF49IDEgPDwgaTtcbiAgICAgIH1cbiAgICAgIGlmICgobWggPj4+IDMxKSBeIG1iKSB7XG4gICAgICAgIG1oY1soaSAvIDMyKSB8IDBdIF49IDEgPDwgaTtcbiAgICAgIH1cbiAgICAgIHBoID0gKHBoIDw8IDEpIHwgcGI7XG4gICAgICBtaCA9IChtaCA8PCAxKSB8IG1iO1xuICAgICAgcHYgPSBtaCB8IH4oeHYgfCBwaCk7XG4gICAgICBtdiA9IHBoICYgeHY7XG4gICAgfVxuICAgIGZvciAobGV0IGsgPSBzdGFydDsgayA8IGVuZDsgaysrKSB7XG4gICAgICBwZXFbYi5jaGFyQ29kZUF0KGspXSA9IDA7XG4gICAgfVxuICB9XG4gIGxldCBtdiA9IDA7XG4gIGxldCBwdiA9IC0xO1xuICBjb25zdCBzdGFydCA9IGogKiAzMjtcbiAgY29uc3QgZW5kID0gTWF0aC5taW4oMzIsIG0gLSBzdGFydCkgKyBzdGFydDtcbiAgZm9yIChsZXQgayA9IHN0YXJ0OyBrIDwgZW5kOyBrKyspIHtcbiAgICBwZXFbYi5jaGFyQ29kZUF0KGspXSB8PSAxIDw8IGs7XG4gIH1cbiAgc2NvcmUgPSBtO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgIGNvbnN0IGVxID0gcGVxW2EuY2hhckNvZGVBdChpKV07XG4gICAgY29uc3QgcGIgPSAocGhjWyhpIC8gMzIpIHwgMF0gPj4+IGkpICYgMTtcbiAgICBjb25zdCBtYiA9IChtaGNbKGkgLyAzMikgfCAwXSA+Pj4gaSkgJiAxO1xuICAgIGNvbnN0IHh2ID0gZXEgfCBtdjtcbiAgICBjb25zdCB4aCA9ICgoKChlcSB8IG1iKSAmIHB2KSArIHB2KSBeIHB2KSB8IGVxIHwgbWI7XG4gICAgbGV0IHBoID0gbXYgfCB+KHhoIHwgcHYpO1xuICAgIGxldCBtaCA9IHB2ICYgeGg7XG4gICAgc2NvcmUgKz0gKHBoID4+PiAobSAtIDEpKSAmIDE7XG4gICAgc2NvcmUgLT0gKG1oID4+PiAobSAtIDEpKSAmIDE7XG4gICAgaWYgKChwaCA+Pj4gMzEpIF4gcGIpIHtcbiAgICAgIHBoY1soaSAvIDMyKSB8IDBdIF49IDEgPDwgaTtcbiAgICB9XG4gICAgaWYgKChtaCA+Pj4gMzEpIF4gbWIpIHtcbiAgICAgIG1oY1soaSAvIDMyKSB8IDBdIF49IDEgPDwgaTtcbiAgICB9XG4gICAgcGggPSAocGggPDwgMSkgfCBwYjtcbiAgICBtaCA9IChtaCA8PCAxKSB8IG1iO1xuICAgIHB2ID0gbWggfCB+KHh2IHwgcGgpO1xuICAgIG12ID0gcGggJiB4djtcbiAgfVxuICBmb3IgKGxldCBrID0gc3RhcnQ7IGsgPCBlbmQ7IGsrKykge1xuICAgIHBlcVtiLmNoYXJDb2RlQXQoayldID0gMDtcbiAgfVxuICByZXR1cm4gc2NvcmU7XG59O1xuXG5jb25zdCBkaXN0YW5jZSA9IChhLCBiKSA9PiB7XG4gIGlmIChhLmxlbmd0aCA+IGIubGVuZ3RoKSB7XG4gICAgY29uc3QgdG1wID0gYjtcbiAgICBiID0gYTtcbiAgICBhID0gdG1wO1xuICB9XG4gIGlmIChhLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBiLmxlbmd0aDtcbiAgfVxuICBpZiAoYS5sZW5ndGggPD0gMzIpIHtcbiAgICByZXR1cm4gbXllcnNfMzIoYSwgYik7XG4gIH1cbiAgcmV0dXJuIG15ZXJzX3goYSwgYik7XG59O1xuXG5jb25zdCBjbG9zZXN0ID0gKHN0ciwgYXJyKSA9PiB7XG4gIGxldCBtaW5fZGlzdGFuY2UgPSBJbmZpbml0eTtcbiAgbGV0IG1pbl9pbmRleCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZGlzdCA9IGRpc3RhbmNlKHN0ciwgYXJyW2ldKTtcbiAgICBpZiAoZGlzdCA8IG1pbl9kaXN0YW5jZSkge1xuICAgICAgbWluX2Rpc3RhbmNlID0gZGlzdDtcbiAgICAgIG1pbl9pbmRleCA9IGk7XG4gICAgfVxuICB9XG4gIHJldHVybiBhcnJbbWluX2luZGV4XTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjbG9zZXN0LCBkaXN0YW5jZVxufVxuIiwiY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0FueUFycmF5KG9iamVjdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmplY3QpLmVuZHNXaXRoKCdBcnJheV0nKTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuLy8gUmVmZXJlbmNlOiBodHRwczovL3d3dy5nZWVrc2ZvcmdlZWtzLm9yZy9qYXJvLWFuZC1qYXJvLXdpbmtsZXItc2ltaWxhcml0eS9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuamFyb1dpbmtsZXIgPSBleHBvcnRzLmphcm8gPSB2b2lkIDA7XG4vKipcbiAqXG4gKiBAcGFyYW0gc3RyMSBTdHJpbmcgMSBmb3IgY29tcGFyZVxuICogQHBhcmFtIHN0cjIgU3RyaW5nIDIgZm9yIGNvbXBhcmVcbiAqIEBwYXJhbSBvcHRpb25zIHRvIGNvbnRyb2wgY2FzZSBzZW5zaXRpdmUgb3Igbm90XG4gKi9cbmZ1bmN0aW9uIGphcm8oc3RyMSwgc3RyMiwgb3B0aW9ucykge1xuICAgIC8vIEV4aXQgZWFybHkgaWYgZWl0aGVyIGFyZSBlbXB0eS5cbiAgICBpZiAoc3RyMS5sZW5ndGggPT09IDAgfHwgc3RyMi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIC8vIENvbnZlcnQgdG8gdXBwZXIgaWYgY2FzZS1zZW5zaXRpdmUgaXMgZmFsc2UuXG4gICAgaWYgKG9wdGlvbnMgJiYgIW9wdGlvbnMuY2FzZVNlbnNpdGl2ZSkge1xuICAgICAgICBzdHIxID0gc3RyMS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICBzdHIyID0gc3RyMi50b1VwcGVyQ2FzZSgpO1xuICAgIH1cbiAgICAvLyBFeGFjdCBtYXRjaFxuICAgIGlmIChzdHIxID09PSBzdHIyKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICAvLyBOdW1iZXIgb2YgbWF0Y2hlc1xuICAgIHZhciBtID0gMDtcbiAgICAvLyBMZW5ndGggb2YgdHdvIFN0cmluZ3NcbiAgICB2YXIgbGVuMSA9IHN0cjEubGVuZ3RoO1xuICAgIHZhciBsZW4yID0gc3RyMi5sZW5ndGg7XG4gICAgLy8gTWF4aW11bSBkaXN0YW5jZVxuICAgIHZhciB3aW5kb3cgPSBNYXRoLmZsb29yKE1hdGgubWF4KGxlbjEsIGxlbjIpIC8gMikgLSAxO1xuICAgIC8vIEhhc2ggZm9yIG1hdGNoZXNcbiAgICB2YXIgc3RyMUhhc2ggPSBuZXcgQXJyYXkobGVuMSk7XG4gICAgdmFyIHN0cjJIYXNoID0gbmV3IEFycmF5KGxlbjIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuMTsgaSsrKSB7XG4gICAgICAgIGZvciAodmFyIGogPSBNYXRoLm1heCgwLCBpIC0gd2luZG93KTsgaiA8PSBNYXRoLm1pbihsZW4yLCBpICsgd2luZG93ICsgMSk7IGorKykge1xuICAgICAgICAgICAgaWYgKCFzdHIxSGFzaFtpXSAmJiAhc3RyMkhhc2hbal0gJiYgc3RyMVtpXSA9PT0gc3RyMltqXSkge1xuICAgICAgICAgICAgICAgICsrbTtcbiAgICAgICAgICAgICAgICBzdHIxSGFzaFtpXSA9IHN0cjJIYXNoW2pdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBFeGl0IGVhcmx5IGlmIG5vIG1hdGNoZXMgd2VyZSBmb3VuZC5cbiAgICBpZiAobSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgLy8gQ291bnQgdGhlIHRyYW5zcG9zaXRpb25zLlxuICAgIHZhciB0ID0gMDtcbiAgICB2YXIgcG9pbnQgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuMTsgaSsrKSB7XG4gICAgICAgIGlmIChzdHIxSGFzaFtpXSkge1xuICAgICAgICAgICAgd2hpbGUgKCFzdHIySGFzaFtwb2ludF0pIHtcbiAgICAgICAgICAgICAgICBwb2ludCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0cjEuY2hhckF0KGkpICE9PSBzdHIyLmNoYXJBdChwb2ludCsrKSkge1xuICAgICAgICAgICAgICAgIHQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB0IC89IDI7XG4gICAgcmV0dXJuIChtIC8gbGVuMSArIG0gLyBsZW4yICsgKG0gLSB0KSAvIG0pIC8gMztcbn1cbmV4cG9ydHMuamFybyA9IGphcm87XG4vKipcbiAqXG4gKiBAcGFyYW0gc3RyMSBTdHJpbmcgMSBmb3IgY29tcGFyZVxuICogQHBhcmFtIHN0cjIgU3RyaW5nIDIgZm9yIGNvbXBhcmVcbiAqIEBwYXJhbSBvcHRpb25zIHRvIGNvbnRyb2wgY2FzZSBzZW5zaXRpdmUgb3Igbm90XG4gKi9cbmZ1bmN0aW9uIGphcm9XaW5rbGVyKHN0cjEsIHN0cjIsIG9wdGlvbnMpIHtcbiAgICAvLyBKYXJvIERpc3RhbmNlXG4gICAgdmFyIGphcm9EaXN0ID0gamFybyhzdHIxLCBzdHIyLCBvcHRpb25zKTtcbiAgICAvLyBTYW1lIHByZWZpeCBsZW5ndGgsIG1heGl1bSBpcyA0XG4gICAgdmFyIHByZWZpeCA9IDA7XG4gICAgaWYgKGphcm9EaXN0ID4gMC43KSB7XG4gICAgICAgIHZhciBtaW5JbmRleCA9IE1hdGgubWluKHN0cjEubGVuZ3RoLCBzdHIyLmxlbmd0aCk7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgd2hpbGUgKHN0cjFbaV0gPT09IHN0cjJbaV0gJiYgaSA8IDQgJiYgaSA8IG1pbkluZGV4KSB7XG4gICAgICAgICAgICArK3ByZWZpeDtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICBqYXJvRGlzdCArPSAwLjEgKiBwcmVmaXggKiAoMSAtIGphcm9EaXN0KTtcbiAgICB9XG4gICAgcmV0dXJuIGphcm9EaXN0O1xufVxuZXhwb3J0cy5qYXJvV2lua2xlciA9IGphcm9XaW5rbGVyO1xuIiwiaW1wb3J0IHsgaXNBbnlBcnJheSB9IGZyb20gJ2lzLWFueS1hcnJheSc7XG5cbmZ1bmN0aW9uIG1heChpbnB1dCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgaWYgKCFpc0FueUFycmF5KGlucHV0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2lucHV0IG11c3QgYmUgYW4gYXJyYXknKTtcbiAgfVxuXG4gIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnB1dCBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJGZyb21JbmRleCA9IG9wdGlvbnMuZnJvbUluZGV4LFxuICAgICAgZnJvbUluZGV4ID0gX29wdGlvbnMkZnJvbUluZGV4ID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkZnJvbUluZGV4LFxuICAgICAgX29wdGlvbnMkdG9JbmRleCA9IG9wdGlvbnMudG9JbmRleCxcbiAgICAgIHRvSW5kZXggPSBfb3B0aW9ucyR0b0luZGV4ID09PSB2b2lkIDAgPyBpbnB1dC5sZW5ndGggOiBfb3B0aW9ucyR0b0luZGV4O1xuXG4gIGlmIChmcm9tSW5kZXggPCAwIHx8IGZyb21JbmRleCA+PSBpbnB1dC5sZW5ndGggfHwgIU51bWJlci5pc0ludGVnZXIoZnJvbUluZGV4KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZnJvbUluZGV4IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHNtYWxsZXIgdGhhbiBsZW5ndGgnKTtcbiAgfVxuXG4gIGlmICh0b0luZGV4IDw9IGZyb21JbmRleCB8fCB0b0luZGV4ID4gaW5wdXQubGVuZ3RoIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHRvSW5kZXgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0b0luZGV4IG11c3QgYmUgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gZnJvbUluZGV4IGFuZCBhdCBtb3N0IGVxdWFsIHRvIGxlbmd0aCcpO1xuICB9XG5cbiAgdmFyIG1heFZhbHVlID0gaW5wdXRbZnJvbUluZGV4XTtcblxuICBmb3IgKHZhciBpID0gZnJvbUluZGV4ICsgMTsgaSA8IHRvSW5kZXg7IGkrKykge1xuICAgIGlmIChpbnB1dFtpXSA+IG1heFZhbHVlKSBtYXhWYWx1ZSA9IGlucHV0W2ldO1xuICB9XG5cbiAgcmV0dXJuIG1heFZhbHVlO1xufVxuXG5leHBvcnQgeyBtYXggYXMgZGVmYXVsdCB9O1xuIiwiY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuLyoqXG4gKiBDaGVja3MgaWYgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGFuIEFycmF5IChhcnJheSBvciB0eXBlZCBhcnJheSkuXG4gKlxuICogQHBhcmFtIHthbnl9IHZhbHVlIC0gT2JqZWN0IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIG9iamVjdCBpcyBhbiBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW55QXJyYXkodmFsdWUpIHtcbiAgICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkuZW5kc1dpdGgoJ0FycmF5XScpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgaXNBbnlBcnJheSB9IGZyb20gJ2lzLWFueS1hcnJheSc7XG5cbmZ1bmN0aW9uIG1pbihpbnB1dCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgaWYgKCFpc0FueUFycmF5KGlucHV0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2lucHV0IG11c3QgYmUgYW4gYXJyYXknKTtcbiAgfVxuXG4gIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnB1dCBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJGZyb21JbmRleCA9IG9wdGlvbnMuZnJvbUluZGV4LFxuICAgICAgZnJvbUluZGV4ID0gX29wdGlvbnMkZnJvbUluZGV4ID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkZnJvbUluZGV4LFxuICAgICAgX29wdGlvbnMkdG9JbmRleCA9IG9wdGlvbnMudG9JbmRleCxcbiAgICAgIHRvSW5kZXggPSBfb3B0aW9ucyR0b0luZGV4ID09PSB2b2lkIDAgPyBpbnB1dC5sZW5ndGggOiBfb3B0aW9ucyR0b0luZGV4O1xuXG4gIGlmIChmcm9tSW5kZXggPCAwIHx8IGZyb21JbmRleCA+PSBpbnB1dC5sZW5ndGggfHwgIU51bWJlci5pc0ludGVnZXIoZnJvbUluZGV4KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZnJvbUluZGV4IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHNtYWxsZXIgdGhhbiBsZW5ndGgnKTtcbiAgfVxuXG4gIGlmICh0b0luZGV4IDw9IGZyb21JbmRleCB8fCB0b0luZGV4ID4gaW5wdXQubGVuZ3RoIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHRvSW5kZXgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0b0luZGV4IG11c3QgYmUgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gZnJvbUluZGV4IGFuZCBhdCBtb3N0IGVxdWFsIHRvIGxlbmd0aCcpO1xuICB9XG5cbiAgdmFyIG1pblZhbHVlID0gaW5wdXRbZnJvbUluZGV4XTtcblxuICBmb3IgKHZhciBpID0gZnJvbUluZGV4ICsgMTsgaSA8IHRvSW5kZXg7IGkrKykge1xuICAgIGlmIChpbnB1dFtpXSA8IG1pblZhbHVlKSBtaW5WYWx1ZSA9IGlucHV0W2ldO1xuICB9XG5cbiAgcmV0dXJuIG1pblZhbHVlO1xufVxuXG5leHBvcnQgeyBtaW4gYXMgZGVmYXVsdCB9O1xuIiwiY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuLyoqXG4gKiBDaGVja3MgaWYgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGFuIEFycmF5IChhcnJheSBvciB0eXBlZCBhcnJheSkuXG4gKlxuICogQHBhcmFtIHthbnl9IHZhbHVlIC0gT2JqZWN0IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIG9iamVjdCBpcyBhbiBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW55QXJyYXkodmFsdWUpIHtcbiAgICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkuZW5kc1dpdGgoJ0FycmF5XScpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgaXNBbnlBcnJheSB9IGZyb20gJ2lzLWFueS1hcnJheSc7XG5pbXBvcnQgbWF4IGZyb20gJ21sLWFycmF5LW1heCc7XG5pbXBvcnQgbWluIGZyb20gJ21sLWFycmF5LW1pbic7XG5cbmZ1bmN0aW9uIHJlc2NhbGUoaW5wdXQpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gIGlmICghaXNBbnlBcnJheShpbnB1dCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnB1dCBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gIH0gZWxzZSBpZiAoaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW5wdXQgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgfVxuXG4gIHZhciBvdXRwdXQ7XG5cbiAgaWYgKG9wdGlvbnMub3V0cHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWlzQW55QXJyYXkob3B0aW9ucy5vdXRwdXQpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvdXRwdXQgb3B0aW9uIG11c3QgYmUgYW4gYXJyYXkgaWYgc3BlY2lmaWVkJyk7XG4gICAgfVxuXG4gICAgb3V0cHV0ID0gb3B0aW9ucy5vdXRwdXQ7XG4gIH0gZWxzZSB7XG4gICAgb3V0cHV0ID0gbmV3IEFycmF5KGlucHV0Lmxlbmd0aCk7XG4gIH1cblxuICB2YXIgY3VycmVudE1pbiA9IG1pbihpbnB1dCk7XG4gIHZhciBjdXJyZW50TWF4ID0gbWF4KGlucHV0KTtcblxuICBpZiAoY3VycmVudE1pbiA9PT0gY3VycmVudE1heCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdtaW5pbXVtIGFuZCBtYXhpbXVtIGlucHV0IHZhbHVlcyBhcmUgZXF1YWwuIENhbm5vdCByZXNjYWxlIGEgY29uc3RhbnQgYXJyYXknKTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyRtaW4gPSBvcHRpb25zLm1pbixcbiAgICAgIG1pblZhbHVlID0gX29wdGlvbnMkbWluID09PSB2b2lkIDAgPyBvcHRpb25zLmF1dG9NaW5NYXggPyBjdXJyZW50TWluIDogMCA6IF9vcHRpb25zJG1pbixcbiAgICAgIF9vcHRpb25zJG1heCA9IG9wdGlvbnMubWF4LFxuICAgICAgbWF4VmFsdWUgPSBfb3B0aW9ucyRtYXggPT09IHZvaWQgMCA/IG9wdGlvbnMuYXV0b01pbk1heCA/IGN1cnJlbnRNYXggOiAxIDogX29wdGlvbnMkbWF4O1xuXG4gIGlmIChtaW5WYWx1ZSA+PSBtYXhWYWx1ZSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdtaW4gb3B0aW9uIG11c3QgYmUgc21hbGxlciB0aGFuIG1heCBvcHRpb24nKTtcbiAgfVxuXG4gIHZhciBmYWN0b3IgPSAobWF4VmFsdWUgLSBtaW5WYWx1ZSkgLyAoY3VycmVudE1heCAtIGN1cnJlbnRNaW4pO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICBvdXRwdXRbaV0gPSAoaW5wdXRbaV0gLSBjdXJyZW50TWluKSAqIGZhY3RvciArIG1pblZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuZXhwb3J0IHsgcmVzY2FsZSBhcyBkZWZhdWx0IH07XG4iLCJjb25zdCB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG4vKipcbiAqIENoZWNrcyBpZiBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgYW4gQXJyYXkgKGFycmF5IG9yIHR5cGVkIGFycmF5KS5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBPYmplY3QgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGFuIGFycmF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBbnlBcnJheSh2YWx1ZSkge1xuICAgIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbHVlKS5lbmRzV2l0aCgnQXJyYXldJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIvKipcbiAqIENhbGN1bGF0ZSBjdXJyZW50IGVycm9yXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge3t4OkFycmF5PG51bWJlcj4sIHk6QXJyYXk8bnVtYmVyPn19IGRhdGEgLSBBcnJheSBvZiBwb2ludHMgdG8gZml0IGluIHRoZSBmb3JtYXQgW3gxLCB4MiwgLi4uIF0sIFt5MSwgeTIsIC4uLiBdXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IHBhcmFtZXRlcnMgLSBBcnJheSBvZiBjdXJyZW50IHBhcmFtZXRlciB2YWx1ZXNcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHBhcmFtZXRlcml6ZWRGdW5jdGlvbiAtIFRoZSBwYXJhbWV0ZXJzIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gd2l0aCB0aGUgaW5kZXBlbmRlbnQgdmFyaWFibGUgYXMgYSBwYXJhbWV0ZXJcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXJyb3JDYWxjdWxhdGlvbihcbiAgZGF0YSxcbiAgcGFyYW1ldGVycyxcbiAgcGFyYW1ldGVyaXplZEZ1bmN0aW9uLFxuKSB7XG4gIGxldCBlcnJvciA9IDA7XG4gIGNvbnN0IGZ1bmMgPSBwYXJhbWV0ZXJpemVkRnVuY3Rpb24ocGFyYW1ldGVycyk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICBlcnJvciArPSBNYXRoLmFicyhkYXRhLnlbaV0gLSBmdW5jKGRhdGEueFtpXSkpO1xuICB9XG5cbiAgcmV0dXJuIGVycm9yO1xufVxuIiwiaW1wb3J0IGlzQXJyYXkgZnJvbSAnaXMtYW55LWFycmF5JztcblxuaW1wb3J0IGVycm9yQ2FsY3VsYXRpb24gZnJvbSAnLi9lcnJvckNhbGN1bGF0aW9uJztcbmltcG9ydCBzdGVwIGZyb20gJy4vc3RlcCc7XG5cbi8qKlxuICogQ3VydmUgZml0dGluZyBhbGdvcml0aG1cbiAqIEBwYXJhbSB7e3g6QXJyYXk8bnVtYmVyPiwgeTpBcnJheTxudW1iZXI+fX0gZGF0YSAtIEFycmF5IG9mIHBvaW50cyB0byBmaXQgaW4gdGhlIGZvcm1hdCBbeDEsIHgyLCAuLi4gXSwgW3kxLCB5MiwgLi4uIF1cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHBhcmFtZXRlcml6ZWRGdW5jdGlvbiAtIFRoZSBwYXJhbWV0ZXJzIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gd2l0aCB0aGUgaW5kZXBlbmRlbnQgdmFyaWFibGUgYXMgYSBwYXJhbWV0ZXJcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBPcHRpb25zIG9iamVjdFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmRhbXBpbmddIC0gTGV2ZW5iZXJnLU1hcnF1YXJkdCBwYXJhbWV0ZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5ncmFkaWVudERpZmZlcmVuY2UgPSAxMGUtMl0gLSBBZGp1c3RtZW50IGZvciBkZWNyZWFzZSB0aGUgZGFtcGluZyBwYXJhbWV0ZXJcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMubWluVmFsdWVzXSAtIE1pbmltdW0gYWxsb3dlZCB2YWx1ZXMgZm9yIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMubWF4VmFsdWVzXSAtIE1heGltdW0gYWxsb3dlZCB2YWx1ZXMgZm9yIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuaW5pdGlhbFZhbHVlc10gLSBBcnJheSBvZiBpbml0aWFsIHBhcmFtZXRlciB2YWx1ZXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhJdGVyYXRpb25zID0gMTAwXSAtIE1heGltdW0gb2YgYWxsb3dlZCBpdGVyYXRpb25zXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZXJyb3JUb2xlcmFuY2UgPSAxMGUtM10gLSBNaW5pbXVtIHVuY2VydGFpbnR5IGFsbG93ZWQgZm9yIGVhY2ggcG9pbnRcbiAqIEByZXR1cm4ge3twYXJhbWV0ZXJWYWx1ZXM6IEFycmF5PG51bWJlcj4sIHBhcmFtZXRlckVycm9yOiBudW1iZXIsIGl0ZXJhdGlvbnM6IG51bWJlcn19XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxldmVuYmVyZ01hcnF1YXJkdChcbiAgZGF0YSxcbiAgcGFyYW1ldGVyaXplZEZ1bmN0aW9uLFxuICBvcHRpb25zID0ge30sXG4pIHtcbiAgbGV0IHtcbiAgICBtYXhJdGVyYXRpb25zID0gMTAwLFxuICAgIGdyYWRpZW50RGlmZmVyZW5jZSA9IDEwZS0yLFxuICAgIGRhbXBpbmcgPSAwLFxuICAgIGVycm9yVG9sZXJhbmNlID0gMTBlLTMsXG4gICAgbWluVmFsdWVzLFxuICAgIG1heFZhbHVlcyxcbiAgICBpbml0aWFsVmFsdWVzLFxuICB9ID0gb3B0aW9ucztcblxuICBpZiAoZGFtcGluZyA8PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZGFtcGluZyBvcHRpb24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICB9IGVsc2UgaWYgKCFkYXRhLnggfHwgIWRhdGEueSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGRhdGEgcGFyYW1ldGVyIG11c3QgaGF2ZSB4IGFuZCB5IGVsZW1lbnRzJyk7XG4gIH0gZWxzZSBpZiAoXG4gICAgIWlzQXJyYXkoZGF0YS54KSB8fFxuICAgIGRhdGEueC5sZW5ndGggPCAyIHx8XG4gICAgIWlzQXJyYXkoZGF0YS55KSB8fFxuICAgIGRhdGEueS5sZW5ndGggPCAyXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdUaGUgZGF0YSBwYXJhbWV0ZXIgZWxlbWVudHMgbXVzdCBiZSBhbiBhcnJheSB3aXRoIG1vcmUgdGhhbiAyIHBvaW50cycsXG4gICAgKTtcbiAgfSBlbHNlIGlmIChkYXRhLngubGVuZ3RoICE9PSBkYXRhLnkubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZGF0YSBwYXJhbWV0ZXIgZWxlbWVudHMgbXVzdCBoYXZlIHRoZSBzYW1lIHNpemUnKTtcbiAgfVxuXG4gIGxldCBwYXJhbWV0ZXJzID1cbiAgICBpbml0aWFsVmFsdWVzIHx8IG5ldyBBcnJheShwYXJhbWV0ZXJpemVkRnVuY3Rpb24ubGVuZ3RoKS5maWxsKDEpO1xuICBsZXQgcGFyTGVuID0gcGFyYW1ldGVycy5sZW5ndGg7XG4gIG1heFZhbHVlcyA9IG1heFZhbHVlcyB8fCBuZXcgQXJyYXkocGFyTGVuKS5maWxsKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtcbiAgbWluVmFsdWVzID0gbWluVmFsdWVzIHx8IG5ldyBBcnJheShwYXJMZW4pLmZpbGwoTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpO1xuXG4gIGlmIChtYXhWYWx1ZXMubGVuZ3RoICE9PSBtaW5WYWx1ZXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtaW5WYWx1ZXMgYW5kIG1heFZhbHVlcyBtdXN0IGJlIHRoZSBzYW1lIHNpemUnKTtcbiAgfVxuXG4gIGlmICghaXNBcnJheShwYXJhbWV0ZXJzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW5pdGlhbFZhbHVlcyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gIH1cblxuICBsZXQgZXJyb3IgPSBlcnJvckNhbGN1bGF0aW9uKGRhdGEsIHBhcmFtZXRlcnMsIHBhcmFtZXRlcml6ZWRGdW5jdGlvbik7XG5cbiAgbGV0IGNvbnZlcmdlZCA9IGVycm9yIDw9IGVycm9yVG9sZXJhbmNlO1xuXG4gIGxldCBpdGVyYXRpb247XG4gIGZvciAoaXRlcmF0aW9uID0gMDsgaXRlcmF0aW9uIDwgbWF4SXRlcmF0aW9ucyAmJiAhY29udmVyZ2VkOyBpdGVyYXRpb24rKykge1xuICAgIHBhcmFtZXRlcnMgPSBzdGVwKFxuICAgICAgZGF0YSxcbiAgICAgIHBhcmFtZXRlcnMsXG4gICAgICBkYW1waW5nLFxuICAgICAgZ3JhZGllbnREaWZmZXJlbmNlLFxuICAgICAgcGFyYW1ldGVyaXplZEZ1bmN0aW9uLFxuICAgICk7XG5cbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHBhckxlbjsgaysrKSB7XG4gICAgICBwYXJhbWV0ZXJzW2tdID0gTWF0aC5taW4oXG4gICAgICAgIE1hdGgubWF4KG1pblZhbHVlc1trXSwgcGFyYW1ldGVyc1trXSksXG4gICAgICAgIG1heFZhbHVlc1trXSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZXJyb3IgPSBlcnJvckNhbGN1bGF0aW9uKGRhdGEsIHBhcmFtZXRlcnMsIHBhcmFtZXRlcml6ZWRGdW5jdGlvbik7XG4gICAgaWYgKGlzTmFOKGVycm9yKSkgYnJlYWs7XG4gICAgY29udmVyZ2VkID0gZXJyb3IgPD0gZXJyb3JUb2xlcmFuY2U7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhcmFtZXRlclZhbHVlczogcGFyYW1ldGVycyxcbiAgICBwYXJhbWV0ZXJFcnJvcjogZXJyb3IsXG4gICAgaXRlcmF0aW9uczogaXRlcmF0aW9uLFxuICB9O1xufVxuIiwiaW1wb3J0IHsgaW52ZXJzZSwgTWF0cml4IH0gZnJvbSAnbWwtbWF0cml4JztcblxuLyoqXG4gKiBEaWZmZXJlbmNlIG9mIHRoZSBtYXRyaXggZnVuY3Rpb24gb3ZlciB0aGUgcGFyYW1ldGVyc1xuICogQGlnbm9yZVxuICogQHBhcmFtIHt7eDpBcnJheTxudW1iZXI+LCB5OkFycmF5PG51bWJlcj59fSBkYXRhIC0gQXJyYXkgb2YgcG9pbnRzIHRvIGZpdCBpbiB0aGUgZm9ybWF0IFt4MSwgeDIsIC4uLiBdLCBbeTEsIHkyLCAuLi4gXVxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBldmFsdWF0ZWREYXRhIC0gQXJyYXkgb2YgcHJldmlvdXMgZXZhbHVhdGVkIGZ1bmN0aW9uIHZhbHVlc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBwYXJhbXMgLSBBcnJheSBvZiBwcmV2aW91cyBwYXJhbWV0ZXIgdmFsdWVzXG4gKiBAcGFyYW0ge251bWJlcn0gZ3JhZGllbnREaWZmZXJlbmNlIC0gQWRqdXN0bWVudCBmb3IgZGVjcmVhc2UgdGhlIGRhbXBpbmcgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBwYXJhbUZ1bmN0aW9uIC0gVGhlIHBhcmFtZXRlcnMgYW5kIHJldHVybnMgYSBmdW5jdGlvbiB3aXRoIHRoZSBpbmRlcGVuZGVudCB2YXJpYWJsZSBhcyBhIHBhcmFtZXRlclxuICogQHJldHVybiB7TWF0cml4fVxuICovXG5mdW5jdGlvbiBncmFkaWVudEZ1bmN0aW9uKFxuICBkYXRhLFxuICBldmFsdWF0ZWREYXRhLFxuICBwYXJhbXMsXG4gIGdyYWRpZW50RGlmZmVyZW5jZSxcbiAgcGFyYW1GdW5jdGlvbixcbikge1xuICBjb25zdCBuID0gcGFyYW1zLmxlbmd0aDtcbiAgY29uc3QgbSA9IGRhdGEueC5sZW5ndGg7XG5cbiAgbGV0IGFucyA9IG5ldyBBcnJheShuKTtcblxuICBmb3IgKGxldCBwYXJhbSA9IDA7IHBhcmFtIDwgbjsgcGFyYW0rKykge1xuICAgIGFuc1twYXJhbV0gPSBuZXcgQXJyYXkobSk7XG4gICAgbGV0IGF1eFBhcmFtcyA9IHBhcmFtcy5zbGljZSgpO1xuICAgIGF1eFBhcmFtc1twYXJhbV0gKz0gZ3JhZGllbnREaWZmZXJlbmNlO1xuICAgIGxldCBmdW5jUGFyYW0gPSBwYXJhbUZ1bmN0aW9uKGF1eFBhcmFtcyk7XG5cbiAgICBmb3IgKGxldCBwb2ludCA9IDA7IHBvaW50IDwgbTsgcG9pbnQrKykge1xuICAgICAgYW5zW3BhcmFtXVtwb2ludF0gPSBldmFsdWF0ZWREYXRhW3BvaW50XSAtIGZ1bmNQYXJhbShkYXRhLnhbcG9pbnRdKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBNYXRyaXgoYW5zKTtcbn1cblxuLyoqXG4gKiBNYXRyaXggZnVuY3Rpb24gb3ZlciB0aGUgc2FtcGxlc1xuICogQGlnbm9yZVxuICogQHBhcmFtIHt7eDpBcnJheTxudW1iZXI+LCB5OkFycmF5PG51bWJlcj59fSBkYXRhIC0gQXJyYXkgb2YgcG9pbnRzIHRvIGZpdCBpbiB0aGUgZm9ybWF0IFt4MSwgeDIsIC4uLiBdLCBbeTEsIHkyLCAuLi4gXVxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBldmFsdWF0ZWREYXRhIC0gQXJyYXkgb2YgcHJldmlvdXMgZXZhbHVhdGVkIGZ1bmN0aW9uIHZhbHVlc1xuICogQHJldHVybiB7TWF0cml4fVxuICovXG5mdW5jdGlvbiBtYXRyaXhGdW5jdGlvbihkYXRhLCBldmFsdWF0ZWREYXRhKSB7XG4gIGNvbnN0IG0gPSBkYXRhLngubGVuZ3RoO1xuXG4gIGxldCBhbnMgPSBuZXcgQXJyYXkobSk7XG5cbiAgZm9yIChsZXQgcG9pbnQgPSAwOyBwb2ludCA8IG07IHBvaW50KyspIHtcbiAgICBhbnNbcG9pbnRdID0gW2RhdGEueVtwb2ludF0gLSBldmFsdWF0ZWREYXRhW3BvaW50XV07XG4gIH1cblxuICByZXR1cm4gbmV3IE1hdHJpeChhbnMpO1xufVxuXG4vKipcbiAqIEl0ZXJhdGlvbiBmb3IgTGV2ZW5iZXJnLU1hcnF1YXJkdFxuICogQGlnbm9yZVxuICogQHBhcmFtIHt7eDpBcnJheTxudW1iZXI+LCB5OkFycmF5PG51bWJlcj59fSBkYXRhIC0gQXJyYXkgb2YgcG9pbnRzIHRvIGZpdCBpbiB0aGUgZm9ybWF0IFt4MSwgeDIsIC4uLiBdLCBbeTEsIHkyLCAuLi4gXVxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBwYXJhbXMgLSBBcnJheSBvZiBwcmV2aW91cyBwYXJhbWV0ZXIgdmFsdWVzXG4gKiBAcGFyYW0ge251bWJlcn0gZGFtcGluZyAtIExldmVuYmVyZy1NYXJxdWFyZHQgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge251bWJlcn0gZ3JhZGllbnREaWZmZXJlbmNlIC0gQWRqdXN0bWVudCBmb3IgZGVjcmVhc2UgdGhlIGRhbXBpbmcgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBwYXJhbWV0ZXJpemVkRnVuY3Rpb24gLSBUaGUgcGFyYW1ldGVycyBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHdpdGggdGhlIGluZGVwZW5kZW50IHZhcmlhYmxlIGFzIGEgcGFyYW1ldGVyXG4gKiBAcmV0dXJuIHtBcnJheTxudW1iZXI+fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGVwKFxuICBkYXRhLFxuICBwYXJhbXMsXG4gIGRhbXBpbmcsXG4gIGdyYWRpZW50RGlmZmVyZW5jZSxcbiAgcGFyYW1ldGVyaXplZEZ1bmN0aW9uLFxuKSB7XG4gIGxldCB2YWx1ZSA9IGRhbXBpbmcgKiBncmFkaWVudERpZmZlcmVuY2UgKiBncmFkaWVudERpZmZlcmVuY2U7XG4gIGxldCBpZGVudGl0eSA9IE1hdHJpeC5leWUocGFyYW1zLmxlbmd0aCwgcGFyYW1zLmxlbmd0aCwgdmFsdWUpO1xuXG4gIGNvbnN0IGZ1bmMgPSBwYXJhbWV0ZXJpemVkRnVuY3Rpb24ocGFyYW1zKTtcblxuICBsZXQgZXZhbHVhdGVkRGF0YSA9IG5ldyBGbG9hdDY0QXJyYXkoZGF0YS54Lmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgZXZhbHVhdGVkRGF0YVtpXSA9IGZ1bmMoZGF0YS54W2ldKTtcbiAgfVxuXG4gIGxldCBncmFkaWVudEZ1bmMgPSBncmFkaWVudEZ1bmN0aW9uKFxuICAgIGRhdGEsXG4gICAgZXZhbHVhdGVkRGF0YSxcbiAgICBwYXJhbXMsXG4gICAgZ3JhZGllbnREaWZmZXJlbmNlLFxuICAgIHBhcmFtZXRlcml6ZWRGdW5jdGlvbixcbiAgKTtcbiAgbGV0IG1hdHJpeEZ1bmMgPSBtYXRyaXhGdW5jdGlvbihkYXRhLCBldmFsdWF0ZWREYXRhKTtcbiAgbGV0IGludmVyc2VNYXRyaXggPSBpbnZlcnNlKFxuICAgIGlkZW50aXR5LmFkZChncmFkaWVudEZ1bmMubW11bChncmFkaWVudEZ1bmMudHJhbnNwb3NlKCkpKSxcbiAgKTtcblxuICBwYXJhbXMgPSBuZXcgTWF0cml4KFtwYXJhbXNdKTtcbiAgcGFyYW1zID0gcGFyYW1zLnN1YihcbiAgICBpbnZlcnNlTWF0cml4XG4gICAgICAubW11bChncmFkaWVudEZ1bmMpXG4gICAgICAubW11bChtYXRyaXhGdW5jKVxuICAgICAgLm11bChncmFkaWVudERpZmZlcmVuY2UpXG4gICAgICAudHJhbnNwb3NlKCksXG4gICk7XG5cbiAgcmV0dXJuIHBhcmFtcy50bzFEQXJyYXkoKTtcbn1cbiIsImltcG9ydCBNYXRyaXggZnJvbSAnLi4vbWF0cml4JztcbmltcG9ydCBXcmFwcGVyTWF0cml4MkQgZnJvbSAnLi4vd3JhcC9XcmFwcGVyTWF0cml4MkQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMdURlY29tcG9zaXRpb24ge1xuICBjb25zdHJ1Y3RvcihtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBXcmFwcGVyTWF0cml4MkQuY2hlY2tNYXRyaXgobWF0cml4KTtcblxuICAgIGxldCBsdSA9IG1hdHJpeC5jbG9uZSgpO1xuICAgIGxldCByb3dzID0gbHUucm93cztcbiAgICBsZXQgY29sdW1ucyA9IGx1LmNvbHVtbnM7XG4gICAgbGV0IHBpdm90VmVjdG9yID0gbmV3IEZsb2F0NjRBcnJheShyb3dzKTtcbiAgICBsZXQgcGl2b3RTaWduID0gMTtcbiAgICBsZXQgaSwgaiwgaywgcCwgcywgdCwgdjtcbiAgICBsZXQgTFVjb2xqLCBrbWF4O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgcGl2b3RWZWN0b3JbaV0gPSBpO1xuICAgIH1cblxuICAgIExVY29saiA9IG5ldyBGbG9hdDY0QXJyYXkocm93cyk7XG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgIExVY29saltpXSA9IGx1LmdldChpLCBqKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICBrbWF4ID0gTWF0aC5taW4oaSwgaik7XG4gICAgICAgIHMgPSAwO1xuICAgICAgICBmb3IgKGsgPSAwOyBrIDwga21heDsgaysrKSB7XG4gICAgICAgICAgcyArPSBsdS5nZXQoaSwgaykgKiBMVWNvbGpba107XG4gICAgICAgIH1cbiAgICAgICAgTFVjb2xqW2ldIC09IHM7XG4gICAgICAgIGx1LnNldChpLCBqLCBMVWNvbGpbaV0pO1xuICAgICAgfVxuXG4gICAgICBwID0gajtcbiAgICAgIGZvciAoaSA9IGogKyAxOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgIGlmIChNYXRoLmFicyhMVWNvbGpbaV0pID4gTWF0aC5hYnMoTFVjb2xqW3BdKSkge1xuICAgICAgICAgIHAgPSBpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwICE9PSBqKSB7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBjb2x1bW5zOyBrKyspIHtcbiAgICAgICAgICB0ID0gbHUuZ2V0KHAsIGspO1xuICAgICAgICAgIGx1LnNldChwLCBrLCBsdS5nZXQoaiwgaykpO1xuICAgICAgICAgIGx1LnNldChqLCBrLCB0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHYgPSBwaXZvdFZlY3RvcltwXTtcbiAgICAgICAgcGl2b3RWZWN0b3JbcF0gPSBwaXZvdFZlY3RvcltqXTtcbiAgICAgICAgcGl2b3RWZWN0b3Jbal0gPSB2O1xuXG4gICAgICAgIHBpdm90U2lnbiA9IC1waXZvdFNpZ247XG4gICAgICB9XG5cbiAgICAgIGlmIChqIDwgcm93cyAmJiBsdS5nZXQoaiwgaikgIT09IDApIHtcbiAgICAgICAgZm9yIChpID0gaiArIDE7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICBsdS5zZXQoaSwgaiwgbHUuZ2V0KGksIGopIC8gbHUuZ2V0KGosIGopKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuTFUgPSBsdTtcbiAgICB0aGlzLnBpdm90VmVjdG9yID0gcGl2b3RWZWN0b3I7XG4gICAgdGhpcy5waXZvdFNpZ24gPSBwaXZvdFNpZ247XG4gIH1cblxuICBpc1Npbmd1bGFyKCkge1xuICAgIGxldCBkYXRhID0gdGhpcy5MVTtcbiAgICBsZXQgY29sID0gZGF0YS5jb2x1bW5zO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sOyBqKyspIHtcbiAgICAgIGlmIChkYXRhLmdldChqLCBqKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc29sdmUodmFsdWUpIHtcbiAgICB2YWx1ZSA9IE1hdHJpeC5jaGVja01hdHJpeCh2YWx1ZSk7XG5cbiAgICBsZXQgbHUgPSB0aGlzLkxVO1xuICAgIGxldCByb3dzID0gbHUucm93cztcblxuICAgIGlmIChyb3dzICE9PSB2YWx1ZS5yb3dzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbWF0cml4IGRpbWVuc2lvbnMnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTaW5ndWxhcigpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xVIG1hdHJpeCBpcyBzaW5ndWxhcicpO1xuICAgIH1cblxuICAgIGxldCBjb3VudCA9IHZhbHVlLmNvbHVtbnM7XG4gICAgbGV0IFggPSB2YWx1ZS5zdWJNYXRyaXhSb3codGhpcy5waXZvdFZlY3RvciwgMCwgY291bnQgLSAxKTtcbiAgICBsZXQgY29sdW1ucyA9IGx1LmNvbHVtbnM7XG4gICAgbGV0IGksIGosIGs7XG5cbiAgICBmb3IgKGsgPSAwOyBrIDwgY29sdW1uczsgaysrKSB7XG4gICAgICBmb3IgKGkgPSBrICsgMTsgaSA8IGNvbHVtbnM7IGkrKykge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykge1xuICAgICAgICAgIFguc2V0KGksIGosIFguZ2V0KGksIGopIC0gWC5nZXQoaywgaikgKiBsdS5nZXQoaSwgaykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoayA9IGNvbHVtbnMgLSAxOyBrID49IDA7IGstLSkge1xuICAgICAgZm9yIChqID0gMDsgaiA8IGNvdW50OyBqKyspIHtcbiAgICAgICAgWC5zZXQoaywgaiwgWC5nZXQoaywgaikgLyBsdS5nZXQoaywgaykpO1xuICAgICAgfVxuICAgICAgZm9yIChpID0gMDsgaSA8IGs7IGkrKykge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykge1xuICAgICAgICAgIFguc2V0KGksIGosIFguZ2V0KGksIGopIC0gWC5nZXQoaywgaikgKiBsdS5nZXQoaSwgaykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBYO1xuICB9XG5cbiAgZ2V0IGRldGVybWluYW50KCkge1xuICAgIGxldCBkYXRhID0gdGhpcy5MVTtcbiAgICBpZiAoIWRhdGEuaXNTcXVhcmUoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUnKTtcbiAgICB9XG4gICAgbGV0IGRldGVybWluYW50ID0gdGhpcy5waXZvdFNpZ247XG4gICAgbGV0IGNvbCA9IGRhdGEuY29sdW1ucztcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbDsgaisrKSB7XG4gICAgICBkZXRlcm1pbmFudCAqPSBkYXRhLmdldChqLCBqKTtcbiAgICB9XG4gICAgcmV0dXJuIGRldGVybWluYW50O1xuICB9XG5cbiAgZ2V0IGxvd2VyVHJpYW5ndWxhck1hdHJpeCgpIHtcbiAgICBsZXQgZGF0YSA9IHRoaXMuTFU7XG4gICAgbGV0IHJvd3MgPSBkYXRhLnJvd3M7XG4gICAgbGV0IGNvbHVtbnMgPSBkYXRhLmNvbHVtbnM7XG4gICAgbGV0IFggPSBuZXcgTWF0cml4KHJvd3MsIGNvbHVtbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICBpZiAoaSA+IGopIHtcbiAgICAgICAgICBYLnNldChpLCBqLCBkYXRhLmdldChpLCBqKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gaikge1xuICAgICAgICAgIFguc2V0KGksIGosIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIFguc2V0KGksIGosIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBYO1xuICB9XG5cbiAgZ2V0IHVwcGVyVHJpYW5ndWxhck1hdHJpeCgpIHtcbiAgICBsZXQgZGF0YSA9IHRoaXMuTFU7XG4gICAgbGV0IHJvd3MgPSBkYXRhLnJvd3M7XG4gICAgbGV0IGNvbHVtbnMgPSBkYXRhLmNvbHVtbnM7XG4gICAgbGV0IFggPSBuZXcgTWF0cml4KHJvd3MsIGNvbHVtbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICBpZiAoaSA8PSBqKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgZGF0YS5nZXQoaSwgaikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIFguc2V0KGksIGosIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBYO1xuICB9XG5cbiAgZ2V0IHBpdm90UGVybXV0YXRpb25WZWN0b3IoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5waXZvdFZlY3Rvcik7XG4gIH1cbn1cbiIsImltcG9ydCBNYXRyaXggZnJvbSAnLi4vbWF0cml4JztcbmltcG9ydCBXcmFwcGVyTWF0cml4MkQgZnJvbSAnLi4vd3JhcC9XcmFwcGVyTWF0cml4MkQnO1xuXG5pbXBvcnQgeyBoeXBvdGVudXNlIH0gZnJvbSAnLi91dGlsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXJEZWNvbXBvc2l0aW9uIHtcbiAgY29uc3RydWN0b3IodmFsdWUpIHtcbiAgICB2YWx1ZSA9IFdyYXBwZXJNYXRyaXgyRC5jaGVja01hdHJpeCh2YWx1ZSk7XG5cbiAgICBsZXQgcXIgPSB2YWx1ZS5jbG9uZSgpO1xuICAgIGxldCBtID0gdmFsdWUucm93cztcbiAgICBsZXQgbiA9IHZhbHVlLmNvbHVtbnM7XG4gICAgbGV0IHJkaWFnID0gbmV3IEZsb2F0NjRBcnJheShuKTtcbiAgICBsZXQgaSwgaiwgaywgcztcblxuICAgIGZvciAoayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgIGxldCBucm0gPSAwO1xuICAgICAgZm9yIChpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICBucm0gPSBoeXBvdGVudXNlKG5ybSwgcXIuZ2V0KGksIGspKTtcbiAgICAgIH1cbiAgICAgIGlmIChucm0gIT09IDApIHtcbiAgICAgICAgaWYgKHFyLmdldChrLCBrKSA8IDApIHtcbiAgICAgICAgICBucm0gPSAtbnJtO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICBxci5zZXQoaSwgaywgcXIuZ2V0KGksIGspIC8gbnJtKTtcbiAgICAgICAgfVxuICAgICAgICBxci5zZXQoaywgaywgcXIuZ2V0KGssIGspICsgMSk7XG4gICAgICAgIGZvciAoaiA9IGsgKyAxOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgcyA9IDA7XG4gICAgICAgICAgZm9yIChpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgcyArPSBxci5nZXQoaSwgaykgKiBxci5nZXQoaSwgaik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHMgPSAtcyAvIHFyLmdldChrLCBrKTtcbiAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICBxci5zZXQoaSwgaiwgcXIuZ2V0KGksIGopICsgcyAqIHFyLmdldChpLCBrKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZGlhZ1trXSA9IC1ucm07XG4gICAgfVxuXG4gICAgdGhpcy5RUiA9IHFyO1xuICAgIHRoaXMuUmRpYWcgPSByZGlhZztcbiAgfVxuXG4gIHNvbHZlKHZhbHVlKSB7XG4gICAgdmFsdWUgPSBNYXRyaXguY2hlY2tNYXRyaXgodmFsdWUpO1xuXG4gICAgbGV0IHFyID0gdGhpcy5RUjtcbiAgICBsZXQgbSA9IHFyLnJvd3M7XG5cbiAgICBpZiAodmFsdWUucm93cyAhPT0gbSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYXRyaXggcm93IGRpbWVuc2lvbnMgbXVzdCBhZ3JlZScpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNGdWxsUmFuaygpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hdHJpeCBpcyByYW5rIGRlZmljaWVudCcpO1xuICAgIH1cblxuICAgIGxldCBjb3VudCA9IHZhbHVlLmNvbHVtbnM7XG4gICAgbGV0IFggPSB2YWx1ZS5jbG9uZSgpO1xuICAgIGxldCBuID0gcXIuY29sdW1ucztcbiAgICBsZXQgaSwgaiwgaywgcztcblxuICAgIGZvciAoayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBjb3VudDsgaisrKSB7XG4gICAgICAgIHMgPSAwO1xuICAgICAgICBmb3IgKGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgcyArPSBxci5nZXQoaSwgaykgKiBYLmdldChpLCBqKTtcbiAgICAgICAgfVxuICAgICAgICBzID0gLXMgLyBxci5nZXQoaywgayk7XG4gICAgICAgIGZvciAoaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICBYLnNldChpLCBqLCBYLmdldChpLCBqKSArIHMgKiBxci5nZXQoaSwgaykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoayA9IG4gLSAxOyBrID49IDA7IGstLSkge1xuICAgICAgZm9yIChqID0gMDsgaiA8IGNvdW50OyBqKyspIHtcbiAgICAgICAgWC5zZXQoaywgaiwgWC5nZXQoaywgaikgLyB0aGlzLlJkaWFnW2tdKTtcbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBrOyBpKyspIHtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvdW50OyBqKyspIHtcbiAgICAgICAgICBYLnNldChpLCBqLCBYLmdldChpLCBqKSAtIFguZ2V0KGssIGopICogcXIuZ2V0KGksIGspKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBYLnN1Yk1hdHJpeCgwLCBuIC0gMSwgMCwgY291bnQgLSAxKTtcbiAgfVxuXG4gIGlzRnVsbFJhbmsoKSB7XG4gICAgbGV0IGNvbHVtbnMgPSB0aGlzLlFSLmNvbHVtbnM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5zOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLlJkaWFnW2ldID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXQgdXBwZXJUcmlhbmd1bGFyTWF0cml4KCkge1xuICAgIGxldCBxciA9IHRoaXMuUVI7XG4gICAgbGV0IG4gPSBxci5jb2x1bW5zO1xuICAgIGxldCBYID0gbmV3IE1hdHJpeChuLCBuKTtcbiAgICBsZXQgaSwgajtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgIGlmIChpIDwgaikge1xuICAgICAgICAgIFguc2V0KGksIGosIHFyLmdldChpLCBqKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gaikge1xuICAgICAgICAgIFguc2V0KGksIGosIHRoaXMuUmRpYWdbaV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIFguc2V0KGksIGosIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBYO1xuICB9XG5cbiAgZ2V0IG9ydGhvZ29uYWxNYXRyaXgoKSB7XG4gICAgbGV0IHFyID0gdGhpcy5RUjtcbiAgICBsZXQgcm93cyA9IHFyLnJvd3M7XG4gICAgbGV0IGNvbHVtbnMgPSBxci5jb2x1bW5zO1xuICAgIGxldCBYID0gbmV3IE1hdHJpeChyb3dzLCBjb2x1bW5zKTtcbiAgICBsZXQgaSwgaiwgaywgcztcblxuICAgIGZvciAoayA9IGNvbHVtbnMgLSAxOyBrID49IDA7IGstLSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICBYLnNldChpLCBrLCAwKTtcbiAgICAgIH1cbiAgICAgIFguc2V0KGssIGssIDEpO1xuICAgICAgZm9yIChqID0gazsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICBpZiAocXIuZ2V0KGssIGspICE9PSAwKSB7XG4gICAgICAgICAgcyA9IDA7XG4gICAgICAgICAgZm9yIChpID0gazsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgICAgcyArPSBxci5nZXQoaSwgaykgKiBYLmdldChpLCBqKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzID0gLXMgLyBxci5nZXQoaywgayk7XG5cbiAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICBYLnNldChpLCBqLCBYLmdldChpLCBqKSArIHMgKiBxci5nZXQoaSwgaykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gWDtcbiAgfVxufVxuIiwiaW1wb3J0IE1hdHJpeCBmcm9tICcuLi9tYXRyaXgnO1xuaW1wb3J0IFdyYXBwZXJNYXRyaXgyRCBmcm9tICcuLi93cmFwL1dyYXBwZXJNYXRyaXgyRCc7XG5cbmltcG9ydCB7IGh5cG90ZW51c2UgfSBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaW5ndWxhclZhbHVlRGVjb21wb3NpdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHZhbHVlLCBvcHRpb25zID0ge30pIHtcbiAgICB2YWx1ZSA9IFdyYXBwZXJNYXRyaXgyRC5jaGVja01hdHJpeCh2YWx1ZSk7XG5cbiAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hdHJpeCBtdXN0IGJlIG5vbi1lbXB0eScpO1xuICAgIH1cblxuICAgIGxldCBtID0gdmFsdWUucm93cztcbiAgICBsZXQgbiA9IHZhbHVlLmNvbHVtbnM7XG5cbiAgICBjb25zdCB7XG4gICAgICBjb21wdXRlTGVmdFNpbmd1bGFyVmVjdG9ycyA9IHRydWUsXG4gICAgICBjb21wdXRlUmlnaHRTaW5ndWxhclZlY3RvcnMgPSB0cnVlLFxuICAgICAgYXV0b1RyYW5zcG9zZSA9IGZhbHNlLFxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgbGV0IHdhbnR1ID0gQm9vbGVhbihjb21wdXRlTGVmdFNpbmd1bGFyVmVjdG9ycyk7XG4gICAgbGV0IHdhbnR2ID0gQm9vbGVhbihjb21wdXRlUmlnaHRTaW5ndWxhclZlY3RvcnMpO1xuXG4gICAgbGV0IHN3YXBwZWQgPSBmYWxzZTtcbiAgICBsZXQgYTtcbiAgICBpZiAobSA8IG4pIHtcbiAgICAgIGlmICghYXV0b1RyYW5zcG9zZSkge1xuICAgICAgICBhID0gdmFsdWUuY2xvbmUoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdDb21wdXRpbmcgU1ZEIG9uIGEgbWF0cml4IHdpdGggbW9yZSBjb2x1bW5zIHRoYW4gcm93cy4gQ29uc2lkZXIgZW5hYmxpbmcgYXV0b1RyYW5zcG9zZScsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhID0gdmFsdWUudHJhbnNwb3NlKCk7XG4gICAgICAgIG0gPSBhLnJvd3M7XG4gICAgICAgIG4gPSBhLmNvbHVtbnM7XG4gICAgICAgIHN3YXBwZWQgPSB0cnVlO1xuICAgICAgICBsZXQgYXV4ID0gd2FudHU7XG4gICAgICAgIHdhbnR1ID0gd2FudHY7XG4gICAgICAgIHdhbnR2ID0gYXV4O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhID0gdmFsdWUuY2xvbmUoKTtcbiAgICB9XG5cbiAgICBsZXQgbnUgPSBNYXRoLm1pbihtLCBuKTtcbiAgICBsZXQgbmkgPSBNYXRoLm1pbihtICsgMSwgbik7XG4gICAgbGV0IHMgPSBuZXcgRmxvYXQ2NEFycmF5KG5pKTtcbiAgICBsZXQgVSA9IG5ldyBNYXRyaXgobSwgbnUpO1xuICAgIGxldCBWID0gbmV3IE1hdHJpeChuLCBuKTtcblxuICAgIGxldCBlID0gbmV3IEZsb2F0NjRBcnJheShuKTtcbiAgICBsZXQgd29yayA9IG5ldyBGbG9hdDY0QXJyYXkobSk7XG5cbiAgICBsZXQgc2kgPSBuZXcgRmxvYXQ2NEFycmF5KG5pKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5pOyBpKyspIHNpW2ldID0gaTtcblxuICAgIGxldCBuY3QgPSBNYXRoLm1pbihtIC0gMSwgbik7XG4gICAgbGV0IG5ydCA9IE1hdGgubWF4KDAsIE1hdGgubWluKG4gLSAyLCBtKSk7XG4gICAgbGV0IG1yYyA9IE1hdGgubWF4KG5jdCwgbnJ0KTtcblxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbXJjOyBrKyspIHtcbiAgICAgIGlmIChrIDwgbmN0KSB7XG4gICAgICAgIHNba10gPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgIHNba10gPSBoeXBvdGVudXNlKHNba10sIGEuZ2V0KGksIGspKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc1trXSAhPT0gMCkge1xuICAgICAgICAgIGlmIChhLmdldChrLCBrKSA8IDApIHtcbiAgICAgICAgICAgIHNba10gPSAtc1trXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgIGEuc2V0KGksIGssIGEuZ2V0KGksIGspIC8gc1trXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGEuc2V0KGssIGssIGEuZ2V0KGssIGspICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgc1trXSA9IC1zW2tdO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBqID0gayArIDE7IGogPCBuOyBqKyspIHtcbiAgICAgICAgaWYgKGsgPCBuY3QgJiYgc1trXSAhPT0gMCkge1xuICAgICAgICAgIGxldCB0ID0gMDtcbiAgICAgICAgICBmb3IgKGxldCBpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgdCArPSBhLmdldChpLCBrKSAqIGEuZ2V0KGksIGopO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0ID0gLXQgLyBhLmdldChrLCBrKTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgYS5zZXQoaSwgaiwgYS5nZXQoaSwgaikgKyB0ICogYS5nZXQoaSwgaykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlW2pdID0gYS5nZXQoaywgaik7XG4gICAgICB9XG5cbiAgICAgIGlmICh3YW50dSAmJiBrIDwgbmN0KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgVS5zZXQoaSwgaywgYS5nZXQoaSwgaykpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChrIDwgbnJ0KSB7XG4gICAgICAgIGVba10gPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gayArIDE7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBlW2tdID0gaHlwb3RlbnVzZShlW2tdLCBlW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZVtrXSAhPT0gMCkge1xuICAgICAgICAgIGlmIChlW2sgKyAxXSA8IDApIHtcbiAgICAgICAgICAgIGVba10gPSAwIC0gZVtrXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgaSA9IGsgKyAxOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBlW2ldIC89IGVba107XG4gICAgICAgICAgfVxuICAgICAgICAgIGVbayArIDFdICs9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZVtrXSA9IC1lW2tdO1xuICAgICAgICBpZiAoayArIDEgPCBtICYmIGVba10gIT09IDApIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gayArIDE7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgIHdvcmtbaV0gPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBpID0gayArIDE7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBrICsgMTsgaiA8IG47IGorKykge1xuICAgICAgICAgICAgICB3b3JrW2ldICs9IGVbal0gKiBhLmdldChpLCBqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgaiA9IGsgKyAxOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgICBsZXQgdCA9IC1lW2pdIC8gZVtrICsgMV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gayArIDE7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgICAgYS5zZXQoaSwgaiwgYS5nZXQoaSwgaikgKyB0ICogd29ya1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh3YW50dikge1xuICAgICAgICAgIGZvciAobGV0IGkgPSBrICsgMTsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgVi5zZXQoaSwgaywgZVtpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHAgPSBNYXRoLm1pbihuLCBtICsgMSk7XG4gICAgaWYgKG5jdCA8IG4pIHtcbiAgICAgIHNbbmN0XSA9IGEuZ2V0KG5jdCwgbmN0KTtcbiAgICB9XG4gICAgaWYgKG0gPCBwKSB7XG4gICAgICBzW3AgLSAxXSA9IDA7XG4gICAgfVxuICAgIGlmIChucnQgKyAxIDwgcCkge1xuICAgICAgZVtucnRdID0gYS5nZXQobnJ0LCBwIC0gMSk7XG4gICAgfVxuICAgIGVbcCAtIDFdID0gMDtcblxuICAgIGlmICh3YW50dSkge1xuICAgICAgZm9yIChsZXQgaiA9IG5jdDsgaiA8IG51OyBqKyspIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICBVLnNldChpLCBqLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBVLnNldChqLCBqLCAxKTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGsgPSBuY3QgLSAxOyBrID49IDA7IGstLSkge1xuICAgICAgICBpZiAoc1trXSAhPT0gMCkge1xuICAgICAgICAgIGZvciAobGV0IGogPSBrICsgMTsgaiA8IG51OyBqKyspIHtcbiAgICAgICAgICAgIGxldCB0ID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBrOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgICAgICAgIHQgKz0gVS5nZXQoaSwgaykgKiBVLmdldChpLCBqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHQgPSAtdCAvIFUuZ2V0KGssIGspO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGs7IGkgPCBtOyBpKyspIHtcbiAgICAgICAgICAgICAgVS5zZXQoaSwgaiwgVS5nZXQoaSwgaikgKyB0ICogVS5nZXQoaSwgaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBpID0gazsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgVS5zZXQoaSwgaywgLVUuZ2V0KGksIGspKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgVS5zZXQoaywgaywgMSArIFUuZ2V0KGssIGspKTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGsgLSAxOyBpKyspIHtcbiAgICAgICAgICAgIFUuc2V0KGksIGssIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgVS5zZXQoaSwgaywgMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFUuc2V0KGssIGssIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdhbnR2KSB7XG4gICAgICBmb3IgKGxldCBrID0gbiAtIDE7IGsgPj0gMDsgay0tKSB7XG4gICAgICAgIGlmIChrIDwgbnJ0ICYmIGVba10gIT09IDApIHtcbiAgICAgICAgICBmb3IgKGxldCBqID0gayArIDE7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICAgIGxldCB0ID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBrICsgMTsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgICB0ICs9IFYuZ2V0KGksIGspICogVi5nZXQoaSwgaik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ID0gLXQgLyBWLmdldChrICsgMSwgayk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gayArIDE7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgICAgVi5zZXQoaSwgaiwgVi5nZXQoaSwgaikgKyB0ICogVi5nZXQoaSwgaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIFYuc2V0KGksIGssIDApO1xuICAgICAgICB9XG4gICAgICAgIFYuc2V0KGssIGssIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBwcCA9IHAgLSAxO1xuICAgIGxldCBpdGVyID0gMDtcbiAgICBsZXQgZXBzID0gTnVtYmVyLkVQU0lMT047XG4gICAgd2hpbGUgKHAgPiAwKSB7XG4gICAgICBsZXQgaywga2FzZTtcbiAgICAgIGZvciAoayA9IHAgLSAyOyBrID49IC0xOyBrLS0pIHtcbiAgICAgICAgaWYgKGsgPT09IC0xKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxwaGEgPVxuICAgICAgICAgIE51bWJlci5NSU5fVkFMVUUgKyBlcHMgKiBNYXRoLmFicyhzW2tdICsgTWF0aC5hYnMoc1trICsgMV0pKTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGVba10pIDw9IGFscGhhIHx8IE51bWJlci5pc05hTihlW2tdKSkge1xuICAgICAgICAgIGVba10gPSAwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoayA9PT0gcCAtIDIpIHtcbiAgICAgICAga2FzZSA9IDQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQga3M7XG4gICAgICAgIGZvciAoa3MgPSBwIC0gMTsga3MgPj0gazsga3MtLSkge1xuICAgICAgICAgIGlmIChrcyA9PT0gaykge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCB0ID1cbiAgICAgICAgICAgIChrcyAhPT0gcCA/IE1hdGguYWJzKGVba3NdKSA6IDApICtcbiAgICAgICAgICAgIChrcyAhPT0gayArIDEgPyBNYXRoLmFicyhlW2tzIC0gMV0pIDogMCk7XG4gICAgICAgICAgaWYgKE1hdGguYWJzKHNba3NdKSA8PSBlcHMgKiB0KSB7XG4gICAgICAgICAgICBzW2tzXSA9IDA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtzID09PSBrKSB7XG4gICAgICAgICAga2FzZSA9IDM7XG4gICAgICAgIH0gZWxzZSBpZiAoa3MgPT09IHAgLSAxKSB7XG4gICAgICAgICAga2FzZSA9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAga2FzZSA9IDI7XG4gICAgICAgICAgayA9IGtzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGsrKztcblxuICAgICAgc3dpdGNoIChrYXNlKSB7XG4gICAgICAgIGNhc2UgMToge1xuICAgICAgICAgIGxldCBmID0gZVtwIC0gMl07XG4gICAgICAgICAgZVtwIC0gMl0gPSAwO1xuICAgICAgICAgIGZvciAobGV0IGogPSBwIC0gMjsgaiA+PSBrOyBqLS0pIHtcbiAgICAgICAgICAgIGxldCB0ID0gaHlwb3RlbnVzZShzW2pdLCBmKTtcbiAgICAgICAgICAgIGxldCBjcyA9IHNbal0gLyB0O1xuICAgICAgICAgICAgbGV0IHNuID0gZiAvIHQ7XG4gICAgICAgICAgICBzW2pdID0gdDtcbiAgICAgICAgICAgIGlmIChqICE9PSBrKSB7XG4gICAgICAgICAgICAgIGYgPSAtc24gKiBlW2ogLSAxXTtcbiAgICAgICAgICAgICAgZVtqIC0gMV0gPSBjcyAqIGVbaiAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHdhbnR2KSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdCA9IGNzICogVi5nZXQoaSwgaikgKyBzbiAqIFYuZ2V0KGksIHAgLSAxKTtcbiAgICAgICAgICAgICAgICBWLnNldChpLCBwIC0gMSwgLXNuICogVi5nZXQoaSwgaikgKyBjcyAqIFYuZ2V0KGksIHAgLSAxKSk7XG4gICAgICAgICAgICAgICAgVi5zZXQoaSwgaiwgdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgbGV0IGYgPSBlW2sgLSAxXTtcbiAgICAgICAgICBlW2sgLSAxXSA9IDA7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IGs7IGogPCBwOyBqKyspIHtcbiAgICAgICAgICAgIGxldCB0ID0gaHlwb3RlbnVzZShzW2pdLCBmKTtcbiAgICAgICAgICAgIGxldCBjcyA9IHNbal0gLyB0O1xuICAgICAgICAgICAgbGV0IHNuID0gZiAvIHQ7XG4gICAgICAgICAgICBzW2pdID0gdDtcbiAgICAgICAgICAgIGYgPSAtc24gKiBlW2pdO1xuICAgICAgICAgICAgZVtqXSA9IGNzICogZVtqXTtcbiAgICAgICAgICAgIGlmICh3YW50dSkge1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgICAgIHQgPSBjcyAqIFUuZ2V0KGksIGopICsgc24gKiBVLmdldChpLCBrIC0gMSk7XG4gICAgICAgICAgICAgICAgVS5zZXQoaSwgayAtIDEsIC1zbiAqIFUuZ2V0KGksIGopICsgY3MgKiBVLmdldChpLCBrIC0gMSkpO1xuICAgICAgICAgICAgICAgIFUuc2V0KGksIGosIHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgIGNvbnN0IHNjYWxlID0gTWF0aC5tYXgoXG4gICAgICAgICAgICBNYXRoLmFicyhzW3AgLSAxXSksXG4gICAgICAgICAgICBNYXRoLmFicyhzW3AgLSAyXSksXG4gICAgICAgICAgICBNYXRoLmFicyhlW3AgLSAyXSksXG4gICAgICAgICAgICBNYXRoLmFicyhzW2tdKSxcbiAgICAgICAgICAgIE1hdGguYWJzKGVba10pLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgc3AgPSBzW3AgLSAxXSAvIHNjYWxlO1xuICAgICAgICAgIGNvbnN0IHNwbTEgPSBzW3AgLSAyXSAvIHNjYWxlO1xuICAgICAgICAgIGNvbnN0IGVwbTEgPSBlW3AgLSAyXSAvIHNjYWxlO1xuICAgICAgICAgIGNvbnN0IHNrID0gc1trXSAvIHNjYWxlO1xuICAgICAgICAgIGNvbnN0IGVrID0gZVtrXSAvIHNjYWxlO1xuICAgICAgICAgIGNvbnN0IGIgPSAoKHNwbTEgKyBzcCkgKiAoc3BtMSAtIHNwKSArIGVwbTEgKiBlcG0xKSAvIDI7XG4gICAgICAgICAgY29uc3QgYyA9IHNwICogZXBtMSAqIChzcCAqIGVwbTEpO1xuICAgICAgICAgIGxldCBzaGlmdCA9IDA7XG4gICAgICAgICAgaWYgKGIgIT09IDAgfHwgYyAhPT0gMCkge1xuICAgICAgICAgICAgaWYgKGIgPCAwKSB7XG4gICAgICAgICAgICAgIHNoaWZ0ID0gMCAtIE1hdGguc3FydChiICogYiArIGMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2hpZnQgPSBNYXRoLnNxcnQoYiAqIGIgKyBjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoaWZ0ID0gYyAvIChiICsgc2hpZnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgZiA9IChzayArIHNwKSAqIChzayAtIHNwKSArIHNoaWZ0O1xuICAgICAgICAgIGxldCBnID0gc2sgKiBlaztcbiAgICAgICAgICBmb3IgKGxldCBqID0gazsgaiA8IHAgLSAxOyBqKyspIHtcbiAgICAgICAgICAgIGxldCB0ID0gaHlwb3RlbnVzZShmLCBnKTtcbiAgICAgICAgICAgIGlmICh0ID09PSAwKSB0ID0gTnVtYmVyLk1JTl9WQUxVRTtcbiAgICAgICAgICAgIGxldCBjcyA9IGYgLyB0O1xuICAgICAgICAgICAgbGV0IHNuID0gZyAvIHQ7XG4gICAgICAgICAgICBpZiAoaiAhPT0gaykge1xuICAgICAgICAgICAgICBlW2ogLSAxXSA9IHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmID0gY3MgKiBzW2pdICsgc24gKiBlW2pdO1xuICAgICAgICAgICAgZVtqXSA9IGNzICogZVtqXSAtIHNuICogc1tqXTtcbiAgICAgICAgICAgIGcgPSBzbiAqIHNbaiArIDFdO1xuICAgICAgICAgICAgc1tqICsgMV0gPSBjcyAqIHNbaiArIDFdO1xuICAgICAgICAgICAgaWYgKHdhbnR2KSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdCA9IGNzICogVi5nZXQoaSwgaikgKyBzbiAqIFYuZ2V0KGksIGogKyAxKTtcbiAgICAgICAgICAgICAgICBWLnNldChpLCBqICsgMSwgLXNuICogVi5nZXQoaSwgaikgKyBjcyAqIFYuZ2V0KGksIGogKyAxKSk7XG4gICAgICAgICAgICAgICAgVi5zZXQoaSwgaiwgdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHQgPSBoeXBvdGVudXNlKGYsIGcpO1xuICAgICAgICAgICAgaWYgKHQgPT09IDApIHQgPSBOdW1iZXIuTUlOX1ZBTFVFO1xuICAgICAgICAgICAgY3MgPSBmIC8gdDtcbiAgICAgICAgICAgIHNuID0gZyAvIHQ7XG4gICAgICAgICAgICBzW2pdID0gdDtcbiAgICAgICAgICAgIGYgPSBjcyAqIGVbal0gKyBzbiAqIHNbaiArIDFdO1xuICAgICAgICAgICAgc1tqICsgMV0gPSAtc24gKiBlW2pdICsgY3MgKiBzW2ogKyAxXTtcbiAgICAgICAgICAgIGcgPSBzbiAqIGVbaiArIDFdO1xuICAgICAgICAgICAgZVtqICsgMV0gPSBjcyAqIGVbaiArIDFdO1xuICAgICAgICAgICAgaWYgKHdhbnR1ICYmIGogPCBtIC0gMSkge1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgICAgIHQgPSBjcyAqIFUuZ2V0KGksIGopICsgc24gKiBVLmdldChpLCBqICsgMSk7XG4gICAgICAgICAgICAgICAgVS5zZXQoaSwgaiArIDEsIC1zbiAqIFUuZ2V0KGksIGopICsgY3MgKiBVLmdldChpLCBqICsgMSkpO1xuICAgICAgICAgICAgICAgIFUuc2V0KGksIGosIHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVbcCAtIDJdID0gZjtcbiAgICAgICAgICBpdGVyID0gaXRlciArIDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSA0OiB7XG4gICAgICAgICAgaWYgKHNba10gPD0gMCkge1xuICAgICAgICAgICAgc1trXSA9IHNba10gPCAwID8gLXNba10gOiAwO1xuICAgICAgICAgICAgaWYgKHdhbnR2KSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHBwOyBpKyspIHtcbiAgICAgICAgICAgICAgICBWLnNldChpLCBrLCAtVi5nZXQoaSwgaykpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHdoaWxlIChrIDwgcHApIHtcbiAgICAgICAgICAgIGlmIChzW2tdID49IHNbayArIDFdKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHQgPSBzW2tdO1xuICAgICAgICAgICAgc1trXSA9IHNbayArIDFdO1xuICAgICAgICAgICAgc1trICsgMV0gPSB0O1xuICAgICAgICAgICAgaWYgKHdhbnR2ICYmIGsgPCBuIC0gMSkge1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgICAgIHQgPSBWLmdldChpLCBrICsgMSk7XG4gICAgICAgICAgICAgICAgVi5zZXQoaSwgayArIDEsIFYuZ2V0KGksIGspKTtcbiAgICAgICAgICAgICAgICBWLnNldChpLCBrLCB0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHdhbnR1ICYmIGsgPCBtIC0gMSkge1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgICAgICAgICAgIHQgPSBVLmdldChpLCBrICsgMSk7XG4gICAgICAgICAgICAgICAgVS5zZXQoaSwgayArIDEsIFUuZ2V0KGksIGspKTtcbiAgICAgICAgICAgICAgICBVLnNldChpLCBrLCB0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaysrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpdGVyID0gMDtcbiAgICAgICAgICBwLS07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm8gZGVmYXVsdFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzd2FwcGVkKSB7XG4gICAgICBsZXQgdG1wID0gVjtcbiAgICAgIFYgPSBVO1xuICAgICAgVSA9IHRtcDtcbiAgICB9XG5cbiAgICB0aGlzLm0gPSBtO1xuICAgIHRoaXMubiA9IG47XG4gICAgdGhpcy5zID0gcztcbiAgICB0aGlzLlUgPSBVO1xuICAgIHRoaXMuViA9IFY7XG4gIH1cblxuICBzb2x2ZSh2YWx1ZSkge1xuICAgIGxldCBZID0gdmFsdWU7XG4gICAgbGV0IGUgPSB0aGlzLnRocmVzaG9sZDtcbiAgICBsZXQgc2NvbHMgPSB0aGlzLnMubGVuZ3RoO1xuICAgIGxldCBMcyA9IE1hdHJpeC56ZXJvcyhzY29scywgc2NvbHMpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY29sczsgaSsrKSB7XG4gICAgICBpZiAoTWF0aC5hYnModGhpcy5zW2ldKSA8PSBlKSB7XG4gICAgICAgIExzLnNldChpLCBpLCAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIExzLnNldChpLCBpLCAxIC8gdGhpcy5zW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgVSA9IHRoaXMuVTtcbiAgICBsZXQgViA9IHRoaXMucmlnaHRTaW5ndWxhclZlY3RvcnM7XG5cbiAgICBsZXQgVkwgPSBWLm1tdWwoTHMpO1xuICAgIGxldCB2cm93cyA9IFYucm93cztcbiAgICBsZXQgdXJvd3MgPSBVLnJvd3M7XG4gICAgbGV0IFZMVSA9IE1hdHJpeC56ZXJvcyh2cm93cywgdXJvd3MpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2cm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHVyb3dzOyBqKyspIHtcbiAgICAgICAgbGV0IHN1bSA9IDA7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgc2NvbHM7IGsrKykge1xuICAgICAgICAgIHN1bSArPSBWTC5nZXQoaSwgaykgKiBVLmdldChqLCBrKTtcbiAgICAgICAgfVxuICAgICAgICBWTFUuc2V0KGksIGosIHN1bSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFZMVS5tbXVsKFkpO1xuICB9XG5cbiAgc29sdmVGb3JEaWFnb25hbCh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLnNvbHZlKE1hdHJpeC5kaWFnKHZhbHVlKSk7XG4gIH1cblxuICBpbnZlcnNlKCkge1xuICAgIGxldCBWID0gdGhpcy5WO1xuICAgIGxldCBlID0gdGhpcy50aHJlc2hvbGQ7XG4gICAgbGV0IHZyb3dzID0gVi5yb3dzO1xuICAgIGxldCB2Y29scyA9IFYuY29sdW1ucztcbiAgICBsZXQgWCA9IG5ldyBNYXRyaXgodnJvd3MsIHRoaXMucy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2cm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZjb2xzOyBqKyspIHtcbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMuc1tqXSkgPiBlKSB7XG4gICAgICAgICAgWC5zZXQoaSwgaiwgVi5nZXQoaSwgaikgLyB0aGlzLnNbal0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IFUgPSB0aGlzLlU7XG5cbiAgICBsZXQgdXJvd3MgPSBVLnJvd3M7XG4gICAgbGV0IHVjb2xzID0gVS5jb2x1bW5zO1xuICAgIGxldCBZID0gbmV3IE1hdHJpeCh2cm93cywgdXJvd3MpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2cm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHVyb3dzOyBqKyspIHtcbiAgICAgICAgbGV0IHN1bSA9IDA7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdWNvbHM7IGsrKykge1xuICAgICAgICAgIHN1bSArPSBYLmdldChpLCBrKSAqIFUuZ2V0KGosIGspO1xuICAgICAgICB9XG4gICAgICAgIFkuc2V0KGksIGosIHN1bSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFk7XG4gIH1cblxuICBnZXQgY29uZGl0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNbMF0gLyB0aGlzLnNbTWF0aC5taW4odGhpcy5tLCB0aGlzLm4pIC0gMV07XG4gIH1cblxuICBnZXQgbm9ybTIoKSB7XG4gICAgcmV0dXJuIHRoaXMuc1swXTtcbiAgfVxuXG4gIGdldCByYW5rKCkge1xuICAgIGxldCB0b2wgPSBNYXRoLm1heCh0aGlzLm0sIHRoaXMubikgKiB0aGlzLnNbMF0gKiBOdW1iZXIuRVBTSUxPTjtcbiAgICBsZXQgciA9IDA7XG4gICAgbGV0IHMgPSB0aGlzLnM7XG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBpZiAoc1tpXSA+IHRvbCkge1xuICAgICAgICByKys7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG5cbiAgZ2V0IGRpYWdvbmFsKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucyk7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCkge1xuICAgIHJldHVybiAoTnVtYmVyLkVQU0lMT04gLyAyKSAqIE1hdGgubWF4KHRoaXMubSwgdGhpcy5uKSAqIHRoaXMuc1swXTtcbiAgfVxuXG4gIGdldCBsZWZ0U2luZ3VsYXJWZWN0b3JzKCkge1xuICAgIHJldHVybiB0aGlzLlU7XG4gIH1cblxuICBnZXQgcmlnaHRTaW5ndWxhclZlY3RvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuVjtcbiAgfVxuXG4gIGdldCBkaWFnb25hbE1hdHJpeCgpIHtcbiAgICByZXR1cm4gTWF0cml4LmRpYWcodGhpcy5zKTtcbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGh5cG90ZW51c2UoYSwgYikge1xuICBsZXQgciA9IDA7XG4gIGlmIChNYXRoLmFicyhhKSA+IE1hdGguYWJzKGIpKSB7XG4gICAgciA9IGIgLyBhO1xuICAgIHJldHVybiBNYXRoLmFicyhhKSAqIE1hdGguc3FydCgxICsgciAqIHIpO1xuICB9XG4gIGlmIChiICE9PSAwKSB7XG4gICAgciA9IGEgLyBiO1xuICAgIHJldHVybiBNYXRoLmFicyhiKSAqIE1hdGguc3FydCgxICsgciAqIHIpO1xuICB9XG4gIHJldHVybiAwO1xufVxuIiwiaW1wb3J0IEx1RGVjb21wb3NpdGlvbiBmcm9tICcuL2RjL2x1JztcbmltcG9ydCBRckRlY29tcG9zaXRpb24gZnJvbSAnLi9kYy9xcic7XG5pbXBvcnQgU2luZ3VsYXJWYWx1ZURlY29tcG9zaXRpb24gZnJvbSAnLi9kYy9zdmQnO1xuaW1wb3J0IE1hdHJpeCBmcm9tICcuL21hdHJpeCc7XG5pbXBvcnQgV3JhcHBlck1hdHJpeDJEIGZyb20gJy4vd3JhcC9XcmFwcGVyTWF0cml4MkQnO1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShtYXRyaXgsIHVzZVNWRCA9IGZhbHNlKSB7XG4gIG1hdHJpeCA9IFdyYXBwZXJNYXRyaXgyRC5jaGVja01hdHJpeChtYXRyaXgpO1xuICBpZiAodXNlU1ZEKSB7XG4gICAgcmV0dXJuIG5ldyBTaW5ndWxhclZhbHVlRGVjb21wb3NpdGlvbihtYXRyaXgpLmludmVyc2UoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc29sdmUobWF0cml4LCBNYXRyaXguZXllKG1hdHJpeC5yb3dzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbHZlKGxlZnRIYW5kU2lkZSwgcmlnaHRIYW5kU2lkZSwgdXNlU1ZEID0gZmFsc2UpIHtcbiAgbGVmdEhhbmRTaWRlID0gV3JhcHBlck1hdHJpeDJELmNoZWNrTWF0cml4KGxlZnRIYW5kU2lkZSk7XG4gIHJpZ2h0SGFuZFNpZGUgPSBXcmFwcGVyTWF0cml4MkQuY2hlY2tNYXRyaXgocmlnaHRIYW5kU2lkZSk7XG4gIGlmICh1c2VTVkQpIHtcbiAgICByZXR1cm4gbmV3IFNpbmd1bGFyVmFsdWVEZWNvbXBvc2l0aW9uKGxlZnRIYW5kU2lkZSkuc29sdmUocmlnaHRIYW5kU2lkZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxlZnRIYW5kU2lkZS5pc1NxdWFyZSgpXG4gICAgICA/IG5ldyBMdURlY29tcG9zaXRpb24obGVmdEhhbmRTaWRlKS5zb2x2ZShyaWdodEhhbmRTaWRlKVxuICAgICAgOiBuZXcgUXJEZWNvbXBvc2l0aW9uKGxlZnRIYW5kU2lkZSkuc29sdmUocmlnaHRIYW5kU2lkZSk7XG4gIH1cbn1cbiIsImNvbnN0IGluZGVudCA9ICcgJy5yZXBlYXQoMik7XG5jb25zdCBpbmRlbnREYXRhID0gJyAnLnJlcGVhdCg0KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluc3BlY3RNYXRyaXgoKSB7XG4gIHJldHVybiBpbnNwZWN0TWF0cml4V2l0aE9wdGlvbnModGhpcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNwZWN0TWF0cml4V2l0aE9wdGlvbnMobWF0cml4LCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyBtYXhSb3dzID0gMTUsIG1heENvbHVtbnMgPSAxMCwgbWF4TnVtU2l6ZSA9IDggfSA9IG9wdGlvbnM7XG4gIHJldHVybiBgJHttYXRyaXguY29uc3RydWN0b3IubmFtZX0ge1xuJHtpbmRlbnR9W1xuJHtpbmRlbnREYXRhfSR7aW5zcGVjdERhdGEobWF0cml4LCBtYXhSb3dzLCBtYXhDb2x1bW5zLCBtYXhOdW1TaXplKX1cbiR7aW5kZW50fV1cbiR7aW5kZW50fXJvd3M6ICR7bWF0cml4LnJvd3N9XG4ke2luZGVudH1jb2x1bW5zOiAke21hdHJpeC5jb2x1bW5zfVxufWA7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3REYXRhKG1hdHJpeCwgbWF4Um93cywgbWF4Q29sdW1ucywgbWF4TnVtU2l6ZSkge1xuICBjb25zdCB7IHJvd3MsIGNvbHVtbnMgfSA9IG1hdHJpeDtcbiAgY29uc3QgbWF4SSA9IE1hdGgubWluKHJvd3MsIG1heFJvd3MpO1xuICBjb25zdCBtYXhKID0gTWF0aC5taW4oY29sdW1ucywgbWF4Q29sdW1ucyk7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1heEk7IGkrKykge1xuICAgIGxldCBsaW5lID0gW107XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXhKOyBqKyspIHtcbiAgICAgIGxpbmUucHVzaChmb3JtYXROdW1iZXIobWF0cml4LmdldChpLCBqKSwgbWF4TnVtU2l6ZSkpO1xuICAgIH1cbiAgICByZXN1bHQucHVzaChgJHtsaW5lLmpvaW4oJyAnKX1gKTtcbiAgfVxuICBpZiAobWF4SiAhPT0gY29sdW1ucykge1xuICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gKz0gYCAuLi4gJHtjb2x1bW5zIC0gbWF4Q29sdW1uc30gbW9yZSBjb2x1bW5zYDtcbiAgfVxuICBpZiAobWF4SSAhPT0gcm93cykge1xuICAgIHJlc3VsdC5wdXNoKGAuLi4gJHtyb3dzIC0gbWF4Um93c30gbW9yZSByb3dzYCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5qb2luKGBcXG4ke2luZGVudERhdGF9YCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE51bWJlcihudW0sIG1heE51bVNpemUpIHtcbiAgY29uc3QgbnVtU3RyID0gU3RyaW5nKG51bSk7XG4gIGlmIChudW1TdHIubGVuZ3RoIDw9IG1heE51bVNpemUpIHtcbiAgICByZXR1cm4gbnVtU3RyLnBhZEVuZChtYXhOdW1TaXplLCAnICcpO1xuICB9XG4gIGNvbnN0IHByZWNpc2UgPSBudW0udG9QcmVjaXNpb24obWF4TnVtU2l6ZSAtIDIpO1xuICBpZiAocHJlY2lzZS5sZW5ndGggPD0gbWF4TnVtU2l6ZSkge1xuICAgIHJldHVybiBwcmVjaXNlO1xuICB9XG4gIGNvbnN0IGV4cG9uZW50aWFsID0gbnVtLnRvRXhwb25lbnRpYWwobWF4TnVtU2l6ZSAtIDIpO1xuICBjb25zdCBlSW5kZXggPSBleHBvbmVudGlhbC5pbmRleE9mKCdlJyk7XG4gIGNvbnN0IGUgPSBleHBvbmVudGlhbC5zbGljZShlSW5kZXgpO1xuICByZXR1cm4gZXhwb25lbnRpYWwuc2xpY2UoMCwgbWF4TnVtU2l6ZSAtIGUubGVuZ3RoKSArIGU7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gaW5zdGFsbE1hdGhPcGVyYXRpb25zKEFic3RyYWN0TWF0cml4LCBNYXRyaXgpIHtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5hZGRTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5hZGRNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYWRkUyA9IGZ1bmN0aW9uIGFkZFModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICsgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYWRkTSA9IGZ1bmN0aW9uIGFkZE0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSArIG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5hZGQgPSBmdW5jdGlvbiBhZGQobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmFkZCh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnN1YiA9IGZ1bmN0aW9uIHN1Yih2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5zdWJTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5zdWJNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3ViUyA9IGZ1bmN0aW9uIHN1YlModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC0gdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3ViTSA9IGZ1bmN0aW9uIHN1Yk0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAtIG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5zdWIgPSBmdW5jdGlvbiBzdWIobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnN1Yih2YWx1ZSk7XG4gIH07XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zdWJ0cmFjdCA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zdWI7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zdWJ0cmFjdFMgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3ViUztcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnN1YnRyYWN0TSA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zdWJNO1xuICBBYnN0cmFjdE1hdHJpeC5zdWJ0cmFjdCA9IEFic3RyYWN0TWF0cml4LnN1YjtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLm11bFModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLm11bE0odmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tdWxTID0gZnVuY3Rpb24gbXVsUyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgKiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tdWxNID0gZnVuY3Rpb24gbXVsTShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICogbWF0cml4LmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4Lm11bCA9IGZ1bmN0aW9uIG11bChtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubXVsKHZhbHVlKTtcbiAgfTtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm11bHRpcGx5ID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm11bDtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm11bHRpcGx5UyA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tdWxTO1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubXVsdGlwbHlNID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm11bE07XG4gIEFic3RyYWN0TWF0cml4Lm11bHRpcGx5ID0gQWJzdHJhY3RNYXRyaXgubXVsO1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5kaXYgPSBmdW5jdGlvbiBkaXYodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMuZGl2Uyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMuZGl2TSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdlMgPSBmdW5jdGlvbiBkaXZTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAvIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdk0gPSBmdW5jdGlvbiBkaXZNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgLyBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguZGl2ID0gZnVuY3Rpb24gZGl2KG1hdHJpeCwgdmFsdWUpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5kaXYodmFsdWUpO1xuICB9O1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZGl2aWRlID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdjtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdmlkZVMgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZGl2UztcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpdmlkZU0gPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZGl2TTtcbiAgQWJzdHJhY3RNYXRyaXguZGl2aWRlID0gQWJzdHJhY3RNYXRyaXguZGl2O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tb2QgPSBmdW5jdGlvbiBtb2QodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMubW9kUyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMubW9kTSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm1vZFMgPSBmdW5jdGlvbiBtb2RTKHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAlIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm1vZE0gPSBmdW5jdGlvbiBtb2RNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgJSBtYXRyaXguZ2V0KGksIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgubW9kID0gZnVuY3Rpb24gbW9kKG1hdHJpeCwgdmFsdWUpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5tb2QodmFsdWUpO1xuICB9O1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubW9kdWx1cyA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tb2Q7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tb2R1bHVzUyA9IEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5tb2RTO1xuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubW9kdWx1c00gPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubW9kTTtcbiAgQWJzdHJhY3RNYXRyaXgubW9kdWx1cyA9IEFic3RyYWN0TWF0cml4Lm1vZDtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYW5kID0gZnVuY3Rpb24gYW5kKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLmFuZFModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLmFuZE0odmFsdWUpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hbmRTID0gZnVuY3Rpb24gYW5kUyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgJiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hbmRNID0gZnVuY3Rpb24gYW5kTShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICYgbWF0cml4LmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmFuZCA9IGZ1bmN0aW9uIGFuZChtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguYW5kKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUub3IgPSBmdW5jdGlvbiBvcih2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5vclModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLm9yTSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLm9yUyA9IGZ1bmN0aW9uIG9yUyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgfCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5vck0gPSBmdW5jdGlvbiBvck0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSB8IG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5vciA9IGZ1bmN0aW9uIG9yKG1hdHJpeCwgdmFsdWUpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5vcih2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnhvciA9IGZ1bmN0aW9uIHhvcih2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy54b3JTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy54b3JNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUueG9yUyA9IGZ1bmN0aW9uIHhvclModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIF4gdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUueG9yTSA9IGZ1bmN0aW9uIHhvck0obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSBeIG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC54b3IgPSBmdW5jdGlvbiB4b3IobWF0cml4LCB2YWx1ZSkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4Lnhvcih2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmxlZnRTaGlmdCA9IGZ1bmN0aW9uIGxlZnRTaGlmdCh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5sZWZ0U2hpZnRTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5sZWZ0U2hpZnRNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubGVmdFNoaWZ0UyA9IGZ1bmN0aW9uIGxlZnRTaGlmdFModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIDw8IHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmxlZnRTaGlmdE0gPSBmdW5jdGlvbiBsZWZ0U2hpZnRNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgPDwgbWF0cml4LmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmxlZnRTaGlmdCA9IGZ1bmN0aW9uIGxlZnRTaGlmdChtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubGVmdFNoaWZ0KHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdCA9IGZ1bmN0aW9uIHNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnQodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdFModmFsdWUpO1xuICAgIHJldHVybiB0aGlzLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdFMgPSBmdW5jdGlvbiBzaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0Uyh2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgPj4gdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdE0gPSBmdW5jdGlvbiBzaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0TShtYXRyaXgpIHtcbiAgICBtYXRyaXggPSBNYXRyaXguY2hlY2tNYXRyaXgobWF0cml4KTtcbiAgICBpZiAodGhpcy5yb3dzICE9PSBtYXRyaXgucm93cyB8fFxuICAgICAgdGhpcy5jb2x1bW5zICE9PSBtYXRyaXguY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopID4+IG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5zaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0ID0gZnVuY3Rpb24gc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdChtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdCh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnJpZ2h0U2hpZnQgPSBmdW5jdGlvbiByaWdodFNoaWZ0KHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLnJpZ2h0U2hpZnRTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5yaWdodFNoaWZ0TSh2YWx1ZSk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnJpZ2h0U2hpZnRTID0gZnVuY3Rpb24gcmlnaHRTaGlmdFModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopID4+PiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5yaWdodFNoaWZ0TSA9IGZ1bmN0aW9uIHJpZ2h0U2hpZnRNKG1hdHJpeCkge1xuICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpO1xuICAgIGlmICh0aGlzLnJvd3MgIT09IG1hdHJpeC5yb3dzIHx8XG4gICAgICB0aGlzLmNvbHVtbnMgIT09IG1hdHJpeC5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgPj4+IG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5yaWdodFNoaWZ0ID0gZnVuY3Rpb24gcmlnaHRTaGlmdChtYXRyaXgsIHZhbHVlKSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgucmlnaHRTaGlmdCh2YWx1ZSk7XG4gIH07XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS56ZXJvRmlsbFJpZ2h0U2hpZnQgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUucmlnaHRTaGlmdDtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnplcm9GaWxsUmlnaHRTaGlmdFMgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUucmlnaHRTaGlmdFM7XG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS56ZXJvRmlsbFJpZ2h0U2hpZnRNID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnJpZ2h0U2hpZnRNO1xuICBBYnN0cmFjdE1hdHJpeC56ZXJvRmlsbFJpZ2h0U2hpZnQgPSBBYnN0cmFjdE1hdHJpeC5yaWdodFNoaWZ0O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5ub3QgPSBmdW5jdGlvbiBub3QoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCB+KHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4Lm5vdCA9IGZ1bmN0aW9uIG5vdChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5ub3QoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYWJzID0gZnVuY3Rpb24gYWJzKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5hYnModGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguYWJzID0gZnVuY3Rpb24gYWJzKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmFicygpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hY29zID0gZnVuY3Rpb24gYWNvcygpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguYWNvcyh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5hY29zID0gZnVuY3Rpb24gYWNvcyhtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5hY29zKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmFjb3NoID0gZnVuY3Rpb24gYWNvc2goKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmFjb3NoKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmFjb3NoID0gZnVuY3Rpb24gYWNvc2gobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguYWNvc2goKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYXNpbiA9IGZ1bmN0aW9uIGFzaW4oKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmFzaW4odGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguYXNpbiA9IGZ1bmN0aW9uIGFzaW4obWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguYXNpbigpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5hc2luaCA9IGZ1bmN0aW9uIGFzaW5oKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5hc2luaCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5hc2luaCA9IGZ1bmN0aW9uIGFzaW5oKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmFzaW5oKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmF0YW4gPSBmdW5jdGlvbiBhdGFuKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5hdGFuKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmF0YW4gPSBmdW5jdGlvbiBhdGFuKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmF0YW4oKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuYXRhbmggPSBmdW5jdGlvbiBhdGFuaCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguYXRhbmgodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguYXRhbmggPSBmdW5jdGlvbiBhdGFuaChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5hdGFuaCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5jYnJ0ID0gZnVuY3Rpb24gY2JydCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguY2JydCh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5jYnJ0ID0gZnVuY3Rpb24gY2JydChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5jYnJ0KCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmNlaWwgPSBmdW5jdGlvbiBjZWlsKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5jZWlsKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmNlaWwgPSBmdW5jdGlvbiBjZWlsKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmNlaWwoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuY2x6MzIgPSBmdW5jdGlvbiBjbHozMigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGguY2x6MzIodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguY2x6MzIgPSBmdW5jdGlvbiBjbHozMihtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5jbHozMigpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5jb3MgPSBmdW5jdGlvbiBjb3MoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmNvcyh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5jb3MgPSBmdW5jdGlvbiBjb3MobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguY29zKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmNvc2ggPSBmdW5jdGlvbiBjb3NoKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5jb3NoKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmNvc2ggPSBmdW5jdGlvbiBjb3NoKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmNvc2goKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZXhwID0gZnVuY3Rpb24gZXhwKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5leHAodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguZXhwID0gZnVuY3Rpb24gZXhwKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmV4cCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5leHBtMSA9IGZ1bmN0aW9uIGV4cG0xKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5leHBtMSh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5leHBtMSA9IGZ1bmN0aW9uIGV4cG0xKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmV4cG0xKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmZsb29yID0gZnVuY3Rpb24gZmxvb3IoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmZsb29yKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmZsb29yID0gZnVuY3Rpb24gZmxvb3IobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguZmxvb3IoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuZnJvdW5kID0gZnVuY3Rpb24gZnJvdW5kKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5mcm91bmQodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguZnJvdW5kID0gZnVuY3Rpb24gZnJvdW5kKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LmZyb3VuZCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5sb2cgPSBmdW5jdGlvbiBsb2coKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmxvZyh0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5sb2cgPSBmdW5jdGlvbiBsb2cobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubG9nKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmxvZzFwID0gZnVuY3Rpb24gbG9nMXAoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLmxvZzFwKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LmxvZzFwID0gZnVuY3Rpb24gbG9nMXAobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgubG9nMXAoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubG9nMTAgPSBmdW5jdGlvbiBsb2cxMCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGgubG9nMTAodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgubG9nMTAgPSBmdW5jdGlvbiBsb2cxMChtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5sb2cxMCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5sb2cyID0gZnVuY3Rpb24gbG9nMigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGgubG9nMih0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5sb2cyID0gZnVuY3Rpb24gbG9nMihtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5sb2cyKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnJvdW5kID0gZnVuY3Rpb24gcm91bmQoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnJvdW5kKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnJvdW5kID0gZnVuY3Rpb24gcm91bmQobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgucm91bmQoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc2lnbiA9IGZ1bmN0aW9uIHNpZ24oKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnNpZ24odGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguc2lnbiA9IGZ1bmN0aW9uIHNpZ24obWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguc2lnbigpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5zaW4gPSBmdW5jdGlvbiBzaW4oKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnNpbih0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5zaW4gPSBmdW5jdGlvbiBzaW4obWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguc2luKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnNpbmggPSBmdW5jdGlvbiBzaW5oKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC5zaW5oKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnNpbmggPSBmdW5jdGlvbiBzaW5oKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnNpbmgoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUuc3FydCA9IGZ1bmN0aW9uIHNxcnQoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnNxcnQodGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXguc3FydCA9IGZ1bmN0aW9uIHNxcnQobWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXguc3FydCgpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnByb3RvdHlwZS50YW4gPSBmdW5jdGlvbiB0YW4oKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnRhbih0aGlzLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC50YW4gPSBmdW5jdGlvbiB0YW4obWF0cml4KSB7XG4gICAgY29uc3QgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChtYXRyaXgpO1xuICAgIHJldHVybiBuZXdNYXRyaXgudGFuKCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnRhbmggPSBmdW5jdGlvbiB0YW5oKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoaSwgaiwgTWF0aC50YW5oKHRoaXMuZ2V0KGksIGopKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnRhbmggPSBmdW5jdGlvbiB0YW5oKG1hdHJpeCkge1xuICAgIGNvbnN0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgobWF0cml4KTtcbiAgICByZXR1cm4gbmV3TWF0cml4LnRhbmgoKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUudHJ1bmMgPSBmdW5jdGlvbiB0cnVuYygpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGgudHJ1bmModGhpcy5nZXQoaSwgaikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgudHJ1bmMgPSBmdW5jdGlvbiB0cnVuYyhtYXRyaXgpIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC50cnVuYygpO1xuICB9O1xuXG4gIEFic3RyYWN0TWF0cml4LnBvdyA9IGZ1bmN0aW9uIHBvdyhtYXRyaXgsIGFyZzApIHtcbiAgICBjb25zdCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KG1hdHJpeCk7XG4gICAgcmV0dXJuIG5ld01hdHJpeC5wb3coYXJnMCk7XG4gIH07XG5cbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnBvdyA9IGZ1bmN0aW9uIHBvdyh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5wb3dTKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5wb3dNKHZhbHVlKTtcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUucG93UyA9IGZ1bmN0aW9uIHBvd1ModmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIE1hdGgucG93KHRoaXMuZ2V0KGksIGopLCB2YWx1ZSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUucG93TSA9IGZ1bmN0aW9uIHBvd00obWF0cml4KSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKHRoaXMucm93cyAhPT0gbWF0cml4LnJvd3MgfHxcbiAgICAgIHRoaXMuY29sdW1ucyAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICB0aGlzLnNldChpLCBqLCBNYXRoLnBvdyh0aGlzLmdldChpLCBqKSwgbWF0cml4LmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbn1cbiIsImltcG9ydCByZXNjYWxlIGZyb20gJ21sLWFycmF5LXJlc2NhbGUnO1xuXG5pbXBvcnQgeyBpbnNwZWN0TWF0cml4LCBpbnNwZWN0TWF0cml4V2l0aE9wdGlvbnMgfSBmcm9tICcuL2luc3BlY3QnO1xuaW1wb3J0IHsgaW5zdGFsbE1hdGhPcGVyYXRpb25zIH0gZnJvbSAnLi9tYXRoT3BlcmF0aW9ucyc7XG5pbXBvcnQge1xuICBzdW1CeVJvdyxcbiAgc3VtQnlDb2x1bW4sXG4gIHN1bUFsbCxcbiAgcHJvZHVjdEJ5Um93LFxuICBwcm9kdWN0QnlDb2x1bW4sXG4gIHByb2R1Y3RBbGwsXG4gIHZhcmlhbmNlQnlSb3csXG4gIHZhcmlhbmNlQnlDb2x1bW4sXG4gIHZhcmlhbmNlQWxsLFxuICBjZW50ZXJCeVJvdyxcbiAgY2VudGVyQnlDb2x1bW4sXG4gIGNlbnRlckFsbCxcbiAgc2NhbGVCeVJvdyxcbiAgc2NhbGVCeUNvbHVtbixcbiAgc2NhbGVBbGwsXG4gIGdldFNjYWxlQnlSb3csXG4gIGdldFNjYWxlQnlDb2x1bW4sXG4gIGdldFNjYWxlQWxsLFxufSBmcm9tICcuL3N0YXQnO1xuaW1wb3J0IHtcbiAgY2hlY2tSb3dWZWN0b3IsXG4gIGNoZWNrUm93SW5kZXgsXG4gIGNoZWNrQ29sdW1uSW5kZXgsXG4gIGNoZWNrQ29sdW1uVmVjdG9yLFxuICBjaGVja1JhbmdlLFxuICBjaGVja0luZGljZXMsXG4gIGNoZWNrTm9uRW1wdHksXG59IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdE1hdHJpeCB7XG4gIHN0YXRpYyBmcm9tMURBcnJheShuZXdSb3dzLCBuZXdDb2x1bW5zLCBuZXdEYXRhKSB7XG4gICAgbGV0IGxlbmd0aCA9IG5ld1Jvd3MgKiBuZXdDb2x1bW5zO1xuICAgIGlmIChsZW5ndGggIT09IG5ld0RhdGEubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZGF0YSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggZ2l2ZW4gZGltZW5zaW9ucycpO1xuICAgIH1cbiAgICBsZXQgbmV3TWF0cml4ID0gbmV3IE1hdHJpeChuZXdSb3dzLCBuZXdDb2x1bW5zKTtcbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBuZXdSb3dzOyByb3crKykge1xuICAgICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgbmV3Q29sdW1uczsgY29sdW1uKyspIHtcbiAgICAgICAgbmV3TWF0cml4LnNldChyb3csIGNvbHVtbiwgbmV3RGF0YVtyb3cgKiBuZXdDb2x1bW5zICsgY29sdW1uXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdNYXRyaXg7XG4gIH1cblxuICBzdGF0aWMgcm93VmVjdG9yKG5ld0RhdGEpIHtcbiAgICBsZXQgdmVjdG9yID0gbmV3IE1hdHJpeCgxLCBuZXdEYXRhLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2ZWN0b3Iuc2V0KDAsIGksIG5ld0RhdGFbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gdmVjdG9yO1xuICB9XG5cbiAgc3RhdGljIGNvbHVtblZlY3RvcihuZXdEYXRhKSB7XG4gICAgbGV0IHZlY3RvciA9IG5ldyBNYXRyaXgobmV3RGF0YS5sZW5ndGgsIDEpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3RGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgdmVjdG9yLnNldChpLCAwLCBuZXdEYXRhW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHZlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyB6ZXJvcyhyb3dzLCBjb2x1bW5zKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRyaXgocm93cywgY29sdW1ucyk7XG4gIH1cblxuICBzdGF0aWMgb25lcyhyb3dzLCBjb2x1bW5zKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRyaXgocm93cywgY29sdW1ucykuZmlsbCgxKTtcbiAgfVxuXG4gIHN0YXRpYyByYW5kKHJvd3MsIGNvbHVtbnMsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgeyByYW5kb20gPSBNYXRoLnJhbmRvbSB9ID0gb3B0aW9ucztcbiAgICBsZXQgbWF0cml4ID0gbmV3IE1hdHJpeChyb3dzLCBjb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgbWF0cml4LnNldChpLCBqLCByYW5kb20oKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cblxuICBzdGF0aWMgcmFuZEludChyb3dzLCBjb2x1bW5zLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHsgbWluID0gMCwgbWF4ID0gMTAwMCwgcmFuZG9tID0gTWF0aC5yYW5kb20gfSA9IG9wdGlvbnM7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1pbikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pbiBtdXN0IGJlIGFuIGludGVnZXInKTtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobWF4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignbWF4IG11c3QgYmUgYW4gaW50ZWdlcicpO1xuICAgIGlmIChtaW4gPj0gbWF4KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluIG11c3QgYmUgc21hbGxlciB0aGFuIG1heCcpO1xuICAgIGxldCBpbnRlcnZhbCA9IG1heCAtIG1pbjtcbiAgICBsZXQgbWF0cml4ID0gbmV3IE1hdHJpeChyb3dzLCBjb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgbGV0IHZhbHVlID0gbWluICsgTWF0aC5yb3VuZChyYW5kb20oKSAqIGludGVydmFsKTtcbiAgICAgICAgbWF0cml4LnNldChpLCBqLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cblxuICBzdGF0aWMgZXllKHJvd3MsIGNvbHVtbnMsIHZhbHVlKSB7XG4gICAgaWYgKGNvbHVtbnMgPT09IHVuZGVmaW5lZCkgY29sdW1ucyA9IHJvd3M7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHZhbHVlID0gMTtcbiAgICBsZXQgbWluID0gTWF0aC5taW4ocm93cywgY29sdW1ucyk7XG4gICAgbGV0IG1hdHJpeCA9IHRoaXMuemVyb3Mocm93cywgY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaW47IGkrKykge1xuICAgICAgbWF0cml4LnNldChpLCBpLCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cblxuICBzdGF0aWMgZGlhZyhkYXRhLCByb3dzLCBjb2x1bW5zKSB7XG4gICAgbGV0IGwgPSBkYXRhLmxlbmd0aDtcbiAgICBpZiAocm93cyA9PT0gdW5kZWZpbmVkKSByb3dzID0gbDtcbiAgICBpZiAoY29sdW1ucyA9PT0gdW5kZWZpbmVkKSBjb2x1bW5zID0gcm93cztcbiAgICBsZXQgbWluID0gTWF0aC5taW4obCwgcm93cywgY29sdW1ucyk7XG4gICAgbGV0IG1hdHJpeCA9IHRoaXMuemVyb3Mocm93cywgY29sdW1ucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaW47IGkrKykge1xuICAgICAgbWF0cml4LnNldChpLCBpLCBkYXRhW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeDtcbiAgfVxuXG4gIHN0YXRpYyBtaW4obWF0cml4MSwgbWF0cml4Mikge1xuICAgIG1hdHJpeDEgPSB0aGlzLmNoZWNrTWF0cml4KG1hdHJpeDEpO1xuICAgIG1hdHJpeDIgPSB0aGlzLmNoZWNrTWF0cml4KG1hdHJpeDIpO1xuICAgIGxldCByb3dzID0gbWF0cml4MS5yb3dzO1xuICAgIGxldCBjb2x1bW5zID0gbWF0cml4MS5jb2x1bW5zO1xuICAgIGxldCByZXN1bHQgPSBuZXcgTWF0cml4KHJvd3MsIGNvbHVtbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICByZXN1bHQuc2V0KGksIGosIE1hdGgubWluKG1hdHJpeDEuZ2V0KGksIGopLCBtYXRyaXgyLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIG1heChtYXRyaXgxLCBtYXRyaXgyKSB7XG4gICAgbWF0cml4MSA9IHRoaXMuY2hlY2tNYXRyaXgobWF0cml4MSk7XG4gICAgbWF0cml4MiA9IHRoaXMuY2hlY2tNYXRyaXgobWF0cml4Mik7XG4gICAgbGV0IHJvd3MgPSBtYXRyaXgxLnJvd3M7XG4gICAgbGV0IGNvbHVtbnMgPSBtYXRyaXgxLmNvbHVtbnM7XG4gICAgbGV0IHJlc3VsdCA9IG5ldyB0aGlzKHJvd3MsIGNvbHVtbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICByZXN1bHQuc2V0KGksIGosIE1hdGgubWF4KG1hdHJpeDEuZ2V0KGksIGopLCBtYXRyaXgyLmdldChpLCBqKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIGNoZWNrTWF0cml4KHZhbHVlKSB7XG4gICAgcmV0dXJuIEFic3RyYWN0TWF0cml4LmlzTWF0cml4KHZhbHVlKSA/IHZhbHVlIDogbmV3IE1hdHJpeCh2YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgaXNNYXRyaXgodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5rbGFzcyA9PT0gJ01hdHJpeCc7XG4gIH1cblxuICBnZXQgc2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzICogdGhpcy5jb2x1bW5zO1xuICB9XG5cbiAgYXBwbHkoY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGksIGopO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRvMURBcnJheSgpIHtcbiAgICBsZXQgYXJyYXkgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIGFycmF5LnB1c2godGhpcy5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICB0bzJEQXJyYXkoKSB7XG4gICAgbGV0IGNvcHkgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBjb3B5LnB1c2goW10pO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBjb3B5W2ldLnB1c2godGhpcy5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29weTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50bzJEQXJyYXkoKTtcbiAgfVxuXG4gIGlzUm93VmVjdG9yKCkge1xuICAgIHJldHVybiB0aGlzLnJvd3MgPT09IDE7XG4gIH1cblxuICBpc0NvbHVtblZlY3RvcigpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zID09PSAxO1xuICB9XG5cbiAgaXNWZWN0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMucm93cyA9PT0gMSB8fCB0aGlzLmNvbHVtbnMgPT09IDE7XG4gIH1cblxuICBpc1NxdWFyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzID09PSB0aGlzLmNvbHVtbnM7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnJvd3MgPT09IDAgfHwgdGhpcy5jb2x1bW5zID09PSAwO1xuICB9XG5cbiAgaXNTeW1tZXRyaWMoKSB7XG4gICAgaWYgKHRoaXMuaXNTcXVhcmUoKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8PSBpOyBqKyspIHtcbiAgICAgICAgICBpZiAodGhpcy5nZXQoaSwgaikgIT09IHRoaXMuZ2V0KGosIGkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaXNFY2hlbG9uRm9ybSgpIHtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGogPSAwO1xuICAgIGxldCBwcmV2aW91c0NvbHVtbiA9IC0xO1xuICAgIGxldCBpc0VjaGVsb25Gb3JtID0gdHJ1ZTtcbiAgICBsZXQgY2hlY2tlZCA9IGZhbHNlO1xuICAgIHdoaWxlIChpIDwgdGhpcy5yb3dzICYmIGlzRWNoZWxvbkZvcm0pIHtcbiAgICAgIGogPSAwO1xuICAgICAgY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgd2hpbGUgKGogPCB0aGlzLmNvbHVtbnMgJiYgY2hlY2tlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0KGksIGopID09PSAwKSB7XG4gICAgICAgICAgaisrO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0KGksIGopID09PSAxICYmIGogPiBwcmV2aW91c0NvbHVtbikge1xuICAgICAgICAgIGNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgIHByZXZpb3VzQ29sdW1uID0gajtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpc0VjaGVsb25Gb3JtID0gZmFsc2U7XG4gICAgICAgICAgY2hlY2tlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIGlzRWNoZWxvbkZvcm07XG4gIH1cblxuICBpc1JlZHVjZWRFY2hlbG9uRm9ybSgpIHtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGogPSAwO1xuICAgIGxldCBwcmV2aW91c0NvbHVtbiA9IC0xO1xuICAgIGxldCBpc1JlZHVjZWRFY2hlbG9uRm9ybSA9IHRydWU7XG4gICAgbGV0IGNoZWNrZWQgPSBmYWxzZTtcbiAgICB3aGlsZSAoaSA8IHRoaXMucm93cyAmJiBpc1JlZHVjZWRFY2hlbG9uRm9ybSkge1xuICAgICAgaiA9IDA7XG4gICAgICBjaGVja2VkID0gZmFsc2U7XG4gICAgICB3aGlsZSAoaiA8IHRoaXMuY29sdW1ucyAmJiBjaGVja2VkID09PSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5nZXQoaSwgaikgPT09IDApIHtcbiAgICAgICAgICBqKys7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXQoaSwgaikgPT09IDEgJiYgaiA+IHByZXZpb3VzQ29sdW1uKSB7XG4gICAgICAgICAgY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgcHJldmlvdXNDb2x1bW4gPSBqO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzUmVkdWNlZEVjaGVsb25Gb3JtID0gZmFsc2U7XG4gICAgICAgICAgY2hlY2tlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGsgPSBqICsgMTsgayA8IHRoaXMucm93czsgaysrKSB7XG4gICAgICAgIGlmICh0aGlzLmdldChpLCBrKSAhPT0gMCkge1xuICAgICAgICAgIGlzUmVkdWNlZEVjaGVsb25Gb3JtID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIGlzUmVkdWNlZEVjaGVsb25Gb3JtO1xuICB9XG5cbiAgZWNoZWxvbkZvcm0oKSB7XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuY2xvbmUoKTtcbiAgICBsZXQgaCA9IDA7XG4gICAgbGV0IGsgPSAwO1xuICAgIHdoaWxlIChoIDwgcmVzdWx0LnJvd3MgJiYgayA8IHJlc3VsdC5jb2x1bW5zKSB7XG4gICAgICBsZXQgaU1heCA9IGg7XG4gICAgICBmb3IgKGxldCBpID0gaDsgaSA8IHJlc3VsdC5yb3dzOyBpKyspIHtcbiAgICAgICAgaWYgKHJlc3VsdC5nZXQoaSwgaykgPiByZXN1bHQuZ2V0KGlNYXgsIGspKSB7XG4gICAgICAgICAgaU1heCA9IGk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQuZ2V0KGlNYXgsIGspID09PSAwKSB7XG4gICAgICAgIGsrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5zd2FwUm93cyhoLCBpTWF4KTtcbiAgICAgICAgbGV0IHRtcCA9IHJlc3VsdC5nZXQoaCwgayk7XG4gICAgICAgIGZvciAobGV0IGogPSBrOyBqIDwgcmVzdWx0LmNvbHVtbnM7IGorKykge1xuICAgICAgICAgIHJlc3VsdC5zZXQoaCwgaiwgcmVzdWx0LmdldChoLCBqKSAvIHRtcCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IGggKyAxOyBpIDwgcmVzdWx0LnJvd3M7IGkrKykge1xuICAgICAgICAgIGxldCBmYWN0b3IgPSByZXN1bHQuZ2V0KGksIGspIC8gcmVzdWx0LmdldChoLCBrKTtcbiAgICAgICAgICByZXN1bHQuc2V0KGksIGssIDApO1xuICAgICAgICAgIGZvciAobGV0IGogPSBrICsgMTsgaiA8IHJlc3VsdC5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5zZXQoaSwgaiwgcmVzdWx0LmdldChpLCBqKSAtIHJlc3VsdC5nZXQoaCwgaikgKiBmYWN0b3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBoKys7XG4gICAgICAgIGsrKztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJlZHVjZWRFY2hlbG9uRm9ybSgpIHtcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5lY2hlbG9uRm9ybSgpO1xuICAgIGxldCBtID0gcmVzdWx0LmNvbHVtbnM7XG4gICAgbGV0IG4gPSByZXN1bHQucm93cztcbiAgICBsZXQgaCA9IG4gLSAxO1xuICAgIHdoaWxlIChoID49IDApIHtcbiAgICAgIGlmIChyZXN1bHQubWF4Um93KGgpID09PSAwKSB7XG4gICAgICAgIGgtLTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBwID0gMDtcbiAgICAgICAgbGV0IHBpdm90ID0gZmFsc2U7XG4gICAgICAgIHdoaWxlIChwIDwgbiAmJiBwaXZvdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBpZiAocmVzdWx0LmdldChoLCBwKSA9PT0gMSkge1xuICAgICAgICAgICAgcGl2b3QgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaDsgaSsrKSB7XG4gICAgICAgICAgbGV0IGZhY3RvciA9IHJlc3VsdC5nZXQoaSwgcCk7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IHA7IGogPCBtOyBqKyspIHtcbiAgICAgICAgICAgIGxldCB0bXAgPSByZXN1bHQuZ2V0KGksIGopIC0gZmFjdG9yICogcmVzdWx0LmdldChoLCBqKTtcbiAgICAgICAgICAgIHJlc3VsdC5zZXQoaSwgaiwgdG1wKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaC0tO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc2V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0IG1ldGhvZCBpcyB1bmltcGxlbWVudGVkJyk7XG4gIH1cblxuICBnZXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdnZXQgbWV0aG9kIGlzIHVuaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIHJlcGVhdChvcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHsgcm93cyA9IDEsIGNvbHVtbnMgPSAxIH0gPSBvcHRpb25zO1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihyb3dzKSB8fCByb3dzIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Jvd3MgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICB9XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGNvbHVtbnMpIHx8IGNvbHVtbnMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY29sdW1ucyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgIH1cbiAgICBsZXQgbWF0cml4ID0gbmV3IE1hdHJpeCh0aGlzLnJvd3MgKiByb3dzLCB0aGlzLmNvbHVtbnMgKiBjb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgbWF0cml4LnNldFN1Yk1hdHJpeCh0aGlzLCB0aGlzLnJvd3MgKiBpLCB0aGlzLmNvbHVtbnMgKiBqKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeDtcbiAgfVxuXG4gIGZpbGwodmFsdWUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBuZWcoKSB7XG4gICAgcmV0dXJuIHRoaXMubXVsUygtMSk7XG4gIH1cblxuICBnZXRSb3coaW5kZXgpIHtcbiAgICBjaGVja1Jvd0luZGV4KHRoaXMsIGluZGV4KTtcbiAgICBsZXQgcm93ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgcm93LnB1c2godGhpcy5nZXQoaW5kZXgsIGkpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIGdldFJvd1ZlY3RvcihpbmRleCkge1xuICAgIHJldHVybiBNYXRyaXgucm93VmVjdG9yKHRoaXMuZ2V0Um93KGluZGV4KSk7XG4gIH1cblxuICBzZXRSb3coaW5kZXgsIGFycmF5KSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCBpbmRleCk7XG4gICAgYXJyYXkgPSBjaGVja1Jvd1ZlY3Rvcih0aGlzLCBhcnJheSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgdGhpcy5zZXQoaW5kZXgsIGksIGFycmF5W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzd2FwUm93cyhyb3cxLCByb3cyKSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCByb3cxKTtcbiAgICBjaGVja1Jvd0luZGV4KHRoaXMsIHJvdzIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgIGxldCB0ZW1wID0gdGhpcy5nZXQocm93MSwgaSk7XG4gICAgICB0aGlzLnNldChyb3cxLCBpLCB0aGlzLmdldChyb3cyLCBpKSk7XG4gICAgICB0aGlzLnNldChyb3cyLCBpLCB0ZW1wKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXRDb2x1bW4oaW5kZXgpIHtcbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGluZGV4KTtcbiAgICBsZXQgY29sdW1uID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgY29sdW1uLnB1c2godGhpcy5nZXQoaSwgaW5kZXgpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIGdldENvbHVtblZlY3RvcihpbmRleCkge1xuICAgIHJldHVybiBNYXRyaXguY29sdW1uVmVjdG9yKHRoaXMuZ2V0Q29sdW1uKGluZGV4KSk7XG4gIH1cblxuICBzZXRDb2x1bW4oaW5kZXgsIGFycmF5KSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBpbmRleCk7XG4gICAgYXJyYXkgPSBjaGVja0NvbHVtblZlY3Rvcih0aGlzLCBhcnJheSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgdGhpcy5zZXQoaSwgaW5kZXgsIGFycmF5W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzd2FwQ29sdW1ucyhjb2x1bW4xLCBjb2x1bW4yKSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBjb2x1bW4xKTtcbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGNvbHVtbjIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGxldCB0ZW1wID0gdGhpcy5nZXQoaSwgY29sdW1uMSk7XG4gICAgICB0aGlzLnNldChpLCBjb2x1bW4xLCB0aGlzLmdldChpLCBjb2x1bW4yKSk7XG4gICAgICB0aGlzLnNldChpLCBjb2x1bW4yLCB0ZW1wKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRSb3dWZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tSb3dWZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICsgdmVjdG9yW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdWJSb3dWZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tSb3dWZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC0gdmVjdG9yW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtdWxSb3dWZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tSb3dWZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICogdmVjdG9yW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkaXZSb3dWZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tSb3dWZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC8gdmVjdG9yW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRDb2x1bW5WZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tDb2x1bW5WZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICsgdmVjdG9yW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdWJDb2x1bW5WZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tDb2x1bW5WZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC0gdmVjdG9yW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtdWxDb2x1bW5WZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tDb2x1bW5WZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICogdmVjdG9yW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkaXZDb2x1bW5WZWN0b3IodmVjdG9yKSB7XG4gICAgdmVjdG9yID0gY2hlY2tDb2x1bW5WZWN0b3IodGhpcywgdmVjdG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC8gdmVjdG9yW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtdWxSb3coaW5kZXgsIHZhbHVlKSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCBpbmRleCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgdGhpcy5zZXQoaW5kZXgsIGksIHRoaXMuZ2V0KGluZGV4LCBpKSAqIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtdWxDb2x1bW4oaW5kZXgsIHZhbHVlKSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBpbmRleCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgdGhpcy5zZXQoaSwgaW5kZXgsIHRoaXMuZ2V0KGksIGluZGV4KSAqIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtYXgoKSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gTmFOO1xuICAgIH1cbiAgICBsZXQgdiA9IHRoaXMuZ2V0KDAsIDApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0KGksIGopID4gdikge1xuICAgICAgICAgIHYgPSB0aGlzLmdldChpLCBqKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIG1heEluZGV4KCkge1xuICAgIGNoZWNrTm9uRW1wdHkodGhpcyk7XG4gICAgbGV0IHYgPSB0aGlzLmdldCgwLCAwKTtcbiAgICBsZXQgaWR4ID0gWzAsIDBdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0KGksIGopID4gdikge1xuICAgICAgICAgIHYgPSB0aGlzLmdldChpLCBqKTtcbiAgICAgICAgICBpZHhbMF0gPSBpO1xuICAgICAgICAgIGlkeFsxXSA9IGo7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkeDtcbiAgfVxuXG4gIG1pbigpIHtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIGxldCB2ID0gdGhpcy5nZXQoMCwgMCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBpZiAodGhpcy5nZXQoaSwgaikgPCB2KSB7XG4gICAgICAgICAgdiA9IHRoaXMuZ2V0KGksIGopO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2O1xuICB9XG5cbiAgbWluSW5kZXgoKSB7XG4gICAgY2hlY2tOb25FbXB0eSh0aGlzKTtcbiAgICBsZXQgdiA9IHRoaXMuZ2V0KDAsIDApO1xuICAgIGxldCBpZHggPSBbMCwgMF07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBpZiAodGhpcy5nZXQoaSwgaikgPCB2KSB7XG4gICAgICAgICAgdiA9IHRoaXMuZ2V0KGksIGopO1xuICAgICAgICAgIGlkeFswXSA9IGk7XG4gICAgICAgICAgaWR4WzFdID0gajtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaWR4O1xuICB9XG5cbiAgbWF4Um93KHJvdykge1xuICAgIGNoZWNrUm93SW5kZXgodGhpcywgcm93KTtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIGxldCB2ID0gdGhpcy5nZXQocm93LCAwKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQocm93LCBpKSA+IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KHJvdywgaSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2O1xuICB9XG5cbiAgbWF4Um93SW5kZXgocm93KSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCByb3cpO1xuICAgIGNoZWNrTm9uRW1wdHkodGhpcyk7XG4gICAgbGV0IHYgPSB0aGlzLmdldChyb3csIDApO1xuICAgIGxldCBpZHggPSBbcm93LCAwXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQocm93LCBpKSA+IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KHJvdywgaSk7XG4gICAgICAgIGlkeFsxXSA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZHg7XG4gIH1cblxuICBtaW5Sb3cocm93KSB7XG4gICAgY2hlY2tSb3dJbmRleCh0aGlzLCByb3cpO1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgcmV0dXJuIE5hTjtcbiAgICB9XG4gICAgbGV0IHYgPSB0aGlzLmdldChyb3csIDApO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmdldChyb3csIGkpIDwgdikge1xuICAgICAgICB2ID0gdGhpcy5nZXQocm93LCBpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHY7XG4gIH1cblxuICBtaW5Sb3dJbmRleChyb3cpIHtcbiAgICBjaGVja1Jvd0luZGV4KHRoaXMsIHJvdyk7XG4gICAgY2hlY2tOb25FbXB0eSh0aGlzKTtcbiAgICBsZXQgdiA9IHRoaXMuZ2V0KHJvdywgMCk7XG4gICAgbGV0IGlkeCA9IFtyb3csIDBdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmdldChyb3csIGkpIDwgdikge1xuICAgICAgICB2ID0gdGhpcy5nZXQocm93LCBpKTtcbiAgICAgICAgaWR4WzFdID0gaTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkeDtcbiAgfVxuXG4gIG1heENvbHVtbihjb2x1bW4pIHtcbiAgICBjaGVja0NvbHVtbkluZGV4KHRoaXMsIGNvbHVtbik7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gTmFOO1xuICAgIH1cbiAgICBsZXQgdiA9IHRoaXMuZ2V0KDAsIGNvbHVtbik7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZ2V0KGksIGNvbHVtbikgPiB2KSB7XG4gICAgICAgIHYgPSB0aGlzLmdldChpLCBjb2x1bW4pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIG1heENvbHVtbkluZGV4KGNvbHVtbikge1xuICAgIGNoZWNrQ29sdW1uSW5kZXgodGhpcywgY29sdW1uKTtcbiAgICBjaGVja05vbkVtcHR5KHRoaXMpO1xuICAgIGxldCB2ID0gdGhpcy5nZXQoMCwgY29sdW1uKTtcbiAgICBsZXQgaWR4ID0gWzAsIGNvbHVtbl07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZ2V0KGksIGNvbHVtbikgPiB2KSB7XG4gICAgICAgIHYgPSB0aGlzLmdldChpLCBjb2x1bW4pO1xuICAgICAgICBpZHhbMF0gPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaWR4O1xuICB9XG5cbiAgbWluQ29sdW1uKGNvbHVtbikge1xuICAgIGNoZWNrQ29sdW1uSW5kZXgodGhpcywgY29sdW1uKTtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIGxldCB2ID0gdGhpcy5nZXQoMCwgY29sdW1uKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQoaSwgY29sdW1uKSA8IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KGksIGNvbHVtbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2O1xuICB9XG5cbiAgbWluQ29sdW1uSW5kZXgoY29sdW1uKSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBjb2x1bW4pO1xuICAgIGNoZWNrTm9uRW1wdHkodGhpcyk7XG4gICAgbGV0IHYgPSB0aGlzLmdldCgwLCBjb2x1bW4pO1xuICAgIGxldCBpZHggPSBbMCwgY29sdW1uXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5nZXQoaSwgY29sdW1uKSA8IHYpIHtcbiAgICAgICAgdiA9IHRoaXMuZ2V0KGksIGNvbHVtbik7XG4gICAgICAgIGlkeFswXSA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZHg7XG4gIH1cblxuICBkaWFnKCkge1xuICAgIGxldCBtaW4gPSBNYXRoLm1pbih0aGlzLnJvd3MsIHRoaXMuY29sdW1ucyk7XG4gICAgbGV0IGRpYWcgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1pbjsgaSsrKSB7XG4gICAgICBkaWFnLnB1c2godGhpcy5nZXQoaSwgaSkpO1xuICAgIH1cbiAgICByZXR1cm4gZGlhZztcbiAgfVxuXG4gIG5vcm0odHlwZSA9ICdmcm9iZW5pdXMnKSB7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgaWYgKHR5cGUgPT09ICdtYXgnKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYXgoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdmcm9iZW5pdXMnKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyB0aGlzLmdldChpLCBqKSAqIHRoaXMuZ2V0KGksIGopO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gTWF0aC5zcXJ0KHJlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGB1bmtub3duIG5vcm0gdHlwZTogJHt0eXBlfWApO1xuICAgIH1cbiAgfVxuXG4gIGN1bXVsYXRpdmVTdW0oKSB7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgICBzdW0gKz0gdGhpcy5nZXQoaSwgaik7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIHN1bSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZG90KHZlY3RvcjIpIHtcbiAgICBpZiAoQWJzdHJhY3RNYXRyaXguaXNNYXRyaXgodmVjdG9yMikpIHZlY3RvcjIgPSB2ZWN0b3IyLnRvMURBcnJheSgpO1xuICAgIGxldCB2ZWN0b3IxID0gdGhpcy50bzFEQXJyYXkoKTtcbiAgICBpZiAodmVjdG9yMS5sZW5ndGggIT09IHZlY3RvcjIubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndmVjdG9ycyBkbyBub3QgaGF2ZSB0aGUgc2FtZSBzaXplJyk7XG4gICAgfVxuICAgIGxldCBkb3QgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmVjdG9yMS5sZW5ndGg7IGkrKykge1xuICAgICAgZG90ICs9IHZlY3RvcjFbaV0gKiB2ZWN0b3IyW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZG90O1xuICB9XG5cbiAgbW11bChvdGhlcikge1xuICAgIG90aGVyID0gTWF0cml4LmNoZWNrTWF0cml4KG90aGVyKTtcblxuICAgIGxldCBtID0gdGhpcy5yb3dzO1xuICAgIGxldCBuID0gdGhpcy5jb2x1bW5zO1xuICAgIGxldCBwID0gb3RoZXIuY29sdW1ucztcblxuICAgIGxldCByZXN1bHQgPSBuZXcgTWF0cml4KG0sIHApO1xuXG4gICAgbGV0IEJjb2xqID0gbmV3IEZsb2F0NjRBcnJheShuKTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHA7IGorKykge1xuICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgICAgQmNvbGpba10gPSBvdGhlci5nZXQoaywgaik7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgIGxldCBzID0gMDtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgICAgICBzICs9IHRoaXMuZ2V0KGksIGspICogQmNvbGpba107XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQuc2V0KGksIGosIHMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RyYXNzZW4yeDIob3RoZXIpIHtcbiAgICBvdGhlciA9IE1hdHJpeC5jaGVja01hdHJpeChvdGhlcik7XG4gICAgbGV0IHJlc3VsdCA9IG5ldyBNYXRyaXgoMiwgMik7XG4gICAgY29uc3QgYTExID0gdGhpcy5nZXQoMCwgMCk7XG4gICAgY29uc3QgYjExID0gb3RoZXIuZ2V0KDAsIDApO1xuICAgIGNvbnN0IGExMiA9IHRoaXMuZ2V0KDAsIDEpO1xuICAgIGNvbnN0IGIxMiA9IG90aGVyLmdldCgwLCAxKTtcbiAgICBjb25zdCBhMjEgPSB0aGlzLmdldCgxLCAwKTtcbiAgICBjb25zdCBiMjEgPSBvdGhlci5nZXQoMSwgMCk7XG4gICAgY29uc3QgYTIyID0gdGhpcy5nZXQoMSwgMSk7XG4gICAgY29uc3QgYjIyID0gb3RoZXIuZ2V0KDEsIDEpO1xuXG4gICAgLy8gQ29tcHV0ZSBpbnRlcm1lZGlhdGUgdmFsdWVzLlxuICAgIGNvbnN0IG0xID0gKGExMSArIGEyMikgKiAoYjExICsgYjIyKTtcbiAgICBjb25zdCBtMiA9IChhMjEgKyBhMjIpICogYjExO1xuICAgIGNvbnN0IG0zID0gYTExICogKGIxMiAtIGIyMik7XG4gICAgY29uc3QgbTQgPSBhMjIgKiAoYjIxIC0gYjExKTtcbiAgICBjb25zdCBtNSA9IChhMTEgKyBhMTIpICogYjIyO1xuICAgIGNvbnN0IG02ID0gKGEyMSAtIGExMSkgKiAoYjExICsgYjEyKTtcbiAgICBjb25zdCBtNyA9IChhMTIgLSBhMjIpICogKGIyMSArIGIyMik7XG5cbiAgICAvLyBDb21iaW5lIGludGVybWVkaWF0ZSB2YWx1ZXMgaW50byB0aGUgb3V0cHV0LlxuICAgIGNvbnN0IGMwMCA9IG0xICsgbTQgLSBtNSArIG03O1xuICAgIGNvbnN0IGMwMSA9IG0zICsgbTU7XG4gICAgY29uc3QgYzEwID0gbTIgKyBtNDtcbiAgICBjb25zdCBjMTEgPSBtMSAtIG0yICsgbTMgKyBtNjtcblxuICAgIHJlc3VsdC5zZXQoMCwgMCwgYzAwKTtcbiAgICByZXN1bHQuc2V0KDAsIDEsIGMwMSk7XG4gICAgcmVzdWx0LnNldCgxLCAwLCBjMTApO1xuICAgIHJlc3VsdC5zZXQoMSwgMSwgYzExKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RyYXNzZW4zeDMob3RoZXIpIHtcbiAgICBvdGhlciA9IE1hdHJpeC5jaGVja01hdHJpeChvdGhlcik7XG4gICAgbGV0IHJlc3VsdCA9IG5ldyBNYXRyaXgoMywgMyk7XG5cbiAgICBjb25zdCBhMDAgPSB0aGlzLmdldCgwLCAwKTtcbiAgICBjb25zdCBhMDEgPSB0aGlzLmdldCgwLCAxKTtcbiAgICBjb25zdCBhMDIgPSB0aGlzLmdldCgwLCAyKTtcbiAgICBjb25zdCBhMTAgPSB0aGlzLmdldCgxLCAwKTtcbiAgICBjb25zdCBhMTEgPSB0aGlzLmdldCgxLCAxKTtcbiAgICBjb25zdCBhMTIgPSB0aGlzLmdldCgxLCAyKTtcbiAgICBjb25zdCBhMjAgPSB0aGlzLmdldCgyLCAwKTtcbiAgICBjb25zdCBhMjEgPSB0aGlzLmdldCgyLCAxKTtcbiAgICBjb25zdCBhMjIgPSB0aGlzLmdldCgyLCAyKTtcblxuICAgIGNvbnN0IGIwMCA9IG90aGVyLmdldCgwLCAwKTtcbiAgICBjb25zdCBiMDEgPSBvdGhlci5nZXQoMCwgMSk7XG4gICAgY29uc3QgYjAyID0gb3RoZXIuZ2V0KDAsIDIpO1xuICAgIGNvbnN0IGIxMCA9IG90aGVyLmdldCgxLCAwKTtcbiAgICBjb25zdCBiMTEgPSBvdGhlci5nZXQoMSwgMSk7XG4gICAgY29uc3QgYjEyID0gb3RoZXIuZ2V0KDEsIDIpO1xuICAgIGNvbnN0IGIyMCA9IG90aGVyLmdldCgyLCAwKTtcbiAgICBjb25zdCBiMjEgPSBvdGhlci5nZXQoMiwgMSk7XG4gICAgY29uc3QgYjIyID0gb3RoZXIuZ2V0KDIsIDIpO1xuXG4gICAgY29uc3QgbTEgPSAoYTAwICsgYTAxICsgYTAyIC0gYTEwIC0gYTExIC0gYTIxIC0gYTIyKSAqIGIxMTtcbiAgICBjb25zdCBtMiA9IChhMDAgLSBhMTApICogKC1iMDEgKyBiMTEpO1xuICAgIGNvbnN0IG0zID0gYTExICogKC1iMDAgKyBiMDEgKyBiMTAgLSBiMTEgLSBiMTIgLSBiMjAgKyBiMjIpO1xuICAgIGNvbnN0IG00ID0gKC1hMDAgKyBhMTAgKyBhMTEpICogKGIwMCAtIGIwMSArIGIxMSk7XG4gICAgY29uc3QgbTUgPSAoYTEwICsgYTExKSAqICgtYjAwICsgYjAxKTtcbiAgICBjb25zdCBtNiA9IGEwMCAqIGIwMDtcbiAgICBjb25zdCBtNyA9ICgtYTAwICsgYTIwICsgYTIxKSAqIChiMDAgLSBiMDIgKyBiMTIpO1xuICAgIGNvbnN0IG04ID0gKC1hMDAgKyBhMjApICogKGIwMiAtIGIxMik7XG4gICAgY29uc3QgbTkgPSAoYTIwICsgYTIxKSAqICgtYjAwICsgYjAyKTtcbiAgICBjb25zdCBtMTAgPSAoYTAwICsgYTAxICsgYTAyIC0gYTExIC0gYTEyIC0gYTIwIC0gYTIxKSAqIGIxMjtcbiAgICBjb25zdCBtMTEgPSBhMjEgKiAoLWIwMCArIGIwMiArIGIxMCAtIGIxMSAtIGIxMiAtIGIyMCArIGIyMSk7XG4gICAgY29uc3QgbTEyID0gKC1hMDIgKyBhMjEgKyBhMjIpICogKGIxMSArIGIyMCAtIGIyMSk7XG4gICAgY29uc3QgbTEzID0gKGEwMiAtIGEyMikgKiAoYjExIC0gYjIxKTtcbiAgICBjb25zdCBtMTQgPSBhMDIgKiBiMjA7XG4gICAgY29uc3QgbTE1ID0gKGEyMSArIGEyMikgKiAoLWIyMCArIGIyMSk7XG4gICAgY29uc3QgbTE2ID0gKC1hMDIgKyBhMTEgKyBhMTIpICogKGIxMiArIGIyMCAtIGIyMik7XG4gICAgY29uc3QgbTE3ID0gKGEwMiAtIGExMikgKiAoYjEyIC0gYjIyKTtcbiAgICBjb25zdCBtMTggPSAoYTExICsgYTEyKSAqICgtYjIwICsgYjIyKTtcbiAgICBjb25zdCBtMTkgPSBhMDEgKiBiMTA7XG4gICAgY29uc3QgbTIwID0gYTEyICogYjIxO1xuICAgIGNvbnN0IG0yMSA9IGExMCAqIGIwMjtcbiAgICBjb25zdCBtMjIgPSBhMjAgKiBiMDE7XG4gICAgY29uc3QgbTIzID0gYTIyICogYjIyO1xuXG4gICAgY29uc3QgYzAwID0gbTYgKyBtMTQgKyBtMTk7XG4gICAgY29uc3QgYzAxID0gbTEgKyBtNCArIG01ICsgbTYgKyBtMTIgKyBtMTQgKyBtMTU7XG4gICAgY29uc3QgYzAyID0gbTYgKyBtNyArIG05ICsgbTEwICsgbTE0ICsgbTE2ICsgbTE4O1xuICAgIGNvbnN0IGMxMCA9IG0yICsgbTMgKyBtNCArIG02ICsgbTE0ICsgbTE2ICsgbTE3O1xuICAgIGNvbnN0IGMxMSA9IG0yICsgbTQgKyBtNSArIG02ICsgbTIwO1xuICAgIGNvbnN0IGMxMiA9IG0xNCArIG0xNiArIG0xNyArIG0xOCArIG0yMTtcbiAgICBjb25zdCBjMjAgPSBtNiArIG03ICsgbTggKyBtMTEgKyBtMTIgKyBtMTMgKyBtMTQ7XG4gICAgY29uc3QgYzIxID0gbTEyICsgbTEzICsgbTE0ICsgbTE1ICsgbTIyO1xuICAgIGNvbnN0IGMyMiA9IG02ICsgbTcgKyBtOCArIG05ICsgbTIzO1xuXG4gICAgcmVzdWx0LnNldCgwLCAwLCBjMDApO1xuICAgIHJlc3VsdC5zZXQoMCwgMSwgYzAxKTtcbiAgICByZXN1bHQuc2V0KDAsIDIsIGMwMik7XG4gICAgcmVzdWx0LnNldCgxLCAwLCBjMTApO1xuICAgIHJlc3VsdC5zZXQoMSwgMSwgYzExKTtcbiAgICByZXN1bHQuc2V0KDEsIDIsIGMxMik7XG4gICAgcmVzdWx0LnNldCgyLCAwLCBjMjApO1xuICAgIHJlc3VsdC5zZXQoMiwgMSwgYzIxKTtcbiAgICByZXN1bHQuc2V0KDIsIDIsIGMyMik7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIG1tdWxTdHJhc3Nlbih5KSB7XG4gICAgeSA9IE1hdHJpeC5jaGVja01hdHJpeCh5KTtcbiAgICBsZXQgeCA9IHRoaXMuY2xvbmUoKTtcbiAgICBsZXQgcjEgPSB4LnJvd3M7XG4gICAgbGV0IGMxID0geC5jb2x1bW5zO1xuICAgIGxldCByMiA9IHkucm93cztcbiAgICBsZXQgYzIgPSB5LmNvbHVtbnM7XG4gICAgaWYgKGMxICE9PSByMikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYE11bHRpcGx5aW5nICR7cjF9IHggJHtjMX0gYW5kICR7cjJ9IHggJHtjMn0gbWF0cml4OiBkaW1lbnNpb25zIGRvIG5vdCBtYXRjaC5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBQdXQgYSBtYXRyaXggaW50byB0aGUgdG9wIGxlZnQgb2YgYSBtYXRyaXggb2YgemVyb3MuXG4gICAgLy8gYHJvd3NgIGFuZCBgY29sc2AgYXJlIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBvdXRwdXQgbWF0cml4LlxuICAgIGZ1bmN0aW9uIGVtYmVkKG1hdCwgcm93cywgY29scykge1xuICAgICAgbGV0IHIgPSBtYXQucm93cztcbiAgICAgIGxldCBjID0gbWF0LmNvbHVtbnM7XG4gICAgICBpZiAociA9PT0gcm93cyAmJiBjID09PSBjb2xzKSB7XG4gICAgICAgIHJldHVybiBtYXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcmVzdWx0YXQgPSBBYnN0cmFjdE1hdHJpeC56ZXJvcyhyb3dzLCBjb2xzKTtcbiAgICAgICAgcmVzdWx0YXQgPSByZXN1bHRhdC5zZXRTdWJNYXRyaXgobWF0LCAwLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdGF0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1ha2Ugc3VyZSBib3RoIG1hdHJpY2VzIGFyZSB0aGUgc2FtZSBzaXplLlxuICAgIC8vIFRoaXMgaXMgZXhjbHVzaXZlbHkgZm9yIHNpbXBsaWNpdHk6XG4gICAgLy8gdGhpcyBhbGdvcml0aG0gY2FuIGJlIGltcGxlbWVudGVkIHdpdGggbWF0cmljZXMgb2YgZGlmZmVyZW50IHNpemVzLlxuXG4gICAgbGV0IHIgPSBNYXRoLm1heChyMSwgcjIpO1xuICAgIGxldCBjID0gTWF0aC5tYXgoYzEsIGMyKTtcbiAgICB4ID0gZW1iZWQoeCwgciwgYyk7XG4gICAgeSA9IGVtYmVkKHksIHIsIGMpO1xuXG4gICAgLy8gT3VyIHJlY3Vyc2l2ZSBtdWx0aXBsaWNhdGlvbiBmdW5jdGlvbi5cbiAgICBmdW5jdGlvbiBibG9ja011bHQoYSwgYiwgcm93cywgY29scykge1xuICAgICAgLy8gRm9yIHNtYWxsIG1hdHJpY2VzLCByZXNvcnQgdG8gbmFpdmUgbXVsdGlwbGljYXRpb24uXG4gICAgICBpZiAocm93cyA8PSA1MTIgfHwgY29scyA8PSA1MTIpIHtcbiAgICAgICAgcmV0dXJuIGEubW11bChiKTsgLy8gYSBpcyBlcXVpdmFsZW50IHRvIHRoaXNcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgZHluYW1pYyBwYWRkaW5nLlxuICAgICAgaWYgKHJvd3MgJSAyID09PSAxICYmIGNvbHMgJSAyID09PSAxKSB7XG4gICAgICAgIGEgPSBlbWJlZChhLCByb3dzICsgMSwgY29scyArIDEpO1xuICAgICAgICBiID0gZW1iZWQoYiwgcm93cyArIDEsIGNvbHMgKyAxKTtcbiAgICAgIH0gZWxzZSBpZiAocm93cyAlIDIgPT09IDEpIHtcbiAgICAgICAgYSA9IGVtYmVkKGEsIHJvd3MgKyAxLCBjb2xzKTtcbiAgICAgICAgYiA9IGVtYmVkKGIsIHJvd3MgKyAxLCBjb2xzKTtcbiAgICAgIH0gZWxzZSBpZiAoY29scyAlIDIgPT09IDEpIHtcbiAgICAgICAgYSA9IGVtYmVkKGEsIHJvd3MsIGNvbHMgKyAxKTtcbiAgICAgICAgYiA9IGVtYmVkKGIsIHJvd3MsIGNvbHMgKyAxKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGhhbGZSb3dzID0gcGFyc2VJbnQoYS5yb3dzIC8gMiwgMTApO1xuICAgICAgbGV0IGhhbGZDb2xzID0gcGFyc2VJbnQoYS5jb2x1bW5zIC8gMiwgMTApO1xuICAgICAgLy8gU3ViZGl2aWRlIGlucHV0IG1hdHJpY2VzLlxuICAgICAgbGV0IGExMSA9IGEuc3ViTWF0cml4KDAsIGhhbGZSb3dzIC0gMSwgMCwgaGFsZkNvbHMgLSAxKTtcbiAgICAgIGxldCBiMTEgPSBiLnN1Yk1hdHJpeCgwLCBoYWxmUm93cyAtIDEsIDAsIGhhbGZDb2xzIC0gMSk7XG5cbiAgICAgIGxldCBhMTIgPSBhLnN1Yk1hdHJpeCgwLCBoYWxmUm93cyAtIDEsIGhhbGZDb2xzLCBhLmNvbHVtbnMgLSAxKTtcbiAgICAgIGxldCBiMTIgPSBiLnN1Yk1hdHJpeCgwLCBoYWxmUm93cyAtIDEsIGhhbGZDb2xzLCBiLmNvbHVtbnMgLSAxKTtcblxuICAgICAgbGV0IGEyMSA9IGEuc3ViTWF0cml4KGhhbGZSb3dzLCBhLnJvd3MgLSAxLCAwLCBoYWxmQ29scyAtIDEpO1xuICAgICAgbGV0IGIyMSA9IGIuc3ViTWF0cml4KGhhbGZSb3dzLCBiLnJvd3MgLSAxLCAwLCBoYWxmQ29scyAtIDEpO1xuXG4gICAgICBsZXQgYTIyID0gYS5zdWJNYXRyaXgoaGFsZlJvd3MsIGEucm93cyAtIDEsIGhhbGZDb2xzLCBhLmNvbHVtbnMgLSAxKTtcbiAgICAgIGxldCBiMjIgPSBiLnN1Yk1hdHJpeChoYWxmUm93cywgYi5yb3dzIC0gMSwgaGFsZkNvbHMsIGIuY29sdW1ucyAtIDEpO1xuXG4gICAgICAvLyBDb21wdXRlIGludGVybWVkaWF0ZSB2YWx1ZXMuXG4gICAgICBsZXQgbTEgPSBibG9ja011bHQoXG4gICAgICAgIEFic3RyYWN0TWF0cml4LmFkZChhMTEsIGEyMiksXG4gICAgICAgIEFic3RyYWN0TWF0cml4LmFkZChiMTEsIGIyMiksXG4gICAgICAgIGhhbGZSb3dzLFxuICAgICAgICBoYWxmQ29scyxcbiAgICAgICk7XG4gICAgICBsZXQgbTIgPSBibG9ja011bHQoQWJzdHJhY3RNYXRyaXguYWRkKGEyMSwgYTIyKSwgYjExLCBoYWxmUm93cywgaGFsZkNvbHMpO1xuICAgICAgbGV0IG0zID0gYmxvY2tNdWx0KGExMSwgQWJzdHJhY3RNYXRyaXguc3ViKGIxMiwgYjIyKSwgaGFsZlJvd3MsIGhhbGZDb2xzKTtcbiAgICAgIGxldCBtNCA9IGJsb2NrTXVsdChhMjIsIEFic3RyYWN0TWF0cml4LnN1YihiMjEsIGIxMSksIGhhbGZSb3dzLCBoYWxmQ29scyk7XG4gICAgICBsZXQgbTUgPSBibG9ja011bHQoQWJzdHJhY3RNYXRyaXguYWRkKGExMSwgYTEyKSwgYjIyLCBoYWxmUm93cywgaGFsZkNvbHMpO1xuICAgICAgbGV0IG02ID0gYmxvY2tNdWx0KFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5zdWIoYTIxLCBhMTEpLFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5hZGQoYjExLCBiMTIpLFxuICAgICAgICBoYWxmUm93cyxcbiAgICAgICAgaGFsZkNvbHMsXG4gICAgICApO1xuICAgICAgbGV0IG03ID0gYmxvY2tNdWx0KFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5zdWIoYTEyLCBhMjIpLFxuICAgICAgICBBYnN0cmFjdE1hdHJpeC5hZGQoYjIxLCBiMjIpLFxuICAgICAgICBoYWxmUm93cyxcbiAgICAgICAgaGFsZkNvbHMsXG4gICAgICApO1xuXG4gICAgICAvLyBDb21iaW5lIGludGVybWVkaWF0ZSB2YWx1ZXMgaW50byB0aGUgb3V0cHV0LlxuICAgICAgbGV0IGMxMSA9IEFic3RyYWN0TWF0cml4LmFkZChtMSwgbTQpO1xuICAgICAgYzExLnN1YihtNSk7XG4gICAgICBjMTEuYWRkKG03KTtcbiAgICAgIGxldCBjMTIgPSBBYnN0cmFjdE1hdHJpeC5hZGQobTMsIG01KTtcbiAgICAgIGxldCBjMjEgPSBBYnN0cmFjdE1hdHJpeC5hZGQobTIsIG00KTtcbiAgICAgIGxldCBjMjIgPSBBYnN0cmFjdE1hdHJpeC5zdWIobTEsIG0yKTtcbiAgICAgIGMyMi5hZGQobTMpO1xuICAgICAgYzIyLmFkZChtNik7XG5cbiAgICAgIC8vIENyb3Agb3V0cHV0IHRvIHRoZSBkZXNpcmVkIHNpemUgKHVuZG8gZHluYW1pYyBwYWRkaW5nKS5cbiAgICAgIGxldCByZXN1bHRhdCA9IEFic3RyYWN0TWF0cml4Lnplcm9zKDIgKiBjMTEucm93cywgMiAqIGMxMS5jb2x1bW5zKTtcbiAgICAgIHJlc3VsdGF0ID0gcmVzdWx0YXQuc2V0U3ViTWF0cml4KGMxMSwgMCwgMCk7XG4gICAgICByZXN1bHRhdCA9IHJlc3VsdGF0LnNldFN1Yk1hdHJpeChjMTIsIGMxMS5yb3dzLCAwKTtcbiAgICAgIHJlc3VsdGF0ID0gcmVzdWx0YXQuc2V0U3ViTWF0cml4KGMyMSwgMCwgYzExLmNvbHVtbnMpO1xuICAgICAgcmVzdWx0YXQgPSByZXN1bHRhdC5zZXRTdWJNYXRyaXgoYzIyLCBjMTEucm93cywgYzExLmNvbHVtbnMpO1xuICAgICAgcmV0dXJuIHJlc3VsdGF0LnN1Yk1hdHJpeCgwLCByb3dzIC0gMSwgMCwgY29scyAtIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBibG9ja011bHQoeCwgeSwgciwgYyk7XG4gIH1cblxuICBzY2FsZVJvd3Mob3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCB7IG1pbiA9IDAsIG1heCA9IDEgfSA9IG9wdGlvbnM7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobWluKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignbWluIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShtYXgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYXggbXVzdCBiZSBhIG51bWJlcicpO1xuICAgIGlmIChtaW4gPj0gbWF4KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluIG11c3QgYmUgc21hbGxlciB0aGFuIG1heCcpO1xuICAgIGxldCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KHRoaXMucm93cywgdGhpcy5jb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBjb25zdCByb3cgPSB0aGlzLmdldFJvdyhpKTtcbiAgICAgIGlmIChyb3cubGVuZ3RoID4gMCkge1xuICAgICAgICByZXNjYWxlKHJvdywgeyBtaW4sIG1heCwgb3V0cHV0OiByb3cgfSk7XG4gICAgICB9XG4gICAgICBuZXdNYXRyaXguc2V0Um93KGksIHJvdyk7XG4gICAgfVxuICAgIHJldHVybiBuZXdNYXRyaXg7XG4gIH1cblxuICBzY2FsZUNvbHVtbnMob3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCB7IG1pbiA9IDAsIG1heCA9IDEgfSA9IG9wdGlvbnM7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobWluKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignbWluIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShtYXgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYXggbXVzdCBiZSBhIG51bWJlcicpO1xuICAgIGlmIChtaW4gPj0gbWF4KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluIG11c3QgYmUgc21hbGxlciB0aGFuIG1heCcpO1xuICAgIGxldCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KHRoaXMucm93cywgdGhpcy5jb2x1bW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdldENvbHVtbihpKTtcbiAgICAgIGlmIChjb2x1bW4ubGVuZ3RoKSB7XG4gICAgICAgIHJlc2NhbGUoY29sdW1uLCB7XG4gICAgICAgICAgbWluOiBtaW4sXG4gICAgICAgICAgbWF4OiBtYXgsXG4gICAgICAgICAgb3V0cHV0OiBjb2x1bW4sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgbmV3TWF0cml4LnNldENvbHVtbihpLCBjb2x1bW4pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgZmxpcFJvd3MoKSB7XG4gICAgY29uc3QgbWlkZGxlID0gTWF0aC5jZWlsKHRoaXMuY29sdW1ucyAvIDIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWlkZGxlOyBqKyspIHtcbiAgICAgICAgbGV0IGZpcnN0ID0gdGhpcy5nZXQoaSwgaik7XG4gICAgICAgIGxldCBsYXN0ID0gdGhpcy5nZXQoaSwgdGhpcy5jb2x1bW5zIC0gMSAtIGopO1xuICAgICAgICB0aGlzLnNldChpLCBqLCBsYXN0KTtcbiAgICAgICAgdGhpcy5zZXQoaSwgdGhpcy5jb2x1bW5zIC0gMSAtIGosIGZpcnN0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmbGlwQ29sdW1ucygpIHtcbiAgICBjb25zdCBtaWRkbGUgPSBNYXRoLmNlaWwodGhpcy5yb3dzIC8gMik7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaWRkbGU7IGkrKykge1xuICAgICAgICBsZXQgZmlyc3QgPSB0aGlzLmdldChpLCBqKTtcbiAgICAgICAgbGV0IGxhc3QgPSB0aGlzLmdldCh0aGlzLnJvd3MgLSAxIC0gaSwgaik7XG4gICAgICAgIHRoaXMuc2V0KGksIGosIGxhc3QpO1xuICAgICAgICB0aGlzLnNldCh0aGlzLnJvd3MgLSAxIC0gaSwgaiwgZmlyc3QpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGtyb25lY2tlclByb2R1Y3Qob3RoZXIpIHtcbiAgICBvdGhlciA9IE1hdHJpeC5jaGVja01hdHJpeChvdGhlcik7XG5cbiAgICBsZXQgbSA9IHRoaXMucm93cztcbiAgICBsZXQgbiA9IHRoaXMuY29sdW1ucztcbiAgICBsZXQgcCA9IG90aGVyLnJvd3M7XG4gICAgbGV0IHEgPSBvdGhlci5jb2x1bW5zO1xuXG4gICAgbGV0IHJlc3VsdCA9IG5ldyBNYXRyaXgobSAqIHAsIG4gKiBxKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBwOyBrKyspIHtcbiAgICAgICAgICBmb3IgKGxldCBsID0gMDsgbCA8IHE7IGwrKykge1xuICAgICAgICAgICAgcmVzdWx0LnNldChwICogaSArIGssIHEgKiBqICsgbCwgdGhpcy5nZXQoaSwgaikgKiBvdGhlci5nZXQoaywgbCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAga3JvbmVja2VyU3VtKG90aGVyKSB7XG4gICAgb3RoZXIgPSBNYXRyaXguY2hlY2tNYXRyaXgob3RoZXIpO1xuICAgIGlmICghdGhpcy5pc1NxdWFyZSgpIHx8ICFvdGhlci5pc1NxdWFyZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0tyb25lY2tlciBTdW0gbmVlZHMgdHdvIFNxdWFyZSBNYXRyaWNlcycpO1xuICAgIH1cbiAgICBsZXQgbSA9IHRoaXMucm93cztcbiAgICBsZXQgbiA9IG90aGVyLnJvd3M7XG4gICAgbGV0IEF4SSA9IHRoaXMua3JvbmVja2VyUHJvZHVjdChNYXRyaXguZXllKG4sIG4pKTtcbiAgICBsZXQgSXhCID0gTWF0cml4LmV5ZShtLCBtKS5rcm9uZWNrZXJQcm9kdWN0KG90aGVyKTtcbiAgICByZXR1cm4gQXhJLmFkZChJeEIpO1xuICB9XG5cbiAgdHJhbnNwb3NlKCkge1xuICAgIGxldCByZXN1bHQgPSBuZXcgTWF0cml4KHRoaXMuY29sdW1ucywgdGhpcy5yb3dzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7XG4gICAgICAgIHJlc3VsdC5zZXQoaiwgaSwgdGhpcy5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc29ydFJvd3MoY29tcGFyZUZ1bmN0aW9uID0gY29tcGFyZU51bWJlcnMpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7XG4gICAgICB0aGlzLnNldFJvdyhpLCB0aGlzLmdldFJvdyhpKS5zb3J0KGNvbXBhcmVGdW5jdGlvbikpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNvcnRDb2x1bW5zKGNvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVOdW1iZXJzKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgdGhpcy5zZXRDb2x1bW4oaSwgdGhpcy5nZXRDb2x1bW4oaSkuc29ydChjb21wYXJlRnVuY3Rpb24pKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdWJNYXRyaXgoc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikge1xuICAgIGNoZWNrUmFuZ2UodGhpcywgc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbik7XG4gICAgbGV0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgoXG4gICAgICBlbmRSb3cgLSBzdGFydFJvdyArIDEsXG4gICAgICBlbmRDb2x1bW4gLSBzdGFydENvbHVtbiArIDEsXG4gICAgKTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnRSb3c7IGkgPD0gZW5kUm93OyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSBzdGFydENvbHVtbjsgaiA8PSBlbmRDb2x1bW47IGorKykge1xuICAgICAgICBuZXdNYXRyaXguc2V0KGkgLSBzdGFydFJvdywgaiAtIHN0YXJ0Q29sdW1uLCB0aGlzLmdldChpLCBqKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdNYXRyaXg7XG4gIH1cblxuICBzdWJNYXRyaXhSb3coaW5kaWNlcywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikge1xuICAgIGlmIChzdGFydENvbHVtbiA9PT0gdW5kZWZpbmVkKSBzdGFydENvbHVtbiA9IDA7XG4gICAgaWYgKGVuZENvbHVtbiA9PT0gdW5kZWZpbmVkKSBlbmRDb2x1bW4gPSB0aGlzLmNvbHVtbnMgLSAxO1xuICAgIGlmIChcbiAgICAgIHN0YXJ0Q29sdW1uID4gZW5kQ29sdW1uIHx8XG4gICAgICBzdGFydENvbHVtbiA8IDAgfHxcbiAgICAgIHN0YXJ0Q29sdW1uID49IHRoaXMuY29sdW1ucyB8fFxuICAgICAgZW5kQ29sdW1uIDwgMCB8fFxuICAgICAgZW5kQ29sdW1uID49IHRoaXMuY29sdW1uc1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0FyZ3VtZW50IG91dCBvZiByYW5nZScpO1xuICAgIH1cblxuICAgIGxldCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KGluZGljZXMubGVuZ3RoLCBlbmRDb2x1bW4gLSBzdGFydENvbHVtbiArIDEpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IHN0YXJ0Q29sdW1uOyBqIDw9IGVuZENvbHVtbjsgaisrKSB7XG4gICAgICAgIGlmIChpbmRpY2VzW2ldIDwgMCB8fCBpbmRpY2VzW2ldID49IHRoaXMucm93cykge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBSb3cgaW5kZXggb3V0IG9mIHJhbmdlOiAke2luZGljZXNbaV19YCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3TWF0cml4LnNldChpLCBqIC0gc3RhcnRDb2x1bW4sIHRoaXMuZ2V0KGluZGljZXNbaV0sIGopKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld01hdHJpeDtcbiAgfVxuXG4gIHN1Yk1hdHJpeENvbHVtbihpbmRpY2VzLCBzdGFydFJvdywgZW5kUm93KSB7XG4gICAgaWYgKHN0YXJ0Um93ID09PSB1bmRlZmluZWQpIHN0YXJ0Um93ID0gMDtcbiAgICBpZiAoZW5kUm93ID09PSB1bmRlZmluZWQpIGVuZFJvdyA9IHRoaXMucm93cyAtIDE7XG4gICAgaWYgKFxuICAgICAgc3RhcnRSb3cgPiBlbmRSb3cgfHxcbiAgICAgIHN0YXJ0Um93IDwgMCB8fFxuICAgICAgc3RhcnRSb3cgPj0gdGhpcy5yb3dzIHx8XG4gICAgICBlbmRSb3cgPCAwIHx8XG4gICAgICBlbmRSb3cgPj0gdGhpcy5yb3dzXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXJndW1lbnQgb3V0IG9mIHJhbmdlJyk7XG4gICAgfVxuXG4gICAgbGV0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgoZW5kUm93IC0gc3RhcnRSb3cgKyAxLCBpbmRpY2VzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gc3RhcnRSb3c7IGogPD0gZW5kUm93OyBqKyspIHtcbiAgICAgICAgaWYgKGluZGljZXNbaV0gPCAwIHx8IGluZGljZXNbaV0gPj0gdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYENvbHVtbiBpbmRleCBvdXQgb2YgcmFuZ2U6ICR7aW5kaWNlc1tpXX1gKTtcbiAgICAgICAgfVxuICAgICAgICBuZXdNYXRyaXguc2V0KGogLSBzdGFydFJvdywgaSwgdGhpcy5nZXQoaiwgaW5kaWNlc1tpXSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3TWF0cml4O1xuICB9XG5cbiAgc2V0U3ViTWF0cml4KG1hdHJpeCwgc3RhcnRSb3csIHN0YXJ0Q29sdW1uKSB7XG4gICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7XG4gICAgaWYgKG1hdHJpeC5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBsZXQgZW5kUm93ID0gc3RhcnRSb3cgKyBtYXRyaXgucm93cyAtIDE7XG4gICAgbGV0IGVuZENvbHVtbiA9IHN0YXJ0Q29sdW1uICsgbWF0cml4LmNvbHVtbnMgLSAxO1xuICAgIGNoZWNrUmFuZ2UodGhpcywgc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgdGhpcy5zZXQoc3RhcnRSb3cgKyBpLCBzdGFydENvbHVtbiArIGosIG1hdHJpeC5nZXQoaSwgaikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNlbGVjdGlvbihyb3dJbmRpY2VzLCBjb2x1bW5JbmRpY2VzKSB7XG4gICAgbGV0IGluZGljZXMgPSBjaGVja0luZGljZXModGhpcywgcm93SW5kaWNlcywgY29sdW1uSW5kaWNlcyk7XG4gICAgbGV0IG5ld01hdHJpeCA9IG5ldyBNYXRyaXgocm93SW5kaWNlcy5sZW5ndGgsIGNvbHVtbkluZGljZXMubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXMucm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgcm93SW5kZXggPSBpbmRpY2VzLnJvd1tpXTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5kaWNlcy5jb2x1bW4ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgbGV0IGNvbHVtbkluZGV4ID0gaW5kaWNlcy5jb2x1bW5bal07XG4gICAgICAgIG5ld01hdHJpeC5zZXQoaSwgaiwgdGhpcy5nZXQocm93SW5kZXgsIGNvbHVtbkluZGV4KSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdNYXRyaXg7XG4gIH1cblxuICB0cmFjZSgpIHtcbiAgICBsZXQgbWluID0gTWF0aC5taW4odGhpcy5yb3dzLCB0aGlzLmNvbHVtbnMpO1xuICAgIGxldCB0cmFjZSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaW47IGkrKykge1xuICAgICAgdHJhY2UgKz0gdGhpcy5nZXQoaSwgaSk7XG4gICAgfVxuICAgIHJldHVybiB0cmFjZTtcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIGxldCBuZXdNYXRyaXggPSBuZXcgTWF0cml4KHRoaXMucm93cywgdGhpcy5jb2x1bW5zKTtcbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCB0aGlzLnJvd3M7IHJvdysrKSB7XG4gICAgICBmb3IgKGxldCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB0aGlzLmNvbHVtbnM7IGNvbHVtbisrKSB7XG4gICAgICAgIG5ld01hdHJpeC5zZXQocm93LCBjb2x1bW4sIHRoaXMuZ2V0KHJvdywgY29sdW1uKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdNYXRyaXg7XG4gIH1cblxuICBzdW0oYnkpIHtcbiAgICBzd2l0Y2ggKGJ5KSB7XG4gICAgICBjYXNlICdyb3cnOlxuICAgICAgICByZXR1cm4gc3VtQnlSb3codGhpcyk7XG4gICAgICBjYXNlICdjb2x1bW4nOlxuICAgICAgICByZXR1cm4gc3VtQnlDb2x1bW4odGhpcyk7XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIHN1bUFsbCh0aGlzKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJvZHVjdChieSkge1xuICAgIHN3aXRjaCAoYnkpIHtcbiAgICAgIGNhc2UgJ3Jvdyc6XG4gICAgICAgIHJldHVybiBwcm9kdWN0QnlSb3codGhpcyk7XG4gICAgICBjYXNlICdjb2x1bW4nOlxuICAgICAgICByZXR1cm4gcHJvZHVjdEJ5Q29sdW1uKHRoaXMpO1xuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiBwcm9kdWN0QWxsKHRoaXMpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG9wdGlvbjogJHtieX1gKTtcbiAgICB9XG4gIH1cblxuICBtZWFuKGJ5KSB7XG4gICAgY29uc3Qgc3VtID0gdGhpcy5zdW0oYnkpO1xuICAgIHN3aXRjaCAoYnkpIHtcbiAgICAgIGNhc2UgJ3Jvdyc6IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgICAgIHN1bVtpXSAvPSB0aGlzLmNvbHVtbnM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1bTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NvbHVtbic6IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykge1xuICAgICAgICAgIHN1bVtpXSAvPSB0aGlzLnJvd3M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1bTtcbiAgICAgIH1cbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gc3VtIC8gdGhpcy5zaXplO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG9wdGlvbjogJHtieX1gKTtcbiAgICB9XG4gIH1cblxuICB2YXJpYW5jZShieSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHR5cGVvZiBieSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG9wdGlvbnMgPSBieTtcbiAgICAgIGJ5ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHsgdW5iaWFzZWQgPSB0cnVlLCBtZWFuID0gdGhpcy5tZWFuKGJ5KSB9ID0gb3B0aW9ucztcbiAgICBpZiAodHlwZW9mIHVuYmlhc2VkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYmlhc2VkIG11c3QgYmUgYSBib29sZWFuJyk7XG4gICAgfVxuICAgIHN3aXRjaCAoYnkpIHtcbiAgICAgIGNhc2UgJ3Jvdyc6IHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lYW4pKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWVhbiBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhcmlhbmNlQnlSb3codGhpcywgdW5iaWFzZWQsIG1lYW4pO1xuICAgICAgfVxuICAgICAgY2FzZSAnY29sdW1uJzoge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVhbikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtZWFuIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFyaWFuY2VCeUNvbHVtbih0aGlzLCB1bmJpYXNlZCwgbWVhbik7XG4gICAgICB9XG4gICAgICBjYXNlIHVuZGVmaW5lZDoge1xuICAgICAgICBpZiAodHlwZW9mIG1lYW4gIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWVhbiBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhcmlhbmNlQWxsKHRoaXMsIHVuYmlhc2VkLCBtZWFuKTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgc3RhbmRhcmREZXZpYXRpb24oYnksIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIGJ5ID09PSAnb2JqZWN0Jykge1xuICAgICAgb3B0aW9ucyA9IGJ5O1xuICAgICAgYnkgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHZhcmlhbmNlID0gdGhpcy52YXJpYW5jZShieSwgb3B0aW9ucyk7XG4gICAgaWYgKGJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBNYXRoLnNxcnQodmFyaWFuY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhcmlhbmNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhcmlhbmNlW2ldID0gTWF0aC5zcXJ0KHZhcmlhbmNlW2ldKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YXJpYW5jZTtcbiAgICB9XG4gIH1cblxuICBjZW50ZXIoYnksIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0eXBlb2YgYnkgPT09ICdvYmplY3QnKSB7XG4gICAgICBvcHRpb25zID0gYnk7XG4gICAgICBieSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCB7IGNlbnRlciA9IHRoaXMubWVhbihieSkgfSA9IG9wdGlvbnM7XG4gICAgc3dpdGNoIChieSkge1xuICAgICAgY2FzZSAncm93Jzoge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2VudGVyKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NlbnRlciBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY2VudGVyQnlSb3codGhpcywgY2VudGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBjYXNlICdjb2x1bW4nOiB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjZW50ZXIpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY2VudGVyIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgICAgfVxuICAgICAgICBjZW50ZXJCeUNvbHVtbih0aGlzLCBjZW50ZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGNhc2UgdW5kZWZpbmVkOiB7XG4gICAgICAgIGlmICh0eXBlb2YgY2VudGVyICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NlbnRlciBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgY2VudGVyQWxsKHRoaXMsIGNlbnRlcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG9wdGlvbjogJHtieX1gKTtcbiAgICB9XG4gIH1cblxuICBzY2FsZShieSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHR5cGVvZiBieSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG9wdGlvbnMgPSBieTtcbiAgICAgIGJ5ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIGxldCBzY2FsZSA9IG9wdGlvbnMuc2NhbGU7XG4gICAgc3dpdGNoIChieSkge1xuICAgICAgY2FzZSAncm93Jzoge1xuICAgICAgICBpZiAoc2NhbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjYWxlID0gZ2V0U2NhbGVCeVJvdyh0aGlzKTtcbiAgICAgICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShzY2FsZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzY2FsZSBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgc2NhbGVCeVJvdyh0aGlzLCBzY2FsZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgY2FzZSAnY29sdW1uJzoge1xuICAgICAgICBpZiAoc2NhbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjYWxlID0gZ2V0U2NhbGVCeUNvbHVtbih0aGlzKTtcbiAgICAgICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShzY2FsZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzY2FsZSBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgc2NhbGVCeUNvbHVtbih0aGlzLCBzY2FsZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgY2FzZSB1bmRlZmluZWQ6IHtcbiAgICAgICAgaWYgKHNjYWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY2FsZSA9IGdldFNjYWxlQWxsKHRoaXMpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzY2FsZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzY2FsZSBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2NhbGVBbGwodGhpcywgc2NhbGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7Ynl9YCk7XG4gICAgfVxuICB9XG5cbiAgdG9TdHJpbmcob3B0aW9ucykge1xuICAgIHJldHVybiBpbnNwZWN0TWF0cml4V2l0aE9wdGlvbnModGhpcywgb3B0aW9ucyk7XG4gIH1cbn1cblxuQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmtsYXNzID0gJ01hdHJpeCc7XG5pZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID1cbiAgICBpbnNwZWN0TWF0cml4O1xufVxuXG5mdW5jdGlvbiBjb21wYXJlTnVtYmVycyhhLCBiKSB7XG4gIHJldHVybiBhIC0gYjtcbn1cblxuLy8gU3lub255bXNcbkFic3RyYWN0TWF0cml4LnJhbmRvbSA9IEFic3RyYWN0TWF0cml4LnJhbmQ7XG5BYnN0cmFjdE1hdHJpeC5yYW5kb21JbnQgPSBBYnN0cmFjdE1hdHJpeC5yYW5kSW50O1xuQWJzdHJhY3RNYXRyaXguZGlhZ29uYWwgPSBBYnN0cmFjdE1hdHJpeC5kaWFnO1xuQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpYWdvbmFsID0gQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLmRpYWc7XG5BYnN0cmFjdE1hdHJpeC5pZGVudGl0eSA9IEFic3RyYWN0TWF0cml4LmV5ZTtcbkFic3RyYWN0TWF0cml4LnByb3RvdHlwZS5uZWdhdGUgPSBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUubmVnO1xuQWJzdHJhY3RNYXRyaXgucHJvdG90eXBlLnRlbnNvclByb2R1Y3QgPVxuICBBYnN0cmFjdE1hdHJpeC5wcm90b3R5cGUua3JvbmVja2VyUHJvZHVjdDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWF0cml4IGV4dGVuZHMgQWJzdHJhY3RNYXRyaXgge1xuICBjb25zdHJ1Y3RvcihuUm93cywgbkNvbHVtbnMpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmIChNYXRyaXguaXNNYXRyaXgoblJvd3MpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RydWN0b3ItcmV0dXJuXG4gICAgICByZXR1cm4gblJvd3MuY2xvbmUoKTtcbiAgICB9IGVsc2UgaWYgKE51bWJlci5pc0ludGVnZXIoblJvd3MpICYmIG5Sb3dzID49IDApIHtcbiAgICAgIC8vIENyZWF0ZSBhbiBlbXB0eSBtYXRyaXhcbiAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIobkNvbHVtbnMpICYmIG5Db2x1bW5zID49IDApIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XG4gICAgICAgICAgdGhpcy5kYXRhLnB1c2gobmV3IEZsb2F0NjRBcnJheShuQ29sdW1ucykpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCduQ29sdW1ucyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShuUm93cykpIHtcbiAgICAgIC8vIENvcHkgdGhlIHZhbHVlcyBmcm9tIHRoZSAyRCBhcnJheVxuICAgICAgY29uc3QgYXJyYXlEYXRhID0gblJvd3M7XG4gICAgICBuUm93cyA9IGFycmF5RGF0YS5sZW5ndGg7XG4gICAgICBuQ29sdW1ucyA9IG5Sb3dzID8gYXJyYXlEYXRhWzBdLmxlbmd0aCA6IDA7XG4gICAgICBpZiAodHlwZW9mIG5Db2x1bW5zICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICdEYXRhIG11c3QgYmUgYSAyRCBhcnJheSB3aXRoIGF0IGxlYXN0IG9uZSBlbGVtZW50JyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7XG4gICAgICAgIGlmIChhcnJheURhdGFbaV0ubGVuZ3RoICE9PSBuQ29sdW1ucykge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmNvbnNpc3RlbnQgYXJyYXkgZGltZW5zaW9ucycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YS5wdXNoKEZsb2F0NjRBcnJheS5mcm9tKGFycmF5RGF0YVtpXSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBvciBhbiBhcnJheScsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLnJvd3MgPSBuUm93cztcbiAgICB0aGlzLmNvbHVtbnMgPSBuQ29sdW1ucztcbiAgfVxuXG4gIHNldChyb3dJbmRleCwgY29sdW1uSW5kZXgsIHZhbHVlKSB7XG4gICAgdGhpcy5kYXRhW3Jvd0luZGV4XVtjb2x1bW5JbmRleF0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChyb3dJbmRleCwgY29sdW1uSW5kZXgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhW3Jvd0luZGV4XVtjb2x1bW5JbmRleF07XG4gIH1cblxuICByZW1vdmVSb3coaW5kZXgpIHtcbiAgICBjaGVja1Jvd0luZGV4KHRoaXMsIGluZGV4KTtcbiAgICB0aGlzLmRhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLnJvd3MgLT0gMTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFkZFJvdyhpbmRleCwgYXJyYXkpIHtcbiAgICBpZiAoYXJyYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgYXJyYXkgPSBpbmRleDtcbiAgICAgIGluZGV4ID0gdGhpcy5yb3dzO1xuICAgIH1cbiAgICBjaGVja1Jvd0luZGV4KHRoaXMsIGluZGV4LCB0cnVlKTtcbiAgICBhcnJheSA9IEZsb2F0NjRBcnJheS5mcm9tKGNoZWNrUm93VmVjdG9yKHRoaXMsIGFycmF5KSk7XG4gICAgdGhpcy5kYXRhLnNwbGljZShpbmRleCwgMCwgYXJyYXkpO1xuICAgIHRoaXMucm93cyArPSAxO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcmVtb3ZlQ29sdW1uKGluZGV4KSB7XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBpbmRleCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgY29uc3QgbmV3Um93ID0gbmV3IEZsb2F0NjRBcnJheSh0aGlzLmNvbHVtbnMgLSAxKTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5kZXg7IGorKykge1xuICAgICAgICBuZXdSb3dbal0gPSB0aGlzLmRhdGFbaV1bal07XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBqID0gaW5kZXggKyAxOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHtcbiAgICAgICAgbmV3Um93W2ogLSAxXSA9IHRoaXMuZGF0YVtpXVtqXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGF0YVtpXSA9IG5ld1JvdztcbiAgICB9XG4gICAgdGhpcy5jb2x1bW5zIC09IDE7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRDb2x1bW4oaW5kZXgsIGFycmF5KSB7XG4gICAgaWYgKHR5cGVvZiBhcnJheSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGFycmF5ID0gaW5kZXg7XG4gICAgICBpbmRleCA9IHRoaXMuY29sdW1ucztcbiAgICB9XG4gICAgY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBpbmRleCwgdHJ1ZSk7XG4gICAgYXJyYXkgPSBjaGVja0NvbHVtblZlY3Rvcih0aGlzLCBhcnJheSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykge1xuICAgICAgY29uc3QgbmV3Um93ID0gbmV3IEZsb2F0NjRBcnJheSh0aGlzLmNvbHVtbnMgKyAxKTtcbiAgICAgIGxldCBqID0gMDtcbiAgICAgIGZvciAoOyBqIDwgaW5kZXg7IGorKykge1xuICAgICAgICBuZXdSb3dbal0gPSB0aGlzLmRhdGFbaV1bal07XG4gICAgICB9XG4gICAgICBuZXdSb3dbaisrXSA9IGFycmF5W2ldO1xuICAgICAgZm9yICg7IGogPCB0aGlzLmNvbHVtbnMgKyAxOyBqKyspIHtcbiAgICAgICAgbmV3Um93W2pdID0gdGhpcy5kYXRhW2ldW2ogLSAxXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGF0YVtpXSA9IG5ld1JvdztcbiAgICB9XG4gICAgdGhpcy5jb2x1bW5zICs9IDE7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuaW5zdGFsbE1hdGhPcGVyYXRpb25zKEFic3RyYWN0TWF0cml4LCBNYXRyaXgpO1xuIiwiaW1wb3J0IHsgbmV3QXJyYXkgfSBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gc3VtQnlSb3cobWF0cml4KSB7XG4gIGxldCBzdW0gPSBuZXdBcnJheShtYXRyaXgucm93cyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7ICsraSkge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7ICsraikge1xuICAgICAgc3VtW2ldICs9IG1hdHJpeC5nZXQoaSwgaik7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdW1CeUNvbHVtbihtYXRyaXgpIHtcbiAgbGV0IHN1bSA9IG5ld0FycmF5KG1hdHJpeC5jb2x1bW5zKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgKytpKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgKytqKSB7XG4gICAgICBzdW1bal0gKz0gbWF0cml4LmdldChpLCBqKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN1bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1bUFsbChtYXRyaXgpIHtcbiAgbGV0IHYgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICAgIHYgKz0gbWF0cml4LmdldChpLCBqKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9kdWN0QnlSb3cobWF0cml4KSB7XG4gIGxldCBzdW0gPSBuZXdBcnJheShtYXRyaXgucm93cywgMSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7ICsraSkge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7ICsraikge1xuICAgICAgc3VtW2ldICo9IG1hdHJpeC5nZXQoaSwgaik7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9kdWN0QnlDb2x1bW4obWF0cml4KSB7XG4gIGxldCBzdW0gPSBuZXdBcnJheShtYXRyaXguY29sdW1ucywgMSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7ICsraSkge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7ICsraikge1xuICAgICAgc3VtW2pdICo9IG1hdHJpeC5nZXQoaSwgaik7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9kdWN0QWxsKG1hdHJpeCkge1xuICBsZXQgdiA9IDE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgICAgdiAqPSBtYXRyaXguZ2V0KGksIGopO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhbmNlQnlSb3cobWF0cml4LCB1bmJpYXNlZCwgbWVhbikge1xuICBjb25zdCByb3dzID0gbWF0cml4LnJvd3M7XG4gIGNvbnN0IGNvbHMgPSBtYXRyaXguY29sdW1ucztcbiAgY29uc3QgdmFyaWFuY2UgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgIGxldCBzdW0xID0gMDtcbiAgICBsZXQgc3VtMiA9IDA7XG4gICAgbGV0IHggPSAwO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sczsgaisrKSB7XG4gICAgICB4ID0gbWF0cml4LmdldChpLCBqKSAtIG1lYW5baV07XG4gICAgICBzdW0xICs9IHg7XG4gICAgICBzdW0yICs9IHggKiB4O1xuICAgIH1cbiAgICBpZiAodW5iaWFzZWQpIHtcbiAgICAgIHZhcmlhbmNlLnB1c2goKHN1bTIgLSAoc3VtMSAqIHN1bTEpIC8gY29scykgLyAoY29scyAtIDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyaWFuY2UucHVzaCgoc3VtMiAtIChzdW0xICogc3VtMSkgLyBjb2xzKSAvIGNvbHMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFyaWFuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYW5jZUJ5Q29sdW1uKG1hdHJpeCwgdW5iaWFzZWQsIG1lYW4pIHtcbiAgY29uc3Qgcm93cyA9IG1hdHJpeC5yb3dzO1xuICBjb25zdCBjb2xzID0gbWF0cml4LmNvbHVtbnM7XG4gIGNvbnN0IHZhcmlhbmNlID0gW107XG5cbiAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2xzOyBqKyspIHtcbiAgICBsZXQgc3VtMSA9IDA7XG4gICAgbGV0IHN1bTIgPSAwO1xuICAgIGxldCB4ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgeCA9IG1hdHJpeC5nZXQoaSwgaikgLSBtZWFuW2pdO1xuICAgICAgc3VtMSArPSB4O1xuICAgICAgc3VtMiArPSB4ICogeDtcbiAgICB9XG4gICAgaWYgKHVuYmlhc2VkKSB7XG4gICAgICB2YXJpYW5jZS5wdXNoKChzdW0yIC0gKHN1bTEgKiBzdW0xKSAvIHJvd3MpIC8gKHJvd3MgLSAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhcmlhbmNlLnB1c2goKHN1bTIgLSAoc3VtMSAqIHN1bTEpIC8gcm93cykgLyByb3dzKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhcmlhbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFuY2VBbGwobWF0cml4LCB1bmJpYXNlZCwgbWVhbikge1xuICBjb25zdCByb3dzID0gbWF0cml4LnJvd3M7XG4gIGNvbnN0IGNvbHMgPSBtYXRyaXguY29sdW1ucztcbiAgY29uc3Qgc2l6ZSA9IHJvd3MgKiBjb2xzO1xuXG4gIGxldCBzdW0xID0gMDtcbiAgbGV0IHN1bTIgPSAwO1xuICBsZXQgeCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2xzOyBqKyspIHtcbiAgICAgIHggPSBtYXRyaXguZ2V0KGksIGopIC0gbWVhbjtcbiAgICAgIHN1bTEgKz0geDtcbiAgICAgIHN1bTIgKz0geCAqIHg7XG4gICAgfVxuICB9XG4gIGlmICh1bmJpYXNlZCkge1xuICAgIHJldHVybiAoc3VtMiAtIChzdW0xICogc3VtMSkgLyBzaXplKSAvIChzaXplIC0gMSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChzdW0yIC0gKHN1bTEgKiBzdW0xKSAvIHNpemUpIC8gc2l6ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2VudGVyQnlSb3cobWF0cml4LCBtZWFuKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgICAgbWF0cml4LnNldChpLCBqLCBtYXRyaXguZ2V0KGksIGopIC0gbWVhbltpXSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjZW50ZXJCeUNvbHVtbihtYXRyaXgsIG1lYW4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICBtYXRyaXguc2V0KGksIGosIG1hdHJpeC5nZXQoaSwgaikgLSBtZWFuW2pdKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNlbnRlckFsbChtYXRyaXgsIG1lYW4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgICBtYXRyaXguc2V0KGksIGosIG1hdHJpeC5nZXQoaSwgaikgLSBtZWFuKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjYWxlQnlSb3cobWF0cml4KSB7XG4gIGNvbnN0IHNjYWxlID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgICAgc3VtICs9IE1hdGgucG93KG1hdHJpeC5nZXQoaSwgaiksIDIpIC8gKG1hdHJpeC5jb2x1bW5zIC0gMSk7XG4gICAgfVxuICAgIHNjYWxlLnB1c2goTWF0aC5zcXJ0KHN1bSkpO1xuICB9XG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlQnlSb3cobWF0cml4LCBzY2FsZSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICAgIG1hdHJpeC5zZXQoaSwgaiwgbWF0cml4LmdldChpLCBqKSAvIHNjYWxlW2ldKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjYWxlQnlDb2x1bW4obWF0cml4KSB7XG4gIGNvbnN0IHNjYWxlID0gW107XG4gIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgICAgc3VtICs9IE1hdGgucG93KG1hdHJpeC5nZXQoaSwgaiksIDIpIC8gKG1hdHJpeC5yb3dzIC0gMSk7XG4gICAgfVxuICAgIHNjYWxlLnB1c2goTWF0aC5zcXJ0KHN1bSkpO1xuICB9XG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlQnlDb2x1bW4obWF0cml4LCBzY2FsZSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyBqKyspIHtcbiAgICAgIG1hdHJpeC5zZXQoaSwgaiwgbWF0cml4LmdldChpLCBqKSAvIHNjYWxlW2pdKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjYWxlQWxsKG1hdHJpeCkge1xuICBjb25zdCBkaXZpZGVyID0gbWF0cml4LnNpemUgLSAxO1xuICBsZXQgc3VtID0gMDtcbiAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisrKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgaSsrKSB7XG4gICAgICBzdW0gKz0gTWF0aC5wb3cobWF0cml4LmdldChpLCBqKSwgMikgLyBkaXZpZGVyO1xuICAgIH1cbiAgfVxuICByZXR1cm4gTWF0aC5zcXJ0KHN1bSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZUFsbChtYXRyaXgsIHNjYWxlKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7IGorKykge1xuICAgICAgbWF0cml4LnNldChpLCBqLCBtYXRyaXguZ2V0KGksIGopIC8gc2NhbGUpO1xuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBAcHJpdmF0ZVxuICogQ2hlY2sgdGhhdCBhIHJvdyBpbmRleCBpcyBub3Qgb3V0IG9mIGJvdW5kc1xuICogQHBhcmFtIHtNYXRyaXh9IG1hdHJpeFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvdXRlcl1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUm93SW5kZXgobWF0cml4LCBpbmRleCwgb3V0ZXIpIHtcbiAgbGV0IG1heCA9IG91dGVyID8gbWF0cml4LnJvd3MgOiBtYXRyaXgucm93cyAtIDE7XG4gIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiBtYXgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignUm93IGluZGV4IG91dCBvZiByYW5nZScpO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIENoZWNrIHRoYXQgYSBjb2x1bW4gaW5kZXggaXMgbm90IG91dCBvZiBib3VuZHNcbiAqIEBwYXJhbSB7TWF0cml4fSBtYXRyaXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtib29sZWFufSBbb3V0ZXJdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0NvbHVtbkluZGV4KG1hdHJpeCwgaW5kZXgsIG91dGVyKSB7XG4gIGxldCBtYXggPSBvdXRlciA/IG1hdHJpeC5jb2x1bW5zIDogbWF0cml4LmNvbHVtbnMgLSAxO1xuICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gbWF4KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0NvbHVtbiBpbmRleCBvdXQgb2YgcmFuZ2UnKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBDaGVjayB0aGF0IHRoZSBwcm92aWRlZCB2ZWN0b3IgaXMgYW4gYXJyYXkgd2l0aCB0aGUgcmlnaHQgbGVuZ3RoXG4gKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4XG4gKiBAcGFyYW0ge0FycmF5fE1hdHJpeH0gdmVjdG9yXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1Jvd1ZlY3RvcihtYXRyaXgsIHZlY3Rvcikge1xuICBpZiAodmVjdG9yLnRvMURBcnJheSkge1xuICAgIHZlY3RvciA9IHZlY3Rvci50bzFEQXJyYXkoKTtcbiAgfVxuICBpZiAodmVjdG9yLmxlbmd0aCAhPT0gbWF0cml4LmNvbHVtbnMpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcbiAgICAgICd2ZWN0b3Igc2l6ZSBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2YgY29sdW1ucycsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdmVjdG9yO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBDaGVjayB0aGF0IHRoZSBwcm92aWRlZCB2ZWN0b3IgaXMgYW4gYXJyYXkgd2l0aCB0aGUgcmlnaHQgbGVuZ3RoXG4gKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4XG4gKiBAcGFyYW0ge0FycmF5fE1hdHJpeH0gdmVjdG9yXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0NvbHVtblZlY3RvcihtYXRyaXgsIHZlY3Rvcikge1xuICBpZiAodmVjdG9yLnRvMURBcnJheSkge1xuICAgIHZlY3RvciA9IHZlY3Rvci50bzFEQXJyYXkoKTtcbiAgfVxuICBpZiAodmVjdG9yLmxlbmd0aCAhPT0gbWF0cml4LnJvd3MpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndmVjdG9yIHNpemUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIHJvd3MnKTtcbiAgfVxuICByZXR1cm4gdmVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJbmRpY2VzKG1hdHJpeCwgcm93SW5kaWNlcywgY29sdW1uSW5kaWNlcykge1xuICByZXR1cm4ge1xuICAgIHJvdzogY2hlY2tSb3dJbmRpY2VzKG1hdHJpeCwgcm93SW5kaWNlcyksXG4gICAgY29sdW1uOiBjaGVja0NvbHVtbkluZGljZXMobWF0cml4LCBjb2x1bW5JbmRpY2VzKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUm93SW5kaWNlcyhtYXRyaXgsIHJvd0luZGljZXMpIHtcbiAgaWYgKHR5cGVvZiByb3dJbmRpY2VzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuZXhwZWN0ZWQgdHlwZSBmb3Igcm93IGluZGljZXMnKTtcbiAgfVxuXG4gIGxldCByb3dPdXQgPSByb3dJbmRpY2VzLnNvbWUoKHIpID0+IHtcbiAgICByZXR1cm4gciA8IDAgfHwgciA+PSBtYXRyaXgucm93cztcbiAgfSk7XG5cbiAgaWYgKHJvd091dCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyb3cgaW5kaWNlcyBhcmUgb3V0IG9mIHJhbmdlJyk7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkocm93SW5kaWNlcykpIHJvd0luZGljZXMgPSBBcnJheS5mcm9tKHJvd0luZGljZXMpO1xuXG4gIHJldHVybiByb3dJbmRpY2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDb2x1bW5JbmRpY2VzKG1hdHJpeCwgY29sdW1uSW5kaWNlcykge1xuICBpZiAodHlwZW9mIGNvbHVtbkluZGljZXMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndW5leHBlY3RlZCB0eXBlIGZvciBjb2x1bW4gaW5kaWNlcycpO1xuICB9XG5cbiAgbGV0IGNvbHVtbk91dCA9IGNvbHVtbkluZGljZXMuc29tZSgoYykgPT4ge1xuICAgIHJldHVybiBjIDwgMCB8fCBjID49IG1hdHJpeC5jb2x1bW5zO1xuICB9KTtcblxuICBpZiAoY29sdW1uT3V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2NvbHVtbiBpbmRpY2VzIGFyZSBvdXQgb2YgcmFuZ2UnKTtcbiAgfVxuICBpZiAoIUFycmF5LmlzQXJyYXkoY29sdW1uSW5kaWNlcykpIGNvbHVtbkluZGljZXMgPSBBcnJheS5mcm9tKGNvbHVtbkluZGljZXMpO1xuXG4gIHJldHVybiBjb2x1bW5JbmRpY2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSYW5nZShtYXRyaXgsIHN0YXJ0Um93LCBlbmRSb3csIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IDUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZXhwZWN0ZWQgNCBhcmd1bWVudHMnKTtcbiAgfVxuICBjaGVja051bWJlcignc3RhcnRSb3cnLCBzdGFydFJvdyk7XG4gIGNoZWNrTnVtYmVyKCdlbmRSb3cnLCBlbmRSb3cpO1xuICBjaGVja051bWJlcignc3RhcnRDb2x1bW4nLCBzdGFydENvbHVtbik7XG4gIGNoZWNrTnVtYmVyKCdlbmRDb2x1bW4nLCBlbmRDb2x1bW4pO1xuICBpZiAoXG4gICAgc3RhcnRSb3cgPiBlbmRSb3cgfHxcbiAgICBzdGFydENvbHVtbiA+IGVuZENvbHVtbiB8fFxuICAgIHN0YXJ0Um93IDwgMCB8fFxuICAgIHN0YXJ0Um93ID49IG1hdHJpeC5yb3dzIHx8XG4gICAgZW5kUm93IDwgMCB8fFxuICAgIGVuZFJvdyA+PSBtYXRyaXgucm93cyB8fFxuICAgIHN0YXJ0Q29sdW1uIDwgMCB8fFxuICAgIHN0YXJ0Q29sdW1uID49IG1hdHJpeC5jb2x1bW5zIHx8XG4gICAgZW5kQ29sdW1uIDwgMCB8fFxuICAgIGVuZENvbHVtbiA+PSBtYXRyaXguY29sdW1uc1xuICApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignU3VibWF0cml4IGluZGljZXMgYXJlIG91dCBvZiByYW5nZScpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXdBcnJheShsZW5ndGgsIHZhbHVlID0gMCkge1xuICBsZXQgYXJyYXkgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGFycmF5LnB1c2godmFsdWUpO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gY2hlY2tOdW1iZXIobmFtZSwgdmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke25hbWV9IG11c3QgYmUgYSBudW1iZXJgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tOb25FbXB0eShtYXRyaXgpIHtcbiAgaWYgKG1hdHJpeC5pc0VtcHR5KCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtcHR5IG1hdHJpeCBoYXMgbm8gZWxlbWVudHMgdG8gaW5kZXgnKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQWJzdHJhY3RNYXRyaXggfSBmcm9tICcuLi9tYXRyaXgnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXcmFwcGVyTWF0cml4MkQgZXh0ZW5kcyBBYnN0cmFjdE1hdHJpeCB7XG4gIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5yb3dzID0gZGF0YS5sZW5ndGg7XG4gICAgdGhpcy5jb2x1bW5zID0gZGF0YVswXS5sZW5ndGg7XG4gIH1cblxuICBzZXQocm93SW5kZXgsIGNvbHVtbkluZGV4LCB2YWx1ZSkge1xuICAgIHRoaXMuZGF0YVtyb3dJbmRleF1bY29sdW1uSW5kZXhdID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQocm93SW5kZXgsIGNvbHVtbkluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVtyb3dJbmRleF1bY29sdW1uSW5kZXhdO1xuICB9XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSByZXN1bHRba10gPSBtb2Rba107XG4gICAgcmVzdWx0W1wiZGVmYXVsdFwiXSA9IG1vZDtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB1dGlscyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi91dGlsc1wiKSk7XG5mdW5jdGlvbiBtYWtlSGVhcChuUG9pbnRzLCBzaXplKSB7XG4gICAgdmFyIG1ha2VBcnJheXMgPSBmdW5jdGlvbiAoZmlsbFZhbHVlKSB7XG4gICAgICAgIHJldHVybiB1dGlscy5lbXB0eShuUG9pbnRzKS5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWxzLmZpbGxlZChzaXplLCBmaWxsVmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHZhciBoZWFwID0gW107XG4gICAgaGVhcC5wdXNoKG1ha2VBcnJheXMoLTEpKTtcbiAgICBoZWFwLnB1c2gobWFrZUFycmF5cyhJbmZpbml0eSkpO1xuICAgIGhlYXAucHVzaChtYWtlQXJyYXlzKDApKTtcbiAgICByZXR1cm4gaGVhcDtcbn1cbmV4cG9ydHMubWFrZUhlYXAgPSBtYWtlSGVhcDtcbmZ1bmN0aW9uIHJlamVjdGlvblNhbXBsZShuU2FtcGxlcywgcG9vbFNpemUsIHJhbmRvbSkge1xuICAgIHZhciByZXN1bHQgPSB1dGlscy56ZXJvcyhuU2FtcGxlcyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuU2FtcGxlczsgaSsrKSB7XG4gICAgICAgIHZhciByZWplY3RTYW1wbGUgPSB0cnVlO1xuICAgICAgICB2YXIgaiA9IDA7XG4gICAgICAgIHdoaWxlIChyZWplY3RTYW1wbGUpIHtcbiAgICAgICAgICAgIGogPSB1dGlscy50YXVSYW5kSW50KHBvb2xTaXplLCByYW5kb20pO1xuICAgICAgICAgICAgdmFyIGJyb2tlbiA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBpOyBrKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaiA9PT0gcmVzdWx0W2tdKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYnJva2VuKVxuICAgICAgICAgICAgICAgIHJlamVjdFNhbXBsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFtpXSA9IGo7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLnJlamVjdGlvblNhbXBsZSA9IHJlamVjdGlvblNhbXBsZTtcbmZ1bmN0aW9uIGhlYXBQdXNoKGhlYXAsIHJvdywgd2VpZ2h0LCBpbmRleCwgZmxhZykge1xuICAgIHJvdyA9IE1hdGguZmxvb3Iocm93KTtcbiAgICB2YXIgaW5kaWNlcyA9IGhlYXBbMF1bcm93XTtcbiAgICB2YXIgd2VpZ2h0cyA9IGhlYXBbMV1bcm93XTtcbiAgICB2YXIgaXNOZXcgPSBoZWFwWzJdW3Jvd107XG4gICAgaWYgKHdlaWdodCA+PSB3ZWlnaHRzWzBdKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4ID09PSBpbmRpY2VzW2ldKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5jaGVja2VkSGVhcFB1c2goaGVhcCwgcm93LCB3ZWlnaHQsIGluZGV4LCBmbGFnKTtcbn1cbmV4cG9ydHMuaGVhcFB1c2ggPSBoZWFwUHVzaDtcbmZ1bmN0aW9uIHVuY2hlY2tlZEhlYXBQdXNoKGhlYXAsIHJvdywgd2VpZ2h0LCBpbmRleCwgZmxhZykge1xuICAgIHZhciBpbmRpY2VzID0gaGVhcFswXVtyb3ddO1xuICAgIHZhciB3ZWlnaHRzID0gaGVhcFsxXVtyb3ddO1xuICAgIHZhciBpc05ldyA9IGhlYXBbMl1bcm93XTtcbiAgICBpZiAod2VpZ2h0ID49IHdlaWdodHNbMF0pIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHdlaWdodHNbMF0gPSB3ZWlnaHQ7XG4gICAgaW5kaWNlc1swXSA9IGluZGV4O1xuICAgIGlzTmV3WzBdID0gZmxhZztcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGlTd2FwID0gMDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgaWMxID0gMiAqIGkgKyAxO1xuICAgICAgICB2YXIgaWMyID0gaWMxICsgMTtcbiAgICAgICAgdmFyIGhlYXBTaGFwZTIgPSBoZWFwWzBdWzBdLmxlbmd0aDtcbiAgICAgICAgaWYgKGljMSA+PSBoZWFwU2hhcGUyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpYzIgPj0gaGVhcFNoYXBlMikge1xuICAgICAgICAgICAgaWYgKHdlaWdodHNbaWMxXSA+IHdlaWdodCkge1xuICAgICAgICAgICAgICAgIGlTd2FwID0gaWMxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2VpZ2h0c1tpYzFdID49IHdlaWdodHNbaWMyXSkge1xuICAgICAgICAgICAgaWYgKHdlaWdodCA8IHdlaWdodHNbaWMxXSkge1xuICAgICAgICAgICAgICAgIGlTd2FwID0gaWMxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAod2VpZ2h0IDwgd2VpZ2h0c1tpYzJdKSB7XG4gICAgICAgICAgICAgICAgaVN3YXAgPSBpYzI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3ZWlnaHRzW2ldID0gd2VpZ2h0c1tpU3dhcF07XG4gICAgICAgIGluZGljZXNbaV0gPSBpbmRpY2VzW2lTd2FwXTtcbiAgICAgICAgaXNOZXdbaV0gPSBpc05ld1tpU3dhcF07XG4gICAgICAgIGkgPSBpU3dhcDtcbiAgICB9XG4gICAgd2VpZ2h0c1tpXSA9IHdlaWdodDtcbiAgICBpbmRpY2VzW2ldID0gaW5kZXg7XG4gICAgaXNOZXdbaV0gPSBmbGFnO1xuICAgIHJldHVybiAxO1xufVxuZXhwb3J0cy51bmNoZWNrZWRIZWFwUHVzaCA9IHVuY2hlY2tlZEhlYXBQdXNoO1xuZnVuY3Rpb24gYnVpbGRDYW5kaWRhdGVzKGN1cnJlbnRHcmFwaCwgblZlcnRpY2VzLCBuTmVpZ2hib3JzLCBtYXhDYW5kaWRhdGVzLCByYW5kb20pIHtcbiAgICB2YXIgY2FuZGlkYXRlTmVpZ2hib3JzID0gbWFrZUhlYXAoblZlcnRpY2VzLCBtYXhDYW5kaWRhdGVzKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5WZXJ0aWNlczsgaSsrKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbk5laWdoYm9yczsgaisrKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudEdyYXBoWzBdW2ldW2pdIDwgMCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGlkeCA9IGN1cnJlbnRHcmFwaFswXVtpXVtqXTtcbiAgICAgICAgICAgIHZhciBpc24gPSBjdXJyZW50R3JhcGhbMl1baV1bal07XG4gICAgICAgICAgICB2YXIgZCA9IHV0aWxzLnRhdVJhbmQocmFuZG9tKTtcbiAgICAgICAgICAgIGhlYXBQdXNoKGNhbmRpZGF0ZU5laWdoYm9ycywgaSwgZCwgaWR4LCBpc24pO1xuICAgICAgICAgICAgaGVhcFB1c2goY2FuZGlkYXRlTmVpZ2hib3JzLCBpZHgsIGQsIGksIGlzbik7XG4gICAgICAgICAgICBjdXJyZW50R3JhcGhbMl1baV1bal0gPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjYW5kaWRhdGVOZWlnaGJvcnM7XG59XG5leHBvcnRzLmJ1aWxkQ2FuZGlkYXRlcyA9IGJ1aWxkQ2FuZGlkYXRlcztcbmZ1bmN0aW9uIGRlaGVhcFNvcnQoaGVhcCkge1xuICAgIHZhciBpbmRpY2VzID0gaGVhcFswXTtcbiAgICB2YXIgd2VpZ2h0cyA9IGhlYXBbMV07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBpbmRIZWFwID0gaW5kaWNlc1tpXTtcbiAgICAgICAgdmFyIGRpc3RIZWFwID0gd2VpZ2h0c1tpXTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpbmRIZWFwLmxlbmd0aCAtIDE7IGorKykge1xuICAgICAgICAgICAgdmFyIGluZEhlYXBJbmRleCA9IGluZEhlYXAubGVuZ3RoIC0gaiAtIDE7XG4gICAgICAgICAgICB2YXIgZGlzdEhlYXBJbmRleCA9IGRpc3RIZWFwLmxlbmd0aCAtIGogLSAxO1xuICAgICAgICAgICAgdmFyIHRlbXAxID0gaW5kSGVhcFswXTtcbiAgICAgICAgICAgIGluZEhlYXBbMF0gPSBpbmRIZWFwW2luZEhlYXBJbmRleF07XG4gICAgICAgICAgICBpbmRIZWFwW2luZEhlYXBJbmRleF0gPSB0ZW1wMTtcbiAgICAgICAgICAgIHZhciB0ZW1wMiA9IGRpc3RIZWFwWzBdO1xuICAgICAgICAgICAgZGlzdEhlYXBbMF0gPSBkaXN0SGVhcFtkaXN0SGVhcEluZGV4XTtcbiAgICAgICAgICAgIGRpc3RIZWFwW2Rpc3RIZWFwSW5kZXhdID0gdGVtcDI7XG4gICAgICAgICAgICBzaWZ0RG93bihkaXN0SGVhcCwgaW5kSGVhcCwgZGlzdEhlYXBJbmRleCwgMCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgaW5kaWNlczogaW5kaWNlcywgd2VpZ2h0czogd2VpZ2h0cyB9O1xufVxuZXhwb3J0cy5kZWhlYXBTb3J0ID0gZGVoZWFwU29ydDtcbmZ1bmN0aW9uIHNpZnREb3duKGhlYXAxLCBoZWFwMiwgY2VpbGluZywgZWx0KSB7XG4gICAgd2hpbGUgKGVsdCAqIDIgKyAxIDwgY2VpbGluZykge1xuICAgICAgICB2YXIgbGVmdENoaWxkID0gZWx0ICogMiArIDE7XG4gICAgICAgIHZhciByaWdodENoaWxkID0gbGVmdENoaWxkICsgMTtcbiAgICAgICAgdmFyIHN3YXAgPSBlbHQ7XG4gICAgICAgIGlmIChoZWFwMVtzd2FwXSA8IGhlYXAxW2xlZnRDaGlsZF0pIHtcbiAgICAgICAgICAgIHN3YXAgPSBsZWZ0Q2hpbGQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJpZ2h0Q2hpbGQgPCBjZWlsaW5nICYmIGhlYXAxW3N3YXBdIDwgaGVhcDFbcmlnaHRDaGlsZF0pIHtcbiAgICAgICAgICAgIHN3YXAgPSByaWdodENoaWxkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzd2FwID09PSBlbHQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHRlbXAxID0gaGVhcDFbZWx0XTtcbiAgICAgICAgICAgIGhlYXAxW2VsdF0gPSBoZWFwMVtzd2FwXTtcbiAgICAgICAgICAgIGhlYXAxW3N3YXBdID0gdGVtcDE7XG4gICAgICAgICAgICB2YXIgdGVtcDIgPSBoZWFwMltlbHRdO1xuICAgICAgICAgICAgaGVhcDJbZWx0XSA9IGhlYXAyW3N3YXBdO1xuICAgICAgICAgICAgaGVhcDJbc3dhcF0gPSB0ZW1wMjtcbiAgICAgICAgICAgIGVsdCA9IHN3YXA7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBzbWFsbGVzdEZsYWdnZWQoaGVhcCwgcm93KSB7XG4gICAgdmFyIGluZCA9IGhlYXBbMF1bcm93XTtcbiAgICB2YXIgZGlzdCA9IGhlYXBbMV1bcm93XTtcbiAgICB2YXIgZmxhZyA9IGhlYXBbMl1bcm93XTtcbiAgICB2YXIgbWluRGlzdCA9IEluZmluaXR5O1xuICAgIHZhciByZXN1bHRJbmRleCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpID4gaW5kLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChmbGFnW2ldID09PSAxICYmIGRpc3RbaV0gPCBtaW5EaXN0KSB7XG4gICAgICAgICAgICBtaW5EaXN0ID0gZGlzdFtpXTtcbiAgICAgICAgICAgIHJlc3VsdEluZGV4ID0gaTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVzdWx0SW5kZXggPj0gMCkge1xuICAgICAgICBmbGFnW3Jlc3VsdEluZGV4XSA9IDA7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKGluZFtyZXN1bHRJbmRleF0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbn1cbmV4cG9ydHMuc21hbGxlc3RGbGFnZ2VkID0gc21hbGxlc3RGbGFnZ2VkO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgdW1hcF8xID0gcmVxdWlyZShcIi4vdW1hcFwiKTtcbmV4cG9ydHMuVU1BUCA9IHVtYXBfMS5VTUFQO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX192YWx1ZXMgPSAodGhpcyAmJiB0aGlzLl9fdmFsdWVzKSB8fCBmdW5jdGlvbiAobykge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSwgaSA9IDA7XG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgICAgfVxuICAgIH07XG59O1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcbiAgICByZXN1bHRbXCJkZWZhdWx0XCJdID0gbW9kO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIF9hO1xudmFyIHV0aWxzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3V0aWxzXCIpKTtcbnZhciBTcGFyc2VNYXRyaXggPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNwYXJzZU1hdHJpeChyb3dzLCBjb2xzLCB2YWx1ZXMsIGRpbXMpIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLm5Sb3dzID0gMDtcbiAgICAgICAgdGhpcy5uQ29scyA9IDA7XG4gICAgICAgIGlmIChyb3dzLmxlbmd0aCAhPT0gY29scy5sZW5ndGggfHwgcm93cy5sZW5ndGggIT09IHZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncm93cywgY29scyBhbmQgdmFsdWVzIGFycmF5cyBtdXN0IGFsbCBoYXZlIHRoZSBzYW1lIGxlbmd0aCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMublJvd3MgPSBkaW1zWzBdO1xuICAgICAgICB0aGlzLm5Db2xzID0gZGltc1sxXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciByb3cgPSByb3dzW2ldO1xuICAgICAgICAgICAgdmFyIGNvbCA9IGNvbHNbaV07XG4gICAgICAgICAgICB0aGlzLmNoZWNrRGltcyhyb3csIGNvbCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gdGhpcy5tYWtlS2V5KHJvdywgY29sKTtcbiAgICAgICAgICAgIHRoaXMuZW50cmllcy5zZXQoa2V5LCB7IHZhbHVlOiB2YWx1ZXNbaV0sIHJvdzogcm93LCBjb2w6IGNvbCB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLm1ha2VLZXkgPSBmdW5jdGlvbiAocm93LCBjb2wpIHtcbiAgICAgICAgcmV0dXJuIHJvdyArIFwiOlwiICsgY29sO1xuICAgIH07XG4gICAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5jaGVja0RpbXMgPSBmdW5jdGlvbiAocm93LCBjb2wpIHtcbiAgICAgICAgdmFyIHdpdGhpbkJvdW5kcyA9IHJvdyA8IHRoaXMublJvd3MgJiYgY29sIDwgdGhpcy5uQ29scztcbiAgICAgICAgaWYgKCF3aXRoaW5Cb3VuZHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncm93IGFuZC9vciBjb2wgc3BlY2lmaWVkIG91dHNpZGUgb2YgbWF0cml4IGRpbWVuc2lvbnMnKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAocm93LCBjb2wsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hlY2tEaW1zKHJvdywgY29sKTtcbiAgICAgICAgdmFyIGtleSA9IHRoaXMubWFrZUtleShyb3csIGNvbCk7XG4gICAgICAgIGlmICghdGhpcy5lbnRyaWVzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLmVudHJpZXMuc2V0KGtleSwgeyB2YWx1ZTogdmFsdWUsIHJvdzogcm93LCBjb2w6IGNvbCB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW50cmllcy5nZXQoa2V5KS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChyb3csIGNvbCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIGlmIChkZWZhdWx0VmFsdWUgPT09IHZvaWQgMCkgeyBkZWZhdWx0VmFsdWUgPSAwOyB9XG4gICAgICAgIHRoaXMuY2hlY2tEaW1zKHJvdywgY29sKTtcbiAgICAgICAgdmFyIGtleSA9IHRoaXMubWFrZUtleShyb3csIGNvbCk7XG4gICAgICAgIGlmICh0aGlzLmVudHJpZXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVudHJpZXMuZ2V0KGtleSkudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmdldEFsbCA9IGZ1bmN0aW9uIChvcmRlcmVkKSB7XG4gICAgICAgIGlmIChvcmRlcmVkID09PSB2b2lkIDApIHsgb3JkZXJlZCA9IHRydWU7IH1cbiAgICAgICAgdmFyIHJvd0NvbFZhbHVlcyA9IFtdO1xuICAgICAgICB0aGlzLmVudHJpZXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHJvd0NvbFZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChvcmRlcmVkKSB7XG4gICAgICAgICAgICByb3dDb2xWYWx1ZXMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIGlmIChhLnJvdyA9PT0gYi5yb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEuY29sIC0gYi5jb2w7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5yb3cgLSBiLnJvdztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm93Q29sVmFsdWVzO1xuICAgIH07XG4gICAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5nZXREaW1zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gW3RoaXMublJvd3MsIHRoaXMubkNvbHNdO1xuICAgIH07XG4gICAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5nZXRSb3dzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgdmFyIF9iID0gX19yZWFkKF9hLCAyKSwga2V5ID0gX2JbMF0sIHZhbHVlID0gX2JbMV07XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUucm93O1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZ2V0Q29scyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHZhciBfYiA9IF9fcmVhZChfYSwgMiksIGtleSA9IF9iWzBdLCB2YWx1ZSA9IF9iWzFdO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmNvbDtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmdldFZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHZhciBfYiA9IF9fcmVhZChfYSwgMiksIGtleSA9IF9iWzBdLCB2YWx1ZSA9IF9iWzFdO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB0aGlzLmVudHJpZXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIGZuKHZhbHVlLnZhbHVlLCB2YWx1ZS5yb3csIHZhbHVlLmNvbCk7IH0pO1xuICAgIH07XG4gICAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdmFyIHZhbHMgPSBbXTtcbiAgICAgICAgdGhpcy5lbnRyaWVzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YWxzLnB1c2goZm4odmFsdWUudmFsdWUsIHZhbHVlLnJvdywgdmFsdWUuY29sKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZGltcyA9IFt0aGlzLm5Sb3dzLCB0aGlzLm5Db2xzXTtcbiAgICAgICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgodGhpcy5nZXRSb3dzKCksIHRoaXMuZ2V0Q29scygpLCB2YWxzLCBkaW1zKTtcbiAgICB9O1xuICAgIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHJvd3MgPSB1dGlscy5lbXB0eSh0aGlzLm5Sb3dzKTtcbiAgICAgICAgdmFyIG91dHB1dCA9IHJvd3MubWFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB1dGlscy56ZXJvcyhfdGhpcy5uQ29scyk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVudHJpZXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIG91dHB1dFt2YWx1ZS5yb3ddW3ZhbHVlLmNvbF0gPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfTtcbiAgICByZXR1cm4gU3BhcnNlTWF0cml4O1xufSgpKTtcbmV4cG9ydHMuU3BhcnNlTWF0cml4ID0gU3BhcnNlTWF0cml4O1xuZnVuY3Rpb24gdHJhbnNwb3NlKG1hdHJpeCkge1xuICAgIHZhciBjb2xzID0gW107XG4gICAgdmFyIHJvd3MgPSBbXTtcbiAgICB2YXIgdmFscyA9IFtdO1xuICAgIG1hdHJpeC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgcm93LCBjb2wpIHtcbiAgICAgICAgY29scy5wdXNoKHJvdyk7XG4gICAgICAgIHJvd3MucHVzaChjb2wpO1xuICAgICAgICB2YWxzLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHZhciBkaW1zID0gW21hdHJpeC5uQ29scywgbWF0cml4Lm5Sb3dzXTtcbiAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeChyb3dzLCBjb2xzLCB2YWxzLCBkaW1zKTtcbn1cbmV4cG9ydHMudHJhbnNwb3NlID0gdHJhbnNwb3NlO1xuZnVuY3Rpb24gaWRlbnRpdHkoc2l6ZSkge1xuICAgIHZhciBfYSA9IF9fcmVhZChzaXplLCAxKSwgcm93cyA9IF9hWzBdO1xuICAgIHZhciBtYXRyaXggPSBuZXcgU3BhcnNlTWF0cml4KFtdLCBbXSwgW10sIHNpemUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgIG1hdHJpeC5zZXQoaSwgaSwgMSk7XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG59XG5leHBvcnRzLmlkZW50aXR5ID0gaWRlbnRpdHk7XG5mdW5jdGlvbiBwYWlyd2lzZU11bHRpcGx5KGEsIGIpIHtcbiAgICByZXR1cm4gZWxlbWVudFdpc2UoYSwgYiwgZnVuY3Rpb24gKHgsIHkpIHsgcmV0dXJuIHggKiB5OyB9KTtcbn1cbmV4cG9ydHMucGFpcndpc2VNdWx0aXBseSA9IHBhaXJ3aXNlTXVsdGlwbHk7XG5mdW5jdGlvbiBhZGQoYSwgYikge1xuICAgIHJldHVybiBlbGVtZW50V2lzZShhLCBiLCBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4geCArIHk7IH0pO1xufVxuZXhwb3J0cy5hZGQgPSBhZGQ7XG5mdW5jdGlvbiBzdWJ0cmFjdChhLCBiKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRXaXNlKGEsIGIsIGZ1bmN0aW9uICh4LCB5KSB7IHJldHVybiB4IC0geTsgfSk7XG59XG5leHBvcnRzLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG5mdW5jdGlvbiBtYXhpbXVtKGEsIGIpIHtcbiAgICByZXR1cm4gZWxlbWVudFdpc2UoYSwgYiwgZnVuY3Rpb24gKHgsIHkpIHsgcmV0dXJuICh4ID4geSA/IHggOiB5KTsgfSk7XG59XG5leHBvcnRzLm1heGltdW0gPSBtYXhpbXVtO1xuZnVuY3Rpb24gbXVsdGlwbHlTY2FsYXIoYSwgc2NhbGFyKSB7XG4gICAgcmV0dXJuIGEubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgKiBzY2FsYXI7XG4gICAgfSk7XG59XG5leHBvcnRzLm11bHRpcGx5U2NhbGFyID0gbXVsdGlwbHlTY2FsYXI7XG5mdW5jdGlvbiBlbGltaW5hdGVaZXJvcyhtKSB7XG4gICAgdmFyIHplcm9JbmRpY2VzID0gbmV3IFNldCgpO1xuICAgIHZhciB2YWx1ZXMgPSBtLmdldFZhbHVlcygpO1xuICAgIHZhciByb3dzID0gbS5nZXRSb3dzKCk7XG4gICAgdmFyIGNvbHMgPSBtLmdldENvbHMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodmFsdWVzW2ldID09PSAwKSB7XG4gICAgICAgICAgICB6ZXJvSW5kaWNlcy5hZGQoaSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIHJlbW92ZUJ5WmVyb0luZGV4ID0gZnVuY3Rpb24gKF8sIGluZGV4KSB7IHJldHVybiAhemVyb0luZGljZXMuaGFzKGluZGV4KTsgfTtcbiAgICB2YXIgbmV4dFZhbHVlcyA9IHZhbHVlcy5maWx0ZXIocmVtb3ZlQnlaZXJvSW5kZXgpO1xuICAgIHZhciBuZXh0Um93cyA9IHJvd3MuZmlsdGVyKHJlbW92ZUJ5WmVyb0luZGV4KTtcbiAgICB2YXIgbmV4dENvbHMgPSBjb2xzLmZpbHRlcihyZW1vdmVCeVplcm9JbmRleCk7XG4gICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgobmV4dFJvd3MsIG5leHRDb2xzLCBuZXh0VmFsdWVzLCBtLmdldERpbXMoKSk7XG59XG5leHBvcnRzLmVsaW1pbmF0ZVplcm9zID0gZWxpbWluYXRlWmVyb3M7XG5mdW5jdGlvbiBub3JtYWxpemUobSwgbm9ybVR5cGUpIHtcbiAgICBpZiAobm9ybVR5cGUgPT09IHZvaWQgMCkgeyBub3JtVHlwZSA9IFwibDJcIjsgfVxuICAgIHZhciBlXzEsIF9hO1xuICAgIHZhciBub3JtRm4gPSBub3JtRm5zW25vcm1UeXBlXTtcbiAgICB2YXIgY29sc0J5Um93ID0gbmV3IE1hcCgpO1xuICAgIG0uZm9yRWFjaChmdW5jdGlvbiAoXywgcm93LCBjb2wpIHtcbiAgICAgICAgdmFyIGNvbHMgPSBjb2xzQnlSb3cuZ2V0KHJvdykgfHwgW107XG4gICAgICAgIGNvbHMucHVzaChjb2wpO1xuICAgICAgICBjb2xzQnlSb3cuc2V0KHJvdywgY29scyk7XG4gICAgfSk7XG4gICAgdmFyIG5leHRNYXRyaXggPSBuZXcgU3BhcnNlTWF0cml4KFtdLCBbXSwgW10sIG0uZ2V0RGltcygpKTtcbiAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgICAgdmFyIGNvbHMgPSBjb2xzQnlSb3cuZ2V0KHJvdykuc29ydCgpO1xuICAgICAgICB2YXIgdmFscyA9IGNvbHMubWFwKGZ1bmN0aW9uIChjb2wpIHsgcmV0dXJuIG0uZ2V0KHJvdywgY29sKTsgfSk7XG4gICAgICAgIHZhciBub3JtID0gbm9ybUZuKHZhbHMpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vcm0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG5leHRNYXRyaXguc2V0KHJvdywgY29sc1tpXSwgbm9ybVtpXSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICAgIGZvciAodmFyIF9iID0gX192YWx1ZXMoY29sc0J5Um93LmtleXMoKSksIF9jID0gX2IubmV4dCgpOyAhX2MuZG9uZTsgX2MgPSBfYi5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciByb3cgPSBfYy52YWx1ZTtcbiAgICAgICAgICAgIF9sb29wXzEocm93KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHRNYXRyaXg7XG59XG5leHBvcnRzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcbnZhciBub3JtRm5zID0gKF9hID0ge30sXG4gICAgX2FbXCJtYXhcIl0gPSBmdW5jdGlvbiAoeHMpIHtcbiAgICAgICAgdmFyIG1heCA9IC1JbmZpbml0eTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbWF4ID0geHNbaV0gPiBtYXggPyB4c1tpXSA6IG1heDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geHMubWFwKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4IC8gbWF4OyB9KTtcbiAgICB9LFxuICAgIF9hW1wibDFcIl0gPSBmdW5jdGlvbiAoeHMpIHtcbiAgICAgICAgdmFyIHN1bSA9IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHN1bSArPSB4c1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geHMubWFwKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4IC8gc3VtOyB9KTtcbiAgICB9LFxuICAgIF9hW1wibDJcIl0gPSBmdW5jdGlvbiAoeHMpIHtcbiAgICAgICAgdmFyIHN1bSA9IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHN1bSArPSBNYXRoLnBvdyh4c1tpXSwgMik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHhzLm1hcChmdW5jdGlvbiAoeCkgeyByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHgsIDIpIC8gc3VtKTsgfSk7XG4gICAgfSxcbiAgICBfYSk7XG5mdW5jdGlvbiBlbGVtZW50V2lzZShhLCBiLCBvcCkge1xuICAgIHZhciB2aXNpdGVkID0gbmV3IFNldCgpO1xuICAgIHZhciByb3dzID0gW107XG4gICAgdmFyIGNvbHMgPSBbXTtcbiAgICB2YXIgdmFscyA9IFtdO1xuICAgIHZhciBvcGVyYXRlID0gZnVuY3Rpb24gKHJvdywgY29sKSB7XG4gICAgICAgIHJvd3MucHVzaChyb3cpO1xuICAgICAgICBjb2xzLnB1c2goY29sKTtcbiAgICAgICAgdmFyIG5leHRWYWx1ZSA9IG9wKGEuZ2V0KHJvdywgY29sKSwgYi5nZXQocm93LCBjb2wpKTtcbiAgICAgICAgdmFscy5wdXNoKG5leHRWYWx1ZSk7XG4gICAgfTtcbiAgICB2YXIgdmFsdWVzQSA9IGEuZ2V0VmFsdWVzKCk7XG4gICAgdmFyIHJvd3NBID0gYS5nZXRSb3dzKCk7XG4gICAgdmFyIGNvbHNBID0gYS5nZXRDb2xzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXNBLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciByb3cgPSByb3dzQVtpXTtcbiAgICAgICAgdmFyIGNvbCA9IGNvbHNBW2ldO1xuICAgICAgICB2YXIga2V5ID0gcm93ICsgXCI6XCIgKyBjb2w7XG4gICAgICAgIHZpc2l0ZWQuYWRkKGtleSk7XG4gICAgICAgIG9wZXJhdGUocm93LCBjb2wpO1xuICAgIH1cbiAgICB2YXIgdmFsdWVzQiA9IGIuZ2V0VmFsdWVzKCk7XG4gICAgdmFyIHJvd3NCID0gYi5nZXRSb3dzKCk7XG4gICAgdmFyIGNvbHNCID0gYi5nZXRDb2xzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXNCLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciByb3cgPSByb3dzQltpXTtcbiAgICAgICAgdmFyIGNvbCA9IGNvbHNCW2ldO1xuICAgICAgICB2YXIga2V5ID0gcm93ICsgXCI6XCIgKyBjb2w7XG4gICAgICAgIGlmICh2aXNpdGVkLmhhcyhrZXkpKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIG9wZXJhdGUocm93LCBjb2wpO1xuICAgIH1cbiAgICB2YXIgZGltcyA9IFthLm5Sb3dzLCBhLm5Db2xzXTtcbiAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeChyb3dzLCBjb2xzLCB2YWxzLCBkaW1zKTtcbn1cbmZ1bmN0aW9uIGdldENTUih4KSB7XG4gICAgdmFyIGVudHJpZXMgPSBbXTtcbiAgICB4LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCByb3csIGNvbCkge1xuICAgICAgICBlbnRyaWVzLnB1c2goeyB2YWx1ZTogdmFsdWUsIHJvdzogcm93LCBjb2w6IGNvbCB9KTtcbiAgICB9KTtcbiAgICBlbnRyaWVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgaWYgKGEucm93ID09PSBiLnJvdykge1xuICAgICAgICAgICAgcmV0dXJuIGEuY29sIC0gYi5jb2w7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYS5yb3cgLSBiLnJvdztcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHZhciBpbmRpY2VzID0gW107XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgIHZhciBpbmRwdHIgPSBbXTtcbiAgICB2YXIgY3VycmVudFJvdyA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgX2EgPSBlbnRyaWVzW2ldLCByb3cgPSBfYS5yb3csIGNvbCA9IF9hLmNvbCwgdmFsdWUgPSBfYS52YWx1ZTtcbiAgICAgICAgaWYgKHJvdyAhPT0gY3VycmVudFJvdykge1xuICAgICAgICAgICAgY3VycmVudFJvdyA9IHJvdztcbiAgICAgICAgICAgIGluZHB0ci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIGluZGljZXMucHVzaChjb2wpO1xuICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB7IGluZGljZXM6IGluZGljZXMsIHZhbHVlczogdmFsdWVzLCBpbmRwdHI6IGluZHB0ciB9O1xufVxuZXhwb3J0cy5nZXRDU1IgPSBnZXRDU1I7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3ZhbHVlcyA9ICh0aGlzICYmIHRoaXMuX192YWx1ZXMpIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdLCBpID0gMDtcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgICB9XG4gICAgfTtcbn07XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgcmVzdWx0W2tdID0gbW9kW2tdO1xuICAgIHJlc3VsdFtcImRlZmF1bHRcIl0gPSBtb2Q7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgaGVhcCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9oZWFwXCIpKTtcbnZhciBtYXRyaXggPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vbWF0cml4XCIpKTtcbnZhciB0cmVlID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3RyZWVcIikpO1xudmFyIHV0aWxzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3V0aWxzXCIpKTtcbmZ1bmN0aW9uIG1ha2VOTkRlc2NlbnQoZGlzdGFuY2VGbiwgcmFuZG9tKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5ORGVzY2VudChkYXRhLCBsZWFmQXJyYXksIG5OZWlnaGJvcnMsIG5JdGVycywgbWF4Q2FuZGlkYXRlcywgZGVsdGEsIHJobywgcnBUcmVlSW5pdCkge1xuICAgICAgICBpZiAobkl0ZXJzID09PSB2b2lkIDApIHsgbkl0ZXJzID0gMTA7IH1cbiAgICAgICAgaWYgKG1heENhbmRpZGF0ZXMgPT09IHZvaWQgMCkgeyBtYXhDYW5kaWRhdGVzID0gNTA7IH1cbiAgICAgICAgaWYgKGRlbHRhID09PSB2b2lkIDApIHsgZGVsdGEgPSAwLjAwMTsgfVxuICAgICAgICBpZiAocmhvID09PSB2b2lkIDApIHsgcmhvID0gMC41OyB9XG4gICAgICAgIGlmIChycFRyZWVJbml0ID09PSB2b2lkIDApIHsgcnBUcmVlSW5pdCA9IHRydWU7IH1cbiAgICAgICAgdmFyIG5WZXJ0aWNlcyA9IGRhdGEubGVuZ3RoO1xuICAgICAgICB2YXIgY3VycmVudEdyYXBoID0gaGVhcC5tYWtlSGVhcChkYXRhLmxlbmd0aCwgbk5laWdoYm9ycyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGluZGljZXMgPSBoZWFwLnJlamVjdGlvblNhbXBsZShuTmVpZ2hib3JzLCBkYXRhLmxlbmd0aCwgcmFuZG9tKTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaW5kaWNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBkID0gZGlzdGFuY2VGbihkYXRhW2ldLCBkYXRhW2luZGljZXNbal1dKTtcbiAgICAgICAgICAgICAgICBoZWFwLmhlYXBQdXNoKGN1cnJlbnRHcmFwaCwgaSwgZCwgaW5kaWNlc1tqXSwgMSk7XG4gICAgICAgICAgICAgICAgaGVhcC5oZWFwUHVzaChjdXJyZW50R3JhcGgsIGluZGljZXNbal0sIGQsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChycFRyZWVJbml0KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGxlYWZBcnJheS5sZW5ndGg7IG4rKykge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVhZkFycmF5W25dLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZWFmQXJyYXlbbl1baV0gPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gaSArIDE7IGogPCBsZWFmQXJyYXlbbl0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZWFmQXJyYXlbbl1bal0gPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IGRpc3RhbmNlRm4oZGF0YVtsZWFmQXJyYXlbbl1baV1dLCBkYXRhW2xlYWZBcnJheVtuXVtqXV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhcC5oZWFwUHVzaChjdXJyZW50R3JhcGgsIGxlYWZBcnJheVtuXVtpXSwgZCwgbGVhZkFycmF5W25dW2pdLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYXAuaGVhcFB1c2goY3VycmVudEdyYXBoLCBsZWFmQXJyYXlbbl1bal0sIGQsIGxlYWZBcnJheVtuXVtpXSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBuSXRlcnM7IG4rKykge1xuICAgICAgICAgICAgdmFyIGNhbmRpZGF0ZU5laWdoYm9ycyA9IGhlYXAuYnVpbGRDYW5kaWRhdGVzKGN1cnJlbnRHcmFwaCwgblZlcnRpY2VzLCBuTmVpZ2hib3JzLCBtYXhDYW5kaWRhdGVzLCByYW5kb20pO1xuICAgICAgICAgICAgdmFyIGMgPSAwO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuVmVydGljZXM7IGkrKykge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWF4Q2FuZGlkYXRlczsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwID0gTWF0aC5mbG9vcihjYW5kaWRhdGVOZWlnaGJvcnNbMF1baV1bal0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocCA8IDAgfHwgdXRpbHMudGF1UmFuZChyYW5kb20pIDwgcmhvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IG1heENhbmRpZGF0ZXM7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSBNYXRoLmZsb29yKGNhbmRpZGF0ZU5laWdoYm9yc1swXVtpXVtrXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2ogPSBjYW5kaWRhdGVOZWlnaGJvcnNbMl1baV1bal07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2sgPSBjYW5kaWRhdGVOZWlnaGJvcnNbMl1baV1ba107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocSA8IDAgfHwgKCFjaiAmJiAhY2spKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IGRpc3RhbmNlRm4oZGF0YVtwXSwgZGF0YVtxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjICs9IGhlYXAuaGVhcFB1c2goY3VycmVudEdyYXBoLCBwLCBkLCBxLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMgKz0gaGVhcC5oZWFwUHVzaChjdXJyZW50R3JhcGgsIHEsIGQsIHAsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPD0gZGVsdGEgKiBuTmVpZ2hib3JzICogZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgc29ydGVkID0gaGVhcC5kZWhlYXBTb3J0KGN1cnJlbnRHcmFwaCk7XG4gICAgICAgIHJldHVybiBzb3J0ZWQ7XG4gICAgfTtcbn1cbmV4cG9ydHMubWFrZU5ORGVzY2VudCA9IG1ha2VOTkRlc2NlbnQ7XG5mdW5jdGlvbiBtYWtlSW5pdGlhbGl6YXRpb25zKGRpc3RhbmNlRm4pIHtcbiAgICBmdW5jdGlvbiBpbml0RnJvbVJhbmRvbShuTmVpZ2hib3JzLCBkYXRhLCBxdWVyeVBvaW50cywgX2hlYXAsIHJhbmRvbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXJ5UG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgaW5kaWNlcyA9IHV0aWxzLnJlamVjdGlvblNhbXBsZShuTmVpZ2hib3JzLCBkYXRhLmxlbmd0aCwgcmFuZG9tKTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaW5kaWNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGlmIChpbmRpY2VzW2pdIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGQgPSBkaXN0YW5jZUZuKGRhdGFbaW5kaWNlc1tqXV0sIHF1ZXJ5UG9pbnRzW2ldKTtcbiAgICAgICAgICAgICAgICBoZWFwLmhlYXBQdXNoKF9oZWFwLCBpLCBkLCBpbmRpY2VzW2pdLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpbml0RnJvbVRyZWUoX3RyZWUsIGRhdGEsIHF1ZXJ5UG9pbnRzLCBfaGVhcCwgcmFuZG9tKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlcnlQb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBpbmRpY2VzID0gdHJlZS5zZWFyY2hGbGF0VHJlZShxdWVyeVBvaW50c1tpXSwgX3RyZWUsIHJhbmRvbSk7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGluZGljZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kaWNlc1tqXSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgZCA9IGRpc3RhbmNlRm4oZGF0YVtpbmRpY2VzW2pdXSwgcXVlcnlQb2ludHNbaV0pO1xuICAgICAgICAgICAgICAgIGhlYXAuaGVhcFB1c2goX2hlYXAsIGksIGQsIGluZGljZXNbal0sIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHsgaW5pdEZyb21SYW5kb206IGluaXRGcm9tUmFuZG9tLCBpbml0RnJvbVRyZWU6IGluaXRGcm9tVHJlZSB9O1xufVxuZXhwb3J0cy5tYWtlSW5pdGlhbGl6YXRpb25zID0gbWFrZUluaXRpYWxpemF0aW9ucztcbmZ1bmN0aW9uIG1ha2VJbml0aWFsaXplZE5OU2VhcmNoKGRpc3RhbmNlRm4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbm5TZWFyY2hGbihkYXRhLCBncmFwaCwgaW5pdGlhbGl6YXRpb24sIHF1ZXJ5UG9pbnRzKSB7XG4gICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICB2YXIgX2IgPSBtYXRyaXguZ2V0Q1NSKGdyYXBoKSwgaW5kaWNlcyA9IF9iLmluZGljZXMsIGluZHB0ciA9IF9iLmluZHB0cjtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVyeVBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHRyaWVkID0gbmV3IFNldChpbml0aWFsaXphdGlvblswXVtpXSk7XG4gICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIHZhciB2ZXJ0ZXggPSBoZWFwLnNtYWxsZXN0RmxhZ2dlZChpbml0aWFsaXphdGlvbiwgaSk7XG4gICAgICAgICAgICAgICAgaWYgKHZlcnRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBjYW5kaWRhdGVzID0gaW5kaWNlcy5zbGljZShpbmRwdHJbdmVydGV4XSwgaW5kcHRyW3ZlcnRleCArIDFdKTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjYW5kaWRhdGVzXzEgPSBfX3ZhbHVlcyhjYW5kaWRhdGVzKSwgY2FuZGlkYXRlc18xXzEgPSBjYW5kaWRhdGVzXzEubmV4dCgpOyAhY2FuZGlkYXRlc18xXzEuZG9uZTsgY2FuZGlkYXRlc18xXzEgPSBjYW5kaWRhdGVzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FuZGlkYXRlID0gY2FuZGlkYXRlc18xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlID09PSB2ZXJ0ZXggfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPT09IC0xIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZWQuaGFzKGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gZGlzdGFuY2VGbihkYXRhW2NhbmRpZGF0ZV0sIHF1ZXJ5UG9pbnRzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYXAudW5jaGVja2VkSGVhcFB1c2goaW5pdGlhbGl6YXRpb24sIGksIGQsIGNhbmRpZGF0ZSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmllZC5hZGQoY2FuZGlkYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZXNfMV8xICYmICFjYW5kaWRhdGVzXzFfMS5kb25lICYmIChfYSA9IGNhbmRpZGF0ZXNfMS5yZXR1cm4pKSBfYS5jYWxsKGNhbmRpZGF0ZXNfMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5pdGlhbGl6YXRpb247XG4gICAgfTtcbn1cbmV4cG9ydHMubWFrZUluaXRpYWxpemVkTk5TZWFyY2ggPSBtYWtlSW5pdGlhbGl6ZWROTlNlYXJjaDtcbmZ1bmN0aW9uIGluaXRpYWxpemVTZWFyY2goZm9yZXN0LCBkYXRhLCBxdWVyeVBvaW50cywgbk5laWdoYm9ycywgaW5pdEZyb21SYW5kb20sIGluaXRGcm9tVHJlZSwgcmFuZG9tKSB7XG4gICAgdmFyIGVfMiwgX2E7XG4gICAgdmFyIHJlc3VsdHMgPSBoZWFwLm1ha2VIZWFwKHF1ZXJ5UG9pbnRzLmxlbmd0aCwgbk5laWdoYm9ycyk7XG4gICAgaW5pdEZyb21SYW5kb20obk5laWdoYm9ycywgZGF0YSwgcXVlcnlQb2ludHMsIHJlc3VsdHMsIHJhbmRvbSk7XG4gICAgaWYgKGZvcmVzdCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgZm9yZXN0XzEgPSBfX3ZhbHVlcyhmb3Jlc3QpLCBmb3Jlc3RfMV8xID0gZm9yZXN0XzEubmV4dCgpOyAhZm9yZXN0XzFfMS5kb25lOyBmb3Jlc3RfMV8xID0gZm9yZXN0XzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRyZWVfMSA9IGZvcmVzdF8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgaW5pdEZyb21UcmVlKHRyZWVfMSwgZGF0YSwgcXVlcnlQb2ludHMsIHJlc3VsdHMsIHJhbmRvbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChmb3Jlc3RfMV8xICYmICFmb3Jlc3RfMV8xLmRvbmUgJiYgKF9hID0gZm9yZXN0XzEucmV0dXJuKSkgX2EuY2FsbChmb3Jlc3RfMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG59XG5leHBvcnRzLmluaXRpYWxpemVTZWFyY2ggPSBpbml0aWFsaXplU2VhcmNoO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWQgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fdmFsdWVzID0gKHRoaXMgJiYgdGhpcy5fX3ZhbHVlcykgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAwO1xuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICAgIH1cbiAgICB9O1xufTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSByZXN1bHRba10gPSBtb2Rba107XG4gICAgcmVzdWx0W1wiZGVmYXVsdFwiXSA9IG1vZDtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB1dGlscyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi91dGlsc1wiKSk7XG52YXIgRmxhdFRyZWUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEZsYXRUcmVlKGh5cGVycGxhbmVzLCBvZmZzZXRzLCBjaGlsZHJlbiwgaW5kaWNlcykge1xuICAgICAgICB0aGlzLmh5cGVycGxhbmVzID0gaHlwZXJwbGFuZXM7XG4gICAgICAgIHRoaXMub2Zmc2V0cyA9IG9mZnNldHM7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgICAgdGhpcy5pbmRpY2VzID0gaW5kaWNlcztcbiAgICB9XG4gICAgcmV0dXJuIEZsYXRUcmVlO1xufSgpKTtcbmV4cG9ydHMuRmxhdFRyZWUgPSBGbGF0VHJlZTtcbmZ1bmN0aW9uIG1ha2VGb3Jlc3QoZGF0YSwgbk5laWdoYm9ycywgblRyZWVzLCByYW5kb20pIHtcbiAgICB2YXIgbGVhZlNpemUgPSBNYXRoLm1heCgxMCwgbk5laWdoYm9ycyk7XG4gICAgdmFyIHRyZWVzID0gdXRpbHNcbiAgICAgICAgLnJhbmdlKG5UcmVlcylcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoXywgaSkgeyByZXR1cm4gbWFrZVRyZWUoZGF0YSwgbGVhZlNpemUsIGksIHJhbmRvbSk7IH0pO1xuICAgIHZhciBmb3Jlc3QgPSB0cmVlcy5tYXAoZnVuY3Rpb24gKHRyZWUpIHsgcmV0dXJuIGZsYXR0ZW5UcmVlKHRyZWUsIGxlYWZTaXplKTsgfSk7XG4gICAgcmV0dXJuIGZvcmVzdDtcbn1cbmV4cG9ydHMubWFrZUZvcmVzdCA9IG1ha2VGb3Jlc3Q7XG5mdW5jdGlvbiBtYWtlVHJlZShkYXRhLCBsZWFmU2l6ZSwgbiwgcmFuZG9tKSB7XG4gICAgaWYgKGxlYWZTaXplID09PSB2b2lkIDApIHsgbGVhZlNpemUgPSAzMDsgfVxuICAgIHZhciBpbmRpY2VzID0gdXRpbHMucmFuZ2UoZGF0YS5sZW5ndGgpO1xuICAgIHZhciB0cmVlID0gbWFrZUV1Y2xpZGVhblRyZWUoZGF0YSwgaW5kaWNlcywgbGVhZlNpemUsIG4sIHJhbmRvbSk7XG4gICAgcmV0dXJuIHRyZWU7XG59XG5mdW5jdGlvbiBtYWtlRXVjbGlkZWFuVHJlZShkYXRhLCBpbmRpY2VzLCBsZWFmU2l6ZSwgcSwgcmFuZG9tKSB7XG4gICAgaWYgKGxlYWZTaXplID09PSB2b2lkIDApIHsgbGVhZlNpemUgPSAzMDsgfVxuICAgIGlmIChpbmRpY2VzLmxlbmd0aCA+IGxlYWZTaXplKSB7XG4gICAgICAgIHZhciBzcGxpdFJlc3VsdHMgPSBldWNsaWRlYW5SYW5kb21Qcm9qZWN0aW9uU3BsaXQoZGF0YSwgaW5kaWNlcywgcmFuZG9tKTtcbiAgICAgICAgdmFyIGluZGljZXNMZWZ0ID0gc3BsaXRSZXN1bHRzLmluZGljZXNMZWZ0LCBpbmRpY2VzUmlnaHQgPSBzcGxpdFJlc3VsdHMuaW5kaWNlc1JpZ2h0LCBoeXBlcnBsYW5lID0gc3BsaXRSZXN1bHRzLmh5cGVycGxhbmUsIG9mZnNldCA9IHNwbGl0UmVzdWx0cy5vZmZzZXQ7XG4gICAgICAgIHZhciBsZWZ0Q2hpbGQgPSBtYWtlRXVjbGlkZWFuVHJlZShkYXRhLCBpbmRpY2VzTGVmdCwgbGVhZlNpemUsIHEgKyAxLCByYW5kb20pO1xuICAgICAgICB2YXIgcmlnaHRDaGlsZCA9IG1ha2VFdWNsaWRlYW5UcmVlKGRhdGEsIGluZGljZXNSaWdodCwgbGVhZlNpemUsIHEgKyAxLCByYW5kb20pO1xuICAgICAgICB2YXIgbm9kZSA9IHsgbGVmdENoaWxkOiBsZWZ0Q2hpbGQsIHJpZ2h0Q2hpbGQ6IHJpZ2h0Q2hpbGQsIGlzTGVhZjogZmFsc2UsIGh5cGVycGxhbmU6IGh5cGVycGxhbmUsIG9mZnNldDogb2Zmc2V0IH07XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIG5vZGUgPSB7IGluZGljZXM6IGluZGljZXMsIGlzTGVhZjogdHJ1ZSB9O1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG59XG5mdW5jdGlvbiBldWNsaWRlYW5SYW5kb21Qcm9qZWN0aW9uU3BsaXQoZGF0YSwgaW5kaWNlcywgcmFuZG9tKSB7XG4gICAgdmFyIGRpbSA9IGRhdGFbMF0ubGVuZ3RoO1xuICAgIHZhciBsZWZ0SW5kZXggPSB1dGlscy50YXVSYW5kSW50KGluZGljZXMubGVuZ3RoLCByYW5kb20pO1xuICAgIHZhciByaWdodEluZGV4ID0gdXRpbHMudGF1UmFuZEludChpbmRpY2VzLmxlbmd0aCwgcmFuZG9tKTtcbiAgICByaWdodEluZGV4ICs9IGxlZnRJbmRleCA9PT0gcmlnaHRJbmRleCA/IDEgOiAwO1xuICAgIHJpZ2h0SW5kZXggPSByaWdodEluZGV4ICUgaW5kaWNlcy5sZW5ndGg7XG4gICAgdmFyIGxlZnQgPSBpbmRpY2VzW2xlZnRJbmRleF07XG4gICAgdmFyIHJpZ2h0ID0gaW5kaWNlc1tyaWdodEluZGV4XTtcbiAgICB2YXIgaHlwZXJwbGFuZU9mZnNldCA9IDA7XG4gICAgdmFyIGh5cGVycGxhbmVWZWN0b3IgPSB1dGlscy56ZXJvcyhkaW0pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaHlwZXJwbGFuZVZlY3Rvci5sZW5ndGg7IGkrKykge1xuICAgICAgICBoeXBlcnBsYW5lVmVjdG9yW2ldID0gZGF0YVtsZWZ0XVtpXSAtIGRhdGFbcmlnaHRdW2ldO1xuICAgICAgICBoeXBlcnBsYW5lT2Zmc2V0IC09XG4gICAgICAgICAgICAoaHlwZXJwbGFuZVZlY3RvcltpXSAqIChkYXRhW2xlZnRdW2ldICsgZGF0YVtyaWdodF1baV0pKSAvIDIuMDtcbiAgICB9XG4gICAgdmFyIG5MZWZ0ID0gMDtcbiAgICB2YXIgblJpZ2h0ID0gMDtcbiAgICB2YXIgc2lkZSA9IHV0aWxzLnplcm9zKGluZGljZXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG1hcmdpbiA9IGh5cGVycGxhbmVPZmZzZXQ7XG4gICAgICAgIGZvciAodmFyIGQgPSAwOyBkIDwgZGltOyBkKyspIHtcbiAgICAgICAgICAgIG1hcmdpbiArPSBoeXBlcnBsYW5lVmVjdG9yW2RdICogZGF0YVtpbmRpY2VzW2ldXVtkXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWFyZ2luID09PSAwKSB7XG4gICAgICAgICAgICBzaWRlW2ldID0gdXRpbHMudGF1UmFuZEludCgyLCByYW5kb20pO1xuICAgICAgICAgICAgaWYgKHNpZGVbaV0gPT09IDApIHtcbiAgICAgICAgICAgICAgICBuTGVmdCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgblJpZ2h0ICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWFyZ2luID4gMCkge1xuICAgICAgICAgICAgc2lkZVtpXSA9IDA7XG4gICAgICAgICAgICBuTGVmdCArPSAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2lkZVtpXSA9IDE7XG4gICAgICAgICAgICBuUmlnaHQgKz0gMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgaW5kaWNlc0xlZnQgPSB1dGlscy56ZXJvcyhuTGVmdCk7XG4gICAgdmFyIGluZGljZXNSaWdodCA9IHV0aWxzLnplcm9zKG5SaWdodCk7XG4gICAgbkxlZnQgPSAwO1xuICAgIG5SaWdodCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWRlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChzaWRlW2ldID09PSAwKSB7XG4gICAgICAgICAgICBpbmRpY2VzTGVmdFtuTGVmdF0gPSBpbmRpY2VzW2ldO1xuICAgICAgICAgICAgbkxlZnQgKz0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGluZGljZXNSaWdodFtuUmlnaHRdID0gaW5kaWNlc1tpXTtcbiAgICAgICAgICAgIG5SaWdodCArPSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGluZGljZXNMZWZ0OiBpbmRpY2VzTGVmdCxcbiAgICAgICAgaW5kaWNlc1JpZ2h0OiBpbmRpY2VzUmlnaHQsXG4gICAgICAgIGh5cGVycGxhbmU6IGh5cGVycGxhbmVWZWN0b3IsXG4gICAgICAgIG9mZnNldDogaHlwZXJwbGFuZU9mZnNldCxcbiAgICB9O1xufVxuZnVuY3Rpb24gZmxhdHRlblRyZWUodHJlZSwgbGVhZlNpemUpIHtcbiAgICB2YXIgbk5vZGVzID0gbnVtTm9kZXModHJlZSk7XG4gICAgdmFyIG5MZWF2ZXMgPSBudW1MZWF2ZXModHJlZSk7XG4gICAgdmFyIGh5cGVycGxhbmVzID0gdXRpbHNcbiAgICAgICAgLnJhbmdlKG5Ob2RlcylcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoKSB7IHJldHVybiB1dGlscy56ZXJvcyh0cmVlLmh5cGVycGxhbmUgPyB0cmVlLmh5cGVycGxhbmUubGVuZ3RoIDogMCk7IH0pO1xuICAgIHZhciBvZmZzZXRzID0gdXRpbHMuemVyb3Mobk5vZGVzKTtcbiAgICB2YXIgY2hpbGRyZW4gPSB1dGlscy5yYW5nZShuTm9kZXMpLm1hcChmdW5jdGlvbiAoKSB7IHJldHVybiBbLTEsIC0xXTsgfSk7XG4gICAgdmFyIGluZGljZXMgPSB1dGlsc1xuICAgICAgICAucmFuZ2UobkxlYXZlcylcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoKSB7IHJldHVybiB1dGlscy5yYW5nZShsZWFmU2l6ZSkubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIC0xOyB9KTsgfSk7XG4gICAgcmVjdXJzaXZlRmxhdHRlbih0cmVlLCBoeXBlcnBsYW5lcywgb2Zmc2V0cywgY2hpbGRyZW4sIGluZGljZXMsIDAsIDApO1xuICAgIHJldHVybiBuZXcgRmxhdFRyZWUoaHlwZXJwbGFuZXMsIG9mZnNldHMsIGNoaWxkcmVuLCBpbmRpY2VzKTtcbn1cbmZ1bmN0aW9uIHJlY3Vyc2l2ZUZsYXR0ZW4odHJlZSwgaHlwZXJwbGFuZXMsIG9mZnNldHMsIGNoaWxkcmVuLCBpbmRpY2VzLCBub2RlTnVtLCBsZWFmTnVtKSB7XG4gICAgdmFyIF9hO1xuICAgIGlmICh0cmVlLmlzTGVhZikge1xuICAgICAgICBjaGlsZHJlbltub2RlTnVtXVswXSA9IC1sZWFmTnVtO1xuICAgICAgICAoX2EgPSBpbmRpY2VzW2xlYWZOdW1dKS5zcGxpY2UuYXBwbHkoX2EsIF9fc3ByZWFkKFswLCB0cmVlLmluZGljZXMubGVuZ3RoXSwgdHJlZS5pbmRpY2VzKSk7XG4gICAgICAgIGxlYWZOdW0gKz0gMTtcbiAgICAgICAgcmV0dXJuIHsgbm9kZU51bTogbm9kZU51bSwgbGVhZk51bTogbGVhZk51bSB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaHlwZXJwbGFuZXNbbm9kZU51bV0gPSB0cmVlLmh5cGVycGxhbmU7XG4gICAgICAgIG9mZnNldHNbbm9kZU51bV0gPSB0cmVlLm9mZnNldDtcbiAgICAgICAgY2hpbGRyZW5bbm9kZU51bV1bMF0gPSBub2RlTnVtICsgMTtcbiAgICAgICAgdmFyIG9sZE5vZGVOdW0gPSBub2RlTnVtO1xuICAgICAgICB2YXIgcmVzID0gcmVjdXJzaXZlRmxhdHRlbih0cmVlLmxlZnRDaGlsZCwgaHlwZXJwbGFuZXMsIG9mZnNldHMsIGNoaWxkcmVuLCBpbmRpY2VzLCBub2RlTnVtICsgMSwgbGVhZk51bSk7XG4gICAgICAgIG5vZGVOdW0gPSByZXMubm9kZU51bTtcbiAgICAgICAgbGVhZk51bSA9IHJlcy5sZWFmTnVtO1xuICAgICAgICBjaGlsZHJlbltvbGROb2RlTnVtXVsxXSA9IG5vZGVOdW0gKyAxO1xuICAgICAgICByZXMgPSByZWN1cnNpdmVGbGF0dGVuKHRyZWUucmlnaHRDaGlsZCwgaHlwZXJwbGFuZXMsIG9mZnNldHMsIGNoaWxkcmVuLCBpbmRpY2VzLCBub2RlTnVtICsgMSwgbGVhZk51bSk7XG4gICAgICAgIHJldHVybiB7IG5vZGVOdW06IHJlcy5ub2RlTnVtLCBsZWFmTnVtOiByZXMubGVhZk51bSB9O1xuICAgIH1cbn1cbmZ1bmN0aW9uIG51bU5vZGVzKHRyZWUpIHtcbiAgICBpZiAodHJlZS5pc0xlYWYpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gMSArIG51bU5vZGVzKHRyZWUubGVmdENoaWxkKSArIG51bU5vZGVzKHRyZWUucmlnaHRDaGlsZCk7XG4gICAgfVxufVxuZnVuY3Rpb24gbnVtTGVhdmVzKHRyZWUpIHtcbiAgICBpZiAodHJlZS5pc0xlYWYpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVtTGVhdmVzKHRyZWUubGVmdENoaWxkKSArIG51bUxlYXZlcyh0cmVlLnJpZ2h0Q2hpbGQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1ha2VMZWFmQXJyYXkocnBGb3Jlc3QpIHtcbiAgICB2YXIgZV8xLCBfYTtcbiAgICBpZiAocnBGb3Jlc3QubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBycEZvcmVzdF8xID0gX192YWx1ZXMocnBGb3Jlc3QpLCBycEZvcmVzdF8xXzEgPSBycEZvcmVzdF8xLm5leHQoKTsgIXJwRm9yZXN0XzFfMS5kb25lOyBycEZvcmVzdF8xXzEgPSBycEZvcmVzdF8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgIHZhciB0cmVlID0gcnBGb3Jlc3RfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoLmFwcGx5KG91dHB1dCwgX19zcHJlYWQodHJlZS5pbmRpY2VzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChycEZvcmVzdF8xXzEgJiYgIXJwRm9yZXN0XzFfMS5kb25lICYmIChfYSA9IHJwRm9yZXN0XzEucmV0dXJuKSkgX2EuY2FsbChycEZvcmVzdF8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFtbLTFdXTtcbiAgICB9XG59XG5leHBvcnRzLm1ha2VMZWFmQXJyYXkgPSBtYWtlTGVhZkFycmF5O1xuZnVuY3Rpb24gc2VsZWN0U2lkZShoeXBlcnBsYW5lLCBvZmZzZXQsIHBvaW50LCByYW5kb20pIHtcbiAgICB2YXIgbWFyZ2luID0gb2Zmc2V0O1xuICAgIGZvciAodmFyIGQgPSAwOyBkIDwgcG9pbnQubGVuZ3RoOyBkKyspIHtcbiAgICAgICAgbWFyZ2luICs9IGh5cGVycGxhbmVbZF0gKiBwb2ludFtkXTtcbiAgICB9XG4gICAgaWYgKG1hcmdpbiA9PT0gMCkge1xuICAgICAgICB2YXIgc2lkZSA9IHV0aWxzLnRhdVJhbmRJbnQoMiwgcmFuZG9tKTtcbiAgICAgICAgcmV0dXJuIHNpZGU7XG4gICAgfVxuICAgIGVsc2UgaWYgKG1hcmdpbiA+IDApIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG59XG5mdW5jdGlvbiBzZWFyY2hGbGF0VHJlZShwb2ludCwgdHJlZSwgcmFuZG9tKSB7XG4gICAgdmFyIG5vZGUgPSAwO1xuICAgIHdoaWxlICh0cmVlLmNoaWxkcmVuW25vZGVdWzBdID4gMCkge1xuICAgICAgICB2YXIgc2lkZSA9IHNlbGVjdFNpZGUodHJlZS5oeXBlcnBsYW5lc1tub2RlXSwgdHJlZS5vZmZzZXRzW25vZGVdLCBwb2ludCwgcmFuZG9tKTtcbiAgICAgICAgaWYgKHNpZGUgPT09IDApIHtcbiAgICAgICAgICAgIG5vZGUgPSB0cmVlLmNoaWxkcmVuW25vZGVdWzBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbm9kZSA9IHRyZWUuY2hpbGRyZW5bbm9kZV1bMV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIGluZGV4ID0gLTEgKiB0cmVlLmNoaWxkcmVuW25vZGVdWzBdO1xuICAgIHJldHVybiB0cmVlLmluZGljZXNbaW5kZXhdO1xufVxuZXhwb3J0cy5zZWFyY2hGbGF0VHJlZSA9IHNlYXJjaEZsYXRUcmVlO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHJlc3VsdC52YWx1ZSk7IH0pLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xudmFyIF9fcmVhZCA9ICh0aGlzICYmIHRoaXMuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZCkgfHwgZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSByZXN1bHRba10gPSBtb2Rba107XG4gICAgcmVzdWx0W1wiZGVmYXVsdFwiXSA9IG1vZDtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBoZWFwID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2hlYXBcIikpO1xudmFyIG1hdHJpeCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9tYXRyaXhcIikpO1xudmFyIG5uRGVzY2VudCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9ubl9kZXNjZW50XCIpKTtcbnZhciB0cmVlID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3RyZWVcIikpO1xudmFyIHV0aWxzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3V0aWxzXCIpKTtcbnZhciBtbF9sZXZlbmJlcmdfbWFycXVhcmR0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm1sLWxldmVuYmVyZy1tYXJxdWFyZHRcIikpO1xudmFyIFNNT09USF9LX1RPTEVSQU5DRSA9IDFlLTU7XG52YXIgTUlOX0tfRElTVF9TQ0FMRSA9IDFlLTM7XG52YXIgVU1BUCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVU1BUChwYXJhbXMpIHtcbiAgICAgICAgaWYgKHBhcmFtcyA9PT0gdm9pZCAwKSB7IHBhcmFtcyA9IHt9OyB9XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMubGVhcm5pbmdSYXRlID0gMS4wO1xuICAgICAgICB0aGlzLmxvY2FsQ29ubmVjdGl2aXR5ID0gMS4wO1xuICAgICAgICB0aGlzLm1pbkRpc3QgPSAwLjE7XG4gICAgICAgIHRoaXMubkNvbXBvbmVudHMgPSAyO1xuICAgICAgICB0aGlzLm5FcG9jaHMgPSAwO1xuICAgICAgICB0aGlzLm5OZWlnaGJvcnMgPSAxNTtcbiAgICAgICAgdGhpcy5uZWdhdGl2ZVNhbXBsZVJhdGUgPSA1O1xuICAgICAgICB0aGlzLnJhbmRvbSA9IE1hdGgucmFuZG9tO1xuICAgICAgICB0aGlzLnJlcHVsc2lvblN0cmVuZ3RoID0gMS4wO1xuICAgICAgICB0aGlzLnNldE9wTWl4UmF0aW8gPSAxLjA7XG4gICAgICAgIHRoaXMuc3ByZWFkID0gMS4wO1xuICAgICAgICB0aGlzLnRyYW5zZm9ybVF1ZXVlU2l6ZSA9IDQuMDtcbiAgICAgICAgdGhpcy50YXJnZXRNZXRyaWMgPSBcImNhdGVnb3JpY2FsXCI7XG4gICAgICAgIHRoaXMudGFyZ2V0V2VpZ2h0ID0gMC41O1xuICAgICAgICB0aGlzLnRhcmdldE5OZWlnaGJvcnMgPSB0aGlzLm5OZWlnaGJvcnM7XG4gICAgICAgIHRoaXMuZGlzdGFuY2VGbiA9IGV1Y2xpZGVhbjtcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucnBGb3Jlc3QgPSBbXTtcbiAgICAgICAgdGhpcy5lbWJlZGRpbmcgPSBbXTtcbiAgICAgICAgdGhpcy5vcHRpbWl6YXRpb25TdGF0ZSA9IG5ldyBPcHRpbWl6YXRpb25TdGF0ZSgpO1xuICAgICAgICB2YXIgc2V0UGFyYW0gPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAocGFyYW1zW2tleV0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBfdGhpc1trZXldID0gcGFyYW1zW2tleV07XG4gICAgICAgIH07XG4gICAgICAgIHNldFBhcmFtKCdkaXN0YW5jZUZuJyk7XG4gICAgICAgIHNldFBhcmFtKCdsZWFybmluZ1JhdGUnKTtcbiAgICAgICAgc2V0UGFyYW0oJ2xvY2FsQ29ubmVjdGl2aXR5Jyk7XG4gICAgICAgIHNldFBhcmFtKCdtaW5EaXN0Jyk7XG4gICAgICAgIHNldFBhcmFtKCduQ29tcG9uZW50cycpO1xuICAgICAgICBzZXRQYXJhbSgnbkVwb2NocycpO1xuICAgICAgICBzZXRQYXJhbSgnbk5laWdoYm9ycycpO1xuICAgICAgICBzZXRQYXJhbSgnbmVnYXRpdmVTYW1wbGVSYXRlJyk7XG4gICAgICAgIHNldFBhcmFtKCdyYW5kb20nKTtcbiAgICAgICAgc2V0UGFyYW0oJ3JlcHVsc2lvblN0cmVuZ3RoJyk7XG4gICAgICAgIHNldFBhcmFtKCdzZXRPcE1peFJhdGlvJyk7XG4gICAgICAgIHNldFBhcmFtKCdzcHJlYWQnKTtcbiAgICAgICAgc2V0UGFyYW0oJ3RyYW5zZm9ybVF1ZXVlU2l6ZScpO1xuICAgIH1cbiAgICBVTUFQLnByb3RvdHlwZS5maXQgPSBmdW5jdGlvbiAoWCkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVGaXQoWCk7XG4gICAgICAgIHRoaXMub3B0aW1pemVMYXlvdXQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1iZWRkaW5nO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUuZml0QXN5bmMgPSBmdW5jdGlvbiAoWCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrID09PSB2b2lkIDApIHsgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9OyB9XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZpdChYKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgdGhpcy5vcHRpbWl6ZUxheW91dEFzeW5jKGNhbGxiYWNrKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiwgdGhpcy5lbWJlZGRpbmddO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLnNldFN1cGVydmlzZWRQcm9qZWN0aW9uID0gZnVuY3Rpb24gKFksIHBhcmFtcykge1xuICAgICAgICBpZiAocGFyYW1zID09PSB2b2lkIDApIHsgcGFyYW1zID0ge307IH1cbiAgICAgICAgdGhpcy5ZID0gWTtcbiAgICAgICAgdGhpcy50YXJnZXRNZXRyaWMgPSBwYXJhbXMudGFyZ2V0TWV0cmljIHx8IHRoaXMudGFyZ2V0TWV0cmljO1xuICAgICAgICB0aGlzLnRhcmdldFdlaWdodCA9IHBhcmFtcy50YXJnZXRXZWlnaHQgfHwgdGhpcy50YXJnZXRXZWlnaHQ7XG4gICAgICAgIHRoaXMudGFyZ2V0Tk5laWdoYm9ycyA9IHBhcmFtcy50YXJnZXROTmVpZ2hib3JzIHx8IHRoaXMudGFyZ2V0Tk5laWdoYm9ycztcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLnNldFByZWNvbXB1dGVkS05OID0gZnVuY3Rpb24gKGtubkluZGljZXMsIGtubkRpc3RhbmNlcykge1xuICAgICAgICB0aGlzLmtubkluZGljZXMgPSBrbm5JbmRpY2VzO1xuICAgICAgICB0aGlzLmtubkRpc3RhbmNlcyA9IGtubkRpc3RhbmNlcztcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLmluaXRpYWxpemVGaXQgPSBmdW5jdGlvbiAoWCkge1xuICAgICAgICBpZiAoWC5sZW5ndGggPD0gdGhpcy5uTmVpZ2hib3JzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgZW5vdWdoIGRhdGEgcG9pbnRzIChcIiArIFgubGVuZ3RoICsgXCIpIHRvIGNyZWF0ZSBuTmVpZ2hib3JzOiBcIiArIHRoaXMubk5laWdoYm9ycyArIFwiLiAgQWRkIG1vcmUgZGF0YSBwb2ludHMgb3IgYWRqdXN0IHRoZSBjb25maWd1cmF0aW9uLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5YID09PSBYICYmIHRoaXMuaXNJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TkVwb2NocygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuWCA9IFg7XG4gICAgICAgIGlmICghdGhpcy5rbm5JbmRpY2VzICYmICF0aGlzLmtubkRpc3RhbmNlcykge1xuICAgICAgICAgICAgdmFyIGtublJlc3VsdHMgPSB0aGlzLm5lYXJlc3ROZWlnaGJvcnMoWCk7XG4gICAgICAgICAgICB0aGlzLmtubkluZGljZXMgPSBrbm5SZXN1bHRzLmtubkluZGljZXM7XG4gICAgICAgICAgICB0aGlzLmtubkRpc3RhbmNlcyA9IGtublJlc3VsdHMua25uRGlzdGFuY2VzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JhcGggPSB0aGlzLmZ1enp5U2ltcGxpY2lhbFNldChYLCB0aGlzLm5OZWlnaGJvcnMsIHRoaXMuc2V0T3BNaXhSYXRpbyk7XG4gICAgICAgIHRoaXMubWFrZVNlYXJjaEZucygpO1xuICAgICAgICB0aGlzLnNlYXJjaEdyYXBoID0gdGhpcy5tYWtlU2VhcmNoR3JhcGgoWCk7XG4gICAgICAgIHRoaXMucHJvY2Vzc0dyYXBoRm9yU3VwZXJ2aXNlZFByb2plY3Rpb24oKTtcbiAgICAgICAgdmFyIF9hID0gdGhpcy5pbml0aWFsaXplU2ltcGxpY2lhbFNldEVtYmVkZGluZygpLCBoZWFkID0gX2EuaGVhZCwgdGFpbCA9IF9hLnRhaWwsIGVwb2Noc1BlclNhbXBsZSA9IF9hLmVwb2Noc1BlclNhbXBsZTtcbiAgICAgICAgdGhpcy5vcHRpbWl6YXRpb25TdGF0ZS5oZWFkID0gaGVhZDtcbiAgICAgICAgdGhpcy5vcHRpbWl6YXRpb25TdGF0ZS50YWlsID0gdGFpbDtcbiAgICAgICAgdGhpcy5vcHRpbWl6YXRpb25TdGF0ZS5lcG9jaHNQZXJTYW1wbGUgPSBlcG9jaHNQZXJTYW1wbGU7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZU9wdGltaXphdGlvbigpO1xuICAgICAgICB0aGlzLnByZXBhcmVGb3JPcHRpbWl6YXRpb25Mb29wKCk7XG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE5FcG9jaHMoKTtcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLm1ha2VTZWFyY2hGbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IG5uRGVzY2VudC5tYWtlSW5pdGlhbGl6YXRpb25zKHRoaXMuZGlzdGFuY2VGbiksIGluaXRGcm9tVHJlZSA9IF9hLmluaXRGcm9tVHJlZSwgaW5pdEZyb21SYW5kb20gPSBfYS5pbml0RnJvbVJhbmRvbTtcbiAgICAgICAgdGhpcy5pbml0RnJvbVRyZWUgPSBpbml0RnJvbVRyZWU7XG4gICAgICAgIHRoaXMuaW5pdEZyb21SYW5kb20gPSBpbml0RnJvbVJhbmRvbTtcbiAgICAgICAgdGhpcy5zZWFyY2ggPSBubkRlc2NlbnQubWFrZUluaXRpYWxpemVkTk5TZWFyY2godGhpcy5kaXN0YW5jZUZuKTtcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLm1ha2VTZWFyY2hHcmFwaCA9IGZ1bmN0aW9uIChYKSB7XG4gICAgICAgIHZhciBrbm5JbmRpY2VzID0gdGhpcy5rbm5JbmRpY2VzO1xuICAgICAgICB2YXIga25uRGlzdGFuY2VzID0gdGhpcy5rbm5EaXN0YW5jZXM7XG4gICAgICAgIHZhciBkaW1zID0gW1gubGVuZ3RoLCBYLmxlbmd0aF07XG4gICAgICAgIHZhciBzZWFyY2hHcmFwaCA9IG5ldyBtYXRyaXguU3BhcnNlTWF0cml4KFtdLCBbXSwgW10sIGRpbXMpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtubkluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBrbm4gPSBrbm5JbmRpY2VzW2ldO1xuICAgICAgICAgICAgdmFyIGRpc3RhbmNlcyA9IGtubkRpc3RhbmNlc1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwga25uLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5laWdoYm9yID0ga25uW2pdO1xuICAgICAgICAgICAgICAgIHZhciBkaXN0YW5jZSA9IGRpc3RhbmNlc1tqXTtcbiAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaEdyYXBoLnNldChpLCBuZWlnaGJvciwgZGlzdGFuY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgdHJhbnNwb3NlID0gbWF0cml4LnRyYW5zcG9zZShzZWFyY2hHcmFwaCk7XG4gICAgICAgIHJldHVybiBtYXRyaXgubWF4aW11bShzZWFyY2hHcmFwaCwgdHJhbnNwb3NlKTtcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uICh0b1RyYW5zZm9ybSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgcmF3RGF0YSA9IHRoaXMuWDtcbiAgICAgICAgaWYgKHJhd0RhdGEgPT09IHVuZGVmaW5lZCB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBkYXRhIGhhcyBiZWVuIGZpdC4nKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbk5laWdoYm9ycyA9IE1hdGguZmxvb3IodGhpcy5uTmVpZ2hib3JzICogdGhpcy50cmFuc2Zvcm1RdWV1ZVNpemUpO1xuICAgICAgICBuTmVpZ2hib3JzID0gTWF0aC5taW4ocmF3RGF0YS5sZW5ndGgsIG5OZWlnaGJvcnMpO1xuICAgICAgICB2YXIgaW5pdCA9IG5uRGVzY2VudC5pbml0aWFsaXplU2VhcmNoKHRoaXMucnBGb3Jlc3QsIHJhd0RhdGEsIHRvVHJhbnNmb3JtLCBuTmVpZ2hib3JzLCB0aGlzLmluaXRGcm9tUmFuZG9tLCB0aGlzLmluaXRGcm9tVHJlZSwgdGhpcy5yYW5kb20pO1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5zZWFyY2gocmF3RGF0YSwgdGhpcy5zZWFyY2hHcmFwaCwgaW5pdCwgdG9UcmFuc2Zvcm0pO1xuICAgICAgICB2YXIgX2EgPSBoZWFwLmRlaGVhcFNvcnQocmVzdWx0KSwgaW5kaWNlcyA9IF9hLmluZGljZXMsIGRpc3RhbmNlcyA9IF9hLndlaWdodHM7XG4gICAgICAgIGluZGljZXMgPSBpbmRpY2VzLm1hcChmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5zbGljZSgwLCBfdGhpcy5uTmVpZ2hib3JzKTsgfSk7XG4gICAgICAgIGRpc3RhbmNlcyA9IGRpc3RhbmNlcy5tYXAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHguc2xpY2UoMCwgX3RoaXMubk5laWdoYm9ycyk7IH0pO1xuICAgICAgICB2YXIgYWRqdXN0ZWRMb2NhbENvbm5lY3Rpdml0eSA9IE1hdGgubWF4KDAsIHRoaXMubG9jYWxDb25uZWN0aXZpdHkgLSAxKTtcbiAgICAgICAgdmFyIF9iID0gdGhpcy5zbW9vdGhLTk5EaXN0YW5jZShkaXN0YW5jZXMsIHRoaXMubk5laWdoYm9ycywgYWRqdXN0ZWRMb2NhbENvbm5lY3Rpdml0eSksIHNpZ21hcyA9IF9iLnNpZ21hcywgcmhvcyA9IF9iLnJob3M7XG4gICAgICAgIHZhciBfYyA9IHRoaXMuY29tcHV0ZU1lbWJlcnNoaXBTdHJlbmd0aHMoaW5kaWNlcywgZGlzdGFuY2VzLCBzaWdtYXMsIHJob3MpLCByb3dzID0gX2Mucm93cywgY29scyA9IF9jLmNvbHMsIHZhbHMgPSBfYy52YWxzO1xuICAgICAgICB2YXIgc2l6ZSA9IFt0b1RyYW5zZm9ybS5sZW5ndGgsIHJhd0RhdGEubGVuZ3RoXTtcbiAgICAgICAgdmFyIGdyYXBoID0gbmV3IG1hdHJpeC5TcGFyc2VNYXRyaXgocm93cywgY29scywgdmFscywgc2l6ZSk7XG4gICAgICAgIHZhciBub3JtZWQgPSBtYXRyaXgubm9ybWFsaXplKGdyYXBoLCBcImwxXCIpO1xuICAgICAgICB2YXIgY3NyTWF0cml4ID0gbWF0cml4LmdldENTUihub3JtZWQpO1xuICAgICAgICB2YXIgblBvaW50cyA9IHRvVHJhbnNmb3JtLmxlbmd0aDtcbiAgICAgICAgdmFyIGVJbmRpY2VzID0gdXRpbHMucmVzaGFwZTJkKGNzck1hdHJpeC5pbmRpY2VzLCBuUG9pbnRzLCB0aGlzLm5OZWlnaGJvcnMpO1xuICAgICAgICB2YXIgZVdlaWdodHMgPSB1dGlscy5yZXNoYXBlMmQoY3NyTWF0cml4LnZhbHVlcywgblBvaW50cywgdGhpcy5uTmVpZ2hib3JzKTtcbiAgICAgICAgdmFyIGVtYmVkZGluZyA9IGluaXRUcmFuc2Zvcm0oZUluZGljZXMsIGVXZWlnaHRzLCB0aGlzLmVtYmVkZGluZyk7XG4gICAgICAgIHZhciBuRXBvY2hzID0gdGhpcy5uRXBvY2hzXG4gICAgICAgICAgICA/IHRoaXMubkVwb2NocyAvIDNcbiAgICAgICAgICAgIDogZ3JhcGgublJvd3MgPD0gMTAwMDBcbiAgICAgICAgICAgICAgICA/IDEwMFxuICAgICAgICAgICAgICAgIDogMzA7XG4gICAgICAgIHZhciBncmFwaE1heCA9IGdyYXBoXG4gICAgICAgICAgICAuZ2V0VmFsdWVzKClcbiAgICAgICAgICAgIC5yZWR1Y2UoZnVuY3Rpb24gKG1heCwgdmFsKSB7IHJldHVybiAodmFsID4gbWF4ID8gdmFsIDogbWF4KTsgfSwgMCk7XG4gICAgICAgIGdyYXBoID0gZ3JhcGgubWFwKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gKHZhbHVlIDwgZ3JhcGhNYXggLyBuRXBvY2hzID8gMCA6IHZhbHVlKTsgfSk7XG4gICAgICAgIGdyYXBoID0gbWF0cml4LmVsaW1pbmF0ZVplcm9zKGdyYXBoKTtcbiAgICAgICAgdmFyIGVwb2Noc1BlclNhbXBsZSA9IHRoaXMubWFrZUVwb2Noc1BlclNhbXBsZShncmFwaC5nZXRWYWx1ZXMoKSwgbkVwb2Nocyk7XG4gICAgICAgIHZhciBoZWFkID0gZ3JhcGguZ2V0Um93cygpO1xuICAgICAgICB2YXIgdGFpbCA9IGdyYXBoLmdldENvbHMoKTtcbiAgICAgICAgdGhpcy5hc3NpZ25PcHRpbWl6YXRpb25TdGF0ZVBhcmFtZXRlcnMoe1xuICAgICAgICAgICAgaGVhZEVtYmVkZGluZzogZW1iZWRkaW5nLFxuICAgICAgICAgICAgdGFpbEVtYmVkZGluZzogdGhpcy5lbWJlZGRpbmcsXG4gICAgICAgICAgICBoZWFkOiBoZWFkLFxuICAgICAgICAgICAgdGFpbDogdGFpbCxcbiAgICAgICAgICAgIGN1cnJlbnRFcG9jaDogMCxcbiAgICAgICAgICAgIG5FcG9jaHM6IG5FcG9jaHMsXG4gICAgICAgICAgICBuVmVydGljZXM6IGdyYXBoLmdldERpbXMoKVsxXSxcbiAgICAgICAgICAgIGVwb2Noc1BlclNhbXBsZTogZXBvY2hzUGVyU2FtcGxlLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wcmVwYXJlRm9yT3B0aW1pemF0aW9uTG9vcCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpbWl6ZUxheW91dCgpO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUucHJvY2Vzc0dyYXBoRm9yU3VwZXJ2aXNlZFByb2plY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIFkgPSBfYS5ZLCBYID0gX2EuWDtcbiAgICAgICAgaWYgKFkpIHtcbiAgICAgICAgICAgIGlmIChZLmxlbmd0aCAhPT0gWC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xlbmd0aCBvZiBYIGFuZCB5IG11c3QgYmUgZXF1YWwnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnRhcmdldE1ldHJpYyA9PT0gXCJjYXRlZ29yaWNhbFwiKSB7XG4gICAgICAgICAgICAgICAgdmFyIGx0ID0gdGhpcy50YXJnZXRXZWlnaHQgPCAxLjA7XG4gICAgICAgICAgICAgICAgdmFyIGZhckRpc3QgPSBsdCA/IDIuNSAqICgxLjAgLyAoMS4wIC0gdGhpcy50YXJnZXRXZWlnaHQpKSA6IDEuMGUxMjtcbiAgICAgICAgICAgICAgICB0aGlzLmdyYXBoID0gdGhpcy5jYXRlZ29yaWNhbFNpbXBsaWNpYWxTZXRJbnRlcnNlY3Rpb24odGhpcy5ncmFwaCwgWSwgZmFyRGlzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjdXJyZW50RXBvY2ggPSB0aGlzLm9wdGltaXphdGlvblN0YXRlLmN1cnJlbnRFcG9jaDtcbiAgICAgICAgaWYgKGN1cnJlbnRFcG9jaCA8IHRoaXMuZ2V0TkVwb2NocygpKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGltaXplTGF5b3V0U3RlcChjdXJyZW50RXBvY2gpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGltaXphdGlvblN0YXRlLmN1cnJlbnRFcG9jaDtcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLmdldEVtYmVkZGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1iZWRkaW5nO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUubmVhcmVzdE5laWdoYm9ycyA9IGZ1bmN0aW9uIChYKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGRpc3RhbmNlRm4gPSBfYS5kaXN0YW5jZUZuLCBuTmVpZ2hib3JzID0gX2Eubk5laWdoYm9ycztcbiAgICAgICAgdmFyIGxvZzIgPSBmdW5jdGlvbiAobikgeyByZXR1cm4gTWF0aC5sb2cobikgLyBNYXRoLmxvZygyKTsgfTtcbiAgICAgICAgdmFyIG1ldHJpY05ORGVzY2VudCA9IG5uRGVzY2VudC5tYWtlTk5EZXNjZW50KGRpc3RhbmNlRm4sIHRoaXMucmFuZG9tKTtcbiAgICAgICAgdmFyIHJvdW5kID0gZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgICAgIHJldHVybiBuID09PSAwLjUgPyAwIDogTWF0aC5yb3VuZChuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG5UcmVlcyA9IDUgKyBNYXRoLmZsb29yKHJvdW5kKE1hdGgucG93KFgubGVuZ3RoLCAwLjUpIC8gMjAuMCkpO1xuICAgICAgICB2YXIgbkl0ZXJzID0gTWF0aC5tYXgoNSwgTWF0aC5mbG9vcihNYXRoLnJvdW5kKGxvZzIoWC5sZW5ndGgpKSkpO1xuICAgICAgICB0aGlzLnJwRm9yZXN0ID0gdHJlZS5tYWtlRm9yZXN0KFgsIG5OZWlnaGJvcnMsIG5UcmVlcywgdGhpcy5yYW5kb20pO1xuICAgICAgICB2YXIgbGVhZkFycmF5ID0gdHJlZS5tYWtlTGVhZkFycmF5KHRoaXMucnBGb3Jlc3QpO1xuICAgICAgICB2YXIgX2IgPSBtZXRyaWNOTkRlc2NlbnQoWCwgbGVhZkFycmF5LCBuTmVpZ2hib3JzLCBuSXRlcnMpLCBpbmRpY2VzID0gX2IuaW5kaWNlcywgd2VpZ2h0cyA9IF9iLndlaWdodHM7XG4gICAgICAgIHJldHVybiB7IGtubkluZGljZXM6IGluZGljZXMsIGtubkRpc3RhbmNlczogd2VpZ2h0cyB9O1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUuZnV6enlTaW1wbGljaWFsU2V0ID0gZnVuY3Rpb24gKFgsIG5OZWlnaGJvcnMsIHNldE9wTWl4UmF0aW8pIHtcbiAgICAgICAgaWYgKHNldE9wTWl4UmF0aW8gPT09IHZvaWQgMCkgeyBzZXRPcE1peFJhdGlvID0gMS4wOyB9XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIF9iID0gX2Eua25uSW5kaWNlcywga25uSW5kaWNlcyA9IF9iID09PSB2b2lkIDAgPyBbXSA6IF9iLCBfYyA9IF9hLmtubkRpc3RhbmNlcywga25uRGlzdGFuY2VzID0gX2MgPT09IHZvaWQgMCA/IFtdIDogX2MsIGxvY2FsQ29ubmVjdGl2aXR5ID0gX2EubG9jYWxDb25uZWN0aXZpdHk7XG4gICAgICAgIHZhciBfZCA9IHRoaXMuc21vb3RoS05ORGlzdGFuY2Uoa25uRGlzdGFuY2VzLCBuTmVpZ2hib3JzLCBsb2NhbENvbm5lY3Rpdml0eSksIHNpZ21hcyA9IF9kLnNpZ21hcywgcmhvcyA9IF9kLnJob3M7XG4gICAgICAgIHZhciBfZSA9IHRoaXMuY29tcHV0ZU1lbWJlcnNoaXBTdHJlbmd0aHMoa25uSW5kaWNlcywga25uRGlzdGFuY2VzLCBzaWdtYXMsIHJob3MpLCByb3dzID0gX2Uucm93cywgY29scyA9IF9lLmNvbHMsIHZhbHMgPSBfZS52YWxzO1xuICAgICAgICB2YXIgc2l6ZSA9IFtYLmxlbmd0aCwgWC5sZW5ndGhdO1xuICAgICAgICB2YXIgc3BhcnNlTWF0cml4ID0gbmV3IG1hdHJpeC5TcGFyc2VNYXRyaXgocm93cywgY29scywgdmFscywgc2l6ZSk7XG4gICAgICAgIHZhciB0cmFuc3Bvc2UgPSBtYXRyaXgudHJhbnNwb3NlKHNwYXJzZU1hdHJpeCk7XG4gICAgICAgIHZhciBwcm9kTWF0cml4ID0gbWF0cml4LnBhaXJ3aXNlTXVsdGlwbHkoc3BhcnNlTWF0cml4LCB0cmFuc3Bvc2UpO1xuICAgICAgICB2YXIgYSA9IG1hdHJpeC5zdWJ0cmFjdChtYXRyaXguYWRkKHNwYXJzZU1hdHJpeCwgdHJhbnNwb3NlKSwgcHJvZE1hdHJpeCk7XG4gICAgICAgIHZhciBiID0gbWF0cml4Lm11bHRpcGx5U2NhbGFyKGEsIHNldE9wTWl4UmF0aW8pO1xuICAgICAgICB2YXIgYyA9IG1hdHJpeC5tdWx0aXBseVNjYWxhcihwcm9kTWF0cml4LCAxLjAgLSBzZXRPcE1peFJhdGlvKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG1hdHJpeC5hZGQoYiwgYyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5jYXRlZ29yaWNhbFNpbXBsaWNpYWxTZXRJbnRlcnNlY3Rpb24gPSBmdW5jdGlvbiAoc2ltcGxpY2lhbFNldCwgdGFyZ2V0LCBmYXJEaXN0LCB1bmtub3duRGlzdCkge1xuICAgICAgICBpZiAodW5rbm93bkRpc3QgPT09IHZvaWQgMCkgeyB1bmtub3duRGlzdCA9IDEuMDsgfVxuICAgICAgICB2YXIgaW50ZXJzZWN0aW9uID0gZmFzdEludGVyc2VjdGlvbihzaW1wbGljaWFsU2V0LCB0YXJnZXQsIHVua25vd25EaXN0LCBmYXJEaXN0KTtcbiAgICAgICAgaW50ZXJzZWN0aW9uID0gbWF0cml4LmVsaW1pbmF0ZVplcm9zKGludGVyc2VjdGlvbik7XG4gICAgICAgIHJldHVybiByZXNldExvY2FsQ29ubmVjdGl2aXR5KGludGVyc2VjdGlvbik7XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5zbW9vdGhLTk5EaXN0YW5jZSA9IGZ1bmN0aW9uIChkaXN0YW5jZXMsIGssIGxvY2FsQ29ubmVjdGl2aXR5LCBuSXRlciwgYmFuZHdpZHRoKSB7XG4gICAgICAgIGlmIChsb2NhbENvbm5lY3Rpdml0eSA9PT0gdm9pZCAwKSB7IGxvY2FsQ29ubmVjdGl2aXR5ID0gMS4wOyB9XG4gICAgICAgIGlmIChuSXRlciA9PT0gdm9pZCAwKSB7IG5JdGVyID0gNjQ7IH1cbiAgICAgICAgaWYgKGJhbmR3aWR0aCA9PT0gdm9pZCAwKSB7IGJhbmR3aWR0aCA9IDEuMDsgfVxuICAgICAgICB2YXIgdGFyZ2V0ID0gKE1hdGgubG9nKGspIC8gTWF0aC5sb2coMikpICogYmFuZHdpZHRoO1xuICAgICAgICB2YXIgcmhvID0gdXRpbHMuemVyb3MoZGlzdGFuY2VzLmxlbmd0aCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB1dGlscy56ZXJvcyhkaXN0YW5jZXMubGVuZ3RoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXN0YW5jZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBsbyA9IDAuMDtcbiAgICAgICAgICAgIHZhciBoaSA9IEluZmluaXR5O1xuICAgICAgICAgICAgdmFyIG1pZCA9IDEuMDtcbiAgICAgICAgICAgIHZhciBpdGhEaXN0YW5jZXMgPSBkaXN0YW5jZXNbaV07XG4gICAgICAgICAgICB2YXIgbm9uWmVyb0Rpc3RzID0gaXRoRGlzdGFuY2VzLmZpbHRlcihmdW5jdGlvbiAoZCkgeyByZXR1cm4gZCA+IDAuMDsgfSk7XG4gICAgICAgICAgICBpZiAobm9uWmVyb0Rpc3RzLmxlbmd0aCA+PSBsb2NhbENvbm5lY3Rpdml0eSkge1xuICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IE1hdGguZmxvb3IobG9jYWxDb25uZWN0aXZpdHkpO1xuICAgICAgICAgICAgICAgIHZhciBpbnRlcnBvbGF0aW9uID0gbG9jYWxDb25uZWN0aXZpdHkgLSBpbmRleDtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJob1tpXSA9IG5vblplcm9EaXN0c1tpbmRleCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbiA+IFNNT09USF9LX1RPTEVSQU5DRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmhvW2ldICs9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGlvbiAqIChub25aZXJvRGlzdHNbaW5kZXhdIC0gbm9uWmVyb0Rpc3RzW2luZGV4IC0gMV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByaG9baV0gPSBpbnRlcnBvbGF0aW9uICogbm9uWmVyb0Rpc3RzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG5vblplcm9EaXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmhvW2ldID0gdXRpbHMubWF4KG5vblplcm9EaXN0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IG5JdGVyOyBuKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcHN1bSA9IDAuMDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IGRpc3RhbmNlc1tpXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IGRpc3RhbmNlc1tpXVtqXSAtIHJob1tpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwc3VtICs9IE1hdGguZXhwKC0oZCAvIG1pZCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHN1bSArPSAxLjA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKHBzdW0gLSB0YXJnZXQpIDwgU01PT1RIX0tfVE9MRVJBTkNFKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocHN1bSA+IHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICBoaSA9IG1pZDtcbiAgICAgICAgICAgICAgICAgICAgbWlkID0gKGxvICsgaGkpIC8gMi4wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG8gPSBtaWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoaSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pZCAqPSAyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWlkID0gKGxvICsgaGkpIC8gMi4wO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2ldID0gbWlkO1xuICAgICAgICAgICAgaWYgKHJob1tpXSA+IDAuMCkge1xuICAgICAgICAgICAgICAgIHZhciBtZWFuSXRoRGlzdGFuY2VzID0gdXRpbHMubWVhbihpdGhEaXN0YW5jZXMpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHRbaV0gPCBNSU5fS19ESVNUX1NDQUxFICogbWVhbkl0aERpc3RhbmNlcykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBNSU5fS19ESVNUX1NDQUxFICogbWVhbkl0aERpc3RhbmNlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbWVhbkRpc3RhbmNlcyA9IHV0aWxzLm1lYW4oZGlzdGFuY2VzLm1hcCh1dGlscy5tZWFuKSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtpXSA8IE1JTl9LX0RJU1RfU0NBTEUgKiBtZWFuRGlzdGFuY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IE1JTl9LX0RJU1RfU0NBTEUgKiBtZWFuRGlzdGFuY2VzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzaWdtYXM6IHJlc3VsdCwgcmhvczogcmhvIH07XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5jb21wdXRlTWVtYmVyc2hpcFN0cmVuZ3RocyA9IGZ1bmN0aW9uIChrbm5JbmRpY2VzLCBrbm5EaXN0YW5jZXMsIHNpZ21hcywgcmhvcykge1xuICAgICAgICB2YXIgblNhbXBsZXMgPSBrbm5JbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgdmFyIG5OZWlnaGJvcnMgPSBrbm5JbmRpY2VzWzBdLmxlbmd0aDtcbiAgICAgICAgdmFyIHJvd3MgPSB1dGlscy56ZXJvcyhuU2FtcGxlcyAqIG5OZWlnaGJvcnMpO1xuICAgICAgICB2YXIgY29scyA9IHV0aWxzLnplcm9zKG5TYW1wbGVzICogbk5laWdoYm9ycyk7XG4gICAgICAgIHZhciB2YWxzID0gdXRpbHMuemVyb3MoblNhbXBsZXMgKiBuTmVpZ2hib3JzKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuU2FtcGxlczsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5OZWlnaGJvcnM7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciB2YWwgPSAwO1xuICAgICAgICAgICAgICAgIGlmIChrbm5JbmRpY2VzW2ldW2pdID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGtubkluZGljZXNbaV1bal0gPT09IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gMC4wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChrbm5EaXN0YW5jZXNbaV1bal0gLSByaG9zW2ldIDw9IDAuMCkge1xuICAgICAgICAgICAgICAgICAgICB2YWwgPSAxLjA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YWwgPSBNYXRoLmV4cCgtKChrbm5EaXN0YW5jZXNbaV1bal0gLSByaG9zW2ldKSAvIHNpZ21hc1tpXSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByb3dzW2kgKiBuTmVpZ2hib3JzICsgal0gPSBpO1xuICAgICAgICAgICAgICAgIGNvbHNbaSAqIG5OZWlnaGJvcnMgKyBqXSA9IGtubkluZGljZXNbaV1bal07XG4gICAgICAgICAgICAgICAgdmFsc1tpICogbk5laWdoYm9ycyArIGpdID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHJvd3M6IHJvd3MsIGNvbHM6IGNvbHMsIHZhbHM6IHZhbHMgfTtcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLmluaXRpYWxpemVTaW1wbGljaWFsU2V0RW1iZWRkaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgbkVwb2NocyA9IHRoaXMuZ2V0TkVwb2NocygpO1xuICAgICAgICB2YXIgbkNvbXBvbmVudHMgPSB0aGlzLm5Db21wb25lbnRzO1xuICAgICAgICB2YXIgZ3JhcGhWYWx1ZXMgPSB0aGlzLmdyYXBoLmdldFZhbHVlcygpO1xuICAgICAgICB2YXIgZ3JhcGhNYXggPSAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBncmFwaFZhbHVlc1tpXTtcbiAgICAgICAgICAgIGlmIChncmFwaE1heCA8IGdyYXBoVmFsdWVzW2ldKSB7XG4gICAgICAgICAgICAgICAgZ3JhcGhNYXggPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgZ3JhcGggPSB0aGlzLmdyYXBoLm1hcChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA8IGdyYXBoTWF4IC8gbkVwb2Nocykge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5lbWJlZGRpbmcgPSB1dGlscy56ZXJvcyhncmFwaC5uUm93cykubWFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB1dGlscy56ZXJvcyhuQ29tcG9uZW50cykubWFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXRpbHMudGF1UmFuZChfdGhpcy5yYW5kb20pICogMjAgKyAtMTA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciB3ZWlnaHRzID0gW107XG4gICAgICAgIHZhciBoZWFkID0gW107XG4gICAgICAgIHZhciB0YWlsID0gW107XG4gICAgICAgIHZhciByb3dDb2xWYWx1ZXMgPSBncmFwaC5nZXRBbGwoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dDb2xWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IHJvd0NvbFZhbHVlc1tpXTtcbiAgICAgICAgICAgIGlmIChlbnRyeS52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHdlaWdodHMucHVzaChlbnRyeS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGFpbC5wdXNoKGVudHJ5LnJvdyk7XG4gICAgICAgICAgICAgICAgaGVhZC5wdXNoKGVudHJ5LmNvbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVwb2Noc1BlclNhbXBsZSA9IHRoaXMubWFrZUVwb2Noc1BlclNhbXBsZSh3ZWlnaHRzLCBuRXBvY2hzKTtcbiAgICAgICAgcmV0dXJuIHsgaGVhZDogaGVhZCwgdGFpbDogdGFpbCwgZXBvY2hzUGVyU2FtcGxlOiBlcG9jaHNQZXJTYW1wbGUgfTtcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLm1ha2VFcG9jaHNQZXJTYW1wbGUgPSBmdW5jdGlvbiAod2VpZ2h0cywgbkVwb2Nocykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gdXRpbHMuZmlsbGVkKHdlaWdodHMubGVuZ3RoLCAtMS4wKTtcbiAgICAgICAgdmFyIG1heCA9IHV0aWxzLm1heCh3ZWlnaHRzKTtcbiAgICAgICAgdmFyIG5TYW1wbGVzID0gd2VpZ2h0cy5tYXAoZnVuY3Rpb24gKHcpIHsgcmV0dXJuICh3IC8gbWF4KSAqIG5FcG9jaHM7IH0pO1xuICAgICAgICBuU2FtcGxlcy5mb3JFYWNoKGZ1bmN0aW9uIChuLCBpKSB7XG4gICAgICAgICAgICBpZiAobiA+IDApXG4gICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gbkVwb2NocyAvIG5TYW1wbGVzW2ldO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLmFzc2lnbk9wdGltaXphdGlvblN0YXRlUGFyYW1ldGVycyA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW1pemF0aW9uU3RhdGUsIHN0YXRlKTtcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLnByZXBhcmVGb3JPcHRpbWl6YXRpb25Mb29wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCByZXB1bHNpb25TdHJlbmd0aCA9IF9hLnJlcHVsc2lvblN0cmVuZ3RoLCBsZWFybmluZ1JhdGUgPSBfYS5sZWFybmluZ1JhdGUsIG5lZ2F0aXZlU2FtcGxlUmF0ZSA9IF9hLm5lZ2F0aXZlU2FtcGxlUmF0ZTtcbiAgICAgICAgdmFyIF9iID0gdGhpcy5vcHRpbWl6YXRpb25TdGF0ZSwgZXBvY2hzUGVyU2FtcGxlID0gX2IuZXBvY2hzUGVyU2FtcGxlLCBoZWFkRW1iZWRkaW5nID0gX2IuaGVhZEVtYmVkZGluZywgdGFpbEVtYmVkZGluZyA9IF9iLnRhaWxFbWJlZGRpbmc7XG4gICAgICAgIHZhciBkaW0gPSBoZWFkRW1iZWRkaW5nWzBdLmxlbmd0aDtcbiAgICAgICAgdmFyIG1vdmVPdGhlciA9IGhlYWRFbWJlZGRpbmcubGVuZ3RoID09PSB0YWlsRW1iZWRkaW5nLmxlbmd0aDtcbiAgICAgICAgdmFyIGVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlID0gZXBvY2hzUGVyU2FtcGxlLm1hcChmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSAvIG5lZ2F0aXZlU2FtcGxlUmF0ZTsgfSk7XG4gICAgICAgIHZhciBlcG9jaE9mTmV4dE5lZ2F0aXZlU2FtcGxlID0gX19zcHJlYWQoZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGUpO1xuICAgICAgICB2YXIgZXBvY2hPZk5leHRTYW1wbGUgPSBfX3NwcmVhZChlcG9jaHNQZXJTYW1wbGUpO1xuICAgICAgICB0aGlzLmFzc2lnbk9wdGltaXphdGlvblN0YXRlUGFyYW1ldGVycyh7XG4gICAgICAgICAgICBlcG9jaE9mTmV4dFNhbXBsZTogZXBvY2hPZk5leHRTYW1wbGUsXG4gICAgICAgICAgICBlcG9jaE9mTmV4dE5lZ2F0aXZlU2FtcGxlOiBlcG9jaE9mTmV4dE5lZ2F0aXZlU2FtcGxlLFxuICAgICAgICAgICAgZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGU6IGVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlLFxuICAgICAgICAgICAgbW92ZU90aGVyOiBtb3ZlT3RoZXIsXG4gICAgICAgICAgICBpbml0aWFsQWxwaGE6IGxlYXJuaW5nUmF0ZSxcbiAgICAgICAgICAgIGFscGhhOiBsZWFybmluZ1JhdGUsXG4gICAgICAgICAgICBnYW1tYTogcmVwdWxzaW9uU3RyZW5ndGgsXG4gICAgICAgICAgICBkaW06IGRpbSxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5pbml0aWFsaXplT3B0aW1pemF0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaGVhZEVtYmVkZGluZyA9IHRoaXMuZW1iZWRkaW5nO1xuICAgICAgICB2YXIgdGFpbEVtYmVkZGluZyA9IHRoaXMuZW1iZWRkaW5nO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLm9wdGltaXphdGlvblN0YXRlLCBoZWFkID0gX2EuaGVhZCwgdGFpbCA9IF9hLnRhaWwsIGVwb2Noc1BlclNhbXBsZSA9IF9hLmVwb2Noc1BlclNhbXBsZTtcbiAgICAgICAgdmFyIG5FcG9jaHMgPSB0aGlzLmdldE5FcG9jaHMoKTtcbiAgICAgICAgdmFyIG5WZXJ0aWNlcyA9IHRoaXMuZ3JhcGgubkNvbHM7XG4gICAgICAgIHZhciBfYiA9IGZpbmRBQlBhcmFtcyh0aGlzLnNwcmVhZCwgdGhpcy5taW5EaXN0KSwgYSA9IF9iLmEsIGIgPSBfYi5iO1xuICAgICAgICB0aGlzLmFzc2lnbk9wdGltaXphdGlvblN0YXRlUGFyYW1ldGVycyh7XG4gICAgICAgICAgICBoZWFkRW1iZWRkaW5nOiBoZWFkRW1iZWRkaW5nLFxuICAgICAgICAgICAgdGFpbEVtYmVkZGluZzogdGFpbEVtYmVkZGluZyxcbiAgICAgICAgICAgIGhlYWQ6IGhlYWQsXG4gICAgICAgICAgICB0YWlsOiB0YWlsLFxuICAgICAgICAgICAgZXBvY2hzUGVyU2FtcGxlOiBlcG9jaHNQZXJTYW1wbGUsXG4gICAgICAgICAgICBhOiBhLFxuICAgICAgICAgICAgYjogYixcbiAgICAgICAgICAgIG5FcG9jaHM6IG5FcG9jaHMsXG4gICAgICAgICAgICBuVmVydGljZXM6IG5WZXJ0aWNlcyxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5vcHRpbWl6ZUxheW91dFN0ZXAgPSBmdW5jdGlvbiAobikge1xuICAgICAgICB2YXIgb3B0aW1pemF0aW9uU3RhdGUgPSB0aGlzLm9wdGltaXphdGlvblN0YXRlO1xuICAgICAgICB2YXIgaGVhZCA9IG9wdGltaXphdGlvblN0YXRlLmhlYWQsIHRhaWwgPSBvcHRpbWl6YXRpb25TdGF0ZS50YWlsLCBoZWFkRW1iZWRkaW5nID0gb3B0aW1pemF0aW9uU3RhdGUuaGVhZEVtYmVkZGluZywgdGFpbEVtYmVkZGluZyA9IG9wdGltaXphdGlvblN0YXRlLnRhaWxFbWJlZGRpbmcsIGVwb2Noc1BlclNhbXBsZSA9IG9wdGltaXphdGlvblN0YXRlLmVwb2Noc1BlclNhbXBsZSwgZXBvY2hPZk5leHRTYW1wbGUgPSBvcHRpbWl6YXRpb25TdGF0ZS5lcG9jaE9mTmV4dFNhbXBsZSwgZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZSA9IG9wdGltaXphdGlvblN0YXRlLmVwb2NoT2ZOZXh0TmVnYXRpdmVTYW1wbGUsIGVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlID0gb3B0aW1pemF0aW9uU3RhdGUuZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGUsIG1vdmVPdGhlciA9IG9wdGltaXphdGlvblN0YXRlLm1vdmVPdGhlciwgaW5pdGlhbEFscGhhID0gb3B0aW1pemF0aW9uU3RhdGUuaW5pdGlhbEFscGhhLCBhbHBoYSA9IG9wdGltaXphdGlvblN0YXRlLmFscGhhLCBnYW1tYSA9IG9wdGltaXphdGlvblN0YXRlLmdhbW1hLCBhID0gb3B0aW1pemF0aW9uU3RhdGUuYSwgYiA9IG9wdGltaXphdGlvblN0YXRlLmIsIGRpbSA9IG9wdGltaXphdGlvblN0YXRlLmRpbSwgbkVwb2NocyA9IG9wdGltaXphdGlvblN0YXRlLm5FcG9jaHMsIG5WZXJ0aWNlcyA9IG9wdGltaXphdGlvblN0YXRlLm5WZXJ0aWNlcztcbiAgICAgICAgdmFyIGNsaXBWYWx1ZSA9IDQuMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlcG9jaHNQZXJTYW1wbGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlcG9jaE9mTmV4dFNhbXBsZVtpXSA+IG4pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBqID0gaGVhZFtpXTtcbiAgICAgICAgICAgIHZhciBrID0gdGFpbFtpXTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50ID0gaGVhZEVtYmVkZGluZ1tqXTtcbiAgICAgICAgICAgIHZhciBvdGhlciA9IHRhaWxFbWJlZGRpbmdba107XG4gICAgICAgICAgICB2YXIgZGlzdFNxdWFyZWQgPSByRGlzdChjdXJyZW50LCBvdGhlcik7XG4gICAgICAgICAgICB2YXIgZ3JhZENvZWZmID0gMDtcbiAgICAgICAgICAgIGlmIChkaXN0U3F1YXJlZCA+IDApIHtcbiAgICAgICAgICAgICAgICBncmFkQ29lZmYgPSAtMi4wICogYSAqIGIgKiBNYXRoLnBvdyhkaXN0U3F1YXJlZCwgYiAtIDEuMCk7XG4gICAgICAgICAgICAgICAgZ3JhZENvZWZmIC89IGEgKiBNYXRoLnBvdyhkaXN0U3F1YXJlZCwgYikgKyAxLjA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBkID0gMDsgZCA8IGRpbTsgZCsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGdyYWREID0gY2xpcChncmFkQ29lZmYgKiAoY3VycmVudFtkXSAtIG90aGVyW2RdKSwgY2xpcFZhbHVlKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50W2RdICs9IGdyYWREICogYWxwaGE7XG4gICAgICAgICAgICAgICAgaWYgKG1vdmVPdGhlcikge1xuICAgICAgICAgICAgICAgICAgICBvdGhlcltkXSArPSAtZ3JhZEQgKiBhbHBoYTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlcG9jaE9mTmV4dFNhbXBsZVtpXSArPSBlcG9jaHNQZXJTYW1wbGVbaV07XG4gICAgICAgICAgICB2YXIgbk5lZ1NhbXBsZXMgPSBNYXRoLmZsb29yKChuIC0gZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZVtpXSkgLyBlcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZVtpXSk7XG4gICAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IG5OZWdTYW1wbGVzOyBwKyspIHtcbiAgICAgICAgICAgICAgICB2YXIga18xID0gdXRpbHMudGF1UmFuZEludChuVmVydGljZXMsIHRoaXMucmFuZG9tKTtcbiAgICAgICAgICAgICAgICB2YXIgb3RoZXJfMSA9IHRhaWxFbWJlZGRpbmdba18xXTtcbiAgICAgICAgICAgICAgICB2YXIgZGlzdFNxdWFyZWRfMSA9IHJEaXN0KGN1cnJlbnQsIG90aGVyXzEpO1xuICAgICAgICAgICAgICAgIHZhciBncmFkQ29lZmZfMSA9IDAuMDtcbiAgICAgICAgICAgICAgICBpZiAoZGlzdFNxdWFyZWRfMSA+IDAuMCkge1xuICAgICAgICAgICAgICAgICAgICBncmFkQ29lZmZfMSA9IDIuMCAqIGdhbW1hICogYjtcbiAgICAgICAgICAgICAgICAgICAgZ3JhZENvZWZmXzEgLz1cbiAgICAgICAgICAgICAgICAgICAgICAgICgwLjAwMSArIGRpc3RTcXVhcmVkXzEpICogKGEgKiBNYXRoLnBvdyhkaXN0U3F1YXJlZF8xLCBiKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChqID09PSBrXzEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAodmFyIGQgPSAwOyBkIDwgZGltOyBkKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGdyYWREID0gNC4wO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ3JhZENvZWZmXzEgPiAwLjApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyYWREID0gY2xpcChncmFkQ29lZmZfMSAqIChjdXJyZW50W2RdIC0gb3RoZXJfMVtkXSksIGNsaXBWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFtkXSArPSBncmFkRCAqIGFscGhhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVwb2NoT2ZOZXh0TmVnYXRpdmVTYW1wbGVbaV0gKz0gbk5lZ1NhbXBsZXMgKiBlcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZVtpXTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpbWl6YXRpb25TdGF0ZS5hbHBoYSA9IGluaXRpYWxBbHBoYSAqICgxLjAgLSBuIC8gbkVwb2Nocyk7XG4gICAgICAgIG9wdGltaXphdGlvblN0YXRlLmN1cnJlbnRFcG9jaCArPSAxO1xuICAgICAgICByZXR1cm4gaGVhZEVtYmVkZGluZztcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLm9wdGltaXplTGF5b3V0QXN5bmMgPSBmdW5jdGlvbiAoZXBvY2hDYWxsYmFjaykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAoZXBvY2hDYWxsYmFjayA9PT0gdm9pZCAwKSB7IGVwb2NoQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9OyB9XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3RlcCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9fYXdhaXRlcihfdGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIG5FcG9jaHMsIGN1cnJlbnRFcG9jaCwgZXBvY2hDb21wbGV0ZWQsIHNob3VsZFN0b3AsIGlzRmluaXNoZWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2EgPSB0aGlzLm9wdGltaXphdGlvblN0YXRlLCBuRXBvY2hzID0gX2EubkVwb2NocywgY3VycmVudEVwb2NoID0gX2EuY3VycmVudEVwb2NoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWJlZGRpbmcgPSB0aGlzLm9wdGltaXplTGF5b3V0U3RlcChjdXJyZW50RXBvY2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXBvY2hDb21wbGV0ZWQgPSB0aGlzLm9wdGltaXphdGlvblN0YXRlLmN1cnJlbnRFcG9jaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZFN0b3AgPSBlcG9jaENhbGxiYWNrKGVwb2NoQ29tcGxldGVkKSA9PT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0ZpbmlzaGVkID0gZXBvY2hDb21wbGV0ZWQgPT09IG5FcG9jaHM7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFN0b3AgJiYgIWlzRmluaXNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0ZXAoKTsgfSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIsIHJlc29sdmUoaXNGaW5pc2hlZCldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTsgfTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RlcCgpOyB9LCAwKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5vcHRpbWl6ZUxheW91dCA9IGZ1bmN0aW9uIChlcG9jaENhbGxiYWNrKSB7XG4gICAgICAgIGlmIChlcG9jaENhbGxiYWNrID09PSB2b2lkIDApIHsgZXBvY2hDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH07IH1cbiAgICAgICAgdmFyIGlzRmluaXNoZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVtYmVkZGluZyA9IFtdO1xuICAgICAgICB3aGlsZSAoIWlzRmluaXNoZWQpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMub3B0aW1pemF0aW9uU3RhdGUsIG5FcG9jaHMgPSBfYS5uRXBvY2hzLCBjdXJyZW50RXBvY2ggPSBfYS5jdXJyZW50RXBvY2g7XG4gICAgICAgICAgICBlbWJlZGRpbmcgPSB0aGlzLm9wdGltaXplTGF5b3V0U3RlcChjdXJyZW50RXBvY2gpO1xuICAgICAgICAgICAgdmFyIGVwb2NoQ29tcGxldGVkID0gdGhpcy5vcHRpbWl6YXRpb25TdGF0ZS5jdXJyZW50RXBvY2g7XG4gICAgICAgICAgICB2YXIgc2hvdWxkU3RvcCA9IGVwb2NoQ2FsbGJhY2soZXBvY2hDb21wbGV0ZWQpID09PSBmYWxzZTtcbiAgICAgICAgICAgIGlzRmluaXNoZWQgPSBlcG9jaENvbXBsZXRlZCA9PT0gbkVwb2NocyB8fCBzaG91bGRTdG9wO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbWJlZGRpbmc7XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5nZXRORXBvY2hzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZ3JhcGggPSB0aGlzLmdyYXBoO1xuICAgICAgICBpZiAodGhpcy5uRXBvY2hzID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubkVwb2NocztcbiAgICAgICAgfVxuICAgICAgICB2YXIgbGVuZ3RoID0gZ3JhcGgublJvd3M7XG4gICAgICAgIGlmIChsZW5ndGggPD0gMjUwMCkge1xuICAgICAgICAgICAgcmV0dXJuIDUwMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsZW5ndGggPD0gNTAwMCkge1xuICAgICAgICAgICAgcmV0dXJuIDQwMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsZW5ndGggPD0gNzUwMCkge1xuICAgICAgICAgICAgcmV0dXJuIDMwMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAyMDA7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBVTUFQO1xufSgpKTtcbmV4cG9ydHMuVU1BUCA9IFVNQVA7XG5mdW5jdGlvbiBldWNsaWRlYW4oeCwgeSkge1xuICAgIHZhciByZXN1bHQgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgKz0gTWF0aC5wb3coKHhbaV0gLSB5W2ldKSwgMik7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLnNxcnQocmVzdWx0KTtcbn1cbmV4cG9ydHMuZXVjbGlkZWFuID0gZXVjbGlkZWFuO1xuZnVuY3Rpb24gY29zaW5lKHgsIHkpIHtcbiAgICB2YXIgcmVzdWx0ID0gMC4wO1xuICAgIHZhciBub3JtWCA9IDAuMDtcbiAgICB2YXIgbm9ybVkgPSAwLjA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCArPSB4W2ldICogeVtpXTtcbiAgICAgICAgbm9ybVggKz0gTWF0aC5wb3coeFtpXSwgMik7XG4gICAgICAgIG5vcm1ZICs9IE1hdGgucG93KHlbaV0sIDIpO1xuICAgIH1cbiAgICBpZiAobm9ybVggPT09IDAgJiYgbm9ybVkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vcm1YID09PSAwIHx8IG5vcm1ZID09PSAwKSB7XG4gICAgICAgIHJldHVybiAxLjA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gMS4wIC0gcmVzdWx0IC8gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVkpO1xuICAgIH1cbn1cbmV4cG9ydHMuY29zaW5lID0gY29zaW5lO1xudmFyIE9wdGltaXphdGlvblN0YXRlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPcHRpbWl6YXRpb25TdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50RXBvY2ggPSAwO1xuICAgICAgICB0aGlzLmhlYWRFbWJlZGRpbmcgPSBbXTtcbiAgICAgICAgdGhpcy50YWlsRW1iZWRkaW5nID0gW107XG4gICAgICAgIHRoaXMuaGVhZCA9IFtdO1xuICAgICAgICB0aGlzLnRhaWwgPSBbXTtcbiAgICAgICAgdGhpcy5lcG9jaHNQZXJTYW1wbGUgPSBbXTtcbiAgICAgICAgdGhpcy5lcG9jaE9mTmV4dFNhbXBsZSA9IFtdO1xuICAgICAgICB0aGlzLmVwb2NoT2ZOZXh0TmVnYXRpdmVTYW1wbGUgPSBbXTtcbiAgICAgICAgdGhpcy5lcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZSA9IFtdO1xuICAgICAgICB0aGlzLm1vdmVPdGhlciA9IHRydWU7XG4gICAgICAgIHRoaXMuaW5pdGlhbEFscGhhID0gMS4wO1xuICAgICAgICB0aGlzLmFscGhhID0gMS4wO1xuICAgICAgICB0aGlzLmdhbW1hID0gMS4wO1xuICAgICAgICB0aGlzLmEgPSAxLjU3Njk0MzQ2MDMxMTMwNzc7XG4gICAgICAgIHRoaXMuYiA9IDAuODk1MDYwODc3OTEwOTczMztcbiAgICAgICAgdGhpcy5kaW0gPSAyO1xuICAgICAgICB0aGlzLm5FcG9jaHMgPSA1MDA7XG4gICAgICAgIHRoaXMublZlcnRpY2VzID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIE9wdGltaXphdGlvblN0YXRlO1xufSgpKTtcbmZ1bmN0aW9uIGNsaXAoeCwgY2xpcFZhbHVlKSB7XG4gICAgaWYgKHggPiBjbGlwVmFsdWUpXG4gICAgICAgIHJldHVybiBjbGlwVmFsdWU7XG4gICAgZWxzZSBpZiAoeCA8IC1jbGlwVmFsdWUpXG4gICAgICAgIHJldHVybiAtY2xpcFZhbHVlO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHg7XG59XG5mdW5jdGlvbiByRGlzdCh4LCB5KSB7XG4gICAgdmFyIHJlc3VsdCA9IDAuMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ICs9IE1hdGgucG93KHhbaV0gLSB5W2ldLCAyKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGZpbmRBQlBhcmFtcyhzcHJlYWQsIG1pbkRpc3QpIHtcbiAgICB2YXIgY3VydmUgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIF9iID0gX19yZWFkKF9hLCAyKSwgYSA9IF9iWzBdLCBiID0gX2JbMV07XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIDEuMCAvICgxLjAgKyBhICogTWF0aC5wb3coeCwgKDIgKiBiKSkpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIHh2ID0gdXRpbHNcbiAgICAgICAgLmxpbmVhcigwLCBzcHJlYWQgKiAzLCAzMDApXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gKHZhbCA8IG1pbkRpc3QgPyAxLjAgOiB2YWwpOyB9KTtcbiAgICB2YXIgeXYgPSB1dGlscy56ZXJvcyh4di5sZW5ndGgpLm1hcChmdW5jdGlvbiAodmFsLCBpbmRleCkge1xuICAgICAgICB2YXIgZ3RlID0geHZbaW5kZXhdID49IG1pbkRpc3Q7XG4gICAgICAgIHJldHVybiBndGUgPyBNYXRoLmV4cCgtKHh2W2luZGV4XSAtIG1pbkRpc3QpIC8gc3ByZWFkKSA6IHZhbDtcbiAgICB9KTtcbiAgICB2YXIgaW5pdGlhbFZhbHVlcyA9IFswLjUsIDAuNV07XG4gICAgdmFyIGRhdGEgPSB7IHg6IHh2LCB5OiB5diB9O1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBkYW1waW5nOiAxLjUsXG4gICAgICAgIGluaXRpYWxWYWx1ZXM6IGluaXRpYWxWYWx1ZXMsXG4gICAgICAgIGdyYWRpZW50RGlmZmVyZW5jZTogMTBlLTIsXG4gICAgICAgIG1heEl0ZXJhdGlvbnM6IDEwMCxcbiAgICAgICAgZXJyb3JUb2xlcmFuY2U6IDEwZS0zLFxuICAgIH07XG4gICAgdmFyIHBhcmFtZXRlclZhbHVlcyA9IG1sX2xldmVuYmVyZ19tYXJxdWFyZHRfMS5kZWZhdWx0KGRhdGEsIGN1cnZlLCBvcHRpb25zKS5wYXJhbWV0ZXJWYWx1ZXM7XG4gICAgdmFyIF9hID0gX19yZWFkKHBhcmFtZXRlclZhbHVlcywgMiksIGEgPSBfYVswXSwgYiA9IF9hWzFdO1xuICAgIHJldHVybiB7IGE6IGEsIGI6IGIgfTtcbn1cbmV4cG9ydHMuZmluZEFCUGFyYW1zID0gZmluZEFCUGFyYW1zO1xuZnVuY3Rpb24gZmFzdEludGVyc2VjdGlvbihncmFwaCwgdGFyZ2V0LCB1bmtub3duRGlzdCwgZmFyRGlzdCkge1xuICAgIGlmICh1bmtub3duRGlzdCA9PT0gdm9pZCAwKSB7IHVua25vd25EaXN0ID0gMS4wOyB9XG4gICAgaWYgKGZhckRpc3QgPT09IHZvaWQgMCkgeyBmYXJEaXN0ID0gNS4wOyB9XG4gICAgcmV0dXJuIGdyYXBoLm1hcChmdW5jdGlvbiAodmFsdWUsIHJvdywgY29sKSB7XG4gICAgICAgIGlmICh0YXJnZXRbcm93XSA9PT0gLTEgfHwgdGFyZ2V0W2NvbF0gPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgKiBNYXRoLmV4cCgtdW5rbm93bkRpc3QpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRhcmdldFtyb3ddICE9PSB0YXJnZXRbY29sXSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICogTWF0aC5leHAoLWZhckRpc3QpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLmZhc3RJbnRlcnNlY3Rpb24gPSBmYXN0SW50ZXJzZWN0aW9uO1xuZnVuY3Rpb24gcmVzZXRMb2NhbENvbm5lY3Rpdml0eShzaW1wbGljaWFsU2V0KSB7XG4gICAgc2ltcGxpY2lhbFNldCA9IG1hdHJpeC5ub3JtYWxpemUoc2ltcGxpY2lhbFNldCwgXCJtYXhcIik7XG4gICAgdmFyIHRyYW5zcG9zZSA9IG1hdHJpeC50cmFuc3Bvc2Uoc2ltcGxpY2lhbFNldCk7XG4gICAgdmFyIHByb2RNYXRyaXggPSBtYXRyaXgucGFpcndpc2VNdWx0aXBseSh0cmFuc3Bvc2UsIHNpbXBsaWNpYWxTZXQpO1xuICAgIHNpbXBsaWNpYWxTZXQgPSBtYXRyaXguYWRkKHNpbXBsaWNpYWxTZXQsIG1hdHJpeC5zdWJ0cmFjdCh0cmFuc3Bvc2UsIHByb2RNYXRyaXgpKTtcbiAgICByZXR1cm4gbWF0cml4LmVsaW1pbmF0ZVplcm9zKHNpbXBsaWNpYWxTZXQpO1xufVxuZXhwb3J0cy5yZXNldExvY2FsQ29ubmVjdGl2aXR5ID0gcmVzZXRMb2NhbENvbm5lY3Rpdml0eTtcbmZ1bmN0aW9uIGluaXRUcmFuc2Zvcm0oaW5kaWNlcywgd2VpZ2h0cywgZW1iZWRkaW5nKSB7XG4gICAgdmFyIHJlc3VsdCA9IHV0aWxzXG4gICAgICAgIC56ZXJvcyhpbmRpY2VzLmxlbmd0aClcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoeikgeyByZXR1cm4gdXRpbHMuemVyb3MoZW1iZWRkaW5nWzBdLmxlbmd0aCk7IH0pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGluZGljZXNbMF0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGQgPSAwOyBkIDwgZW1iZWRkaW5nWzBdLmxlbmd0aDsgZCsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGEgPSBpbmRpY2VzW2ldW2pdO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtpXVtkXSArPSB3ZWlnaHRzW2ldW2pdICogZW1iZWRkaW5nW2FdW2RdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLmluaXRUcmFuc2Zvcm0gPSBpbml0VHJhbnNmb3JtO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX192YWx1ZXMgPSAodGhpcyAmJiB0aGlzLl9fdmFsdWVzKSB8fCBmdW5jdGlvbiAobykge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSwgaSA9IDA7XG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZnVuY3Rpb24gdGF1UmFuZEludChuLCByYW5kb20pIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihyYW5kb20oKSAqIG4pO1xufVxuZXhwb3J0cy50YXVSYW5kSW50ID0gdGF1UmFuZEludDtcbmZ1bmN0aW9uIHRhdVJhbmQocmFuZG9tKSB7XG4gICAgcmV0dXJuIHJhbmRvbSgpO1xufVxuZXhwb3J0cy50YXVSYW5kID0gdGF1UmFuZDtcbmZ1bmN0aW9uIG5vcm0odmVjKSB7XG4gICAgdmFyIGVfMSwgX2E7XG4gICAgdmFyIHJlc3VsdCA9IDA7XG4gICAgdHJ5IHtcbiAgICAgICAgZm9yICh2YXIgdmVjXzEgPSBfX3ZhbHVlcyh2ZWMpLCB2ZWNfMV8xID0gdmVjXzEubmV4dCgpOyAhdmVjXzFfMS5kb25lOyB2ZWNfMV8xID0gdmVjXzEubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHZlY18xXzEudmFsdWU7XG4gICAgICAgICAgICByZXN1bHQgKz0gTWF0aC5wb3coaXRlbSwgMik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh2ZWNfMV8xICYmICF2ZWNfMV8xLmRvbmUgJiYgKF9hID0gdmVjXzEucmV0dXJuKSkgX2EuY2FsbCh2ZWNfMSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gTWF0aC5zcXJ0KHJlc3VsdCk7XG59XG5leHBvcnRzLm5vcm0gPSBub3JtO1xuZnVuY3Rpb24gZW1wdHkobikge1xuICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICBvdXRwdXQucHVzaCh1bmRlZmluZWQpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xufVxuZXhwb3J0cy5lbXB0eSA9IGVtcHR5O1xuZnVuY3Rpb24gcmFuZ2Uobikge1xuICAgIHJldHVybiBlbXB0eShuKS5tYXAoZnVuY3Rpb24gKF8sIGkpIHsgcmV0dXJuIGk7IH0pO1xufVxuZXhwb3J0cy5yYW5nZSA9IHJhbmdlO1xuZnVuY3Rpb24gZmlsbGVkKG4sIHYpIHtcbiAgICByZXR1cm4gZW1wdHkobikubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHY7IH0pO1xufVxuZXhwb3J0cy5maWxsZWQgPSBmaWxsZWQ7XG5mdW5jdGlvbiB6ZXJvcyhuKSB7XG4gICAgcmV0dXJuIGZpbGxlZChuLCAwKTtcbn1cbmV4cG9ydHMuemVyb3MgPSB6ZXJvcztcbmZ1bmN0aW9uIG9uZXMobikge1xuICAgIHJldHVybiBmaWxsZWQobiwgMSk7XG59XG5leHBvcnRzLm9uZXMgPSBvbmVzO1xuZnVuY3Rpb24gbGluZWFyKGEsIGIsIGxlbikge1xuICAgIHJldHVybiBlbXB0eShsZW4pLm1hcChmdW5jdGlvbiAoXywgaSkge1xuICAgICAgICByZXR1cm4gYSArIGkgKiAoKGIgLSBhKSAvIChsZW4gLSAxKSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmxpbmVhciA9IGxpbmVhcjtcbmZ1bmN0aW9uIHN1bShpbnB1dCkge1xuICAgIHJldHVybiBpbnB1dC5yZWR1Y2UoZnVuY3Rpb24gKHN1bSwgdmFsKSB7IHJldHVybiBzdW0gKyB2YWw7IH0pO1xufVxuZXhwb3J0cy5zdW0gPSBzdW07XG5mdW5jdGlvbiBtZWFuKGlucHV0KSB7XG4gICAgcmV0dXJuIHN1bShpbnB1dCkgLyBpbnB1dC5sZW5ndGg7XG59XG5leHBvcnRzLm1lYW4gPSBtZWFuO1xuZnVuY3Rpb24gbWF4KGlucHV0KSB7XG4gICAgdmFyIG1heCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBtYXggPSBpbnB1dFtpXSA+IG1heCA/IGlucHV0W2ldIDogbWF4O1xuICAgIH1cbiAgICByZXR1cm4gbWF4O1xufVxuZXhwb3J0cy5tYXggPSBtYXg7XG5mdW5jdGlvbiBtYXgyZChpbnB1dCkge1xuICAgIHZhciBtYXggPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpbnB1dFtpXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgbWF4ID0gaW5wdXRbaV1bal0gPiBtYXggPyBpbnB1dFtpXVtqXSA6IG1heDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF4O1xufVxuZXhwb3J0cy5tYXgyZCA9IG1heDJkO1xuZnVuY3Rpb24gcmVqZWN0aW9uU2FtcGxlKG5TYW1wbGVzLCBwb29sU2l6ZSwgcmFuZG9tKSB7XG4gICAgdmFyIHJlc3VsdCA9IHplcm9zKG5TYW1wbGVzKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5TYW1wbGVzOyBpKyspIHtcbiAgICAgICAgdmFyIHJlamVjdFNhbXBsZSA9IHRydWU7XG4gICAgICAgIHdoaWxlIChyZWplY3RTYW1wbGUpIHtcbiAgICAgICAgICAgIHZhciBqID0gdGF1UmFuZEludChwb29sU2l6ZSwgcmFuZG9tKTtcbiAgICAgICAgICAgIHZhciBicm9rZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgaTsgaysrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGogPT09IHJlc3VsdFtrXSkge1xuICAgICAgICAgICAgICAgICAgICBicm9rZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWJyb2tlbikge1xuICAgICAgICAgICAgICAgIHJlamVjdFNhbXBsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2ldID0gajtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5yZWplY3Rpb25TYW1wbGUgPSByZWplY3Rpb25TYW1wbGU7XG5mdW5jdGlvbiByZXNoYXBlMmQoeCwgYSwgYikge1xuICAgIHZhciByb3dzID0gW107XG4gICAgdmFyIGNvdW50ID0gMDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGlmICh4Lmxlbmd0aCAhPT0gYSAqIGIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcnJheSBkaW1lbnNpb25zIG11c3QgbWF0Y2ggaW5wdXQgbGVuZ3RoLicpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGE7IGkrKykge1xuICAgICAgICB2YXIgY29sID0gW107XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYjsgaisrKSB7XG4gICAgICAgICAgICBjb2wucHVzaCh4W2luZGV4XSk7XG4gICAgICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICB9XG4gICAgICAgIHJvd3MucHVzaChjb2wpO1xuICAgICAgICBjb3VudCArPSAxO1xuICAgIH1cbiAgICByZXR1cm4gcm93cztcbn1cbmV4cG9ydHMucmVzaGFwZTJkID0gcmVzaGFwZTJkO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImltcG9ydCB7IERpbWVuc2lvbmFsaXR5UmVkdWNlciB9IGZyb20gJy4uL3JlZHVjZS1kaW1lbnNpb25hbGl0eSc7XG4vKipcbiAqIFdvcmtlciB0aHJlYWQgcmVjZWl2aW5nIGRhdGEgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHthbnlbXX0gY29sdW1uRGF0YSBTYW1wbGVzIHRvIHByb2Nlc3MuXG4gKiBAcGFyYW0ge0tub3duTWV0aG9kc30gbWV0aG9kIEVtYmVkZGluZyBtZXRob2QuXG4gKiBAcGFyYW0ge0tub3duTWV0cmljc30gbWVhc3VyZSBEaXN0YW5jZSBtZXRyaWMuXG4gKiBAcGFyYW0ge251bWJlcn0gY3ljbGVzQ291bnQgTnVtYmVyIG9mIGN5Y2xlcyB0byByZXBlYXQuXG4gKiBAcmV0dXJuIHthbnl9IEVtYmVkZGluZyAoYW5kIGRpc3RhbmNlIG1hdHJpeCB3aGVyZSBhcHBsaWNhYmxlKS5cbiAqL1xuZnVuY3Rpb24gb25NZXNzYWdlKGNvbHVtbkRhdGEsIG1ldGhvZCwgbWVhc3VyZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IHJlZHVjZXIgPSBuZXcgRGltZW5zaW9uYWxpdHlSZWR1Y2VyKGNvbHVtbkRhdGEsIG1ldGhvZCwgbWVhc3VyZSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHJlZHVjZXIudHJhbnNmb3JtKHRydWUpO1xufVxuc2VsZi5vbm1lc3NhZ2UgPSAoeyBkYXRhOiB7IGNvbHVtbkRhdGEsIG1ldGhvZCwgbWVhc3VyZSwgb3B0aW9ucyB9IH0pID0+IHtcbiAgICBjb25zdCBlbWJlZGRpbmcgPSBvbk1lc3NhZ2UoY29sdW1uRGF0YSwgbWV0aG9kLCBtZWFzdXJlLCBvcHRpb25zKTtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgZGlzdGFuY2U6IGVtYmVkZGluZy5kaXN0YW5jZSxcbiAgICAgICAgZW1iZWRkaW5nOiBlbWJlZGRpbmcuZW1iZWRkaW5nLFxuICAgIH0pO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpHbHRaVzV6YVc5dVlXeHBkSGt0Y21Wa2RXTmxjaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkltUnBiV1Z1YzJsdmJtRnNhWFI1TFhKbFpIVmpaWEl1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRXNUMEZCVHl4RlFVRkRMSEZDUVVGeFFpeEZRVUZsTEUxQlFVMHNNRUpCUVRCQ0xFTkJRVU03UVVGSE4wVTdPenM3T3pzN08wZEJVVWM3UVVGRFNDeFRRVUZUTEZOQlFWTXNRMEZCUXl4VlFVRnBRaXhGUVVGRkxFMUJRVzlDTEVWQlFVVXNUMEZCY1VJc1JVRkJSU3hQUVVGaE8wbEJRemxHTEUxQlFVMHNUMEZCVHl4SFFVRkhMRWxCUVVrc2NVSkJRWEZDTEVOQlEzWkRMRlZCUVZVc1JVRkRWaXhOUVVGTkxFVkJRMDRzVDBGQlR5eEZRVU5RTEU5QlFVOHNRMEZEVWl4RFFVRkRPMGxCUTBZc1QwRkJUeXhQUVVGUExFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUTJwRExFTkJRVU03UVVGRlJDeEpRVUZKTEVOQlFVTXNVMEZCVXl4SFFVRkhMRU5CUVVNc1JVRkJReXhKUVVGSkxFVkJRVVVzUlVGQlF5eFZRVUZWTEVWQlFVVXNUVUZCVFN4RlFVRkZMRTlCUVU4c1JVRkJSU3hQUVVGUExFVkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVVTdTVUZEYkVVc1RVRkJUU3hUUVVGVExFZEJRVWNzVTBGQlV5eERRVUZETEZWQlFWVXNSVUZCUlN4TlFVRk5MRVZCUVVVc1QwRkJUeXhGUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETzBsQlEyeEZMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU03VVVGRFppeFJRVUZSTEVWQlFVVXNVMEZCVXl4RFFVRkRMRkZCUVZFN1VVRkROVUlzVTBGQlV5eEZRVUZGTEZOQlFWTXNRMEZCUXl4VFFVRlRPMHRCUXk5Q0xFTkJRVU1zUTBGQlF6dEJRVU5NTEVOQlFVTXNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCN1JHbHRaVzV6YVc5dVlXeHBkSGxTWldSMVkyVnlMQ0JMYm05M2JrMWxkR2h2WkhOOUlHWnliMjBnSnk0dUwzSmxaSFZqWlMxa2FXMWxibk5wYjI1aGJHbDBlU2M3WEc1cGJYQnZjblFnZTB0dWIzZHVUV1YwY21samMzMGdabkp2YlNBbkxpNHZkSGx3WldRdGJXVjBjbWxqY3ljN1hHNWNiaThxS2x4dUlDb2dWMjl5YTJWeUlIUm9jbVZoWkNCeVpXTmxhWFpwYm1jZ1pHRjBZU0JtZFc1amRHbHZiaTVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlMkZ1ZVZ0ZGZTQmpiMngxYlc1RVlYUmhJRk5oYlhCc1pYTWdkRzhnY0hKdlkyVnpjeTVjYmlBcUlFQndZWEpoYlNCN1MyNXZkMjVOWlhSb2IyUnpmU0J0WlhSb2IyUWdSVzFpWldSa2FXNW5JRzFsZEdodlpDNWNiaUFxSUVCd1lYSmhiU0I3UzI1dmQyNU5aWFJ5YVdOemZTQnRaV0Z6ZFhKbElFUnBjM1JoYm1ObElHMWxkSEpwWXk1Y2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQmplV05zWlhORGIzVnVkQ0JPZFcxaVpYSWdiMllnWTNsamJHVnpJSFJ2SUhKbGNHVmhkQzVjYmlBcUlFQnlaWFIxY200Z2UyRnVlWDBnUlcxaVpXUmthVzVuSUNoaGJtUWdaR2x6ZEdGdVkyVWdiV0YwY21sNElIZG9aWEpsSUdGd2NHeHBZMkZpYkdVcExseHVJQ292WEc1bWRXNWpkR2x2YmlCdmJrMWxjM05oWjJVb1kyOXNkVzF1UkdGMFlUb2dZVzU1VzEwc0lHMWxkR2h2WkRvZ1MyNXZkMjVOWlhSb2IyUnpMQ0J0WldGemRYSmxPaUJMYm05M2JrMWxkSEpwWTNNc0lHOXdkR2x2Ym5NL09pQmhibmtwSUh0Y2JpQWdZMjl1YzNRZ2NtVmtkV05sY2lBOUlHNWxkeUJFYVcxbGJuTnBiMjVoYkdsMGVWSmxaSFZqWlhJb1hHNGdJQ0FnWTI5c2RXMXVSR0YwWVN4Y2JpQWdJQ0J0WlhSb2IyUXNYRzRnSUNBZ2JXVmhjM1Z5WlN4Y2JpQWdJQ0J2Y0hScGIyNXpMRnh1SUNBcE8xeHVJQ0J5WlhSMWNtNGdjbVZrZFdObGNpNTBjbUZ1YzJadmNtMG9kSEoxWlNrN1hHNTlYRzVjYm5ObGJHWXViMjV0WlhOellXZGxJRDBnS0h0a1lYUmhPaUI3WTI5c2RXMXVSR0YwWVN3Z2JXVjBhRzlrTENCdFpXRnpkWEpsTENCdmNIUnBiMjV6ZlgwcElEMCtJSHRjYmlBZ1kyOXVjM1FnWlcxaVpXUmthVzVuSUQwZ2IyNU5aWE56WVdkbEtHTnZiSFZ0YmtSaGRHRXNJRzFsZEdodlpDd2diV1ZoYzNWeVpTd2diM0IwYVc5dWN5azdYRzRnSUhObGJHWXVjRzl6ZEUxbGMzTmhaMlVvZTF4dUlDQWdJR1JwYzNSaGJtTmxPaUJsYldKbFpHUnBibWN1WkdsemRHRnVZMlVzWEc0Z0lDQWdaVzFpWldSa2FXNW5PaUJsYldKbFpHUnBibWN1WlcxaVpXUmthVzVuTEZ4dUlDQjlLVHRjYm4wN1hHNGlYWDA9Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9
|